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_shield_flat.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_shield_flat.cpp')
| -rw-r--r-- | game/server/tf2/tf_shield_flat.cpp | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/game/server/tf2/tf_shield_flat.cpp b/game/server/tf2/tf_shield_flat.cpp new file mode 100644 index 0000000..cbe187d --- /dev/null +++ b/game/server/tf2/tf_shield_flat.cpp @@ -0,0 +1,150 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#include "cbase.h" +#include "tf_shield_flat.h" +#include "tf_shieldshared.h" + + +//----------------------------------------------------------------------------- +// Data tables +//----------------------------------------------------------------------------- +LINK_ENTITY_TO_CLASS( shield_flat, CShieldFlat ); + +IMPLEMENT_SERVERCLASS_ST(CShieldFlat, DT_Shield_Flat) + + SendPropInt (SENDINFO(m_ShieldState), 2, SPROP_UNSIGNED ), + SendPropFloat (SENDINFO(m_Width), 8, 0, 0, 256 ), + SendPropFloat (SENDINFO(m_Height), 8, 0, 0, 256 ), + +END_SEND_TABLE() + + +//----------------------------------------------------------------------------- +// Spawn +//----------------------------------------------------------------------------- +void CShieldFlat::Spawn( ) +{ + BaseClass::Spawn(); + m_ShieldState = 0; + ShieldMoved(); +} + + +//----------------------------------------------------------------------------- +// Computes the shield bounding box +//----------------------------------------------------------------------------- +void CShieldFlat::ShieldMoved( void ) +{ + Vector forward, right, up; + AngleVectors( GetAbsAngles(), &forward, &right, &up ); + + VectorMA( GetAbsOrigin(), -m_Width * 0.5, right, m_Pos[0] ); + VectorMA( m_Pos[0], -m_Height * 0.5, up, m_Pos[0] ); + VectorMA( m_Pos[0], m_Width, right, m_Pos[1] ); + VectorMA( m_Pos[0], m_Height, up, m_Pos[2] ); + VectorMA( m_Pos[2], m_Width, right, m_Pos[3] ); + + m_LastAngles = GetAbsAngles(); + m_LastPosition = GetAbsOrigin(); +} + + +//----------------------------------------------------------------------------- +// Shield size +//----------------------------------------------------------------------------- +void CShieldFlat::SetSize( float w, float h ) +{ + m_Width = w; + m_Height = h; + Vector mins( -1.0/16.0f, -w * 0.5f, -h * 0.5f ); + Vector maxs( 1.0/16.0f, w * 0.5f, h * 0.5f ); + UTIL_SetSize( this, mins, maxs ); + ShieldMoved(); +} + + +//----------------------------------------------------------------------------- +// Compute world axis-aligned bounding box +//----------------------------------------------------------------------------- +void CShieldFlat::ComputeWorldSpaceSurroundingBox( Vector *pWorldMins, Vector *pWorldMaxs ) +{ + TransformAABB( CollisionProp()->CollisionToWorldTransform(), + CollisionProp()->OBBMins(), CollisionProp()->OBBMaxs(), *pWorldMins, *pWorldMaxs ); +} + + +//----------------------------------------------------------------------------- +// Shield points +//----------------------------------------------------------------------------- +const Vector& CShieldFlat::GetPoint( int x, int y ) +{ + if ((m_LastAngles != GetAbsAngles()) || (m_LastPosition != GetAbsOrigin() )) + { + ShieldMoved(); + } + + int i = (x >= 1); + i += (y >= 1) * 2; + return m_Pos[i]; +} + + +//----------------------------------------------------------------------------- +// Called when the shield is EMPed +//----------------------------------------------------------------------------- +void CShieldFlat::SetEMPed( bool isEmped ) +{ + CShield::SetEMPed(isEmped); + if (IsEMPed()) + { + m_ShieldState |= SHIELD_FLAT_EMP; + } + else + { + m_ShieldState &= ~SHIELD_FLAT_EMP; + } +} + + +//----------------------------------------------------------------------------- +// Shield is killed here +//----------------------------------------------------------------------------- +void CShieldFlat::Activate( bool active ) +{ + if (active) + { + m_ShieldState &= ~SHIELD_FLAT_INACTIVE; + } + else + { + m_ShieldState |= SHIELD_FLAT_INACTIVE; + } + ActivateCollisions( active ); +} + + +//----------------------------------------------------------------------------- +// Purpose: Create a mobile version of the shield +//----------------------------------------------------------------------------- +CShieldFlat* CreateFlatShield( CBaseEntity *pOwner, float w, float h, const Vector& relOrigin, const QAngle &relAngles ) +{ + CShieldFlat *pShield = (CShieldFlat*)CreateEntityByName("shield_flat"); + + pShield->SetParent( pOwner ); + pShield->SetOwnerEntity( pOwner ); + UTIL_SetOrigin( pShield, relOrigin ); + + // Compute relative angles.... + pShield->SetLocalAngles( relAngles ); + pShield->ChangeTeam( pOwner->GetTeamNumber() ); + pShield->Spawn(); + pShield->SetSize( w , h ); + + return pShield; +} + |