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/tempent.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/client/tempent.h')
| -rw-r--r-- | game/client/tempent.h | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/game/client/tempent.h b/game/client/tempent.h new file mode 100644 index 0000000..16b5653 --- /dev/null +++ b/game/client/tempent.h @@ -0,0 +1,148 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +// +//=============================================================================// +#if !defined( TEMPENT_H ) +#define TEMPENT_H +#ifdef _WIN32 +#pragma once +#endif + +#include "c_baseentity.h" +#include "c_baseanimating.h" +#include "c_sprite.h" + +// Temporary entity array +#define TENTPRIORITY_LOW 0 +#define TENTPRIORITY_HIGH 1 + +// TEMPENTITY flags +#define FTENT_NONE 0x00000000 +#define FTENT_SINEWAVE 0x00000001 +#define FTENT_GRAVITY 0x00000002 +#define FTENT_ROTATE 0x00000004 +#define FTENT_SLOWGRAVITY 0x00000008 +#define FTENT_SMOKETRAIL 0x00000010 +#define FTENT_COLLIDEWORLD 0x00000020 +#define FTENT_FLICKER 0x00000040 +#define FTENT_FADEOUT 0x00000080 +#define FTENT_SPRANIMATE 0x00000100 +#define FTENT_HITSOUND 0x00000200 +#define FTENT_SPIRAL 0x00000400 +#define FTENT_SPRCYCLE 0x00000800 +#define FTENT_COLLIDEALL 0x00001000 // will collide with world and slideboxes +#define FTENT_PERSIST 0x00002000 // tent is not removed when unable to draw +#define FTENT_COLLIDEKILL 0x00004000 // tent is removed upon collision with anything +#define FTENT_PLYRATTACHMENT 0x00008000 // tent is attached to a player (owner) +#define FTENT_SPRANIMATELOOP 0x00010000 // animating sprite doesn't die when last frame is displayed +#define FTENT_SMOKEGROWANDFADE 0x00020000 // rapid grow and fade. Very specific for gunsmoke +#define FTENT_ATTACHTOTARGET 0x00040000 // attach to whatever we hit, and stay there until die time is up +#define FTENT_NOMODEL 0x00080000 // Doesn't have a model, never try to draw ( it just triggers other things ) +#define FTENT_CLIENTCUSTOM 0x00100000 // Must specify callback. Callback function is responsible for killing tempent and updating fields ( unless other flags specify how to do things ) +#define FTENT_WINDBLOWN 0x00200000 // This is set when the temp entity is blown by the wind +#define FTENT_NEVERDIE 0x00400000 // Don't die as long as die != 0 +#define FTENT_BEOCCLUDED 0x00800000 // Don't draw if my specified normal's facing away from the view +#define FTENT_CHANGERENDERONCOLLIDE 0x01000000 //when we collide with something, change our rendergroup to RENDER_GROUP_OTHER +#define FTENT_COLLISIONGROUP 0x02000000 // if set, use the C_BaseEntity::GetCollisionGroup when doing collide trace +#define FTENT_ALIGNTOMOTION 0x04000000 // Change angles to always point in the direction of motion +#define FTENT_CLIENTSIDEPARTICLES 0x08000000 // The object has a clientside particle system. +#define FTENT_USEFASTCOLLISIONS 0x10000000 // Use fast collisions (cl_fasttempentcollision). +#define FTENT_COLLIDEPROPS 0x20000000 // Collide with the world and props + +class C_LocalTempEntity; + +typedef int (*pfnDrawHelper)( C_LocalTempEntity *entity, int flags ); + +//----------------------------------------------------------------------------- +// Purpose: Should this derive from some other class +//----------------------------------------------------------------------------- +class C_LocalTempEntity : public C_BaseAnimating, public C_SpriteRenderer +{ +public: + DECLARE_CLASS( C_LocalTempEntity, C_BaseAnimating ); + + C_LocalTempEntity(); + + virtual void Prepare( const model_t *pmodel, float time ); + + virtual bool IsActive( void ); + virtual bool Frame( float frametime, int framenumber ); + + // C_BaseAnimating , etc. override + virtual int DrawModel( int flags ); + + // Sets the velocity + void SetVelocity( const Vector &vecVelocity ); + const Vector &GetVelocity() const { return m_vecTempEntVelocity; } + + // Set the acceleration + void SetAcceleration( const Vector &vecAccel ); + const Vector &GetAcceleration() const { return m_vecTempEntAcceleration; } + + void SetDrawHelper( pfnDrawHelper helper ) { m_pfnDrawHelper = helper; } + void OnRemoveTempEntity(); + + void SetImpactEffect( const char *pszImpactEffect ) { m_pszImpactEffect = pszImpactEffect; } + CNewParticleEffect* AddParticleEffect( const char *pszParticleEffect ); + void SetParticleEffect( const char *pszParticleEffect ) { m_pszParticleEffect = pszParticleEffect; } + +protected: + + pfnDrawHelper m_pfnDrawHelper; + +public: + int flags; + float die; + float m_flFrameMax; + float x; + float y; + float fadeSpeed; + float bounceFactor; + int hitSound; + int priority; + // if attached, this is the index of the client to stick to + // if COLLIDEALL, this is the index of the client to ignore + // TENTS with FTENT_PLYRATTACHMENT MUST set the clientindex! + short clientIndex; + + // if attached, client origin + tentOffset = tent origin. + Vector tentOffset; + + // Used by temp entities. + QAngle m_vecTempEntAngVelocity; + int tempent_renderamt; + Vector m_vecNormal; + + float m_flSpriteScale; + int m_nFlickerFrame; + + // + float m_flFrameRate; + float m_flFrame; + + RenderGroup_t m_RenderGroup; + + const char *m_pszImpactEffect; + const char *m_pszParticleEffect; + bool m_bParticleCollision; + + int m_iLastCollisionFrame; + Vector m_vLastCollisionOrigin; + +private: + C_LocalTempEntity( const C_LocalTempEntity & ); + + Vector m_vecTempEntVelocity; + Vector m_vecPrevLocalOrigin; + + Vector m_vecTempEntAcceleration; + + // Draw tempent as a studio model + int DrawStudioModel( int flags ); + +}; + +#endif // TEMPENTITY_H
\ No newline at end of file |