Example #1
0
    public void Update(double dTime)
    {
        if (this.HasConsumers)
        {
            for (int i = 0; i < Consumers.Count; i++)
            {
                FluidParticleConsumer consumer = (FluidParticleConsumer)Consumers[i];
                consumer.Consume(ref Particles);
            }
        }

        if (wasMaxReached && !DoRebirth)
        {
        }
        else if (this.Particles.Count < this.MaxParticles)
        {
            for (int i = 0; i < Emitters.Count; i++)
            {
                FluidParticleEmitter emitter = (FluidParticleEmitter)Emitters[i];
                emitter.Emit(ref Particles, dTime);
            }
        }
        else
        {
            wasMaxReached = true;
        }
    }
Example #2
0
    public void Awake()
    {
        CellSpace                    = (SimDomain.width + SimDomain.height) / 32.0f;
        particleMass                 = (CellSpace * 20.0f);
        m_gravity                    = new Vector3(0.0f, -9.81f, 0.0f) * particleMass;
        m_fluidSim                   = new SPHSimulation(CellSpace, SimDomain);
        m_collisionSolver            = new CollisionResolver();
        m_collisionSolver.Bounciness = 0.2f;
        m_collisionSolver.Friction   = 0.01f;

        m_particleSystem = new ParticleSystem();
        float freq    = 40;
        int   maxPart = 100;

        m_particleSystem.MaxParticles = maxPart;
        m_particleSystem.MaxLife      = (int)((double)maxPart / freq / 0.01f);

        FluidParticleEmitter emitter = new FluidParticleEmitter();

        emitter.Position     = new Vector3(SimDomain.xMax / 2, SimDomain.yMax - SimDomain.yMax / 8, 0.0f);
        emitter.VelocityMin  = 2.5f;
        emitter.VelocityMax  = 3.0f;
        emitter.Direction    = new Vector3(0.8f, -0.25f, 0.0f);
        emitter.Distribution = SimDomain.width * 0.1f;
        emitter.Frequency    = freq;
        emitter.ParticleMass = particleMass;
        m_particleSystem.Emitters.Add(emitter);
    }