Skip to content
Snippets Groups Projects
GameController.java 3.05 KiB
package lab;

import java.util.List;

import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.canvas.Canvas;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;

public class GameController {

	private Scene scene;

    @FXML
    private Button btnGenerateScore;

    @FXML
    private Button btnLoadAll;

    @FXML
    private Button btnLoadFirstTen;

	@FXML
    private TableView<Score> scores;

	@FXML
    private TableColumn<Score, String> nickColumn;

    @FXML
    private TableColumn<Score, Integer> pointsColumn;

    @FXML
	private Slider boatPosition;

	private DrawingThread timer;

	@FXML
	private Canvas canvas;

	@FXML
	private Slider speed;

	@FXML
	private Label playerName;

	private int deadLochNessCounter = 0;
	
	@FXML
	void changePosition(ActionEvent event) {
		LochNess lochNess = new LochNess(scene);
		lochNess.addDeadListener(() -> System.out.println("LochNess dead!"));
		lochNess.addDeadListener(this::addDead);
		scene.add(lochNess);

	}
	
	private void addDead() {
		deadLochNessCounter++;
		updateDeadLabel();
	}

	private void updateDeadLabel() {
		playerName.setText(String.format("Number of dead lochnesses: %03d", deadLochNessCounter));
	}

    @FXML
    void btnGenerateScoreAction(ActionEvent event) {
    	Score score = Score.generate();
    	this.scores.getItems().add(score);
    	DbConnector.insertScore(score);
    }

    @FXML
    void btnLoadAllAction(ActionEvent event) {
    	updateScoreTable(DbConnector.getAll());
    }

    @FXML
    void btnLoadFirstTenAction(ActionEvent event) {
    	updateScoreTable(DbConnector.getFirstTen());
    }
    
    private void updateScoreTable(List<Score> scores) {
    	this.scores.getItems().clear();
    	this.scores.getItems().addAll(scores);
    }

	@FXML
	void initialize() {
		assert boatPosition != null : "fx:id=\"angle\" was not injected: check your FXML file 'gameWindow.fxml'.";
		assert canvas != null : "fx:id=\"canvas\" was not injected: check your FXML file 'gameWindow.fxml'.";
		assert speed != null : "fx:id=\"speed\" was not injected: check your FXML file 'gameWindow.fxml'.";
		boatPosition.valueProperty().addListener(new ChangeListener<Number>() {
			@Override
			public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
				scene.getBoat().setPosInPercentage(newValue.doubleValue());
			}
		});
		speed.valueProperty().addListener(new ChangeListener<Number>() {
			@Override
			public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
				scene.getBackground().setSpeed(newValue.doubleValue());
			}
		});

	}

	public void startGame(String name, int numberOfMonsters) {
		playerName.setText(name);
		scene = new Scene(canvas.getWidth(), canvas.getHeight(), numberOfMonsters);
		timer = new DrawingThread(canvas, scene);
		timer.start();

	}

	public void stop() {
		timer.stop();
	}

}