blob: fb4b8c71d66714fd2cc2e86155d489a95ec62913 (
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
#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
{
ParticleSystemDef() {}
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:
///
/// Particle system constructor
///
/// @param def Definition of particle system.
///
ParticleSystem(const ParticleSystemDef& def);
///
/// Particle system destructor.
///
~ParticleSystem();
///
/// Update particle system and all alive particles.
///
void update(float dt);
///
/// Render particle system.
///
void render();
///
/// Set sprite to render.
///
/// @param sprite Sprite to render.
///
void setSprite(const Sprite* sprite);
///
/// Set particle system position.
///
void setPosition(float x, float y);
///
/// Pause particle spawn.
///
void pause(bool isPause);
///
/// Clear all particles.
///
void clear();
private:
friend class ParticleEmitter;
ParticleSystem();
///
/// Particle system position.
///
Math::Vector2<float> mPosition;
///
///
///
Particle* claim();
///
///
///
void recycle(int i, Particle* p);
///
/// Particle system definition.
///
ParticleSystemDef mDef;
///
/// Sprite to be drawn.
///
const Sprite* mSprite;
///
/// Particle emitter.
///
ParticleEmitter mEmitter;
///
/// Particle pool.
///
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
|