summaryrefslogtreecommitdiff
path: root/Tray.gd
diff options
context:
space:
mode:
Diffstat (limited to 'Tray.gd')
-rw-r--r--Tray.gd45
1 files changed, 45 insertions, 0 deletions
diff --git a/Tray.gd b/Tray.gd
index 9936ef1..3e117af 100644
--- a/Tray.gd
+++ b/Tray.gd
@@ -4,9 +4,15 @@ extends Control
var TrayItemScene = preload("res://TrayItem.tscn")
var is_open = true
+var _on_data_loaded_callback = null
func _ready():
+ if OS.get_name() == "Web":
+ _on_data_loaded_callback = JavaScriptBridge.create_callback(load_save)
+ var callbacks = JavaScriptBridge.get_interface("godotCallbacks")
+ callbacks.dataLoaded = _on_data_loaded_callback
+
for i in range(5):
add_item()
@@ -55,3 +61,42 @@ func _on_button_pressed():
close()
else:
open()
+
+
+func _on_save_pressed():
+ if OS.get_name() == "Web":
+ var to_save = []
+ var objects = get_tree().current_scene.get_node("%DropTarget").get_children()
+ for obj in objects:
+ to_save.append({
+ "position": {
+ "x": obj.position.x,
+ "y": obj.position.y,
+ },
+ "rotation": obj.rotation,
+ "object": "BuilderObject",
+ })
+
+ JavaScriptBridge.download_buffer(
+ JSON.stringify(to_save).to_utf8_buffer(),
+ "CityBuilder-save.json",
+ "application/json"
+ )
+
+
+func _on_load_pressed():
+ if OS.get_name() == "Web":
+ JavaScriptBridge.eval("openLoadDialog()")
+
+
+func load_save(data: Array):
+ var current_objects = get_tree().current_scene.get_node("%DropTarget").get_children()
+ for obj in current_objects:
+ obj.queue_free()
+
+ var objects = JSON.parse_string(data[0])
+ for obj in objects:
+ var scene = load("res://Objects/" + obj.object + ".tscn").instantiate()
+ scene.position = Vector2(obj.position.x, obj.position.y)
+ scene.rotation = obj.rotation
+ get_tree().current_scene.get_node("%DropTarget").add_child(scene)