//----------------------------------------------------------------------------- // Purpose: // Input : event - //----------------------------------------------------------------------------- void CSDKPlayerAnimState::DoAnimationEvent( PlayerAnimEvent_t event, int nData ) { Activity iGestureActivity = ACT_INVALID; switch( event ) { case PLAYERANIMEVENT_ATTACK_PRIMARY: { // Weapon primary fire. if ( m_pSDKPlayer->m_Shared.IsProne() || m_pSDKPlayer->m_Shared.IsDiveSliding() ) RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_DA_PRIMARYATTACK_PRONE ); else if ( m_pSDKPlayer->m_Shared.IsSliding() ) RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_DA_PRIMARYATTACK_SLIDE ); else if ( m_pSDKPlayer->m_Shared.IsRolling() ) RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_DA_PRIMARYATTACK_ROLL ); else if ( m_pSDKPlayer->m_Shared.IsDiving() ) RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_DA_PRIMARYATTACK_DIVE ); else if ( m_pSDKPlayer->GetFlags() & FL_DUCKING ) RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_DA_PRIMARYATTACK_CROUCH ); else RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_DA_PRIMARYATTACK ); iGestureActivity = ACT_VM_PRIMARYATTACK; break; } case PLAYERANIMEVENT_VOICE_COMMAND_GESTURE: { if ( !IsGestureSlotActive( GESTURE_SLOT_ATTACK_AND_RELOAD ) ) { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, (Activity)nData ); } iGestureActivity = ACT_VM_IDLE; //TODO? break; } case PLAYERANIMEVENT_ATTACK_SECONDARY: { // Weapon secondary fire. if ( m_pSDKPlayer->m_Shared.IsProne() || m_pSDKPlayer->m_Shared.IsDiveSliding() ) RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_DA_BRAWL_PRONE ); else if ( m_pSDKPlayer->m_Shared.IsSliding() ) RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_DA_BRAWL_SLIDE ); else if ( m_pSDKPlayer->m_Shared.IsRolling() ) RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_DA_BRAWL_ROLL ); else if ( m_pSDKPlayer->m_Shared.IsDiving() ) RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_DA_BRAWL_DIVE ); else if ( m_pSDKPlayer->GetFlags() & FL_DUCKING ) RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_DA_BRAWL_CROUCH ); else RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_DA_BRAWL ); iGestureActivity = ACT_VM_PRIMARYATTACK; break; } case PLAYERANIMEVENT_ATTACK_PRE: { if ( m_pSDKPlayer->GetFlags() & FL_DUCKING ) { // Weapon pre-fire. Used for minigun windup, sniper aiming start, etc in crouch. iGestureActivity = ACT_MP_ATTACK_CROUCH_PREFIRE; } else { // Weapon pre-fire. Used for minigun windup, sniper aiming start, etc. iGestureActivity = ACT_MP_ATTACK_STAND_PREFIRE; } RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, iGestureActivity, false ); iGestureActivity = ACT_VM_IDLE; //TODO? break; } case PLAYERANIMEVENT_ATTACK_POST: { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_ATTACK_STAND_POSTFIRE ); iGestureActivity = ACT_VM_IDLE; //TODO? break; } case PLAYERANIMEVENT_RELOAD: { // Weapon reload. /*//We only have standing reload-- it blends into other states if ( m_pSDKPlayer->m_Shared.IsProne() || m_pSDKPlayer->m_Shared.IsDiveSliding() ) RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_DA_RELOAD_PRONE ); else if ( m_pSDKPlayer->m_Shared.IsSliding() ) RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_DA_RELOAD_SLIDE ); else if ( GetBasePlayer()->GetFlags() & FL_DUCKING ) RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_DA_RELOAD_CROUCH ); else*/ RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_DA_RELOAD ); iGestureActivity = ACT_VM_RELOAD; //Make view reload if it isn't already break; } case PLAYERANIMEVENT_RELOAD_LOOP: { // Weapon reload. /*//We only have standing reload-- it blends into other states if ( m_pSDKPlayer->m_Shared.IsProne() || m_pSDKPlayer->m_Shared.IsDiveSliding() ) RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_DA_RELOAD_LOOP_PRONE ); else if ( m_pSDKPlayer->m_Shared.IsSliding() ) RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_DA_RELOAD_LOOP_SLIDE ); else if ( GetBasePlayer()->GetFlags() & FL_DUCKING ) RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_DA_RELOAD_LOOP_CROUCH ); else*/ RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_DA_RELOAD_LOOP ); iGestureActivity = ACT_INVALID; //TODO: fix break; } case PLAYERANIMEVENT_RELOAD_END: { // Weapon reload. if ( m_pSDKPlayer->m_Shared.IsProne() || m_pSDKPlayer->m_Shared.IsDiveSliding() ) RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_DA_RELOAD_END_PRONE ); else if ( m_pSDKPlayer->m_Shared.IsSliding() ) RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_DA_RELOAD_END_SLIDE ); else if ( GetBasePlayer()->GetFlags() & FL_DUCKING ) RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_DA_RELOAD_END_CROUCH ); else RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_DA_RELOAD_END ); iGestureActivity = ACT_INVALID; //TODO: fix break; } #if defined ( SDK_USE_PRONE ) case PLAYERANIMEVENT_STAND_TO_PRONE: { m_bProneTransition = true; m_bProneTransitionFirstFrame = true; //m_iProneActivity = ACT_MP_STAND_TO_PRONE; RestartMainSequence(); iGestureActivity = ACT_VM_IDLE; //Clear for weapon, we have no stand->prone so just idle. } break; case PLAYERANIMEVENT_CROUCH_TO_PRONE: { m_bProneTransition = true; m_bProneTransitionFirstFrame = true; //m_iProneActivity = ACT_MP_CROUCH_TO_PRONE; RestartMainSequence(); iGestureActivity = ACT_VM_IDLE; //Clear for weapon, we have no crouch->prone so just idle. } break; case PLAYERANIMEVENT_PRONE_TO_STAND: { m_bProneTransition = true; m_bProneTransitionFirstFrame = true; m_iProneActivity = ACT_DA_PRONE_TO_STAND; RestartMainSequence(); iGestureActivity = ACT_VM_IDLE; //Clear for weapon, we have no prone->stand so just idle. } break; case PLAYERANIMEVENT_PRONE_TO_CROUCH: { m_bProneTransition = true; m_bProneTransitionFirstFrame = true; //m_iProneActivity = ACT_MP_PRONE_TO_CROUCH; RestartMainSequence(); iGestureActivity = ACT_VM_IDLE; //Clear for weapon, we have no prone->crouch so just idle. } break; #endif case PLAYERANIMEVENT_DRAW: { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_DA_DRAW ); iGestureActivity = ACT_VM_DRAW; break; } case PLAYERANIMEVENT_DIVE: { m_bDiveStart = true; m_bDiveStartFirstFrame = true; m_iDiveActivity = ACT_DA_DIVE; RestartMainSequence(); iGestureActivity = ACT_VM_IDLE; } break; case PLAYERANIMEVENT_DIVE_TO_ROLL: { m_bRollTransition = true; m_bRollTransitionFirstFrame = true; m_iRollActivity = ACT_DA_DIVEROLL; RestartMainSequence(); iGestureActivity = ACT_VM_IDLE; //Clear for weapon, we have no stand->slide so just idle. } break; case PLAYERANIMEVENT_STAND_TO_SLIDE: { m_bSlideTransition = true; m_bSlideTransitionFirstFrame = true; m_iSlideActivity = ACT_DA_SLIDESTART; RestartMainSequence(); iGestureActivity = ACT_VM_IDLE; //Clear for weapon, we have no stand->slide so just idle. } break; case PLAYERANIMEVENT_STAND_TO_ROLL: { m_bRollTransition = true; m_bRollTransitionFirstFrame = true; m_iRollActivity = ACT_DA_ROLL; RestartMainSequence(); iGestureActivity = ACT_VM_IDLE; //Clear for weapon, we have no stand->slide so just idle. } break; case PLAYERANIMEVENT_STAND_TO_VAULT: m_bRollTransition = true; m_bRollTransitionFirstFrame = true; m_iRollActivity = ACT_DA_ROLL; RestartMainSequence(); iGestureActivity = ACT_VM_IDLE; break; case PLAYERANIMEVENT_STAND_TO_WALLRUN: m_bRollTransition = true; m_bRollTransitionFirstFrame = true; m_iRollActivity = ACT_DA_ROLL; RestartMainSequence(); iGestureActivity = ACT_VM_IDLE; break; case PLAYERANIMEVENT_WALLFLIP: RestartMainSequence(); iGestureActivity = ACT_VM_IDLE; break; case PLAYERANIMEVENT_WALLCLIMB: RestartMainSequence(); iGestureActivity = ACT_VM_IDLE; break; case PLAYERANIMEVENT_JUMP: { // Jump. m_bJumping = true; m_bFirstJumpFrame = true; m_flJumpStartTime = m_pSDKPlayer->GetCurrentTime(); RestartMainSequence(); break; } case PLAYERANIMEVENT_CANCEL: { ResetGestureSlot( GESTURE_SLOT_ATTACK_AND_RELOAD ); break; } default: { BaseClass::DoAnimationEvent( event, nData ); break; } } #ifdef CLIENT_DLL // Make the weapon play the animation as well if ( iGestureActivity != ACT_INVALID && GetSDKPlayer() != CSDKPlayer::GetLocalSDKPlayer()) { CBaseCombatWeapon *pWeapon = GetSDKPlayer()->GetActiveWeapon(); if ( pWeapon ) { //pWeapon->EnsureCorrectRenderingModel(); pWeapon->SendWeaponAnim( iGestureActivity ); // Force animation events! //pWeapon->ResetEventsParity(); // reset event parity so the animation events will occur on the weapon. pWeapon->DoAnimationEvents( pWeapon->GetModelPtr() ); } } #endif }
//----------------------------------------------------------------------------- // Purpose: // Input : event - //----------------------------------------------------------------------------- void CTFPlayerAnimState::DoAnimationEvent( PlayerAnimEvent_t event, int nData ) { Activity iGestureActivity = ACT_INVALID; switch( event ) { case PLAYERANIMEVENT_ATTACK_PRIMARY: { CTFPlayer *pPlayer = GetTFPlayer(); if ( !pPlayer ) return; CTFWeaponBase *pWpn = pPlayer->GetActiveTFWeapon(); bool bIsMinigun = ( pWpn && pWpn->GetWeaponID() == TF_WEAPON_MINIGUN ); bool bIsSniperRifle = ( pWpn && pWpn->GetWeaponID() == TF_WEAPON_SNIPERRIFLE ); // Heavy weapons primary fire. if ( bIsMinigun ) { // Play standing primary fire. iGestureActivity = ACT_MP_ATTACK_STAND_PRIMARYFIRE; if ( m_bInSwim ) { // Play swimming primary fire. iGestureActivity = ACT_MP_ATTACK_SWIM_PRIMARYFIRE; } else if ( GetBasePlayer()->GetFlags() & FL_DUCKING ) { // Play crouching primary fire. iGestureActivity = ACT_MP_ATTACK_CROUCH_PRIMARYFIRE; } if ( !IsGestureSlotPlaying( GESTURE_SLOT_ATTACK_AND_RELOAD, TranslateActivity(iGestureActivity) ) ) { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, iGestureActivity ); } } else if ( bIsSniperRifle && pPlayer->m_Shared.InCond( TF_COND_ZOOMED ) ) { // Weapon primary fire, zoomed in if ( GetBasePlayer()->GetFlags() & FL_DUCKING ) { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_ATTACK_CROUCH_PRIMARYFIRE_DEPLOYED ); } else { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_ATTACK_STAND_PRIMARYFIRE_DEPLOYED ); } iGestureActivity = ACT_VM_PRIMARYATTACK; // Hold our deployed pose for a few seconds m_flHoldDeployedPoseUntilTime = gpGlobals->curtime + 2.0; } else { // Weapon primary fire. if ( GetBasePlayer()->GetFlags() & FL_DUCKING ) { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_ATTACK_CROUCH_PRIMARYFIRE ); } else { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_ATTACK_STAND_PRIMARYFIRE ); } iGestureActivity = ACT_VM_PRIMARYATTACK; } break; } case PLAYERANIMEVENT_VOICE_COMMAND_GESTURE: { if ( !IsGestureSlotActive( GESTURE_SLOT_ATTACK_AND_RELOAD ) ) { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, (Activity)nData ); } break; } case PLAYERANIMEVENT_ATTACK_SECONDARY: { // Weapon secondary fire. if ( GetBasePlayer()->GetFlags() & FL_DUCKING ) { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_ATTACK_CROUCH_SECONDARYFIRE ); } else { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_ATTACK_STAND_SECONDARYFIRE ); } iGestureActivity = ACT_VM_PRIMARYATTACK; break; } case PLAYERANIMEVENT_ATTACK_PRE: { CTFPlayer *pPlayer = GetTFPlayer(); if ( !pPlayer ) return; CTFWeaponBase *pWpn = pPlayer->GetActiveTFWeapon(); bool bIsMinigun = ( pWpn && pWpn->GetWeaponID() == TF_WEAPON_MINIGUN ); bool bAutoKillPreFire = false; if ( bIsMinigun ) { bAutoKillPreFire = true; } if ( m_bInSwim && bIsMinigun ) { // Weapon pre-fire. Used for minigun windup while swimming iGestureActivity = ACT_MP_ATTACK_SWIM_PREFIRE; } else if ( GetBasePlayer()->GetFlags() & FL_DUCKING ) { // Weapon pre-fire. Used for minigun windup, sniper aiming start, etc in crouch. iGestureActivity = ACT_MP_ATTACK_CROUCH_PREFIRE; } else { // Weapon pre-fire. Used for minigun windup, sniper aiming start, etc. iGestureActivity = ACT_MP_ATTACK_STAND_PREFIRE; } RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, iGestureActivity, bAutoKillPreFire ); break; } case PLAYERANIMEVENT_ATTACK_POST: { CTFPlayer *pPlayer = GetTFPlayer(); if ( !pPlayer ) return; CTFWeaponBase *pWpn = pPlayer->GetActiveTFWeapon(); bool bIsMinigun = ( pWpn && pWpn->GetWeaponID() == TF_WEAPON_MINIGUN ); if ( m_bInSwim && bIsMinigun ) { // Weapon pre-fire. Used for minigun winddown while swimming iGestureActivity = ACT_MP_ATTACK_SWIM_POSTFIRE; } else if ( GetBasePlayer()->GetFlags() & FL_DUCKING ) { // Weapon post-fire. Used for minigun winddown in crouch. iGestureActivity = ACT_MP_ATTACK_CROUCH_POSTFIRE; } else { // Weapon post-fire. Used for minigun winddown. iGestureActivity = ACT_MP_ATTACK_STAND_POSTFIRE; } RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, iGestureActivity ); break; } case PLAYERANIMEVENT_RELOAD: { // Weapon reload. if ( m_bInAirWalk ) { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_RELOAD_AIRWALK ); } else { BaseClass::DoAnimationEvent( event, nData ); } break; } case PLAYERANIMEVENT_RELOAD_LOOP: { // Weapon reload. if ( m_bInAirWalk ) { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_RELOAD_AIRWALK_LOOP ); } else { BaseClass::DoAnimationEvent( event, nData ); } break; } case PLAYERANIMEVENT_RELOAD_END: { // Weapon reload. if ( m_bInAirWalk ) { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_RELOAD_AIRWALK_END ); } else { BaseClass::DoAnimationEvent( event, nData ); } break; } case PLAYERANIMEVENT_DOUBLEJUMP: { // Check to see if we are jumping! if ( !m_bJumping ) { m_bJumping = true; m_bFirstJumpFrame = true; m_flJumpStartTime = gpGlobals->curtime; RestartMainSequence(); } // Force the air walk off. m_bInAirWalk = false; // Player the air dash gesture. if (GetBasePlayer()->GetFlags() & FL_DUCKING) { RestartGesture( GESTURE_SLOT_JUMP, ACT_MP_DOUBLEJUMP_CROUCH ); } else { RestartGesture( GESTURE_SLOT_JUMP, ACT_MP_DOUBLEJUMP ); } break; } default: { BaseClass::DoAnimationEvent( event, nData ); break; } } #ifdef CLIENT_DLL // Make the weapon play the animation as well if (iGestureActivity != ACT_INVALID && GetBasePlayer() != C_BasePlayer::GetLocalPlayer()) { CBaseCombatWeapon *pWeapon = GetTFPlayer()->GetActiveWeapon(); if ( pWeapon ) { pWeapon->SendWeaponAnim( iGestureActivity ); pWeapon->DoAnimationEvents(pWeapon->GetModelPtr()); } } #endif }
//----------------------------------------------------------------------------- // Purpose: // Input : event - //----------------------------------------------------------------------------- void CHL2MPPlayerAnimState::DoAnimationEvent( PlayerAnimEvent_t event, int nData ) { Activity iGestureActivity = ACT_INVALID; switch( event ) { case PLAYERANIMEVENT_ATTACK_PRIMARY: { // Weapon primary fire. if ( m_pHL2MPPlayer->GetFlags() & FL_DUCKING ) RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_ATTACK_CROUCH_PRIMARYFIRE ); else RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_ATTACK_STAND_PRIMARYFIRE ); iGestureActivity = ACT_VM_PRIMARYATTACK; break; } case PLAYERANIMEVENT_VOICE_COMMAND_GESTURE: { if ( !IsGestureSlotActive( GESTURE_SLOT_ATTACK_AND_RELOAD ) ) RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, (Activity)nData ); break; } case PLAYERANIMEVENT_ATTACK_SECONDARY: { // Weapon secondary fire. if ( m_pHL2MPPlayer->GetFlags() & FL_DUCKING ) RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_ATTACK_CROUCH_SECONDARYFIRE ); else RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_ATTACK_STAND_SECONDARYFIRE ); iGestureActivity = ACT_VM_PRIMARYATTACK; break; } case PLAYERANIMEVENT_ATTACK_PRE: { if ( m_pHL2MPPlayer->GetFlags() & FL_DUCKING ) { // Weapon pre-fire. Used for minigun windup, sniper aiming start, etc in crouch. iGestureActivity = ACT_MP_ATTACK_CROUCH_PREFIRE; } else { // Weapon pre-fire. Used for minigun windup, sniper aiming start, etc. iGestureActivity = ACT_MP_ATTACK_STAND_PREFIRE; } RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, iGestureActivity, false ); break; } case PLAYERANIMEVENT_ATTACK_POST: { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_ATTACK_STAND_POSTFIRE ); break; } case PLAYERANIMEVENT_RELOAD: { // Weapon reload. if ( GetBasePlayer()->GetFlags() & FL_DUCKING ) RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_RELOAD_CROUCH ); else RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_RELOAD_STAND ); break; } case PLAYERANIMEVENT_RELOAD_LOOP: { // Weapon reload. if ( GetBasePlayer()->GetFlags() & FL_DUCKING ) RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_RELOAD_CROUCH_LOOP ); else RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_RELOAD_STAND_LOOP ); break; } case PLAYERANIMEVENT_RELOAD_END: { // Weapon reload. if ( GetBasePlayer()->GetFlags() & FL_DUCKING ) RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_RELOAD_CROUCH_END ); else RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_RELOAD_STAND_END ); break; } default: { BaseClass::DoAnimationEvent( event, nData ); break; } } #ifdef CLIENT_DLL // Make the weapon play the animation as well if ( iGestureActivity != ACT_INVALID ) { CBaseCombatWeapon *pWeapon = GetHL2MPPlayer()->GetActiveWeapon(); if ( pWeapon ) { pWeapon->EnsureCorrectRenderingModel(); pWeapon->SendWeaponAnim( iGestureActivity ); // Force animation events! pWeapon->ResetEventsParity(); // reset event parity so the animation events will occur on the weapon. pWeapon->DoAnimationEvents( pWeapon->GetModelPtr() ); } } #endif }
//----------------------------------------------------------------------------- // Purpose: // Input : event - //----------------------------------------------------------------------------- void CSDKPlayerAnimState::DoAnimationEvent( PlayerAnimEvent_t event, int nData ) { Activity iGestureActivity = ACT_INVALID; switch( event ) { case PLAYERANIMEVENT_ATTACK_PRIMARY: { // Weapon primary fire. #if defined ( SDK_USE_PRONE ) if ( m_pSDKPlayer->m_Shared.IsProne() ) { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_ATTACK_PRONE_PRIMARYFIRE ); } else #endif //SDK_USE_PRONE if ( m_pSDKPlayer->GetFlags() & FL_DUCKING ) { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_ATTACK_CROUCH_PRIMARYFIRE ); } else { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_ATTACK_STAND_PRIMARYFIRE ); } iGestureActivity = ACT_VM_PRIMARYATTACK; break; } case PLAYERANIMEVENT_VOICE_COMMAND_GESTURE: { if ( !IsGestureSlotActive( GESTURE_SLOT_ATTACK_AND_RELOAD ) ) { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, (Activity)nData ); } iGestureActivity = ACT_VM_IDLE; //TODO? break; } case PLAYERANIMEVENT_ATTACK_SECONDARY: { // Weapon secondary fire. #if defined ( SDK_USE_PRONE ) if ( m_pSDKPlayer->m_Shared.IsProne() ) { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_ATTACK_PRONE_SECONDARYFIRE ); } else #endif //SDK_USE_PRONE if ( m_pSDKPlayer->GetFlags() & FL_DUCKING ) { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_ATTACK_CROUCH_SECONDARYFIRE ); } else { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_ATTACK_STAND_SECONDARYFIRE ); } iGestureActivity = ACT_VM_PRIMARYATTACK; break; } case PLAYERANIMEVENT_ATTACK_PRE: { if ( m_pSDKPlayer->GetFlags() & FL_DUCKING ) { // Weapon pre-fire. Used for minigun windup, sniper aiming start, etc in crouch. iGestureActivity = ACT_MP_ATTACK_CROUCH_PREFIRE; } else { // Weapon pre-fire. Used for minigun windup, sniper aiming start, etc. iGestureActivity = ACT_MP_ATTACK_STAND_PREFIRE; } RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, iGestureActivity, false ); iGestureActivity = ACT_VM_IDLE; //TODO? break; } case PLAYERANIMEVENT_ATTACK_POST: { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_ATTACK_STAND_POSTFIRE ); iGestureActivity = ACT_VM_IDLE; //TODO? break; } case PLAYERANIMEVENT_RELOAD: { // Weapon reload. #if defined ( SDK_USE_PRONE ) if ( m_pSDKPlayer->m_Shared.IsProne() ) { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_RELOAD_PRONE ); } else #endif //SDK_USE_PRONE if ( GetBasePlayer()->GetFlags() & FL_DUCKING ) { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_RELOAD_CROUCH ); } else { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_RELOAD_STAND ); } iGestureActivity = ACT_VM_RELOAD; //Make view reload if it isn't already break; } case PLAYERANIMEVENT_RELOAD_LOOP: { // Weapon reload. #if defined ( SDK_USE_PRONE ) if ( m_pSDKPlayer->m_Shared.IsProne() ) { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_RELOAD_PRONE_LOOP ); } else #endif //SDK_USE_PRONE if ( GetBasePlayer()->GetFlags() & FL_DUCKING ) { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_RELOAD_CROUCH_LOOP ); } else { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_RELOAD_STAND_LOOP ); } iGestureActivity = ACT_INVALID; //TODO: fix break; } case PLAYERANIMEVENT_RELOAD_END: { // Weapon reload. #if defined ( SDK_USE_PRONE ) if ( m_pSDKPlayer->m_Shared.IsProne() ) { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_RELOAD_PRONE_END ); } else #endif //SDK_USE_PRONE if ( GetBasePlayer()->GetFlags() & FL_DUCKING ) { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_RELOAD_CROUCH_END ); } else { RestartGesture( GESTURE_SLOT_ATTACK_AND_RELOAD, ACT_MP_RELOAD_STAND_END ); } iGestureActivity = ACT_INVALID; //TODO: fix break; } #if defined ( SDK_USE_PRONE ) case PLAYERANIMEVENT_STAND_TO_PRONE: { m_bProneTransition = true; m_bProneTransitionFirstFrame = true; m_iProneActivity = ACT_MP_STAND_TO_PRONE; RestartMainSequence(); iGestureActivity = ACT_VM_IDLE; //Clear for weapon, we have no stand->prone so just idle. } break; case PLAYERANIMEVENT_CROUCH_TO_PRONE: { m_bProneTransition = true; m_bProneTransitionFirstFrame = true; m_iProneActivity = ACT_MP_CROUCH_TO_PRONE; RestartMainSequence(); iGestureActivity = ACT_VM_IDLE; //Clear for weapon, we have no crouch->prone so just idle. } break; case PLAYERANIMEVENT_PRONE_TO_STAND: { m_bProneTransition = true; m_bProneTransitionFirstFrame = true; m_iProneActivity = ACT_MP_PRONE_TO_STAND; RestartMainSequence(); iGestureActivity = ACT_VM_IDLE; //Clear for weapon, we have no prone->stand so just idle. } break; case PLAYERANIMEVENT_PRONE_TO_CROUCH: { m_bProneTransition = true; m_bProneTransitionFirstFrame = true; m_iProneActivity = ACT_MP_PRONE_TO_CROUCH; RestartMainSequence(); iGestureActivity = ACT_VM_IDLE; //Clear for weapon, we have no prone->crouch so just idle. } break; #endif default: { BaseClass::DoAnimationEvent( event, nData ); break; } } #ifdef CLIENT_DLL // Make the weapon play the animation as well if ( iGestureActivity != ACT_INVALID && GetSDKPlayer() != CSDKPlayer::GetLocalSDKPlayer()) { CBaseCombatWeapon *pWeapon = GetSDKPlayer()->GetActiveWeapon(); if ( pWeapon ) { pWeapon->EnsureCorrectRenderingModel(); pWeapon->SendWeaponAnim( iGestureActivity ); // Force animation events! // pWeapon->ResetEventsParity(); // reset event parity so the animation events will occur on the weapon. pWeapon->DoAnimationEvents( pWeapon->GetModelPtr() ); } } #endif }