An error occurred while loading the file. Please try again.
-
jez04 authoreddbab0775
GameController.java 2.32 KiB
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");
}
}
}