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_te_particlesystem.cpp | |
| 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_te_particlesystem.cpp')
| -rw-r--r-- | mp/src/game/client/c_te_particlesystem.cpp | 564 |
1 files changed, 282 insertions, 282 deletions
diff --git a/mp/src/game/client/c_te_particlesystem.cpp b/mp/src/game/client/c_te_particlesystem.cpp index 72e21f38..b89b7b41 100644 --- a/mp/src/game/client/c_te_particlesystem.cpp +++ b/mp/src/game/client/c_te_particlesystem.cpp @@ -1,282 +1,282 @@ -//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose:
-//
-// $NoKeywords: $
-//
-//=============================================================================//
-#include "cbase.h"
-#include "c_te_particlesystem.h"
-#include "movevars_shared.h"
-
-// memdbgon must be the last include file in a .cpp file!!!
-#include "tier0/memdbgon.h"
-
-int ramp1[][3] =
-{
- { 255, 243, 227 },
- { 223, 171, 39 },
- { 191, 119, 47 },
- { 127, 59, 43 },
- { 99, 47, 31 },
- { 75, 35, 19 },
- { 47, 23, 11 },
- { 175, 103, 35 },
-};
-
-int ramp2[][3] =
-{
- { 255, 243, 227 },
- { 239, 203, 31 },
- { 223, 171, 39 },
- { 207, 143, 43 },
- { 191, 119, 47 },
- { 175, 99, 47 },
- { 143, 67, 51 },
- { 115, 55, 35 },
-};
-
-int ramp3[][3] =
-{
- { 223, 171, 39 },
- { 191, 119, 47 },
- { 91, 91, 91 },
- { 75, 75, 75 },
- { 63, 63, 63 },
- { 47, 47, 47 },
-};
-
-#define SPARK_COLORCOUNT 9
-
-int gSparkRamp[ SPARK_COLORCOUNT ][3] =
-{
- { 255, 255, 255 },
- { 255, 247, 199 },
- { 255, 243, 147 },
- { 255, 243, 27 },
- { 239, 203, 31 },
- { 223, 171, 39 },
- { 207, 143, 43 },
- { 127, 59, 43 },
- { 35, 19, 7 }
-};
-
-
-
-// ------------------------------------------------------------------------ //
-// C_TEParticleSystem.
-// ------------------------------------------------------------------------ //
-
-IMPLEMENT_CLIENTCLASS_DT(C_TEParticleSystem, DT_TEParticleSystem, CTEParticleSystem)
- RecvPropFloat( RECVINFO(m_vecOrigin[0]) ),
- RecvPropFloat( RECVINFO(m_vecOrigin[1]) ),
- RecvPropFloat( RECVINFO(m_vecOrigin[2]) ),
-END_RECV_TABLE()
-
-
-C_TEParticleSystem::C_TEParticleSystem()
-{
- m_vecOrigin.Init();
-}
-
-
-
-// ------------------------------------------------------------------------ //
-// CTEParticleRenderer implementation.
-// ------------------------------------------------------------------------ //
-
-CTEParticleRenderer::CTEParticleRenderer( const char *pDebugName ) :
- CParticleEffect( pDebugName )
-{
- m_ParticleSize = 1.5f;
- m_MaterialHandle = INVALID_MATERIAL_HANDLE;
-}
-
-
-CTEParticleRenderer::~CTEParticleRenderer()
-{
-}
-
-
-CSmartPtr<CTEParticleRenderer> CTEParticleRenderer::Create( const char *pDebugName, const Vector &vOrigin )
-{
- CTEParticleRenderer *pRet = new CTEParticleRenderer( pDebugName );
- if( pRet )
- {
- pRet->SetDynamicallyAllocated( true );
- pRet->SetSortOrigin( vOrigin );
- }
-
- return pRet;
-}
-
-
-StandardParticle_t* CTEParticleRenderer::AddParticle()
-{
- if(m_MaterialHandle == INVALID_MATERIAL_HANDLE)
- {
- m_MaterialHandle = m_ParticleEffect.FindOrAddMaterial("particle/particledefault");
- }
-
- StandardParticle_t *pParticle =
- (StandardParticle_t*)BaseClass::AddParticle( sizeof(StandardParticle_t), m_MaterialHandle, m_vSortOrigin );
-
- if(pParticle)
- pParticle->m_EffectDataWord = 0; // (ramp)
-
- return pParticle;
-}
-
-
-void CTEParticleRenderer::RenderParticles( CParticleRenderIterator *pIterator )
-{
- const StandardParticle_t *pParticle = (const StandardParticle_t*)pIterator->GetFirst();
- while ( pParticle )
- {
- // Render.
- Vector tPos;
- TransformParticle(ParticleMgr()->GetModelView(), pParticle->m_Pos, tPos);
- float sortKey = tPos.z;
-
- Vector vColor(pParticle->m_Color[0]/255.9f, pParticle->m_Color[1]/255.9f, pParticle->m_Color[2]/255.9f);
- RenderParticle_ColorSize(
- pIterator->GetParticleDraw(),
- tPos,
- vColor,
- pParticle->m_Color[3]/255.9f,
- m_ParticleSize);
-
- pParticle = (const StandardParticle_t*)pIterator->GetNext( sortKey );
- }
-}
-
-void CTEParticleRenderer::SimulateParticles( CParticleSimulateIterator *pIterator )
-{
- StandardParticle_t *pParticle = (StandardParticle_t*)pIterator->GetFirst();
- while ( pParticle )
- {
- // Remove the particle?
- SetParticleLifetime(pParticle, GetParticleLifetime(pParticle) - pIterator->GetTimeDelta());
- if(GetParticleLifetime(pParticle) < 0)
- {
- pIterator->RemoveParticle( pParticle );
- }
- else
- {
- float ft = pIterator->GetTimeDelta();
- float time3 = 15.0 * ft;
- float time2 = 10.0 * ft;
- float time1 = 5.0 * ft;
- float dvel = 4* ft ;
-
- float grav = ft * GetCurrentGravity() * 0.05f;
-
- int (*colorIndex)[3];
- int iRamp;
-
- switch(GetParticleType(pParticle))
- {
- case pt_static:
- break;
-
- case pt_fire:
- pParticle->m_EffectDataWord += (unsigned short)(time1 * (1 << SIMSHIFT));
- iRamp = pParticle->m_EffectDataWord >> SIMSHIFT;
- if(iRamp >= 6)
- {
- pParticle->m_Lifetime = -1;
- }
- else
- {
- colorIndex = &ramp3[ iRamp ];
- pParticle->SetColor((float)(*colorIndex)[0] / 255.0f, (float)(*colorIndex)[1] / 255.0f, (float)(*colorIndex)[2] / 255.0f);
- }
- pParticle->m_Velocity[2] += grav;
- break;
-
- case pt_explode:
- pParticle->m_EffectDataWord += (unsigned short)(time2 * (1 << SIMSHIFT));
- iRamp = pParticle->m_EffectDataWord >> SIMSHIFT;
- if(iRamp >= 8)
- {
- pParticle->m_Lifetime = -1;
- }
- else
- {
- colorIndex = &ramp1[ iRamp ];
- pParticle->SetColor((float)(*colorIndex)[0] / 255.0f, (float)(*colorIndex)[1] / 255.0f, (float)(*colorIndex)[2] / 255.0f);
- }
- pParticle->m_Velocity = pParticle->m_Velocity + pParticle->m_Velocity * dvel;
- pParticle->m_Velocity[2] -= grav;
- break;
-
- case pt_explode2:
- pParticle->m_EffectDataWord += (unsigned short)(time3 * (1 << SIMSHIFT));
- iRamp = pParticle->m_EffectDataWord >> SIMSHIFT;
- if(iRamp >= 8)
- {
- pParticle->m_Lifetime = -1;
- }
- else
- {
- colorIndex = &ramp2[ iRamp ];
- pParticle->SetColor((float)(*colorIndex)[0] / 255.0f, (float)(*colorIndex)[1] / 255.0f, (float)(*colorIndex)[2] / 255.0f);
- }
- pParticle->m_Velocity = pParticle->m_Velocity - pParticle->m_Velocity * ft;
- pParticle->m_Velocity[2] -= grav;
- break;
-
- case pt_grav:
- pParticle->m_Velocity[2] -= grav * 20;
- break;
- case pt_slowgrav:
- pParticle->m_Velocity[2] = grav;
- break;
-
- case pt_vox_grav:
- pParticle->m_Velocity[2] -= grav * 8;
- break;
-
- case pt_vox_slowgrav:
- pParticle->m_Velocity[2] -= grav * 4;
- break;
-
-
- case pt_blob:
- case pt_blob2:
- pParticle->m_EffectDataWord += (unsigned short)(time2 * (1 << SIMSHIFT));
- iRamp = pParticle->m_EffectDataWord >> SIMSHIFT;
- if(iRamp >= SPARK_COLORCOUNT)
- {
- pParticle->m_EffectDataWord = 0;
- iRamp = 0;
- }
-
- colorIndex = &gSparkRamp[ iRamp ];
- pParticle->SetColor((float)(*colorIndex)[0] / 255.0f, (float)(*colorIndex)[1] / 255.0f, (float)(*colorIndex)[2] / 255.0f);
-
- pParticle->m_Velocity[0] -= pParticle->m_Velocity[0]*0.5*ft;
- pParticle->m_Velocity[1] -= pParticle->m_Velocity[1]*0.5*ft;
- pParticle->m_Velocity[2] -= grav * 5;
-
- if ( random->RandomInt(0,3) )
- {
- SetParticleType(pParticle, pt_blob);
- pParticle->SetAlpha(0);
- }
- else
- {
- SetParticleType(pParticle, pt_blob2);
- pParticle->SetAlpha(255.9f);
- }
- break;
- }
- // Update position.
- pParticle->m_Pos = pParticle->m_Pos + pParticle->m_Velocity * ft;
- }
-
- pParticle = (StandardParticle_t*)pIterator->GetNext();
- }
-}
-
-
+//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +// +//=============================================================================// +#include "cbase.h" +#include "c_te_particlesystem.h" +#include "movevars_shared.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +int ramp1[][3] = +{ + { 255, 243, 227 }, + { 223, 171, 39 }, + { 191, 119, 47 }, + { 127, 59, 43 }, + { 99, 47, 31 }, + { 75, 35, 19 }, + { 47, 23, 11 }, + { 175, 103, 35 }, +}; + +int ramp2[][3] = +{ + { 255, 243, 227 }, + { 239, 203, 31 }, + { 223, 171, 39 }, + { 207, 143, 43 }, + { 191, 119, 47 }, + { 175, 99, 47 }, + { 143, 67, 51 }, + { 115, 55, 35 }, +}; + +int ramp3[][3] = +{ + { 223, 171, 39 }, + { 191, 119, 47 }, + { 91, 91, 91 }, + { 75, 75, 75 }, + { 63, 63, 63 }, + { 47, 47, 47 }, +}; + +#define SPARK_COLORCOUNT 9 + +int gSparkRamp[ SPARK_COLORCOUNT ][3] = +{ + { 255, 255, 255 }, + { 255, 247, 199 }, + { 255, 243, 147 }, + { 255, 243, 27 }, + { 239, 203, 31 }, + { 223, 171, 39 }, + { 207, 143, 43 }, + { 127, 59, 43 }, + { 35, 19, 7 } +}; + + + +// ------------------------------------------------------------------------ // +// C_TEParticleSystem. +// ------------------------------------------------------------------------ // + +IMPLEMENT_CLIENTCLASS_DT(C_TEParticleSystem, DT_TEParticleSystem, CTEParticleSystem) + RecvPropFloat( RECVINFO(m_vecOrigin[0]) ), + RecvPropFloat( RECVINFO(m_vecOrigin[1]) ), + RecvPropFloat( RECVINFO(m_vecOrigin[2]) ), +END_RECV_TABLE() + + +C_TEParticleSystem::C_TEParticleSystem() +{ + m_vecOrigin.Init(); +} + + + +// ------------------------------------------------------------------------ // +// CTEParticleRenderer implementation. +// ------------------------------------------------------------------------ // + +CTEParticleRenderer::CTEParticleRenderer( const char *pDebugName ) : + CParticleEffect( pDebugName ) +{ + m_ParticleSize = 1.5f; + m_MaterialHandle = INVALID_MATERIAL_HANDLE; +} + + +CTEParticleRenderer::~CTEParticleRenderer() +{ +} + + +CSmartPtr<CTEParticleRenderer> CTEParticleRenderer::Create( const char *pDebugName, const Vector &vOrigin ) +{ + CTEParticleRenderer *pRet = new CTEParticleRenderer( pDebugName ); + if( pRet ) + { + pRet->SetDynamicallyAllocated( true ); + pRet->SetSortOrigin( vOrigin ); + } + + return pRet; +} + + +StandardParticle_t* CTEParticleRenderer::AddParticle() +{ + if(m_MaterialHandle == INVALID_MATERIAL_HANDLE) + { + m_MaterialHandle = m_ParticleEffect.FindOrAddMaterial("particle/particledefault"); + } + + StandardParticle_t *pParticle = + (StandardParticle_t*)BaseClass::AddParticle( sizeof(StandardParticle_t), m_MaterialHandle, m_vSortOrigin ); + + if(pParticle) + pParticle->m_EffectDataWord = 0; // (ramp) + + return pParticle; +} + + +void CTEParticleRenderer::RenderParticles( CParticleRenderIterator *pIterator ) +{ + const StandardParticle_t *pParticle = (const StandardParticle_t*)pIterator->GetFirst(); + while ( pParticle ) + { + // Render. + Vector tPos; + TransformParticle(ParticleMgr()->GetModelView(), pParticle->m_Pos, tPos); + float sortKey = tPos.z; + + Vector vColor(pParticle->m_Color[0]/255.9f, pParticle->m_Color[1]/255.9f, pParticle->m_Color[2]/255.9f); + RenderParticle_ColorSize( + pIterator->GetParticleDraw(), + tPos, + vColor, + pParticle->m_Color[3]/255.9f, + m_ParticleSize); + + pParticle = (const StandardParticle_t*)pIterator->GetNext( sortKey ); + } +} + +void CTEParticleRenderer::SimulateParticles( CParticleSimulateIterator *pIterator ) +{ + StandardParticle_t *pParticle = (StandardParticle_t*)pIterator->GetFirst(); + while ( pParticle ) + { + // Remove the particle? + SetParticleLifetime(pParticle, GetParticleLifetime(pParticle) - pIterator->GetTimeDelta()); + if(GetParticleLifetime(pParticle) < 0) + { + pIterator->RemoveParticle( pParticle ); + } + else + { + float ft = pIterator->GetTimeDelta(); + float time3 = 15.0 * ft; + float time2 = 10.0 * ft; + float time1 = 5.0 * ft; + float dvel = 4* ft ; + + float grav = ft * GetCurrentGravity() * 0.05f; + + int (*colorIndex)[3]; + int iRamp; + + switch(GetParticleType(pParticle)) + { + case pt_static: + break; + + case pt_fire: + pParticle->m_EffectDataWord += (unsigned short)(time1 * (1 << SIMSHIFT)); + iRamp = pParticle->m_EffectDataWord >> SIMSHIFT; + if(iRamp >= 6) + { + pParticle->m_Lifetime = -1; + } + else + { + colorIndex = &ramp3[ iRamp ]; + pParticle->SetColor((float)(*colorIndex)[0] / 255.0f, (float)(*colorIndex)[1] / 255.0f, (float)(*colorIndex)[2] / 255.0f); + } + pParticle->m_Velocity[2] += grav; + break; + + case pt_explode: + pParticle->m_EffectDataWord += (unsigned short)(time2 * (1 << SIMSHIFT)); + iRamp = pParticle->m_EffectDataWord >> SIMSHIFT; + if(iRamp >= 8) + { + pParticle->m_Lifetime = -1; + } + else + { + colorIndex = &ramp1[ iRamp ]; + pParticle->SetColor((float)(*colorIndex)[0] / 255.0f, (float)(*colorIndex)[1] / 255.0f, (float)(*colorIndex)[2] / 255.0f); + } + pParticle->m_Velocity = pParticle->m_Velocity + pParticle->m_Velocity * dvel; + pParticle->m_Velocity[2] -= grav; + break; + + case pt_explode2: + pParticle->m_EffectDataWord += (unsigned short)(time3 * (1 << SIMSHIFT)); + iRamp = pParticle->m_EffectDataWord >> SIMSHIFT; + if(iRamp >= 8) + { + pParticle->m_Lifetime = -1; + } + else + { + colorIndex = &ramp2[ iRamp ]; + pParticle->SetColor((float)(*colorIndex)[0] / 255.0f, (float)(*colorIndex)[1] / 255.0f, (float)(*colorIndex)[2] / 255.0f); + } + pParticle->m_Velocity = pParticle->m_Velocity - pParticle->m_Velocity * ft; + pParticle->m_Velocity[2] -= grav; + break; + + case pt_grav: + pParticle->m_Velocity[2] -= grav * 20; + break; + case pt_slowgrav: + pParticle->m_Velocity[2] = grav; + break; + + case pt_vox_grav: + pParticle->m_Velocity[2] -= grav * 8; + break; + + case pt_vox_slowgrav: + pParticle->m_Velocity[2] -= grav * 4; + break; + + + case pt_blob: + case pt_blob2: + pParticle->m_EffectDataWord += (unsigned short)(time2 * (1 << SIMSHIFT)); + iRamp = pParticle->m_EffectDataWord >> SIMSHIFT; + if(iRamp >= SPARK_COLORCOUNT) + { + pParticle->m_EffectDataWord = 0; + iRamp = 0; + } + + colorIndex = &gSparkRamp[ iRamp ]; + pParticle->SetColor((float)(*colorIndex)[0] / 255.0f, (float)(*colorIndex)[1] / 255.0f, (float)(*colorIndex)[2] / 255.0f); + + pParticle->m_Velocity[0] -= pParticle->m_Velocity[0]*0.5*ft; + pParticle->m_Velocity[1] -= pParticle->m_Velocity[1]*0.5*ft; + pParticle->m_Velocity[2] -= grav * 5; + + if ( random->RandomInt(0,3) ) + { + SetParticleType(pParticle, pt_blob); + pParticle->SetAlpha(0); + } + else + { + SetParticleType(pParticle, pt_blob2); + pParticle->SetAlpha(255.9f); + } + break; + } + // Update position. + pParticle->m_Pos = pParticle->m_Pos + pParticle->m_Velocity * ft; + } + + pParticle = (StandardParticle_t*)pIterator->GetNext(); + } +} + + |