aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client/serialize.gd64
-rw-r--r--client/serialize.gd.uid1
2 files changed, 65 insertions, 0 deletions
diff --git a/client/serialize.gd b/client/serialize.gd
new file mode 100644
index 00000000..85f54889
--- /dev/null
+++ b/client/serialize.gd
@@ -0,0 +1,64 @@
+# Hurry Curry! - a game about cooking
+# Copyright 2025 nokoe
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, version 3 of the License only.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+class_name Serialize
+extends Object
+
+func serialize() -> String:
+ return JSON.stringify(to_dict())
+
+func to_dict() -> Dictionary:
+ var dict: Dictionary = {}
+ for i in get_property_list():
+ var type = i["type"]
+ var v = get(i["name"])
+ if v == null:
+ continue
+ match type:
+ TYPE_NIL || TYPE_CALLABLE: pass
+ TYPE_OBJECT:
+ if v is Serialize:
+ dict[i["name"]] = v.to_dict()
+ TYPE_ARRAY:
+ dict[i["name"]] = v.map(func(e): return e.to_dict() if e is Serialize else e)
+ _:
+ dict[i["name"]] = v
+ return dict
+
+func deserialize(de: String):
+ return from_dict(JSON.parse_string(de))
+
+func from_dict(dict: Dictionary):
+ for i in get_property_list():
+ var type = i["type"]
+ var name = i["name"]
+ if !dict.has(name) || dict[name] == null:
+ continue
+ match type:
+ TYPE_NIL || TYPE_CALLABLE: pass
+ TYPE_OBJECT:
+ var copy = new()
+ copy.from_dict(dict[name])
+ set(name, copy)
+ TYPE_ARRAY:
+ set(name, dict[name].map(func(e): if e is Dictionary:
+ var copy = new()
+ copy.from_dict(e)
+ return copy
+ else: return e
+ )
+ )
+ _:
+ set(name, dict[name])
diff --git a/client/serialize.gd.uid b/client/serialize.gd.uid
new file mode 100644
index 00000000..4adda245
--- /dev/null
+++ b/client/serialize.gd.uid
@@ -0,0 +1 @@
+uid://dtx6xsa6588xs