diff options
Diffstat (limited to 'src/render/particlesystem.h')
-rw-r--r-- | src/render/particlesystem.h | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/render/particlesystem.h b/src/render/particlesystem.h new file mode 100644 index 0000000..b3edce4 --- /dev/null +++ b/src/render/particlesystem.h @@ -0,0 +1,75 @@ +/* + render/particlesystem.h + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 +*/ + +#ifndef __INCLUDED_RENDER_PARTICLESYSTEM_H__ +#define __INCLUDED_RENDER_PARTICLESYSTEM_H__ + +#include <list> + +#include "core/entity.h" + +#include "render/particlesystemscript.h" +#include "render/particleejector.h" + + +namespace render { + +/* ---- class ParticleSystem --------------------------------------- */ + +/** + * @brief abstract base class for a particle system attached to an entity + * */ +class ParticleSystem +{ +public: + typedef std::list<ParticleEjector *> Ejectors; + + ParticleSystem(const ParticleSystemScript *script, const core::Entity *entity, const model::Particles *modelclass); + ~ParticleSystem(); + + void draw(const float seconds); + + /** + * @brief clear all particles from all ejectors + * */ + void clear(); + + inline const core::Entity *entity() + { + return particlesystem_entity; + } + + /** + * @brief location of the particlesystem + * */ + inline const math::Vector3f &location() const { + return particlesystem_location; + } + + /** + * @brief axisof the particlesystem + * */ + inline const math::Axis &axis() const { + return particlesystem_axis; + } + +private: + inline Ejectors & ejectors() + { + return particlesystem_ejectors; + } + + float particlesystem_modelscale; + math::Vector3f particlesystem_location; + math::Axis particlesystem_axis; + const core::Entity *particlesystem_entity; + Ejectors particlesystem_ejectors; + +}; + +} // namespace + +#endif // __INCLUDED_RENDER_PARTICLESYSTEM_H__ |