miggor-StreamGraph/classes/deck/port.gd

60 lines
1.7 KiB
GDScript3
Raw Normal View History

class_name Port
## A data type representing a port of a [DeckNode].
##
## Ports are used for connections between [DeckNode]s and can contain data that is passed between
## them on a node.
## The type index of this port.
var type: DeckType.Types
## The label of this port. Used by the renderer to display. How it's displayed depends on the renderer
## and the [member descriptor].
var label: String
## Hints to the renderer on how to display this port.[br]
## Can be either one of these: [code]button textfield spinbox slider textblock codeblock checkbox singlechoice multichoice[/code].[br]
## Additional descriptor properties can be specified after the type, delimited by a colon ([code]:[/code]).[br]
## @experimental
var descriptor: String
## A callback to get this port's value. Intended usage is by renderers that show an input field of some kind.
2023-06-10 20:23:57 +02:00
var value_callback: Callable
## The type of this port (input, output or virtual)
2023-06-12 17:32:16 +02:00
var port_type: DeckNode.PortType
## The local index of this port.
2023-06-12 17:32:16 +02:00
var index_of_type: int
## The global index of this port.
2023-06-12 17:32:16 +02:00
var index: int
## The value of this port.
2023-07-21 10:26:43 +02:00
var value: Variant: set = set_value
signal value_updated(new_value: Variant)
2023-06-10 20:23:57 +02:00
func _init(
p_type: DeckType.Types,
2023-06-10 20:23:57 +02:00
p_label: String,
2023-06-12 17:32:16 +02:00
p_index: int,
p_port_type: DeckNode.PortType,
p_index_of_type: int,
2023-06-10 20:23:57 +02:00
p_descriptor: String = "",
2023-06-12 17:32:16 +02:00
# p_value_callback: Callable = Callable(),
) -> void:
type = p_type
label = p_label
descriptor = p_descriptor
2023-06-12 17:32:16 +02:00
# value_callback = p_value_callback
port_type = p_port_type
index_of_type = p_index_of_type
index = p_index
2023-07-21 10:26:43 +02:00
func set_value(v: Variant) -> void:
2023-11-27 10:09:45 +01:00
if v is Callable:
value = v.call()
value_updated.emit(value)
2023-11-27 10:09:45 +01:00
return
2023-07-21 10:26:43 +02:00
value = v
value_updated.emit(value)