Refactor save system and game manager; improve game restart functionality and state management

This commit is contained in:
2025-05-25 18:36:02 +02:00
parent 7c0778702d
commit 99ed007593
8 changed files with 22 additions and 12 deletions

View File

@@ -27,7 +27,8 @@ func load_game() -> bool:
if save_data.has("version") and save_data["version"] != version: if save_data.has("version") and save_data["version"] != version:
print("Save file version mismatch. Expected: ", version, ", Found: ", save_data["version"]) print("Save file version mismatch. Expected: ", version, ", Found: ", save_data["version"])
return false return false
print("Game state loaded from: ", save_path)
print("Player state: ", save_data["player_state"])
gm.player_state = save_data["player_state"] gm.player_state = save_data["player_state"]
var skills: Array[String] = [] var skills: Array[String] = []
for skill_name in gm.player_state["unlocked_skills"]: for skill_name in gm.player_state["unlocked_skills"]:

View File

@@ -114,5 +114,8 @@ metadata/_custom_type_script = "uid://8r1y8elyw7kt"
[node name="Killzone" parent="." instance=ExtResource("13_0vx27")] [node name="Killzone" parent="." instance=ExtResource("13_0vx27")]
position = Vector2(215, 324) 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="Brick Player"]
[editable path="UI Layer"] [editable path="UI Layer"]

View File

@@ -22,7 +22,7 @@ func try_unlock_skill(skill_data: SkillData) -> bool:
return false return false
game_manager.remove_coins(skill_data.cost) 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) skill_manager.add_skill(skill_data)
return true return true
@@ -35,4 +35,4 @@ func unlock_all_skills() -> void:
skills.append(skill.name) skills.append(skill.name)
game_manager.unlock_skills(skills) game_manager.unlock_skills(skills)
skill_manager.apply_unlocked_skills() skill_manager.apply_unlocked_skills()

View File

@@ -8,13 +8,12 @@ extends Node
"lives": 3, "lives": 3,
"unlocked_skills": [], "unlocked_skills": [],
"current_level": 0, "current_level": 0,
"unlocked_levels": [], "unlocked_levels": [0],
"completed_levels": [], "completed_levels": [],
} }
var nodes_in_scene := [] var nodes_in_scene := []
var current_session_state := { var current_session_state := {
"coins_collected": 0, "coins_collected": 0,
"skills_unlocked": [], "skills_unlocked": [],
@@ -135,6 +134,8 @@ func reset_player_state() -> void:
"coins": 0, "coins": 0,
"lives": 3, "lives": 3,
"unlocked_skills": [], "unlocked_skills": [],
"current_level": 0,
"unlocked_levels": [0],
"completed_levels": [], "completed_levels": [],
} }
@@ -150,7 +151,6 @@ func try_to_go_to_next_level() -> void:
get_tree().change_scene_to_packed(level_scenes[next_level]) get_tree().change_scene_to_packed(level_scenes[next_level])
func mark_level_complete(level_index: int) -> void: func mark_level_complete(level_index: int) -> void:
unlock_level(level_index + 1) unlock_level(level_index + 1)
if level_index not in player_state["completed_levels"]: player_state["completed_levels"].append(level_index) 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: func quit_game() -> void:
get_tree().quit() get_tree().quit()
@@ -177,9 +185,9 @@ func resume_game() -> void:
func start_new_game() -> void: func start_new_game() -> void:
reset_player_state() reset_player_state()
player_state["current_level"] = 0 reset_current_session_state()
player_state["unlocked_levels"] = [0] # Start with the first level unlocked
get_tree().change_scene_to_packed(level_scenes[0]) get_tree().change_scene_to_packed(level_scenes[0])
SaveSystem.save_game()
func continue_game() -> void: func continue_game() -> void:

View File

@@ -22,9 +22,7 @@ func on_restart_button_pressed() -> void:
if not gm: if not gm:
return return
gm.reset_player_state() gm.restart_game()
gm.reset_current_session_state()
get_tree().reload_current_scene()
func on_main_menu_button_pressed() -> void: func on_main_menu_button_pressed() -> void:

View File

@@ -42,7 +42,7 @@ LEVEL_4_NAME,VILLAGE 4,WIOSKA 4
LEVEL_5_NAME,VILLAGE 5,WIOSKA 5 LEVEL_5_NAME,VILLAGE 5,WIOSKA 5
MARKETPLACE,MARKETPLACE,SKLEP MARKETPLACE,MARKETPLACE,SKLEP
GAME_OVER,GAME OVER,KONIEC GRY 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 GO_TO_MENU_BUTTON,GO TO MENU,WRÓĆ DO MENU
BRICK_POWER,Brick power,Ceglana siła BRICK_POWER,Brick power,Ceglana siła
EXPLOSIVE_BRICK,Explosive brick,Wybuchowa cegła EXPLOSIVE_BRICK,Explosive brick,Wybuchowa cegła
1 key en pl
42 EXPLOSIVE_BRICK_DESCRIPTION Allows you to throw explosive bricks at enemies Pozwala Panu Cegle rzucać wybuchającymi cegłami w przeciwników
43 FIRE_BIRCK_DESCRIPTION Allows you to throw fire bricks at enemies Pozwala Panu Cegle rzucać ognistymi cegłami w przeciwników
44 ICE_BRICK_DESCRIPTION Allows you to throw ice bricks at enemies Pozwala Panu Cegle rzucać lodowymi cegłami w przeciwników
45 MAGNETIC_DESCRIPTION Attract coins Przyciąga monety w pobliżu
46 LEVEL_1_TOOLTIP_1 Some blocks might collapse Niektóre bloki mogą się zapaść.
47 LEVEL_1_TOOLTIP_2 Jump to the other side! Przeskocz na drugą stronę!
48 LEVEL_1_TOOLTIP_3 To rescue your child, you need to find the lever. Uratuj dziecko poprzez aktywację dźwigni.

Binary file not shown.

Binary file not shown.