diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/server/env_zoom.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/server/env_zoom.cpp')
| -rw-r--r-- | game/server/env_zoom.cpp | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/game/server/env_zoom.cpp b/game/server/env_zoom.cpp new file mode 100644 index 0000000..2a9f847 --- /dev/null +++ b/game/server/env_zoom.cpp @@ -0,0 +1,116 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//=============================================================================// + +#include "cbase.h" +#include "env_zoom.h" + +#ifdef HL2_DLL +#include "hl2_player.h" +#endif + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +#define ENV_ZOOM_OVERRIDE (1<<0) + +class CEnvZoom : public CPointEntity +{ +public: + DECLARE_CLASS( CEnvZoom, CPointEntity ); + + void InputZoom( inputdata_t &inputdata ); + void InputUnZoom( inputdata_t &inputdata ); + + int GetFOV( void ) { return m_nFOV; } + float GetSpeed( void ) { return m_flSpeed; } +private: + + float m_flSpeed; + int m_nFOV; + + DECLARE_DATADESC(); +}; + +LINK_ENTITY_TO_CLASS( env_zoom, CEnvZoom ); + +BEGIN_DATADESC( CEnvZoom ) + + DEFINE_KEYFIELD( m_flSpeed, FIELD_FLOAT, "Rate" ), + DEFINE_KEYFIELD( m_nFOV, FIELD_INTEGER, "FOV" ), + + DEFINE_INPUTFUNC( FIELD_VOID, "Zoom", InputZoom ), + DEFINE_INPUTFUNC( FIELD_VOID, "UnZoom", InputUnZoom ), + +END_DATADESC() + +bool CanOverrideEnvZoomOwner( CBaseEntity *pZoomOwner ) +{ + CEnvZoom *pZoom = dynamic_cast<CEnvZoom*>(pZoomOwner ); + + if ( pZoom == NULL || ( pZoom && pZoom->HasSpawnFlags( ENV_ZOOM_OVERRIDE ) == false ) ) + return false; + + return true; +} + +float GetZoomOwnerDesiredFOV( CBaseEntity *pZoomOwner ) +{ + if ( CanOverrideEnvZoomOwner( pZoomOwner ) ) + { + CEnvZoom *pZoom = dynamic_cast<CEnvZoom*>( pZoomOwner ); + + return pZoom->GetFOV(); + } + + return 0; +} + +//----------------------------------------------------------------------------- +// Purpose: +// Input : &inputdata - +//----------------------------------------------------------------------------- +void CEnvZoom::InputZoom( inputdata_t &inputdata ) +{ + CBasePlayer *pPlayer = UTIL_GetLocalPlayer(); + + if ( pPlayer ) + { + +#ifdef HL2_DLL + if ( pPlayer == pPlayer->GetFOVOwner() ) + { + CHL2_Player *pHLPlayer = static_cast<CHL2_Player*>( pPlayer ); + + pHLPlayer->StopZooming(); + } +#endif + + // If the player's already holding a fov from another env_zoom, we're allowed to overwrite it + if ( pPlayer->GetFOVOwner() && FClassnameIs( pPlayer->GetFOVOwner(), "env_zoom" ) ) + { + pPlayer->ClearZoomOwner(); + } + + //Stuff the values + pPlayer->SetFOV( this, m_nFOV, m_flSpeed ); + } +} + +//----------------------------------------------------------------------------- +// Purpose: +// Input : &inputdata - +//----------------------------------------------------------------------------- +void CEnvZoom::InputUnZoom( inputdata_t &inputdata ) +{ + CBasePlayer *pPlayer = UTIL_GetLocalPlayer(); + + if ( pPlayer ) + { + // Stuff the values + pPlayer->SetFOV( this, 0 ); + } +} + |