You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
170 lines
4.6 KiB
170 lines
4.6 KiB
1 year ago
|
//============ Copyright (c) Valve Corporation, All rights reserved. ============
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
//===============================================================================
|
||
|
#ifndef ASW_SPAWN_SELECTION_H
|
||
|
#define ASW_SPAWN_SELECTION_H
|
||
|
#ifdef _WIN32
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
#include "missionchooser/iasw_spawn_selection.h"
|
||
|
#include "utlvector.h"
|
||
|
#include "KeyValues.h"
|
||
|
|
||
|
|
||
|
class CASW_Entry : public IASWSpawnDefinitionEntry
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
// Implementation of the IASWSpawnDefinitionEntry Interface.
|
||
|
virtual const char *GetNPCClassname() { return m_pszAlienClass; }
|
||
|
virtual void GetSpawnCountRange( int &nMin, int &nMax ) { nMin = m_nMinPerSpawn; nMax = m_nMaxPerSpawn; }
|
||
|
virtual float GetEliteNPCChance( void ) { return m_flEliteChance; }
|
||
|
virtual bool UseSpawners() { return m_bUseSpawners; }
|
||
|
|
||
|
public:
|
||
|
|
||
|
CASW_Entry()
|
||
|
{
|
||
|
m_pszAlienClass = NULL;
|
||
|
m_nMinPerSpawn = 1;
|
||
|
m_nMaxPerSpawn = 1;
|
||
|
m_flEliteChance = 0;
|
||
|
m_bUseSpawners = false;
|
||
|
}
|
||
|
|
||
|
char* m_pszAlienClass;
|
||
|
int m_nMinPerSpawn;
|
||
|
int m_nMaxPerSpawn;
|
||
|
float m_flEliteChance;
|
||
|
bool m_bUseSpawners;
|
||
|
};
|
||
|
|
||
|
|
||
|
//=============================================================================
|
||
|
//
|
||
|
// Data describing a particular alien spawn (can be one or more aliens of various classes)
|
||
|
//
|
||
|
class CASW_Spawn_Definition : public IASWSpawnDefinition
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
// Implementation of the IASWSpawnDefinition Interface.
|
||
|
virtual int GetEntryCount() { return m_Entries.Count(); }
|
||
|
virtual IASWSpawnDefinitionEntry *GetEntry( int nEntry ) { Assert( nEntry >= 0 && nEntry < m_Entries.Count() ); return m_Entries[nEntry]; }
|
||
|
virtual int GetID() { return m_nID; }
|
||
|
|
||
|
public:
|
||
|
|
||
|
CASW_Spawn_Definition( int nID );
|
||
|
~CASW_Spawn_Definition();
|
||
|
|
||
|
void LoadFromKeyValues( KeyValues *pKeys );
|
||
|
|
||
|
float GetSelectionWeight() { return m_flSelectionWeight; }
|
||
|
bool ContainsAlienClass( const char *szAlienClass );
|
||
|
|
||
|
void ListSpawnDef();
|
||
|
|
||
|
private:
|
||
|
|
||
|
float m_flSelectionWeight;
|
||
|
CUtlVector<CASW_Entry*> m_Entries;
|
||
|
int m_nID;
|
||
|
};
|
||
|
|
||
|
|
||
|
//=============================================================================
|
||
|
//
|
||
|
// Holds spawn definitions for all types of spawning within an area (typically a whole mission)
|
||
|
//
|
||
|
class CASW_Spawn_Set
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
CASW_Spawn_Set();
|
||
|
~CASW_Spawn_Set();
|
||
|
|
||
|
// this function returns a random wanderer/horde/boss
|
||
|
CASW_Spawn_Definition* GetSpawnDef( int nType );
|
||
|
CASW_Spawn_Definition* GetSpawnDefByID( int nID );
|
||
|
|
||
|
// chance of spawning a feeder group per 256x256 grid square
|
||
|
float GetFeederChance() { return m_flFeederChance; }
|
||
|
const char *GetSetName() { return m_pszSetName; }
|
||
|
|
||
|
void LoadFromKeyValues( KeyValues *pKeys );
|
||
|
|
||
|
int GetMinDifficulty() { return m_iMinDifficulty; }
|
||
|
int GetMaxDifficulty() { return m_iMaxDifficulty; }
|
||
|
|
||
|
// number of encounters per mission
|
||
|
int GetMinEncounters() { return m_iMinEncounters; }
|
||
|
int GetMaxEncounters() { return m_iMaxEncounters; }
|
||
|
|
||
|
// number of spawndefs in each encounter
|
||
|
int GetMinSpawnsPerEncounter() { return m_iMinSpawnsPerEncounter; }
|
||
|
int GetMaxSpawnsPerEncounter() { return m_iMaxSpawnsPerEncounter; }
|
||
|
|
||
|
private:
|
||
|
|
||
|
CUtlVector<CASW_Spawn_Definition*> m_SpawnDefs[ASW_NPC_SPAWN_TYPE_COUNT];
|
||
|
float m_flTotalWeight[ASW_NPC_SPAWN_TYPE_COUNT];
|
||
|
|
||
|
int m_iMinDifficulty;
|
||
|
int m_iMaxDifficulty;
|
||
|
float m_flFeederChance;
|
||
|
int m_iMinEncounters;
|
||
|
int m_iMaxEncounters;
|
||
|
int m_iMinSpawnsPerEncounter;
|
||
|
int m_iMaxSpawnsPerEncounter;
|
||
|
const char *m_pszSetName;
|
||
|
};
|
||
|
|
||
|
CASW_Spawn_Set *CurrentSpawnSet();
|
||
|
|
||
|
//=============================================================================
|
||
|
//
|
||
|
// Manages loading and setting of spawn sets
|
||
|
//
|
||
|
class CASW_Spawn_Selection : public IASWSpawnSelection
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
// Implementation of the IASWSpawnSelection Interface.
|
||
|
IASWSpawnDefinition *GetSpawnDefinition( int nSpawnType ) { Assert( GetCurrentSpawnSet() ); return GetCurrentSpawnSet()->GetSpawnDef( nSpawnType ); }
|
||
|
CASW_Spawn_Definition* GetSpawnDefByID( int nID );
|
||
|
|
||
|
bool IsAvailableNPC( const char *szName );
|
||
|
virtual void SetCurrentSpawnSet( int iMissionDifficulty ); // sets spawn set based on the difficulty passed in
|
||
|
virtual bool SetCurrentSpawnSet( const char *szSetName ); // sets spawn set by name
|
||
|
virtual void DumpCurrentSpawnSet();
|
||
|
|
||
|
public:
|
||
|
|
||
|
// Construction/Destruction.
|
||
|
CASW_Spawn_Selection();
|
||
|
~CASW_Spawn_Selection();
|
||
|
void Init();
|
||
|
|
||
|
void SetCurrentSpawnSet( CASW_Spawn_Set* pSet ) { m_pCurrentSpawnSet = pSet; }
|
||
|
CASW_Spawn_Set *GetCurrentSpawnSet() { return m_pCurrentSpawnSet; }
|
||
|
CASW_Spawn_Set *GetSpawnSet( const char *szSetName );
|
||
|
|
||
|
private:
|
||
|
|
||
|
void LoadSpawnSets();
|
||
|
void Reset();
|
||
|
|
||
|
private:
|
||
|
|
||
|
CUtlVector<CASW_Spawn_Set*> m_SpawnSets;
|
||
|
CASW_Spawn_Set *m_pCurrentSpawnSet;
|
||
|
KeyValues *m_pSpawnSetKeys;
|
||
|
};
|
||
|
|
||
|
int SpawnTypeFromString( const char *szText );
|
||
|
|
||
|
#endif // ASW_SPAWN_SELECTION_H
|