No Description
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.

CallNode.gd 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. tool
  2. extends Control
  3. var editor_reference
  4. var editorPopup
  5. # This is the information of this event and it will get parsed and saved to the JSON file.
  6. var event_data = {
  7. 'call_node': {
  8. 'target_node_path': '',
  9. 'method_name': '',
  10. 'arguments': []
  11. }
  12. }
  13. func load_data(data):
  14. event_data = data
  15. if (not event_data['call_node']['arguments'] is Array):
  16. event_data['call_node']['arguments'] = []
  17. for i in range(event_data['call_node']['arguments'].size()):
  18. if (event_data['call_node']['arguments'][i] == null):
  19. event_data['call_node']['arguments'][i] = ''
  20. $PanelContainer/VBoxContainer/Properties/TargetNodeEdit.text = event_data['call_node']['target_node_path']
  21. $PanelContainer/VBoxContainer/Properties/CallMethodEdit.text = event_data['call_node']['method_name']
  22. $PanelContainer/VBoxContainer/Properties/ArgumentsSpinBox.value = event_data['call_node']['arguments'].size()
  23. _create_argument_controls()
  24. # signal callbacks
  25. func _on_Target_LineEdit_text_changed(new_text):
  26. event_data['call_node']['target_node_path'] = new_text
  27. func _on_Method_LineEdit_text_changed(new_text):
  28. event_data['call_node']['method_name'] = new_text
  29. func _on_ArgumentsSpinBox_value_changed(value):
  30. event_data['call_node']['arguments'].resize(max(0, value))
  31. for i in range(event_data['call_node']['arguments'].size()):
  32. if (event_data['call_node']['arguments'][i] == null):
  33. event_data['call_node']['arguments'][i] = ''
  34. _create_argument_controls()
  35. pass
  36. func _on_argument_value_changed(value, arg_index):
  37. if (arg_index < 0 or arg_index >= event_data['call_node']['arguments'].size()):
  38. return
  39. event_data['call_node']['arguments'][arg_index] = str(value)
  40. pass
  41. # helpers
  42. func _create_argument_controls():
  43. if (not event_data['call_node']['arguments'] is Array):
  44. return
  45. # clear old
  46. for c in $PanelContainer/VBoxContainer/Arguments.get_children():
  47. $PanelContainer/VBoxContainer/Arguments.remove_child(c)
  48. c.queue_free()
  49. # create controls
  50. var index = 0
  51. for a in event_data['call_node']['arguments']:
  52. var container = HBoxContainer.new()
  53. container.name = "Argument%s" % index
  54. var label = Label.new()
  55. label.name = "ArgumentLabel"
  56. label.text = "Argument %s:" % index
  57. label.rect_min_size.x = 100
  58. container.add_child(label)
  59. var edit = LineEdit.new()
  60. edit.name = "ArgumentValue"
  61. edit.text = str(a)
  62. edit.connect("text_changed", self, "_on_argument_value_changed", [ index ])
  63. edit.rect_min_size.x = 250
  64. container.add_child(edit)
  65. $PanelContainer/VBoxContainer/Arguments.add_child(container)
  66. index += 1
  67. pass