package views; import AdventureModel.AdventureGame; import AdventureModel.AdventureObject; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.layout.VBox; import javafx.scene.text.Font; import javafx.stage.Modality; import javafx.stage.Stage; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; /** * Class SaveView. * * Saves Serialized adventure games. */ public class SaveView { static String saveFileSuccess = "Saved Adventure Game!!"; static String saveFileExistsError = "Error: File already exists"; static String saveFileNotSerError = "Error: File must end with .ser"; private Label saveFileErrorLabel = new Label(""); private Label saveGameLabel = new Label(String.format("Enter name of file to save")); private TextField saveFileNameTextField = new TextField(""); private Button saveGameButton = new Button("Save Game"); private Button closeWindowButton = new Button("Close Window"); private AdventureGameView adventureGameView; /** * Constructor */ public SaveView(AdventureGameView adventureGameView) { this.adventureGameView = adventureGameView; final Stage dialog = new Stage(); dialog.initModality(Modality.APPLICATION_MODAL); dialog.initOwner(adventureGameView.stage); VBox dialogVbox = new VBox(20); dialogVbox.setPadding(new Insets(20, 20, 20, 20)); dialogVbox.setStyle("-fx-background-color: #121212;"); saveGameLabel.setId("SaveGame"); // DO NOT MODIFY ID saveFileErrorLabel.setId("SaveFileErrorLabel"); saveFileNameTextField.setId("SaveFileNameTextField"); saveGameLabel.setStyle("-fx-text-fill: #e8e6e3;"); saveGameLabel.setFont(new Font(16)); saveFileErrorLabel.setStyle("-fx-text-fill: #e8e6e3;"); saveFileErrorLabel.setFont(new Font(16)); saveFileNameTextField.setStyle("-fx-text-fill: #000000;"); saveFileNameTextField.setFont(new Font(16)); String gameName = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date()) + ".ser"; saveFileNameTextField.setText(gameName); saveGameButton = new Button("Save board"); saveGameButton.setId("SaveBoardButton"); // DO NOT MODIFY ID saveGameButton.setStyle("-fx-background-color: #17871b; -fx-text-fill: white;"); saveGameButton.setPrefSize(200, 50); saveGameButton.setFont(new Font(16)); AdventureGameView.makeButtonAccessible(saveGameButton, "save game", "This is a button to save the game", "Use this button to save the current game."); saveGameButton.setOnAction(e -> saveGame()); closeWindowButton = new Button("Close Window"); closeWindowButton.setId("closeWindowButton"); // DO NOT MODIFY ID closeWindowButton.setStyle("-fx-background-color: #17871b; -fx-text-fill: white;"); closeWindowButton.setPrefSize(200, 50); closeWindowButton.setFont(new Font(16)); closeWindowButton.setOnAction(e -> dialog.close()); AdventureGameView.makeButtonAccessible(closeWindowButton, "close window", "This is a button to close the save game window", "Use this button to close the save game window."); VBox saveGameBox = new VBox(10, saveGameLabel, saveFileNameTextField, saveGameButton, saveFileErrorLabel, closeWindowButton); saveGameBox.setAlignment(Pos.CENTER); dialogVbox.getChildren().add(saveGameBox); Scene dialogScene = new Scene(dialogVbox, 400, 400); dialog.setScene(dialogScene); dialog.show(); } /** * Saves the Game * Save the game to a serialized (binary) file. * Get the name of the file from saveFileNameTextField. * Files will be saved to the Games/Saved directory. * If the file already exists, set the saveFileErrorLabel to the text in saveFileExistsError * If the file doesn't end in .ser, set the saveFileErrorLabel to the text in saveFileNotSerError * Otherwise, load the file and set the saveFileErrorLabel to the text in saveFileSuccess */ private void saveGame() { //throw new UnsupportedOperationException("saveGame is not implemented!"); File file = new File("Games/saved/" + saveFileNameTextField.getText()); if (file.exists()){ //two cases the file ends in ser or not if (file.getName().endsWith(".ser") && file.isFile()){ saveFileErrorLabel.setText(saveFileExistsError); } } else{ if (file.getName().endsWith(".ser")){ adventureGameView.model.saveModel(file); saveFileErrorLabel.setText(saveFileSuccess); } else { saveFileErrorLabel.setText(saveFileNotSerError); } } //adventureGameView.model.saveModel(); } }