From 39ed87570bdb2f86969d4be821c94b722dc71179 Mon Sep 17 00:00:00 2001 From: Joe Ludwig Date: Wed, 26 Jun 2013 15:22:04 -0700 Subject: First version of the SOurce SDK 2013 --- mp/src/game/server/env_zoom.cpp | 116 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 mp/src/game/server/env_zoom.cpp (limited to 'mp/src/game/server/env_zoom.cpp') diff --git a/mp/src/game/server/env_zoom.cpp b/mp/src/game/server/env_zoom.cpp new file mode 100644 index 00000000..6133ec69 --- /dev/null +++ b/mp/src/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(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( 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( 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 ); + } +} + -- cgit v1.2.3