heliostat/addons/beehave/nodes/leaves/leaf.gd

49 lines
1.2 KiB
GDScript3
Raw Permalink Normal View History

2024-07-29 05:10:46 +00:00
@tool
@icon("../../icons/category_leaf.svg")
class_name Leaf extends BeehaveNode
## Base class for all leaf nodes of the tree.
const EXPRESSION_PLACEHOLDER: String = "Insert an expression..."
func _get_configuration_warnings() -> PackedStringArray:
var warnings: PackedStringArray = []
var children: Array[Node] = get_children()
if children.any(func(x): return x is BeehaveNode):
warnings.append("Leaf nodes should not have any child nodes. They won't be ticked.")
for source in _get_expression_sources():
var error_text: String = _parse_expression(source).get_error_text()
if not error_text.is_empty():
warnings.append("Expression `%s` is invalid! Error text: `%s`" % [source, error_text])
return warnings
func _parse_expression(source: String) -> Expression:
var result: Expression = Expression.new()
var error: int = result.parse(source)
if not Engine.is_editor_hint() and error != OK:
push_error(
(
"[Leaf] Couldn't parse expression with source: `%s` Error text: `%s`"
% [source, result.get_error_text()]
)
)
return result
func _get_expression_sources() -> Array[String]: # virtual
return []
func get_class_name() -> Array[StringName]:
var classes := super()
classes.push_back(&"Leaf")
return classes