Skip to content

Commit 29fc87a

Browse files
authored
Merge pull request #25 from endlessm/entry-block
Add EntryBlock class
2 parents 656da20 + d642a0c commit 29fc87a

File tree

6 files changed

+217
-237
lines changed

6 files changed

+217
-237
lines changed

addons/block_code/ui/block_canvas/node_block_canvas/node_block_canvas.gd

Lines changed: 11 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -9,65 +9,34 @@ func generate_script_from_current_window(script_inherits: String = ""):
99

1010
var blocks := current_window.get_children()
1111

12-
var ready_nodes: Array[BasicBlock] = []
13-
var process_nodes: Array[BasicBlock] = []
14-
var physics_process_nodes: Array[BasicBlock] = []
15-
var signal_nodes: Array[StatementBlock] = []
12+
var entry_blocks: Array[EntryBlock] = []
1613

1714
for c in blocks:
1815
if !(c is Block):
1916
continue
2017

21-
match c.block_name:
22-
"ready_block":
23-
ready_nodes.append(c)
24-
"process_block":
25-
process_nodes.append(c)
26-
"physics_process_block":
27-
physics_process_nodes.append(c)
28-
"signal_block":
29-
signal_nodes.append(c)
18+
if c is EntryBlock:
19+
entry_blocks.append(c)
3020

3121
var script: String = ""
3222

3323
script += "extends %s\n\n" % script_inherits
3424

3525
script += "var VAR_DICT := {}\n\n"
3626

37-
var node_groups = [["func _ready():", ready_nodes], ["func _process(_delta):", process_nodes], ["func _physics_process(_delta):", physics_process_nodes]]
27+
for entry_block in entry_blocks:
28+
script += entry_block.get_entry_statement() + "\n"
3829

39-
# Get signal entries
40-
var signal_groups: Dictionary = {}
41-
for signal_node in signal_nodes:
42-
# Little bit hacky to get first param
43-
var signal_name: String = signal_node.param_name_input_pairs[0][1].get_plain_text()
44-
if signal_groups.has(signal_name):
45-
signal_groups[signal_name].append(signal_node)
46-
else:
47-
signal_groups[signal_name] = [signal_node]
48-
49-
for signal_name in signal_groups:
50-
node_groups.append(["func signal_%s():" % signal_name, signal_groups[signal_name]])
51-
52-
for section in node_groups:
53-
script += section[0] + "\n"
54-
55-
var should_pass: bool = true
56-
for block in section[1]:
57-
if block.bottom_snap.get_snapped_block():
58-
should_pass = false
59-
break
30+
var next_block := entry_block.bottom_snap.get_snapped_block()
6031

61-
if should_pass:
32+
if next_block == null:
6233
script += "\tpass\n"
6334
else:
64-
for block in section[1]:
65-
var generator: InstructionTree = InstructionTree.new()
66-
var instruction_node: InstructionTree.TreeNode = block.get_instruction_node()
67-
var to_append := generator.generate_text(instruction_node, 1)
68-
script += to_append
35+
var generator: InstructionTree = InstructionTree.new()
36+
var instruction_node: InstructionTree.TreeNode = next_block.get_instruction_node()
37+
var to_append := generator.generate_text(instruction_node, 1)
38+
script += to_append
6939

70-
#script += "\n\tsuper()\n\n"
7140
script += "\n"
7241

7342
return script
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
@tool
2+
class_name EntryBlock
3+
extends StatementBlock
4+
5+
6+
func _ready():
7+
super()
8+
9+
10+
func get_scene_path():
11+
return "res://addons/block_code/ui/blocks/entry_block/entry_block.tscn"
12+
13+
14+
func get_entry_statement() -> String:
15+
var formatted_statement := statement
16+
17+
for pair in param_name_input_pairs:
18+
formatted_statement = formatted_statement.replace("{%s}" % pair[0], pair[1].get_string())
19+
20+
# One line, should not have \n
21+
if formatted_statement.find("\n") != -1:
22+
push_error("Entry block has multiline statement.")
23+
24+
return formatted_statement
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[gd_scene load_steps=3 format=3 uid="uid://d2fibflv3ojys"]
2+
3+
[ext_resource type="PackedScene" uid="uid://c84vmg3odrtxt" path="res://addons/block_code/ui/blocks/statement_block/statement_block.tscn" id="1_byjbb"]
4+
[ext_resource type="Script" path="res://addons/block_code/ui/blocks/entry_block/entry_block.gd" id="2_3ik8h"]
5+
6+
[node name="EntryBlock" instance=ExtResource("1_byjbb")]
7+
script = ExtResource("2_3ik8h")
8+
block_name = "entry_block"
9+
label = "EntryBlock"
10+
block_type = 2

addons/block_code/ui/blocks/parameter_block/parameter_block.tscn

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
[ext_resource type="Script" path="res://addons/block_code/ui/blocks/parameter_block/parameter_block.gd" id="1_0hajy"]
44
[ext_resource type="PackedScene" uid="uid://c7puyxpqcq6xo" path="res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.tscn" id="2_gy5co"]
55

6-
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_vvwx0"]
6+
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_0afbg"]
77
bg_color = Color(1, 1, 1, 1)
88
border_width_left = 3
99
border_width_top = 3
@@ -26,7 +26,7 @@ block_type = 3
2626
[node name="Panel" type="Panel" parent="."]
2727
unique_name_in_owner = true
2828
layout_mode = 2
29-
theme_override_styles/panel = SubResource("StyleBoxFlat_vvwx0")
29+
theme_override_styles/panel = SubResource("StyleBoxFlat_0afbg")
3030

3131
[node name="DragDropArea" parent="." instance=ExtResource("2_gy5co")]
3232
layout_mode = 2

addons/block_code/ui/picker/categories/category_factory.gd

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const BLOCKS: Dictionary = {
66
"control_block": preload("res://addons/block_code/ui/blocks/control_block/control_block.tscn"),
77
"parameter_block": preload("res://addons/block_code/ui/blocks/parameter_block/parameter_block.tscn"),
88
"statement_block": preload("res://addons/block_code/ui/blocks/statement_block/statement_block.tscn"),
9+
"entry_block": preload("res://addons/block_code/ui/blocks/entry_block/entry_block.tscn"),
910
}
1011

1112

@@ -14,22 +15,22 @@ static func get_general_categories() -> Array[BlockCategory]:
1415

1516
# Entry
1617
var entry_list: Array[Block] = []
17-
b = BLOCKS["basic_block"].instantiate()
18+
b = BLOCKS["entry_block"].instantiate()
1819
b.block_name = "ready_block"
19-
b.label = "On Ready"
20-
b.block_type = Types.BlockType.ENTRY
20+
b.block_format = "On Ready"
21+
b.statement = "func _ready():"
2122
entry_list.append(b)
2223

23-
b = BLOCKS["basic_block"].instantiate()
24+
b = BLOCKS["entry_block"].instantiate()
2425
b.block_name = "process_block"
25-
b.label = "On Process"
26-
b.block_type = Types.BlockType.ENTRY
26+
b.block_format = "On Process"
27+
b.statement = "func _process(delta):"
2728
entry_list.append(b)
2829

29-
b = BLOCKS["basic_block"].instantiate()
30+
b = BLOCKS["entry_block"].instantiate()
3031
b.block_name = "physics_process_block"
31-
b.label = "On Physics Process"
32-
b.block_type = Types.BlockType.ENTRY
32+
b.block_format = "On Physics Process"
33+
b.statement = "func _physics_process(delta):"
3334
entry_list.append(b)
3435

3536
var entry_cat: BlockCategory = BlockCategory.new("Entry", entry_list, Color("fa5956"))
@@ -64,20 +65,21 @@ static func get_general_categories() -> Array[BlockCategory]:
6465
b.statement = "print({text})"
6566
test_list.append(b)
6667

67-
b = BLOCKS["statement_block"].instantiate()
68-
b.block_type = Types.BlockType.ENTRY
68+
b = BLOCKS["entry_block"].instantiate()
6969
b.block_format = "On body enter [body: NODE]"
70+
b.statement = "func _on_body_enter(body):"
7071
test_list.append(b)
7172

7273
var test_cat: BlockCategory = BlockCategory.new("Test", test_list, Color("9989df"))
7374

7475
# Signal
7576
var signal_list: Array[Block] = []
7677

77-
b = BLOCKS["statement_block"].instantiate()
78-
b.block_name = "signal_block"
79-
b.block_type = Types.BlockType.ENTRY
80-
b.block_format = "On signal {signal: STRING}"
78+
b = BLOCKS["entry_block"].instantiate()
79+
# HACK: make signals work with new entry nodes. NONE instead of STRING type allows
80+
# plain text input for function name. Should revamp signals later
81+
b.block_format = "On signal {signal: NONE}"
82+
b.statement = "func signal_{signal}():"
8183
signal_list.append(b)
8284

8385
b = BLOCKS["statement_block"].instantiate()

0 commit comments

Comments
 (0)