Skip to content
Snippets Groups Projects
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");
		}
	}
}