//----------------------------------------------------------------------------- // Purpose: // Input : *pEvent - // *pOperator - //----------------------------------------------------------------------------- void CWeaponFrag::Operator_HandleAnimEvent( animevent_t *pEvent, CBaseCombatCharacter *pOperator ) { CBasePlayer *pOwner = ToBasePlayer( GetOwner() ); bool fThrewGrenade = false; switch( pEvent->event ) { case EVENT_WEAPON_SEQUENCE_FINISHED: m_fDrawbackFinished = true; break; case EVENT_WEAPON_THROW: ThrowGrenade( pOwner ); DecrementAmmo( pOwner ); fThrewGrenade = true; break; case EVENT_WEAPON_THROW2: RollGrenade( pOwner ); DecrementAmmo( pOwner ); fThrewGrenade = true; break; case EVENT_WEAPON_THROW3: LobGrenade( pOwner ); DecrementAmmo( pOwner ); fThrewGrenade = true; break; default: BaseClass::Operator_HandleAnimEvent( pEvent, pOperator ); break; } #define RETHROW_DELAY 0.5 if( fThrewGrenade ) { m_flNextPrimaryAttack = gpGlobals->curtime + RETHROW_DELAY; m_flNextSecondaryAttack = gpGlobals->curtime + RETHROW_DELAY; m_flTimeWeaponIdle = FLT_MAX; //NOTE: This is set once the animation has finished up! } }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CBaseSDKGrenade::ItemPostFrame() { CSDKPlayer *pPlayer = GetPlayerOwner(); if ( !pPlayer ) return; CBaseViewModel *vm = pPlayer->GetViewModel( m_nViewModelIndex ); if ( !vm ) return; // If they let go of the fire button, they want to throw the grenade. if ( m_bPinPulled && !(pPlayer->m_nButtons & IN_ATTACK) ) { pPlayer->DoAnimationEvent( PLAYERANIMEVENT_THROW_GRENADE ); StartGrenadeThrow(); DecrementAmmo( pPlayer ); m_bPinPulled = false; SendWeaponAnim( ACT_VM_THROW ); SetWeaponIdleTime( gpGlobals->curtime + SequenceDuration() ); } else if ((m_fThrowTime > 0) && (m_fThrowTime < gpGlobals->curtime)) { ThrowGrenade(); } else if( m_bRedraw ) { // Has the throw animation finished playing if( m_flTimeWeaponIdle < gpGlobals->curtime ) { #ifdef GAME_DLL // if we're officially out of grenades, ditch this weapon if( pPlayer->GetAmmoCount(m_iPrimaryAmmoType) <= 0 ) { pPlayer->Weapon_Drop( this, NULL, NULL ); UTIL_Remove(this); } else { pPlayer->SwitchToNextBestWeapon( this ); } #endif return; //don't animate this grenade any more! } } else if( !m_bRedraw ) { BaseClass::ItemPostFrame(); } }
//----------------------------------------------------------------------------- // Purpose: // Input : *pEvent - // *pOperator - //----------------------------------------------------------------------------- void CBaseCSGrenade::Operator_HandleAnimEvent( animevent_t *pEvent, CBaseCombatCharacter *pOperator ) { CBasePlayer *pOwner = ToBasePlayer( GetOwner() ); switch( pEvent->event ) { case EVENT_WEAPON_THROW: ThrowGrenade(); DecrementAmmo( pOwner ); break; default: BaseClass::Operator_HandleAnimEvent( pEvent, pOperator ); break; } }
void CWeaponGrenade::PrimaryAttackThrow( void ) { CBaseCombatCharacter *pOwner = GetOwner(); if ( pOwner == NULL ) return; CBasePlayer *pPlayer = ToBasePlayer( GetOwner() );; if ( !pPlayer ) return; SendWeaponAnim( ACT_VM_THROW ); m_flNextPrimaryAttack = gpGlobals->curtime + SequenceDuration(); ThrowGrenade(pPlayer); DecrementAmmo(pOwner); m_bAttackPaused = false; if(!HasPrimaryAmmo()) pPlayer->SwitchToNextBestWeapon( this ); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CWeaponFrag::ItemPostFrame( void ) { if( m_fDrawbackFinished ) { CBasePlayer *pOwner = ToBasePlayer( GetOwner() ); if (pOwner) { switch( m_AttackPaused ) { case GRENADE_PAUSED_PRIMARY: if( !(pOwner->m_nButtons & IN_ATTACK) ) { SendWeaponAnim( ACT_VM_THROW ); ToHL2MPPlayer(pOwner)->DoAnimationEvent( PLAYERANIMEVENT_ATTACK_PRIMARY ); //Tony; fire the sequence m_fDrawbackFinished = false; } //We are still holding attack... else { if ( flExplodeTime <= gpGlobals->curtime ) { //DHL: Skip the animations and go boom immediately if we've been holding it too long ThrowGrenade( pOwner, true ); //Make it invisible as to maintain the illusion of going off in the player's hand DecrementAmmo( pOwner ); //Make absolutely certain that if the grenade goes off in a player's hand, they die. #ifndef CLIENT_DLL CTakeDamageInfo GrenadeInfo( this, pOwner, 100.0f, DMG_BURN, 0 ); pOwner->TakeDamage( GrenadeInfo ); #endif } } break; case GRENADE_PAUSED_SECONDARY: if( !(pOwner->m_nButtons & IN_ATTACK2) ) { //See if we're ducking if ( pOwner->m_nButtons & IN_DUCK ) { //Send the weapon animation SendWeaponAnim( ACT_VM_SECONDARYATTACK ); } else { //Send the weapon animation SendWeaponAnim( ACT_VM_HAULBACK ); } //Tony; the grenade really should have a secondary anim. but it doesn't on the player. ToHL2MPPlayer(pOwner)->DoAnimationEvent( PLAYERANIMEVENT_ATTACK_PRIMARY ); m_fDrawbackFinished = false; } break; default: break; } } } BaseClass::ItemPostFrame(); if ( m_bRedraw ) { if ( IsViewModelSequenceFinished() ) { Reload(); } } }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CBaseSDKGrenade::ItemPostFrame() { CSDKPlayer *pPlayer = GetPlayerOwner(); if ( !pPlayer ) return; CBaseViewModel *vm = pPlayer->GetViewModel( m_nViewModelIndex ); if ( !vm ) return; // If they let go of the fire button, they want to throw the grenade. if ( m_bPinPulled && !(pPlayer->m_nButtons & IN_ATTACK) ) { pPlayer->DoAnimationEvent( PLAYERANIMEVENT_ATTACK_PRIMARY ); // if (m_bSecondary) // DropGrenade(); // else ThrowGrenade(); if (!pPlayer->IsStyleSkillActive(SKILL_TROLL)) DecrementAmmo( pPlayer ); m_bPinPulled = false; SendWeaponAnim( ACT_VM_THROW ); SetWeaponIdleTime( GetCurrentTime() + SequenceDuration() ); m_bPinPulled = false; // m_bSecondary = false; } else if( m_bRedraw ) { // Has the throw animation finished playing if( m_flTimeWeaponIdle < GetCurrentTime() ) { // if we're officially out of grenades, ditch this weapon if( pPlayer->GetAmmoCount(m_iPrimaryAmmoType) <= 0 ) { #ifdef GAME_DLL pPlayer->Weapon_Drop( this, NULL, NULL ); UTIL_Remove(this); #endif pPlayer->SwitchToNextBestWeapon( NULL ); //Tony; now switch! cuz we rans outs! } else if (pPlayer->IsStyleSkillActive(SKILL_TROLL)) { m_bRedraw = false; m_flNextPrimaryAttack = GetCurrentTime() + 1.2; m_flNextSecondaryAttack = GetCurrentTime() + 1.2; SendWeaponAnim( GetDeployActivity() ); } else { m_bRedraw = false; // Only switch to the next best weapon if the next best weapon is not brawl. CBaseCombatWeapon *pNewWeapon = g_pGameRules->GetNextBestWeapon(pPlayer, this); CWeaponSDKBase* pSDKNewWeapon = dynamic_cast<CWeaponSDKBase*>(pNewWeapon); bool bSwitch = true; if (!pSDKNewWeapon) bSwitch = false; // If I'm going to switch to brawl but I have more grenades, don't switch. else if (pSDKNewWeapon && pSDKNewWeapon->GetWeaponID() == SDK_WEAPON_BRAWL && pPlayer->GetAmmoCount(m_iPrimaryAmmoType) > 0) bSwitch = false; if (bSwitch) pPlayer->SwitchToNextBestWeapon( this ); } return; //don't animate this grenade any more! } } else if( !m_bRedraw ) { BaseClass::ItemPostFrame(); } }
void CWeapon_Manhack::Operator_HandleAnimEvent( animevent_t *pEvent, CBaseCombatCharacter *pOperator ) { CBasePlayer *pOwner = ToBasePlayer( GetOwner() ); switch( pEvent->event ) { case EVENT_WEAPON_SEQUENCE_FINISHED: m_bIsDrawing = false; m_bIsDoingShit = false; m_bIsDoingShitToo = false; if (m_bRedraw) { m_bRedraw=false; Deploy(); } break; case EVENT_WEAPON_THROW: if (CPropVehicleManhack::GetManhackVehicle()!=NULL) { if (m_bHasFreeSlot) { if (CreateControllableNPCManhack( pOwner)) { DecrementAmmo( pOwner ); EnableManhackSubModel(false); m_bRedraw=true; CBasePlayer *pPlayer = ToBasePlayer( pOwner ); if ( pPlayer != NULL && m_iManhackHintTimeShown < 2) { if (GlobalEntity_GetState("manhacks_not_controllable") == GLOBAL_ON ) UTIL_HudHintText( pPlayer, "#HLSS_Hint_ManhackSend" ); else UTIL_HudHintText( pPlayer, "#HLSS_Hint_ManhackControl" ); m_iManhackHintTimeShown++; } // fSpawnedManhack = true; } } } else if (CreateControllableVehicleManhack( pOwner)) { DecrementAmmo( pOwner ); EnableManhackSubModel(false); m_bRedraw=true; // fSpawnedManhack = true; //CBasePlayer *pPlayer = ToBasePlayer( pOwner ); if ( pOwner != NULL && m_iManhackHintTimeShown <2) { if (GlobalEntity_GetState("manhacks_not_controllable") == GLOBAL_ON ) UTIL_HudHintText( pOwner, "#HLSS_Hint_ManhackSend" ); else UTIL_HudHintText( pOwner, "#HLSS_Hint_ManhackControl" ); m_iManhackHintTimeShown++; } } m_bToggleCallback = true; if (!m_bHoldingSpawn) { m_bSpawnSomeMore = false; m_bIsDoingController = true; } else { m_bSpawnSomeMore = true; m_bIsDoingController = false; m_bRedraw = true; } break; case EVENT_WEAPON_THROW2: if ( pOwner != NULL && pOwner->GetFlags() & FL_ONGROUND ) { if (CPropVehicleManhack::GetManhackVehicle() != NULL) { if (GlobalEntity_GetState("manhacks_not_controllable") == GLOBAL_OFF) { m_bShouldShowPanel = false; DriveControllableManhack(); } else { if (m_bToggleCallback) { TellManhacksToGoThere(); m_bToggleCallback = false; } else { CallManhacksBack(); m_bToggleCallback = true; } } } else { //TERO: Lets do an error sound } } break; case EVENT_WEAPON_THROW3: if (m_bToggleCallback) { TellManhacksToGoThere(); m_bToggleCallback = false; } else { CallManhacksBack(); m_bToggleCallback = true; } break; default: BaseClass::Operator_HandleAnimEvent( pEvent, pOperator ); break; } #define RETHROW_DELAY 0.5 /* if( fSpawnedManhack ) { m_flNextPrimaryAttack = gpGlobals->curtime + RETHROW_DELAY; m_flNextSecondaryAttack = gpGlobals->curtime + RETHROW_DELAY; m_flTimeWeaponIdle = FLT_MAX; //NOTE: This is set once the animation has finished up! } */ }