Files
m2dev-client-src/src/EffectLib/ParticleInstance.h
2025-08-28 21:03:15 +02:00

80 lines
1.7 KiB
C++

#pragma once
#include "Type.h"
#include "Eterlib/GrpBase.h"
#include "EterLib/Pool.h"
class CParticleProperty;
class CEmitterProperty;
class CParticleInstance
{
friend class CParticleSystemData;
friend class CParticleSystemInstance;
public:
CParticleInstance();
~CParticleInstance();
float GetRadiusApproximation();
BOOL Update(float fElapsedTime, float fAngle);
private:
void UpdateRotation(float time, float elapsedTime);
void UpdateTextureAnimation(float time, float elapsedTime);
void UpdateScale(float time, float elapsedTime);
void UpdateColor(float time, float elapsedTime);
void UpdateGravity(float time, float elapsedTime);
void UpdateAirResistance(float time, float elapsedTime);
protected:
D3DXVECTOR3 m_v3StartPosition;
D3DXVECTOR3 m_v3Position;
D3DXVECTOR3 m_v3LastPosition;
D3DXVECTOR3 m_v3Velocity;
D3DXVECTOR2 m_v2HalfSize;
D3DXVECTOR2 m_v2Scale;
float m_fRotation;
D3DXCOLOR m_Color;
BYTE m_byTextureAnimationType;
float m_fLastFrameTime;
BYTE m_byFrameIndex;
float m_fFrameTime;
float m_fLifeTime;
float m_fLastLifeTime;
CParticleProperty * m_pParticleProperty;
CEmitterProperty * m_pEmitterProperty;
BYTE m_rotationType;
float m_fAirResistance;
float m_fRotationSpeed;
float m_fGravity;
public:
static CParticleInstance* New();
static void DestroySystem();
void Transform(const D3DXMATRIX * c_matLocal=NULL);
void Transform(const D3DXMATRIX * c_matLocal, const float c_fZRotation);
TPTVertex * GetParticleMeshPointer();
void DeleteThis();
void Destroy();
protected:
void __Initialize();
TPTVertex m_ParticleMesh[4];
public:
static CDynamicPool<CParticleInstance> ms_kPool;
};