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.
		
		
		
		
		
			
		
			
	
	
		
			41 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			GDScript
		
	
		
		
			
		
	
	
			41 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			GDScript
		
	
| 
											2 years ago
										 | ## A Composite node controls the flow of execution of its children in a specific manner. | ||
|  | @tool | ||
|  | @icon("../../icons/category_composite.svg") | ||
|  | class_name Composite extends BeehaveNode | ||
|  | 
 | ||
|  | 
 | ||
|  | var running_child: BeehaveNode = null | ||
|  | 
 | ||
|  | 
 | ||
|  | func _ready(): | ||
|  | 	if Engine.is_editor_hint(): | ||
|  | 		return | ||
|  | 
 | ||
|  | 	if self.get_child_count() < 1: | ||
|  | 		push_warning("BehaviorTree Error: Composite %s should have at least one child (NodePath: %s)" % [self.name, self.get_path()]) | ||
|  | 
 | ||
|  | 
 | ||
|  | func _get_configuration_warnings() -> PackedStringArray: | ||
|  | 	var warnings: PackedStringArray = super._get_configuration_warnings() | ||
|  | 
 | ||
|  | 	if get_children().filter(func(x): return x is BeehaveNode).size() < 2: | ||
|  | 		warnings.append("Any composite node should have at least two children. Otherwise it is not useful.") | ||
|  | 
 | ||
|  | 	return warnings | ||
|  | 
 | ||
|  | 
 | ||
|  | func interrupt(actor: Node, blackboard: Blackboard) -> void: | ||
|  | 	if running_child != null: | ||
|  | 		running_child.interrupt(actor, blackboard) | ||
|  | 		running_child = null | ||
|  | 
 | ||
|  | 
 | ||
|  | func after_run(actor: Node, blackboard: Blackboard) -> void: | ||
|  | 	running_child = null | ||
|  | 
 | ||
|  | 
 | ||
|  | func get_class_name() -> Array[StringName]: | ||
|  | 	var classes := super() | ||
|  | 	classes.push_back(&"Composite") | ||
|  | 	return classes |