|
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=============================================================================//
#include "cbase.h"
#include "dod_player.h"
#include "dod_bombtarget.h"
#include "triggers.h"
class CDODBombDispenserMapIcon;
class CDODBombDispenser : public CBaseTrigger { public: DECLARE_CLASS( CDODBombDispenser, CBaseTrigger ); DECLARE_DATADESC();
virtual void Spawn( void ); void EXPORT Touch( CBaseEntity *pOther );
bool IsActive( void ) { return !m_bDisabled; }
private:
void InputEnable( inputdata_t &inputdata ); void InputDisable( inputdata_t &inputdata );
// Which team to give bombs to. TEAM_UNASSIGNED gives to both
int m_iDispenseToTeam;
// Is this area giving out bombs?
bool m_bActive; };
BEGIN_DATADESC(CDODBombDispenser)
// Touch functions
DEFINE_FUNCTION( Touch ),
// Inputs
DEFINE_INPUTFUNC( FIELD_VOID, "Disable", InputDisable ), DEFINE_INPUTFUNC( FIELD_VOID, "Enable", InputEnable ),
DEFINE_KEYFIELD( m_iDispenseToTeam, FIELD_INTEGER, "dispense_team" ), DEFINE_KEYFIELD( m_bDisabled, FIELD_BOOLEAN, "StartDisabled" ),
END_DATADESC();
LINK_ENTITY_TO_CLASS( dod_bomb_dispenser, CDODBombDispenser );
void CDODBombDispenser::Spawn( void ) { BaseClass::Spawn();
InitTrigger();
SetTouch( &CDODBombDispenser::Touch );
m_bDisabled = false;
// make our map icon entity
#ifdef DBGFLAG_ASSERT
CBaseEntity *pIcon = #endif
CBaseEntity::Create( "dod_bomb_dispenser_icon", WorldSpaceCenter(), GetAbsAngles(), this );
Assert( pIcon ); }
void CDODBombDispenser::Touch( CBaseEntity *pOther ) { if ( m_bDisabled ) return;
if( !pOther->IsPlayer() ) return;
if( !pOther->IsAlive() ) return;
if ( m_iDispenseToTeam != TEAM_UNASSIGNED && pOther->GetTeamNumber() != m_iDispenseToTeam ) return;
CDODPlayer *pPlayer = ToDODPlayer( pOther );
pPlayer->HintMessage( HINT_BOMB_PICKUP );
switch( pPlayer->GetTeamNumber() ) { case TEAM_ALLIES: case TEAM_AXIS: { if ( pPlayer->Weapon_OwnsThisType( "weapon_basebomb" ) == NULL ) { pPlayer->GiveNamedItem( "weapon_basebomb" );
CPASFilter filter( pPlayer->WorldSpaceCenter() ); pPlayer->EmitSound( filter, pPlayer->entindex(), "Weapon_C4.PickUp" ); } } break; default: break; } }
void CDODBombDispenser::InputEnable( inputdata_t &inputdata ) { m_bDisabled = false; }
void CDODBombDispenser::InputDisable( inputdata_t &inputdata ) { m_bDisabled = true; }
class CDODBombDispenserMapIcon : public CBaseEntity { public: DECLARE_CLASS( CDODBombDispenserMapIcon, CBaseEntity );
DECLARE_NETWORKCLASS();
virtual int UpdateTransmitState( void ) { if ( (( CDODBombDispenser * )GetOwnerEntity())->IsActive() ) { return SetTransmitState( FL_EDICT_ALWAYS ); } else { return SetTransmitState( FL_EDICT_DONTSEND ); } } };
IMPLEMENT_SERVERCLASS_ST(CDODBombDispenserMapIcon, DT_DODBombDispenserMapIcon) END_SEND_TABLE()
LINK_ENTITY_TO_CLASS( dod_bomb_dispenser_icon, CDODBombDispenserMapIcon );
|