Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
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.
 
 
 
 
 
 

94 lines
2.6 KiB

#include "cbase.h"
#include "asw_shareddefs.h"
#include "asw_holdout_wave.h"
#include "gamestringpool.h"
#ifdef GAME_DLL
#include "asw_spawn_group.h"
#endif
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
extern ConVar asw_holdout_debug;
//===============================================
// An individual entry in a holdout wave
//===============================================
CASW_Holdout_Wave_Entry::CASW_Holdout_Wave_Entry()
{
}
CASW_Holdout_Wave_Entry::~CASW_Holdout_Wave_Entry()
{
}
void CASW_Holdout_Wave_Entry::LoadFromKeyValues( KeyValues *pKeys )
{
m_flSpawnDelay = pKeys->GetFloat( "SpawnDelay", 1.0f );
m_iszAlienClass = AllocPooledString( pKeys->GetString( "AlienClass" ) );
m_nQuantity = pKeys->GetInt( "Quantity", 1 );
m_flSpawnDuration = pKeys->GetFloat( "SpawnDuration", 0.0f );
m_nModifiers = pKeys->GetInt( "Modifiers", 0 ); // TODO: Turn this into a string parser for the bit flag names
m_iszSpawnGroupName = AllocPooledString( pKeys->GetString( "SpawnGroup" ) );
m_hSpawnGroup = NULL;
}
#ifdef GAME_DLL
CASW_Spawn_Group* CASW_Holdout_Wave_Entry::GetSpawnGroup()
{
if ( m_hSpawnGroup.Get() )
{
return m_hSpawnGroup.Get();
}
CBaseEntity *pEnt = gEntList.FindEntityByName( NULL, m_iszSpawnGroupName );
if ( pEnt && pEnt->Classify() == CLASS_ASW_SPAWN_GROUP )
{
m_hSpawnGroup = assert_cast<CASW_Spawn_Group*>( pEnt );
return m_hSpawnGroup.Get();
}
Warning( "Holdout wave entry can't find spawngroup %s\n", STRING( m_iszSpawnGroupName ) );
return NULL;
}
#endif
//===============================================
// A wave in holdout mode
//===============================================
CASW_Holdout_Wave::CASW_Holdout_Wave()
{
m_nTotalAliens = 0;
}
CASW_Holdout_Wave::~CASW_Holdout_Wave()
{
m_Entries.PurgeAndDeleteElements();
}
void CASW_Holdout_Wave::LoadFromKeyValues( int nWaveNumber, KeyValues *pKeys )
{
m_Entries.PurgeAndDeleteElements();
m_nTotalAliens = 0;
m_nWaveNumber = nWaveNumber;
m_iszWaveName = AllocPooledString( pKeys->GetString( "Name", "Unknown" ) );
m_nEnvironmentModifiers = pKeys->GetInt( "EnvironmentModifiers" ); // TODO: Turn this into a string parser for the bit flag names
m_bWaveHasResupply = pKeys->GetBool( "Resupply", false );
for ( KeyValues *pKey = pKeys->GetFirstSubKey(); pKey; pKey = pKey->GetNextKey() )
{
if ( !Q_stricmp( pKey->GetName(), "ENTRY" ) )
{
if ( asw_holdout_debug.GetBool() )
{
Msg( " Loading a wave entry\n" );
}
CASW_Holdout_Wave_Entry *pEntry = new CASW_Holdout_Wave_Entry();
pEntry->LoadFromKeyValues( pKey );
m_Entries.AddToTail( pEntry );
m_nTotalAliens += pEntry->GetQuantity();
}
}
}