Ejemplo n.º 1
0
        //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;
        }