//========= 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 );