123 lines
3.0 KiB
Plaintext
123 lines
3.0 KiB
Plaintext
|
#include animscripts\SetPoseMovement;
|
||
|
#include animscripts\Utility;
|
||
|
#include common_scripts\utility;
|
||
|
#using_animtree( "generic_human" );
|
||
|
|
||
|
MoveWalk()
|
||
|
{
|
||
|
// Decide what pose to use
|
||
|
preferredPose = undefined;
|
||
|
if ( isdefined( self.pathGoalPos ) && distanceSquared( self.origin, self.pathGoalPos ) > 64 * 64 )
|
||
|
preferredPose = "stand";
|
||
|
|
||
|
desiredPose = [[ self.choosePoseFunc ]]( preferredPose );
|
||
|
|
||
|
switch( desiredPose )
|
||
|
{
|
||
|
case "stand":
|
||
|
if ( BeginStandWalk() )
|
||
|
return;
|
||
|
|
||
|
if ( isdefined( self.walk_overrideanim ) )
|
||
|
{
|
||
|
animscripts\move::MoveStandMoveOverride( self.walk_overrideanim, self.walk_override_weights );
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
DoWalkAnim( GetWalkAnim( "straight" ) );
|
||
|
break;
|
||
|
|
||
|
case "crouch":
|
||
|
if ( BeginCrouchWalk() )
|
||
|
return;
|
||
|
|
||
|
DoWalkAnim( GetWalkAnim( "crouch" ) );
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
assert( desiredPose == "prone" );
|
||
|
if ( BeginProneWalk() )
|
||
|
return;
|
||
|
|
||
|
self.a.movement = "walk";
|
||
|
DoWalkAnim( GetWalkAnim( "prone" ) );
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
DoWalkAnimOverride( walkAnim )
|
||
|
{
|
||
|
self endon( "movemode" );
|
||
|
self clearanim( %combatrun, 0.6 );
|
||
|
self setanimknoball( %combatrun, %body, 1, 0.5, self.moveplaybackrate );
|
||
|
|
||
|
if ( isarray( self.walk_overrideanim ) )
|
||
|
{
|
||
|
if ( isdefined( self.walk_override_weights ) )
|
||
|
moveAnim = choose_from_weighted_array( self.walk_overrideanim, self.walk_override_weights );
|
||
|
else
|
||
|
moveAnim = self.walk_overrideanim[ randomint( self.walk_overrideanim.size ) ];
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
moveAnim = self.walk_overrideanim;
|
||
|
}
|
||
|
|
||
|
self setflaggedanimknob( "moveanim", moveAnim, 1, 0.2 );
|
||
|
animscripts\shared::DoNoteTracks( "moveanim" );
|
||
|
}
|
||
|
|
||
|
GetWalkAnim( desiredAnim )
|
||
|
{
|
||
|
if ( self.stairsState == "up" )
|
||
|
return moveAnim( "stairs_up" );
|
||
|
else if ( self.stairsState == "down" )
|
||
|
return moveAnim( "stairs_down" );
|
||
|
|
||
|
walkAnim = moveAnim( desiredAnim );
|
||
|
|
||
|
if ( isarray( walkAnim ) )
|
||
|
walkAnim = walkAnim[ randomint( walkAnim.size ) ];
|
||
|
|
||
|
return walkAnim;
|
||
|
}
|
||
|
|
||
|
DoWalkAnim( walkAnim )
|
||
|
{
|
||
|
self endon( "movemode" );
|
||
|
|
||
|
rate = self.moveplaybackrate;
|
||
|
|
||
|
if ( self.stairsState != "none" )
|
||
|
rate *= 0.6;
|
||
|
|
||
|
if ( self.a.pose == "stand" )
|
||
|
{
|
||
|
if ( isdefined( self.enemy ) )
|
||
|
{
|
||
|
self thread animscripts\cqb::CQBTracking();
|
||
|
// (we don't use %body because that would reset the aiming knobs)
|
||
|
self setFlaggedAnimKnobAll( "walkanim", animscripts\cqb::DetermineCQBAnim(), %walk_and_run_loops, 1, 1, rate, true );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
self setFlaggedAnimKnobAll( "walkanim", walkAnim, %body, 1, 1, rate, true );
|
||
|
}
|
||
|
|
||
|
self animscripts\run::SetMoveNonForwardAnims( moveAnim( "move_b" ), moveAnim( "move_l" ), moveAnim( "move_r" ) );
|
||
|
self thread animscripts\run::SetCombatStandMoveAnimWeights( "walk" );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
self setFlaggedAnimKnobAll( "walkanim", walkAnim, %body, 1, 1, rate, true );
|
||
|
|
||
|
self animscripts\run::SetMoveNonForwardAnims( moveAnim( "move_b" ), moveAnim( "move_l" ), moveAnim( "move_r" ) );
|
||
|
self thread animscripts\run::SetCombatStandMoveAnimWeights( "walk" );
|
||
|
}
|
||
|
|
||
|
self animscripts\shared::DoNoteTracksForTime( 0.2, "walkanim" );
|
||
|
|
||
|
self thread animscripts\run::stopShootWhileMovingThreads();
|
||
|
}
|
||
|
|