Skip to content
Snippets Groups Projects
App.java 2.40 KiB
package lab.gui;

import java.io.IOException;
import java.net.URL;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import lab.Config;

/**
 * Class <b>App</b> - extends class Application and it is an entry point of the
 * program
 * 
 * @author Java I
 */
public class App extends Application {

	private static Logger log = LogManager.getLogger(App.class);
	private GameController gameController;
	
	private Stage primaryStage;
	
	public static void main(String[] args) {
		log.info("Application lauched");
		Config.configure(Config.getInstanceForHardcoreGame());
		launch(args);
	}

	@Override
	public void start(Stage primaryStage) {
		try {
			this.primaryStage = primaryStage;
			switchToMenu();
			primaryStage.setTitle("Java 2 - 2th laboratory");
			primaryStage.show();
			// Exit program when main window is closed
			primaryStage.setOnCloseRequest(this::exitProgram);
		} catch (Exception e) {
			log.error("Error during game play.", e);
		}
	}

	public void switchToGame(String name, int numberOfMonsters) throws IOException {
		// Construct a main window with a canvas.
		FXMLLoader gameLoader = new FXMLLoader(getClass().getResource("/lab/gui/gameWindow.fxml"));
		Parent root = gameLoader.load();
		gameController = gameLoader.getController();
		Scene scene = new Scene(root);
		URL cssUrl = getClass().getResource("application.css");
		scene.getStylesheets().add(cssUrl.toString());
		primaryStage.setScene(scene);
		gameController.startGame(name, numberOfMonsters);
	}
	private void switchToMenu() throws IOException {
		// Construct a main window with a canvas.
		FXMLLoader menuLoader = new FXMLLoader(getClass().getResource("/lab/gui/mainScreen.fxml"));
		Parent root = menuLoader.load();
		MainScreenController menuController = menuLoader.getController();
		menuController.setApp(this);
		Scene scene = new Scene(root);
		URL cssUrl = getClass().getResource("application.css");
		scene.getStylesheets().add(cssUrl.toString());
		primaryStage.setScene(scene);
	}

	@Override
	public void stop() throws Exception {
		if(gameController != null) {
			gameController.stop();
		}
		super.stop();
		log.info("Gamne stoped");
	}

	private void exitProgram(WindowEvent evt) {
		log.info("Exiting game");
		System.exit(0);
	}
}