Files
comp1206-tetrecs/src/main/java/uk/ac/soton/comp1206/scene/ChallengeScene.java
2023-03-10 10:58:11 +00:00

84 lines
2.3 KiB
Java

package uk.ac.soton.comp1206.scene;
import javafx.scene.layout.*;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import uk.ac.soton.comp1206.component.GameBlock;
import uk.ac.soton.comp1206.component.GameBoard;
import uk.ac.soton.comp1206.game.Game;
import uk.ac.soton.comp1206.ui.GamePane;
import uk.ac.soton.comp1206.ui.GameWindow;
/**
* The Single Player challenge scene. Holds the UI for the single player challenge mode in the game.
*/
public class ChallengeScene extends BaseScene {
private static final Logger logger = LogManager.getLogger(MenuScene.class);
protected Game game;
/**
* Create a new Single Player challenge scene
* @param gameWindow the Game Window
*/
public ChallengeScene(GameWindow gameWindow) {
super(gameWindow);
logger.info("Creating Challenge Scene");
}
/**
* Build the Challenge window
*/
@Override
public void build() {
logger.info("Building " + this.getClass().getName());
setupGame();
root = new GamePane(gameWindow.getWidth(),gameWindow.getHeight());
var challengePane = new StackPane();
challengePane.setMaxWidth(gameWindow.getWidth());
challengePane.setMaxHeight(gameWindow.getHeight());
challengePane.getStyleClass().add("menu-background");
root.getChildren().add(challengePane);
var mainPane = new BorderPane();
challengePane.getChildren().add(mainPane);
var board = new GameBoard(game.getGrid(),gameWindow.getWidth()/2,gameWindow.getWidth()/2);
mainPane.setCenter(board);
//Handle block on gameboard grid being clicked
board.setOnBlockClick(this::blockClicked);
}
/**
* Handle when a block is clicked
* @param gameBlock the Game Block that was clocked
*/
private void blockClicked(GameBlock gameBlock) {
game.blockClicked(gameBlock);
}
/**
* Setup the game object and model
*/
public void setupGame() {
logger.info("Starting a new challenge");
//Start new game
game = new Game(5, 5);
}
/**
* Initialise the scene and start the game
*/
@Override
public void initialise() {
logger.info("Initialising Challenge");
game.start();
}
}