diff --git a/src/game/shared/tf/tf_weapon_dragons_fury.cpp b/src/game/shared/tf/tf_weapon_dragons_fury.cpp index c5d50367197..ae6b929a479 100644 --- a/src/game/shared/tf/tf_weapon_dragons_fury.cpp +++ b/src/game/shared/tf/tf_weapon_dragons_fury.cpp @@ -245,6 +245,11 @@ bool CTFWeaponFlameBall::HasFullCharge() const return pOwner->m_Shared.GetItemChargeMeter( LOADOUT_POSITION_PRIMARY) >= 100.f; } +bool CTFWeaponFlameBall::CanInspect() const +{ + return BaseClass::CanInspect() && HasFullCharge(); +} + void CTFWeaponFlameBall::ItemPostFrame( void ) { CTFPlayer *pOwner = ToTFPlayer( GetPlayerOwner() ); diff --git a/src/game/shared/tf/tf_weapon_dragons_fury.h b/src/game/shared/tf/tf_weapon_dragons_fury.h index 539f8cbe523..0505d6b2873 100644 --- a/src/game/shared/tf/tf_weapon_dragons_fury.h +++ b/src/game/shared/tf/tf_weapon_dragons_fury.h @@ -55,6 +55,8 @@ class CTFWeaponFlameBall : public CTFFlameThrower virtual void OnResourceMeterFilled() OVERRIDE; virtual float GetMeterMultiplier() const OVERRIDE; + virtual bool CanInspect() const OVERRIDE; + #ifdef GAME_DLL virtual float GetInitialAfterburnDuration() const OVERRIDE { return 0.f; } void RefundAmmo( int nAmmo ); diff --git a/src/game/shared/tf/tf_weapon_flamethrower.cpp b/src/game/shared/tf/tf_weapon_flamethrower.cpp index 28e51555383..57214287427 100644 --- a/src/game/shared/tf/tf_weapon_flamethrower.cpp +++ b/src/game/shared/tf/tf_weapon_flamethrower.cpp @@ -509,6 +509,14 @@ void CTFFlameThrower::UpdateOnRemove( void ) BaseClass::UpdateOnRemove(); } +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +bool CTFFlameThrower::CanInspect() const +{ + return BaseClass::CanInspect() && !IsFiring(); +} + //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- diff --git a/src/game/shared/tf/tf_weapon_flamethrower.h b/src/game/shared/tf/tf_weapon_flamethrower.h index 96f7344e599..62efc00a8cb 100644 --- a/src/game/shared/tf/tf_weapon_flamethrower.h +++ b/src/game/shared/tf/tf_weapon_flamethrower.h @@ -111,6 +111,7 @@ class CTFFlameThrower : public CTFWeaponBaseGun bool EffectMeterShouldFlash( void ); virtual bool Deploy( void ) OVERRIDE; + virtual bool CanInspect() const OVERRIDE; #if defined( CLIENT_DLL ) diff --git a/src/game/shared/tf/tf_weapon_grenadelauncher.cpp b/src/game/shared/tf/tf_weapon_grenadelauncher.cpp index b81b9b29372..c79e1b29280 100644 --- a/src/game/shared/tf/tf_weapon_grenadelauncher.cpp +++ b/src/game/shared/tf/tf_weapon_grenadelauncher.cpp @@ -545,6 +545,16 @@ float CTFGrenadeLauncher::GetChargeMaxTime( void ) return GetMortarDetonateTimeLength(); } +bool CTFGrenadeLauncher::CanInspect() const +{ + // we are charging a ball, so don't inspect + if ( m_flDetonateTime > gpGlobals->curtime ) + { + return false; + } + + return BaseClass::CanInspect(); +} void CTFGrenadeLauncher::ResetDetonateTime() { diff --git a/src/game/shared/tf/tf_weapon_grenadelauncher.h b/src/game/shared/tf/tf_weapon_grenadelauncher.h index 6bf5b606e0a..ae311730fad 100644 --- a/src/game/shared/tf/tf_weapon_grenadelauncher.h +++ b/src/game/shared/tf/tf_weapon_grenadelauncher.h @@ -70,6 +70,8 @@ class CTFGrenadeLauncher : public CTFWeaponBaseGun, public ITFChargeUpWeapon virtual float GetChargeBeginTime( void ); virtual float GetChargeMaxTime( void ); + virtual bool CanInspect() const OVERRIDE; + void LaunchGrenade( void ); void AddDonkVictim( const CBaseEntity* pVictim ); diff --git a/src/game/shared/tf/tf_weaponbase.cpp b/src/game/shared/tf/tf_weaponbase.cpp index 091e9da7cc0..512325d6138 100644 --- a/src/game/shared/tf/tf_weaponbase.cpp +++ b/src/game/shared/tf/tf_weaponbase.cpp @@ -2068,8 +2068,10 @@ bool CTFWeaponBase::ReloadSingly( void ) case TF_RELOAD_FINISH: default: { + // we create a variable that tracks from curtime to the time + the duration of the finish reload activity if ( SendWeaponAnim( ACT_RELOAD_FINISH ) ) { + m_flTimeFinishReloadSingly = gpGlobals->curtime + SequenceDuration(); // We're done, allow primary attack as soon as we like unless we're an energy weapon. // if ( IsEnergyWeapon() ) // { @@ -2572,6 +2574,24 @@ void CTFWeaponBase::HandleInspect() // first time pressing inspecting key if ( !m_bInspecting && pPlayer->IsInspecting() ) { + // Don't inspect while reloading or zooming. TF_COND_ZOOMED for the Classic + if ( IsReloading() || pPlayer->m_Shared.InCond( TF_COND_AIMING ) || pPlayer->m_Shared.InCond( TF_COND_ZOOMED ) ) + { + return; + } + + // Don't inspect if the player has just fired + if ( gpGlobals->curtime < m_flNextPrimaryAttack ) + { + return; + } + + // Don't inspect if the weapon isn't idle after reloading the last bullet + if ( gpGlobals->curtime < m_flTimeFinishReloadSingly ) + { + return; + } + m_nInspectStage = INSPECT_INVALID; m_flInspectAnimEndTime = -1.f; if ( SendWeaponAnim( GetInspectActivity( INSPECT_START ) ) ) diff --git a/src/game/shared/tf/tf_weaponbase.h b/src/game/shared/tf/tf_weaponbase.h index aba20f62157..e3280be2edf 100644 --- a/src/game/shared/tf/tf_weaponbase.h +++ b/src/game/shared/tf/tf_weaponbase.h @@ -710,6 +710,8 @@ class CTFWeaponBase : public CBaseCombatWeapon, public IHasOwner, public IHasGen int m_iLastCritCheckFrame; int m_iCurrentSeed; float m_flLastRapidFireCritCheckTime; + + float m_flTimeFinishReloadSingly; // tc2 float m_flLastDeployTime; float m_flLastReadyTime;