public void Update()
        {
            ISimpleTestSpline2D testSpline2D = PrepareSpline();

            float2 a = float2.zero;

            testSpline2D.AddControlPoint(float2.zero);
            float2 b = new float2(1f, 0f);

            testSpline2D.AddControlPoint(b);

            Assert.AreEqual(2, testSpline2D.ControlPointCount);
            Assert.AreEqual(2, testSpline2D.Modes.Count);
            Assert.AreEqual(testSpline2D.ExpectedTimeCount(testSpline2D.ControlPointCount), testSpline2D.Times.Count);
            TestHelpers.CheckFloat2(a, testSpline2D.Get2DPointWorld(0f));
            TestHelpers.CheckFloat2(a, testSpline2D.GetControlPoint(0, SplinePoint.Point));
            TestHelpers.CheckFloat2(b, testSpline2D.Get2DPointWorld(1f));
            TestHelpers.CheckFloat2(b, testSpline2D.GetControlPoint(1, SplinePoint.Point));

            //update 0 point position
            float2 a2 = new float2(-1f, -1f);

            testSpline2D.UpdateControlPointLocal(0, a2, SplinePoint.Point);

            TestHelpers.CheckFloat2(a2, testSpline2D.Get2DPointWorld(0f));
            TestHelpers.CheckFloat2(a2, testSpline2D.GetControlPoint(0, SplinePoint.Point));

            //update 1 point position
            float2 b2 = new float2(2f, 2f);

            testSpline2D.UpdateControlPointLocal(1, b2, SplinePoint.Point);

            TestHelpers.CheckFloat2(b2, testSpline2D.Get2DPointWorld(1f));
            TestHelpers.CheckFloat2(b2, testSpline2D.GetControlPoint(1, SplinePoint.Point));
        }
        public void Point3()
        {
            ISimpleTestSpline2D testSpline2D = PrepareSpline();

            float2 a = float2.zero;
            float2 b = new float2(2.5f, 0f);
            float2 c = new float2(7.5f, 0f);
            float2 d = new float2(10f, 0f);

            testSpline2D.AddControlPoint(a);
            testSpline2D.AddControlPoint(b);
            testSpline2D.AddControlPoint(c);
            testSpline2D.AddControlPoint(d);

            Assert.AreEqual(4, testSpline2D.ControlPointCount);
            Assert.AreEqual(4, testSpline2D.Modes.Count);
            Assert.AreEqual(10f, testSpline2D.Length());

            Assert.AreEqual(testSpline2D.ExpectedTimeCount(testSpline2D.ControlPointCount), testSpline2D.Times.Count);
            Assert.AreEqual(0.5f, testSpline2D.Times[0]);
            Assert.AreEqual(1f, testSpline2D.Times[1]);

            TestHelpers.CheckFloat2(a, testSpline2D.Get2DPointWorld(0f));
            TestHelpers.CheckFloat2(new float2(5f, 0f), testSpline2D.Get2DPointWorld(0.5f));
            TestHelpers.CheckFloat2(d, testSpline2D.Get2DPointWorld(1f));
            TestHelpers.CheckFloat2(d, testSpline2D.Get2DPointWorld(1.5f));
            TestHelpers.CheckFloat2(d, testSpline2D.Get2DPointWorld(5f));
        }
        public void InsertWithOne()
        {
            ISimpleTestSpline2D testSpline2D = PrepareSpline();

            float2 a = float2.zero;

            testSpline2D.AddControlPoint(float2.zero);

            Assert.AreEqual(1, testSpline2D.ControlPointCount);
            Assert.AreEqual(1, testSpline2D.Modes.Count);
            Assert.AreEqual(testSpline2D.ExpectedTimeCount(testSpline2D.ControlPointCount), testSpline2D.Times.Count);
            TestHelpers.CheckFloat2(a, testSpline2D.Get2DPointWorld(0f));
            TestHelpers.CheckFloat2(a, testSpline2D.GetControlPoint(0, SplinePoint.Point));

            float2 b = new float2(10f, 0f);

            testSpline2D.InsertControlPoint(1000, b);

            TestHelpers.CheckFloat2(b, testSpline2D.Get2DPointWorld(1f));
            TestHelpers.CheckFloat2(b, testSpline2D.GetControlPoint(1, SplinePoint.Point));

            Assert.AreEqual(2, testSpline2D.ControlPointCount);
            Assert.AreEqual(2, testSpline2D.Modes.Count);
            Assert.AreEqual(testSpline2D.ExpectedTimeCount(testSpline2D.ControlPointCount), testSpline2D.Times.Count);
        }
        public void InsertAtStart()
        {
            ISimpleTestSpline2D testSpline2D = PrepareSpline();

            float2 a = float2.zero;

            testSpline2D.AddControlPoint(float2.zero);
            float2 b = new float2(2f, 0f);

            testSpline2D.AddControlPoint(b);

            Assert.AreEqual(2, testSpline2D.ControlPointCount);
            Assert.AreEqual(2, testSpline2D.Modes.Count);
            Assert.AreEqual(testSpline2D.ExpectedTimeCount(testSpline2D.ControlPointCount), testSpline2D.Times.Count);

            TestHelpers.CheckFloat2(a, testSpline2D.Get2DPointWorld(0f));
            TestHelpers.CheckFloat2(a, testSpline2D.GetControlPoint(0, SplinePoint.Point));
            TestHelpers.CheckFloat2(b, testSpline2D.Get2DPointWorld(1f));
            TestHelpers.CheckFloat2(b, testSpline2D.GetControlPoint(1, SplinePoint.Point));

            //insert point
            float2 c = new float2(-2f, 0f);

            testSpline2D.InsertControlPoint(0, c);

            Assert.AreEqual(3, testSpline2D.ControlPointCount);
            Assert.AreEqual(3, testSpline2D.Modes.Count);
            Assert.AreEqual(testSpline2D.ExpectedTimeCount(testSpline2D.ControlPointCount), testSpline2D.Times.Count);
            TestHelpers.CheckFloat2(c, testSpline2D.GetControlPoint(0, SplinePoint.Point));
            TestHelpers.CheckFloat2(a, testSpline2D.GetControlPoint(1, SplinePoint.Point));
            TestHelpers.CheckFloat2(b, testSpline2D.GetControlPoint(2, SplinePoint.Point));
        }
        public void ProgressUnder([NUnit.Framework.Range(0, 8)] int nodeAmount)
        {
            const float offsetX = 2f;
            const float offsetY = 2f;

            ISimpleTestSpline2D testSpline2D = PrepareSpline();

            float2 first = float2.zero;

            for (int i = 0; i < nodeAmount; i++)
            {
                float2 pos = new float2(offsetX * (i + 1), offsetY * (i + 1));
                if (i == 0)
                {
                    first = pos;
                }
                testSpline2D.AddControlPoint(pos);
            }

            Assert.AreEqual(nodeAmount, testSpline2D.ControlPointCount);

            Assert.AreEqual(first, testSpline2D.Get2DPointWorld(0f));
            Assert.AreEqual(first, testSpline2D.Get2DPointWorld(-0.5f));
            Assert.AreEqual(first, testSpline2D.Get2DPointWorld(-1f));
        }
        public void Point2()
        {
            ISimpleTestSpline2D testSpline2D = PrepareSpline();

            float2 a = float2.zero;

            testSpline2D.AddControlPoint(float2.zero);
            float2 b = c_xOne;

            testSpline2D.AddControlPoint(b);
            float2 c = c_xTwo;

            testSpline2D.AddControlPoint(c);

            Assert.AreEqual(3, testSpline2D.ControlPointCount);
            Assert.AreEqual(2f, testSpline2D.Length());

            Assert.AreEqual(testSpline2D.ExpectedTimeCount(testSpline2D.ControlPointCount), testSpline2D.Times.Count);
            //Assert.AreEqual(0.5f, testSpline.Times[0]);
            //Assert.AreEqual(1f, testSpline.Times[1]);

            TestHelpers.CheckFloat2(a, testSpline2D.Get2DPointWorld(0f));
            TestHelpers.CheckFloat2(new float2(1f, 0f), testSpline2D.Get2DPointWorld(0.5f));
            //TestHelpers.CheckFloat2(c * 0.77f, spline.GetPoint(0.77f)); // fails due to bezier point bunching issues
        }
        public void NoPoints()
        {
            ISimpleTestSpline2D testSpline2D = PrepareSpline();

            Assert.AreEqual(0, testSpline2D.ControlPointCount);

            TestHelpers.CheckFloat2(float2.zero, testSpline2D.Get2DPointWorld(0f));
            TestHelpers.CheckFloat2(float2.zero, testSpline2D.Get2DPointWorld(1f));
            TestHelpers.CheckFloat2(float2.zero, testSpline2D.Get2DPointWorld(0.5f));
        }
        public void Loopback()
        {
            ISimpleTestSpline2D testSpline2D = PrepareSpline();

            float2 topLeft     = new float2(1f, 2f);
            float2 bottomLeft  = new float2(1f, 1f);
            float2 bottomRight = new float2(2f, 1f);

            testSpline2D.AddControlPoint(topLeft);
            testSpline2D.AddControlPoint(bottomLeft);
            testSpline2D.AddControlPoint(bottomRight);

            Assert.AreEqual(3, testSpline2D.ControlPointCount);
            Assert.AreEqual(2, testSpline2D.SegmentPointCount);

            Assert.AreEqual(topLeft, testSpline2D.Get2DPointWorld(0f));
            Assert.AreNotEqual(topLeft, testSpline2D.Get2DPointWorld(1f));
            Assert.AreEqual(bottomRight, testSpline2D.Get2DPointWorld(1f));
        }
        public void Circle()
        {
            ISimpleTestSpline2D testSpline2D = PrepareSpline();

            float2 topLeft     = new float2(1f, 2f);
            float2 bottomLeft  = new float2(1f, 1f);
            float2 bottomRight = new float2(2f, 1f);
            float2 topRight    = new float2(2f, 2f);

            testSpline2D.AddControlPoint(topLeft);
            testSpline2D.AddControlPoint(bottomLeft);
            testSpline2D.AddControlPoint(bottomRight);
            testSpline2D.AddControlPoint(topRight);

            Assert.AreEqual(4, testSpline2D.ControlPointCount);
            Assert.AreEqual(3, testSpline2D.SegmentPointCount);

            TestHelpers.CheckFloat2(topLeft, testSpline2D.Get2DPointWorld(0f));
            TestHelpers.CheckFloat2(topLeft, testSpline2D.Get2DPointWorld(-0.1f));
            TestHelpers.CheckFloat2(topRight, testSpline2D.Get2DPointWorld(1f));
            TestHelpers.CheckFloat2(topRight, testSpline2D.Get2DPointWorld(1.1f));

            (testSpline2D as ILoopingSpline).Looped = true;
            Assert.AreEqual(4, testSpline2D.ControlPointCount);
            Assert.AreEqual(5, testSpline2D.SegmentPointCount);

            Assert.AreNotEqual(topLeft, testSpline2D.Get2DPointWorld(-1f));
            Assert.AreNotEqual(topRight, testSpline2D.Get2DPointWorld(2f));
        }
        public void Update2()
        {
            ISimpleTestSpline2D testSpline2D = PrepareSpline();

            float2 a = float2.zero;

            testSpline2D.AddControlPoint(float2.zero);
            float2 b = new float2(1f, 0f);

            testSpline2D.AddControlPoint(b);
            float2 c = new float2(2f, 0f);

            testSpline2D.AddControlPoint(c);

            Assert.AreEqual(3, testSpline2D.ControlPointCount);
            Assert.AreEqual(3, testSpline2D.Modes.Count);
            Assert.AreEqual(1, testSpline2D.Times.Count);
            TestHelpers.CheckFloat2(new float2(0.5f, 0f), testSpline2D.Get2DPointWorld(0f));
            TestHelpers.CheckFloat2(a, testSpline2D.GetControlPoint(0, SplinePoint.Point));
            TestHelpers.CheckFloat2(b, testSpline2D.Get2DPointWorld(0.5f));
            TestHelpers.CheckFloat2(b, testSpline2D.GetControlPoint(1, SplinePoint.Point));
            TestHelpers.CheckFloat2(new float2(1.5f, 0f), testSpline2D.Get2DPointWorld(1f));
            TestHelpers.CheckFloat2(c, testSpline2D.GetControlPoint(2, SplinePoint.Point));

            //update 0 point position
            testSpline2D.UpdateControlPointLocal(0, new float2(0.5f, 1f), SplinePoint.Point);
            TestHelpers.CheckFloat2(new float2(0.75f, 0.5f), testSpline2D.Get2DPointWorld(0f));
            TestHelpers.CheckFloat2(new float2(0.5f, 1f), testSpline2D.GetControlPoint(0, SplinePoint.Point));

            //update 1 point position
            float2 b2 = new float2(1f, 1f);

            testSpline2D.UpdateControlPointLocal(1, b2, SplinePoint.Point);
            TestHelpers.CheckFloat2(b2, testSpline2D.GetControlPoint(1, SplinePoint.Point));

            //update 2 point position
            testSpline2D.UpdateControlPointLocal(2, new float2(2f, 1f), SplinePoint.Point);
            TestHelpers.CheckFloat2(new float2(1.5f, 1f), testSpline2D.Get2DPointWorld(1f));
            TestHelpers.CheckFloat2(new float2(2f, 1f), testSpline2D.GetControlPoint(2, SplinePoint.Point));
        }
        public void NoTouch4Point()
        {
            ISimpleTestSpline2D testSpline2D = PrepareSpline();

            float2 topLeft     = new float2(1f, 2f);
            float2 bottomLeft  = new float2(1f, 1f);
            float2 bottomRight = new float2(2f, 1f);
            float2 topRight    = new float2(2f, 2f);

            testSpline2D.AddControlPoint(topLeft);
            testSpline2D.AddControlPoint(bottomLeft);
            testSpline2D.AddControlPoint(bottomRight);
            testSpline2D.AddControlPoint(topRight);

            Assert.AreEqual(4, testSpline2D.ControlPointCount);
            Assert.AreEqual(3, testSpline2D.SegmentPointCount);

            TestHelpers.CheckFloat2(topLeft, testSpline2D.Get2DPointWorld(0f));
            TestHelpers.CheckFloat2(topLeft, testSpline2D.Get2DPointWorld(-0.1f));
            TestHelpers.CheckFloat2(topRight, testSpline2D.Get2DPointWorld(1f));
            TestHelpers.CheckFloat2(topRight, testSpline2D.Get2DPointWorld(1.1f), 0.025f);

            Assert.AreNotEqual(bottomLeft, testSpline2D.Get2DPointWorld(0.33f));
            Assert.AreNotEqual(topRight, testSpline2D.Get2DPointWorld(0.66f));
        }
        public void Point4()
        {
            ISimpleTestSpline2D testSpline2D = PrepareSpline();

            float2 a = new float2(3f, 3f);

            testSpline2D.AddControlPoint(a);

            Assert.AreEqual(1, testSpline2D.ControlPointCount);
            Assert.AreEqual(0f, testSpline2D.Length());

            TestHelpers.CheckFloat2(new float2(3f, 3f), testSpline2D.Get2DPointWorld(0.5f));
        }
        public void Point2()
        {
            ISimpleTestSpline2D testSpline2D = PrepareSpline();

            float2 a = float2.zero;

            testSpline2D.AddControlPoint(float2.zero);
            float2 b = new float2(1f, 0f);

            testSpline2D.AddControlPoint(b);
            float2 c = new float2(2f, 0f);

            testSpline2D.AddControlPoint(c);

            Assert.AreEqual(3, testSpline2D.ControlPointCount);
            Assert.AreEqual(1f, testSpline2D.Length());

            Assert.AreEqual(1, testSpline2D.Times.Count);
            Assert.AreEqual(1f, testSpline2D.Times[0]);

            TestHelpers.CheckFloat2(new float2(0.5f, 0f), testSpline2D.Get2DPointWorld(0f));
            TestHelpers.CheckFloat2(new float2(1f, 0f), testSpline2D.Get2DPointWorld(0.5f));
        }
        public void InsertEmpty()
        {
            ISimpleTestSpline2D testSpline2D = PrepareSpline();

            Assert.AreEqual(0, testSpline2D.ControlPointCount);
            Assert.AreEqual(0, testSpline2D.Modes.Count);
            Assert.AreEqual(testSpline2D.ExpectedTimeCount(testSpline2D.ControlPointCount), testSpline2D.Times.Count);

            float2 a = float2.zero;

            testSpline2D.InsertControlPoint(12, a);

            Assert.AreEqual(1, testSpline2D.ControlPointCount);
            Assert.AreEqual(1, testSpline2D.Modes.Count);
            Assert.AreEqual(testSpline2D.ExpectedTimeCount(testSpline2D.ControlPointCount), testSpline2D.Times.Count);
            TestHelpers.CheckFloat2(a, testSpline2D.Get2DPointWorld(0f));
            TestHelpers.CheckFloat2(a, testSpline2D.GetControlPoint(0, SplinePoint.Point));
        }
Beispiel #15
0
        public void Point5()
        {
            ISimpleTestSpline2D testSpline2D = PrepareSpline();

            float2 a = new float2(1f, 10f);

            testSpline2D.AddControlPoint(a);
            float2 b = new float2(2f, 10f);

            testSpline2D.AddControlPoint(b);
            float2 c = new float2(3f, 10f);

            testSpline2D.AddControlPoint(c);

            Assert.AreEqual(3, testSpline2D.ControlPointCount);
            Assert.AreEqual(2f, testSpline2D.Length());

            TestHelpers.CheckFloat2(new float2(2.5f, 10f), testSpline2D.Get2DPointWorld(0.7f), 0.01f);
        }
        public void MultiMidPoint([NUnit.Framework.Range(1, 12)] int points)
        {
            ISimpleTestSpline2D testSpline2D = PrepareSpline();

            for (int i = 0; i < points; i++)
            {
                testSpline2D.AddControlPoint(new float2(i));
            }

            // todo figure out how to get catmull to like this test set
            // catmull has issues with long straights
            Assume.That(testSpline2D.SplineDataType != SplineType.CatmullRom, "Catmull rom spline currently not supported by this test");

            Assert.AreEqual(points, testSpline2D.ControlPointCount);
            Assert.AreEqual(testSpline2D.ExpectedTimeCount(testSpline2D.ControlPointCount), testSpline2D.Times.Count);

            float2 point = testSpline2D.Get2DPointWorld(0.5f);

            TestHelpers.CheckFloat2(new float2((points - 1) / 2f), point);
        }
        public void Translation()
        {
            ISimpleTestSpline2D testSpline2D = PrepareSpline();
            float3 move = new float3(10f, 0f, 10f);

            ((MonoBehaviour)testSpline2D).transform.position = move;

            Assert.AreEqual(0, testSpline2D.ControlPointCount);
            Assert.AreEqual(0, testSpline2D.Modes.Count);
            Assert.AreEqual(1, testSpline2D.Times.Count);

            float2 a = float2.zero;

            testSpline2D.InsertControlPoint(12, a);

            Assert.AreEqual(1, testSpline2D.ControlPointCount);
            Assert.AreEqual(1, testSpline2D.Modes.Count);
            Assert.AreEqual(1, testSpline2D.Times.Count);
            TestHelpers.CheckFloat2(a, testSpline2D.Get2DPointLocal(0f));
            TestHelpers.CheckFloat2(move.xy + a, testSpline2D.Get2DPointWorld(0f));
            TestHelpers.CheckFloat2(a, testSpline2D.GetControlPoint(0, SplinePoint.Point));
        }