123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- tool
- extends GraphNode
-
- signal changed_offset(nid, vec2)
- signal changed_size(this)
- signal changed_slots(this)
- signal erased(this)
- signal pressed_editor(this)
- signal pressed_load(this)
- signal pressed_save(this)
- signal text_changed(nid, new_text)
-
- onready var _Link_SpinBox = self.get_node("MarginContainer/VBoxContainer/HBoxContainer/Link_SpinBox")
-
- onready var _MessageTextEdit = self.get_node("MarginContainer/VBoxContainer/HBoxContainer2/VBoxContainer/MessageTextEdit")
- onready var _SpeakerEmotionTextEdit = self.get_node("MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer/SpeakerEmotionTextEdit")
- onready var _SpeakerIdSpinBox = self.get_node("MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer/SpeakerIdSpinBox")
- onready var _SceneIdSpinBox = self.get_node("MarginContainer/VBoxContainer/HBoxContainer4/VBoxContainer/CenterContainer/HBoxContainer/SceneIdSpinBox")
-
- var _nid : int = 0
- var _slot_amount : int = 1
-
-
- var json_structure = {
- "speaker": {
- "id": 0,
- "emotion": "happy"
- },
- "scene": {
- "id": 0
- },
- "dialog": {
- "message": "",
- "choices_free": {
- "placeholder": "",
- "global_var_name": "",
- },
- "choices_multiple": [
- {
- "title": "",
- "arc": 0,
- "infobox": {
- "title": "",
- "text": "",
- "conditions": [],
- },
- "conditions": []
- }
-
- ]
- }
- }
-
-
- #Virtual Methods
-
- func _ready():
- self._update_slots()
-
- #Callback Methods
-
- func _on_Editor_BTN_pressed():
- self.emit_signal("pressed_editor", self)
-
-
- func _on_Line_close_request():
- self.emit_signal("erased", self)
-
-
- func _on_Line_offset_changed():
- self.emit_signal("changed_offset", self._nid, self.offset)
-
-
- func _on_Line_resize_request(new_minsize):
- self.rect_size = new_minsize
- self.emit_signal("changed_size", self)
-
-
- func _on_Link_SpinBox_value_changed(value):
- self._slot_amount = int(self._Link_SpinBox.value)
- self._update_slots()
- self.emit_signal("changed_slots", self)
-
-
- func _on_Load_BTN_pressed():
- self.emit_signal("pressed_load", self)
-
-
- func _on_Save_BTN_pressed():
- self.emit_signal("pressed_save", self)
-
-
- func _on_MessageTextEdit_text_changed():
- json_structure.dialog.message = self._MessageTextEdit.text
- emit_text()
-
- func _on_SceneIdSpinBox_value_changed(value):
- json_structure.scene.id = value
- emit_text()
-
-
- func _on_SpeakerEmotionTextEdit_text_changed():
- json_structure.speaker.emotion = self._SpeakerEmotionTextEdit.text
- emit_text()
-
-
- func _on_SpeakerIdSpinBox_value_changed(value):
- json_structure.speaker.id = value
- emit_text()
-
-
- #Public Methods
-
- func get_nid() -> int:
- return self._nid
-
-
- func get_slot_amount() -> int:
- return self._slot_amount
-
-
- func get_text() -> String:
- return JSON.print(json_structure)
-
-
- func set_nid(new_nid):
- self._nid = new_nid
- var new_name = "NID " + str(new_nid)
- self.title = new_name
- self.name = new_name
-
-
- func set_slot_amount(new_amount : int):
- self._slot_amount = new_amount
-
-
- func set_text(new_text : String):
- json_structure = JSON.parse(new_text)
- # TODO update components
- self.emit_signal("text_changed", self._nid, new_text)
-
- #Private Methods
-
- func emit_text():
- print(get_text())
- self.emit_signal("text_changed", self._nid, get_text())
-
-
- func _clear_link_labels():
- var children = self.get_children()
- for child in children:
- if child is Label:
- child.free()
-
-
- func _update_slots():
- self.clear_all_slots()
- self._clear_link_labels()
- 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)
- var base_link_label = Label.new()
- base_link_label.text = "0"
- base_link_label.align = Label.ALIGN_RIGHT
- self.add_child(base_link_label)
- self.move_child(base_link_label, 0)
- var last_output_link_label = base_link_label
- for slot in range(1, self._slot_amount):
- 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)
- var output_link_label = Label.new()
- output_link_label.text = str(slot)
- output_link_label.align = Label.ALIGN_RIGHT
- self.add_child_below_node(last_output_link_label, output_link_label)
- last_output_link_label = output_link_label
|