extends Node @warning_ignore("unused_signal") signal on_game_paused @warning_ignore("unused_signal") signal on_game_resumed @warning_ignore("unused_signal") signal on_photo_highlighted(teture: Texture) @warning_ignore("unused_signal") signal on_enable_photo_mode_request @warning_ignore("unused_signal") signal on_disable_photo_mode_request @warning_ignore("unused_signal") signal on_photo_taken_prepare @warning_ignore("unused_signal") signal on_photo_taken_started @warning_ignore("unused_signal") signal on_photo_taken_making @warning_ignore("unused_signal") signal on_photo_taken_finished @warning_ignore("unused_signal") signal on_photo_mode_black_screen_disappeared const SAVE_PATH: String = "user://savegame.json" var save_data: SaveGameData = SaveGameData.new() var is_loaded: bool = false func _ready() -> void: load_game() apply_video_settings() func apply_video_settings() -> void: get_viewport().use_taa = save_data.anti_aliasing var msaa_mode = Viewport.MSAA_2X if save_data.anti_aliasing else Viewport.MSAA_DISABLED get_viewport().msaa_3d = msaa_mode get_viewport().msaa_2d = msaa_mode match save_data.window_mode_index: 0: DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_EXCLUSIVE_FULLSCREEN) 1: DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN) 2: DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED) DisplayServer.window_set_flag(DisplayServer.WINDOW_FLAG_BORDERLESS, false) if save_data.window_mode_index == 2 and save_data.resolution_x > 0 and save_data.resolution_y > 0: DisplayServer.window_set_size(Vector2i(save_data.resolution_x, save_data.resolution_y)) # Optional: center the window if resized var screen_center = DisplayServer.screen_get_position() + DisplayServer.screen_get_size() / 2 var window_size = DisplayServer.window_get_size() DisplayServer.window_set_position(screen_center - window_size / 2) func save_game() -> void: var save_file = FileAccess.open(SAVE_PATH, FileAccess.WRITE) var json_string = JSON.stringify(save_data.to_dictionary()) save_file.store_line(json_string) func load_game() -> void: if not FileAccess.file_exists(SAVE_PATH): save_data = SaveGameData.new() is_loaded = true return var file = FileAccess.open(SAVE_PATH, FileAccess.READ) var json_string = file.get_as_text() var json = JSON.new() var parse_result = json.parse(json_string) save_data = SaveGameData.new() if parse_result == OK and json.data is Dictionary: save_data = SaveGameData.from_dictionary(json.data) is_loaded = true func pause_game() -> void: get_tree().paused = true func resume_game() -> void: get_tree().paused = false func quit_game() -> void: SceneManager.quit_game()