From 9155752f861ae43e3534cdfa833d8c644cb0e5d3 Mon Sep 17 00:00:00 2001 From: Daniel Weipert Date: Sat, 18 May 2024 15:49:24 +0200 Subject: save/load --- Tray.gd | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) (limited to 'Tray.gd') 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) -- cgit v1.2.3