83 lines
2.6 KiB
C++
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 */ |