online multiplayer chess game (note server currently down)
Diffstat (limited to 'saveload.gd')
-rw-r--r--saveload.gd74
1 files changed, 53 insertions, 21 deletions
diff --git a/saveload.gd b/saveload.gd
index 73e1052..f3772d3 100644
--- a/saveload.gd
+++ b/saveload.gd
@@ -4,6 +4,8 @@ class_name SaveLoader
const settings_file := "user://chess.settings"
const id := "user://.chess.id"
+var file: File = File.new()
+
const default_settings_data = {
vsync = OS.vsync_enabled,
fullscreen = OS.window_fullscreen,
@@ -33,43 +35,73 @@ func get_data(type: String) -> Dictionary:
func _ready() -> void:
- # Debug.monitor(self, "id data", "files.id.data")
SaveLoad.load_data("settings")
SaveLoad.load_data("id")
-func to_base64(variant) -> String:
+static func to_base64(variant) -> String:
return Marshalls.variant_to_base64(variant)
-func from_base64(base64: String):
+static func from_base64(base64: String):
return Marshalls.base64_to_variant(base64)
func save(type: String) -> void:
- var file := File.new()
- file.open(files[type]["file"], File.WRITE)
- file.store_string(to_base64(files[type]["data"]))
+ save_dict(files[type]["file"], files[type]["data"])
-func load_data(type: String) -> Dictionary:
- if check_file(type):
- var file := File.new()
- file.open(files[type]["file"], File.READ)
- var text = file.get_as_text()
- if len(text) > 0:
- var read_dictionary = from_base64(text)
- if typeof(read_dictionary) != TYPE_DICTIONARY:
- save(type) # OVERWRITE
- elif files[type]["data"].keys() == read_dictionary.keys():
- files[type]["data"] = read_dictionary
- save(type) # overwrite.
+func save_dict(path: String, data: Dictionary, plain := false) -> void:
+ file.open(path, File.WRITE)
+ file.store_string(var2str(data) if plain else to_base64(data))
+ file.close()
+
+
+func save_string(path: String, string: String) -> void:
+ file.open(path, File.WRITE)
+ file.store_string(string)
+ file.close()
+
+
+func append_string(path: String, string: String) -> void:
+ file.open(path, File.READ_WRITE)
+ file.seek_end()
+ file.store_string("\n%s" % string)
+ file.close()
+
+
+func load_string(path: String) -> String:
+ if file.file_exists(path):
+ file.open(path, File.READ)
+ var string = file.get_as_text()
file.close()
- else:
- save(type)
+ return string
+ return ""
+
+
+func load_data(type: String) -> Dictionary:
+ var read_dictionary = load_file(files[type]["file"])
+ if files[type]["data"].keys() == read_dictionary.keys():
+ files[type]["data"] = read_dictionary
+ save(type) # write over old data
return files[type]["data"]
+func load_file(path: String) -> Dictionary:
+ if file.file_exists(path):
+ file.open(path, File.READ)
+ var text := file.get_as_text()
+ var dict := {}
+ if text:
+ var read_dict = str2var(text)
+ if typeof(read_dict) == TYPE_DICTIONARY: # it may be plaintext
+ dict = read_dict
+ else:
+ dict = from_base64(text)
+ file.close()
+ return dict
+ return {}
+
+
func check_file(type: String) -> bool:
- var file := File.new()
return file.file_exists(files[type]["file"])