sqwarmed/sdk_src/game/server/swarm/asw_spawner.h

83 lines
2.6 KiB
C++

#ifndef _INCLUDED_ASW_SPAWNER_H
#define _INCLUDED_ASW_SPAWNER_H
#ifdef _WIN32
#pragma once
#endif
#include "asw_base_spawner.h"
//===============================================
// An entity that spawns aliens over time
//===============================================
class CASW_Spawner : public CASW_Base_Spawner
{
public:
DECLARE_CLASS( CASW_Spawner, CASW_Base_Spawner );
DECLARE_DATADESC();
CASW_Spawner();
virtual ~CASW_Spawner();
virtual void Spawn();
virtual void Precache();
virtual void InitAlienClassName();
Class_T Classify() { return (Class_T) CLASS_ASW_SPAWNER; }
virtual IASW_Spawnable_NPC* SpawnAlien( const char *szAlienClassName, const Vector &vecHullMins, const Vector &vecHullMaxs );
virtual bool CanSpawn( const Vector &vecHullMins, const Vector &vecHullMaxs );
bool MoveSpawnableTo(IASW_Spawnable_NPC* pAlien, CBaseEntity* pGoalEnt, bool bIgnoreMarines);
void SpawnerThink();
void SpawnOneAlien();
// get the hull size for the type of alien we're spawning
const Vector& GetAlienMins();
const Vector& GetAlienMaxs();
void SpawnedAllAliens();
virtual void AlienKilled( CBaseEntity *pVictim );
void MissionStart(); // called by gamerules when mission begins
bool ApplyCarnageMode( float fScaler, float fInvScaler );
enum SpawnerState_t
{
SST_StartSpawningWhenMissionStart,
SST_WaitForInputs,
SST_Spawning,
SST_Finished,
};
void SetSpawnerState( SpawnerState_t newState );
// inputs
void InputSpawnAlien( inputdata_t &inputdata );
void InputStartSpawning( inputdata_t &inputdata );
void InputStopSpawning( inputdata_t &inputdata );
void InputToggleSpawning( inputdata_t &inputdata );
protected:
// outputs
COutputEvent m_OnAllSpawned;
COutputEvent m_OnAllSpawnedDead;
int m_nMaxLiveAliens; // max number of NPCs that this spawner may have out at one time.
int m_nNumAliens; // max number of NPCs that this spawner can create total
bool m_bInfiniteAliens;
float m_flSpawnInterval; // time between spawns
float m_flSpawnIntervalJitter; // fractional variation applied to spawn interval each time to give it some randomness
int m_AlienClassNum; // integer from choice in Hammer, which sets the classname on Spawn
string_t m_AlienClassName; // classname of the NPC(s) that will be created.
int m_nCurrentLiveAliens; // current number of live aliens
SpawnerState_t m_SpawnerState;
};
// scales up alien amounts (but makes them weaker)
void ASW_ApplyCarnage_f(float fScaler);
#endif /* _INCLUDED_ASW_SPAWNER_H */