#ifndef _INCLUDED_ASW_SPAWN_MANAGER_H #define _INCLUDED_ASW_SPAWN_MANAGER_H #ifdef _WIN32 #pragma once #endif class CAI_Network; class CTriggerMultiple; struct AI_Waypoint_t; // The spawn manager can spawn aliens and groups of aliens class ASW_Alien_Class_Entry { public: ASW_Alien_Class_Entry( const char *szClass, int nHullType ) { m_pszAlienClass = szClass; m_nHullType = nHullType; } const char *m_pszAlienClass; string_t m_iszAlienClass; int m_nHullType; }; class CASW_Spawn_Manager { public: CASW_Spawn_Manager(); ~CASW_Spawn_Manager(); void LevelInitPreEntity(); void LevelInitPostEntity(); void Update(); bool AddHorde( int iHordeSize ); // creates a large pack of aliens somewhere near the marines void AddAlien(); // creates a single alien somewhere near the marines int SpawnAlienBatch( const char *szAlienClass, int iNumAliens, const Vector &vecPosition, const QAngle &angle, float flMarinesBeyondDist = 0 ); CBaseEntity* SpawnAlienAt(const char* szAlienClass, const Vector& vecPos, const QAngle &angle); bool ValidSpawnPoint( const Vector &vecPosition, const Vector &vecMins, const Vector &vecMaxs, bool bCheckGround = true, float flMarineNearDistance = 0 ); bool LineBlockedByGeometry( const Vector &vecSrc, const Vector &vecEnd ); bool GetAlienBounds( const char *szAlienClass, Vector &vecMins, Vector &vecMaxs ); bool GetAlienBounds( string_t iszAlienClass, Vector &vecMins, Vector &vecMaxs ); int GetHordeToSpawn() { return m_iHordeToSpawn; } int GetNumAlienClasses(); ASW_Alien_Class_Entry* GetAlienClass( int i ); private: void UpdateCandidateNodes(); bool FindHordePosition(); CAI_Network* GetNetwork(); bool SpawnAlientAtRandomNode(); void FindEscapeTriggers(); void DeleteRoute( AI_Waypoint_t *pWaypointList ); CountdownTimer m_batchInterval; Vector m_vecHordePosition; QAngle m_angHordeAngle; int m_iHordeToSpawn; int m_iAliensToSpawn; // maintaining a list of possible nodes to spawn aliens from CUtlVector m_northCandidateNodes; CUtlVector m_southCandidateNodes; CountdownTimer m_CandidateUpdateTimer; typedef CHandle TriggerMultiple_t; CUtlVector m_EscapeTriggers; }; extern const int g_nDroneClassEntry; extern const int g_nDroneJumperClassEntry; CASW_Spawn_Manager* ASWSpawnManager(); #endif // _INCLUDED_ASW_SPAWN_MANAGER_H