📄 cparticle.cpp
字号:
#include "CParticle.h"
CParticle::CParticle( void )
{
// Default to 0
m_iLife = 0;
m_iTextureStart = 0;
m_iTextureEnd = 0;
m_iTextureType = 0;
m_iTextureCur = 0;
m_iTextureSteps = 0;
m_iTextureCurStep = 0;
// Default to 0
m_vecAcceleration.fX = 0.0f;
m_vecAcceleration.fY = 0.0f;
m_vecAcceleration.fZ = 0.0f;
// Default to 0
m_vecGravity.fX = 0.0f;
m_vecGravity.fY = 0.0f;
m_vecGravity.fZ = 0.0f;
// Default to 0
m_vecCurSpeed.fX = 0.0f;
m_vecCurSpeed.fY = 0.0f;
m_vecCurSpeed.fZ = 0.0f;
}
CParticle::~CParticle( void )
{
}
void CParticle::vUpdate( void )
{
// Update the speed
m_vecCurSpeed.fX += m_vecAcceleration.fX;
m_vecCurSpeed.fY += m_vecAcceleration.fY;
m_vecCurSpeed.fZ += m_vecAcceleration.fZ;
m_vecCurSpeed.fX += m_vecGravity.fX;
m_vecCurSpeed.fY += m_vecGravity.fY;
m_vecCurSpeed.fZ += m_vecGravity.fZ;
// Update the position
m_vecPos.fX += m_vecCurSpeed.fX;
m_vecPos.fY += m_vecCurSpeed.fY;
m_vecPos.fZ += m_vecCurSpeed.fZ;
//
// Update texture
//
// Static
if( m_iTextureType == 0 ) {
m_iTextureCur = m_iTextureStart;
}
// Frame based
else {
m_iTextureCurStep++;
if( m_iTextureCurStep >= m_iTextureSteps ) {
// Linear
if( m_iTextureType == 1 ) {
if( m_iTextureCur != m_iTextureEnd ) {
m_iTextureCur++;
}
}
// Looping - forward
else if( m_iTextureType == 2 ) {
m_iTextureCur++;
if( m_iTextureCur > m_iTextureEnd ) {
m_iTextureCur = m_iTextureStart;
}
}
// Looping - backward
else if( m_iTextureType == 3 ) {
m_iTextureCur--;
if( m_iTextureCur < m_iTextureStart ) {
m_iTextureCur = m_iTextureEnd;
}
}
// Reset texture counter
m_iTextureCurStep = 0;
}
}
// Subtract life counter
m_iLife--;
}
// Return if particle is still active or not
bool CParticle::bIsAlive( void )
{
// Return TRUE if alive
if( m_iLife )
return( 1 );
// Return FALSE if dead
else
return( 0 );
}
// Setup the texture animation system
void CParticle::vSetTextures( int iType, int iStart, int iStop, int iSteps )
{
m_iTextureStart = iStart;
m_iTextureEnd = iStop;
m_iTextureType = iType;
m_iTextureCur = iStart;
m_iTextureSteps = iSteps;
m_iTextureCurStep = 0;
}
void CParticle::vSetPos( float x, float y, float z )
{
m_vecPos.fX = x;
m_vecPos.fY = y;
m_vecPos.fZ = z;
}
void CParticle::vSetAcceleration( float x, float y, float z )
{
m_vecAcceleration.fX = x;
m_vecAcceleration.fY = y;
m_vecAcceleration.fZ = z;
}
void CParticle::vSetSpeed( float x, float y, float z )
{
m_vecCurSpeed.fX = x;
m_vecCurSpeed.fY = y;
m_vecCurSpeed.fZ = z;
}
void CParticle::vSetGravity( float x, float y, float z )
{
m_vecGravity.fX = x;
m_vecGravity.fY = y;
m_vecGravity.fZ = z;
}
void CParticle::vSetLife( int iLife )
{
m_iLife = iLife;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -