You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
2.6 KiB
116 lines
2.6 KiB
//========= 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 ); |
|
} |
|
} |
|
|
|
|