void CSDKPlayerAnimState::DoAnimationEvent( PlayerAnimEvent_t event, int nData ) { Assert( event != PLAYERANIMEVENT_THROW_GRENADE ); if ( event == PLAYERANIMEVENT_FIRE_GUN_PRIMARY || event == PLAYERANIMEVENT_FIRE_GUN_SECONDARY ) { // Regardless of what we're doing in the fire layer, restart it. m_flFireCycle = 0; m_iFireSequence = CalcFireLayerSequence( event ); m_bFiring = m_iFireSequence != -1; } else if ( event == PLAYERANIMEVENT_JUMP ) { // Play the jump animation. m_bJumping = true; m_bFirstJumpFrame = true; m_flJumpStartTime = gpGlobals->curtime; } else if ( event == PLAYERANIMEVENT_RELOAD ) { m_iReloadSequence = CalcReloadLayerSequence(); if ( m_iReloadSequence != -1 ) { m_bReloading = true; m_flReloadCycle = 0; } } else { Assert( !"CSDKPlayerAnimState::DoAnimationEvent" ); } }
void CCSPlayerAnimState::DoAnimationEvent( PlayerAnimEvent_t event, int nData ) { Assert( event != PLAYERANIMEVENT_THROW_GRENADE ); MDLCACHE_CRITICAL_SECTION(); switch ( event ) { case PLAYERANIMEVENT_FIRE_GUN_PRIMARY: case PLAYERANIMEVENT_FIRE_GUN_SECONDARY: // Regardless of what we're doing in the fire layer, restart it. m_flFireCycle = 0; m_iFireSequence = CalcFireLayerSequence( event ); m_bFiring = m_iFireSequence != -1; // If we are interrupting a (shotgun) reload, cancel the reload, and fire next frame. if ( m_bFiring && m_bReloading ) { m_bReloading = false; m_iReloadSequence = -1; m_delayedFire = event; m_bFiring = false; m_iFireSequence = -1; CAnimationLayer *pLayer = m_pOuter->GetAnimOverlay( RELOADSEQUENCE_LAYER ); if ( pLayer ) { pLayer->m_flWeight = 0.0f; pLayer->m_nOrder = 15; } } #ifdef CLIENT_DLL if ( m_bFiring && !m_bReloading ) { if ( m_pPlayer ) { m_pPlayer->ProcessMuzzleFlashEvent(); } } #endif break; case PLAYERANIMEVENT_JUMP: // Play the jump animation. m_bJumping = true; m_bFirstJumpFrame = true; m_flJumpStartTime = gpGlobals->curtime; break; case PLAYERANIMEVENT_RELOAD: { // ignore normal reload events for shotguns - they get sent to trigger sounds etc only CWeaponCSBase *pWeapon = m_pHelpers->CSAnim_GetActiveWeapon(); if ( pWeapon && pWeapon->GetCSWpnData().m_WeaponType != WEAPONTYPE_SHOTGUN ) { m_iReloadSequence = CalcReloadLayerSequence( event ); if ( m_iReloadSequence != -1 ) { m_bReloading = true; m_flReloadCycle = 0; } else { m_bReloading = false; } } } break; case PLAYERANIMEVENT_RELOAD_START: case PLAYERANIMEVENT_RELOAD_LOOP: // Set the hold time for _start and _loop anims, then fall through to the _end case m_flReloadHoldEndTime = gpGlobals->curtime + 0.75f; case PLAYERANIMEVENT_RELOAD_END: { // ignore shotgun reload events for non-shotguns CWeaponCSBase *pWeapon = m_pHelpers->CSAnim_GetActiveWeapon(); if ( pWeapon && pWeapon->GetCSWpnData().m_WeaponType != WEAPONTYPE_SHOTGUN ) { m_flReloadHoldEndTime = 0.0f; // clear this out in case we set it in _START or _LOOP above } else { m_iReloadSequence = CalcReloadLayerSequence( event ); if ( m_iReloadSequence != -1 ) { m_bReloading = true; m_flReloadCycle = 0; } else { m_bReloading = false; } } } break; default: Assert( !"CCSPlayerAnimState::DoAnimationEvent" ); } }