//called each frame by vvvv public void Evaluate(int SpreadMax) { //update particles and remove timed out particles for (int i = FParticles.Count - 1; i >= 0; i--) { if (!FParticles[i].Update(FHDEHost.GetCurrentTime())) { FParticles.RemoveAt(i); } } for (int i = 0; i < SpreadMax; i++) { //add new particles if (FBang[i]) { for (int j = 0; j < 4; j++) { var vel = new Vector3D(FRandom.NextDouble() - 0.5, FRandom.NextDouble() + 0.3, 0); vel.z = 0; var acc = new Vector3D(0, FAcc[i], 0); FParticles.Add(new Particle(FHDEHost.GetCurrentTime(), FMaxLifeTime[i], FInput[i], vel, acc)); } } } //set outputs FOutput.SliceCount = FParticles.Count; FAge.SliceCount = FParticles.Count; for (int i = 0; i < FParticles.Count; i++) { FOutput[i] = FParticles[i].Position; FAge[i] = FParticles[i].Age; } }
public void UpdateTime() { var time = FHost.GetCurrentTime(); FTime += Pause ? 0 : time - FLastTime; FLastTime = time; }