Example #1
0
        public void GenerateRoadPolygon(int steps)
        {
            if (RoadPolygons == null)
            {
                RoadPolygons = new Ets2Point[0];
            }

            if (RoadPolygons != null && RoadPolygons.Count() == steps)
            {
                return;
            }

            if (StartNode == null || EndNode == null)
            {
                return;
            }

            if (Type != Ets2ItemType.Road)
            {
                return;
            }

            var ps = new Ets2Point[steps];

            var sx = StartNode.X;
            var ex = EndNode.X;
            var sz = StartNode.Z;
            var ez = EndNode.Z;

            var radius = (float)Math.Sqrt((sx - ex) * (sx - ex) + (sz - ez) * (sz - ez));

            var tangentSX = (float)Math.Cos(-StartNode.Yaw) * radius;
            var tangentEX = (float)Math.Cos(-EndNode.Yaw) * radius;
            var tangentSZ = (float)Math.Sin(-StartNode.Yaw) * radius;
            var tangentEZ = (float)Math.Sin(-EndNode.Yaw) * radius;

            for (int k = 0; k < steps; k++)
            {
                var s = (float)k / (float)(steps - 1);
                var x = (float)Ets2CurveHelper.Hermite(s, sx, ex, tangentSX, tangentEX);
                var z = (float)Ets2CurveHelper.Hermite(s, sz, ez, tangentSZ, tangentEZ);

                ps[k] = new Ets2Point(x, 0, z, 0);
            }

            RoadPolygons = ps;
        }
Example #2
0
        public void GenerateRoadPolygon(int steps)
        {
            if (RoadPolygons == null)
            {
                RoadPolygons = new PointF[0];
            }

            if (RoadPolygons != null && RoadPolygons.Count() == steps)
            {
                return;
            }

            if (StartNode == null || EndNode == null)
            {
                return;
            }

            if (Type != Ets2ItemType.Road)
            {
                return;
            }

            var ps = new PointF[steps];

            var sx = StartNode.X;
            var ex = EndNode.X;
            var sy = StartNode.Z;
            var ey = EndNode.Z;

            var radius = (float)Math.Sqrt((sx - ex) * (sx - ex) + (sy - ey) * (sy - ey));

            var tangentSX = (float)Math.Cos(-StartNode.Yaw) * radius;
            var tangentEX = (float)Math.Cos(-EndNode.Yaw) * radius;
            var tangentSY = (float)Math.Sin(-StartNode.Yaw) * radius;
            var tangentEY = (float)Math.Sin(-EndNode.Yaw) * radius;

            for (int k = 0; k < steps; k++)
            {
                var s = (float)k / (float)(steps - 1);
                var x = (float)Ets2CurveHelper.Hermite(s, sx, ex, tangentSX, tangentEX);
                var y = (float)Ets2CurveHelper.Hermite(s, sy, ey, tangentSY, tangentEY);
                ps[k] = new PointF(x, y);
            }

            RoadPolygons = ps;
        }