<?xml version="1.0" encoding="UTF-8" ?>
<class name="Skeleton3D" inherits="Node3D" version="4.0">
	<brief_description>
		Skeleton for characters and animated objects.
	</brief_description>
	<description>
		Skeleton3D provides a hierarchical interface for managing bones, including pose, rest and animation (see [Animation]). It can also use ragdoll physics.
		The overall transform of a bone with respect to the skeleton is determined by the following hierarchical order: rest pose, custom pose and pose.
		Note that "global pose" below refers to the overall transform of the bone with respect to skeleton, so it not the actual global/world transform of the bone.
	</description>
	<tutorials>
		<link title="3D Inverse Kinematics Demo">https://godotengine.org/asset-library/asset/523</link>
		<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
	</tutorials>
	<methods>
		<method name="add_bone">
			<return type="void">
			</return>
			<argument index="0" name="name" type="String">
			</argument>
			<description>
				Adds a bone, with name [code]name[/code]. [method get_bone_count] will become the bone index.
			</description>
		</method>
		<method name="bind_child_node_to_bone">
			<return type="void">
			</return>
			<argument index="0" name="bone_idx" type="int">
			</argument>
			<argument index="1" name="node" type="Node">
			</argument>
			<description>
				[i]Deprecated soon.[/i]
			</description>
		</method>
		<method name="bone_transform_to_world_transform">
			<return type="Transform">
			</return>
			<argument index="0" name="bone_transform" type="Transform">
			</argument>
			<description>
				Takes the given bone pose/transform and converts it to a world transform, relative to the [Skeleton3D] node.
				This is useful for using the bone transform in calculations with transforms from [Node3D]-based nodes.
			</description>
		</method>
		<method name="clear_bones">
			<return type="void">
			</return>
			<description>
				Clear all the bones in this skeleton.
			</description>
		</method>
		<method name="clear_bones_global_pose_override">
			<return type="void">
			</return>
			<description>
				Removes the global pose override on all bones in the skeleton.
			</description>
		</method>
		<method name="find_bone" qualifiers="const">
			<return type="int">
			</return>
			<argument index="0" name="name" type="String">
			</argument>
			<description>
				Returns the bone index that matches [code]name[/code] as its name.
			</description>
		</method>
		<method name="get_bone_count" qualifiers="const">
			<return type="int">
			</return>
			<description>
				Returns the amount of bones in the skeleton.
			</description>
		</method>
		<method name="get_bone_custom_pose" qualifiers="const">
			<return type="Transform">
			</return>
			<argument index="0" name="bone_idx" type="int">
			</argument>
			<description>
				Returns the custom pose of the specified bone. Custom pose is applied on top of the rest pose.
			</description>
		</method>
		<method name="get_bone_global_pose" qualifiers="const">
			<return type="Transform">
			</return>
			<argument index="0" name="bone_idx" type="int">
			</argument>
			<description>
				Returns the overall transform of the specified bone, with respect to the skeleton. Being relative to the skeleton frame, this is not the actual "global" transform of the bone.
			</description>
		</method>
		<method name="get_bone_name" qualifiers="const">
			<return type="String">
			</return>
			<argument index="0" name="bone_idx" type="int">
			</argument>
			<description>
				Returns the name of the bone at index [code]index[/code].
			</description>
		</method>
		<method name="get_bone_parent" qualifiers="const">
			<return type="int">
			</return>
			<argument index="0" name="bone_idx" type="int">
			</argument>
			<description>
				Returns the bone index which is the parent of the bone at [code]bone_idx[/code]. If -1, then bone has no parent.
				[b]Note:[/b] The parent bone returned will always be less than [code]bone_idx[/code].
			</description>
		</method>
		<method name="get_bone_pose" qualifiers="const">
			<return type="Transform">
			</return>
			<argument index="0" name="bone_idx" type="int">
			</argument>
			<description>
				Returns the pose transform of the specified bone. Pose is applied on top of the custom pose, which is applied on top the rest pose.
			</description>
		</method>
		<method name="get_bone_process_orders">
			<return type="PackedInt32Array">
			</return>
			<description>
			</description>
		</method>
		<method name="get_bone_rest" qualifiers="const">
			<return type="Transform">
			</return>
			<argument index="0" name="bone_idx" type="int">
			</argument>
			<description>
				Returns the rest transform for a bone [code]bone_idx[/code].
			</description>
		</method>
		<method name="get_bound_child_nodes_to_bone" qualifiers="const">
			<return type="Array">
			</return>
			<argument index="0" name="bone_idx" type="int">
			</argument>
			<description>
				[i]Deprecated soon.[/i]
			</description>
		</method>
		<method name="is_bone_rest_disabled" qualifiers="const">
			<return type="bool">
			</return>
			<argument index="0" name="bone_idx" type="int">
			</argument>
			<description>
				Returns whether the bone rest for the bone at [code]bone_idx[/code] is disabled.
			</description>
		</method>
		<method name="localize_rests">
			<return type="void">
			</return>
			<description>
				Returns all bones in the skeleton to their rest poses.
			</description>
		</method>
		<method name="physical_bones_add_collision_exception">
			<return type="void">
			</return>
			<argument index="0" name="exception" type="RID">
			</argument>
			<description>
				Adds a collision exception to the physical bone.
				Works just like the [RigidBody3D] node.
			</description>
		</method>
		<method name="physical_bones_remove_collision_exception">
			<return type="void">
			</return>
			<argument index="0" name="exception" type="RID">
			</argument>
			<description>
				Removes a collision exception to the physical bone.
				Works just like the [RigidBody3D] node.
			</description>
		</method>
		<method name="physical_bones_start_simulation">
			<return type="void">
			</return>
			<argument index="0" name="bones" type="StringName[]" default="[  ]">
			</argument>
			<description>
				Tells the [PhysicalBone3D] nodes in the Skeleton to start simulating and reacting to the physics world.
				Optionally, a list of bone names can be passed-in, allowing only the passed-in bones to be simulated.
			</description>
		</method>
		<method name="physical_bones_stop_simulation">
			<return type="void">
			</return>
			<description>
				Tells the [PhysicalBone3D] nodes in the Skeleton to stop simulating.
			</description>
		</method>
		<method name="register_skin">
			<return type="SkinReference">
			</return>
			<argument index="0" name="skin" type="Skin">
			</argument>
			<description>
				Binds the given Skin to the Skeleton.
			</description>
		</method>
		<method name="set_bone_custom_pose">
			<return type="void">
			</return>
			<argument index="0" name="bone_idx" type="int">
			</argument>
			<argument index="1" name="custom_pose" type="Transform">
			</argument>
			<description>
				Sets the custom pose transform, [code]custom_pose[/code], for the bone at [code]bone_idx[/code]. This pose is an addition to the bone rest pose.
				[b]Note[/b]: The pose transform needs to be in bone space. Use [method world_transform_to_bone_transform] to convert a world transform, like one you can get from a [Node3D], to bone space.
			</description>
		</method>
		<method name="set_bone_disable_rest">
			<return type="void">
			</return>
			<argument index="0" name="bone_idx" type="int">
			</argument>
			<argument index="1" name="disable" type="bool">
			</argument>
			<description>
				Disables the rest pose for the bone at [code]bone_idx[/code] if [code]true[/code], enables the bone rest if [code]false[/code].
			</description>
		</method>
		<method name="set_bone_global_pose_override">
			<return type="void">
			</return>
			<argument index="0" name="bone_idx" type="int">
			</argument>
			<argument index="1" name="pose" type="Transform">
			</argument>
			<argument index="2" name="amount" type="float">
			</argument>
			<argument index="3" name="persistent" type="bool" default="false">
			</argument>
			<description>
				Sets the global pose transform, [code]pose[/code], for the bone at [code]bone_idx[/code].
				[code]amount[/code] is the interpolation strength that will be used when applying the pose, and [code]persistent[/code] determines if the applied pose will remain.
				[b]Note[/b]: The pose transform needs to be in bone space. Use [method world_transform_to_bone_transform] to convert a world transform, like one you can get from a [Node3D], to bone space.
			</description>
		</method>
		<method name="set_bone_name">
			<return type="void">
			</return>
			<argument index="0" name="bone_idx" type="int">
			</argument>
			<argument index="1" name="name" type="String">
			</argument>
			<description>
			</description>
		</method>
		<method name="set_bone_parent">
			<return type="void">
			</return>
			<argument index="0" name="bone_idx" type="int">
			</argument>
			<argument index="1" name="parent_idx" type="int">
			</argument>
			<description>
				Sets the bone index [code]parent_idx[/code] as the parent of the bone at [code]bone_idx[/code]. If -1, then bone has no parent.
				[b]Note:[/b] [code]parent_idx[/code] must be less than [code]bone_idx[/code].
			</description>
		</method>
		<method name="set_bone_pose">
			<return type="void">
			</return>
			<argument index="0" name="bone_idx" type="int">
			</argument>
			<argument index="1" name="pose" type="Transform">
			</argument>
			<description>
				Sets the pose transform for bone [code]bone_idx[/code].
				[b]Note[/b]: The pose transform needs to be in bone space. Use [method world_transform_to_bone_transform] to convert a world transform, like one you can get from a [Node3D], to bone space.
			</description>
		</method>
		<method name="set_bone_rest">
			<return type="void">
			</return>
			<argument index="0" name="bone_idx" type="int">
			</argument>
			<argument index="1" name="rest" type="Transform">
			</argument>
			<description>
				Sets the rest transform for bone [code]bone_idx[/code].
			</description>
		</method>
		<method name="unbind_child_node_from_bone">
			<return type="void">
			</return>
			<argument index="0" name="bone_idx" type="int">
			</argument>
			<argument index="1" name="node" type="Node">
			</argument>
			<description>
				[i]Deprecated soon.[/i]
			</description>
		</method>
		<method name="unparent_bone_and_rest">
			<return type="void">
			</return>
			<argument index="0" name="bone_idx" type="int">
			</argument>
			<description>
				Unparents the bone at [code]bone_idx[/code] and sets its rest position to that of its parent prior to being reset.
			</description>
		</method>
		<method name="world_transform_to_bone_transform">
			<return type="Transform">
			</return>
			<argument index="0" name="world_transform" type="Transform">
			</argument>
			<description>
				Takes the given world transform, relative to the [Skeleton3D], and converts it to a bone pose/transform.
				This is useful for using setting bone poses using transforms from [Node3D]-based nodes.
			</description>
		</method>
	</methods>
	<members>
		<member name="animate_physical_bones" type="bool" setter="set_animate_physical_bones" getter="get_animate_physical_bones" default="true">
		</member>
	</members>
	<signals>
		<signal name="pose_updated">
			<description>
			</description>
		</signal>
	</signals>
	<constants>
		<constant name="NOTIFICATION_UPDATE_SKELETON" value="50">
		</constant>
	</constants>
</class>