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_vehicle_siege_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_vehicle_siege_tower.cpp')
| -rw-r--r-- | game/server/tf2/tf_vehicle_siege_tower.cpp | 304 |
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 |