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.0 KiB
		
	
	
	
		
			GDScript
		
	
		
		
			
		
	
	
			62 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			GDScript
		
	
| 
								 
											2 years ago
										 
									 | 
							
								## 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]
							 |