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/client/c_te_legacytempents.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/client/c_te_legacytempents.h')
| -rw-r--r-- | game/client/c_te_legacytempents.h | 221 |
1 files changed, 221 insertions, 0 deletions
diff --git a/game/client/c_te_legacytempents.h b/game/client/c_te_legacytempents.h new file mode 100644 index 0000000..038eecc --- /dev/null +++ b/game/client/c_te_legacytempents.h @@ -0,0 +1,221 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $Workfile: $ +// $Date: $ +// $NoKeywords: $ +//=============================================================================// +#if !defined( C_TE_LEGACYTEMPENTS_H ) +#define C_TE_LEGACYTEMPENTS_H +#ifdef _WIN32 +#pragma once +#endif + +class C_BaseEntity; +class C_LocalTempEntity; +struct model_t; + +#include "mempool.h" +#include "utllinkedlist.h" + +#if defined( CSTRIKE_DLL ) || defined( SDK_DLL ) +enum +{ + CS_SHELL_9MM = 0, + CS_SHELL_57, + CS_SHELL_12GAUGE, + CS_SHELL_556, + CS_SHELL_762NATO, + CS_SHELL_338MAG +}; +#endif + +//----------------------------------------------------------------------------- +// Purpose: Interface for lecacy temp entities +//----------------------------------------------------------------------------- +abstract_class ITempEnts +{ +public: + virtual ~ITempEnts() {} + + virtual void Init( void ) = 0; + virtual void Shutdown( void ) = 0; + virtual void LevelInit() = 0; + virtual void LevelShutdown() = 0; + + virtual void Update( void ) = 0; + virtual void Clear( void ) = 0; + + virtual C_LocalTempEntity *FindTempEntByID( int nID, int nSubID ) = 0; + + virtual void BloodSprite( const Vector &org, int r, int g, int b, int a, int modelIndex, int modelIndex2, float size ) = 0; + virtual void RicochetSprite( const Vector &pos, model_t *pmodel, float duration, float scale ) = 0; + virtual void MuzzleFlash( int type, ClientEntityHandle_t hEntity, int attachmentIndex, bool firstPerson ) = 0; + virtual void MuzzleFlash( const Vector &pos1, const QAngle &angles, int type, ClientEntityHandle_t hEntity, bool firstPerson ) = 0; + virtual void EjectBrass( const Vector& pos1, const QAngle& angles, const QAngle& gunAngles, int type ) = 0; + virtual C_LocalTempEntity *SpawnTempModel( const model_t *pModel, const Vector &vecOrigin, const QAngle &vecAngles, const Vector &vecVelocity, float flLifeTime, int iFlags ) = 0; + virtual void BreakModel( const Vector &pos, const QAngle &angles, const Vector &size, const Vector &dir, float random, float life, int count, int modelIndex, char flags) = 0; + virtual void Bubbles( const Vector &mins, const Vector &maxs, float height, int modelIndex, int count, float speed ) = 0; + virtual void BubbleTrail( const Vector &start, const Vector &end, float flWaterZ, int modelIndex, int count, float speed ) = 0; + virtual void Sprite_Explode( C_LocalTempEntity *pTemp, float scale, int flags ) = 0; + virtual void FizzEffect( C_BaseEntity *pent, int modelIndex, int density, int current ) = 0; + virtual C_LocalTempEntity *DefaultSprite( const Vector &pos, int spriteIndex, float framerate ) = 0; + virtual void Sprite_Smoke( C_LocalTempEntity *pTemp, float scale ) = 0; + virtual C_LocalTempEntity *TempSprite( const Vector &pos, const Vector &dir, float scale, int modelIndex, int rendermode, int renderfx, float a, float life, int flags, const Vector &normal = vec3_origin ) = 0; + virtual void AttachTentToPlayer( int client, int modelIndex, float zoffset, float life ) = 0; + virtual void KillAttachedTents( int client ) = 0; + virtual void Sprite_Spray( const Vector &pos, const Vector &dir, int modelIndex, int count, int speed, int iRand ) = 0; + virtual void Sprite_Trail( const Vector &vecStart, const Vector &vecEnd, int modelIndex, int nCount, float flLife, float flSize, float flAmplitude, int nRenderamt, float flSpeed ) = 0; + virtual void RocketFlare( const Vector& pos ) = 0; + virtual void HL1EjectBrass( const Vector &vecPosition, const QAngle &angAngles, const Vector &vecVelocity, int nType ) = 0; + virtual void CSEjectBrass( const Vector &vecPosition, const QAngle &angVelocity, int nType, int nShellType, CBasePlayer *pShooter ) = 0; + + virtual void PlaySound ( C_LocalTempEntity *pTemp, float damp ) = 0; + virtual void PhysicsProp( int modelindex, int skin, const Vector& pos, const QAngle &angles, const Vector& vel, int flags, int effects = 0 ) = 0; + virtual C_LocalTempEntity *ClientProjectile( const Vector& vecOrigin, const Vector& vecVelocity, const Vector& vecAccel, int modelindex, int lifetime, CBaseEntity *pOwner, const char *pszImpactEffect = NULL, const char *pszParticleEffect = NULL ) = 0; +}; + + +//----------------------------------------------------------------------------- +// Purpose: Default implementation of the temp entity interface +//----------------------------------------------------------------------------- +class CTempEnts : public ITempEnts +{ +// Construction +public: + CTempEnts( void ); + virtual ~CTempEnts( void ); +// Exposed interface +public: + virtual void Init( void ); + virtual void Shutdown( void ); + + virtual void LevelInit(); + + virtual void LevelShutdown(); + + virtual void Update( void ); + virtual void Clear( void ); + + virtual C_LocalTempEntity *FindTempEntByID( int nID, int nSubID ); + + // Legacy temp entities still supported + virtual void BloodSprite( const Vector &org, int r, int g, int b, int a, int modelIndex, int modelIndex2, float size ); + virtual void RicochetSprite( const Vector &pos, model_t *pmodel, float duration, float scale ); + + virtual void MuzzleFlash( int type, ClientEntityHandle_t hEntity, int attachmentIndex, bool firstPerson ); + virtual void MuzzleFlash( const Vector &pos1, const QAngle &angles, int type, ClientEntityHandle_t hEntity, bool firstPerson = false ); + + virtual void BreakModel(const Vector &pos, const QAngle &angles, const Vector &size, const Vector &dir, float random, float life, int count, int modelIndex, char flags); + virtual void Bubbles( const Vector &mins, const Vector &maxs, float height, int modelIndex, int count, float speed ); + virtual void BubbleTrail( const Vector &start, const Vector &end, float height, int modelIndex, int count, float speed ); + virtual void Sprite_Explode( C_LocalTempEntity *pTemp, float scale, int flags ); + virtual void FizzEffect( C_BaseEntity *pent, int modelIndex, int density, int current ); + virtual C_LocalTempEntity *DefaultSprite( const Vector &pos, int spriteIndex, float framerate ); + virtual void Sprite_Smoke( C_LocalTempEntity *pTemp, float scale ); + virtual C_LocalTempEntity *TempSprite( const Vector &pos, const Vector &dir, float scale, int modelIndex, int rendermode, int renderfx, float a, float life, int flags, const Vector &normal = vec3_origin ); + virtual void AttachTentToPlayer( int client, int modelIndex, float zoffset, float life ); + virtual void KillAttachedTents( int client ); + virtual void Sprite_Spray( const Vector &pos, const Vector &dir, int modelIndex, int count, int speed, int iRand ); + void Sprite_Trail( const Vector &vecStart, const Vector &vecEnd, int modelIndex, int nCount, float flLife, float flSize, float flAmplitude, int nRenderamt, float flSpeed ); + + virtual void PlaySound ( C_LocalTempEntity *pTemp, float damp ); + virtual void EjectBrass( const Vector &pos1, const QAngle &angles, const QAngle &gunAngles, int type ); + virtual C_LocalTempEntity *SpawnTempModel( const model_t *pModel, const Vector &vecOrigin, const QAngle &vecAngles, const Vector &vecVelocity, float flLifeTime, int iFlags ); + void RocketFlare( const Vector& pos ); + void HL1EjectBrass( const Vector &vecPosition, const QAngle &angAngles, const Vector &vecVelocity, int nType ); + void CSEjectBrass( const Vector &vecPosition, const QAngle &angAngles, int nType, int nShellType, CBasePlayer *pShooter ); + void PhysicsProp( int modelindex, int skin, const Vector& pos, const QAngle &angles, const Vector& vel, int flags, int effects = 0 ); + C_LocalTempEntity *ClientProjectile( const Vector& vecOrigin, const Vector& vecVelocity, const Vector& vecAcceleration, int modelindex, int lifetime, CBaseEntity *pOwner, const char *pszImpactEffect = NULL, const char *pszParticleEffect = NULL ); + +// Data +public: + enum + { + MAX_TEMP_ENTITIES = 500, + MAX_TEMP_ENTITY_SPRITES = 200, + MAX_TEMP_ENTITY_STUDIOMODEL = 50, + }; + +private: + // Global temp entity pool + CClassMemoryPool< C_LocalTempEntity > m_TempEntsPool; + CUtlLinkedList< C_LocalTempEntity *, unsigned short > m_TempEnts; + + // Muzzle flash sprites + struct model_t *m_pSpriteMuzzleFlash[10]; + struct model_t *m_pSpriteAR2Flash[4]; + struct model_t *m_pShells[3]; + struct model_t *m_pSpriteCombineFlash[2]; + +#if defined( HL1_CLIENT_DLL ) + struct model_t *m_pHL1Shell; + struct model_t *m_pHL1ShotgunShell; +#endif + +#if defined( CSTRIKE_DLL ) || defined ( SDK_DLL ) + struct model_t *m_pCS_9MMShell; + struct model_t *m_pCS_57Shell; + struct model_t *m_pCS_12GaugeShell; + struct model_t *m_pCS_556Shell; + struct model_t *m_pCS_762NATOShell; + struct model_t *m_pCS_338MAGShell; +#endif + +// Internal methods also available to children +protected: + C_LocalTempEntity *TempEntAlloc( const Vector& org, const model_t *model ); + C_LocalTempEntity *TempEntAllocHigh( const Vector& org, const model_t *model ); + +// Material handle caches +private: + + inline void CacheMuzzleFlashes( void ); + PMaterialHandle m_Material_MuzzleFlash_Player[4]; + PMaterialHandle m_Material_MuzzleFlash_NPC[4]; + PMaterialHandle m_Material_Combine_MuzzleFlash_Player[2]; + PMaterialHandle m_Material_Combine_MuzzleFlash_NPC[2]; + +// Internal methods +private: + CTempEnts( const CTempEnts & ); + + void TempEntFree( int index ); + C_LocalTempEntity *TempEntAlloc(); + bool FreeLowPriorityTempEnt(); + + int AddVisibleTempEntity( C_LocalTempEntity *pEntity ); + + // AR2 + void MuzzleFlash_AR2_Player( const Vector &origin, const QAngle &angles, ClientEntityHandle_t hEntity ); + void MuzzleFlash_AR2_NPC( const Vector &origin, const QAngle &angles, ClientEntityHandle_t hEntity ); + + // SMG1 + void MuzzleFlash_SMG1_Player( ClientEntityHandle_t hEntity, int attachmentIndex ); + void MuzzleFlash_SMG1_NPC( ClientEntityHandle_t hEntity, int attachmentIndex ); + + // Shotgun + void MuzzleFlash_Shotgun_Player( ClientEntityHandle_t hEntity, int attachmentIndex ); + void MuzzleFlash_Shotgun_NPC( ClientEntityHandle_t hEntity, int attachmentIndex ); + + // Pistol + void MuzzleFlash_Pistol_Player( ClientEntityHandle_t hEntity, int attachmentIndex ); + void MuzzleFlash_Pistol_NPC( ClientEntityHandle_t hEntity, int attachmentIndex ); + + // Combine + void MuzzleFlash_Combine_Player( ClientEntityHandle_t hEntity, int attachmentIndex ); + void MuzzleFlash_Combine_NPC( ClientEntityHandle_t hEntity, int attachmentIndex ); + + // 357 + void MuzzleFlash_357_Player( ClientEntityHandle_t hEntity, int attachmentIndex ); + + // RPG + void MuzzleFlash_RPG_NPC( ClientEntityHandle_t hEntity, int attachmentIndex ); +}; + + +extern ITempEnts *tempents; + + +#endif // C_TE_LEGACYTEMPENTS_H |