public void DefaultValues()
        {
            var e = new AngularVelocityEffector();

            Assert.AreEqual(ParticleParameterNames.Angle, e.AngleParameter);
            Assert.AreEqual(ParticleParameterNames.AngularSpeed, e.SpeedParameter);
        }
        public void Clone()
        {
            var e = new AngularVelocityEffector
            {
                AngleParameter = "A",
                SpeedParameter = "S",
                Enabled        = false,
            };

            var c = (AngularVelocityEffector)e.Clone();

            Assert.AreEqual(e.AngleParameter, c.AngleParameter);
            Assert.AreEqual(e.SpeedParameter, c.SpeedParameter);
            Assert.AreEqual(e.Enabled, c.Enabled);
        }
        public void Test0()
        {
            var ps    = new ParticleSystem();
            var angle = ps.Parameters.AddUniform <float>("A");
            var speed = ps.Parameters.AddUniform <float>("S");

            angle.DefaultValue = 3;
            speed.DefaultValue = 2;

            var e = new AngularVelocityEffector
            {
                ParticleSystem = ps,
                AngleParameter = "A",
                SpeedParameter = "S",
            };

            e.RequeryParameters();
            e.Initialize();

            var dt = new TimeSpan(0, 0, 0, 1);

            e.BeginUpdate(dt);
            e.UpdateParticles(dt, 10, 20);
            e.EndUpdate(dt);

            Assert.AreEqual(5, angle.DefaultValue);

            e.BeginUpdate(dt);
            e.UpdateParticles(dt, 10, 20);
            e.EndUpdate(dt);

            Assert.AreEqual(7 % ConstantsF.TwoPi, angle.DefaultValue);

            speed.DefaultValue = -17;

            e.BeginUpdate(dt);
            e.UpdateParticles(dt, 10, 20);
            e.EndUpdate(dt);

            Assert.IsTrue(Numeric.AreEqual(-10 + 2 * ConstantsF.TwoPi, angle.DefaultValue));
        }
        public void WrongParameters()
        {
            var ps = new ParticleSystem();

            ps.Parameters.AddUniform <float>("A");
            ps.Parameters.AddUniform <float>("S");

            var e = new AngularVelocityEffector {
                ParticleSystem = ps
            };

            var dt = new TimeSpan(0, 0, 0, 1);

            // There should be no exception.
            e.RequeryParameters();
            e.Initialize();
            e.BeginUpdate(dt);
            e.UpdateParticles(dt, 10, 20);
            e.EndUpdate(dt);

            e.Uninitialize();
        }
        public void Uninitialize()
        {
            var ps  = new ParticleSystem();
            var wp0 = new WeakReference(ps.Parameters.AddVarying <float>(ParticleParameterNames.Angle));
            var wp1 = new WeakReference(ps.Parameters.AddVarying <float>(ParticleParameterNames.AngularSpeed));

            var e = new AngularVelocityEffector {
                ParticleSystem = ps
            };

            e.RequeryParameters();
            e.Uninitialize();

            e.ParticleSystem = null;
            ps = null;

            GC.Collect();
            GC.WaitForFullGCComplete();

            Assert.IsFalse(wp0.IsAlive);
            Assert.IsFalse(wp1.IsAlive);
        }