<?xml version="1.0" encoding="UTF-8" ?>
<class name="BTTask" inherits="BT" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../doc/class.xsd">
	<brief_description>
		Base class for all [BehaviorTree] tasks.
	</brief_description>
	<description>
		Base class for all [BehaviorTree] tasks. A task is a basic building block in a [BehaviorTree] that represents a specific behavior or control flow. Tasks are used to create complex behaviors by combining and nesting them in a hierarchy.
		A task can be one of the following types: action, condition, composite, or decorator. Each type of task has its own corresponding subclass: [BTAction], [BTCondition], [BTDecorator], [BTComposite].
		Tasks perform their work and return their status using the [method _tick] method. Status values are defined in [enum BT.Status]. Tasks can be initialized using the [method _setup] method. See also [method _enter] &amp; [method _exit].
		[b]Note:[/b] Do not extend [BTTask] directly for your own tasks. Instead, extend one of the subtypes mentioned above.
	</description>
	<tutorials>
	</tutorials>
	<methods>
		<method name="_enter" qualifiers="virtual">
			<return type="void" />
			<description>
				Called when task is "entered", i.e. when task is executed while not having a [code]RUNNING[/code] [member status].
				It is called before [method _tick] in the execution order. This method is used when preparation is needed before main work begins, usually when it takes more than one tick to finish the task. See also [method execute].
			</description>
		</method>
		<method name="_exit" qualifiers="virtual">
			<return type="void" />
			<description>
				Called when task is "exited", i.e. after [method _tick] returns [code]SUCCESS[/code] or [code]FAILURE[/code] status. See also [method execute].
			</description>
		</method>
		<method name="_generate_name" qualifiers="virtual const">
			<return type="String" />
			<description>
				Called to generate a display name for the task unless [member custom_name] is set. See [method get_task_name].
			</description>
		</method>
		<method name="_get_configuration_warnings" qualifiers="virtual const">
			<return type="PackedStringArray" />
			<description>
				The string returned by this method is shown as a warning message in the behavior tree editor. Any task script that overrides this method must include [code]@tool[/code] annotation at the top of the file.
			</description>
		</method>
		<method name="_setup" qualifiers="virtual">
			<return type="void" />
			<description>
				Called to initialize a task during initialization step. It is called only once before the task's first execution tick. This method allows you to set up any necessary state or configurations for the task before it begins executing.
			</description>
		</method>
		<method name="_tick" qualifiers="virtual">
			<return type="int" enum="BT.Status" />
			<param index="0" name="delta" type="float" />
			<description>
				Called when task is "ticked", i.e. executed by [BTPlayer] or [BTState] during an update.
				Returns execution status as defined in [enum BT.Status].
				[b]Note:[/b] Tasks perform their main function by implementing this method.
			</description>
		</method>
		<method name="abort">
			<return type="void" />
			<description>
				Resets the task and its children recursively. If a task is in the [code]RUNNING[/code] state, it is exited and its status is reset to [code]FRESH[/code].
			</description>
		</method>
		<method name="add_child">
			<return type="void" />
			<param index="0" name="task" type="BTTask" />
			<description>
				Adds a child task. The [param task] is placed at the end of the children list.
			</description>
		</method>
		<method name="add_child_at_index">
			<return type="void" />
			<param index="0" name="task" type="BTTask" />
			<param index="1" name="idx" type="int" />
			<description>
				Adds a child task. The [param task] is placed at [param idx] position in the children list.
			</description>
		</method>
		<method name="clone" qualifiers="const">
			<return type="BTTask" />
			<description>
				Duplicates the task and its children, copying the exported members. Sub-resources are shared for efficiency, except for [BBParam] subtypes, which are always copied. Used by the editor to instantiate [BehaviorTree] and copy-paste tasks.
			</description>
		</method>
		<method name="editor_get_behavior_tree">
			<return type="BehaviorTree" />
			<description>
				Returns the behavior tree that owns this task. This is only available in the editor.
			</description>
		</method>
		<method name="execute">
			<return type="int" enum="BT.Status" />
			<param index="0" name="delta" type="float" />
			<description>
				Performs task's execution. The execution follows a specific sequence:
				- If task's current [member status] is not [code]RUNNING[/code], the [method _enter] method is called first.
				- Next, the [method _tick] method is called next to perform the task's work.
				- If the [method _tick] method returns [code]SUCCESS[/code] or [code]FAILURE[/code] status, the [method _exit] method will be called next as part of the execution cleanup.
			</description>
		</method>
		<method name="get_child" qualifiers="const">
			<return type="BTTask" />
			<param index="0" name="idx" type="int" />
			<description>
				Returns a child task by specifying its index.
			</description>
		</method>
		<method name="get_child_count" qualifiers="const">
			<return type="int" />
			<description>
				Returns the number of child tasks.
			</description>
		</method>
		<method name="get_child_count_excluding_comments" qualifiers="const">
			<return type="int" />
			<description>
				Returns the number of child tasks not counting [BTComment] tasks.
			</description>
		</method>
		<method name="get_index" qualifiers="const">
			<return type="int" />
			<description>
				Returns the task's position in the behavior tree branch. Returns [code]-1[/code] if the task doesn't belong to a task tree, i.e. doesn't have a parent.
			</description>
		</method>
		<method name="get_parent" qualifiers="const">
			<return type="BTTask" />
			<description>
				Returns the task's parent.
			</description>
		</method>
		<method name="get_root" qualifiers="const">
			<return type="BTTask" />
			<description>
				Returns the root task of the behavior tree.
			</description>
		</method>
		<method name="get_task_name">
			<return type="String" />
			<description>
				The string returned by this method is used to represent the task in the editor.
				Method [method _generate_name] is called to generate a display name for the task unless [member custom_name] is set.
			</description>
		</method>
		<method name="has_child" qualifiers="const">
			<return type="bool" />
			<param index="0" name="task" type="BTTask" />
			<description>
				Returns [code]true[/code] if [param task] is a child of this task.
			</description>
		</method>
		<method name="initialize">
			<return type="void" />
			<param index="0" name="agent" type="Node" />
			<param index="1" name="blackboard" type="Blackboard" />
			<param index="2" name="scene_root" type="Node" />
			<description>
				Initilizes the task. Assigns [member agent] and [member blackboard], and calls [method _setup] for the task and its children.
				The method is called recursively for each child task. [param scene_root] should be the root node of the scene the behavior tree is used in (e.g., the owner of the node that contains the behavior tree).
			</description>
		</method>
		<method name="is_descendant_of" qualifiers="const">
			<return type="bool" />
			<param index="0" name="task" type="BTTask" />
			<description>
				Returns [code]true[/code] if this task is a descendant of [param task]. In other words, this task must be a child of [param task] or one of its children or grandchildren.
			</description>
		</method>
		<method name="is_root" qualifiers="const">
			<return type="bool" />
			<description>
				Returns [code]true[/code] if this task is the root task of its behavior tree. A behavior tree can have only one root task.
			</description>
		</method>
		<method name="next_sibling" qualifiers="const">
			<return type="BTTask" />
			<description>
				Returns the next task after this task in the parent's children list.
				Returns [code]null[/code] if this task has no parent or it is the last child in the parent's children list.
			</description>
		</method>
		<method name="print_tree">
			<return type="void" />
			<param index="0" name="initial_tabs" type="int" default="0" />
			<description>
				Prints the subtree that starts with this task to the console.
			</description>
		</method>
		<method name="remove_child">
			<return type="void" />
			<param index="0" name="task" type="BTTask" />
			<description>
				Removes [param task] from children.
			</description>
		</method>
		<method name="remove_child_at_index">
			<return type="void" />
			<param index="0" name="idx" type="int" />
			<description>
				Removes a child task at a specified index from children.
			</description>
		</method>
	</methods>
	<members>
		<member name="agent" type="Node" setter="set_agent" getter="get_agent">
			The agent is the contextual object for the [BehaviorTree] instance. This is usually the parent of the [BTPlayer] node that utilizes the [BehaviorTree] resource.
		</member>
		<member name="blackboard" type="Blackboard" setter="" getter="get_blackboard">
			Provides access to the [Blackboard]. Blackboard is used to share data among tasks of the associated [BehaviorTree].
			See [Blackboard] for additional info.
		</member>
		<member name="custom_name" type="String" setter="set_custom_name" getter="get_custom_name" default="&quot;&quot;">
			User-provided name for the task. If not empty, it is used by the editor to represent the task. See [method get_task_name].
		</member>
		<member name="elapsed_time" type="float" setter="" getter="get_elapsed_time">
			Elapsed time since the task was "entered". See [method _enter].
			Returns [code]0[/code] when task is not [code]RUNNING[/code].
		</member>
		<member name="scene_root" type="Node" setter="" getter="get_scene_root">
			Root node of the scene the behavior tree is used in (e.g., the owner of the [BTPlayer] node). Can be uses to retrieve [NodePath] references.
			[b]Example:[/b]
			[codeblock]
			extends BTAction

			@export var node_path: NodePath

			func _setup():
			    var node: Node = scene_root.get_node(node_path)
			[/codeblock]
		</member>
		<member name="status" type="int" setter="" getter="get_status" enum="BT.Status">
			Last execution [enum BT.Status] returned by [method _tick].
		</member>
	</members>
</class>
