28#include "Entity/CEntityPrefab.h"
30#include "Emitters/CEmitter.h"
31#include "Zones/CZone.h"
32#include "Renderers/IRenderer.h"
33#include "Systems/ISystem.h"
35#include "Systems/CParticleSystem.h"
36#include "Systems/CParticleInstancingSystem.h"
37#include "Systems/CParticleCPUBufferSystem.h"
39#include "CParticleInstancing.h"
40#include "CParticleCPUBuffer.h"
44#include "CParticleSerializable.h"
55 struct SLaunchParticle
74 class COMPONENT_API IParticleCallback
82 virtual ~IParticleCallback()
87 virtual void OnParticleUpdate(
CParticle* particles,
int num,
CGroup* group,
float dt)
107 virtual void OnGroupDestroy()
131 class COMPONENT_API CGroup :
public CParticleSerializable
291 std::vector<IParticleCallback*>::iterator i = std::find(
m_callback.begin(),
m_callback.end(), cb);
299 std::vector<IParticleCallback*>::iterator i = std::find(
m_callback.begin(),
m_callback.end(), cb);
424 return m_frameUpdate;
431 m_frameUpdate = frame;
434 DECLARE_GETTYPENAME(
CGroup)
442 virtual
void updateLaunchEmitter();
444 virtual
void bornParticle();
450 inline
void initParticleLifeTime(
CParticle& p)
456 p.HaveRotate =
false;
Keyframe interpolator for scalar, vector, and color values.
Definition CInterpolator.h:146
Definition CObjectSerializable.h:36
Base class for particle emitters.
Definition CEmitter.h:88
Represents a group of particles with shared settings, emitters, and a renderer.
Definition CGroup.h:132
void clearParticles()
Clears all active particles.
CParticleCPUBufferSystem * m_cpuBufferSystem
Internal system for CPU buffer updates.
Definition CGroup.h:154
int addParticleByEmitter(CEmitter *emitter, const core::vector3df &position, const core::vector3df &subEmitterDirection)
Manually spawns a particle using a pointer to an emitter.
core::array< CParticle > m_particles
Active particles in this group.
Definition CGroup.h:135
u32 getCurrentParticleCount()
Gets current particle count.
Definition CGroup.h:380
bool Immortal
If true, particles do not die from age.
Definition CGroup.h:175
IRenderer * setRenderer(IRenderer *r)
Assigns a renderer to this group.
void removeSystem(ISystem *s)
Removes a system.
Definition CGroup.h:323
IRenderer * m_renderer
The renderer used to draw this group.
Definition CGroup.h:157
core::vector3df OrientationUp
Custom orientation up vector for fixed billboarding.
Definition CGroup.h:189
std::vector< CModel * > m_models
Models defining parameter animation (e.g. ColorA over life).
Definition CGroup.h:144
bool Visible
Visibility flag.
Definition CGroup.h:196
int addParticleVelocityByEmitter(CEmitter *emitter, const core::vector3df &position, const core::vector3df &velocity)
Manually spawns a particle with initial velocity using a pointer to an emitter.
float Friction
Global friction for all particles in this group.
Definition CGroup.h:169
std::vector< CModel * > & getModels()
Gets all models.
Definition CGroup.h:398
CParticleCPUBuffer * m_cpuBuffer
Buffer for CPU rendering data.
Definition CGroup.h:162
float LifeMin
Minimum life time for newly born particles.
Definition CGroup.h:171
std::vector< CEmitter * > & getEmitters()
Gets all emitters.
Definition CGroup.h:280
virtual CObjectSerializable * createSerializable()
Creates a serializable object for property editing or saving.
const core::aabbox3df & getBBox()
Gets the bounding box of all active particles.
Definition CGroup.h:255
std::vector< CInterpolator * > m_interpolators
Interpolators shared by models.
Definition CGroup.h:146
void update()
Main update loop for particle physics and lifecycle.
CModel * getModel(EParticleParams param)
Finds a model for a parameter type.
int addParticle(u32 emiterID, const core::vector3df &position, const core::vector3df &subEmitterDirection)
Manually spawns a particle using an emitter index.
Definition CGroup.h:331
CParticleInstancing * m_instancing
Buffer for GPU instancing data.
Definition CGroup.h:160
std::vector< CEmitter * > m_emitters
List of emitters assigned to this group.
Definition CGroup.h:140
void updateForRenderer()
Updates buffers for rendering.
std::vector< IParticleCallback * > & getCallback()
Gets all callbacks.
Definition CGroup.h:305
float GravityValue
Gravity magnitude.
Definition CGroup.h:178
CModel * createModel(EParticleParams param)
Creates or retrieves a model for a specific parameter type.
virtual core::vector3df getTransformVector(const core::vector3df &vec)
Transforms a vector (rotation only) from local group space to world space.
void removeCallback(IParticleCallback *cb)
Removes a lifecycle callback.
Definition CGroup.h:297
void clearImmortalParticles()
Clears only immortal particles.
bool Optimized
If true, uses optimized particle swap on deletion (may affect sorting).
Definition CGroup.h:199
CEmitter * addEmitter(CEmitter *e)
Adds an emitter to the group.
Definition CGroup.h:273
void deleteInterpolator(CInterpolator *interpolator)
Deletes an interpolator.
core::vector3df Gravity
Calculated gravity vector.
Definition CGroup.h:185
std::vector< IParticleCallback * > m_callback
Callbacks for particle lifecycle events.
Definition CGroup.h:165
int addParticleVelocity(u32 emiterID, const core::vector3df &position, const core::vector3df &velocity)
Manually spawns a particle with initial velocity using an emitter index.
Definition CGroup.h:342
void removeEmitter(CEmitter *e)
Removes an emitter.
IRenderer * getRenderer()
Gets the current renderer.
Definition CGroup.h:362
void addSystem(ISystem *s)
Adds a custom system to process particles.
Definition CGroup.h:311
core::array< CParticle > & getParticles()
Gets raw access to particle list.
Definition CGroup.h:416
float LifeMax
Maximum life time for newly born particles.
Definition CGroup.h:173
virtual void loadSerializable(CObjectSerializable *object)
Loads properties from a serializable object.
core::vector3df GravityRotation
Gravity rotation (euler angles).
Definition CGroup.h:180
core::vector3df OrientationNormal
Custom orientation normal for fixed billboarding.
Definition CGroup.h:187
void setParticleRotation(const core::vector3df &euler)
Sets particle orientation using euler rotation.
void setGravityRotation(const core::vector3df &euler)
Sets gravity direction using euler rotation.
std::wstring Name
Friendly name of the group.
Definition CGroup.h:194
void updateFrame(int frame)
Syncs frame count.
Definition CGroup.h:428
CModel * createModel(const std::wstring &attributeName)
Creates or retrieves a model for a specific parameter name.
const core::matrix4 & getWorld()
Gets the world matrix of this group.
Definition CGroup.h:243
CParticleInstancingSystem * m_instancingSystem
Internal system for GPU instancing updates.
Definition CGroup.h:152
CParticleInstancing * getIntancing()
Internal: gets instancing buffer.
Definition CGroup.h:368
void setWorldMatrix(const core::matrix4 &m)
Sets the local-to-world transform of this group.
Definition CGroup.h:237
CInterpolator * createInterpolator()
Creates a new interpolator.
void deleteModel(EParticleParams param)
Deletes a model.
u32 getNumParticles()
Gets current particle count.
Definition CGroup.h:261
bool UseOrientationAsBillboard
Whether to use custom orientation instead of camera billboard.
Definition CGroup.h:191
core::array< SLaunchParticle > m_launch
Buffer of particles to be launched in the current frame.
Definition CGroup.h:137
virtual core::vector3df getTransformPosition(const core::vector3df &pos)
Transforms a position from local group space to world space.
void addCallback(IParticleCallback *cb)
Adds a lifecycle callback.
Definition CGroup.h:289
std::vector< ISystem * > & getSystems()
Gets all systems.
Definition CGroup.h:317
void setParentWorldMatrix(const core::matrix4 &m)
Sets the parent entity's world matrix.
Definition CGroup.h:231
int getFrameUpdate()
Gets last frame index update.
Definition CGroup.h:422
core::vector3df ParticleRotation
Global rotation for all particles.
Definition CGroup.h:182
CParticleSystem * m_particleSystem
Core particle movement and lifecycle system.
Definition CGroup.h:149
std::vector< CInterpolator * > & getInterpolators()
Gets all interpolators.
Definition CGroup.h:410
std::vector< ISystem * > m_systems
Custom update systems affecting this group's particles.
Definition CGroup.h:142
CParticleCPUBuffer * getParticleBuffer()
Internal: gets CPU mesh buffer.
Definition CGroup.h:374
CParticle * getParticlePointer()
Gets raw pointer to particle array.
Definition CGroup.h:267
Data model for animating a particle parameter (EParticleParams) over its lifetime.
Definition CModel.h:44
Internal class for managing particle mesh buffers on the CPU.
Definition CParticleCPUBuffer.h:37
Internal system that updates the CPU mesh buffer with current particle data for non-instanced renderi...
Definition CParticleCPUBufferSystem.h:39
Individual particle data structure.
Definition CParticle.h:65
Internal class for managing GPU instancing buffers for particles.
Definition CParticleInstancing.h:72
Internal system that updates the GPU instancing buffer with current particle data.
Definition CParticleInstancingSystem.h:39
Core particle update system.
Definition CParticleSystem.h:40
Interface for receiving particle lifecycle events.
Definition CGroup.h:75
Base interface for particle renderers.
Definition IRenderer.h:54
Base interface for particle systems that update particle data.
Definition ISystem.h:41
Self reallocating template array (like stl vector) with additional features.
Definition irrArray.h:23
EParticleParams
IDs for particle parameters that can be animated over time.
Definition CParticle.h:39
Everything in the Skylicht Engine. You can start by looking at the topics.
Definition AudioDebugLog.h:29
vector3d< f32 > vector3df
Typedef for a f32 3d vector.
Definition vector3d.h:445
CMatrix4< f32 > matrix4
Typedef for f32 matrix.
Definition matrix4.h:2241
aabbox3d< f32 > aabbox3df
Typedef for a f32 3d bounding box.
Definition aabbox3d.h:351
unsigned int u32
32 bit unsigned variable.
Definition irrTypes.h:58
signed int s32
32 bit signed variable.
Definition irrTypes.h:66
Information about particles being launched by an emitter.
Definition CGroup.h:56