FINALLY split up the node renderer function to generate ports

This commit is contained in:
Lera Elvoé 2023-11-27 12:10:07 +03:00
parent a799c0436e
commit 6dd344a8b9
No known key found for this signature in database

View file

@ -16,44 +16,7 @@ func _ready() -> void:
#node.port_removed.connect(_on_node_port_removed) #node.port_removed.connect(_on_node_port_removed)
node.ports_updated.connect(_on_node_ports_updated) node.ports_updated.connect(_on_node_ports_updated)
for port in node.get_all_ports(): for port in node.get_all_ports():
var descriptor_split := port.descriptor.split(":") update_port(port)
match descriptor_split[0]:
"button":
var button := Button.new()
add_child(button)
button.text = port.label
if port.port_type == DeckNode.PortType.OUTPUT:
button.pressed.connect(
func():
node.send(port.index_of_type, true)
)
elif port.port_type == DeckNode.PortType.INPUT:
button.pressed.connect(
func():
node._receive(port.index_of_type, true)
)
"field":
var line_edit := LineEdit.new()
add_child(line_edit)
if port.value:
line_edit.text = str(port.value)
line_edit.placeholder_text = port.label
port.value_callback = line_edit.get_text
line_edit.text_changed.connect(port.set_value)
_:
var label := Label.new()
add_child(label)
label.text = port.label
set_slot(
port.index,
port.port_type == DeckNode.PortType.INPUT,
port.type,
Color.WHITE,
port.port_type == DeckNode.PortType.OUTPUT,
port.type,
Color.WHITE,
)
## Connected to [signal GraphElement.position_offset_updated] and updates the ## Connected to [signal GraphElement.position_offset_updated] and updates the
## [member node]s properties ## [member node]s properties
@ -72,45 +35,8 @@ func _on_node_position_updated(new_position: Dictionary) -> void:
## using [method GraphNode.set_slot] ## using [method GraphNode.set_slot]
func _on_node_port_added(port_idx: int) -> void: func _on_node_port_added(port_idx: int) -> void:
var port := node.get_all_ports()[port_idx] var port := node.get_all_ports()[port_idx]
update_port(port)
var descriptor_split := port.descriptor.split(":")
match descriptor_split[0]:
"button":
var button := Button.new()
add_child(button)
button.text = port.label
if port.port_type == DeckNode.PortType.OUTPUT:
button.pressed.connect(
func():
node.send(port.index_of_type, true)
)
elif port.port_type == DeckNode.PortType.INPUT:
button.pressed.connect(
func():
node._receive(port.index_of_type, true)
)
"field":
var line_edit := LineEdit.new()
add_child(line_edit)
if port.value:
line_edit.text = str(port.value)
line_edit.placeholder_text = port.label
port.value_callback = line_edit.get_text
line_edit.text_changed.connect(port.set_value)
_:
var label := Label.new()
add_child(label)
label.text = port.label
set_slot(
port.index,
port.port_type == DeckNode.PortType.INPUT,
port.type,
Color.WHITE,
port.port_type == DeckNode.PortType.OUTPUT,
port.type,
Color.WHITE,
)
## Connected to [member node]s [signal port_removed], queue_frees the [Node] ## Connected to [member node]s [signal port_removed], queue_frees the [Node]
## used for the descriptor, as well as using [method GraphNode.set_slot] to remove the slot. ## used for the descriptor, as well as using [method GraphNode.set_slot] to remove the slot.
@ -135,41 +61,58 @@ func _on_node_ports_updated() -> void:
c.queue_free() c.queue_free()
for port in node.get_all_ports(): for port in node.get_all_ports():
var descriptor_split := port.descriptor.split(":") update_port(port)
match descriptor_split[0]:
"button":
var button := Button.new()
add_child(button)
button.text = port.label
if port.port_type == DeckNode.PortType.OUTPUT:
button.pressed.connect(
func():
node.send(port.index_of_type, true)
)
elif port.port_type == DeckNode.PortType.INPUT:
button.pressed.connect(
func():
node._receive(port.index_of_type, true)
)
"field":
var line_edit := LineEdit.new()
add_child(line_edit)
if port.value:
line_edit.text = str(port.value)
line_edit.placeholder_text = port.label
port.value_callback = line_edit.get_text
line_edit.text_changed.connect(port.set_value)
_:
var label := Label.new()
add_child(label)
label.text = port.label
set_slot(
port.index, func update_port(port: Port) -> void:
port.port_type == DeckNode.PortType.INPUT, var descriptor_split := port.descriptor.split(":")
port.type, match descriptor_split[0]:
Color.WHITE, "button":
port.port_type == DeckNode.PortType.OUTPUT, var button := Button.new()
port.type, add_child(button)
Color.WHITE, button.text = port.label
) if port.port_type == DeckNode.PortType.OUTPUT:
button.pressed.connect(
func():
node.send(port.index_of_type, true)
)
#elif port.port_type == DeckNode.PortType.INPUT:
else:
button.pressed.connect(
func():
node._receive(port.index_of_type, true)
)
"field":
var line_edit := LineEdit.new()
add_child(line_edit)
if port.value:
line_edit.text = str(port.value)
line_edit.placeholder_text = port.label
port.value_callback = line_edit.get_text
line_edit.text_changed.connect(port.set_value)
"singlechoice":
var box := OptionButton.new()
for item in descriptor_split.slice(1):
box.add_item(item)
add_child(box)
port.value_callback = func(): return box.get_item_text(box.get_selected_id())
if port.type == DeckType.Types.STRING:
box.item_selected.connect(
func(id: int):
port.set_value.call(box.get_item_text(box.get_selected_id()))
)
_:
var label := Label.new()
add_child(label)
label.text = port.label
set_slot(
port.index,
port.port_type == DeckNode.PortType.INPUT,
port.type,
Color.WHITE,
port.port_type == DeckNode.PortType.OUTPUT,
port.type,
Color.WHITE,
)