miggor-StreamGraph/classes/deck/nodes/set_deck_var.gd
Lera Elvoé c4e35043df types system simplification (#8)
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>
2023-11-26 22:07:15 +00:00

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