147 lines
3.9 KiB
C++
147 lines
3.9 KiB
C++
|
//========= 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);
|
||
|
}
|
||
|
|
||
|
|