package lab.gui; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import javafx.animation.AnimationTimer; import javafx.beans.value.ObservableValue; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.canvas.Canvas; import javafx.scene.control.Label; import javafx.scene.control.Slider; import lab.game.DeadListener; import lab.game.DrawingThread; import lab.game.Level; import lab.game.Monster; import lab.game.MujListener; public class GameController { private static Logger log = LogManager.getLogger(GameController.class); private AnimationTimer timer; private Level level; @FXML private Slider angle; @FXML private Canvas canvas; @FXML private Slider speed; @FXML private Label playerName; private int deadCount; @FXML void spawn(ActionEvent event) { // level.getPlayer().spawn(); Monster monster = new Monster(level); monster.addDeadListener(new MujListener()); monster.addDeadListener(new Dead()); monster.addDeadListener(() -> System.out.println("another lambda dead")); monster.addDeadListener(this::updateDeadLabel); level.add(monster); } private void updateDeadLabel() { deadCount++; playerName.setText(String.format("Deads: %03d", deadCount)); } @FXML void initialize() { assert angle != 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'."; angle.valueProperty() .addListener((observable, oldValue, newValue) -> level.getPlayer().setAngle(newValue.doubleValue())); speed.valueProperty() .addListener((ObservableValue<? extends Number> observable, Number oldValue, Number newValue) -> { level.getPlayer().setSpeed(newValue.doubleValue()); }); log.info("Screeen initialized."); } public void startGame(String name, int numberOfMonsters) { playerName.setText(name); level = new Level(canvas.getWidth(), canvas.getHeight(), numberOfMonsters); timer = new DrawingThread(canvas, level); timer.start(); } public void stop() { timer.stop(); } private class Dead implements DeadListener { @Override public void monsterDead() { System.out.println("Named dead"); } } }