//------------------------------------------------------------------------------ // Purpose : //------------------------------------------------------------------------------ void CNPC_Launcher::LauncherThink( void ) { if (gpGlobals->curtime > m_flNextAttack) { // If enemy was set, fire at enemy if (GetEnemy()) { LaunchGrenade(GetEnemy()); m_OnLaunch.FireOutput(GetEnemy(), this); m_flNextAttack = gpGlobals->curtime + m_nLaunchDelay; } // Otherwise look for enemy to fire at else { GetSenses()->Look((int)m_flMaxAttackDist); CBaseEntity* pBestEnemy = BestEnemy(); if (pBestEnemy) { LaunchGrenade(pBestEnemy); m_OnLaunch.FireOutput(pBestEnemy, this); m_flNextAttack = gpGlobals->curtime + m_nLaunchDelay; } } } SetNextThink( gpGlobals->curtime + 0.1f ); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CTFPipebombLauncher::PrimaryAttack( void ) { if ( !CanAttack() ) { m_flChargeBeginTime = 0; return; } if ( m_flChargeBeginTime <= 0 ) { // Set the weapon mode. m_iWeaponMode = TF_WEAPON_PRIMARY_MODE; // save that we had the attack button down m_flChargeBeginTime = gpGlobals->curtime; SendWeaponAnim( ACT_VM_PULLBACK ); } else { float flTotalChargeTime = gpGlobals->curtime - m_flChargeBeginTime; if ( flTotalChargeTime >= TF_PIPEBOMB_MAX_CHARGE_TIME ) { LaunchGrenade(); } } }
bool CWeaponMagazinedWGrenade::Action(s32 cmd, u32 flags) { if(m_bGrenadeMode && cmd==kWPN_FIRE) { if(IsPending()) return false; if(flags&CMD_START) { if(iAmmoElapsed) LaunchGrenade (); else Reload (); if(GetState() == eIdle) OnEmptyClick (); } return true; } if(inherited::Action(cmd, flags)) return true; switch(cmd) { case kWPN_FUNC: { if(flags&CMD_START && !IsPending()) SwitchState(eSwitch); return true; } } return false; }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CTFPipebombLauncher::WeaponIdle( void ) { if ( m_flChargeBeginTime > 0 && m_iClip1 > 0 ) { LaunchGrenade(); } else { BaseClass::WeaponIdle(); } }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CTFPipebombLauncher::ItemPostFrame( void ) { BaseClass::ItemPostFrame(); // Allow player to fire and detonate at the same time. CBasePlayer *pOwner = ToBasePlayer( GetOwner() ); if ( pOwner && !( pOwner->m_nButtons & IN_ATTACK ) ) { if ( m_flChargeBeginTime > 0 && m_iClip1 > 0 ) { LaunchGrenade(); } } }
void CNPC_Launcher::InputFireOnce( inputdata_t &inputdata ) { m_flNextAttack = 0; // If I using path following missiles just launch if (m_sPathCornerName != NULL_STRING) { LaunchGrenade(NULL); } // Otherwise only launch if I have an enemy else { LauncherThink(); } }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CTFPipebombLauncher::PrimaryAttack( void ) { // Check for ammunition. if ( m_iClip1 <= 0 && m_iClip1 != -1 ) return; // Are we capable of firing again? if ( m_flNextPrimaryAttack > gpGlobals->curtime ) return; if ( !CanAttack() ) { m_flChargeBeginTime = 0; return; } if ( m_flChargeBeginTime <= 0 ) { // Set the weapon mode. m_iWeaponMode = TF_WEAPON_PRIMARY_MODE; // save that we had the attack button down m_flChargeBeginTime = gpGlobals->curtime; SendWeaponAnim( ACT_VM_PULLBACK ); } else { float flTotalChargeTime = gpGlobals->curtime - m_flChargeBeginTime; if ( flTotalChargeTime >= TF_PIPEBOMB_MAX_CHARGE_TIME ) { LaunchGrenade(); } } }