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)