|  |  |  | ## 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]. | 
					
						
							|  |  |  | @tool | 
					
						
							|  |  |  | class_name BlackboardCompareCondition extends ConditionLeaf | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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] |