V-Gears 0
Free Final Fantasy VII engine.
ParticleTechnique.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2022 The V-Gears Team
3 *
4 * This file is part of V-Gears
5 *
6 * V-Gears is free software: you can redistribute it and/or modify it under
7 * terms of the GNU General Public License as published by the Free Software
8 * Foundation, version 3.0 (GPLv3) of the License.
9 *
10 * V-Gears is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 */
15
16#pragma once
17
18#include "ParticleEmitter.h"
19#include "ParticleRenderer.h"
20#include "ParticlePool.h"
21#include "ParticlePoolMap.h"
22
23class ParticleSystem;
24
29
30 public:
31
36
40 virtual ~ParticleTechnique();
41
45 void CopyAttributesTo(ParticleTechnique* technique);
46
52 void SetParentSystem(ParticleSystem* parent_system){
53 parent_system_ = parent_system;
54 };
55
62
68 void UpdateRenderQueue(Ogre::RenderQueue* queue);
69
73 void Initialize();
74
82 void Update(Ogre::Real time_elapsed);
83
92 ParticleRenderer* CreateRenderer(const Ogre::String& renderer_type);
93
99 void SetRenderer(ParticleRenderer* renderer);
100
104 void DestroyRenderer();
105
114 ParticleEmitter* CreateEmitter(const Ogre::String& emitter_type);
115
121 void AddEmitter(ParticleEmitter* emitter);
122
126 void DestroyAllEmitters();
127
133 int GetNumEmittableEmitters() const;
134
138 void EmissionChange();
139
147
157 ParticleEmitter* emitter, int requested, Ogre::Real time_elapsed
158 );
159
164
165 private:
166
171
176
181
186
191
195 std::vector<VisualParticle*> visual_particles_;
196
201
206
211
215 std::vector<ParticleEmitter*> emitters_;
216};
217
A particle emitter.
Definition: ParticleEmitter.h:27
A particle renderer.
Definition: ParticleRenderer.h:28
A particle system.
Definition: ParticleSystem.h:26
A particle technique.
Definition: ParticleTechnique.h:28
bool particle_emitter_pool_increased_
Indicates if the particle emitte quota has been increased.
Definition: ParticleTechnique.h:205
void EmissionChange()
Marks all emitters as emittables.
Definition: ParticleTechnique.cpp:219
ParticleTechnique()
Constructor.
Definition: ParticleTechnique.cpp:23
ParticleRenderer * renderer_
The technique renderer.
Definition: ParticleTechnique.h:175
int emitted_emitter_quota_
The particle emitter quota.
Definition: ParticleTechnique.h:200
int GetNumEmittableEmitters() const
Counts the number of emitters assigned to the techniques.
Definition: ParticleTechnique.cpp:213
void ExecuteEmitParticles(ParticleEmitter *emitter, int requested, Ogre::Real time_elapsed)
Initializes the particles of an emitter for emission.
Definition: ParticleTechnique.cpp:233
virtual ~ParticleTechnique()
Destructor.
Definition: ParticleTechnique.cpp:31
int visual_particle_quota_
The visual particle quota.
Definition: ParticleTechnique.h:180
int GetVisualParticlesQuota() const
Retrieves the visual particles quota.
Definition: ParticleTechnique.h:146
void SetRenderer(ParticleRenderer *renderer)
Sets the renderer for the technique.
Definition: ParticleTechnique.cpp:174
ParticleSystem * GetParentSystem() const
Retrieves the parent system.
Definition: ParticleTechnique.h:61
void CopyAttributesTo(ParticleTechnique *technique)
Copy the technique attributes to another technique.
Definition: ParticleTechnique.cpp:36
void DestroyAllEmitters()
Destroys all the technique's emitters.
Definition: ParticleTechnique.cpp:207
void DestroyRenderer()
Destroys the technique renderer.
Definition: ParticleTechnique.cpp:181
bool visual_particle_pool_increased_
Indicates if the visual particle quota has been increased.
Definition: ParticleTechnique.h:185
ParticleRenderer * CreateRenderer(const Ogre::String &renderer_type)
Creates a renderer.
Definition: ParticleTechnique.cpp:164
void ResetVisualParticles()
Locks all particles and removes all their additional data.
Definition: ParticleTechnique.cpp:266
ParticleSystem * parent_system_
The parent particle system.
Definition: ParticleTechnique.h:170
ParticlePoolMap< ParticleEmitter > particle_emitter_pool_
Particle emitter pool.
Definition: ParticleTechnique.h:210
void Update(Ogre::Real time_elapsed)
Updates the technique.
Definition: ParticleTechnique.cpp:111
std::vector< ParticleEmitter * > emitters_
List of particle emitters.
Definition: ParticleTechnique.h:215
ParticlePool< VisualParticle > visual_particles_pool_
The visual particle pool.
Definition: ParticleTechnique.h:190
std::vector< VisualParticle * > visual_particles_
List of visual particles.
Definition: ParticleTechnique.h:195
void AddEmitter(ParticleEmitter *emitter)
Adds a particle emitter to the technique.
Definition: ParticleTechnique.cpp:199
void SetParentSystem(ParticleSystem *parent_system)
Sets the parent system for the technique.
Definition: ParticleTechnique.h:52
void Initialize()
Initializes the tehnique.
Definition: ParticleTechnique.cpp:64
void UpdateRenderQueue(Ogre::RenderQueue *queue)
Adds the technique to the scene render queue.
Definition: ParticleTechnique.cpp:58
ParticleEmitter * CreateEmitter(const Ogre::String &emitter_type)
Creates a particle emitter for the technique.
Definition: ParticleTechnique.cpp:188
Ogre::String String
Definition: TypeDefine.h:37