Exemplo n.º 1
0
        public IEnumerable <Ets2Point> GeneratePolygonForRoute(Ets2PrefabRoute route, Ets2Node node, int nodeOr)
        {
            List <Ets2Point> p = new List <Ets2Point>();

            if (route == null || route.Route == null)
            {
                return(p);
            }

            /*
             * yaw -= this.Nodes[nodeOr].Yaw;
             * yaw += Math.PI/2;
             */
            var xOr = node.X;
            var yOr = node.Z;
            var yaw = node.Yaw - this.Nodes[nodeOr].Yaw + Math.PI / 2;

            foreach (var curve in route.Route)
            {
                var srx = curve.StartX - this.Nodes[nodeOr].X;
                var erx = curve.EndX - this.Nodes[nodeOr].X;
                var srz = curve.StartZ - this.Nodes[nodeOr].Z;
                var erz = curve.EndZ - this.Nodes[nodeOr].Z;

                var sr = (float)Math.Sqrt(srx * srx + srz * srz);
                var er = (float)Math.Sqrt(erx * erx + erz * erz);

                var ans = yaw - Math.Atan2(srz, srx);
                var ane = yaw - Math.Atan2(erz, erx);

                var sx = xOr - sr * (float)Math.Sin(ans);
                var ex = xOr - er * (float)Math.Sin(ane);
                var sz = yOr - sr * (float)Math.Cos(ans);
                var ez = yOr - er * (float)Math.Cos(ane);

                // TODO: Temporary linear interpolation
                // TODO: Interpolate heading & Y value
                var ps = new Ets2Point[2];
                ps[0] = new Ets2Point(sx, node.Y, sz, (float)ans);
                ps[1] = new Ets2Point(ex, node.Y, ez, (float)ane);

                p.AddRange(ps);
            }

            return(p);
        }
Exemplo n.º 2
0
        public IEnumerable<Ets2Point> GeneratePolygonForRoute(Ets2PrefabRoute route, Ets2Node node,  int nodeOr)
        {
            List<Ets2Point> p = new List<Ets2Point>();

            if (route == null || route.Route == null)
            return p;

            /*
            yaw -= this.Nodes[nodeOr].Yaw;
            yaw += Math.PI/2;
            */
            var xOr = node.X;
            var yOr = node.Z;
            var yaw = node.Yaw - this.Nodes[nodeOr].Yaw + Math.PI / 2;

            foreach (var curve in route.Route)
            {
                var srx = curve.StartX - this.Nodes[nodeOr].X;
                var erx = curve.EndX - this.Nodes[nodeOr].X;
                var srz = curve.StartZ - this.Nodes[nodeOr].Z;
                var erz = curve.EndZ - this.Nodes[nodeOr].Z;

                var sr = (float) Math.Sqrt(srx*srx + srz*srz);
                var er = (float) Math.Sqrt(erx*erx + erz*erz);

                var ans = yaw - Math.Atan2(srz, srx);
                var ane = yaw - Math.Atan2(erz, erx);

                var sx = xOr - sr*(float) Math.Sin(ans);
                var ex = xOr - er*(float) Math.Sin(ane);
                var sz = yOr - sr*(float) Math.Cos(ans);
                var ez = yOr - er*(float) Math.Cos(ane);

                // TODO: Temporary linear interpolation
                // TODO: Interpolate heading & Y value
                var ps = new Ets2Point[2];
                ps[0] = new Ets2Point(sx, node.Y, sz,(float) ans);
                ps[1] = new Ets2Point(ex, node.Y, ez, (float)ane);

                p.AddRange(ps);
            }

            return p;
        }