//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CWeaponBuilder::ItemPostFrame( void ) { CBaseTFPlayer *pOwner = ToBaseTFPlayer( GetOwner() ); if ( !pOwner ) return; // Ignore input while the player's building anything if ( pOwner->IsBuilding() ) return; // Switch away if I'm not in placement mode if ( m_iBuildState != BS_PLACING && m_iBuildState != BS_PLACING_INVALID ) { pOwner->SwitchToNextBestWeapon( NULL ); return; } if (( pOwner->m_nButtons & IN_ATTACK ) && (m_flNextPrimaryAttack <= gpGlobals->curtime) ) { PrimaryAttack(); } // Allow shield post frame AllowShieldPostFrame( true ); WeaponIdle(); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CWeaponCombatBaseGrenade::ItemPostFrame( void ) { CBasePlayer *pOwner = ToBasePlayer( GetOwner() ); if (!pOwner) return; AllowShieldPostFrame( !m_flStartedThrowAt ); // Look for button downs if ( (pOwner->m_nButtons & IN_ATTACK) && GetShieldState() == SS_DOWN && !m_flStartedThrowAt && (m_flNextPrimaryAttack <= gpGlobals->curtime) ) { m_flStartedThrowAt = gpGlobals->curtime; SendWeaponAnim( ACT_VM_DRAW ); } // Look for button ups if ( (pOwner->m_afButtonReleased & IN_ATTACK) && (m_flNextPrimaryAttack <= gpGlobals->curtime) && m_flStartedThrowAt ) { m_flNextPrimaryAttack = gpGlobals->curtime; PrimaryAttack(); m_flStartedThrowAt = 0; } // No buttons down? if ( !((pOwner->m_nButtons & IN_ATTACK) || (pOwner->m_nButtons & IN_ATTACK2) || (pOwner->m_nButtons & IN_RELOAD)) ) { WeaponIdle( ); } }
//----------------------------------------------------------------------------- // Purpose: Handle deploying, undeploying, firing, etc. // TODO: Add a deploy to the firing! Currently no reloading! //----------------------------------------------------------------------------- void CWeaponRocketLauncher::ItemPostFrame( void ) { // Get the player. CBaseTFPlayer *pPlayer = ToBaseTFPlayer( GetOwner() ); if ( !pPlayer ) return; if ( UsesClipsForAmmo1() ) { CheckReload(); } #if !defined( CLIENT_DLL ) if ( !HasPrimaryAmmo() && ( m_flNextPrimaryAttack <= gpGlobals->curtime ) ) { pPlayer->SwitchToNextBestWeapon( NULL ); } #endif // Handle Firing if ( GetShieldState() == SS_DOWN && !m_bInReload ) { // Attempting to fire. if ( ( pPlayer->m_nButtons & IN_ATTACK ) && ( m_flNextPrimaryAttack <= gpGlobals->curtime ) ) { if ( m_iClip1 > 0 ) { PrimaryAttack(); } else { Reload(); } } // Reload button (or fire button when we're out of ammo) if ( m_flNextPrimaryAttack <= gpGlobals->curtime ) { if ( pPlayer->m_nButtons & IN_RELOAD ) { Reload(); } else if ( !((pPlayer->m_nButtons & IN_ATTACK) || (pPlayer->m_nButtons & IN_ATTACK2) || (pPlayer->m_nButtons & IN_RELOAD)) ) { if ( !m_iClip1 && HasPrimaryAmmo() ) { Reload(); } } } } // Prevent shield post frame if we're not ready to attack, or we're charging AllowShieldPostFrame( m_flNextPrimaryAttack <= gpGlobals->curtime || m_bInReload ); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CWeaponCombatLaserRifle::ItemPostFrame( void ) { CBaseTFPlayer *pOwner = ToBaseTFPlayer( GetOwner() ); if (!pOwner) return; if ( UsesClipsForAmmo1() ) { CheckReload(); } RecalculateAccuracy(); // Handle firing if ( GetShieldState() == SS_DOWN && !m_bInReload ) { if ( (pOwner->m_nButtons & IN_ATTACK ) && (m_flNextPrimaryAttack <= gpGlobals->curtime) ) { if ( m_iClip1 > 0 ) { // Fire the plasma shot PrimaryAttack(); } else { Reload(); } } // Reload button (or fire button when we're out of ammo) if ( m_flNextPrimaryAttack <= gpGlobals->curtime ) { if ( pOwner->m_nButtons & IN_RELOAD ) { Reload(); } else if ( !((pOwner->m_nButtons & IN_ATTACK) || (pOwner->m_nButtons & IN_ATTACK2) || (pOwner->m_nButtons & IN_RELOAD)) ) { if ( !m_iClip1 && HasPrimaryAmmo() ) { Reload(); } } } } // Prevent shield post frame if we're not ready to attack, or we're charging AllowShieldPostFrame( m_flNextPrimaryAttack <= gpGlobals->curtime || m_bInReload ); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CWeaponCombat_ChargeablePlasma::ItemPostFrame( void ) { CBaseTFPlayer *pOwner = ToBaseTFPlayer( GetOwner() ); if (!pOwner) return; if ( UsesClipsForAmmo1() ) { CheckReload(); } // If burst shots are firing, ignore input if ( m_iBurstShotsRemaining > 0 ) { if ( gpGlobals->curtime < m_flNextBurstShotTime ) return; if ( m_iClip1 > 0 ) { PrimaryAttack(); } m_iBurstShotsRemaining--; m_flNextBurstShotTime = gpGlobals->curtime + BURST_FIRE_RATE; m_flNextPrimaryAttack = gpGlobals->curtime + GetFireRate(); return; } // Handle charge firing if ( m_iClip1 > 0 && GetShieldState() == SS_DOWN && !m_bInReload ) { if ( (pOwner->m_nButtons & IN_ATTACK ) ) { if (m_bHasCharge) { if ( !m_bCharging && (m_flNextPrimaryAttack <= gpGlobals->curtime) ) { m_bCharging = true; m_flChargeStartTime = gpGlobals->curtime; // Get a lock target right now m_hLockTarget = GetLockTarget(); } } else { // Fire the plasma shot if (m_flNextPrimaryAttack <= gpGlobals->curtime) PrimaryAttack(); } } else if ( m_bCharging ) { m_bCharging = false; // Fire the plasma shot PrimaryAttack(); // We might be firing a burst shot if (m_bHasBurstShot) { if ( m_flPower >= (MAX_CHARGED_TIME * 0.5) ) { if ( m_flPower >= MAX_CHARGED_TIME ) { m_iBurstShotsRemaining = 2; } else { m_iBurstShotsRemaining = 1; } m_flNextBurstShotTime = gpGlobals->curtime + BURST_FIRE_RATE; } } } } // Reload button if ( m_iBurstShotsRemaining == 0 && !m_bCharging ) { if ( pOwner->m_nButtons & IN_RELOAD && UsesClipsForAmmo1() && !m_bInReload ) { Reload(); } } // Prevent shield post frame if we're not ready to attack, or we're charging AllowShieldPostFrame( !m_bCharging && ((m_flNextPrimaryAttack <= gpGlobals->curtime) || m_bInReload) ); }