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.
		
		
		
		
		
			
		
			
	
	
		
			47 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			GDScript
		
	
		
		
			
		
	
	
			47 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			GDScript
		
	
| 
								 
											2 years ago
										 
									 | 
							
								## Base class for all leaf nodes of the tree.
							 | 
						||
| 
								 | 
							
								@tool
							 | 
						||
| 
								 | 
							
								@icon("../../icons/category_leaf.svg")
							 | 
						||
| 
								 | 
							
								class_name Leaf extends BeehaveNode
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								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
							 |