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/controlentities.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/server/controlentities.cpp')
| -rw-r--r-- | game/server/controlentities.cpp | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/game/server/controlentities.cpp b/game/server/controlentities.cpp new file mode 100644 index 0000000..e67b8f8 --- /dev/null +++ b/game/server/controlentities.cpp @@ -0,0 +1,146 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: contains entities who have no physical representation in the game, and who +// must be triggered by other entities to cause their effects. +// +// $NoKeywords: $ +//=============================================================================// + +#include "cbase.h" +#include "player.h" +#include "tier1/strtools.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +//----------------------------------------------------------------------------- +// Purpose: when fired, it changes which track the CD is playing +//----------------------------------------------------------------------------- +class CTargetCDAudioRep : public CPointEntity +{ +public: + DECLARE_CLASS( CTargetCDAudioRep, CPointEntity ); + + void InputChangeCDTrack( inputdata_t &inputdata ); + + DECLARE_DATADESC(); + +private: + int m_iTrack; // CD track to change to when fired +}; + +LINK_ENTITY_TO_CLASS( target_cdaudio, CTargetCDAudioRep ); + +BEGIN_DATADESC( CTargetCDAudioRep ) + + DEFINE_KEYFIELD( m_iTrack, FIELD_INTEGER, "track" ), + DEFINE_INPUTFUNC( FIELD_VOID, "ChangeCDTrack", InputChangeCDTrack ), + +END_DATADESC() + + + +//----------------------------------------------------------------------------- +// Purpose: Changes the current playing CD track +//----------------------------------------------------------------------------- +void CTargetCDAudioRep::InputChangeCDTrack( inputdata_t &inputdata ) +{ + int iTrack = m_iTrack; + + + edict_t *pClient = NULL; + if ( gpGlobals->maxClients == 1 ) + { + pClient = engine->PEntityOfEntIndex( 1 ); + } + else + { + // In multiplayer, send it back to the activator + CBasePlayer *player = dynamic_cast< CBasePlayer * >( inputdata.pActivator ); + if ( player ) + { + pClient = player->edict(); + } + } + + // Can't play if the client is not connected! + if ( !pClient ) + return; + + if ( iTrack < -1 || iTrack > 30 ) + { + Warning( "TargetCDAudio - Track %d out of range\n", iTrack ); + return; + } + + if ( iTrack == -1 ) + { + engine->ClientCommand( pClient, "cd pause\n" ); + } + else + { + engine->ClientCommand ( pClient, "cd play %3d\n", iTrack ); + } +} + +//----------------------------------------------------------------------------- +// Purpose: changes the gravity of the player who activates this entity +//----------------------------------------------------------------------------- +class CTargetChangeGravity : public CPointEntity +{ +public: + DECLARE_CLASS( CTargetChangeGravity, CPointEntity ); + + DECLARE_DATADESC(); + + void InputChangeGrav( inputdata_t &inputdata ); + void InputResetGrav( inputdata_t &inputdata ); + + int m_iGravity; + + int m_iOldGrav; +}; + +LINK_ENTITY_TO_CLASS( target_changegravity, CTargetChangeGravity ); + +BEGIN_DATADESC( CTargetChangeGravity ) + + DEFINE_KEYFIELD( m_iGravity, FIELD_INTEGER, "gravity" ), + DEFINE_FIELD( m_iOldGrav, FIELD_INTEGER ), + DEFINE_INPUTFUNC( FIELD_VOID, "ChangeGrav", InputChangeGrav ), + DEFINE_INPUTFUNC( FIELD_VOID, "ResetGrav", InputResetGrav ), + +END_DATADESC() + + + +//----------------------------------------------------------------------------- +// Purpose: Input handler for changing the activator's gravity. +//----------------------------------------------------------------------------- +void CTargetChangeGravity::InputChangeGrav( inputdata_t &inputdata ) +{ + CBasePlayer *pl = ToBasePlayer( inputdata.pActivator ); + if ( !pl ) + return; + + // Save the gravity to restore it in InputResetGrav + if ( m_iOldGrav ) + m_iOldGrav = pl->GetGravity(); + + pl->SetGravity(m_iGravity); +} + + +//----------------------------------------------------------------------------- +// Purpose: Input handler for resetting the activator's gravity. +//----------------------------------------------------------------------------- +void CTargetChangeGravity::InputResetGrav( inputdata_t &inputdata ) +{ + CBasePlayer *pl = ToBasePlayer( inputdata.pActivator ); + if ( !pl ) + return; + + pl->SetGravity(m_iOldGrav); +} + + |