summaryrefslogtreecommitdiff
path: root/game/server/tf2/tf_vehicle_siege_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_vehicle_siege_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_vehicle_siege_tower.cpp')
-rw-r--r--game/server/tf2/tf_vehicle_siege_tower.cpp304
1 files changed, 304 insertions, 0 deletions
diff --git a/game/server/tf2/tf_vehicle_siege_tower.cpp b/game/server/tf2/tf_vehicle_siege_tower.cpp
new file mode 100644
index 0000000..78d16f3
--- /dev/null
+++ b/game/server/tf2/tf_vehicle_siege_tower.cpp
@@ -0,0 +1,304 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Siege Tower Vehicle
+//
+//=============================================================================//
+
+#include "cbase.h"
+#include "tf_vehicle_siege_tower.h"
+#include "engine/IEngineSound.h"
+#include "VGuiScreen.h"
+#include "ammodef.h"
+#include "in_buttons.h"
+
+#define SIEGE_TOWER_MINS Vector(-30, -50, -10)
+#define SIEGE_TOWER_MAXS Vector( 30, 50, 55)
+#define SIEGE_TOWER_MODEL "models/objects/vehicle_siege_tower.mdl"
+#define SIEGE_TOWER_LADDER_MODEL "models/objects/vehicle_siege_ladder.mdl"
+#define SIEGE_TOWER_PLATFORM_MODEL "models/objects/vehicle_siege_plat.mdl"
+
+IMPLEMENT_SERVERCLASS_ST( CVehicleSiegeTower, DT_VehicleSiegeTower )
+END_SEND_TABLE();
+
+LINK_ENTITY_TO_CLASS( vehicle_siege_tower, CVehicleSiegeTower );
+PRECACHE_REGISTER( vehicle_siege_tower );
+
+IMPLEMENT_SERVERCLASS_ST( CObjectSiegeLadder, DT_ObjectSiegeLadder )
+END_SEND_TABLE();
+
+LINK_ENTITY_TO_CLASS( obj_siege_ladder, CObjectSiegeLadder );
+PRECACHE_REGISTER( obj_siege_ladder );
+
+IMPLEMENT_SERVERCLASS_ST( CObjectSiegePlatform, DT_ObjectSiegePlatform )
+END_SEND_TABLE();
+
+LINK_ENTITY_TO_CLASS( obj_siege_platform, CObjectSiegePlatform );
+PRECACHE_REGISTER( obj_siege_platform );
+
+// CVars
+ConVar vehicle_siege_tower_health( "vehicle_siege_tower_health","600", FCVAR_NONE, "Siege tower health" );
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CVehicleSiegeTower::CVehicleSiegeTower()
+{
+ m_hLadder = NULL;
+ m_hPlatform = NULL;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CVehicleSiegeTower::Precache()
+{
+ PrecacheModel( SIEGE_TOWER_MODEL );
+
+ PrecacheVGuiScreen( "screen_vehicle_siege_tower" );
+ PrecacheVGuiScreen( "screen_vulnerable_point" );
+
+ BaseClass::Precache();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CVehicleSiegeTower::Spawn()
+{
+ SetModel( SIEGE_TOWER_MODEL );
+
+ // This size is used for placement only...
+ UTIL_SetSize( this, SIEGE_TOWER_MINS, SIEGE_TOWER_MAXS );
+ m_takedamage = DAMAGE_YES;
+ m_iHealth = vehicle_siege_tower_health.GetInt();
+
+ SetType( OBJ_SIEGE_TOWER );
+ SetMaxPassengerCount( 4 );
+
+ BaseClass::Spawn();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Gets info about the control panels
+//-----------------------------------------------------------------------------
+void CVehicleSiegeTower::GetControlPanelInfo( int nPanelIndex, const char *&pPanelName )
+{
+ //pPanelName = "screen_vehicle_siege_tower";
+ pPanelName = "screen_vulnerable_point";
+}
+
+//-----------------------------------------------------------------------------
+// Here's where we deal with weapons, ladders, etc.
+//-----------------------------------------------------------------------------
+void CVehicleSiegeTower::OnItemPostFrame( CBaseTFPlayer *pDriver )
+{
+ // I can't do anything if I'm not active
+ if ( !ShouldBeActive() )
+ return;
+
+ if ( GetPassengerRole( pDriver ) != VEHICLE_ROLE_DRIVER )
+ return;
+
+ if ( !IsDeployed() && ( pDriver->m_afButtonPressed & IN_ATTACK ) )
+ {
+ InternalDeploy();
+ }
+ else if ( IsDeployed() && ( pDriver->m_afButtonPressed & IN_ATTACK ) )
+ {
+ InternalUnDeploy();
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CVehicleSiegeTower::InternalDeploy( void )
+{
+ // Deploy
+ if ( !Deploy() )
+ return;
+
+ InputTurnOff( inputdata_t() );
+
+ // Create the ladder.
+ Vector vecOrigin;
+ QAngle vecAngle;
+ GetAttachment( "ladder", vecOrigin, vecAngle );
+ CreateLadder( vecOrigin, vecAngle );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CVehicleSiegeTower::InternalUnDeploy( void )
+{
+ // Undeploy
+ UnDeploy();
+ InputTurnOn( inputdata_t() );
+
+ // Destory the ladder.
+ DestroyLadder();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CVehicleSiegeTower::CreateLadder( const Vector &vecOrigin, const QAngle &vecAngles )
+{
+ // NOTE: This ladder and platform code is a total hack to test vehicles with. This
+ // is not the correct way to handle this problem at all.
+ m_hLadder = CObjectSiegeLadder::Create( vecOrigin, vecAngles, this );
+ m_hPlatform = CObjectSiegePlatform::Create( vecOrigin, vecAngles, this );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CVehicleSiegeTower::DestroyLadder( void )
+{
+ if ( m_hLadder.Get() )
+ {
+ UTIL_Remove( m_hLadder );
+ m_hLadder = NULL;
+ }
+
+ if ( m_hPlatform.Get() )
+ {
+ UTIL_Remove( m_hPlatform );
+ m_hPlatform = NULL;
+ }
+}
+
+//------------------------------------------------------------------------------
+// Purpose:
+//------------------------------------------------------------------------------
+void CVehicleSiegeTower::Killed( void )
+{
+ DestroyLadder();
+ BaseClass::Killed();
+}
+
+//==============================================================================
+//
+// Object Siege Ladder
+//
+
+//------------------------------------------------------------------------------
+// Purpose:
+//------------------------------------------------------------------------------
+CObjectSiegeLadder::CObjectSiegeLadder()
+{
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CObjectSiegeLadder *CObjectSiegeLadder::Create( const Vector &vOrigin, const QAngle &vAngles, CBaseEntity *pParent )
+{
+ CObjectSiegeLadder *pLadder = static_cast<CObjectSiegeLadder*>( CBaseObject::Create( "obj_siege_ladder", vOrigin, vAngles ) );
+ if ( pLadder )
+ {
+ pLadder->m_hTower = pParent;
+ }
+
+ return pLadder;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CObjectSiegeLadder::Spawn()
+{
+ Precache();
+ SetModel( SIEGE_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( TFCOLLISION_GROUP_OBJECT_SOLIDTOPLAYERMOVEMENT );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CObjectSiegeLadder::Precache()
+{
+ PrecacheModel( SIEGE_TOWER_LADDER_MODEL );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Pass all damage back to the siege tower
+//-----------------------------------------------------------------------------
+int CObjectSiegeLadder::OnTakeDamage( const CTakeDamageInfo &info )
+{
+ return m_hTower->OnTakeDamage( info );
+}
+
+//==============================================================================
+//
+// Object Siege Platform
+//
+
+//------------------------------------------------------------------------------
+// Purpose:
+//------------------------------------------------------------------------------
+CObjectSiegePlatform::CObjectSiegePlatform()
+{
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CObjectSiegePlatform *CObjectSiegePlatform::Create( const Vector &vOrigin, const QAngle &vAngles, CBaseEntity *pParent )
+{
+ CObjectSiegePlatform *pPlatform = static_cast<CObjectSiegePlatform*>( CBaseObject::Create( "obj_siege_platform", vOrigin, vAngles ) );
+ if ( pPlatform )
+ {
+ pPlatform->m_hTower = pParent;
+ }
+
+ return pPlatform;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CObjectSiegePlatform::Spawn()
+{
+ Precache();
+ SetModel( SIEGE_TOWER_PLATFORM_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( TFCOLLISION_GROUP_OBJECT_SOLIDTOPLAYERMOVEMENT );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CObjectSiegePlatform::Precache()
+{
+ PrecacheModel( SIEGE_TOWER_PLATFORM_MODEL );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Pass all damage back to the siege tower
+//-----------------------------------------------------------------------------
+int CObjectSiegePlatform::OnTakeDamage( const CTakeDamageInfo &info )
+{
+ return m_hTower->OnTakeDamage( info );
+} \ No newline at end of file