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; } }
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); }