51 lines
1.3 KiB
GDScript
51 lines
1.3 KiB
GDScript
class_name SaveManager
|
|
extends Node
|
|
|
|
var file: ConfigFile = ConfigFile.new()
|
|
var save_path: String = "user://save.binary"
|
|
|
|
func get_section_name(res: Resource) -> String:
|
|
return res.resource_name if res.resource_name != "" else res.get_class()
|
|
|
|
func save(res: Resource) -> bool:
|
|
if not is_instance_valid(res):
|
|
push_error("cannot save: invalid resource")
|
|
return false
|
|
|
|
var section_name: String = get_section_name(res)
|
|
|
|
if FileAccess.file_exists(save_path) and file.load(save_path) != OK:
|
|
printerr("Save file corrupted!")
|
|
return false
|
|
|
|
file.set_value("meta", "savedate", Time.get_datetime_string_from_system())
|
|
|
|
for property in res.get_property_list():
|
|
if property.usage & PROPERTY_USAGE_STORAGE:
|
|
var v_name: String = property.name
|
|
file.set_value(section_name, v_name, res.get(v_name))
|
|
|
|
return file.save(save_path) == OK
|
|
|
|
func load(res: Resource) -> bool:
|
|
if not FileAccess.file_exists(save_path):
|
|
return true
|
|
if file.load(save_path) != OK:
|
|
printerr("Save file corrupted!")
|
|
return false
|
|
|
|
var section_name: String = get_section_name(res)
|
|
var props := []
|
|
for p in res.get_property_list():
|
|
if p.usage & PROPERTY_USAGE_STORAGE:
|
|
props.append(p.name)
|
|
|
|
for key in file.get_section_keys(section_name):
|
|
if key in props:
|
|
res.set(key, file.get_value(section_name, key))
|
|
return true
|
|
|
|
func delete() -> void:
|
|
file.clear()
|
|
file.save(save_path)
|