<?xml version="1.0" encoding="UTF-8" ?>
<class name="ConeTwistJoint3D" inherits="Joint3D" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		A physics joint that connects two 3D physics bodies in a way that simulates a ball-and-socket joint.
	</brief_description>
	<description>
		A physics joint that connects two 3D physics bodies in a way that simulates a ball-and-socket joint. The twist axis is initiated as the X axis of the [ConeTwistJoint3D]. Once the physics bodies swing, the twist axis is calculated as the middle of the X axes of the joint in the local space of the two physics bodies. Useful for limbs like shoulders and hips, lamps hanging off a ceiling, etc.
	</description>
	<tutorials>
	</tutorials>
	<methods>
		<method name="get_param" qualifiers="const">
			<return type="float" />
			<param index="0" name="param" type="int" enum="ConeTwistJoint3D.Param" />
			<description>
				Returns the value of the specified parameter.
			</description>
		</method>
		<method name="set_param">
			<return type="void" />
			<param index="0" name="param" type="int" enum="ConeTwistJoint3D.Param" />
			<param index="1" name="value" type="float" />
			<description>
				Sets the value of the specified parameter.
			</description>
		</method>
	</methods>
	<members>
		<member name="bias" type="float" setter="set_param" getter="get_param" default="0.3">
			The speed with which the swing or twist will take place.
			The higher, the faster.
		</member>
		<member name="relaxation" type="float" setter="set_param" getter="get_param" default="1.0">
			Defines, how fast the swing- and twist-speed-difference on both sides gets synced.
		</member>
		<member name="softness" type="float" setter="set_param" getter="get_param" default="0.8">
			The ease with which the joint starts to twist. If it's too low, it takes more force to start twisting the joint.
		</member>
		<member name="swing_span" type="float" setter="set_param" getter="get_param" default="0.7853982">
			Swing is rotation from side to side, around the axis perpendicular to the twist axis.
			The swing span defines, how much rotation will not get corrected along the swing axis.
			Could be defined as looseness in the [ConeTwistJoint3D].
			If below 0.05, this behavior is locked.
		</member>
		<member name="twist_span" type="float" setter="set_param" getter="get_param" default="3.1415927">
			Twist is the rotation around the twist axis, this value defined how far the joint can twist.
			Twist is locked if below 0.05.
		</member>
	</members>
	<constants>
		<constant name="PARAM_SWING_SPAN" value="0" enum="Param">
			Swing is rotation from side to side, around the axis perpendicular to the twist axis.
			The swing span defines, how much rotation will not get corrected along the swing axis.
			Could be defined as looseness in the [ConeTwistJoint3D].
			If below 0.05, this behavior is locked.
		</constant>
		<constant name="PARAM_TWIST_SPAN" value="1" enum="Param">
			Twist is the rotation around the twist axis, this value defined how far the joint can twist.
			Twist is locked if below 0.05.
		</constant>
		<constant name="PARAM_BIAS" value="2" enum="Param">
			The speed with which the swing or twist will take place.
			The higher, the faster.
		</constant>
		<constant name="PARAM_SOFTNESS" value="3" enum="Param">
			The ease with which the joint starts to twist. If it's too low, it takes more force to start twisting the joint.
		</constant>
		<constant name="PARAM_RELAXATION" value="4" enum="Param">
			Defines, how fast the swing- and twist-speed-difference on both sides gets synced.
		</constant>
		<constant name="PARAM_MAX" value="5" enum="Param">
			Represents the size of the [enum Param] enum.
		</constant>
	</constants>
</class>
