package dev.llan.view; import dev.llan.controller.Controller; import dev.llan.events.GameEvent; import dev.llan.model.GameRecord; import dev.llan.model.state.State; import dev.llan.receivers.Observer; import dev.llan.receivers.Receiver; import dev.llan.view.game.EndView; import dev.llan.view.game.GameView; import dev.llan.view.game.TitleScreenView; import dev.llan.view.game.WinView; import dev.llan.view.game.modals.ModalManager; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.layout.StackPane; import javafx.stage.Stage; import static dev.llan.view.game.map.Constants.*; public class View implements RenderComponent, Observer { private final Controller pc; private final Stage stage; private Scene scene; private StackPane layout; private final TitleScreenView titleView; private final GameView gameView; private final EndView endView; private final WinView winView; private final ModalManager modalManager; private boolean gameControlsEnabled = false; private boolean newGameCalled = false; public View(Receiver receiver, Controller pc, Stage stage) { this.pc = pc; this.stage = stage; layout = new StackPane(); initScene(); titleView = new TitleScreenView(this, receiver); gameView = new GameView(this, pc, scene, layout); endView = new EndView(this); winView = new WinView(this); layout.getChildren().add(titleView.render()); modalManager = new ModalManager(this, gameView, pc, layout); } private void initScene() { this.scene = new Scene(this.render(), BASE_WIDTH, BASE_HEIGHT); scene.getStylesheets().add("styles/main.css"); } public Scene getScene() { return scene; } public ModalManager getModalManager() { return modalManager; } public void returnToHome() { layout.getChildren().clear(); titleView.update(); layout.getChildren().add(titleView.render()); } public void setGameView(boolean on) { if (on) { titleView.setLoading(true); newGameCalled = true; pc.newGame(); } } public boolean isGameControlsEnabled() { return gameControlsEnabled; } @Override public void update(GameEvent event) { GameRecord gameRecord = event.getGame(); if (gameRecord.getGameState() == State.END) { gameView.removeHandlers(); layout.getChildren().clear(); layout.getChildren().add(endView.render()); } else if (gameRecord.getGameState() == State.WIN) { gameView.removeHandlers(); layout.getChildren().clear(); layout.getChildren().add(winView.render()); } else { gameView.updateGameRecord(gameRecord); modalManager.updateGameRecord(gameRecord); } if(newGameCalled) { layout.getChildren().clear(); layout.getChildren().add(gameView.render()); gameControlsEnabled = true; gameView.initHandlers(); newGameCalled = false; titleView.setLoading(false); } if (event.getDisableControls()) { gameControlsEnabled = false; gameView.setControlsEnabled(false); } if(event.getEnableControls()) { gameControlsEnabled = true; gameView.setControlsEnabled(true); } } @Override public Parent render() { return layout; } }