From 871ce40f8c5863bee7defd3cdb9f2c2bb302160f Mon Sep 17 00:00:00 2001 From: Ruslan Ignatov Date: Fri, 12 Dec 2025 13:53:38 +0300 Subject: [PATCH] Added game seed saving --- game/game.gd | 4 ++- managers/save_manager.gd | 60 +++++++++++++++++++++++++++++++++++++++- menu/main_menu.gd | 3 ++ menu/title_screen.gd | 7 ++--- 4 files changed, 67 insertions(+), 7 deletions(-) diff --git a/game/game.gd b/game/game.gd index 0927a3c..7726ebd 100644 --- a/game/game.gd +++ b/game/game.gd @@ -24,7 +24,7 @@ func _ready() -> void: pause_screen.hide() game_over_screen.hide() - start_game(SaveManager.game_data) + start_game(SaveManager.get_game_data()) func _input(event: InputEvent) -> void: @@ -93,6 +93,8 @@ func _show_main_menu() -> void: if _current_passage_scene: _current_passage_scene.queue_free() if _current_area_map_scene: _current_area_map_scene.queue_free() + SaveManager.save() + get_tree().paused = false get_tree().change_scene_to_file("res://menu/title_screen.tscn") diff --git a/managers/save_manager.gd b/managers/save_manager.gd index e060ca5..7513c55 100644 --- a/managers/save_manager.gd +++ b/managers/save_manager.gd @@ -1,4 +1,62 @@ extends Node -var game_data : GameData +const SAVE_FILE = "user://save.bin" +const SAVE_FILE_PASS = "save_file_data" + +const CATEGORY_GAME = "game" +const PARAMETER_GAME_SEED = "seed" +const PARAMETER_GAME_AREA_INDEX = "current_area_index" +const PARAMETER_GAME_STAGE_INDEX = "current_stage_index" +const PARAMETER_GAME_SECTOR_INDEX = "current_sector_index" + + +var _save_file: ConfigFile + +var _game_data : GameData + + +func _ready() -> void: + _load() + + +func save() -> void: + _save_file.set_value(CATEGORY_GAME, PARAMETER_GAME_SEED, _game_data.game_seed) + _save_file.set_value(CATEGORY_GAME, PARAMETER_GAME_AREA_INDEX, _game_data.current_area_index) + _save_file.set_value(CATEGORY_GAME, PARAMETER_GAME_AREA_INDEX, _game_data.current_stage_index) + _save_file.set_value(CATEGORY_GAME, PARAMETER_GAME_AREA_INDEX, _game_data.current_sector_index) + + _save_file.save_encrypted_pass(SAVE_FILE, SAVE_FILE_PASS) + + +func new_game() -> void: + _game_data.randomize() + + +func get_game_data() -> GameData: + return _game_data + + +func _load() -> void: + _save_file = ConfigFile.new() + _game_data = GameData.new() + + if _save_file.load_encrypted_pass(SAVE_FILE, SAVE_FILE_PASS) == OK: + _process_save_file() + + save() + + +func _process_save_file() -> void: + _game_data.game_seed = _save_file.get_value( + CATEGORY_GAME, PARAMETER_GAME_SEED, _game_data.game_seed + ) + _game_data.current_area_index = _save_file.get_value( + CATEGORY_GAME, PARAMETER_GAME_AREA_INDEX, _game_data.current_area_index + ) + _game_data.current_stage_index = _save_file.get_value( + CATEGORY_GAME, PARAMETER_GAME_AREA_INDEX, _game_data.current_stage_index + ) + _game_data.current_sector_index = _save_file.get_value( + CATEGORY_GAME, PARAMETER_GAME_AREA_INDEX, _game_data.current_sector_index + ) diff --git a/menu/main_menu.gd b/menu/main_menu.gd index a384fff..612988c 100644 --- a/menu/main_menu.gd +++ b/menu/main_menu.gd @@ -15,12 +15,15 @@ signal show_options func _ready() -> void: _init_focus() _setup_neighbors() + continue_button.disabled = SaveManager.get_game_data().game_seed == "" func _on_visibility_changed() -> void: if not is_node_ready(): return if not visible: return + continue_button.disabled = SaveManager.get_game_data().game_seed == "" + _init_focus() _setup_neighbors() diff --git a/menu/title_screen.gd b/menu/title_screen.gd index 228f039..2d358eb 100644 --- a/menu/title_screen.gd +++ b/menu/title_screen.gd @@ -21,14 +21,11 @@ func _show_menu(menu: Control) -> void: func _on_main_menu_continue_game() -> void: - print("continue") + get_tree().change_scene_to_file("res://game/game.tscn") func _on_main_menu_new_game() -> void: - var game_data := GameData.new() - game_data.randomize() - SaveManager.game_data = game_data - + SaveManager.new_game() get_tree().change_scene_to_file("res://game/game.tscn")