summaryrefslogtreecommitdiff
path: root/game/shared/tf2/plasmaprojectile.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/shared/tf2/plasmaprojectile.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/shared/tf2/plasmaprojectile.h')
-rw-r--r--game/shared/tf2/plasmaprojectile.h245
1 files changed, 245 insertions, 0 deletions
diff --git a/game/shared/tf2/plasmaprojectile.h b/game/shared/tf2/plasmaprojectile.h
new file mode 100644
index 0000000..13427e6
--- /dev/null
+++ b/game/shared/tf2/plasmaprojectile.h
@@ -0,0 +1,245 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#ifndef PLASMAPROJECTILE_H
+#define PLASMAPROJECTILE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "predictable_entity.h"
+
+#include "baseparticleentity.h"
+#include "plasmaprojectile_shared.h"
+
+#if !defined( CLIENT_DLL )
+#include "iscorer.h"
+#else
+#include "particle_prototype.h"
+#include "particles_simple.h"
+#include "particle_util.h"
+#include "c_baseplayer.h"
+#include "fx_sparks.h"
+#endif
+
+#if defined( CLIENT_DLL )
+#define CBasePlasmaProjectile C_BasePlasmaProjectile
+#endif
+
+#define MAX_HISTORY 5
+#define GUIDED_FADE_TIME 0.25f
+#define GUIDED_WIDTH 3
+
+struct PositionHistory_t
+{
+ DECLARE_PREDICTABLE();
+
+ Vector m_Position;
+ float m_Time;
+};
+
+// ------------------------------------------------------------------------ //
+// CBasePlasmaProjectile
+// ------------------------------------------------------------------------ //
+class CBasePlasmaProjectile : public CBaseParticleEntity
+#if !defined( CLIENT_DLL )
+, public IScorer
+#endif
+{
+ DECLARE_CLASS( CBasePlasmaProjectile, CBaseParticleEntity );
+public:
+ CBasePlasmaProjectile();
+ ~CBasePlasmaProjectile();
+
+ DECLARE_PREDICTABLE();
+ DECLARE_NETWORKCLASS();
+
+#if !defined( CLIENT_DLL )
+ DECLARE_DATADESC();
+#endif
+
+ virtual bool ProjectileHitShield( CBaseEntity *pOther, trace_t& tr );
+ virtual void HandleShieldImpact( CBaseEntity *pOther, trace_t& tr );
+
+ virtual void Spawn( void );
+ virtual void Precache( void );
+ virtual void Activate( void );
+
+ virtual void MissileTouch( CBaseEntity *pOther );
+ virtual float GetDamage( void );
+ virtual void SetDamage( float flDamage );
+ virtual void SetMaxRange( float flRange );
+ virtual void SetExplosive( float flRadius );
+ virtual void PerformCustomPhysics( Vector *pNewPosition, Vector *pNewVelocity, QAngle *pNewAngles, QAngle *pNewAngVelocity );
+
+ // Purpose: Returns the type of damage that this entity inflicts.
+ int GetDamageType() const
+ {
+ return m_DamageType;
+ }
+
+ virtual float GetSize( void ) { return 6.0; };
+
+ // FIXME!!!! Override the think of the baseparticle Think functions
+ virtual void Think( void ) { CBaseEntity::Think(); }
+
+ void SetupProjectile( const Vector &vecOrigin, const Vector &vecForward, int damageType, CBaseEntity *pOwner = NULL );
+ static CBasePlasmaProjectile *Create( const Vector &vecOrigin, const Vector &vecForward, int damageType, CBaseEntity *pOwner );
+ static CBasePlasmaProjectile *CreatePredicted( const Vector &vecOrigin, const Vector &vecForward, const Vector& gunOffset, int damageType, CBasePlayer *pOwner );
+
+ void RecalculatePositions( Vector *pNewPosition, Vector *pNewVelocity, QAngle *pNewAngles, QAngle *pNewAngVelocity );
+
+// IScorer
+public:
+ // Return the entity that should receive the score
+ virtual CBasePlayer *GetScorer( void );
+ // Return the entity that should get assistance credit
+ virtual CBasePlayer *GetAssistant( void ) { return NULL; };
+
+protected:
+ void Detonate( void );
+
+ // A derived class should return true here so that weapon sounds, etc, can
+ // apply the proper filter
+ virtual bool IsPredicted( void ) const
+ {
+ return true;
+ }
+
+#if defined( CLIENT_DLL )
+ virtual bool ShouldPredict( void )
+ {
+ if ( GetOwnerEntity() &&
+ GetOwnerEntity() == C_BasePlayer::GetLocalPlayer() )
+ return true;
+
+ return BaseClass::ShouldPredict();
+ }
+
+ virtual void OnDataChanged(DataUpdateType_t updateType);
+ virtual void Start(CParticleMgr *pParticleMgr, IPrototypeArgAccess *pArgs);
+ virtual bool SimulateAndRender(Particle *pParticle, ParticleDraw *pDraw, float &sortKey);
+
+ // Add the position to the history
+ void AddPositionToHistory( const Vector& org, float flSimTime );
+ void ResetPositionHistories( const Vector& org );
+ // Adjustments for shots straight out of local player's eyes
+ void RemapPosition( Vector &vecStart, float curtime, Vector& outpos );
+
+ // Scale
+ virtual float UpdateScale( SimpleParticle *pParticle, float timeDelta )
+ {
+ return (float)pParticle->m_uchStartSize + RandomInt( -2,2 );
+ }
+
+ // Alpha
+ virtual float UpdateAlpha( SimpleParticle *pParticle, float timeDelta )
+ {
+ return (pParticle->m_uchStartAlpha + RandomInt( -50, 0 ) ) / 255.0f;
+ }
+ virtual float UpdateRoll( SimpleParticle *pParticle, float timeDelta )
+ {
+ pParticle->m_flRoll += pParticle->m_flRollDelta * timeDelta;
+
+ return pParticle->m_flRoll;
+ }
+ virtual Vector UpdateColor( SimpleParticle *pParticle, float timeDelta )
+ {
+ static Vector cColor;
+
+ cColor[0] = pParticle->m_uchColor[0] / 255.0f;
+ cColor[1] = pParticle->m_uchColor[1] / 255.0f;
+ cColor[2] = pParticle->m_uchColor[2] / 255.0f;
+
+ return cColor;
+ }
+
+ // Should this object cast shadows?
+ virtual ShadowType_t ShadowCastType() { return SHADOWS_NONE; }
+
+ virtual void ClientThink( void );
+ virtual bool OnPredictedEntityRemove( bool isbeingremoved, C_BaseEntity *predicted );
+
+protected:
+ SimpleParticle *m_pHeadParticle;
+ TrailParticle *m_pTrailParticle;
+ CParticleMgr *m_pParticleMgr;
+ float m_flNextSparkEffect;
+#endif
+public:
+ EHANDLE m_hOwner;
+
+protected:
+ CNetworkVarEmbedded( CPlasmaProjectileShared, m_Shared );
+
+ Vector m_vecGunOriginOffset;
+
+ CNetworkVar( float, m_flPower );
+
+ // Explosive radius
+ float m_flExplosiveRadius;
+
+ // Maximum range
+ float m_flMaxRange;
+
+ float m_flDamage;
+ int m_DamageType;
+
+ Vector m_vecTargetOffset;
+
+ PositionHistory_t m_pPreviousPositions[MAX_HISTORY];
+
+private:
+ CBasePlasmaProjectile( const CBasePlasmaProjectile & );
+};
+
+#if defined( CLIENT_DLL )
+#define CPowerPlasmaProjectile C_PowerPlasmaProjectile
+#endif
+
+// ------------------------------------------------------------------------ //
+// Plasma projectile that has a concept of variable power
+// ------------------------------------------------------------------------ //
+class CPowerPlasmaProjectile : public CBasePlasmaProjectile
+{
+ DECLARE_CLASS( CPowerPlasmaProjectile, CBasePlasmaProjectile );
+public:
+ DECLARE_NETWORKCLASS();
+ DECLARE_PREDICTABLE();
+
+ CPowerPlasmaProjectile();
+
+ void SetPower( float flPower ) { m_flPower = flPower; };
+ static CPowerPlasmaProjectile* Create( const Vector &vecOrigin, const Vector &vecForward, int damageType, CBaseEntity *pOwner );
+ static CPowerPlasmaProjectile* CreatePredicted( const Vector &vecOrigin, const Vector &vecForward, const Vector& gunOffset, int damageType, CBasePlayer *pOwner );
+
+ virtual float GetSize( void );
+
+ // A derived class should return true here so that weapon sounds, etc, can
+ // apply the proper filter
+ virtual bool IsPredicted( void ) const
+ {
+ return true;
+ }
+
+#if defined( CLIENT_DLL )
+ virtual bool ShouldPredict( void )
+ {
+ if ( GetOwnerEntity() &&
+ GetOwnerEntity() == C_BasePlayer::GetLocalPlayer() )
+ return true;
+
+ return BaseClass::ShouldPredict();
+ }
+#endif
+
+private:
+ CPowerPlasmaProjectile( const CPowerPlasmaProjectile & );
+
+};
+
+#endif // PLASMAPROJECTILE_H