mirror of
https://github.com/ValveSoftware/source-sdk-2013.git
synced 2026-08-03 20:24:36 +02:00
Fix spy watch hiding prediction
This commit is contained in:
@@ -28,8 +28,11 @@ IMPLEMENT_NETWORKCLASS_ALIASED( TFWeaponInvis, DT_TFWeaponInvis )
|
|||||||
BEGIN_NETWORK_TABLE( CTFWeaponInvis, DT_TFWeaponInvis )
|
BEGIN_NETWORK_TABLE( CTFWeaponInvis, DT_TFWeaponInvis )
|
||||||
END_NETWORK_TABLE()
|
END_NETWORK_TABLE()
|
||||||
|
|
||||||
|
#if defined( CLIENT_DLL )
|
||||||
BEGIN_PREDICTION_DATA( CTFWeaponInvis )
|
BEGIN_PREDICTION_DATA( CTFWeaponInvis )
|
||||||
|
DEFINE_PRED_FIELD( m_flHideTime, FIELD_FLOAT, 0 )
|
||||||
END_PREDICTION_DATA()
|
END_PREDICTION_DATA()
|
||||||
|
#endif
|
||||||
|
|
||||||
LINK_ENTITY_TO_CLASS( tf_weapon_invis, CTFWeaponInvis );
|
LINK_ENTITY_TO_CLASS( tf_weapon_invis, CTFWeaponInvis );
|
||||||
PRECACHE_WEAPON_REGISTER( tf_weapon_invis );
|
PRECACHE_WEAPON_REGISTER( tf_weapon_invis );
|
||||||
@@ -69,7 +72,20 @@ void CTFWeaponInvis::OnActiveStateChanged( int iOldState )
|
|||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
void CTFWeaponInvis::HideThink( void )
|
void CTFWeaponInvis::HideThink( void )
|
||||||
{
|
{
|
||||||
SetWeaponVisible( false );
|
// This is now done in ItemPostFrame/ItemBusyFrame
|
||||||
|
// HideThink uses a context think, which is evaluated with predicted clock on client
|
||||||
|
// but relative to server (not the player's!) clock on the server
|
||||||
|
// SetWeaponVisible( false );
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
void CTFWeaponInvis::CheckHideTime( void )
|
||||||
|
{
|
||||||
|
if ( m_flHideTime && m_flHideTime < gpGlobals->curtime )
|
||||||
|
{
|
||||||
|
SetWeaponVisible( false );
|
||||||
|
m_flHideTime = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -131,11 +147,15 @@ void CTFWeaponInvis::SetWeaponVisible( bool visible )
|
|||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
bool CTFWeaponInvis::Deploy( void )
|
bool CTFWeaponInvis::Deploy( void )
|
||||||
{
|
{
|
||||||
bool b = BaseClass::Deploy();
|
bool bDeploy = BaseClass::Deploy();
|
||||||
|
|
||||||
SetWeaponIdleTime( gpGlobals->curtime + 1.5 );
|
if ( bDeploy )
|
||||||
|
{
|
||||||
|
SetWeaponIdleTime( gpGlobals->curtime + 1.5 );
|
||||||
|
m_flHideTime = 0;
|
||||||
|
}
|
||||||
|
|
||||||
return b;
|
return bDeploy;
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -143,8 +163,12 @@ bool CTFWeaponInvis::Holster( CBaseCombatWeapon *pSwitchingTo )
|
|||||||
{
|
{
|
||||||
bool bHolster = BaseClass::Holster( pSwitchingTo );
|
bool bHolster = BaseClass::Holster( pSwitchingTo );
|
||||||
|
|
||||||
// far in the future
|
if ( bHolster )
|
||||||
SetWeaponIdleTime( gpGlobals->curtime + 10 );
|
{
|
||||||
|
// far in the future
|
||||||
|
SetWeaponIdleTime( gpGlobals->curtime + 10 );
|
||||||
|
m_flHideTime = gpGlobals->curtime + SequenceDuration();
|
||||||
|
}
|
||||||
|
|
||||||
return bHolster;
|
return bHolster;
|
||||||
}
|
}
|
||||||
@@ -161,10 +185,18 @@ void CTFWeaponInvis::SecondaryAttack( void )
|
|||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
void CTFWeaponInvis::ItemPostFrame( void )
|
||||||
|
{
|
||||||
|
CheckHideTime();
|
||||||
|
BaseClass::ItemPostFrame();
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
void CTFWeaponInvis::ItemBusyFrame( void )
|
void CTFWeaponInvis::ItemBusyFrame( void )
|
||||||
{
|
{
|
||||||
// do nothing
|
CheckHideTime();
|
||||||
|
// intentionally don't call base
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ public:
|
|||||||
virtual bool Deploy( void );
|
virtual bool Deploy( void );
|
||||||
|
|
||||||
virtual void HideThink( void );
|
virtual void HideThink( void );
|
||||||
|
void CheckHideTime();
|
||||||
virtual bool Holster( CBaseCombatWeapon *pSwitchingTo );
|
virtual bool Holster( CBaseCombatWeapon *pSwitchingTo );
|
||||||
|
|
||||||
virtual int GetWeaponID( void ) const { return TF_WEAPON_INVIS; }
|
virtual int GetWeaponID( void ) const { return TF_WEAPON_INVIS; }
|
||||||
@@ -59,6 +60,7 @@ public:
|
|||||||
|
|
||||||
virtual void SetWeaponVisible( bool visible );
|
virtual void SetWeaponVisible( bool visible );
|
||||||
|
|
||||||
|
virtual void ItemPostFrame( void );
|
||||||
virtual void ItemBusyFrame( void );
|
virtual void ItemBusyFrame( void );
|
||||||
|
|
||||||
int GetInvisType( void ) { int iMode = 0; CALL_ATTRIB_HOOK_INT( iMode, set_weapon_mode ); return iMode; };
|
int GetInvisType( void ) { int iMode = 0; CALL_ATTRIB_HOOK_INT( iMode, set_weapon_mode ); return iMode; };
|
||||||
@@ -81,6 +83,7 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
float m_flHideTime;
|
||||||
|
|
||||||
CTFWeaponInvis( const CTFWeaponInvis & ) {}
|
CTFWeaponInvis( const CTFWeaponInvis & ) {}
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user