static void PM_ContinueLegsAnim( int anim ) { if ( ( pm->ps->legsAnim & ~ANIM_TOGGLEBIT ) == anim ) { return; } if ( pm->ps->legsTimer > 0 ) { return; // a high priority animation is running } PM_StartLegsAnim( anim ); }
void PM_ForceLegsAnim( animNumber_t anim) { if (BG_InSpecialJump(pm->ps->legsAnim) && pm->ps->legsTimer > 0 && !BG_InSpecialJump(anim)) { return; } if (BG_InRoll(pm->ps, pm->ps->legsAnim) && pm->ps->legsTimer > 0 && !BG_InRoll(pm->ps, anim)) { return; } pm->ps->legsTimer = 0; PM_StartLegsAnim( anim ); }
static void PM_ForceLegsAnim( int anim ) { pm->ps->legsTimer = 0; PM_StartLegsAnim( anim ); }
static void PM_ForceLegsAnim( int anim ) { pm->ps->legsTimer = 0; if ((pm->ps->pm_flags & PMF_NO_JUMP_ANIM) == 0) PM_StartLegsAnim( anim ); }
/* ------------------------- PM_SetAnimFinal ------------------------- */ void PM_SetAnimFinal(int setAnimParts, animNumber_t anim, int setAnimFlags, int blendTime) // default blendTime=350 { animation_t *animations = pm->animations; float editAnimSpeed = 1; if (!animations) { return; } //NOTE: Setting blendTime here breaks actual blending.. blendTime = 0; BG_SaberStartTransAnim(pm->ps->fd.saberAnimLevel, anim, &editAnimSpeed); // Set torso anim if (setAnimParts & SETANIM_TORSO) { // Don't reset if it's already running the anim if( !(setAnimFlags & SETANIM_FLAG_RESTART) && (pm->ps->torsoAnim & ~ANIM_TOGGLEBIT ) == anim ) { goto setAnimLegs; } // or if a more important anim is running if( !(setAnimFlags & SETANIM_FLAG_OVERRIDE) && ((pm->ps->torsoTimer > 0)||(pm->ps->torsoTimer == -1)) ) { goto setAnimLegs; } PM_StartTorsoAnim( anim ); if (setAnimFlags & SETANIM_FLAG_HOLD) { if (setAnimFlags & SETANIM_FLAG_HOLDLESS) { // Make sure to only wait in full 1/20 sec server frame intervals. int dur; int speedDif; dur = (animations[anim].numFrames-1) * abs(animations[anim].frameLerp); speedDif = dur - (dur * editAnimSpeed); dur += speedDif; if (dur > 1) { pm->ps->torsoTimer = dur-1; } else { pm->ps->torsoTimer = abs(animations[anim].frameLerp); } } else { pm->ps->torsoTimer = ((animations[anim].numFrames ) * abs(animations[anim].frameLerp)); } if (pm->ps->fd.forcePowersActive & (1 << FP_RAGE)) { pm->ps->torsoTimer /= 1.7; } } } setAnimLegs: // Set legs anim if (setAnimParts & SETANIM_LEGS) { // Don't reset if it's already running the anim if( !(setAnimFlags & SETANIM_FLAG_RESTART) && (pm->ps->legsAnim & ~ANIM_TOGGLEBIT ) == anim ) { goto setAnimDone; } // or if a more important anim is running if( !(setAnimFlags & SETANIM_FLAG_OVERRIDE) && ((pm->ps->legsTimer > 0)||(pm->ps->legsTimer == -1)) ) { goto setAnimDone; } PM_StartLegsAnim(anim); if (setAnimFlags & SETANIM_FLAG_HOLD) { if (setAnimFlags & SETANIM_FLAG_HOLDLESS) { // Make sure to only wait in full 1/20 sec server frame intervals. int dur; int speedDif; dur = (animations[anim].numFrames-1) * abs(animations[anim].frameLerp); speedDif = dur - (dur * editAnimSpeed); dur += speedDif; if (dur > 1) { pm->ps->legsTimer = dur-1; } else { pm->ps->legsTimer = abs(animations[anim].frameLerp); } } else { pm->ps->legsTimer = ((animations[anim].numFrames ) * abs(animations[anim].frameLerp)); } if (pm->ps->fd.forcePowersActive & (1 << FP_RAGE)) { pm->ps->legsTimer /= 1.3; } else if (pm->ps->fd.forcePowersActive & (1 << FP_SPEED)) { pm->ps->legsTimer /= 1.7; } } } setAnimDone: return; }