123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- tool
- extends GraphNode
-
- class_name LineNode
-
- 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 _SpeakerIdSpinBox: SpinBox = self.get_node("MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer/SpeakerIdSpinBox")
- onready var _SpeakerEmotionLineEdit: LineEdit = self.get_node("MarginContainer/VBoxContainer/HBoxContainer3/VBoxContainer/HBoxContainer2/SpeakerEmotionLineEdit")
- onready var _SceneIdSpinBox: SpinBox = self.get_node("MarginContainer/VBoxContainer/HBoxContainer4/VBoxContainer/HBoxContainer/SceneIdSpinBox")
- onready var _MessageTextEdit : TextEdit= self.get_node("MarginContainer/VBoxContainer/HBoxContainer2/VBoxContainer/MessageTextEdit")
- onready var _ChoicesList: ChoicesList = self.get_node("MarginContainer/VBoxContainer/ChoicesList")
-
- var _nid : int = 0
- var _slot_amount : int = 1
-
- var json_structure = {
- "speaker": {
- "id": 0,
- "emotion": "happy"
- },
- "scene": {
- "id": 0
- },
- "dialog": {
- "message": "",
- "choices_multiple": []
- }
- }
-
-
- #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_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_SpeakerEmotionLineEdit_text_changed(new_text):
- json_structure.speaker.emotion = new_text
- _emit_text()
-
-
- func _on_SpeakerIdSpinBox_value_changed(value):
- json_structure.speaker.id = value
- _emit_text()
-
- func _on_ChoicesList_choices_changed(new_json_structure):
- json_structure.dialog.choices_multiple = new_json_structure
- var slot_number = json_structure.dialog.choices_multiple.size()
- # Always have at least one slot
- if slot_number == 0:
- slot_number = 1
- if (self.get_slot_amount() != slot_number):
- self.set_slot_amount(slot_number)
- self._update_slots()
- # TODO fix slots resetting when editing choice data
- self.emit_signal("changed_slots", self)
- _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, "\t")
-
-
- 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):
- print("New text received:")
- print(new_text)
- json_structure = JSON.parse(new_text).get_result()
- print(JSON.print(json_structure, "\t"))
- _update_components()
- self.emit_signal("text_changed", self._nid, new_text)
-
- #Private Methods
-
- func _update_components():
- _SpeakerIdSpinBox.set_value(json_structure.speaker.id)
- _SpeakerEmotionLineEdit.set_text(json_structure.speaker.emotion);
- _SceneIdSpinBox.set_value(json_structure.scene.id)
- _MessageTextEdit.set_text(json_structure.dialog.message)
- _ChoicesList.set_structure(json_structure.dialog.choices_multiple)
-
- 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()
- if (json_structure.dialog.choices_multiple.size() == 0):
- base_link_label.text = "Next"
- else:
- base_link_label.text = "Choice #1"
- 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 = "Choice #" + str(slot + 1)
- 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
-
|