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.

168 lines
4.8 KiB

5 years ago
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: Medic's resupply beacon
//
// $NoKeywords: $
//=============================================================================//
#include "cbase.h"
#include "tf_obj.h"
#include "tf_player.h"
#include "tf_team.h"
#include "techtree.h"
#include "tf_shield.h"
#include "tf_obj_respawn_station.h"
IMPLEMENT_SERVERCLASS_ST(CObjectRespawnStation, DT_ObjectRespawnStation)
END_SEND_TABLE();
BEGIN_DATADESC( CObjectRespawnStation )
// keys
DEFINE_KEYFIELD_NOT_SAVED( m_bIsInitialSpawnPoint, FIELD_BOOLEAN, "InitialSpawn" ),
END_DATADESC()
LINK_ENTITY_TO_CLASS(obj_respawn_station, CObjectRespawnStation);
PRECACHE_REGISTER(obj_respawn_station);
ConVar obj_respawnstation_health( "obj_respawnstation_health","300", FCVAR_NONE, "Respawn Station health" );
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
CObjectRespawnStation::CObjectRespawnStation()
{
m_bIsInitialSpawnPoint = false;
UseClientSideAnimation();
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CObjectRespawnStation::Precache()
{
PrecacheModel( "models/objects/obj_respawn_station.mdl" );
m_iSpriteTexture = PrecacheModel( "sprites/laserbeam.vmt" );
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CObjectRespawnStation::Spawn()
{
Precache();
SetMoveType( MOVETYPE_NONE );
SetSolid( SOLID_BBOX );
SetModel( "models/objects/obj_respawn_station.mdl" );
UTIL_SetSize(this, RESPAWN_STATION_MINS, RESPAWN_STATION_MAXS);
m_iHealth = m_iMaxHealth = obj_respawnstation_health.GetInt();
m_takedamage = DAMAGE_YES;
m_fLastRespawnTime = -99999;
SetType( OBJ_RESPAWN_STATION );
BaseClass::Spawn();
}
//-----------------------------------------------------------------------------
// Object using!
//-----------------------------------------------------------------------------
void CObjectRespawnStation::Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value )
{
// Sapper removal
if ( RemoveEnemyAttachments( pActivator ) )
return;
// See if the activator is a player
if ( pActivator->IsPlayer() )
{
CBaseTFPlayer *player = static_cast< CBaseTFPlayer * >( pActivator );
player->SetRespawnStation( this );
}
BaseClass::Use( pActivator, pCaller, useType, value );
}
//-----------------------------------------------------------------------------
// Gets called when someone respawns on this station
//-----------------------------------------------------------------------------
void CObjectRespawnStation::PerformRespawnEffect()
{
if (gpGlobals->curtime - m_fLastRespawnTime > RESPAWN_EFFECT_TIME)
{
Vector vecEnd;
VectorAdd( GetAbsOrigin(), Vector( 0, 0, RESPAWN_BEAM_HEIGHT ), vecEnd );
CBroadcastRecipientFilter filter;
te->BeamPoints( filter, 0.0,
&GetAbsOrigin(),
&vecEnd,
m_iSpriteTexture,
0, // Halo index
0, // Start frame
15, // Frame rate
3.0, // Life
50, // Width
50, // EndWidth
0, // FadeLength
0, // Amplitude
100, // r
200, // g
255, // b
255, // a
20 ); // speed
m_fLastRespawnTime = gpGlobals->curtime;
}
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
CObjectRespawnStation* CObjectRespawnStation::Create(const Vector &vOrigin, const QAngle &vAngles )
{
CObjectRespawnStation *pRet = (CObjectRespawnStation*)CreateEntityByName("obj_respawn_station");
if(pRet)
{
pRet->SetLocalOrigin( vOrigin );
pRet->SetLocalAngles( vAngles );
pRet->Spawn();
}
return pRet;
}
//-----------------------------------------------------------------------------
// Plays a respawn effect on a respawn station...
//-----------------------------------------------------------------------------
void PlayRespawnEffect(CBaseEntity *pRespawnStation)
{
// ROBIN: Removed this for now
return;
// Check last respawn time; wait a couple seconds
if (!FClassnameIs(pRespawnStation, "obj_respawn_station"))
return;
CObjectRespawnStation* pStation = static_cast<CObjectRespawnStation*>(pRespawnStation);
pStation->PerformRespawnEffect();
}
//-----------------------------------------------------------------------------
// Purpose: Returns true if this spawnpoint is the map specified initial spawnpoint for its team
//-----------------------------------------------------------------------------
bool CObjectRespawnStation::IsInitialSpawnPoint( void )
{
return m_bIsInitialSpawnPoint;
}