sqwarmed/sdk_src/game/server/swarm/asw_objective_kill_aliens.cpp

69 lines
1.8 KiB
C++

#include "cbase.h"
#include "asw_objective_kill_aliens.h"
#include "asw_spawn_manager.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
LINK_ENTITY_TO_CLASS( asw_objective_kill_aliens, CASW_Objective_Kill_Aliens );
BEGIN_DATADESC( CASW_Objective_Kill_Aliens )
DEFINE_KEYFIELD( m_iTargetKills, FIELD_INTEGER, "NumKills" ),
DEFINE_KEYFIELD( m_AlienClassNum, FIELD_INTEGER, "AlienClass" ),
DEFINE_FIELD( m_iCurrentKills, FIELD_INTEGER ),
END_DATADESC()
IMPLEMENT_SERVERCLASS_ST(CASW_Objective_Kill_Aliens, DT_ASW_Objective_Kill_Aliens)
SendPropInt (SENDINFO(m_AlienClassNum)),
SendPropInt (SENDINFO(m_iTargetKills)),
SendPropInt (SENDINFO(m_iCurrentKills)),
END_SEND_TABLE()
CASW_Objective_Kill_Aliens::CASW_Objective_Kill_Aliens()
{
m_iCurrentKills = 0; // how many aliens killed so far
}
CASW_Objective_Kill_Aliens::~CASW_Objective_Kill_Aliens()
{
}
void CASW_Objective_Kill_Aliens::AlienKilled(CBaseEntity* pAlien)
{
// check it's the right class
if ( !pAlien || IsObjectiveComplete() || !ASWSpawnManager() )
return;
if ( m_AlienClassNum < 0 || m_AlienClassNum >= ASWSpawnManager()->GetNumAlienClasses() )
{
return;
}
if ( !FClassnameIs( pAlien, ASWSpawnManager()->GetAlienClass( m_AlienClassNum )->m_pszAlienClass ) )
return;
m_iCurrentKills++;
if (m_iCurrentKills >= m_iTargetKills)
{
SetComplete(true);
}
else
{
CReliableBroadcastRecipientFilter filter;
UserMessageBegin( filter, "ShowObjectives" );
WRITE_FLOAT( 5.0f );
MessageEnd();
}
}
float CASW_Objective_Kill_Aliens::GetObjectiveProgress()
{
if ( m_iTargetKills <= 0 )
return BaseClass::GetObjectiveProgress();
float flProgress = (float) m_iCurrentKills.Get() / (float) m_iTargetKills.Get();
flProgress = clamp<float>( flProgress, 0.0f, 1.0f );
return flProgress;
}