Skip to content

Commit b553433

Browse files
committed
WIP
(╯°□°)╯︵ ┻━┻
1 parent 98dd81c commit b553433

29 files changed

+498
-601
lines changed

addons/block_code/blocks/graphics/animationplayer_play.gd

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
@tool
2-
32
extends EBC_BlockExtension
43

4+
const OptionData = preload("res://addons/block_code/code_generation/option_data.gd")
5+
56

67
func get_defaults_for_node(defaults: Dictionary, context_node: Node) -> Dictionary:
78
var animation_player = context_node as AnimationPlayer

addons/block_code/blocks/graphics/animationplayer_play.tres

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44
[ext_resource type="Script" path="res://addons/block_code/code_generation/option_data.gd" id="1_xu43h"]
55
[ext_resource type="Script" path="res://addons/block_code/blocks/graphics/animationplayer_play.gd" id="2_7ymgi"]
66

7-
[sub_resource type="Resource" id="Resource_vnp2w"]
7+
[sub_resource type="Resource" id="Resource_qpxn2"]
88
script = ExtResource("1_xu43h")
99
selected = 0
10-
items = ["ahead", "backwards"]
10+
items = []
1111

12-
[sub_resource type="Resource" id="Resource_qpxn2"]
12+
[sub_resource type="Resource" id="Resource_vnp2w"]
1313
script = ExtResource("1_xu43h")
1414
selected = 0
15-
items = []
15+
items = ["ahead", "backwards"]
1616

1717
[resource]
1818
script = ExtResource("1_emeuv")

addons/block_code/code_generation/block_definition.gd

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ extends Resource
44

55
const Types = preload("res://addons/block_code/types/types.gd")
66

7+
const FORMAT_STRING_PATTERN = "\\[(?<out_parameter>[^\\]]+)\\]|\\{(?<in_parameter>[^}]+)\\}|(?<label>[^\\{\\[]+)"
8+
79
@export var name: StringName
810

911
## The target node. Leaving this empty the block is considered a general block
@@ -29,6 +31,8 @@ const Types = preload("res://addons/block_code/types/types.gd")
2931

3032
@export var extension_script: GDScript
3133

34+
static var _display_template_regex := RegEx.create_from_string(FORMAT_STRING_PATTERN)
35+
3236
var _extension: EBC_BlockExtension:
3337
get:
3438
if _extension == null and extension_script and extension_script.can_instantiate():
@@ -76,3 +80,58 @@ func get_defaults_for_node(context_node: Node) -> Dictionary:
7680

7781
func _to_string():
7882
return "%s - %s" % [name, target_node_class]
83+
84+
85+
func get_output_parameters() -> Dictionary:
86+
var result: Dictionary
87+
for item in parse_display_template(display_template):
88+
if item.has("out_parameter"):
89+
var parameter = item.get("out_parameter")
90+
result[parameter["name"]] = parameter["type"]
91+
return result
92+
93+
94+
static func parse_display_template(template_string: String):
95+
var items: Array[Dictionary]
96+
for regex_match in _display_template_regex.search_all(template_string):
97+
if regex_match.names.has("label"):
98+
var label_string := regex_match.get_string("label")
99+
items.append({
100+
"label": label_string
101+
})
102+
elif regex_match.names.has("in_parameter"):
103+
var parameter_string := regex_match.get_string("in_parameter")
104+
items.append({
105+
"in_parameter": _parse_parameter_format(parameter_string)
106+
})
107+
elif regex_match.names.has("out_parameter"):
108+
var parameter_string := regex_match.get_string("out_parameter")
109+
items.append({
110+
"out_parameter": _parse_parameter_format(parameter_string)
111+
})
112+
return items
113+
114+
115+
static func _parse_parameter_format(parameter_format: String) -> Dictionary:
116+
var parameter_name: String
117+
var parameter_type_str: String
118+
var parameter_type: Variant.Type
119+
var split := parameter_format.split(":", true, 1)
120+
121+
if len(split) == 0:
122+
return {}
123+
124+
if len(split) > 0:
125+
parameter_name = split[0].strip_edges()
126+
127+
if len(split) > 1:
128+
parameter_type_str = split[1].strip_edges()
129+
130+
if parameter_type_str:
131+
parameter_type = Types.STRING_TO_VARIANT_TYPE[parameter_type_str]
132+
133+
return {"name": parameter_name, "type": parameter_type}
134+
135+
136+
static func has_category(block_definition, category: String) -> bool:
137+
return block_definition.category == category

addons/block_code/code_generation/blocks_catalog.gd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ static func _setup_input_block():
240240
"Input",
241241
Types.BlockType.VALUE,
242242
TYPE_BOOL,
243-
"Is action {action_name: OPTION} {action: OPTION}",
243+
"Is action {action_name: NIL} {action: NIL}",
244244
'Input.is_action_{action}("{action_name}")',
245245
{"action_name": OptionData.new(inputmap_actions), "action": OptionData.new(["pressed", "just_pressed", "just_released"])},
246246
)

addons/block_code/drag_manager/drag_manager.gd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ func drag_block(block: Block, copied_from: Block = null):
6464

6565

6666
func copy_block(block: Block) -> Block:
67-
var new_block = Util.instantiate_block(block.definition)
67+
var new_block = block.block_factory.instantiate_block(block.definition)
6868
new_block.color = block.color
6969
return new_block
7070

addons/block_code/serialization/block_script_serialization.gd

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ extends Resource
44

55
const ASTList = preload("res://addons/block_code/code_generation/ast_list.gd")
66
const BlockAST = preload("res://addons/block_code/code_generation/block_ast.gd")
7-
const BlocksCatalog = preload("res://addons/block_code/code_generation/blocks_catalog.gd")
87
const BlockCategory = preload("res://addons/block_code/ui/picker/categories/block_category.gd")
98
const BlockDefinition = preload("res://addons/block_code/code_generation/block_definition.gd")
109
const BlockSerialization = preload("res://addons/block_code/serialization/block_serialization.gd")
@@ -34,31 +33,27 @@ func _init(
3433

3534
func _set_variables(value):
3635
variables = value
37-
_refresh_var_block_definitions()
36+
#_refresh_var_block_definitions()
3837

3938

40-
func _refresh_var_block_definitions():
41-
_var_block_definitions.clear()
42-
for block_def in BlocksCatalog.get_variable_block_definitions(variables):
43-
_var_block_definitions[block_def.name] = block_def
39+
#func _refresh_var_block_definitions():
40+
#_var_block_definitions.clear()
41+
#for block_def in BlocksCatalog.get_variable_block_definitions(variables):
42+
#_var_block_definitions[block_def.name] = block_def
4443

4544

46-
func _get_block(block_name: StringName) -> BlockDefinition:
47-
var block_def: BlockDefinition = _var_block_definitions.get(block_name)
48-
if block_def == null:
49-
block_def = BlocksCatalog.get_block(block_name)
50-
return block_def
45+
#func _get_block(block_name: StringName) -> BlockDefinition:
46+
#var block_def: BlockDefinition = _var_block_definitions.get(block_name)
47+
#if block_def == null:
48+
#block_def = BlocksCatalog.get_block(block_name)
49+
#return block_def
5150

5251

53-
func get_definitions() -> Array[BlockDefinition]:
52+
func load_object_script() -> GDScript:
5453
for class_dict in ProjectSettings.get_global_class_list():
5554
if class_dict.class == script_inherits:
56-
var script = load(class_dict.path)
57-
if script.has_method("setup_custom_blocks"):
58-
script.setup_custom_blocks()
59-
break
60-
61-
return BlocksCatalog.get_inherited_blocks(script_inherits)
55+
return load(class_dict.path)
56+
return null
6257

6358

6459
func get_categories() -> Array[BlockCategory]:
@@ -87,7 +82,7 @@ func _tree_to_ast(tree: BlockSerializationTree) -> BlockAST:
8782

8883
func _block_to_ast_node(node: BlockSerialization) -> BlockAST.ASTNode:
8984
var ast_node := BlockAST.ASTNode.new()
90-
ast_node.data = _get_block(node.name)
85+
ast_node.data = node.name
9186

9287
for arg_name in node.arguments:
9388
var argument = node.arguments[arg_name]
@@ -105,7 +100,7 @@ func _block_to_ast_node(node: BlockSerialization) -> BlockAST.ASTNode:
105100

106101
func _value_to_ast_value(value_node: ValueBlockSerialization) -> BlockAST.ASTValueNode:
107102
var ast_value_node := BlockAST.ASTValueNode.new()
108-
ast_value_node.data = _get_block(value_node.name)
103+
ast_value_node.data = value_node.name
109104

110105
for arg_name in value_node.arguments:
111106
var argument = value_node.arguments[arg_name]
@@ -126,7 +121,7 @@ func update_from_ast_list(ast_list: ASTList):
126121

127122

128123
func _block_from_ast_node(ast_node: BlockAST.ASTNode) -> BlockSerialization:
129-
var block := BlockSerialization.new(ast_node.data.name)
124+
var block := BlockSerialization.new(ast_node.data)
130125

131126
for arg_name in ast_node.arguments:
132127
var argument = ast_node.arguments[arg_name]
@@ -143,7 +138,7 @@ func _block_from_ast_node(ast_node: BlockAST.ASTNode) -> BlockSerialization:
143138

144139

145140
func _value_from_ast_value(ast_node: BlockAST.ASTValueNode) -> ValueBlockSerialization:
146-
var value := ValueBlockSerialization.new(ast_node.data.name)
141+
var value := ValueBlockSerialization.new(ast_node.data)
147142

148143
for arg_name in ast_node.arguments:
149144
var argument = ast_node.arguments[arg_name]

addons/block_code/simple_nodes/simple_character/simple_character.gd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ static func setup_custom_blocks():
129129
block_definition.target_node_class = _class_name
130130
block_definition.category = "Input"
131131
block_definition.type = Types.BlockType.STATEMENT
132-
block_definition.display_template = "Move with {player: OPTION} buttons as {kind: OPTION}"
132+
block_definition.display_template = "Move with {player: NIL} buttons as {kind: NIL}"
133133
# TODO: delta here is assumed to be the parameter name of
134134
# the _process or _physics_process method:
135135
block_definition.code_template = 'move_with_player_buttons("{player}", "{kind}", delta)'

0 commit comments

Comments
 (0)