Skip to content

Commit 384c676

Browse files
committed
WIP: Blocks in-game changes and example
#196
1 parent f3eea03 commit 384c676

File tree

4 files changed

+164
-7
lines changed

4 files changed

+164
-7
lines changed

addons/block_code/drag_manager/drag_manager.gd

+6-3
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,10 @@ var drag: Drag = null
2424

2525

2626
func _ready():
27-
_picker = get_node(picker_path)
28-
_block_canvas = get_node(block_canvas_path)
27+
if picker_path:
28+
_picker = get_node(picker_path)
29+
if block_canvas_path:
30+
_block_canvas = get_node(block_canvas_path)
2931

3032

3133
func _process(_delta):
@@ -55,7 +57,8 @@ func drag_block(block: Block, copied_from: Block = null, offset: Vector2 = Vecto
5557

5658
drag = Drag.new(block, block_scope, offset, _block_canvas)
5759
drag.set_snap_points(get_tree().get_nodes_in_group("snap_point"))
58-
drag.add_delete_area(_picker.get_global_rect())
60+
if _picker:
61+
drag.add_delete_area(_picker.get_global_rect())
5962
if block is ParameterBlock and block.spawned_by:
6063
drag.add_delete_area(block.spawned_by.get_global_rect())
6164
add_child(drag)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
extends Control
2+
3+
@onready var _context := BlockEditorContext.get_default()
4+
5+
@onready var block_code_node: BlockCode = %BlockCode
6+
@onready var block_canvas: MarginContainer = %BlockCanvas
7+
@onready var drag_manager: Control = %DragManager
8+
9+
10+
# Called when the node enters the scene tree for the first time.
11+
func _ready() -> void:
12+
block_canvas.reconnect_block.connect(drag_manager.connect_block_canvas_signals)
13+
drag_manager.block_dropped.connect(save_script)
14+
drag_manager.block_modified.connect(save_script)
15+
_context.block_code_node = block_code_node
16+
17+
18+
func _input(event):
19+
if event is InputEventMouseButton:
20+
var mouse_event: InputEventMouseButton = event as InputEventMouseButton
21+
if mouse_event.button_index == MOUSE_BUTTON_LEFT:
22+
if mouse_event.pressed:
23+
# Release focus
24+
var focused_node := get_viewport().gui_get_focus_owner()
25+
if focused_node:
26+
focused_node.release_focus()
27+
else:
28+
drag_manager.drag_ended()
29+
30+
31+
func save_script():
32+
if _context.block_code_node == null:
33+
print("No script loaded to save.")
34+
return
35+
36+
var block_script: BlockScriptSerialization = _context.block_script
37+
block_canvas.rebuild_ast_list()
38+
block_canvas.rebuild_block_serialization_trees()
39+
var generated_script = block_canvas.generate_script_from_current_window()
40+
if generated_script != block_script.generated_script:
41+
block_script.generated_script = generated_script
42+
block_code_node._update_parent_script()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
[gd_scene load_steps=19 format=3 uid="uid://cytyr4s3vkoqm"]
2+
3+
[ext_resource type="Script" path="res://addons/block_code/examples/demo_ingame/demo_ingame.gd" id="1_6vqkq"]
4+
[ext_resource type="PackedScene" uid="uid://c6vumewgnfquy" path="res://addons/block_code/ui/block_canvas/block_canvas.tscn" id="2_7wcyd"]
5+
[ext_resource type="Texture2D" uid="uid://dk8joxmlxu82l" path="res://icon.png" id="2_saega"]
6+
[ext_resource type="Script" uid="uid://cumxsbxj56dmk" path="res://addons/block_code/block_code_node/block_code.gd" id="3_com2k"]
7+
[ext_resource type="Script" uid="uid://brx1cabdmgu38" path="res://addons/block_code/serialization/block_serialization_tree.gd" id="4_dmtl1"]
8+
[ext_resource type="Script" uid="uid://u035wsjd5tpj" path="res://addons/block_code/serialization/block_serialization.gd" id="5_fjkgv"]
9+
[ext_resource type="Script" uid="uid://tlsvrkc3fubl" path="res://addons/block_code/serialization/block_script_serialization.gd" id="6_nae1f"]
10+
[ext_resource type="Script" uid="uid://duvgxorhfitb7" path="res://addons/block_code/serialization/value_block_serialization.gd" id="7_25a4o"]
11+
[ext_resource type="Script" uid="uid://bwkinr8omutpw" path="res://addons/block_code/code_generation/variable_definition.gd" id="7_qrh5q"]
12+
[ext_resource type="PackedScene" uid="uid://cph1k5cfximbf" path="res://addons/block_code/drag_manager/drag_manager.tscn" id="10_kgp86"]
13+
14+
[sub_resource type="Resource" id="Resource_7j0jm"]
15+
script = ExtResource("5_fjkgv")
16+
name = &"Node2D_change_rotation_degrees"
17+
children = Array[ExtResource("5_fjkgv")]([])
18+
arguments = {
19+
"value": -1.0
20+
}
21+
22+
[sub_resource type="Resource" id="Resource_p7e31"]
23+
script = ExtResource("5_fjkgv")
24+
name = &"Node2D_change_rotation_degrees"
25+
children = Array[ExtResource("5_fjkgv")]([])
26+
arguments = {
27+
"value": 5.0
28+
}
29+
30+
[sub_resource type="Resource" id="Resource_8vvuc"]
31+
script = ExtResource("5_fjkgv")
32+
name = &"process"
33+
children = Array[ExtResource("5_fjkgv")]([SubResource("Resource_7j0jm"), SubResource("Resource_p7e31")])
34+
arguments = {}
35+
36+
[sub_resource type="Resource" id="Resource_43nhb"]
37+
script = ExtResource("4_dmtl1")
38+
root = SubResource("Resource_8vvuc")
39+
canvas_position = Vector2(75, 150)
40+
41+
[sub_resource type="Resource" id="Resource_xn35n"]
42+
script = ExtResource("7_25a4o")
43+
name = &"mouse_position"
44+
arguments = {}
45+
46+
[sub_resource type="Resource" id="Resource_y3fve"]
47+
script = ExtResource("5_fjkgv")
48+
name = &"Node2D_set_position"
49+
children = Array[ExtResource("5_fjkgv")]([])
50+
arguments = {
51+
"value": SubResource("Resource_xn35n")
52+
}
53+
54+
[sub_resource type="Resource" id="Resource_k8cej"]
55+
script = ExtResource("4_dmtl1")
56+
root = SubResource("Resource_y3fve")
57+
canvas_position = Vector2(125, 397)
58+
59+
[sub_resource type="Resource" id="Resource_ydoon"]
60+
script = ExtResource("6_nae1f")
61+
script_inherits = "Sprite2D"
62+
block_serialization_trees = Array[ExtResource("4_dmtl1")]([SubResource("Resource_43nhb"), SubResource("Resource_k8cej")])
63+
variables = Array[ExtResource("7_qrh5q")]([])
64+
generated_script = "extends Sprite2D
65+
66+
67+
func _process(delta):
68+
rotation_degrees += -1
69+
rotation_degrees += 5
70+
71+
"
72+
version = 0
73+
74+
[node name="DemoInGame" type="Control"]
75+
layout_mode = 3
76+
anchors_preset = 15
77+
anchor_right = 1.0
78+
anchor_bottom = 1.0
79+
grow_horizontal = 2
80+
grow_vertical = 2
81+
mouse_filter = 1
82+
script = ExtResource("1_6vqkq")
83+
84+
[node name="HSplitContainer" type="HSplitContainer" parent="."]
85+
layout_mode = 1
86+
anchors_preset = 15
87+
anchor_right = 1.0
88+
anchor_bottom = 1.0
89+
grow_horizontal = 2
90+
grow_vertical = 2
91+
92+
[node name="BlockCanvas" parent="HSplitContainer" instance=ExtResource("2_7wcyd")]
93+
unique_name_in_owner = true
94+
layout_mode = 2
95+
96+
[node name="BoxContainer" type="BoxContainer" parent="HSplitContainer"]
97+
layout_mode = 2
98+
size_flags_horizontal = 3
99+
100+
[node name="Icon" type="Sprite2D" parent="HSplitContainer/BoxContainer"]
101+
position = Vector2(290, 317)
102+
texture = ExtResource("2_saega")
103+
104+
[node name="BlockCode" type="Node" parent="HSplitContainer/BoxContainer/Icon"]
105+
unique_name_in_owner = true
106+
script = ExtResource("3_com2k")
107+
block_script = SubResource("Resource_ydoon")
108+
109+
[node name="DragManager" parent="." instance=ExtResource("10_kgp86")]
110+
unique_name_in_owner = true
111+
block_canvas_path = NodePath("../HSplitContainer/BlockCanvas")

addons/block_code/ui/block_canvas/block_canvas.gd

+5-4
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ const BlocksCatalog = preload("res://addons/block_code/code_generation/blocks_ca
77
const BlockCodePlugin = preload("res://addons/block_code/block_code_plugin.gd")
88
const BlockDefinition = preload("res://addons/block_code/code_generation/block_definition.gd")
99
const BlockTreeUtil = preload("res://addons/block_code/ui/block_tree_util.gd")
10-
const DragManager = preload("res://addons/block_code/drag_manager/drag_manager.gd")
1110
const ScriptGenerator = preload("res://addons/block_code/code_generation/script_generator.gd")
1211
const Types = preload("res://addons/block_code/types/types.gd")
1312
const Util = preload("res://addons/block_code/ui/util.gd")
@@ -37,8 +36,8 @@ const ZOOM_FACTOR: float = 1.1
3736
@onready var _replace_block_code_button: Button = %ReplaceBlockCodeButton
3837

3938
@onready var _open_scene_icon = _open_scene_button.get_theme_icon("Load", "EditorIcons")
40-
@onready var _icon_zoom_out := EditorInterface.get_editor_theme().get_icon("ZoomLess", "EditorIcons")
41-
@onready var _icon_zoom_in := EditorInterface.get_editor_theme().get_icon("ZoomMore", "EditorIcons")
39+
@onready var _icon_zoom_out := EditorInterface.get_editor_theme().get_icon("ZoomLess", "EditorIcons") if EditorInterface.has_method("get_editor_theme") else null
40+
@onready var _icon_zoom_in := EditorInterface.get_editor_theme().get_icon("ZoomMore", "EditorIcons") if EditorInterface.has_method("get_editor_theme") else null
4241

4342
@onready var _mouse_override: Control = %MouseOverride
4443
@onready var _zoom_buttons: HBoxContainer = %ZoomButtons
@@ -205,7 +204,9 @@ func set_child(n: Node):
205204
func _on_context_changed():
206205
clear_canvas()
207206

208-
var edited_node = EditorInterface.get_inspector().get_edited_object() as Node
207+
var edited_node
208+
if EditorInterface.has_method("get_inspector"):
209+
edited_node = EditorInterface.get_inspector().get_edited_object() as Node
209210

210211
if _context.block_script != _current_block_script:
211212
_window.position = Vector2(0, 0)

0 commit comments

Comments
 (0)