summaryrefslogtreecommitdiff
path: root/game/server/tf/raid/tf_raid_logic.h
diff options
context:
space:
mode:
Diffstat (limited to 'game/server/tf/raid/tf_raid_logic.h')
-rw-r--r--game/server/tf/raid/tf_raid_logic.h174
1 files changed, 174 insertions, 0 deletions
diff --git a/game/server/tf/raid/tf_raid_logic.h b/game/server/tf/raid/tf_raid_logic.h
new file mode 100644
index 0000000..973f0fa
--- /dev/null
+++ b/game/server/tf/raid/tf_raid_logic.h
@@ -0,0 +1,174 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+// tf_raid_logic.h
+// Raid game mode singleton manager
+// Michael Booth, November 2009
+
+#ifndef TF_RAID_LOGIC_H
+#define TF_RAID_LOGIC_H
+
+#ifdef TF_RAID_MODE
+
+#include "tf_gamerules.h"
+#include "player_vs_environment/tf_population_manager.h"
+
+class CBaseDoor;
+
+
+//-----------------------------------------------------------------------
+class CRaidLogic : public CPointEntity, public CGameEventListener
+{
+ DECLARE_CLASS( CRaidLogic, CPointEntity );
+public:
+ DECLARE_DATADESC();
+
+ CRaidLogic();
+ virtual ~CRaidLogic();
+
+ virtual void Spawn( void );
+ void Reset( void );
+ void Update( void );
+
+ virtual void FireGameEvent( IGameEvent *event );
+
+ void DrawDebugDisplay( float deltaT );
+
+ CTeamControlPoint *GetContestedPoint( void ) const; // return the next control point that can be captured
+
+ bool IsWaitingForRaidersToLeaveSafeRoom( void ) const; // returns true if all raiders have not yet left the spawn room for the first time
+ bool IsMobSpawning( void ) const; // return true if a mob is trying to spawn right now
+ bool IsSentryGunArea( CTFNavArea *area ) const; // return true if this area should contain an enemy sentry gun
+
+ int GetWandererCount( void ) const; // how many wanderers exist at the moment?
+
+ CTFPlayer *GetFarthestAlongRaider( void ) const; // return raider who is farthest through the map
+
+ float GetMaximumRaiderIncursionDistance( void ) const; // return incursion distance of farthest along raider
+ float GetIncursionDistanceAtEnd( void ) const; // return maximum incursion distance at end of route
+
+ CTFNavArea *GetEscapeRouteStart( void ) const;
+ CTFNavArea *GetEscapeRouteEnd( void ) const;
+
+ CTFNavArea *FindSniperSpawn( void );
+ CTFNavArea *FindSentryArea( void );
+
+ CTFNavArea *FindSpawnAreaAhead( void );
+ CTFNavArea *FindSpawnAreaBehind( void );
+
+ CTFNavArea *SelectRaidSentryArea( void ) const; // choose unpopulated sentry area nearest the invaders
+
+ CTFPlayer *SelectRaiderToAttack( void ); // pick a member of the raiding (blue) team for a red defender to attack
+
+ virtual int UpdateTransmitState()
+ {
+ return SetTransmitState( FL_EDICT_ALWAYS );
+ }
+
+ CBaseEntity *GetRescueRespawn( void ) const; // return entity positioned within next valid rescue closet area for to respawn players in
+
+private:
+ bool LoadPopulationFromFile( void );
+
+ int m_priorRaiderAliveCount;
+
+ int m_wandererCount;
+ int m_engineerCount;
+ int m_demomanCount;
+ int m_heavyCount;
+ int m_soldierCount;
+ int m_pyroCount;
+ int m_spyCount;
+ int m_sniperCount;
+ int m_squadCount;
+
+ void OnRoundStart( void );
+ bool Unspawn( CTFPlayer *who );
+ void CullObsoleteEnemies( float minIncursion, float maxIncursion );
+
+// void SpawnMobs( CUtlVector< CTFNavArea * > *spawnAreaVector );
+ CountdownTimer m_mobSpawnTimer;
+ CountdownTimer m_mobLifetimeTimer;
+ CTFNavArea *m_mobArea;
+ int m_mobCountRemaining;
+ int m_mobClass;
+
+// void SpawnEngineers( void );
+ CountdownTimer m_engineerSpawnTimer;
+
+// void SpawnSpecials( CUtlVector< CTFNavArea * > *spawnAheadVector, CUtlVector< CTFNavArea * > *spawnAnywhereVector );
+ CountdownTimer m_specialSpawnTimer;
+
+ CTFNavArea *SelectMobSpawn( CUtlVector< CTFNavArea * > *spawnAreaVector, RelativePositionType where );
+// bool SpawnSquad( CTFNavArea *spawnArea );
+ void StartMobTimer( float duration );
+
+ bool m_isWaitingForRaidersToLeaveSpawnRoom;
+ bool m_wasCapturingPoint;
+ bool m_didFailLastTime;
+
+ CHandle< CTFPlayer > m_farthestAlongRaider; // raider with highest incursion distance
+ float m_incursionDistanceAtEnd;
+
+ void BuildEscapeRoute( void );
+ CUtlVector< CTFNavArea * > m_escapeRouteVector; // a vector of areas in order along the escape route
+ CTFNavArea *m_farthestAlongEscapeRouteArea;
+ CTFNavArea *FindEarliestVisibleEscapeRouteAreaNearTeam( CTFNavArea *viewArea ) const; // given a viewing area, return the earliest escape route area near the team that is visible
+
+ CUtlVector< CTFNavArea * > m_sniperSpotVector; // a vector of good sniping areas
+ CUtlVector< CTFNavArea * > m_sentrySpotVector; // a vector of good sentry areas
+ CUtlVector< CTFNavArea * > m_actualSentrySpotVector; // a vector of areas to actually place sentry guns
+
+ CUtlVector< CTFNavArea * > m_rescueClosetVector; // a vector of areas to respawn raiders
+
+ CUtlVector< CTFNavArea * > m_miniBossHomeVector;
+ int m_miniBossIndex;
+
+ CUtlVector< CBaseDoor * > m_gateVector; // vector of gates that open when point is captured
+};
+
+inline bool CRaidLogic::IsSentryGunArea( CTFNavArea *area ) const
+{
+ return m_actualSentrySpotVector.HasElement( area );
+}
+
+inline int CRaidLogic::GetWandererCount( void ) const
+{
+ return m_wandererCount;
+}
+
+inline CTFNavArea *CRaidLogic::GetEscapeRouteStart( void ) const
+{
+ return m_escapeRouteVector.Count() ? m_escapeRouteVector[0] : NULL;
+}
+
+inline CTFNavArea *CRaidLogic::GetEscapeRouteEnd( void ) const
+{
+ return m_escapeRouteVector.Count() ? m_escapeRouteVector[ m_escapeRouteVector.Count()-1 ] : NULL;
+}
+
+inline CTFPlayer *CRaidLogic::GetFarthestAlongRaider( void ) const
+{
+ return m_farthestAlongRaider;
+}
+
+
+inline bool CRaidLogic::IsWaitingForRaidersToLeaveSafeRoom( void ) const
+{
+ return m_isWaitingForRaidersToLeaveSpawnRoom;
+}
+
+inline bool CRaidLogic::IsMobSpawning( void ) const
+{
+ return m_mobLifetimeTimer.HasStarted() && !m_mobLifetimeTimer.IsElapsed();
+}
+
+inline float CRaidLogic::GetIncursionDistanceAtEnd( void ) const
+{
+ return m_incursionDistanceAtEnd;
+}
+
+extern CRaidLogic *g_pRaidLogic;
+
+#endif // TF_RAID_MODE
+
+
+#endif // TF_RAID_LOGIC_H