You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.4 KiB
74 lines
2.4 KiB
5 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
//=============================================================================//
|
||
|
|
||
|
#include "cbase.h"
|
||
|
#include "particles_attractor.h"
|
||
|
|
||
|
#include "tier0/memdbgon.h"
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : ¢er -
|
||
|
// "attractor" -
|
||
|
// Output : CParticleAttractor
|
||
|
//-----------------------------------------------------------------------------
|
||
|
CParticleAttractor *CParticleAttractor::Create( const Vector ¢er, const char *pDebugName )
|
||
|
{
|
||
|
CParticleAttractor *pSystem = new CParticleAttractor( pDebugName );
|
||
|
|
||
|
pSystem->SetAttractorOrigin( center );
|
||
|
|
||
|
return pSystem;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : *pParticle -
|
||
|
// timeDelta -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CParticleAttractor::UpdateVelocity( SimpleParticle *pParticle, float timeDelta )
|
||
|
{
|
||
|
float speed = VectorNormalize( pParticle->m_vecVelocity );
|
||
|
Vector offset;
|
||
|
|
||
|
Vector dir = ( m_vecAttractorOrigin - pParticle->m_Pos );
|
||
|
VectorNormalize( dir );
|
||
|
|
||
|
speed = clamp( (speed+speed*0.2f), 0.f, 1024.f );
|
||
|
pParticle->m_vecVelocity += dir * speed;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : *pParticle -
|
||
|
// timeDelta -
|
||
|
// Output : float
|
||
|
//-----------------------------------------------------------------------------
|
||
|
float CParticleAttractor::UpdateScale( const SimpleParticle *pParticle )
|
||
|
{
|
||
|
return ( ((float)pParticle->m_uchStartSize) * sin( M_PI * (pParticle->m_flLifetime / pParticle->m_flDieTime) ) );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : *pParticle -
|
||
|
// timeDelta -
|
||
|
// Output : float
|
||
|
//-----------------------------------------------------------------------------
|
||
|
float CParticleAttractor::UpdateAlpha( const SimpleParticle *pParticle )
|
||
|
{
|
||
|
return ( ((float)pParticle->m_uchStartAlpha/255.0f) * sin( M_PI * (pParticle->m_flLifetime / pParticle->m_flDieTime) ) );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : &origin -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CParticleAttractor::SetAttractorOrigin( const Vector &origin )
|
||
|
{
|
||
|
m_vecAttractorOrigin = origin;
|
||
|
}
|