58 lines
1.6 KiB
GDScript
58 lines
1.6 KiB
GDScript
extends Node
|
|
|
|
const SAVEFILE = "user://save.dat"
|
|
|
|
func _ready() -> void:
|
|
load_game()
|
|
|
|
func _to_dict() -> Dictionary:
|
|
return {
|
|
"player_xp": XpLevelManager.player_xp,
|
|
"phrases": PhrasesManager.phrases,
|
|
"last_played_phrases": CoreGameplayManager.last_played_phrases
|
|
}
|
|
|
|
func _from_dict(data: Dictionary) -> int:
|
|
var successfully_set = 0
|
|
# set variables
|
|
if "player_xp" in data:
|
|
XpLevelManager.loading = true
|
|
XpLevelManager.player_xp = data["player_xp"]
|
|
XpLevelManager.loading = false
|
|
successfully_set += 1 #!
|
|
if "phrases" in data and data["phrases"] is Array:
|
|
PhrasesManager.phrases = []
|
|
for p in data["phrases"]:
|
|
PhrasesManager.phrases.append(p)
|
|
successfully_set += 1 #!
|
|
if "last_played_phrases" in data and data["last_played_phrases"] is Dictionary:
|
|
CoreGameplayManager.last_played_phrases = data["last_played_phrases"]
|
|
successfully_set += 1 #!
|
|
return successfully_set
|
|
|
|
func save_game():
|
|
var data_json = JSON.stringify(_to_dict())
|
|
var f = FileAccess.open(SAVEFILE, FileAccess.WRITE)
|
|
f.store_string(data_json)
|
|
f.close()
|
|
|
|
func load_game():
|
|
if FileAccess.file_exists(SAVEFILE):
|
|
var data_json = FileAccess.get_file_as_string(SAVEFILE)
|
|
var data = JSON.parse_string(data_json)
|
|
_from_dict(data)
|
|
|
|
func export_to_base64() -> String:
|
|
var data_json = JSON.stringify(_to_dict())
|
|
return Marshalls.utf8_to_base64(data_json)
|
|
|
|
func import_from_base64(encoded_data: String) -> bool:
|
|
var data_json = Marshalls.base64_to_utf8(encoded_data)
|
|
var data_dict = JSON.parse_string(data_json)
|
|
if data_dict == null:
|
|
return false
|
|
var n_successful: int = _from_dict(data_dict) > 0
|
|
if n_successful > 0:
|
|
save_game()
|
|
return true
|
|
else: return false
|