Skip to content
Snippets Groups Projects
SettingsController.java 5.78 KiB
Newer Older
  • Learn to ignore specific revisions
  • Robert Goldmann's avatar
    Robert Goldmann committed
    package de.bricked.ui;
    
    import java.io.IOException;
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    import java.util.ArrayList;
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    import java.util.Locale;
    import java.util.ResourceBundle;
    
    import de.bricked.game.Game;
    import de.bricked.game.settings.GameSize;
    import de.bricked.ui.cells.ComboBoxLanguageCell;
    import de.bricked.ui.cells.ComboBoxResolutionCell;
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    import javafx.beans.property.SimpleStringProperty;
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    import javafx.beans.value.ChangeListener;
    import javafx.beans.value.ObservableValue;
    import javafx.fxml.FXML;
    import javafx.scene.control.Button;
    import javafx.scene.control.CheckBox;
    import javafx.scene.control.ComboBox;
    import javafx.scene.control.Label;
    import javafx.scene.control.ListCell;
    import javafx.scene.control.ListView;
    import javafx.scene.control.Slider;
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    import javafx.scene.control.TableColumn;
    import javafx.scene.control.TableColumn.CellDataFeatures;
    import javafx.scene.control.TableView;
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    import javafx.scene.image.Image;
    import javafx.scene.layout.AnchorPane;
    import javafx.stage.Stage;
    import javafx.util.Callback;
    import logger.LogLevel;
    import logger.Logger;
    
    public class SettingsController
    {
    	@FXML private AnchorPane mainPane;
    	@FXML private Label labelLevelPack;
    	@FXML private Button buttonBack;
    	@FXML private Button buttonSave;
    	@FXML private ComboBox<GameSize> comboBoxResolution;
    	@FXML private ComboBox<LanguageType> comboBoxLanguage;
    	@FXML private CheckBox checkBoxSound;
    	@FXML private Slider sliderVolume;
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    	@FXML private TableView<Control> tableViewControls;
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    
    	public Stage stage;
    	public Image icon = new Image("de/bricked/resources/icon.png");
    	public final ResourceBundle bundle = ResourceBundle.getBundle("de/bricked/main/", Locale.GERMANY);
    	public Controller controller;
    	public Game game;
    
    	public void init(Stage stage, Controller controller, Game game)
    	{
    		this.stage = stage;
    		this.controller = controller;
    		this.game = game;
    
    		comboBoxResolution.setCellFactory(new Callback<ListView<GameSize>, ListCell<GameSize>>()
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    		{
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    			@Override
    			public ListCell<GameSize> call(ListView<GameSize> param)
    			{
    				return new ComboBoxResolutionCell();
    			}
    		});
    		comboBoxResolution.setButtonCell(new ComboBoxResolutionCell());
    		comboBoxResolution.getItems().addAll(GameSize.values());
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    		comboBoxLanguage.setCellFactory(new Callback<ListView<LanguageType>, ListCell<LanguageType>>()
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    		{
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    			@Override
    			public ListCell<LanguageType> call(ListView<LanguageType> param)
    			{
    				return new ComboBoxLanguageCell();
    			}
    		});
    		comboBoxLanguage.setButtonCell(new ComboBoxLanguageCell());
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    		comboBoxLanguage.getItems().addAll(LanguageType.values());
    
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    		checkBoxSound.selectedProperty().addListener(new ChangeListener<Boolean>()
    		{
    			@Override
    			public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue)
    			{
    				if(newValue == true)
    				{
    					sliderVolume.setDisable(false);
    				}
    				else
    				{
    					sliderVolume.setDisable(true);
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    				}
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    			}
    		});
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    
    		// preselect
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    		comboBoxResolution.setValue(game.getSettings().getGameSize());
    		comboBoxLanguage.setValue(game.getSettings().getLanguage());
    		if(game.getSettings().isMuted())
    		{
    			checkBoxSound.setSelected(false);
    			sliderVolume.setDisable(true);
    		}
    		else
    		{
    			checkBoxSound.setSelected(true);
    			sliderVolume.setDisable(false);
    		}
    		sliderVolume.setValue(game.getSettings().getVolume() * 100);
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    
    		initTableViewControls();
    
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    		mainPane.setStyle("-fx-base: " + bundle.getString("color.background") + ";");
    	}
    
    	public void save()
    	{
    		game.getSettings().setGameSize(comboBoxResolution.getValue());
    		game.getSettings().setLanguage(comboBoxLanguage.getValue());
    		game.getSettings().setMuted(!checkBoxSound.isSelected());
    		game.getSettings().setVolume(sliderVolume.getValue() / 100.0);
    		game.getSettings().save();
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    		game.refreshSoundHandler();
    		stage.close();
    		controller.stage.show();
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    
    		// TODO load correct language file
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    	}
    
    	public void back()
    	{
    		stage.close();
    		controller.stage.show();
    	}
    
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    	private void initTableViewControls()
    	{
    		ArrayList<Control> controls = new ArrayList<>();
    		controls.add(new Control("Start Ball", "Space / Left Mouse Button"));
    		controls.add(new Control("Move Paddle", "Arrow Keys / Mouse"));
    		controls.add(new Control("Pause", "P"));
    		controls.add(new Control("Exit Level / Back", "Esc"));
    
    		TableColumn<Control, String> columnAction = new TableColumn<>("Action");
    		columnAction.setCellValueFactory(new Callback<CellDataFeatures<Control, String>, ObservableValue<String>>()
    		{
    			public ObservableValue<String> call(CellDataFeatures<Control, String> param)
    			{
    				Control control = (Control)param.getValue();
    				return new SimpleStringProperty(control.getAction());
    			}
    		});
    		tableViewControls.getColumns().add(columnAction);
    		columnAction.setStyle( "-fx-alignment: CENTER; -fx-font-weight: bold;");
    		columnAction.prefWidthProperty().bind(tableViewControls.widthProperty().divide(2).subtract(2));
    		columnAction.setResizable(false);		
    		columnAction.setSortable(false);
    		
    		TableColumn<Control, String> columnKey = new TableColumn<>("Key");
    		columnKey.setCellValueFactory(new Callback<CellDataFeatures<Control, String>, ObservableValue<String>>()
    		{
    			public ObservableValue<String> call(CellDataFeatures<Control, String> param)
    			{
    				Control control = (Control)param.getValue();
    				return new SimpleStringProperty(control.getKey());
    			}
    		});
    		tableViewControls.getColumns().add(columnKey);
    		columnKey.setStyle( "-fx-alignment: CENTER; -fx-font-weight: bold;");
    		columnKey.prefWidthProperty().bind(tableViewControls.widthProperty().divide(2).subtract(2));
    		columnKey.setResizable(false);	
    		columnKey.setSortable(false);
    		
    		tableViewControls.getItems().addAll(controls);
    	}
    
    
    Robert Goldmann's avatar
    Robert Goldmann committed
    	public void showCommandLine()
    	{
    		try
    		{
    			controller.getCommandLine().showCommandLine("Debug Console", 400, 250, 400, 200, -1, -1, true);
    		}
    		catch(IOException e)
    		{
    			// TODO: errorhandling
    			Logger.log(LogLevel.ERROR, Logger.exceptionToString(e));
    		}
    	}
    }