Skip to content

Commit a55644c

Browse files
authored
Merge pull request #70 from endlessm/support-duplicate-entry-blocks
When generating a script, merge duplicate entry blocks
2 parents 326e218 + a93162d commit a55644c

File tree

1 file changed

+22
-12
lines changed

1 file changed

+22
-12
lines changed

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

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,17 @@ func generate_script_from_current_window(script_inherits: String = ""):
77
# TODO: implement multiple windows
88
var current_window := _window
99

10-
var blocks := current_window.get_children()
10+
var entry_blocks_by_entry_statement: Dictionary = {}
1111

12-
var entry_blocks: Array[EntryBlock] = []
13-
14-
for c in blocks:
15-
if !(c is Block):
12+
for block in current_window.get_children():
13+
if !(block is Block):
1614
continue
1715

18-
if c is EntryBlock:
19-
entry_blocks.append(c)
16+
if block is EntryBlock:
17+
var entry_statement = block.get_entry_statement()
18+
if not entry_blocks_by_entry_statement.has(entry_statement):
19+
entry_blocks_by_entry_statement[entry_statement] = []
20+
entry_blocks_by_entry_statement[entry_statement].append(block)
2021

2122
var script: String = ""
2223

@@ -26,9 +27,21 @@ func generate_script_from_current_window(script_inherits: String = ""):
2627

2728
var init_func = InstructionTree.TreeNode.new("func _init():")
2829

29-
for entry_block in entry_blocks:
30-
script += entry_block.get_entry_statement() + "\n"
30+
for entry_statement in entry_blocks_by_entry_statement:
31+
var entry_blocks: Array[EntryBlock]
32+
entry_blocks.assign(entry_blocks_by_entry_statement[entry_statement])
33+
script += _generate_script_from_entry_blocks(entry_statement, entry_blocks, init_func)
34+
35+
if init_func.children:
36+
script += InstructionTree.new().generate_text(init_func)
37+
38+
return script
3139

40+
41+
func _generate_script_from_entry_blocks(entry_statement: String, entry_blocks: Array[EntryBlock], init_func: InstructionTree.TreeNode) -> String:
42+
var script = entry_statement + "\n"
43+
44+
for entry_block in entry_blocks:
3245
var next_block := entry_block.bottom_snap.get_snapped_block()
3346

3447
if next_block == null:
@@ -44,7 +57,4 @@ func generate_script_from_current_window(script_inherits: String = ""):
4457
if entry_block.signal_name:
4558
init_func.add_child(InstructionTree.TreeNode.new("{0}.connect(_on_{0})".format([entry_block.signal_name])))
4659

47-
if init_func.children:
48-
script += InstructionTree.new().generate_text(init_func)
49-
5060
return script

0 commit comments

Comments
 (0)