generated from krampus/template-godot4
66 lines
1.9 KiB
GDScript
66 lines
1.9 KiB
GDScript
@tool
|
|
class_name BlackboardCompareCondition extends ConditionLeaf
|
|
|
|
## Compares two values using the specified comparison operator.
|
|
## Returns [code]FAILURE[/code] if any of the expression fails or the
|
|
## comparison operation returns [code]false[/code], otherwise it returns [code]SUCCESS[/code].
|
|
|
|
enum Operators {
|
|
EQUAL,
|
|
NOT_EQUAL,
|
|
GREATER,
|
|
LESS,
|
|
GREATER_EQUAL,
|
|
LESS_EQUAL,
|
|
}
|
|
|
|
## Expression represetning left operand.
|
|
## This value can be any valid GDScript expression.
|
|
## In order to use the existing blackboard keys for comparison,
|
|
## use get_value("key_name") e.g. get_value("direction").length()
|
|
@export_placeholder(EXPRESSION_PLACEHOLDER) var left_operand: String = ""
|
|
## Comparison operator.
|
|
@export_enum("==", "!=", ">", "<", ">=", "<=") var operator: int = 0
|
|
## Expression represetning right operand.
|
|
## This value can be any valid GDScript expression.
|
|
## In order to use the existing blackboard keys for comparison,
|
|
## use get_value("key_name") e.g. get_value("direction").length()
|
|
@export_placeholder(EXPRESSION_PLACEHOLDER) var right_operand: String = ""
|
|
|
|
@onready var _left_expression: Expression = _parse_expression(left_operand)
|
|
@onready var _right_expression: Expression = _parse_expression(right_operand)
|
|
|
|
|
|
func tick(actor: Node, blackboard: Blackboard) -> int:
|
|
var left: Variant = _left_expression.execute([], blackboard)
|
|
|
|
if _left_expression.has_execute_failed():
|
|
return FAILURE
|
|
|
|
var right: Variant = _right_expression.execute([], blackboard)
|
|
|
|
if _right_expression.has_execute_failed():
|
|
return FAILURE
|
|
|
|
var result: bool = false
|
|
|
|
match operator:
|
|
Operators.EQUAL:
|
|
result = left == right
|
|
Operators.NOT_EQUAL:
|
|
result = left != right
|
|
Operators.GREATER:
|
|
result = left > right
|
|
Operators.LESS:
|
|
result = left < right
|
|
Operators.GREATER_EQUAL:
|
|
result = left >= right
|
|
Operators.LESS_EQUAL:
|
|
result = left <= right
|
|
|
|
return SUCCESS if result else FAILURE
|
|
|
|
|
|
func _get_expression_sources() -> Array[String]:
|
|
return [left_operand, right_operand]
|