27 lines
1.0 KiB
GDScript
27 lines
1.0 KiB
GDScript
static func evaluate_expression(context:String, state_chart: StateChart, expression: String, default_value:Variant) -> Variant:
|
|
var the_expression := Expression.new()
|
|
var input_names = state_chart._expression_properties.keys()
|
|
|
|
var parse_result:int = the_expression.parse(expression, input_names)
|
|
|
|
if parse_result != OK:
|
|
push_error("(" + context + ") Expression parse error. Tried to parse expression: '" \
|
|
+ expression \
|
|
+ "' but got error: '" + the_expression.get_error_text() + "'")
|
|
return default_value
|
|
|
|
# input values need to be in the same order as the input names, so we build an array
|
|
# of values
|
|
var input_values:Array = []
|
|
for input_name in input_names:
|
|
input_values.append(state_chart._expression_properties[input_name])
|
|
|
|
var result = the_expression.execute(input_values, null, false)
|
|
if the_expression.has_execute_failed():
|
|
push_error("(" + context + ") Expression execute error. Tried to run expression: '" \
|
|
+ expression \
|
|
+ "' but got error: '" + the_expression.get_error_text() + "'")
|
|
return default_value
|
|
|
|
return result
|