Files
aarpg/globals/global_save_manager.gd
Andriy Yednarovych e877c5f058 init
2026-02-22 19:26:26 +01:00

75 lines
2.0 KiB
GDScript

extends Node
const SAVE_PATH := "user://"
signal game_loaded
signal game_saved
var current_save := {
scene_path = "",
player = {
hp = 1,
max_hp = 1,
pos_x = 0,
pos_y = 0
},
items = [],
persistence = [],
quests = [],
}
func save_game() -> void:
update_player_data()
update_scene_path()
update_item_data()
write_save(JSON.stringify(current_save))
game_saved.emit()
func load_game() -> void:
current_save = read_save()
LevelManager.load_new_level(current_save.scene_path, "", Vector2.ZERO)
await LevelManager.level_load_started
PlayerManager.set_player_position(Vector2(current_save.player.pos_x, current_save.player.pos_y))
PlayerManager.set_health(current_save.player.hp, current_save.player.max_hp)
PlayerManager.INVENTORY_DATA.load_save_date(current_save.items)
await LevelManager.level_loaded
game_loaded.emit()
func update_player_data() -> void:
var player := PlayerManager.player
current_save.player.hp = player.hp
current_save.player.max_hp = player.maxHp
current_save.player.pos_x = player.global_position.x
current_save.player.pos_y = player.global_position.y
func update_scene_path() -> void:
var path := ""
for child in get_tree().root.get_children():
if child is Level:
path = child.scene_file_path
current_save.scene_path = path
func write_save(content: String) -> void:
var file := FileAccess.open(SAVE_PATH + "save.sav", FileAccess.WRITE)
file.store_line(content)
func read_save() -> Dictionary:
var file := FileAccess.open(SAVE_PATH + "save.sav", FileAccess.READ)
var json = JSON.new()
json.parse(file.get_line())
return json.get_data() as Dictionary
func update_item_data() -> void:
current_save.items = PlayerManager.INVENTORY_DATA.get_save_data()
func add_persistent_value(value: String) -> void:
if check_persistent_value(value):
return
current_save.persistence.append(value)
func check_persistent_value(value: String) -> bool:
var persistent_data := current_save.persistence as Array
return persistent_data.has(value)