-
Notifications
You must be signed in to change notification settings - Fork 0
/
saveman.gd
102 lines (72 loc) · 2.7 KB
/
saveman.gd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
extends Node
class_name SaveManager
const SAVE_FILE_PATH = "user://save.thelastrevenant"
const TMP_SAVE_FILE_PATH = "user://tmp_save.thelastrevenant"
var save : ConfigFile
func _ready():
if not FileAccess.file_exists(SAVE_FILE_PATH):
create_save_file()
func reload_save():
save = ConfigFile.new()
save.load(SAVE_FILE_PATH)
func create_save_file():
var save = ConfigFile.new()
save.set_value("Meta", "version", 0)
save.set_value("Meta", "game_beat", false)
save.set_value("Meta", "save_created", Time.get_datetime_dict_from_system())
save.save(SAVE_FILE_PATH)
print("created")
func save_value(key : String, value):
# var save = ConfigFile.new()
# save.load(SAVE_FILE_PATH)
if not save: reload_save()
save.set_value("Save", key, value)
# save.save(SAVE_FILE_PATH)
func get_value(key : String, default_value):
# var save = ConfigFile.new()
# save.load(SAVE_FILE_PATH)
if not save: reload_save()
if not save.has_section_key("Save", key):
save_value(key, default_value)
# save.load(SAVE_FILE_PATH)
return save.get_value("Save", key)
func write_save():
save.save(SAVE_FILE_PATH)
reload_save()
func reset_save():
if not save: reload_save()
for key in save.get_section_keys("Save"):
save.erase_section_key("Save", key)
write_save()
func remove_save():
DirAccess.remove_absolute(SAVE_FILE_PATH)
create_save_file()
reload_save()
func write_game_end_meta():
var _save = save
_save.set_value("Meta", "game_beat", true)
if _save.has_section_key("Meta", "best_time"):
_save.set_value("Meta", "best_time", min(get_value("playtime", 0), _save.get_value("Meta", "best_time")))
else:
_save.set_value("Meta", "best_time", get_value("playtime", 0))
if _save.has_section_key("Meta", "best_item_percentage"):
_save.set_value("Meta", "best_item_percentage", min(GameMan.get_item_completion_percentage(), _save.get_value("Meta", "best_item_percentage")))
else:
_save.set_value("Meta", "best_item_percentage", GameMan.get_item_completion_percentage())
_save.save(SAVE_FILE_PATH)
reload_save()
func import_save(path):
var import_file = FileAccess.open(path, FileAccess.READ)
var temp_save = FileAccess.open(TMP_SAVE_FILE_PATH, FileAccess.WRITE)
temp_save.store_string(import_file.get_as_text())
var save_validity_checker = ConfigFile.new()
var err = save_validity_checker.load(TMP_SAVE_FILE_PATH)
if err == OK:
var _save = FileAccess.open(SAVE_FILE_PATH, FileAccess.WRITE)
_save.store_string(import_file.get_as_text())
DirAccess.remove_absolute(TMP_SAVE_FILE_PATH)
reload_save()
func export_save(path):
var export_file = FileAccess.open(path, FileAccess.WRITE)
var save_file = FileAccess.open(SAVE_FILE_PATH, FileAccess.READ)
export_file.store_string(save_file.get_as_text())