You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
3.3 KiB
107 lines
3.3 KiB
tool |
|
extends "res://addons/dialogic/Editor/Events/Parts/EventPart.gd" |
|
|
|
# has an event_data variable that stores the current data!!! |
|
|
|
## node references |
|
onready var target_path_input = $Properties/TargetNodeEdit |
|
onready var method_name_input = $Properties/CallMethodEdit |
|
onready var argument_length = $Properties/ArgumentsSpinBox |
|
onready var arguments_container = $Arguments |
|
|
|
# used to connect the signals |
|
func _ready(): |
|
target_path_input.connect("text_changed", self, "_on_TargetPathInput_text_changed") |
|
method_name_input.connect("text_changed", self, "_on_MethodName_text_changed") |
|
argument_length.connect("value_changed", self, "_on_AgrumentLength_value_changed") |
|
|
|
# called by the event block |
|
func load_data(data:Dictionary): |
|
# First set the event_data |
|
.load_data(data) |
|
|
|
# Now update the ui nodes to display the data. |
|
target_path_input.text = event_data['call_node']['target_node_path'] |
|
method_name_input.text = event_data['call_node']['method_name'] |
|
|
|
for i in range(event_data['call_node']['arguments'].size()): |
|
if (event_data['call_node']['arguments'][i] == null): |
|
event_data['call_node']['arguments'][i] = '' |
|
|
|
argument_length.value = len(event_data['call_node']['arguments']) |
|
|
|
_create_argument_controls() |
|
|
|
# has to return the wanted preview, only useful for body parts |
|
func get_preview(): |
|
if event_data['call_node']["target_node_path"] and event_data['call_node']['method_name']: |
|
return 'Calls `'+event_data['call_node']['method_name']+ "` on node `"+event_data['call_node']["target_node_path"]+"` with an array with "+str(len( event_data['call_node']['arguments'])) +" items." |
|
else: |
|
return '' |
|
|
|
func _on_TargetPathInput_text_changed(text): |
|
event_data['call_node']['target_node_path'] = text |
|
|
|
# informs the parent about the changes! |
|
data_changed() |
|
|
|
func _on_MethodName_text_changed(text): |
|
event_data['call_node']['method_name'] = text |
|
|
|
# informs the parent about the changes! |
|
data_changed() |
|
|
|
func _on_AgrumentLength_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() |
|
|
|
# informs the parent about the changes! |
|
data_changed() |
|
|
|
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) |
|
|
|
# informs the parent about the changes! |
|
data_changed() |
|
|
|
|
|
# helpers |
|
func _create_argument_controls(): |
|
if (not event_data['call_node']['arguments'] is Array): |
|
return |
|
|
|
# clear old |
|
for c in arguments_container.get_children(): |
|
arguments_container.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 = "IndexLabel" |
|
label.text = "Index %s:" % index |
|
label.rect_min_size.x = 100 |
|
container.add_child(label) |
|
|
|
var edit = LineEdit.new() |
|
edit.name = "IndexValue" |
|
edit.text = str(a) |
|
edit.connect("text_changed", self, "_on_argument_value_changed", [ index ]) |
|
edit.rect_min_size.x = 250 |
|
container.add_child(edit) |
|
|
|
arguments_container.add_child(container) |
|
|
|
index += 1
|
|
|