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.

line_node.gd 2.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. tool
  2. extends GraphNode
  3. signal changed_offset(nid, vec2)
  4. signal changed_size(this)
  5. signal changed_slots(this)
  6. signal erased(this)
  7. signal pressed_editor(this)
  8. signal pressed_load(this)
  9. signal pressed_save(this)
  10. signal text_changed(nid, new_text)
  11. onready var _Link_SpinBox = self.get_node("VBoxContainer/HBoxContainer/Link_SpinBox")
  12. onready var _Text_Editor = self.get_node("VBoxContainer/HBoxContainer2/TextEdit")
  13. var _nid : int = 0
  14. var _slot_amount : int = 1
  15. #Virtual Methods
  16. func _ready():
  17. self._update_slots()
  18. #Callback Methods
  19. func _on_Editor_BTN_pressed():
  20. self.emit_signal("pressed_editor", self)
  21. func _on_Line_close_request():
  22. self.emit_signal("erased", self)
  23. func _on_Line_offset_changed():
  24. self.emit_signal("changed_offset", self._nid, self.offset)
  25. func _on_Line_resize_request(new_minsize):
  26. self.rect_size = new_minsize
  27. self.emit_signal("changed_size", self)
  28. func _on_Link_SpinBox_value_changed(value):
  29. self._slot_amount = int(self._Link_SpinBox.value)
  30. self._update_slots()
  31. self.emit_signal("changed_slots", self)
  32. func _on_Load_BTN_pressed():
  33. self.emit_signal("pressed_load", self)
  34. func _on_Save_BTN_pressed():
  35. self.emit_signal("pressed_save", self)
  36. func _on_TextEdit_text_changed():
  37. self.emit_signal("text_changed", self._nid, self._Text_Editor.text)
  38. #Public Methods
  39. func get_nid() -> int:
  40. return self._nid
  41. func get_slot_amount() -> int:
  42. return self._slot_amount
  43. func get_text() -> String:
  44. return self._Text_Editor.text
  45. func set_nid(new_nid):
  46. self._nid = new_nid
  47. var new_name = "NID " + str(new_nid)
  48. self.title = new_name
  49. self.name = new_name
  50. func set_slot_amount(new_amount : int):
  51. self._slot_amount = new_amount
  52. func set_text(new_text : String):
  53. self._Text_Editor.text = new_text
  54. self.emit_signal("text_changed", self._nid, new_text)
  55. #Private Methods
  56. func _clear_link_labels():
  57. var children = self.get_children()
  58. for child in children:
  59. if child is Label:
  60. child.free()
  61. func _update_slots():
  62. self.clear_all_slots()
  63. self._clear_link_labels()
  64. self.set_slot(0, true, 0, Color(1.0, 1.0, 1.0, 1.0), true, 0, Color(1.0, 1.0, 1.0, 1.0), null, null)
  65. var base_link_label = Label.new()
  66. base_link_label.text = "0"
  67. base_link_label.align = Label.ALIGN_RIGHT
  68. self.add_child(base_link_label)
  69. self.move_child(base_link_label, 0)
  70. var last_output_link_label = base_link_label
  71. for slot in range(1, self._slot_amount):
  72. self.set_slot(slot, false, 0, Color(1.0, 1.0, 1.0, 1.0), true, 0, Color(1.0, 1.0, 1.0, 1.0), null, null)
  73. var output_link_label = Label.new()
  74. output_link_label.text = str(slot)
  75. output_link_label.align = Label.ALIGN_RIGHT
  76. self.add_child_below_node(last_output_link_label, output_link_label)
  77. last_output_link_label = output_link_label