// ladder_down.gsc
// Climbs down a ladder of any height by using a looping animation.

#using_animtree( "generic_human" );

main()
{
	// do not do code prone in this script
	self.desired_anim_pose = "crouch";
	animscripts\utility::UpdateAnimPose();
	
	self endon( "killanimscript" );
	self traverseMode( "nogravity" );
	self traverseMode( "noclip" );

	// First, get on
	endnode = self getnegotiationendnode();
	assert( isdefined( endnode ) );
	endPos = endnode.origin;
	//("ladder_down: about to start climbing.  Height to climb: " + (endPos[2] - self.origin[2]) );#/

    // orient to the Negotiation start node
    startnode = self getnegotiationstartnode();
    assert( isdefined( startnode ) );
    self OrientMode( "face angle", startnode.angles[ 1 ] );

	self setFlaggedAnimKnoballRestart( "climbanim", %ladder_climbon, %body, 1, .1, 1 );
	self animscripts\shared::DoNoteTracks( "climbanim" );

	// Now do the cycle
	climbAnim = %ladder_climbdown;
	self setFlaggedAnimKnoballRestart( "climbanim", climbAnim, %body, 1, .1, 1 );

	cycleDelta = GetMoveDelta( climbAnim, 0, 1 );
	climbRate = cycleDelta[ 2 ] /  getanimlength( climbAnim );
	climbingTime = ( endPos[ 2 ] - self.origin[ 2 ] ) / climbRate;

	self animscripts\shared::DoNoteTracksForTime( climbingTime, "climbanim" );

	self traverseMode( "gravity" );
	self.a.movement = "stop";
	self.a.pose = "stand";
	//("ladder_down: all done");#/
}
