Refactor save system and game manager; improve game restart functionality and state management
This commit is contained in:
@@ -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"]:
|
||||
|
@@ -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"]
|
||||
|
@@ -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()
|
||||
skill_manager.apply_unlocked_skills()
|
||||
|
@@ -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:
|
||||
|
@@ -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:
|
||||
|
@@ -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
|
||||
|
|
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user