diff --git a/godot/.godot/global_script_class_cache.cfg b/godot/.godot/global_script_class_cache.cfg index 60ab278..854dba8 100644 --- a/godot/.godot/global_script_class_cache.cfg +++ b/godot/.godot/global_script_class_cache.cfg @@ -1,4 +1,10 @@ list=Array[Dictionary]([{ +"base": &"VBoxContainer", +"class": &"AutoRefresh", +"icon": "", +"language": &"GDScript", +"path": "res://src/widgets/AutoRefresh/auto_refresh.gd" +}, { "base": &"EditorPlugin", "class": &"FormatOnSave", "icon": "", diff --git a/godot/src/project_selector/project_selector.gd b/godot/src/project_selector/project_selector.gd index 813e98e..b3271ee 100644 --- a/godot/src/project_selector/project_selector.gd +++ b/godot/src/project_selector/project_selector.gd @@ -50,7 +50,7 @@ func _on_project_name_line_edit_text_changed(new_text): func _on_new_project_button_pressed(_id: int): - get_tree().change_scene_to_file("res://src/sprite_selector/add_sprite.tscn") + get_tree().change_scene_to_file("res://src/sprite_selector/main.tscn") func _on_your_projects_menu_button_pressed(): diff --git a/godot/src/script_editor/add_move_fragment.tscn b/godot/src/script_editor/add_move_fragment.tscn deleted file mode 100644 index 87819ca..0000000 --- a/godot/src/script_editor/add_move_fragment.tscn +++ /dev/null @@ -1,21 +0,0 @@ -[gd_scene load_steps=2 format=3 uid="uid://btvekcxpfheas"] - -[ext_resource type="Script" path="res://src/script_editor/move_fragment.gd" id="1_8vnpa"] - -[node name="VBox" type="VBoxContainer"] -custom_minimum_size = Vector2(480, 0) -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -size_flags_vertical = 2 - -[node name="Button" type="Button" parent="."] -custom_minimum_size = Vector2(20, 0) -layout_mode = 2 -size_flags_vertical = 2 -text = "Move[X, Y]" -script = ExtResource("1_8vnpa") - -[connection signal="pressed" from="Button" to="Button" method="_on_pressed"] diff --git a/godot/src/script_editor/auto_refresh_fragments.gd b/godot/src/script_editor/auto_refresh_fragments.gd new file mode 100644 index 0000000..9fea364 --- /dev/null +++ b/godot/src/script_editor/auto_refresh_fragments.gd @@ -0,0 +1,17 @@ +extends AutoRefresh + +const MoveFragmentLabel: Resource = preload("res://src/script_editor/code_fragment_move.tscn") + + +func _refresh_contents(): + var ast = Api.get_ast() + render_ast(ast) + + +func render_ast(ast): + var code_container := $Code + for old in code_container.get_children(): + code_container.remove_child(old) + + for fragment in ast: + code_container.add_child(MoveFragmentLabel.instantiate()) diff --git a/godot/src/script_editor/button_add.gd b/godot/src/script_editor/button_add.gd new file mode 100644 index 0000000..b187982 --- /dev/null +++ b/godot/src/script_editor/button_add.gd @@ -0,0 +1,5 @@ +extends Button + + +func _on_pressed(): + API.insert(200) diff --git a/godot/src/script_editor/button_run.gd b/godot/src/script_editor/button_run.gd new file mode 100644 index 0000000..79f9843 --- /dev/null +++ b/godot/src/script_editor/button_run.gd @@ -0,0 +1,5 @@ +extends Button + + +func _on_pressed(): + get_tree().change_scene_to_file("res://src/runtime/runtime.tscn") diff --git a/godot/src/script_editor/move_fragment_label.tscn b/godot/src/script_editor/code_fragment_move.tscn similarity index 100% rename from godot/src/script_editor/move_fragment_label.tscn rename to godot/src/script_editor/code_fragment_move.tscn diff --git a/godot/src/script_editor/main.tscn b/godot/src/script_editor/main.tscn new file mode 100644 index 0000000..e2cc548 --- /dev/null +++ b/godot/src/script_editor/main.tscn @@ -0,0 +1,54 @@ +[gd_scene load_steps=4 format=3 uid="uid://rsvepepjglmt"] + +[ext_resource type="Script" path="res://src/script_editor/button_run.gd" id="1_2l7lb"] +[ext_resource type="Script" path="res://src/script_editor/button_add.gd" id="2_vfewj"] +[ext_resource type="Script" path="res://src/script_editor/auto_refresh_fragments.gd" id="3_6u76r"] + +[node name="ScriptEditor" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] +layout_mode = 2 + +[node name="RunButton" type="Button" parent="VBoxContainer/HBoxContainer"] +layout_mode = 2 +text = "Run" +script = ExtResource("1_2l7lb") + +[node name="AddButton" type="Button" parent="VBoxContainer/HBoxContainer"] +layout_mode = 2 +text = "Add Move" +script = ExtResource("2_vfewj") + +[node name="VScrollContainer" type="ScrollContainer" parent="VBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="AutoRefresh" type="VBoxContainer" parent="VBoxContainer/VScrollContainer"] +layout_mode = 2 +script = ExtResource("3_6u76r") + +[node name="Code" type="VBoxContainer" parent="VBoxContainer/VScrollContainer/AutoRefresh"] +layout_mode = 2 +size_flags_horizontal = 3 + +[connection signal="pressed" from="VBoxContainer/HBoxContainer/RunButton" to="VBoxContainer/HBoxContainer/RunButton" method="_on_pressed"] +[connection signal="pressed" from="VBoxContainer/HBoxContainer/AddButton" to="VBoxContainer/HBoxContainer/AddButton" method="_on_pressed"] diff --git a/godot/src/script_editor/move_fragment.gd b/godot/src/script_editor/move_fragment.gd deleted file mode 100644 index 6ff1a1f..0000000 --- a/godot/src/script_editor/move_fragment.gd +++ /dev/null @@ -1,17 +0,0 @@ -extends VBoxContainer - -const Constants = preload("res://src/util/api_interop.gd") - - -# Called when the node enters the scene tree for the first time. -func _ready(): - pass - - -# Called every frame. 'delta' is the elapsed time since the previous frame. -func _process(_delta): - pass - - -func _on_move_fragment_button_pressed(): - API.insert(200) diff --git a/godot/src/script_editor/move_fragment.tscn b/godot/src/script_editor/move_fragment.tscn deleted file mode 100644 index 1224abb..0000000 --- a/godot/src/script_editor/move_fragment.tscn +++ /dev/null @@ -1,21 +0,0 @@ -[gd_scene load_steps=2 format=3 uid="uid://btvekcxpfheas"] - -[ext_resource type="Script" path="res://src/script_editor/move_fragment.gd" id="1_rnqye"] - -[node name="VBox" type="VBoxContainer"] -custom_minimum_size = Vector2(480, 0) -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -size_flags_vertical = 2 -script = ExtResource("1_rnqye") - -[node name="MoveFragmentButton" type="Button" parent="."] -custom_minimum_size = Vector2(20, 0) -layout_mode = 2 -size_flags_vertical = 2 -text = "Move[X, Y]" - -[connection signal="pressed" from="MoveFragmentButton" to="." method="_on_move_fragment_button_pressed"] diff --git a/godot/src/script_editor/script_fragment.gd b/godot/src/script_editor/script_fragment.gd deleted file mode 100644 index e031569..0000000 --- a/godot/src/script_editor/script_fragment.gd +++ /dev/null @@ -1,34 +0,0 @@ -extends Node - -const MoveFragmentLabel: Resource = preload("res://src/script_editor/move_fragment_label.tscn") - - -func _ready(): - GlobalSignals.script_updated.connect(_on_script_updated) - - var ast = Api.get_ast() - render_ast(ast) - - -func _process(_delta): - pass - - -func _on_script_updated(): - var ast = Api.get_ast() - render_ast(ast) - - -func render_ast(ast): - print_tree_pretty() - - var code_container := $VBoxContainer/VScrollContainer/Code - for old in code_container.get_children(): - code_container.remove_child(old) - - for fragment in ast: - code_container.add_child(MoveFragmentLabel.instantiate()) - - -func _on_run_button_pressed(): - get_tree().change_scene_to_file("res://src/runtime/runtime.tscn") diff --git a/godot/src/script_editor/script_fragment.tscn b/godot/src/script_editor/script_fragment.tscn deleted file mode 100644 index 591ae35..0000000 --- a/godot/src/script_editor/script_fragment.tscn +++ /dev/null @@ -1,44 +0,0 @@ -[gd_scene load_steps=3 format=3 uid="uid://rsvepepjglmt"] - -[ext_resource type="Script" path="res://src/script_editor/script_fragment.gd" id="1_koyt3"] -[ext_resource type="PackedScene" uid="uid://btvekcxpfheas" path="res://src/script_editor/move_fragment.tscn" id="2_llv2k"] - -[node name="ScriptEditor" type="Control"] -layout_mode = 3 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -size_flags_horizontal = 3 -size_flags_vertical = 3 -script = ExtResource("1_koyt3") - -[node name="VBoxContainer" type="VBoxContainer" parent="."] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -size_flags_horizontal = 3 -size_flags_vertical = 3 - -[node name="RunButton" type="Button" parent="VBoxContainer"] -layout_mode = 2 -text = "Run" - -[node name="AddButton" parent="VBoxContainer" instance=ExtResource("2_llv2k")] -layout_mode = 2 -size_flags_vertical = 0 - -[node name="VScrollContainer" type="ScrollContainer" parent="VBoxContainer"] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 3 - -[node name="Code" type="VBoxContainer" parent="VBoxContainer/VScrollContainer"] -layout_mode = 2 -size_flags_horizontal = 3 - -[connection signal="pressed" from="VBoxContainer/RunButton" to="." method="_on_run_button_pressed"] diff --git a/godot/src/sprite_selector/add_sprite.gd b/godot/src/sprite_selector/main.gd similarity index 77% rename from godot/src/sprite_selector/add_sprite.gd rename to godot/src/sprite_selector/main.gd index 857e4b0..2fb9d36 100644 --- a/godot/src/sprite_selector/add_sprite.gd +++ b/godot/src/sprite_selector/main.gd @@ -3,16 +3,6 @@ extends Control var Sprites: Resource = preload("res://src/sprite_selector/sprite.tscn") -# Called when the node enters the scene tree for the first time. -func _ready(): - pass - - -# Called every frame. 'delta' is the elapsed time since the previous frame. -func _process(_delta): - pass - - func _on_add_sprite_button_pressed(): $FileDialog.popup_centered() @@ -27,4 +17,3 @@ func _on_file_dialog_file_selected(path): margin_container.add_theme_constant_override("margin_bottom", margin_value / 2) margin_container.add_theme_constant_override("margin_right", margin_value) get_node("VBoxContainer2/VBox/ScrollContainer/VBoxIntems").add_child(sprite) - print_tree_pretty() diff --git a/godot/src/sprite_selector/add_sprite.tscn b/godot/src/sprite_selector/main.tscn similarity index 89% rename from godot/src/sprite_selector/add_sprite.tscn rename to godot/src/sprite_selector/main.tscn index e860fac..48421ba 100644 --- a/godot/src/sprite_selector/add_sprite.tscn +++ b/godot/src/sprite_selector/main.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=4 format=3 uid="uid://bs2465qtho3bu"] +[gd_scene load_steps=5 format=3 uid="uid://bs2465qtho3bu"] -[ext_resource type="Script" path="res://src/sprite_selector/add_sprite.gd" id="1_w6ncu"] +[ext_resource type="Script" path="res://src/sprite_selector/main.gd" id="1_w6ncu"] +[ext_resource type="Script" path="res://src/sprite_selector/sprite_list.gd" id="2_y3h1p"] [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_kefq6"] @@ -75,6 +76,7 @@ size_flags_vertical = 3 layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 +script = ExtResource("2_y3h1p") [connection signal="file_selected" from="FileDialog" to="." method="_on_file_dialog_file_selected"] [connection signal="pressed" from="VBoxContainer2/HBoxContainer/MarginContainer/AddSpriteButton" to="." method="_on_add_sprite_button_pressed"] diff --git a/godot/src/sprite_selector/sprite.gd b/godot/src/sprite_selector/sprite.gd index 74100b3..58fdf0c 100644 --- a/godot/src/sprite_selector/sprite.gd +++ b/godot/src/sprite_selector/sprite.gd @@ -41,4 +41,4 @@ func _drop_data(_at_position, data): func _on_pressed(): - get_tree().change_scene_to_file("res://src/script_editor/script_fragment.tscn") + get_tree().change_scene_to_file("res://src/script_editor/main.tscn") diff --git a/godot/src/sprite_selector/sprite_list.gd b/godot/src/sprite_selector/sprite_list.gd new file mode 100644 index 0000000..1cf6323 --- /dev/null +++ b/godot/src/sprite_selector/sprite_list.gd @@ -0,0 +1,12 @@ +extends VBoxContainer + +const Sprite: Resource = preload("res://src/sprite_selector/sprite.tscn") + + +func render_ast(ast): + var code_container := get_tree() + for old in code_container.get_children(): + code_container.remove_child(old) + + for fragment in ast: + code_container.add_child(Sprite.instantiate()) diff --git a/godot/src/widgets/AutoRefresh/auto_refresh.gd b/godot/src/widgets/AutoRefresh/auto_refresh.gd new file mode 100644 index 0000000..d790506 --- /dev/null +++ b/godot/src/widgets/AutoRefresh/auto_refresh.gd @@ -0,0 +1,15 @@ +class_name AutoRefresh +extends VBoxContainer + + +func _ready(): + # get a signal when underlying data changed + GlobalSignals.script_updated.connect(_refresh_contents) + + # initial rendering + _refresh_contents() + + +func _refresh_contents(): + # update children of this node here! + assert(false, "_refresh_contents not implemented")