blob: 8ee79ecf35f0e1be4af85499d2c20d8fd712cc38 (
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
|
#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 Game::GameObject*/
{
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(float x, float 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 setGraphic(const Graphic* graphic);
private:
friend class ParticleEmitter;
ParticleSystem();
///
///
///
Particle* claim();
///
///
///
void recycle(int i, Particle* p);
///
/// Particle system definition.
///
ParticleSystemDef mDef;
///
/// Sprite to be drawn.
///
const Graphic* mGraphic;
///
/// 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
|