45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			GDScript
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			GDScript
		
	
	
	
	
	
| class_name SaveManager
 | |
| extends Node
 | |
| 
 | |
| var file: ConfigFile = ConfigFile.new()
 | |
| var save_path: String = "user://save.binary"
 | |
| 
 | |
| func save(res: SaveFile) -> bool:
 | |
| 	if not is_instance_valid(res):
 | |
| 		push_error("cannot save: invalid resource")
 | |
| 		return false
 | |
| 	
 | |
| 	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(res.save_name, v_name, res.get(v_name))
 | |
| 	
 | |
| 	return file.save(save_path) == OK
 | |
| 
 | |
| func load(res: SaveFile) -> bool:
 | |
| 	if not FileAccess.file_exists(save_path):
 | |
| 		return true
 | |
| 	if file.load(save_path) != OK:
 | |
| 		printerr("Save file corrupted!")
 | |
| 		return false
 | |
| 		
 | |
| 	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(res.save_name):
 | |
| 		if key in props:
 | |
| 			res.set(key, file.get_value(res.save_name, key))
 | |
| 	return true
 | |
| 
 | |
| func delete() -> void:
 | |
| 	file.clear()
 | |
| 	file.save(save_path)
 |