Skip to content

Commit 1164e21

Browse files
authored
Merge branch 'main' into block-classes
2 parents 2886d40 + f98cdc0 commit 1164e21

File tree

17 files changed

+483
-75
lines changed

17 files changed

+483
-75
lines changed

addons/block_code/simple_nodes/simple_character/simple_character.gd

+4
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ func get_custom_class():
1313
return "SimpleCharacter"
1414

1515

16+
static func get_base_class():
17+
return "CharacterBody2D"
18+
19+
1620
static func get_exposed_properties() -> Array[String]:
1721
return ["position"]
1822

addons/block_code/types/types.gd

+11
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ const cast_relationships = [
3535
[TYPE_FLOAT, TYPE_INT, "int(%s)"],
3636
[TYPE_INT, TYPE_STRING, "str(%s)"],
3737
[TYPE_FLOAT, TYPE_STRING, "str(%s)"],
38+
[TYPE_COLOR, TYPE_STRING, "str(%s)"],
3839
]
3940

4041
# Directed graph, edges are CastGraphEdge
@@ -169,3 +170,13 @@ class PriorityQueue:
169170
if found_pair:
170171
found_pair[1] = priority
171172
_sort()
173+
174+
175+
# Global classes
176+
class OptionData:
177+
var selected: int
178+
var items: Array
179+
180+
func _init(p_items: Array = [], p_selected: int = 0):
181+
items = p_items
182+
selected = p_selected

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

+8
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ func generate_script_from_current_window(script_inherits: String = ""):
2424

2525
script += "var VAR_DICT := {}\n\n"
2626

27+
var init_func = InstructionTree.TreeNode.new("func _init():")
28+
2729
for entry_block in entry_blocks:
2830
script += entry_block.get_entry_statement() + "\n"
2931

@@ -39,4 +41,10 @@ func generate_script_from_current_window(script_inherits: String = ""):
3941

4042
script += "\n"
4143

44+
if entry_block.signal_name:
45+
init_func.add_child(InstructionTree.TreeNode.new("{0}.connect(_on_{0})".format([entry_block.signal_name])))
46+
47+
if init_func.children:
48+
script += InstructionTree.new().generate_text(init_func)
49+
4250
return script

addons/block_code/ui/blocks/control_block/control_block.gd

+5-4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const Constants = preload("res://addons/block_code/ui/constants.gd")
66

77
@export var block_formats: Array = []
88
@export var statements: Array = []
9+
@export var defaults: Dictionary = {}
910

1011
var snaps: Array
1112
var param_name_input_pairs_array: Array
@@ -25,7 +26,7 @@ func _ready():
2526
if param_input_strings_array:
2627
for i in param_name_input_pairs_array.size():
2728
for pair in param_name_input_pairs_array[i]:
28-
pair[1].set_plain_text(param_input_strings_array[i][pair[0]])
29+
pair[1].set_raw_input(param_input_strings_array[i][pair[0]])
2930

3031

3132
func _on_drag_drop_area_mouse_down():
@@ -68,14 +69,14 @@ func get_instruction_node() -> InstructionTree.TreeNode:
6869

6970
func get_serialized_props() -> Array:
7071
var props := super()
71-
props.append_array(serialize_props(["block_formats", "statements"]))
72+
props.append_array(serialize_props(["block_formats", "statements", "defaults"]))
7273

7374
var _param_input_strings_array = []
7475
for param_name_input_pairs in param_name_input_pairs_array:
7576
var _param_input_strings: Dictionary = {}
7677

7778
for pair in param_name_input_pairs:
78-
_param_input_strings[pair[0]] = pair[1].get_plain_text()
79+
_param_input_strings[pair[0]] = pair[1].get_raw_input()
7980

8081
_param_input_strings_array.append(_param_input_strings)
8182

@@ -134,7 +135,7 @@ func format():
134135
row_hbox.mouse_filter = Control.MOUSE_FILTER_IGNORE
135136
row_hbox_container.add_child(row_hbox)
136137

137-
param_name_input_pairs_array.append(StatementBlock.format_string(self, row_hbox, block_formats[i]))
138+
param_name_input_pairs_array.append(StatementBlock.format_string(self, row_hbox, block_formats[i], defaults))
138139

139140
%Rows.add_child(row)
140141

addons/block_code/ui/blocks/entry_block/entry_block.gd

+9-4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
class_name EntryBlock
33
extends StatementBlock
44

5+
## if non-empty, this block defines a callback that will be connected to the signal with this name
6+
@export var signal_name: String
7+
58

69
func _ready():
710
block_type = Types.BlockType.ENTRY
@@ -22,8 +25,10 @@ func get_entry_statement() -> String:
2225
for pair in param_name_input_pairs:
2326
formatted_statement = formatted_statement.replace("{%s}" % pair[0], pair[1].get_string())
2427

25-
# One line, should not have \n
26-
if formatted_statement.find("\n") != -1:
27-
push_error("Entry block has multiline statement.")
28-
2928
return formatted_statement
29+
30+
31+
func get_serialized_props() -> Array:
32+
var props := super()
33+
props.append_array(serialize_props(["signal_name"]))
34+
return props

addons/block_code/ui/blocks/entry_block/entry_block.tscn

+2
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@
55

66
[node name="EntryBlock" instance=ExtResource("1_byjbb")]
77
script = ExtResource("2_3ik8h")
8+
defaults = null
89
block_name = "entry_block"
910
label = "EntryBlock"
1011
block_type = 1
1112

13+
1214
[node name="Background" parent="VBoxContainer/TopMarginContainer" index="0"]
1315
show_top = false

addons/block_code/ui/blocks/parameter_block/parameter_block.gd

+5-4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ extends Block
55
@export var block_format: String = ""
66
@export var statement: String = ""
77
@export var variant_type: Variant.Type
8+
@export var defaults: Dictionary = {}
89

910
@onready var _panel := $Panel
1011
@onready var _hbox := %HBoxContainer
@@ -26,7 +27,7 @@ func _ready():
2627

2728
if param_input_strings:
2829
for pair in param_name_input_pairs:
29-
pair[1].set_plain_text(param_input_strings[pair[0]])
30+
pair[1].set_raw_input(param_input_strings[pair[0]])
3031

3132

3233
func _on_drag_drop_area_mouse_down():
@@ -35,11 +36,11 @@ func _on_drag_drop_area_mouse_down():
3536

3637
func get_serialized_props() -> Array:
3738
var props := super()
38-
props.append_array(serialize_props(["block_format", "statement"]))
39+
props.append_array(serialize_props(["block_format", "statement", "defaults", "variant_type"]))
3940

4041
var _param_input_strings: Dictionary = {}
4142
for pair in param_name_input_pairs:
42-
_param_input_strings[pair[0]] = pair[1].get_plain_text()
43+
_param_input_strings[pair[0]] = pair[1].get_raw_input()
4344

4445
props.append(["param_input_strings", _param_input_strings])
4546

@@ -65,4 +66,4 @@ static func get_scene_path():
6566

6667

6768
func format():
68-
param_name_input_pairs = StatementBlock.format_string(self, %HBoxContainer, block_format)
69+
param_name_input_pairs = StatementBlock.format_string(self, %HBoxContainer, block_format, defaults)

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

+3-2
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_0afbg"]
6+
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_dbera"]
77
bg_color = Color(1, 1, 1, 1)
88
border_width_left = 3
99
border_width_top = 3
@@ -19,14 +19,15 @@ offset_right = 16.0
1919
offset_bottom = 8.0
2020
size_flags_horizontal = 0
2121
script = ExtResource("1_0hajy")
22+
defaults = null
2223
block_name = "parameter_block"
2324
label = "Param"
2425
block_type = 3
2526

2627
[node name="Panel" type="Panel" parent="."]
2728
unique_name_in_owner = true
2829
layout_mode = 2
29-
theme_override_styles/panel = SubResource("StyleBoxFlat_0afbg")
30+
theme_override_styles/panel = SubResource("StyleBoxFlat_dbera")
3031

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

addons/block_code/ui/blocks/statement_block/statement_block.gd

+26-8
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ extends Block
44

55
@export var block_format: String = ""
66
@export var statement: String = ""
7+
@export var defaults: Dictionary = {}
78

89
@onready var _background := %Background
910
@onready var _hbox := %HBoxContainer
@@ -23,7 +24,7 @@ func _ready():
2324

2425
if param_input_strings:
2526
for pair in param_name_input_pairs:
26-
pair[1].set_plain_text(param_input_strings[pair[0]])
27+
pair[1].set_raw_input(param_input_strings[pair[0]])
2728

2829

2930
func _on_drag_drop_area_mouse_down():
@@ -32,11 +33,11 @@ func _on_drag_drop_area_mouse_down():
3233

3334
func get_serialized_props() -> Array:
3435
var props := super()
35-
props.append_array(serialize_props(["block_format", "statement"]))
36+
props.append_array(serialize_props(["block_format", "statement", "defaults"]))
3637

3738
var _param_input_strings: Dictionary = {}
3839
for pair in param_name_input_pairs:
39-
_param_input_strings[pair[0]] = pair[1].get_plain_text()
40+
_param_input_strings[pair[0]] = pair[1].get_raw_input()
4041

4142
props.append(["param_input_strings", _param_input_strings])
4243
return props
@@ -75,10 +76,10 @@ func get_instruction_node() -> InstructionTree.TreeNode:
7576

7677

7778
func format():
78-
param_name_input_pairs = format_string(self, %HBoxContainer, block_format)
79+
param_name_input_pairs = format_string(self, %HBoxContainer, block_format, defaults)
7980

8081

81-
static func format_string(parent_block: Block, attach_to: Node, string: String) -> Array:
82+
static func format_string(parent_block: Block, attach_to: Node, string: String, _defaults: Dictionary) -> Array:
8283
var _param_name_input_pairs = []
8384
var regex = RegEx.new()
8485
regex.compile("\\[([^\\]]+)\\]|\\{([^}]+)\\}") # Capture things of format {test} or [test]
@@ -100,15 +101,32 @@ static func format_string(parent_block: Block, attach_to: Node, string: String)
100101
var split := param.split(": ")
101102
var param_name := split[0]
102103
var param_type_str := split[1]
103-
var param_type: Variant.Type = Types.STRING_TO_VARIANT_TYPE[param_type_str]
104+
105+
var param_type = null
106+
var option := false
107+
if param_type_str == "OPTION": # Easy way to specify dropdown option
108+
option = true
109+
else:
110+
param_type = Types.STRING_TO_VARIANT_TYPE[param_type_str]
111+
112+
var param_default = null
113+
if _defaults.has(param_name):
114+
param_default = _defaults[param_name]
104115

105116
var param_input: ParameterInput = preload("res://addons/block_code/ui/blocks/utilities/parameter_input/parameter_input.tscn").instantiate()
106117
param_input.name = "ParameterInput%d" % start # Unique path
107118
param_input.placeholder = param_name
108-
param_input.variant_type = param_type
119+
if param_type:
120+
param_input.variant_type = param_type
121+
elif option:
122+
param_input.option = true
109123
param_input.block = parent_block
110-
param_input.text_modified.connect(func(): parent_block.modified.emit())
124+
param_input.modified.connect(func(): parent_block.modified.emit())
125+
111126
attach_to.add_child(param_input)
127+
if param_default:
128+
param_input.set_raw_input(param_default)
129+
112130
_param_name_input_pairs.append([param_name, param_input])
113131

114132
if copy_block:

addons/block_code/ui/blocks/statement_block/statement_block.tscn

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
[node name="StatementBlock" type="MarginContainer"]
99
size_flags_horizontal = 0
1010
script = ExtResource("1_6wvlf")
11+
defaults = null
1112
block_name = "statement_block"
1213
label = "StatementBlock"
1314
bottom_snap_path = NodePath("VBoxContainer/SnapPoint")

0 commit comments

Comments
 (0)