summaryrefslogtreecommitdiff
path: root/game/server/tf2/tf_obj_tower.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/server/tf2/tf_obj_tower.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/server/tf2/tf_obj_tower.cpp')
-rw-r--r--game/server/tf2/tf_obj_tower.cpp175
1 files changed, 175 insertions, 0 deletions
diff --git a/game/server/tf2/tf_obj_tower.cpp b/game/server/tf2/tf_obj_tower.cpp
new file mode 100644
index 0000000..6ea8a23
--- /dev/null
+++ b/game/server/tf2/tf_obj_tower.cpp
@@ -0,0 +1,175 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: A stationary tower that players can take cover in.
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#include "cbase.h"
+#include "tf_obj.h"
+#include "tf_obj_tower.h"
+#include "tf_team.h"
+#include "tf_obj.h"
+#include "engine/IEngineSound.h"
+
+#define TOWER_MINS Vector(-100, -100, 0)
+#define TOWER_MAXS Vector( 100, 100, 200)
+#define TOWER_MODEL "models/objects/obj_tower.mdl"
+#define TOWER_LADDER_MODEL "models/objects/obj_tower_ladder.mdl"
+
+IMPLEMENT_SERVERCLASS_ST(CObjectTower, DT_ObjectTower)
+END_SEND_TABLE();
+
+LINK_ENTITY_TO_CLASS(obj_tower, CObjectTower);
+PRECACHE_REGISTER(obj_tower);
+
+IMPLEMENT_SERVERCLASS_ST( CObjectTowerLadder, DT_ObjectTowerLadder )
+END_SEND_TABLE();
+
+LINK_ENTITY_TO_CLASS( obj_tower_ladder, CObjectTowerLadder );
+PRECACHE_REGISTER( obj_tower_ladder );
+
+// CVars
+ConVar obj_tower_health( "obj_tower_health","100", FCVAR_NONE, "Tower health" );
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CObjectTower::CObjectTower( void )
+{
+ m_hLadder = NULL;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CObjectTower::Spawn( void )
+{
+ Precache();
+ SetModel( TOWER_MODEL );
+ SetSolid( SOLID_BBOX );
+
+ UTIL_SetSize(this, TOWER_MINS, TOWER_MAXS);
+ m_takedamage = DAMAGE_YES;
+ m_iHealth = obj_tower_health.GetInt();
+
+ m_fObjectFlags |= OF_DONT_PREVENT_BUILD_NEAR_OBJ | OF_DOESNT_NEED_POWER;
+ SetType( OBJ_TOWER );
+
+ SetSolid( SOLID_VPHYSICS );
+ VPhysicsInitStatic();
+
+ BaseClass::Spawn();
+
+ SetCollisionGroup( COLLISION_GROUP_VEHICLE );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CObjectTower::Precache( void )
+{
+ PrecacheModel( TOWER_MODEL );
+ PrecacheModel( TOWER_LADDER_MODEL );
+}
+
+//------------------------------------------------------------------------------
+// Purpose:
+//------------------------------------------------------------------------------
+void CObjectTower::UpdateOnRemove( void )
+{
+ if ( m_hLadder.Get() )
+ {
+ UTIL_Remove( m_hLadder );
+ m_hLadder = NULL;
+ }
+
+ // Chain at end to mimic destructor unwind order
+ BaseClass::UpdateOnRemove();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CObjectTower::FinishedBuilding( void )
+{
+ BaseClass::FinishedBuilding();
+
+ // Create the ladder.
+ Vector vecOrigin;
+ QAngle vecAngles;
+ GetAttachment( "ladder", vecOrigin, vecAngles );
+ m_hLadder = CObjectTowerLadder::Create( vecOrigin, vecAngles, this );
+ m_hLadder->ChangeTeam( GetTeamNumber() );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Gets info about the control panels
+//-----------------------------------------------------------------------------
+void CObjectTower::GetControlPanelInfo( int nPanelIndex, const char *&pPanelName )
+{
+ pPanelName = "screen_basic_with_disable";
+}
+
+
+//==============================================================================
+// Tower Ladder
+//==============================================================================
+
+//------------------------------------------------------------------------------
+// Purpose:
+//------------------------------------------------------------------------------
+CObjectTowerLadder::CObjectTowerLadder()
+{
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CObjectTowerLadder *CObjectTowerLadder::Create( const Vector &vOrigin, const QAngle &vAngles, CBaseEntity *pParent )
+{
+ CObjectTowerLadder *pLadder = static_cast<CObjectTowerLadder*>( CBaseObject::Create( "obj_tower_ladder", vOrigin, vAngles ) );
+ if ( pLadder )
+ {
+ pLadder->m_hTower = pParent;
+ }
+
+ return pLadder;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CObjectTowerLadder::Spawn()
+{
+ Precache();
+ SetModel( TOWER_LADDER_MODEL );
+ SetSolid( SOLID_VPHYSICS );
+ m_takedamage = DAMAGE_NO;
+
+ BaseClass::Spawn();
+
+ CollisionProp()->SetSurroundingBoundsType( USE_BEST_COLLISION_BOUNDS );
+ IPhysicsObject *pPhysics = VPhysicsInitStatic();
+ if ( pPhysics )
+ {
+ pPhysics->EnableMotion( false );
+ }
+ SetCollisionGroup( COLLISION_GROUP_VEHICLE );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CObjectTowerLadder::Precache()
+{
+ PrecacheModel( TOWER_LADDER_MODEL );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Pass all damage back to the tower
+//-----------------------------------------------------------------------------
+int CObjectTowerLadder::OnTakeDamage( const CTakeDamageInfo &info )
+{
+ return m_hTower->OnTakeDamage( info );
+} \ No newline at end of file