<?xml version="1.0" encoding="UTF-8" ?>
<class name="AnimationNodeTransition" inherits="AnimationNodeSync" api_type="core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		A transition within an [AnimationTree] connecting two [AnimationNode]s.
	</brief_description>
	<description>
		Simple state machine for cases which don't require a more advanced [AnimationNodeStateMachine]. Animations can be connected to the inputs and transition times can be specified.
		After setting the request and changing the animation playback, the transition node automatically clears the request on the next process frame by setting its [code]transition_request[/code] value to empty.
		[b]Note:[/b] When using a cross-fade, [code]current_state[/code] and [code]current_index[/code] change to the next state immediately after the cross-fade begins.
		[codeblocks]
		[gdscript]
		# Play child animation connected to "state_2" port.
		animation_tree.set("parameters/Transition/transition_request", "state_2")
		# Alternative syntax (same result as above).
		animation_tree["parameters/Transition/transition_request"] = "state_2"

		# Get current state name (read-only).
		animation_tree.get("parameters/Transition/current_state")
		# Alternative syntax (same result as above).
		animation_tree["parameters/Transition/current_state"]

		# Get current state index (read-only).
		animation_tree.get("parameters/Transition/current_index")
		# Alternative syntax (same result as above).
		animation_tree["parameters/Transition/current_index"]
		[/gdscript]
		[csharp]
		// Play child animation connected to "state_2" port.
		animationTree.Set("parameters/Transition/transition_request", "state_2");

		// Get current state name (read-only).
		animationTree.Get("parameters/Transition/current_state");

		// Get current state index (read-only).
		animationTree.Get("parameters/Transition/current_index");
		[/csharp]
		[/codeblocks]
	</description>
	<tutorials>
		<link title="Using AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
		<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/2748</link>
		<link title="Third Person Shooter (TPS) Demo">https://godotengine.org/asset-library/asset/2710</link>
	</tutorials>
	<methods>
		<method name="is_input_loop_broken_at_end" qualifiers="const">
			<return type="bool" />
			<param index="0" name="input" type="int" />
			<description>
				Returns whether the animation breaks the loop at the end of the loop cycle for transition.
			</description>
		</method>
		<method name="is_input_reset" qualifiers="const">
			<return type="bool" />
			<param index="0" name="input" type="int" />
			<description>
				Returns whether the animation restarts when the animation transitions from the other animation.
			</description>
		</method>
		<method name="is_input_set_as_auto_advance" qualifiers="const">
			<return type="bool" />
			<param index="0" name="input" type="int" />
			<description>
				Returns [code]true[/code] if auto-advance is enabled for the given [param input] index.
			</description>
		</method>
		<method name="set_input_as_auto_advance">
			<return type="void" />
			<param index="0" name="input" type="int" />
			<param index="1" name="enable" type="bool" />
			<description>
				Enables or disables auto-advance for the given [param input] index. If enabled, state changes to the next input after playing the animation once. If enabled for the last input state, it loops to the first.
			</description>
		</method>
		<method name="set_input_break_loop_at_end">
			<return type="void" />
			<param index="0" name="input" type="int" />
			<param index="1" name="enable" type="bool" />
			<description>
				If [code]true[/code], breaks the loop at the end of the loop cycle for transition, even if the animation is looping.
			</description>
		</method>
		<method name="set_input_reset">
			<return type="void" />
			<param index="0" name="input" type="int" />
			<param index="1" name="enable" type="bool" />
			<description>
				If [code]true[/code], the destination animation is restarted when the animation transitions.
			</description>
		</method>
	</methods>
	<members>
		<member name="allow_transition_to_self" type="bool" setter="set_allow_transition_to_self" getter="is_allow_transition_to_self" default="false">
			If [code]true[/code], allows transition to the self state. When the reset option is enabled in input, the animation is restarted. If [code]false[/code], nothing happens on the transition to the self state.
		</member>
		<member name="input_count" type="int" setter="set_input_count" getter="get_input_count" default="0">
			The number of enabled input ports for this animation node.
		</member>
		<member name="xfade_curve" type="Curve" setter="set_xfade_curve" getter="get_xfade_curve">
			Determines how cross-fading between animations is eased. If empty, the transition will be linear. Should be a unit [Curve].
		</member>
		<member name="xfade_time" type="float" setter="set_xfade_time" getter="get_xfade_time" default="0.0">
			Cross-fading time (in seconds) between each animation connected to the inputs.
			[b]Note:[/b] [AnimationNodeTransition] transitions the current state immediately after the start of the fading. The precise remaining time can only be inferred from the main animation. When [AnimationNodeOutput] is considered as the most upstream, so the [member xfade_time] is not scaled depending on the downstream delta. See also [member AnimationNodeOneShot.fadeout_time].
		</member>
	</members>
</class>
