summaryrefslogtreecommitdiff
path: root/Tray.gd
blob: 3e117af3c168661ecda9fef5dd22cbd41eee9aca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
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()
	
	await get_tree().process_frame
	_on_resized()


func add_item():
	var tray_item = TrayItemScene.instantiate()
	%Items.add_child(tray_item)


func open():
	is_open = true
	var tween = create_tween()
	tween.tween_property(
		self,
		"global_position",
		Vector2(get_viewport_rect().end.x - size.x, position.y),
		0.25
	)


func close():
	is_open = false
	var tween = create_tween()
	tween.tween_property(
		self,
		"global_position",
		Vector2(get_viewport_rect().end.x, position.y),
		0.25
	)


func _on_resized():
	%Button.global_position = global_position - Vector2(%Button.size.x, 0)
	
	var shape = RectangleShape2D.new()
	shape.size = size
	%TrayCollision/CollisionShape2D.shape = shape
	%TrayCollision/CollisionShape2D.position = size / 2


func _on_button_pressed():
	if is_open:
		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)