diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/server/tf2/tf_obj_tower.cpp | |
| download | archived-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.cpp | 175 |
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 |