diff options
| author | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:31:46 -0800 |
|---|---|---|
| committer | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:46:31 -0800 |
| commit | f56bb35301836e56582a575a75864392a0177875 (patch) | |
| tree | de61ddd39de3e7df52759711950b4c288592f0dc /mp/src/game/client/c_fire_smoke.h | |
| parent | Mark some more files as text. (diff) | |
| download | source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.tar.xz source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.zip | |
Fix line endings. WHAMMY.
Diffstat (limited to 'mp/src/game/client/c_fire_smoke.h')
| -rw-r--r-- | mp/src/game/client/c_fire_smoke.h | 602 |
1 files changed, 301 insertions, 301 deletions
diff --git a/mp/src/game/client/c_fire_smoke.h b/mp/src/game/client/c_fire_smoke.h index 10a83ed3..9f7a94e1 100644 --- a/mp/src/game/client/c_fire_smoke.h +++ b/mp/src/game/client/c_fire_smoke.h @@ -1,302 +1,302 @@ -//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose:
-//
-// $NoKeywords: $
-//
-//=============================================================================//
-#ifndef C_FIRE_SMOKE_H
-#define C_FIRE_SMOKE_H
-
-#include "particles_simple.h"
-#include "tempent.h"
-#include "glow_overlay.h"
-#include "view.h"
-#include "particle_litsmokeemitter.h"
-
-class CFireOverlay;
-
-class C_FireSprite : public C_Sprite
-{
- DECLARE_CLASS( C_FireSprite, C_Sprite );
-
-private:
- virtual int DrawModel( int flags )
- {
- if ( m_bFadeFromAbove )
- {
- // The sprites become less visible the more you look down or up at them
- Vector vToPos = GetLocalOrigin() - CurrentViewOrigin();
- VectorNormalize( vToPos );
-
- float fUpAmount = vToPos.z;
-
- int iAlpha = 255;
-
- if ( fUpAmount < -0.75f )
- iAlpha = 0;
- else if ( fUpAmount < -0.65f )
- iAlpha = 255 - (int)( ( fUpAmount + 0.65f ) * 10.0f * -255.0f );
- else if ( fUpAmount > 0.85f )
- iAlpha = 0;
- else if ( fUpAmount > 0.75f )
- iAlpha = 255 - (int)( ( fUpAmount - 0.75f ) * 10.0f * 255.0f );
-
- SetColor( iAlpha, iAlpha, iAlpha );
- }
-
- return BaseClass::DrawModel( flags );
- }
-
-public:
- Vector m_vecMoveDir;
- bool m_bFadeFromAbove;
-};
-
-class C_FireFromAboveSprite : public C_Sprite
-{
- DECLARE_CLASS( C_FireFromAboveSprite, C_Sprite );
-
- virtual int DrawModel( int flags )
- {
- // The sprites become more visible the more you look down or up at them
- Vector vToPos = GetLocalOrigin() - CurrentViewOrigin();
- VectorNormalize( vToPos );
-
- float fUpAmount = vToPos.z;
-
- int iAlpha = 0;
-
- if ( fUpAmount < -0.85f )
- iAlpha = 255;
- else if ( fUpAmount < -0.65f )
- iAlpha = (int)( ( fUpAmount + 0.65f ) * 5.0f * -255.0f );
- else if ( fUpAmount > 0.75f )
- iAlpha = 255;
- else if ( fUpAmount > 0.55f )
- iAlpha = (int)( ( fUpAmount - 0.55f ) * 5.0f * 255.0f );
-
- SetColor( iAlpha, iAlpha, iAlpha );
-
- return BaseClass::DrawModel( flags );
- }
-};
-
-#ifdef _XBOX
-// XBox reduces the flame count
-#define NUM_CHILD_FLAMES 1
-#else
-#define NUM_CHILD_FLAMES 4
-#endif
-
-#define SMOKE_RISE_RATE 92.0f
-#define SMOKE_LIFETIME 2.0f
-#define EMBER_LIFETIME 2.0f
-
-#define FLAME_CHILD_SPREAD 64.0f
-#define FLAME_SOURCE_HEIGHT 128.0f
-#define FLAME_FROM_ABOVE_SOURCE_HEIGHT 32.0f
-
-//==================================================
-// C_FireSmoke
-//==================================================
-
-//NOTENOTE: Mirrored in dlls/fire_smoke.h
-#define bitsFIRESMOKE_NONE 0x00000000
-#define bitsFIRESMOKE_ACTIVE 0x00000001
-#define bitsFIRESMOKE_SMOKE 0x00000002
-#define bitsFIRESMOKE_SMOKE_COLLISION 0x00000004
-#define bitsFIRESMOKE_GLOW 0x00000008
-#define bitsFIRESMOKE_VISIBLE_FROM_ABOVE 0x00000010
-
-#define OVERLAY_MAX_VISIBLE_RANGE 512.0f
-
-
-class C_FireSmoke : public C_BaseEntity
-{
-public:
- DECLARE_CLIENTCLASS();
- DECLARE_CLASS( C_FireSmoke, C_BaseEntity );
-
- C_FireSmoke();
- ~C_FireSmoke();
-
- void Start( void );
- void Simulate( void );
-
- void StartClientOnly( void );
- void RemoveClientOnly( void );
-
-protected:
- void Update( void );
- void UpdateAnimation( void );
- void UpdateScale( void );
- void UpdateFlames( void );
- void AddFlames( void );
- void SpawnSmoke( void );
- void FindClipPlane( void );
-
-//C_BaseEntity
-public:
-
- virtual void OnDataChanged( DataUpdateType_t updateType );
- virtual bool ShouldDraw();
-
- float GetScale( void ) const { return m_flScaleRegister; }
-
-//From the server
-public:
- float m_flStartScale;
- float m_flScale;
- float m_flScaleTime;
- int m_nFlags;
- int m_nFlameModelIndex;
- int m_nFlameFromAboveModelIndex;
-
-//Client-side only
-public:
- float m_flScaleRegister;
- float m_flScaleStart;
- float m_flScaleEnd;
- float m_flScaleTimeStart;
- float m_flScaleTimeEnd;
- float m_flChildFlameSpread;
-
- VPlane m_planeClip;
- float m_flClipPerc;
- bool m_bClipTested;
-
- bool m_bFadingOut;
-
-protected:
-
- void UpdateEffects( void );
-
- //CSmartPtr<CEmberEffect> m_pEmberEmitter;
- CSmartPtr<CLitSmokeEmitter> m_pSmokeEmitter;
-
- C_FireSprite m_entFlames[NUM_CHILD_FLAMES];
- C_FireFromAboveSprite m_entFlamesFromAbove[NUM_CHILD_FLAMES];
- float m_entFlameScales[NUM_CHILD_FLAMES];
-
- TimedEvent m_tParticleSpawn;
-
- CFireOverlay *m_pFireOverlay;
-
- // New Particle Fire Effect
- CNewParticleEffect *m_hEffect;
-private:
- C_FireSmoke( const C_FireSmoke & );
-};
-
-//Fire overlay
-class CFireOverlay : public CGlowOverlay
-{
-public:
-
- //Constructor
- CFireOverlay( C_FireSmoke *owner )
- {
- m_pOwner = owner;
- m_flScale = 0.0f;
- m_nGUID = random->RandomInt( -999999, 999999 );
- }
-
- //-----------------------------------------------------------------------------
- // Purpose: Generate a flicker value
- // Output : scalar value
- //-----------------------------------------------------------------------------
- float GetFlickerScale( void )
- {
- float result = 0.0f;
-
- float time = Helper_GetTime() + m_nGUID;
-
- result = sin( time * 1000.0f );
- result += 0.5f * sin( time * 2000.0f );
- result -= 0.5f * cos( time * 8000.0f );
-
- return result;
- }
-
- //-----------------------------------------------------------------------------
- // Purpose: Update the overlay
- //-----------------------------------------------------------------------------
- virtual bool Update( void )
- {
- if ( m_pOwner == NULL )
- return false;
-
- float scale = m_pOwner->GetScale();
- float dscale = scale - m_flScale;
-
- m_vPos[2] += dscale * FLAME_SOURCE_HEIGHT;
- m_flScale = scale;
-
- scale *= 0.75f;
-
- float flickerScale = GetFlickerScale();
-
- float newScale = scale + ( scale * flickerScale * 0.1f );
-
- m_Sprites[0].m_flHorzSize = ( newScale * 0.2f ) + ( m_Sprites[0].m_flHorzSize * 0.8f );
- m_Sprites[0].m_flVertSize = m_Sprites[0].m_flHorzSize * 1.5f;
-
- float cameraDistance = ( CurrentViewOrigin() - (m_pOwner->GetAbsOrigin())).Length();
-
- C_BasePlayer *local = C_BasePlayer::GetLocalPlayer();
- if ( local )
- {
- cameraDistance *= local->GetFOVDistanceAdjustFactor();
- }
-
- if ( cameraDistance > OVERLAY_MAX_VISIBLE_RANGE )
- cameraDistance = OVERLAY_MAX_VISIBLE_RANGE;
-
- float alpha = 1.0f - ( cameraDistance / OVERLAY_MAX_VISIBLE_RANGE );
-
- Vector newColor = m_vBaseColors[0] + ( m_vBaseColors[0] * flickerScale * 0.5f );
- m_Sprites[0].m_vColor = ( newColor * 0.1f ) + ( m_Sprites[0].m_vColor * 0.9f ) * alpha;
-
- return true;
- }
-
-public:
-
- C_FireSmoke *m_pOwner;
- Vector m_vBaseColors[MAX_SUN_LAYERS];
- float m_flScale;
- int m_nGUID;
-};
-
-//
-// Entity flame, client-side implementation
-//
-
-#define NUM_FLAMELETS 5
-
-class C_EntityFlame : public C_BaseEntity
-{
-public:
- DECLARE_CLIENTCLASS();
- DECLARE_CLASS( C_EntityFlame, C_BaseEntity );
-
- C_EntityFlame( void );
- ~C_EntityFlame( void );
-
- virtual void Simulate( void );
- virtual void UpdateOnRemove( void );
- virtual void OnDataChanged( DataUpdateType_t updateType );
- virtual void ClientThink( void );
-
- CNewParticleEffect *m_hEffect;
- EHANDLE m_hEntAttached; // The entity that we are burning (attached to).
- EHANDLE m_hOldAttached;
-
-protected:
-
- void CreateEffect( void );
- void StopEffect( void );
-};
-
+//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +// +//=============================================================================// +#ifndef C_FIRE_SMOKE_H +#define C_FIRE_SMOKE_H + +#include "particles_simple.h" +#include "tempent.h" +#include "glow_overlay.h" +#include "view.h" +#include "particle_litsmokeemitter.h" + +class CFireOverlay; + +class C_FireSprite : public C_Sprite +{ + DECLARE_CLASS( C_FireSprite, C_Sprite ); + +private: + virtual int DrawModel( int flags ) + { + if ( m_bFadeFromAbove ) + { + // The sprites become less visible the more you look down or up at them + Vector vToPos = GetLocalOrigin() - CurrentViewOrigin(); + VectorNormalize( vToPos ); + + float fUpAmount = vToPos.z; + + int iAlpha = 255; + + if ( fUpAmount < -0.75f ) + iAlpha = 0; + else if ( fUpAmount < -0.65f ) + iAlpha = 255 - (int)( ( fUpAmount + 0.65f ) * 10.0f * -255.0f ); + else if ( fUpAmount > 0.85f ) + iAlpha = 0; + else if ( fUpAmount > 0.75f ) + iAlpha = 255 - (int)( ( fUpAmount - 0.75f ) * 10.0f * 255.0f ); + + SetColor( iAlpha, iAlpha, iAlpha ); + } + + return BaseClass::DrawModel( flags ); + } + +public: + Vector m_vecMoveDir; + bool m_bFadeFromAbove; +}; + +class C_FireFromAboveSprite : public C_Sprite +{ + DECLARE_CLASS( C_FireFromAboveSprite, C_Sprite ); + + virtual int DrawModel( int flags ) + { + // The sprites become more visible the more you look down or up at them + Vector vToPos = GetLocalOrigin() - CurrentViewOrigin(); + VectorNormalize( vToPos ); + + float fUpAmount = vToPos.z; + + int iAlpha = 0; + + if ( fUpAmount < -0.85f ) + iAlpha = 255; + else if ( fUpAmount < -0.65f ) + iAlpha = (int)( ( fUpAmount + 0.65f ) * 5.0f * -255.0f ); + else if ( fUpAmount > 0.75f ) + iAlpha = 255; + else if ( fUpAmount > 0.55f ) + iAlpha = (int)( ( fUpAmount - 0.55f ) * 5.0f * 255.0f ); + + SetColor( iAlpha, iAlpha, iAlpha ); + + return BaseClass::DrawModel( flags ); + } +}; + +#ifdef _XBOX +// XBox reduces the flame count +#define NUM_CHILD_FLAMES 1 +#else +#define NUM_CHILD_FLAMES 4 +#endif + +#define SMOKE_RISE_RATE 92.0f +#define SMOKE_LIFETIME 2.0f +#define EMBER_LIFETIME 2.0f + +#define FLAME_CHILD_SPREAD 64.0f +#define FLAME_SOURCE_HEIGHT 128.0f +#define FLAME_FROM_ABOVE_SOURCE_HEIGHT 32.0f + +//================================================== +// C_FireSmoke +//================================================== + +//NOTENOTE: Mirrored in dlls/fire_smoke.h +#define bitsFIRESMOKE_NONE 0x00000000 +#define bitsFIRESMOKE_ACTIVE 0x00000001 +#define bitsFIRESMOKE_SMOKE 0x00000002 +#define bitsFIRESMOKE_SMOKE_COLLISION 0x00000004 +#define bitsFIRESMOKE_GLOW 0x00000008 +#define bitsFIRESMOKE_VISIBLE_FROM_ABOVE 0x00000010 + +#define OVERLAY_MAX_VISIBLE_RANGE 512.0f + + +class C_FireSmoke : public C_BaseEntity +{ +public: + DECLARE_CLIENTCLASS(); + DECLARE_CLASS( C_FireSmoke, C_BaseEntity ); + + C_FireSmoke(); + ~C_FireSmoke(); + + void Start( void ); + void Simulate( void ); + + void StartClientOnly( void ); + void RemoveClientOnly( void ); + +protected: + void Update( void ); + void UpdateAnimation( void ); + void UpdateScale( void ); + void UpdateFlames( void ); + void AddFlames( void ); + void SpawnSmoke( void ); + void FindClipPlane( void ); + +//C_BaseEntity +public: + + virtual void OnDataChanged( DataUpdateType_t updateType ); + virtual bool ShouldDraw(); + + float GetScale( void ) const { return m_flScaleRegister; } + +//From the server +public: + float m_flStartScale; + float m_flScale; + float m_flScaleTime; + int m_nFlags; + int m_nFlameModelIndex; + int m_nFlameFromAboveModelIndex; + +//Client-side only +public: + float m_flScaleRegister; + float m_flScaleStart; + float m_flScaleEnd; + float m_flScaleTimeStart; + float m_flScaleTimeEnd; + float m_flChildFlameSpread; + + VPlane m_planeClip; + float m_flClipPerc; + bool m_bClipTested; + + bool m_bFadingOut; + +protected: + + void UpdateEffects( void ); + + //CSmartPtr<CEmberEffect> m_pEmberEmitter; + CSmartPtr<CLitSmokeEmitter> m_pSmokeEmitter; + + C_FireSprite m_entFlames[NUM_CHILD_FLAMES]; + C_FireFromAboveSprite m_entFlamesFromAbove[NUM_CHILD_FLAMES]; + float m_entFlameScales[NUM_CHILD_FLAMES]; + + TimedEvent m_tParticleSpawn; + + CFireOverlay *m_pFireOverlay; + + // New Particle Fire Effect + CNewParticleEffect *m_hEffect; +private: + C_FireSmoke( const C_FireSmoke & ); +}; + +//Fire overlay +class CFireOverlay : public CGlowOverlay +{ +public: + + //Constructor + CFireOverlay( C_FireSmoke *owner ) + { + m_pOwner = owner; + m_flScale = 0.0f; + m_nGUID = random->RandomInt( -999999, 999999 ); + } + + //----------------------------------------------------------------------------- + // Purpose: Generate a flicker value + // Output : scalar value + //----------------------------------------------------------------------------- + float GetFlickerScale( void ) + { + float result = 0.0f; + + float time = Helper_GetTime() + m_nGUID; + + result = sin( time * 1000.0f ); + result += 0.5f * sin( time * 2000.0f ); + result -= 0.5f * cos( time * 8000.0f ); + + return result; + } + + //----------------------------------------------------------------------------- + // Purpose: Update the overlay + //----------------------------------------------------------------------------- + virtual bool Update( void ) + { + if ( m_pOwner == NULL ) + return false; + + float scale = m_pOwner->GetScale(); + float dscale = scale - m_flScale; + + m_vPos[2] += dscale * FLAME_SOURCE_HEIGHT; + m_flScale = scale; + + scale *= 0.75f; + + float flickerScale = GetFlickerScale(); + + float newScale = scale + ( scale * flickerScale * 0.1f ); + + m_Sprites[0].m_flHorzSize = ( newScale * 0.2f ) + ( m_Sprites[0].m_flHorzSize * 0.8f ); + m_Sprites[0].m_flVertSize = m_Sprites[0].m_flHorzSize * 1.5f; + + float cameraDistance = ( CurrentViewOrigin() - (m_pOwner->GetAbsOrigin())).Length(); + + C_BasePlayer *local = C_BasePlayer::GetLocalPlayer(); + if ( local ) + { + cameraDistance *= local->GetFOVDistanceAdjustFactor(); + } + + if ( cameraDistance > OVERLAY_MAX_VISIBLE_RANGE ) + cameraDistance = OVERLAY_MAX_VISIBLE_RANGE; + + float alpha = 1.0f - ( cameraDistance / OVERLAY_MAX_VISIBLE_RANGE ); + + Vector newColor = m_vBaseColors[0] + ( m_vBaseColors[0] * flickerScale * 0.5f ); + m_Sprites[0].m_vColor = ( newColor * 0.1f ) + ( m_Sprites[0].m_vColor * 0.9f ) * alpha; + + return true; + } + +public: + + C_FireSmoke *m_pOwner; + Vector m_vBaseColors[MAX_SUN_LAYERS]; + float m_flScale; + int m_nGUID; +}; + +// +// Entity flame, client-side implementation +// + +#define NUM_FLAMELETS 5 + +class C_EntityFlame : public C_BaseEntity +{ +public: + DECLARE_CLIENTCLASS(); + DECLARE_CLASS( C_EntityFlame, C_BaseEntity ); + + C_EntityFlame( void ); + ~C_EntityFlame( void ); + + virtual void Simulate( void ); + virtual void UpdateOnRemove( void ); + virtual void OnDataChanged( DataUpdateType_t updateType ); + virtual void ClientThink( void ); + + CNewParticleEffect *m_hEffect; + EHANDLE m_hEntAttached; // The entity that we are burning (attached to). + EHANDLE m_hOldAttached; + +protected: + + void CreateEffect( void ); + void StopEffect( void ); +}; + #endif //C_FIRE_SMOKE_H
\ No newline at end of file |