aboutsummaryrefslogtreecommitdiff
path: root/mp/src/game/client/tempent.h
diff options
context:
space:
mode:
Diffstat (limited to 'mp/src/game/client/tempent.h')
-rw-r--r--mp/src/game/client/tempent.h148
1 files changed, 148 insertions, 0 deletions
diff --git a/mp/src/game/client/tempent.h b/mp/src/game/client/tempent.h
new file mode 100644
index 00000000..5e6a6ae2
--- /dev/null
+++ b/mp/src/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