Add addons
This commit is contained in:
parent
2c862b2235
commit
3367bad24f
527 changed files with 36197 additions and 0 deletions
93
Sprout/addons/beehave/nodes/beehave_root.gd
Normal file
93
Sprout/addons/beehave/nodes/beehave_root.gd
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
## Controls the flow of execution of the entire behaviour tree.
|
||||
@tool
|
||||
class_name BeehaveRoot extends BeehaveTree
|
||||
@icon("../icons/tree.svg")
|
||||
|
||||
|
||||
@export var enabled: bool = true:
|
||||
set(value):
|
||||
enabled = value
|
||||
set_physics_process(enabled)
|
||||
get:
|
||||
return enabled
|
||||
|
||||
@export_node_path var actor_node_path : NodePath
|
||||
|
||||
var actor : Node
|
||||
|
||||
@onready var blackboard: Blackboard = Blackboard.new()
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
if Engine.is_editor_hint():
|
||||
return
|
||||
|
||||
if self.get_child_count() != 1:
|
||||
push_error("Beehave error: Root %s should have one child (NodePath: %s)" % [self.name, self.get_path()])
|
||||
disable()
|
||||
return
|
||||
|
||||
actor = get_parent()
|
||||
if actor_node_path:
|
||||
actor = get_node(actor_node_path)
|
||||
|
||||
set_physics_process(enabled)
|
||||
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
if Engine.is_editor_hint():
|
||||
return
|
||||
|
||||
blackboard.set_value("delta", delta)
|
||||
var status = self.get_child(0).tick(actor, blackboard)
|
||||
|
||||
# Updates the current running action.
|
||||
var running_action = get_running_action() if status == RUNNING else null
|
||||
blackboard.set_value("running_action", running_action)
|
||||
|
||||
|
||||
func _get_configuration_warnings() -> PackedStringArray:
|
||||
var warnings: PackedStringArray = super._get_configuration_warnings()
|
||||
|
||||
if get_child_count() != 1:
|
||||
warnings.append("BeehaveRoot should have exactly one child node.")
|
||||
|
||||
return warnings
|
||||
|
||||
|
||||
func get_running_action() -> ActionLeaf:
|
||||
var node = get_child(0)
|
||||
while node != null:
|
||||
if node is Composite:
|
||||
node = (node as Composite).running_child
|
||||
elif node is ActionLeaf:
|
||||
return node
|
||||
|
||||
push_error("Beehave error: Could not find running action in tree root '%s'." % name)
|
||||
return null
|
||||
|
||||
|
||||
func get_last_condition() -> Variant:
|
||||
if blackboard.has_value("last_condition"):
|
||||
return blackboard.get_value("last_condition")
|
||||
return null
|
||||
|
||||
|
||||
func get_last_condition_status() -> String:
|
||||
if blackboard.has_value("last_condition_status"):
|
||||
var status = blackboard.get_value("last_condition_status")
|
||||
if status == SUCCESS:
|
||||
return "SUCCESS"
|
||||
elif status == FAILURE:
|
||||
return "FAILURE"
|
||||
else:
|
||||
return "RUNNING"
|
||||
return ""
|
||||
|
||||
|
||||
func enable() -> void:
|
||||
enabled = true
|
||||
|
||||
|
||||
func disable() -> void:
|
||||
enabled = false
|
||||
Loading…
Add table
Add a link
Reference in a new issue