You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			62 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			GDScript
		
	
			
		
		
	
	
			62 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			GDScript
		
	
| ## 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]
 |