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 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  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("MarginContainer/VBoxContainer/HBoxContainer/Link_SpinBox")
  12. onready var _MessageTextEdit = self.get_node("MarginContainer/VBoxContainer/HBoxContainer2/VBoxContainer/MessageTextEdit")
  13. onready var _SpeakerEmotionTextEdit = self.get_node("MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer/SpeakerEmotionTextEdit")
  14. onready var _SpeakerIdSpinBox = self.get_node("MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer/SpeakerIdSpinBox")
  15. onready var _SceneIdSpinBox = self.get_node("MarginContainer/VBoxContainer/HBoxContainer4/VBoxContainer/CenterContainer/HBoxContainer/SceneIdSpinBox")
  16. var _nid : int = 0
  17. var _slot_amount : int = 1
  18. var json_structure = {
  19. "speaker": {
  20. "id": 0,
  21. "emotion": "happy"
  22. },
  23. "scene": {
  24. "id": 0
  25. },
  26. "dialog": {
  27. "message": "",
  28. "choices_free": {
  29. "placeholder": "",
  30. "global_var_name": "",
  31. },
  32. "choices_multiple": [
  33. {
  34. "title": "",
  35. "arc": 0,
  36. "infobox": {
  37. "title": "",
  38. "text": "",
  39. "conditions": [],
  40. },
  41. "conditions": []
  42. }
  43. ]
  44. }
  45. }
  46. #Virtual Methods
  47. func _ready():
  48. self._update_slots()
  49. #Callback Methods
  50. func _on_Editor_BTN_pressed():
  51. self.emit_signal("pressed_editor", self)
  52. func _on_Line_close_request():
  53. self.emit_signal("erased", self)
  54. func _on_Line_offset_changed():
  55. self.emit_signal("changed_offset", self._nid, self.offset)
  56. func _on_Line_resize_request(new_minsize):
  57. self.rect_size = new_minsize
  58. self.emit_signal("changed_size", self)
  59. func _on_Link_SpinBox_value_changed(value):
  60. self._slot_amount = int(self._Link_SpinBox.value)
  61. self._update_slots()
  62. self.emit_signal("changed_slots", self)
  63. func _on_Load_BTN_pressed():
  64. self.emit_signal("pressed_load", self)
  65. func _on_Save_BTN_pressed():
  66. self.emit_signal("pressed_save", self)
  67. func _on_MessageTextEdit_text_changed():
  68. json_structure.dialog.message = self._MessageTextEdit.text
  69. emit_text()
  70. func _on_SceneIdSpinBox_value_changed(value):
  71. json_structure.scene.id = value
  72. emit_text()
  73. func _on_SpeakerEmotionTextEdit_text_changed():
  74. json_structure.speaker.emotion = self._SpeakerEmotionTextEdit.text
  75. emit_text()
  76. func _on_SpeakerIdSpinBox_value_changed(value):
  77. json_structure.speaker.id = value
  78. emit_text()
  79. #Public Methods
  80. func get_nid() -> int:
  81. return self._nid
  82. func get_slot_amount() -> int:
  83. return self._slot_amount
  84. func get_text() -> String:
  85. return JSON.print(json_structure)
  86. func set_nid(new_nid):
  87. self._nid = new_nid
  88. var new_name = "NID " + str(new_nid)
  89. self.title = new_name
  90. self.name = new_name
  91. func set_slot_amount(new_amount : int):
  92. self._slot_amount = new_amount
  93. func set_text(new_text : String):
  94. json_structure = JSON.parse(new_text)
  95. # TODO update components
  96. self.emit_signal("text_changed", self._nid, new_text)
  97. #Private Methods
  98. func emit_text():
  99. print(get_text())
  100. self.emit_signal("text_changed", self._nid, get_text())
  101. func _clear_link_labels():
  102. var children = self.get_children()
  103. for child in children:
  104. if child is Label:
  105. child.free()
  106. func _update_slots():
  107. self.clear_all_slots()
  108. self._clear_link_labels()
  109. 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)
  110. var base_link_label = Label.new()
  111. base_link_label.text = "0"
  112. base_link_label.align = Label.ALIGN_RIGHT
  113. self.add_child(base_link_label)
  114. self.move_child(base_link_label, 0)
  115. var last_output_link_label = base_link_label
  116. for slot in range(1, self._slot_amount):
  117. 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)
  118. var output_link_label = Label.new()
  119. output_link_label.text = str(slot)
  120. output_link_label.align = Label.ALIGN_RIGHT
  121. self.add_child_below_node(last_output_link_label, output_link_label)
  122. last_output_link_label = output_link_label