diff options
Diffstat (limited to 'game/server/dod/dod_bombtarget.h')
| -rw-r--r-- | game/server/dod/dod_bombtarget.h | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/game/server/dod/dod_bombtarget.h b/game/server/dod/dod_bombtarget.h new file mode 100644 index 0000000..316ca80 --- /dev/null +++ b/game/server/dod/dod_bombtarget.h @@ -0,0 +1,154 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef DOD_BOMBTARGET_H +#define DOD_BOMBTARGET_H + +#ifdef _WIN32 +#pragma once +#endif + +#include "baseanimating.h" +#include "dod_control_point.h" + +#define DOD_BOMB_TARGET_MODEL_ARMED "models/weapons/w_tnt.mdl" +#define DOD_BOMB_TARGET_MODEL_TARGET "models/weapons/w_tnt_red.mdl" +#define DOD_BOMB_TARGET_MODEL_UNAVAILABLE "models/weapons/w_tnt_grey.mdl" + +class CDODBombTarget; + +class CDODBombTargetStateInfo +{ +public: + BombTargetState m_iState; + const char *m_pStateName; + + void (CDODBombTarget::*pfnEnterState)(); // Init and deinit the state. + void (CDODBombTarget::*pfnLeaveState)(); + void (CDODBombTarget::*pfnThink)(); // Do a PreThink() in this state. + void (CDODBombTarget::*pfnUse)( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ); +}; + + +struct DefusingPlayer +{ + CHandle<CDODPlayer> m_pPlayer; + + float m_flDefuseTimeoutTime; + float m_flDefuseCompleteTime; +}; + +class CDODBombTarget : public CBaseAnimating +{ +public: + DECLARE_CLASS( CDODBombTarget, CBaseAnimating ); + DECLARE_DATADESC(); + + DECLARE_NETWORKCLASS(); + + CDODBombTarget() {} + + virtual void Spawn( void ); + virtual void Precache( void ); + + // Set these flags so players can use the bomb target ( for planting or defusing ) + virtual int ObjectCaps( void ); + + // Inputs + void InputEnable( inputdata_t &inputdata ); + void InputDisable( inputdata_t &inputdata ); + + // State Functions + void State_Transition( BombTargetState newState ); + void State_Enter( BombTargetState newState ); + void State_Leave(); + void State_Think(); + void State_Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ); + + int State_Get( void ) { return m_iState; } + + CDODBombTargetStateInfo* State_LookupInfo( BombTargetState state ); + + // Enter + void State_Enter_INACTIVE( void ); + void State_Enter_ACTIVE( void ); + void State_Enter_ARMED( void ); + + // Leave + void State_Leave_Armed( void ); + + // Think + void State_Think_ARMED( void ); + + // Use + void State_Use_ACTIVE( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ); + void State_Use_ARMED( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ); + + float GetBombTimerLength( void ); + + // Get the dod_control_point that we're linked to + CControlPoint *GetControlPoint( void ); + + bool CanPlantHere( CDODPlayer *pPlayer ); + void CompletePlanting( CDODPlayer *pPlantingPlayer ); + + void DefuseBlocked( CDODPlayer *pAttacker ); + void PlantBlocked( CDODPlayer *pAttacker ); + + int GetTimerAddSeconds( void ) { return m_iTimerAddSeconds; } + + int GetBombingTeam( void ) { return m_iBombingTeam; } + + DefusingPlayer *FindDefusingPlayer( CDODPlayer *pPlayer ); + void Explode( void ); + void BombDefused( CDODPlayer *pDefuser ); + void ResetDefuse( int index ); + + bool CanPlayerStartDefuse( CDODPlayer *pPlayer ); + bool CanPlayerContinueDefusing( CDODPlayer *pPlayer, DefusingPlayer *pDefuseRecord ); +private: + + // Control Point we're linked to + string_t m_iszCapPointName; + CControlPoint *m_pControlPoint; + + // Outputs + COutputEvent m_OnBecomeActive; + COutputEvent m_OnBecomeInactive; + COutputEvent m_OnBombPlanted; + COutputEvent m_OnBombExploded; + COutputEvent m_OnBombDisarmed; + + // state + CNetworkVar( int, m_iState ); + CDODBombTargetStateInfo *m_pCurStateInfo; + bool m_bStartDisabled; + + // timers for armed state + float m_flExplodeTime; + float m_flNextAnnounce; + + // player that planted this bomb + CHandle<CDODPlayer> m_pPlantingPlayer; + + // The team that is allowed to plant bombs here + CNetworkVar( int, m_iBombingTeam ); + + // network the model indices of active bomb so we can change per-team + CNetworkVar( int, m_iTargetModel ); + CNetworkVar( int, m_iUnavailableModel ); + + int m_iTimerAddSeconds; + + // List of defusing players and time until completion + CUtlVector< DefusingPlayer > m_DefusingPlayers; + +private: + CDODBombTarget( const CDODBombTarget & ); +}; + +#endif //DOD_BOMBTARGET_H
\ No newline at end of file |