From 99ed007593c786635ba5681203f1d0f47f686564 Mon Sep 17 00:00:00 2001 From: Gabriel Kaszewski Date: Sun, 25 May 2025 18:36:02 +0200 Subject: [PATCH] Refactor save system and game manager; improve game restart functionality and state management --- autoloads/save_system.gd | 3 ++- objects/level/base_level.tscn | 3 +++ .../components/skill_unlocker_component.gd | 4 ++-- scripts/game_manager.gd | 18 +++++++++++++----- scripts/ui/game_over_screen.gd | 4 +--- translations.csv | 2 +- translations.en.translation | Bin 2562 -> 2558 bytes translations.pl.translation | Bin 2997 -> 2997 bytes 8 files changed, 22 insertions(+), 12 deletions(-) diff --git a/autoloads/save_system.gd b/autoloads/save_system.gd index 1564692..34eafeb 100644 --- a/autoloads/save_system.gd +++ b/autoloads/save_system.gd @@ -27,7 +27,8 @@ func load_game() -> bool: if save_data.has("version") and save_data["version"] != version: print("Save file version mismatch. Expected: ", version, ", Found: ", save_data["version"]) return false - + print("Game state loaded from: ", save_path) + print("Player state: ", save_data["player_state"]) gm.player_state = save_data["player_state"] var skills: Array[String] = [] for skill_name in gm.player_state["unlocked_skills"]: diff --git a/objects/level/base_level.tscn b/objects/level/base_level.tscn index ead55c3..c9a9b37 100644 --- a/objects/level/base_level.tscn +++ b/objects/level/base_level.tscn @@ -114,5 +114,8 @@ metadata/_custom_type_script = "uid://8r1y8elyw7kt" [node name="Killzone" parent="." instance=ExtResource("13_0vx27")] position = Vector2(215, 324) +[connection signal="on_death" from="Brick Player/HealthComponent" to="UI Layer/DeathScreen" method="on_player_death"] +[connection signal="on_death" from="Brick Player/HealthComponent" to="UI Layer/GameOverScreen" method="on_player_death"] + [editable path="Brick Player"] [editable path="UI Layer"] diff --git a/scripts/components/skill_unlocker_component.gd b/scripts/components/skill_unlocker_component.gd index 143194a..807d8bf 100644 --- a/scripts/components/skill_unlocker_component.gd +++ b/scripts/components/skill_unlocker_component.gd @@ -22,7 +22,7 @@ func try_unlock_skill(skill_data: SkillData) -> bool: return false game_manager.remove_coins(skill_data.cost) - game_manager.current_session_state["unlocked_skills"].append(skill_data.name) + game_manager.current_session_state["skills_unlocked"].append(skill_data.name) skill_manager.add_skill(skill_data) return true @@ -35,4 +35,4 @@ func unlock_all_skills() -> void: skills.append(skill.name) game_manager.unlock_skills(skills) - skill_manager.apply_unlocked_skills() \ No newline at end of file + skill_manager.apply_unlocked_skills() diff --git a/scripts/game_manager.gd b/scripts/game_manager.gd index 76d39af..cd1f22a 100644 --- a/scripts/game_manager.gd +++ b/scripts/game_manager.gd @@ -8,13 +8,12 @@ extends Node "lives": 3, "unlocked_skills": [], "current_level": 0, - "unlocked_levels": [], + "unlocked_levels": [0], "completed_levels": [], } var nodes_in_scene := [] - var current_session_state := { "coins_collected": 0, "skills_unlocked": [], @@ -135,6 +134,8 @@ func reset_player_state() -> void: "coins": 0, "lives": 3, "unlocked_skills": [], + "current_level": 0, + "unlocked_levels": [0], "completed_levels": [], } @@ -150,7 +151,6 @@ func try_to_go_to_next_level() -> void: get_tree().change_scene_to_packed(level_scenes[next_level]) - func mark_level_complete(level_index: int) -> void: unlock_level(level_index + 1) if level_index not in player_state["completed_levels"]: player_state["completed_levels"].append(level_index) @@ -163,6 +163,14 @@ func reset_current_session_state() -> void: } + +func restart_game() -> void: + reset_player_state() + reset_current_session_state() + get_tree().change_scene_to_packed(level_scenes[0]) + SaveSystem.save_game() + + func quit_game() -> void: get_tree().quit() @@ -177,9 +185,9 @@ func resume_game() -> void: func start_new_game() -> void: reset_player_state() - player_state["current_level"] = 0 - player_state["unlocked_levels"] = [0] # Start with the first level unlocked + reset_current_session_state() get_tree().change_scene_to_packed(level_scenes[0]) + SaveSystem.save_game() func continue_game() -> void: diff --git a/scripts/ui/game_over_screen.gd b/scripts/ui/game_over_screen.gd index cc19c5b..1086262 100644 --- a/scripts/ui/game_over_screen.gd +++ b/scripts/ui/game_over_screen.gd @@ -22,9 +22,7 @@ func on_restart_button_pressed() -> void: if not gm: return - gm.reset_player_state() - gm.reset_current_session_state() - get_tree().reload_current_scene() + gm.restart_game() func on_main_menu_button_pressed() -> void: diff --git a/translations.csv b/translations.csv index 88c6750..a1ede99 100644 --- a/translations.csv +++ b/translations.csv @@ -42,7 +42,7 @@ LEVEL_4_NAME,VILLAGE – 4,WIOSKA – 4 LEVEL_5_NAME,VILLAGE – 5,WIOSKA – 5 MARKETPLACE,MARKETPLACE,SKLEP GAME_OVER,GAME OVER,KONIEC GRY -RESTART_LEVEL_BUTTON,RESTART LEVEL,POTWÓRZ POZIOM +RESTART_LEVEL_BUTTON,RESTART GAME,ZACZNIJ OD NOWA GO_TO_MENU_BUTTON,GO TO MENU,WRÓĆ DO MENU BRICK_POWER,Brick power,Ceglana siła EXPLOSIVE_BRICK,Explosive brick,Wybuchowa cegła diff --git a/translations.en.translation b/translations.en.translation index e498ad6618e8a671e8786b79d4e38220f5e17c10..df431f6d36f021b6b397deb16d14230a8d4a0d9a 100644 GIT binary patch delta 211 zcmZn?`6s;L9TTI|k8lNOwMN!mt}wcV+#P*gH*evvXXIgrDhmn@as~jaaWd-w delta 215 zcmew-+$6H$9TTJTk8lNl*#Xba(^eYv!pX>PR?f$mtiRj*yQJ|{fz4;m$T_hUIl972I>Z3m>2ri%GjYwgMx#c0fYH7VE_OC diff --git a/translations.pl.translation b/translations.pl.translation index 371160f2726eba624b292644c911a88ec4112797..775000ecc25dd0cc6caddc3acd6975aad83e7cfc 100644 GIT binary patch delta 28 jcmdlgzEylf2Pc1&qjQv>r= delta 28 kcmdlgzEylf2Pc1ke@OV@$w5&H0sc{*{=S>1bILIR0G9a)rT_o{