source-engine/game/client/fx_blood.h

77 lines
1.6 KiB
C
Raw Normal View History

2020-04-22 16:56:21 +00:00
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=============================================================================//
#ifndef FX_BLOOD_H
#define FX_BLOOD_H
#ifdef _WIN32
#pragma once
#endif
#include "tier0/memdbgon.h"
class CBloodSprayEmitter : public CSimpleEmitter
{
public:
CBloodSprayEmitter( const char *pDebugName ) : CSimpleEmitter( pDebugName ) {}
static CBloodSprayEmitter *Create( const char *pDebugName )
{
return new CBloodSprayEmitter( pDebugName );
}
inline void SetGravity( float flGravity )
{
m_flGravity = flGravity;
}
virtual float UpdateRoll( SimpleParticle *pParticle, float timeDelta )
{
pParticle->m_flRoll += pParticle->m_flRollDelta * timeDelta;
pParticle->m_flRollDelta += pParticle->m_flRollDelta * ( timeDelta * -4.0f );
//Cap the minimum roll
/*
if ( fabs( pParticle->m_flRollDelta ) < 0.5f )
{
pParticle->m_flRollDelta = ( pParticle->m_flRollDelta > 0.0f ) ? 0.5f : -0.5f;
}
*/
return pParticle->m_flRoll;
}
virtual void UpdateVelocity( SimpleParticle *pParticle, float timeDelta )
{
if ( !( pParticle->m_iFlags & SIMPLE_PARTICLE_FLAG_NO_VEL_DECAY ) )
{
//Decelerate
static float dtime;
static float decay;
if ( dtime != timeDelta )
{
decay = ExponentialDecay( 0.1, 0.4f, dtime );
dtime = timeDelta;
}
pParticle->m_vecVelocity *= decay;
pParticle->m_vecVelocity[2] -= ( m_flGravity * timeDelta );
}
}
private:
float m_flGravity;
CBloodSprayEmitter( const CBloodSprayEmitter & );
};
#include "tier0/memdbgoff.h"
#endif // FX_BLOOD_H