-
jez04 authored51d11e18
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();
}
}