Skip to content

Commit

Permalink
Issue-48: Change check on player position vector, replace print w/ pu…
Browse files Browse the repository at this point in the history
…sh_error, add confirmation dialog to New Game, rename functions for Managers, move saving of Managers to SaveManager
  • Loading branch information
Tysterman74 committed Aug 21, 2024
1 parent 4afa101 commit 9dc4b60
Show file tree
Hide file tree
Showing 10 changed files with 107 additions and 108 deletions.
13 changes: 12 additions & 1 deletion #Scenes/MainMenu.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,15 @@
[ext_resource type="Texture2D" uid="uid://bfy3htfthvnvb" path="res://Art/Menus/Button_normal/quit-0.png" id="11_g0haw"]
[ext_resource type="Texture2D" uid="uid://cxnt3pjokwbjy" path="res://Art/Menus/Button_focused/quit-1.png" id="12_eqc6b"]

[node name="Main menu" type="Control"]
[node name="Main menu" type="Control" node_paths=PackedStringArray("start_new_game_dialog")]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_mwp8y")
start_new_game_dialog = NodePath("StartNewGameDialog")

[node name="TextureRect" type="TextureRect" parent="."]
layout_mode = 2
Expand Down Expand Up @@ -113,7 +114,17 @@ texture_focused = ExtResource("12_eqc6b")
ignore_texture_size = true
stretch_mode = 4

[node name="StartNewGameDialog" type="ConfirmationDialog" parent="."]
title = ""
initial_position = 4
size = Vector2i(300, 106)
ok_button_text = "Yes"
dialog_text = "You have a game in progress. Are you sure you want to start a new game?"
dialog_autowrap = true
cancel_button_text = "No"

[connection signal="pressed" from="Menu buttons/Continue" to="." method="_on_continue_pressed"]
[connection signal="pressed" from="Menu buttons/New game" to="." method="_on_start_pressed"]
[connection signal="pressed" from="Menu buttons/Options" to="." method="_on_options_pressed"]
[connection signal="pressed" from="Menu buttons/Quit" to="." method="_on_quit_pressed"]
[connection signal="confirmed" from="StartNewGameDialog" to="." method="_on_start_new_game_dialog_confirmed"]
23 changes: 16 additions & 7 deletions #Scenes/SceneScripts/MainMenu.gd
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ extends Control
## Control the flow from the main menu

var continue_button: TextureButton
@export var start_new_game_dialog: ConfirmationDialog

#on opening the main menu we grab the focus of the start button
func _ready() -> void:
Expand All @@ -17,13 +18,11 @@ func _ready() -> void:

## What happens when the start button is pressed
func _on_start_pressed() -> void:
SaveManager.clear_data()
PlayerManager.clear_data()
MapManager.clear_map_data()
XpManager.clear_data()
CardManager.clear_data()
InventoryManager.reset_inventory()
SceneManager.goto_scene("res://#Scenes/MapUI.tscn")
if PlayerManager.has_saved_data():
start_new_game_dialog.show()
else:
MapManager.init_data()
SceneManager.goto_scene("res://#Scenes/MapUI.tscn")

func _on_continue_pressed() -> void:
if PlayerManager.has_saved_data():
Expand All @@ -45,3 +44,13 @@ func _on_options_pressed() -> void:
## Kill the game when the quit button is pressed
func _on_quit_pressed() -> void:
get_tree().quit()


func _on_start_new_game_dialog_confirmed() -> void:
SaveManager.clear_data()
MapManager.init_data()
PlayerManager.init_data()
XpManager.init_data()
CardManager.init_data()
InventoryManager.init_data()
SceneManager.goto_scene("res://#Scenes/MapUI.tscn")
19 changes: 8 additions & 11 deletions Managers/CardManager.gd
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,6 @@ var disable_card_animations: bool = false
func _ready() -> void:
default_deck = load("res://Cards/CardSets/DefaultDeck.tres")
_initialize_deck()

if !SaveManager.start_save.is_connected(save_data):
SaveManager.start_save.connect(save_data)


# Call this from CardContainer to initialize. This allows you to get the current CardContainer from
Expand Down Expand Up @@ -48,20 +45,20 @@ func connect_discard_hand_signal(callable: Callable) -> void:
card_container.on_finished_discarding_hand.connect(callable)

func save_data() -> void:
var config_file: ConfigFile = SaveManager.config_file
config_file.set_value("CardManager", "current_deck", current_deck)
var save_file: ConfigFile = SaveManager.save_file
save_file.set_value("CardManager", "current_deck", current_deck)

var error: Error = config_file.save("user://save_data.ini")
var error: Error = save_file.save("user://save_data.ini")
if error:
print("Error saving player data: ", error)
push_error("Error saving player data: ", error)

func load_data() -> void:
var config_file: ConfigFile = SaveManager.load_config_file()
if config_file == null:
var save_file: ConfigFile = SaveManager.load_save_file()
if save_file == null:
return

current_deck = config_file.get_value("CardManager", "current_deck")
current_deck = save_file.get_value("CardManager", "current_deck")

func clear_data() -> void:
func init_data() -> void:
current_deck = default_deck.card_set.duplicate()

34 changes: 15 additions & 19 deletions Managers/InventoryManager.gd
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,6 @@ var relic_component : InventoryRelicComponent = InventoryRelicComponent.new()
## This is for the UI [br]
## The current UI is a placeholder and wil be changed in the future

func _ready() -> void:
if !SaveManager.start_save.is_connected(_save_inventory):
SaveManager.start_save.connect(_save_inventory)

var inventory_HUD : PackedScene = preload("res://InventoryComponents/InventoryHUD/inventory_hud.tscn")
var instanced_inventory_HUD : Node

Expand Down Expand Up @@ -44,29 +40,29 @@ func subtract_torch() -> void:
## Simply just makes new versions of every component class to reset all the items [br]
## The inventory_hud is closed before hand in case something breaks there

func reset_inventory() -> void:
func init_data() -> void:
close_inventory_HUD()
gold_component = InventoryGoldComponent.new()
torch_component = InventoryTorchComponent.new()
consumable_component = InventoryConsumablesComponent.new()
relic_component = InventoryRelicComponent.new()

func _save_inventory() -> void:
var config_file: ConfigFile = SaveManager.config_file
config_file.set_value("InventoryManager", "gold_component", gold_component)
config_file.set_value("InventoryManager", "torch_component", torch_component)
config_file.set_value("InventoryManager", "consumable_component", consumable_component)
config_file.set_value("InventoryManager", "relic_component", relic_component)
func save_inventory() -> void:
var save_file: ConfigFile = SaveManager.save_file
save_file.set_value("InventoryManager", "gold_component", gold_component)
save_file.set_value("InventoryManager", "torch_component", torch_component)
save_file.set_value("InventoryManager", "consumable_component", consumable_component)
save_file.set_value("InventoryManager", "relic_component", relic_component)

var error: Error = config_file.save("user://save_data.ini")
var error: Error = save_file.save("user://save_data.ini")
if error:
print("Error saving inventory data: ", error)
push_error("Error saving inventory data: ", error)

func load_inventory() -> void:
var config_file: ConfigFile = SaveManager.load_config_file()
if config_file == null:
var save_file: ConfigFile = SaveManager.load_save_file()
if save_file == null:
return
gold_component = config_file.get_value("InventoryManager", "gold_component")
torch_component = config_file.get_value("InventoryManager", "torch_component")
consumable_component = config_file.get_value("InventoryManager", "consumable_component")
relic_component = config_file.get_value("InventoryManager", "relic_component")
gold_component = save_file.get_value("InventoryManager", "gold_component")
torch_component = save_file.get_value("InventoryManager", "torch_component")
consumable_component = save_file.get_value("InventoryManager", "consumable_component")
relic_component = save_file.get_value("InventoryManager", "relic_component")
27 changes: 12 additions & 15 deletions Managers/MapManager.gd
Original file line number Diff line number Diff line change
Expand Up @@ -72,13 +72,10 @@ func _ready() -> void:
if _has_current_map_saved():
print("load map data")
load_map_data()

if !SaveManager.start_save.is_connected(_save_map_data):
SaveManager.start_save.connect(_save_map_data)

func _has_current_map_saved() -> bool:
var config_file: ConfigFile = SaveManager.config_file
return config_file.has_section_key("MapManager", "current_map")
var save_file: ConfigFile = SaveManager.save_file
return save_file.has_section_key("MapManager", "current_map")

## checks if the map exists
func is_map_initialized() -> bool:
Expand All @@ -87,20 +84,20 @@ func is_map_initialized() -> bool:
func set_room_light_data(room: RoomBase) -> void:
current_map.rooms[room.room_position.y][room.room_position.x].light_data = room.light_data

func _save_map_data() -> void:
var config_file: ConfigFile = SaveManager.config_file
config_file.set_value("MapManager", "map_width_array", map_width_array)
config_file.set_value("MapManager", "current_map", current_map)
var error: Error = config_file.save("user://save_data.ini")
func save_map_data() -> void:
var save_file: ConfigFile = SaveManager.save_file
save_file.set_value("MapManager", "map_width_array", map_width_array)
save_file.set_value("MapManager", "current_map", current_map)
var error: Error = save_file.save("user://save_data.ini")
if error:
print("Error saving player data: ", error)

func load_map_data() -> void:
var config_file: ConfigFile = SaveManager.load_config_file()
if config_file == null:
var save_file: ConfigFile = SaveManager.load_save_file()
if save_file == null:
return
current_map = config_file.get_value("MapManager", "current_map")
map_width_array = config_file.get_value("MapManager", "map_width_array")
current_map = save_file.get_value("MapManager", "current_map")
map_width_array = save_file.get_value("MapManager", "map_width_array")

func clear_map_data() -> void:
func init_data() -> void:
current_map = create_map()
36 changes: 16 additions & 20 deletions Managers/PlayerManager.gd
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ var is_player_initial_position_set: bool
## The actual room the player is in. [br]
var player_room: RoomBase = null:
get:
if player_position.x == -1 or player_position.y == -1:
if player_position == Vector2i(-1, -1):
return null
return MapManager.current_map.rooms[player_position.y][player_position.x]

Expand All @@ -43,34 +43,30 @@ var player_persistent_data: PlayerPersistentData = null:
func _ready() -> void:
player = null
is_player_initial_position_set = false

if !SaveManager.start_save.is_connected(_save_player):
SaveManager.start_save.connect(_save_player)


func _save_player() -> void:
var config_file: ConfigFile = SaveManager.config_file
config_file.set_value("Player", "position", player_position)
config_file.set_value("Player", "player_room", player_room)
config_file.set_value("Player", "player_persistent_data", player_persistent_data)
func save_player() -> void:
var save_file: ConfigFile = SaveManager.save_file
save_file.set_value("Player", "position", player_position)
save_file.set_value("Player", "player_room", player_room)
save_file.set_value("Player", "player_persistent_data", player_persistent_data)

var error: Error = config_file.save("user://save_data.ini")
var error: Error = save_file.save("user://save_data.ini")
if error:
print("Error saving player data: ", error)
push_error("Error saving player data: ", error)

func load_player() -> void:
var config_file: ConfigFile = SaveManager.load_config_file()
if config_file == null:
var save_file: ConfigFile = SaveManager.load_save_file()
if save_file == null:
return

player_position = config_file.get_value("Player", "position")
player_room = config_file.get_value("Player", "player_room")
player_persistent_data = config_file.get_value("Player", "player_persistent_data") as PlayerPersistentData
player_position = save_file.get_value("Player", "position")
player_room = save_file.get_value("Player", "player_room")
player_persistent_data = save_file.get_value("Player", "player_persistent_data") as PlayerPersistentData


func has_saved_data() -> bool:
var config_file: ConfigFile = SaveManager.load_config_file()
return config_file != null
var save_file: ConfigFile = SaveManager.load_save_file()
return save_file != null

func set_player(in_player: Player) -> void:
player = in_player
Expand All @@ -81,7 +77,7 @@ func set_player(in_player: Player) -> void:
func create_persistent_data() -> void:
player_persistent_data = PlayerPersistentData.new()

func clear_data() -> void:
func init_data() -> void:
player = null
is_player_initial_position_set = false
player_position = Vector2i(-1,-1)
Expand Down
24 changes: 12 additions & 12 deletions Managers/SaveManager.gd
Original file line number Diff line number Diff line change
@@ -1,31 +1,31 @@
extends Node

signal start_save
signal start_load

var config_file: ConfigFile
var save_file: ConfigFile

func _ready() -> void:
config_file = ConfigFile.new()
save_file = ConfigFile.new()

func execute_save() -> void:
start_save.emit()
XpManager.save_data()
PlayerManager.save_player()
MapManager.save_map_data()
InventoryManager.save_inventory()
CardManager.save_data()
SceneManager.save_scene_data()

func execute_load() -> void:
start_load.emit()

func clear_data() -> void:
DirAccess.remove_absolute("user://current_scene.tscn")
DirAccess.remove_absolute("user://save_data.ini")
config_file.clear()
var error: Error = config_file.save("user://save_data.ini")
if error:
print("Error saving player data: ", error)

func load_config_file() -> ConfigFile:
var error: Error = config_file.load("user://save_data.ini")
func load_save_file() -> ConfigFile:
var error: Error = save_file.load("user://save_data.ini")
if error:
print("Error loading save_data ", error)
push_error("Error loading save_data ", error)
return null

return config_file
return save_file
18 changes: 7 additions & 11 deletions Managers/SceneManager.gd
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ func _ready() -> void:
current_scene = root.get_child(root.get_child_count() - 1)
PhaseManager.on_defeat.connect(on_defeat)
PhaseManager.on_event_win.connect(on_event_win)
SaveManager.start_save.connect(_save_scene_data)

func goto_scene(path: String) -> void:
# This function will usually be called from a signal callback,
Expand Down Expand Up @@ -80,29 +79,26 @@ func on_defeat() -> void:
func on_event_win() -> void:
PlayerManager.player_room.room_event.on_event_ended()

func _save_scene_data() -> void:
for children: Node in current_scene.get_children():
children.owner = current_scene
func save_scene_data() -> void:
var packed_scene: PackedScene = PackedScene.new()
packed_scene.pack(current_scene)
ResourceSaver.save(packed_scene, "user://current_scene.tscn")

var config_file: ConfigFile = SaveManager.config_file
config_file.set_value("SceneManager", "current_event", current_event)
var save_file: ConfigFile = SaveManager.save_file
save_file.set_value("SceneManager", "current_event", current_event)

var error: Error = config_file.save("user://save_data.ini")
var error: Error = save_file.save("user://save_data.ini")
if error:
print("Error saving player data: ", error)

func load_scene_data() -> void:
call_deferred("_deferred_load_current_scene_from_data")

func _deferred_load_current_scene_from_data() -> void:
var config_file: ConfigFile = SaveManager.load_config_file()
if config_file == null:
return
var save_file: ConfigFile = SaveManager.load_save_file()
assert(save_file != null, "Attempting to load a scene with no config file. How did you get here???")

current_event = config_file.get_value("SceneManager", "current_event")
current_event = save_file.get_value("SceneManager", "current_event")

current_scene.free()

Expand Down
Loading

0 comments on commit 9dc4b60

Please sign in to comment.