summaryrefslogtreecommitdiff
path: root/game/server/tf2/tf_obj_respawn_station.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'game/server/tf2/tf_obj_respawn_station.cpp')
-rw-r--r--game/server/tf2/tf_obj_respawn_station.cpp167
1 files changed, 167 insertions, 0 deletions
diff --git a/game/server/tf2/tf_obj_respawn_station.cpp b/game/server/tf2/tf_obj_respawn_station.cpp
new file mode 100644
index 0000000..2888679
--- /dev/null
+++ b/game/server/tf2/tf_obj_respawn_station.cpp
@@ -0,0 +1,167 @@
+//========= 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;
+}
+
+