94 lines
2.5 KiB
GDScript3
94 lines
2.5 KiB
GDScript3
|
tool
|
||
|
extends Control
|
||
|
|
||
|
var editor_reference
|
||
|
var editorPopup
|
||
|
|
||
|
|
||
|
# This is the information of this event and it will get parsed and saved to the JSON file.
|
||
|
var event_data = {
|
||
|
'call_node': {
|
||
|
'target_node_path': '',
|
||
|
'method_name': '',
|
||
|
'arguments': []
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
func load_data(data):
|
||
|
event_data = data
|
||
|
|
||
|
if (not event_data['call_node']['arguments'] is Array):
|
||
|
event_data['call_node']['arguments'] = []
|
||
|
|
||
|
for i in range(event_data['call_node']['arguments'].size()):
|
||
|
if (event_data['call_node']['arguments'][i] == null):
|
||
|
event_data['call_node']['arguments'][i] = ''
|
||
|
|
||
|
$PanelContainer/VBoxContainer/Properties/TargetNodeEdit.text = event_data['call_node']['target_node_path']
|
||
|
$PanelContainer/VBoxContainer/Properties/CallMethodEdit.text = event_data['call_node']['method_name']
|
||
|
$PanelContainer/VBoxContainer/Properties/ArgumentsSpinBox.value = event_data['call_node']['arguments'].size()
|
||
|
|
||
|
_create_argument_controls()
|
||
|
|
||
|
|
||
|
# signal callbacks
|
||
|
|
||
|
func _on_Target_LineEdit_text_changed(new_text):
|
||
|
event_data['call_node']['target_node_path'] = new_text
|
||
|
|
||
|
func _on_Method_LineEdit_text_changed(new_text):
|
||
|
event_data['call_node']['method_name'] = new_text
|
||
|
|
||
|
func _on_ArgumentsSpinBox_value_changed(value):
|
||
|
event_data['call_node']['arguments'].resize(max(0, value))
|
||
|
|
||
|
for i in range(event_data['call_node']['arguments'].size()):
|
||
|
if (event_data['call_node']['arguments'][i] == null):
|
||
|
event_data['call_node']['arguments'][i] = ''
|
||
|
|
||
|
_create_argument_controls()
|
||
|
pass
|
||
|
|
||
|
func _on_argument_value_changed(value, arg_index):
|
||
|
if (arg_index < 0 or arg_index >= event_data['call_node']['arguments'].size()):
|
||
|
return
|
||
|
|
||
|
event_data['call_node']['arguments'][arg_index] = str(value)
|
||
|
pass
|
||
|
|
||
|
# helpers
|
||
|
func _create_argument_controls():
|
||
|
if (not event_data['call_node']['arguments'] is Array):
|
||
|
return
|
||
|
|
||
|
# clear old
|
||
|
for c in $PanelContainer/VBoxContainer/Arguments.get_children():
|
||
|
$PanelContainer/VBoxContainer/Arguments.remove_child(c)
|
||
|
c.queue_free()
|
||
|
|
||
|
# create controls
|
||
|
var index = 0
|
||
|
for a in event_data['call_node']['arguments']:
|
||
|
var container = HBoxContainer.new()
|
||
|
container.name = "Argument%s" % index
|
||
|
|
||
|
var label = Label.new()
|
||
|
label.name = "ArgumentLabel"
|
||
|
label.text = "Argument %s:" % index
|
||
|
label.rect_min_size.x = 100
|
||
|
container.add_child(label)
|
||
|
|
||
|
var edit = LineEdit.new()
|
||
|
edit.name = "ArgumentValue"
|
||
|
edit.text = str(a)
|
||
|
edit.connect("text_changed", self, "_on_argument_value_changed", [ index ])
|
||
|
edit.rect_min_size.x = 250
|
||
|
container.add_child(edit)
|
||
|
|
||
|
$PanelContainer/VBoxContainer/Arguments.add_child(container)
|
||
|
|
||
|
index += 1
|
||
|
|
||
|
pass
|