blob: 32123a6497fbeb1f6ef44f40e86ff9d6f0432c6a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
#ifndef __JE_PARTICLE_EMMITTER_H__
#define __JE_PARTICLE_EMMITTER_H__
#include <vector>
#include "../../common/je_temporary.h"
#include "../../game/je_gameobject.h"
#include "../je_sprite.h"
#include "je_particle_emitter.h"
#include "je_particle_pool.h"
#include "je_particle.h"
namespace JinEngine
{
namespace Graphics
{
namespace Particles
{
///
/// Definition of particle system.
///
struct ParticleSystemDef : public Temporary
{
uint maxParticleCount = 1; ///< Max count of particles in pool. 1 by default.
ParticleEmitterDef emitterDef; ///< Particle emitter definition.
ParticleDef particleDef; ///< Particle definition.
};
///
/// Particle emitter, handle all particles it emitts.
///
class ParticleSystem : public Game::GameObject
{
public:
///
/// Particle system constructor
///
/// @param def Definition of particle system.
///
ParticleSystem(const ParticleSystemDef& def);
///
/// Particle system destructor.
///
~ParticleSystem();
///
/// Render particle system's all particles.
///
void render(int x, int y, float sx = 1, float sy = 1, float r = 0, float ax = 0, float ay = 0);
///
/// Set sprite to render.
///
/// @param sprite Sprite to render.
///
void setSprite(Sprite* sprite);
///
/// Release particle and make it available in particle pool.
///
void releaseParticle();
private:
// Disable default constructor.
ParticleSystem();
///
/// Sprite to be drawn.
///
Sprite* mSprite;
///
/// Particle emitter.
///
ParticleEmitter mEmitter;
ParticlePool mParticlePool;
///
/// Alive particles, that means these particles could join to the life cycle loop.
///
std::vector<Particle*> mAliveParticles;
};
} // namespace Particles
} // namespace Graphics
} // namespace JinEngine
#endif
|