mirror of
https://codeberg.org/StreamGraph/StreamGraph.git
synced 2024-11-13 19:49:55 +01:00
c4e35043df
no longer using classes for every type. the type system has been greatly simplified, with the added bonus that it hooks directly into GraphEdit's slot type system. connections will still fail if the type conversion fails, which may be used by other renderers. the type conversion map is straightforward to understand, and easy to extend should the need arise (hopefully it shouldn't). Reviewed-on: https://codeberg.org/Eroax/Re-DotDeck/pulls/8 Co-authored-by: Lera Elvoé <yagich@poto.cafe> Co-committed-by: Lera Elvoé <yagich@poto.cafe>
54 lines
1.1 KiB
GDScript
54 lines
1.1 KiB
GDScript
extends DeckNode
|
|
|
|
|
|
func _init() -> void:
|
|
name = "Set Deck Var"
|
|
node_type = name.to_snake_case()
|
|
description = "set deck variable"
|
|
category = "general"
|
|
|
|
add_input_port(
|
|
DeckType.Types.STRING,
|
|
"Variable Name",
|
|
"field"
|
|
)
|
|
|
|
add_input_port(
|
|
DeckType.Types.ANY,
|
|
"Value",
|
|
"field"
|
|
)
|
|
|
|
add_input_port(
|
|
DeckType.Types.BOOL,
|
|
"Set",
|
|
"button"
|
|
)
|
|
|
|
add_output_port(
|
|
DeckType.Types.ANY,
|
|
"Value",
|
|
"label"
|
|
)
|
|
|
|
|
|
func _receive(to_input_port: int, data: Variant, extra_data: Array = []) -> void:
|
|
if to_input_port != 2:
|
|
return
|
|
|
|
var var_name: String = get_value_for_port(0, data)
|
|
var var_value: Variant = get_value_for_port(1, data)
|
|
|
|
_belonging_to.variable_stack[var_name] = var_value
|
|
|
|
send(0, var_value)
|
|
|
|
# this can probably go into DeckNode with a different name that makes it clear
|
|
# that it prioritizes call-time resolution
|
|
func get_value_for_port(port: int, data: Variant) -> Variant:
|
|
if request_value(port) != null:
|
|
return request_value(port)
|
|
elif ports[port].value_callback.call() != "":
|
|
return ports[port].value_callback.call()
|
|
else:
|
|
return data
|