/* 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 #include "core/entity.h" #include "render/camera.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 Ejectors; ParticleSystem(const ParticleSystemScript *script, const core::Entity *entity, const model::Particles *modelclass); ~ParticleSystem(); void draw(const float seconds, const Camera &camera); /** * @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 axis of the particlesystem * */ inline const math::Axis &axis() const { return particlesystem_axis; } inline Ejectors & ejectors() { return particlesystem_ejectors; } private: 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__