Skip to content

Commit 018836e

Browse files
committed
BlocksCatalog: Include base blocks in get_inherited_blocks
Instead of getting specific blocks we know to have target_node_class "", change BlocksCatalog to include those blocks in the return value from get_inherited_blocks. This is possible due to the newly simplified implementation of _get_blocks_by_class. With this change, we can completely remove the list of default block definition names from BlockScriptSerialization.
1 parent 4144034 commit 018836e

File tree

3 files changed

+37
-92
lines changed

3 files changed

+37
-92
lines changed

addons/block_code/code_generation/blocks_catalog.gd

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -224,14 +224,9 @@ static func has_block(block_name: StringName):
224224
return block_name in _catalog
225225

226226

227-
static func get_blocks_by_class(_class_name: String) -> Array[BlockDefinition]:
227+
static func _get_blocks_by_class(_class_name: String) -> Array[BlockDefinition]:
228228
var result: Array[BlockDefinition]
229-
230-
if not _class_name:
231-
return result
232-
233229
result.assign(_catalog.values().filter(_block_definition_has_class_name.bind(_class_name)))
234-
235230
return result
236231

237232

@@ -263,7 +258,9 @@ static func _get_custom_parent_class_name(_custom_class_name: String) -> String:
263258
static func _get_parents(_class_name: String) -> Array[String]:
264259
if ClassDB.class_exists(_class_name):
265260
return _get_builtin_parents(_class_name)
266-
var parents: Array[String] = [_class_name]
261+
var parents: Array[String] = []
262+
if _class_name != "":
263+
parents.append(_class_name)
267264
var _parent_class_name = _get_custom_parent_class_name(_class_name)
268265
parents.append_array(_get_builtin_parents(_parent_class_name))
269266
return parents
@@ -274,7 +271,8 @@ static func get_inherited_blocks(_class_name: String) -> Array[BlockDefinition]:
274271

275272
var definitions: Array[BlockDefinition] = []
276273
for _parent_class_name in _get_parents(_class_name):
277-
definitions.append_array(get_blocks_by_class(_parent_class_name))
274+
definitions.append_array(_get_blocks_by_class(_parent_class_name))
275+
definitions.append_array(_get_blocks_by_class(""))
278276
return definitions
279277

280278

addons/block_code/serialization/block_script_serialization.gd

Lines changed: 0 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,6 @@ func _get_parameter_block_definition(block_name: String, parameter_name: String)
135135

136136
func _update_block_definitions():
137137
_available_blocks.clear()
138-
_available_blocks.append_array(_get_default_block_definitions())
139138
_available_blocks.append_array(_get_inherited_block_definitions())
140139
_available_blocks.append_array(_get_variable_block_definitions())
141140

@@ -176,64 +175,6 @@ func load_object_script() -> Object:
176175
return null
177176

178177

179-
func _get_default_block_definitions() -> Array[BlockDefinition]:
180-
var block: BlockDefinition
181-
var block_list: Array[BlockDefinition] = []
182-
183-
# Lifecycle
184-
for block_name in [&"ready", &"process", &"physics_process", &"queue_free"]:
185-
block = BlocksCatalog.get_block(block_name)
186-
block_list.append(block)
187-
188-
# Loops
189-
for block_name in [&"for", &"while", &"break", &"continue", &"await_scene_ready"]:
190-
block = BlocksCatalog.get_block(block_name)
191-
block_list.append(block)
192-
193-
# Logs
194-
block = BlocksCatalog.get_block(&"print")
195-
block_list.append(block)
196-
197-
# Communication
198-
for block_name in [&"define_method", &"call_method_group", &"call_method_node"]:
199-
block = BlocksCatalog.get_block(block_name)
200-
block_list.append(block)
201-
202-
for block_name in [&"add_to_group", &"add_node_to_group", &"remove_from_group", &"remove_node_from_group", &"is_in_group", &"is_node_in_group"]:
203-
block = BlocksCatalog.get_block(block_name)
204-
block_list.append(block)
205-
206-
# Variables
207-
block = BlocksCatalog.get_block(&"vector2")
208-
block_list.append(block)
209-
210-
# Math
211-
for block_name in [&"add", &"subtract", &"multiply", &"divide", &"pow", &"randf_range", &"randi_range", &"sin", &"cos", &"tan"]:
212-
block = BlocksCatalog.get_block(block_name)
213-
block_list.append(block)
214-
215-
# Logic
216-
for block_name in [&"if", &"else_if", &"else", &"compare", &"and", &"or", &"not"]:
217-
block = BlocksCatalog.get_block(block_name)
218-
block_list.append(block)
219-
220-
# Input
221-
block = BlocksCatalog.get_block(&"is_input_actioned")
222-
block_list.append(block)
223-
224-
# Sounds
225-
for block_name in [&"load_sound", &"play_sound", &"pause_continue_sound", &"stop_sound"]:
226-
block = BlocksCatalog.get_block(block_name)
227-
block_list.append(block)
228-
229-
# Graphics
230-
for block_name in [&"viewport_width", &"viewport_height", &"viewport_center"]:
231-
block = BlocksCatalog.get_block(block_name)
232-
block_list.append(block)
233-
234-
return block_list
235-
236-
237178
func _get_inherited_block_definitions() -> Array[BlockDefinition]:
238179
return BlocksCatalog.get_inherited_blocks(script_inherits)
239180

tests/test_category_factory.gd

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,19 @@ const BlocksCatalog = preload("res://addons/block_code/code_generation/blocks_ca
88
var block_script: BlockScriptSerialization
99

1010

11+
func assert_set_eq(set_a: Array, set_b: Array, text: String = ""):
12+
var set_a_sorted := set_a.duplicate()
13+
var set_b_sorted := set_b.duplicate()
14+
set_a_sorted.sort()
15+
set_b_sorted.sort()
16+
assert_eq(set_a_sorted, set_b_sorted, text)
17+
18+
1119
func get_category_names(categories: Array[BlockCategory]) -> Array[String]:
12-
var categories_sorted: Array[BlockCategory]
13-
categories_sorted.assign(categories)
14-
categories_sorted.sort_custom(BlockCategory.sort_by_order)
15-
var result: Array[String]
16-
result.assign(categories_sorted.map(func(category): return category.name))
17-
return result
20+
var category_names: Array[String]
21+
category_names.assign(categories.map(func(category): return category.name))
22+
category_names.sort()
23+
return category_names
1824

1925

2026
func get_class_category_names(_class_name: String) -> Array[String]:
@@ -28,27 +34,27 @@ func before_each():
2834
block_script.initialize()
2935

3036

37+
const default_category_names = [
38+
"Communication | Groups",
39+
"Communication | Methods",
40+
"Graphics | Viewport",
41+
"Input",
42+
"Lifecycle",
43+
"Log",
44+
"Logic | Boolean",
45+
"Logic | Comparison",
46+
"Logic | Conditionals",
47+
"Loops",
48+
"Math",
49+
"Sounds",
50+
"Variables",
51+
]
52+
53+
3154
func test_general_category_names():
3255
var blocks: Array[BlockDefinition] = block_script.get_available_blocks()
3356
var names: Array[String] = get_category_names(block_script.get_available_categories())
34-
assert_eq(
35-
names,
36-
[
37-
"Lifecycle",
38-
"Graphics | Viewport",
39-
"Sounds",
40-
"Input",
41-
"Communication | Methods",
42-
"Communication | Groups",
43-
"Loops",
44-
"Logic | Conditionals",
45-
"Logic | Comparison",
46-
"Logic | Boolean",
47-
"Variables",
48-
"Math",
49-
"Log",
50-
]
51-
)
57+
assert_set_eq(names, default_category_names)
5258

5359

5460
const class_category_names = [
@@ -60,7 +66,7 @@ const class_category_names = [
6066

6167

6268
func test_inherited_category_names(params = use_parameters(class_category_names)):
63-
assert_eq(get_class_category_names(params[0]), params[1])
69+
assert_set_eq(get_class_category_names(params[0]), default_category_names + params[1])
6470

6571

6672
func test_unique_block_names():

0 commit comments

Comments
 (0)