summaryrefslogtreecommitdiff
path: root/game/server/tf2/tf_shield.h
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_shield.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/server/tf2/tf_shield.h')
-rw-r--r--game/server/tf2/tf_shield.h146
1 files changed, 146 insertions, 0 deletions
diff --git a/game/server/tf2/tf_shield.h b/game/server/tf2/tf_shield.h
new file mode 100644
index 0000000..14bc7fc
--- /dev/null
+++ b/game/server/tf2/tf_shield.h
@@ -0,0 +1,146 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#ifndef TF_SHIELD_H
+#define TF_SHIELD_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "baseentity.h"
+#include "utlvector.h"
+
+
+//-----------------------------------------------------------------------------
+// forward declarations
+//-----------------------------------------------------------------------------
+class Vector;
+class CGameTrace;
+typedef CGameTrace trace_t;
+struct edict_t;
+
+
+//-----------------------------------------------------------------------------
+// Base class for shield entities
+//-----------------------------------------------------------------------------
+class CShield : public CBaseEntity
+{
+public:
+ DECLARE_CLASS( CShield, CBaseEntity );
+ DECLARE_SERVERCLASS();
+
+ CShield();
+ ~CShield();
+
+public:
+ void Precache();
+ void Spawn( void );
+
+ virtual void Think( void );
+
+ // Sets the desired center direction
+ virtual void SetCenterAngles( const QAngle &angles ) {}
+ virtual void SetAlwaysOrient( bool bOrient ) {}
+ virtual bool IsAlwaysOrienting( ) { return false; }
+
+ // Used by the mobile shield.
+
+ // Change the angular spring constant. This affects how fast the shield rotates to face the angles
+ // given in SetAngles. Higher numbers are more responsive, but if you go too high (around 40), it will
+ // jump past the specified angles and wiggle a little bit.
+ virtual void SetAngularSpringConstant( float flConstant ) {}
+
+ // Move the shield out a certain amount.
+ virtual void SetFrontDistance( float flDistance ) {}
+
+ // Called when we hit something that we deflect...
+ void RegisterDeflection(const Vector& vecDir, int bitsDamageType, trace_t *ptr);
+
+ // Called when we hit something that we let through...
+ void RegisterPassThru(const Vector& vecDir, int bitsDamageType, trace_t *ptr);
+
+ // Activates/deactivates a shield for collision purposes
+ void ActivateCollisions( bool activate );
+
+ // Does this shield protect from a particular damage type?
+ float ProtectionAmount( int weaponType ) const;
+
+ // Deactivates all shields of players on a particular team
+ // If you don't specify a team, it'll affect all shields
+ static void ActivateShields( bool activate, int team = -1 );
+
+ // For collision testing
+ bool TestCollision( const Ray_t& ray, unsigned int mask, trace_t& trace );
+
+ // Called when the shield has moved
+ virtual void ShieldMoved() {}
+
+ // Called when the shield is EMPed (or de-EMPed)
+ virtual void SetEMPed( bool isEmped );
+
+ // Indicates the visual center of the shape, may not be the actual center
+ // (best example is the dome: it projects from a point which is not
+ // at the center of the hemisphere).
+ virtual void SetGeometryOffset( const Vector& vector ) {};
+
+ // Shield power & recharging
+ void SetupRecharge( float flPower, float flDelay, float flAmount, float flTickTime );
+ float GetPower( void ) { return m_flPower; }
+ void SetPower( float flPower );
+ // Make the shield recharge it's health
+ void ShieldRechargeThink( void );
+
+ // Is this ray blocked by any shields?
+ static bool IsBlockedByShields( const Vector& src, const Vector& end );
+
+ virtual void SetOwnerEntity( CBaseEntity *pOwner );
+
+ virtual void SetThetaPhi( float flTheta, float flPhi ) { }
+ virtual void SetAttachmentIndex( int nAttachmentIndex ) {}
+
+protected:
+ //
+ // derived classes must implement these
+ //
+ virtual int Width() { return 0; }
+ virtual int Height() { return 0; }
+ virtual bool IsPanelActive( int x, int y ) { return true; }
+ virtual const Vector& GetPoint( int x, int y ) { return vec3_origin; }
+ bool IsEMPed() const { return m_bIsEMPed; }
+
+ float m_flPower;
+ float m_flMaxPower;
+ CNetworkVar( float, m_flPowerLevel ); // m_flPower mapped to 0->1 range for networking
+ float m_flRechargeDelay;
+ float m_flRechargeAmount;
+ float m_flRechargeTime;
+ float m_flNextRechargeTime;
+
+private:
+ int m_iBuckshotHitsThisFrame;
+ float m_flLastProbeTime;
+ CNetworkVar( bool, m_bIsEMPed );
+ CNetworkVar( int, m_nOwningPlayerIndex );
+
+ // List of all active shields
+ static CUtlVector< CShield* > s_Shields;
+};
+
+
+//-----------------------------------------------------------------------------
+// Class factory methods to create the various versions of the shield
+//-----------------------------------------------------------------------------
+CShield* CreateMobileShield( CBaseEntity *owner, float flFrontDistance = 0 );
+
+
+//-----------------------------------------------------------------------------
+// Returns true if the entity is a shield
+//-----------------------------------------------------------------------------
+bool IsShield( CBaseEntity *pEnt );
+
+#endif // TF_SHIELD_H