summaryrefslogtreecommitdiff
path: root/game/server/dod/dod_bombdispenser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'game/server/dod/dod_bombdispenser.cpp')
-rw-r--r--game/server/dod/dod_bombdispenser.cpp144
1 files changed, 144 insertions, 0 deletions
diff --git a/game/server/dod/dod_bombdispenser.cpp b/game/server/dod/dod_bombdispenser.cpp
new file mode 100644
index 0000000..828230d
--- /dev/null
+++ b/game/server/dod/dod_bombdispenser.cpp
@@ -0,0 +1,144 @@
+//========= 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 );