Program Listing for File EmitterSystem.h

Return to documentation for file (SPlisHSPlasH/EmitterSystem.h)

#ifndef __EmitterSystem_h__
#define __EmitterSystem_h__

#include "Common.h"
#include <vector>
#include "Emitter.h"

namespace SPH
{
    class TimeStep;
    class FluidModel;

    class EmitterSystem
    {
        public:
            EmitterSystem(FluidModel *model);
            virtual ~EmitterSystem();

        protected:
            FluidModel *m_model;
            static const unsigned int m_maxParticlesToReusePerStep = 50000;
            bool m_reuseParticles;
            Vector3r m_boxMin;
            Vector3r m_boxMax;
            unsigned int m_numberOfEmittedParticles;
            unsigned int m_numReusedParticles;
            std::vector <unsigned int> m_reusedParticles;
            std::vector<Emitter*> m_emitters;

            void reuseParticles();

        public:
            void enableReuseParticles(const Vector3r &boxMin = Vector3r(-1, -1, -1), const Vector3r &boxMax = Vector3r(1, 1, 1));
            void disableReuseParticles();
            void addEmitter(const unsigned int width, const unsigned int height,
                const Vector3r &pos, const Matrix3r & rotation,
                const Real velocity,
                const unsigned int type);
            unsigned int numEmitters() const { return static_cast<unsigned int>(m_emitters.size()); }
            std::vector<Emitter*> &getEmitters() { return m_emitters; }

            unsigned int numReusedParticles() const { return m_numReusedParticles; }
            unsigned int numEmittedParticles() const { return m_numberOfEmittedParticles; }

            void step();
            void reset();

            void saveState(BinaryFileWriter &binWriter);
            void loadState(BinaryFileReader &binReader);
    };
}

#endif