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:
|
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"]:
|
||||||
|
@@ -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"]
|
||||||
|
@@ -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()
|
||||||
|
@@ -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:
|
||||||
|
@@ -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:
|
||||||
|
@@ -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
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user