extends DeckNode var expr = Expression.new() func _init(): name = "Expression" node_type = name.to_snake_case() description = "A node returning the result of a mathematical expression." category = "general" props_to_serialize = [] # TODO: order of ports is changed # due to https://github.com/godotengine/godot/issues/85558 # when it's fixed, switch it back add_input_port( DeckType.Types.DICTIONARY, "Expression Input" ) add_output_port( DeckType.Types.ANY, "Expression Text", "codeblock" ) func _value_request(_from_port : int) -> Variant: var text = get_output_ports()[0].value_callback.call() var err = expr.parse(text, ["deck_var", "input"]) if err != OK: DeckHolder.logger.log_node("Expression parse failed: %s" % err, Logger.LogType.ERROR) printerr(err) return null var res = expr.execute([_belonging_to.variable_stack, request_value(0)]) if expr.has_execute_failed(): DeckHolder.logger.log_node("Expression Execution Failed: %s" % text, Logger.LogType.ERROR) return null return res