mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-09-01 15:09:19 +00:00
upload "kind" alien swarm
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
// Orders nearby aliens to a named info_target
|
||||
|
||||
#include "cbase.h"
|
||||
#include "asw_gamerules.h"
|
||||
#include "iasw_spawnable_npc.h"
|
||||
#include "asw_spawn_manager.h"
|
||||
|
||||
// memdbgon must be the last include file in a .cpp file!!!
|
||||
#include "tier0/memdbgon.h"
|
||||
|
||||
class CASW_Order_Nearby_Aliens : public CPointEntity
|
||||
{
|
||||
private:
|
||||
DECLARE_DATADESC();
|
||||
|
||||
public:
|
||||
DECLARE_CLASS( CASW_Order_Nearby_Aliens, CPointEntity );
|
||||
|
||||
~CASW_Order_Nearby_Aliens( void );
|
||||
virtual void Spawn( void );
|
||||
|
||||
CBaseEntity* GetOrderTarget();
|
||||
EHANDLE m_hAlienOrderTarget;
|
||||
|
||||
const char* GetAlienClass();
|
||||
AlienOrder_t m_AlienOrders;
|
||||
string_t m_AlienOrderTargetName; // name of our moveto target
|
||||
int m_AlienClassNum;
|
||||
float m_fRadius;
|
||||
|
||||
// Input handlers
|
||||
void InputOrderAliens( inputdata_t &inputdata );
|
||||
};
|
||||
|
||||
LINK_ENTITY_TO_CLASS( asw_order_nearby_aliens, CASW_Order_Nearby_Aliens );
|
||||
|
||||
BEGIN_DATADESC( CASW_Order_Nearby_Aliens )
|
||||
DEFINE_KEYFIELD( m_fRadius, FIELD_FLOAT, "radius" ),
|
||||
DEFINE_KEYFIELD( m_AlienClassNum, FIELD_INTEGER, "AlienClass" ),
|
||||
DEFINE_KEYFIELD( m_AlienOrders, FIELD_INTEGER, "AlienOrders" ),
|
||||
DEFINE_KEYFIELD( m_AlienOrderTargetName, FIELD_STRING, "AlienOrderTargetName" ),
|
||||
DEFINE_INPUTFUNC( FIELD_VOID, "SendOrders", InputOrderAliens ),
|
||||
END_DATADESC()
|
||||
|
||||
CASW_Order_Nearby_Aliens::~CASW_Order_Nearby_Aliens( void )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CASW_Order_Nearby_Aliens::Spawn( void )
|
||||
{
|
||||
SetSolid( SOLID_NONE );
|
||||
SetMoveType( MOVETYPE_NONE );
|
||||
}
|
||||
|
||||
|
||||
void CASW_Order_Nearby_Aliens::InputOrderAliens( inputdata_t &inputdata )
|
||||
{
|
||||
// find all aliens within our radius
|
||||
const char* szAlienClass = GetAlienClass();
|
||||
CBaseEntity* pEntity = NULL;
|
||||
while ((pEntity = gEntList.FindEntityByClassname( pEntity, szAlienClass )) != NULL)
|
||||
{
|
||||
float dist = (GetAbsOrigin() - pEntity->GetAbsOrigin()).Length2D();
|
||||
if (dist <= m_fRadius)
|
||||
{
|
||||
IASW_Spawnable_NPC* pAlien = dynamic_cast<IASW_Spawnable_NPC*>(pEntity);
|
||||
if (pAlien)
|
||||
{
|
||||
// give the orders
|
||||
pAlien->SetAlienOrders(m_AlienOrders, vec3_origin, GetOrderTarget());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const char* CASW_Order_Nearby_Aliens::GetAlienClass()
|
||||
{
|
||||
if ( m_AlienClassNum < 0 || m_AlienClassNum >= ASWSpawnManager()->GetNumAlienClasses() )
|
||||
{
|
||||
m_AlienClassNum = 0;
|
||||
}
|
||||
|
||||
return ASWSpawnManager()->GetAlienClass( m_AlienClassNum )->m_pszAlienClass;
|
||||
}
|
||||
|
||||
CBaseEntity* CASW_Order_Nearby_Aliens::GetOrderTarget()
|
||||
{
|
||||
if (m_hAlienOrderTarget.Get() == NULL &&
|
||||
(m_AlienOrders == AOT_MoveTo || m_AlienOrders == AOT_MoveToIgnoringMarines )
|
||||
)
|
||||
{
|
||||
m_hAlienOrderTarget = gEntList.FindEntityByName( NULL, m_AlienOrderTargetName, NULL );
|
||||
|
||||
if( !m_hAlienOrderTarget.Get() )
|
||||
{
|
||||
DevWarning("asw_spawner can't find order object\n", GetDebugName() );
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return m_hAlienOrderTarget.Get();
|
||||
}
|
||||
Reference in New Issue
Block a user