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.
167 lines
4.8 KiB
167 lines
4.8 KiB
//========= 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; |
|
} |
|
|
|
|
|
|