diff options
Diffstat (limited to 'game/server/tf/player_vs_environment/tf_tank_boss.h')
| -rw-r--r-- | game/server/tf/player_vs_environment/tf_tank_boss.h | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/game/server/tf/player_vs_environment/tf_tank_boss.h b/game/server/tf/player_vs_environment/tf_tank_boss.h new file mode 100644 index 0000000..005a490 --- /dev/null +++ b/game/server/tf/player_vs_environment/tf_tank_boss.h @@ -0,0 +1,131 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +#ifndef TF_TANK_BOSS_H +#define TF_TANK_BOSS_H + +#include "tf_population_manager.h" +#include "tf_base_boss.h" +#include "tf_tank_boss_body.h" +#include "tf_achievementdata.h" + +//---------------------------------------------------------------------------- +class CTFTankBoss : public CTFBaseBoss +{ +public: + DECLARE_CLASS( CTFTankBoss, CTFBaseBoss ); + DECLARE_SERVERCLASS(); + DECLARE_DATADESC(); + + CTFTankBoss(); + virtual ~CTFTankBoss(); + + virtual void Precache( void ); + virtual void Spawn( void ); + virtual void SetSkin( int nSkin ) { if ( m_body ) m_body->SetSkin( nSkin ); } + + virtual void UpdateOnRemove( void ); + + virtual void UpdateCollisionBounds( void ); + + virtual CTFTankBossBody *GetBodyInterface( void ) const { return m_body; } + + virtual int OnTakeDamage_Alive( const CTakeDamageInfo &rawInfo ); + + virtual void Event_Killed( const CTakeDamageInfo &info ); + + void TankBossThink( void ); + + void SetStartingPathTrackNode( char *name ); + + void DefineOnKilledOutput( EventInfo *eventInfo ); + void DefineOnBombDroppedOutput( EventInfo *eventInfo ); + + void SetWaveSpawnPopulator( CWaveSpawnPopulator *pWave ){ m_pWaveSpawnPopulator = pWave; } + + virtual int GetCurrencyValue( void ); + + // Input handlers + void InputDestroyIfAtCapturePoint( inputdata_t &inputdata ); + void InputAddCaptureDestroyPostfix( inputdata_t &inputdata ); + + void UpdatePingSound( void ); + +protected: + virtual void ModifyDamage( CTakeDamageInfo *info ) const; + +private: + + void Explode(); + +private: + CTFTankBossBody *m_body; + + CHandle< CPathTrack > m_startNode; + CHandle< CPathTrack > m_endNode; + CHandle< CPathTrack > m_goalNode; + CUtlVector< float > m_CumulativeDistances; + float m_fTotalDistance; + int m_nNodeNumber; + + float m_flSpawnTime; + + bool m_isDroppingBomb; + float m_flDroppingStart; + + int m_exhaustAttachment; + bool m_isSmoking; + + bool m_bIsPlayerKilled; + bool m_bPlayedHalfwayAlert; + bool m_bPlayedNearAlert; + + int m_lastHealth; + int m_damageModelIndex; + int m_nDeathAnimPick; + char m_szDeathPostfix[ 8 ]; + + Vector m_lastRightTrackPos; + Vector m_lastLeftTrackPos; + + CountdownTimer m_rumbleTimer; + + EventInfo m_onKilledEventInfo; + EventInfo m_onBombDroppedEventInfo; + void FirePopFileEvent( EventInfo *eventInfo ); + + CHandle< CBaseAnimating > m_bomb; + CHandle< CBaseAnimating > m_leftTracks; + CHandle< CBaseAnimating > m_rightTracks; + + CountdownTimer m_crushTimer; + CWaveSpawnPopulator *m_pWaveSpawnPopulator; + + Vector m_vCollisionMins; + Vector m_vCollisionMaxs; + + float m_flLastPingTime; + + static float m_flLastTankAlert; + + CHistoryVector< EntityHistory_t, CEntityHistoryLess, 12 > m_vecDamagers; +}; + + +inline void CTFTankBoss::DefineOnKilledOutput( EventInfo *eventInfo ) +{ + if ( eventInfo ) + { + m_onKilledEventInfo.m_action = eventInfo->m_action; + m_onKilledEventInfo.m_target = eventInfo->m_target; + } +} + +inline void CTFTankBoss::DefineOnBombDroppedOutput( EventInfo *eventInfo ) +{ + if ( eventInfo ) + { + m_onBombDroppedEventInfo.m_action = eventInfo->m_action; + m_onBombDroppedEventInfo.m_target = eventInfo->m_target; + } +} + +#endif // TF_TANK_BOSS_H |