Esempio n. 1
0
        private bool OutsideRoad(Ets2Item road, float x, float y)
        {
            if (road == null)
            {
                return(true);
            }
            if (road.StartNode == null || road.EndNode == null)
            {
                return(true);
            }
            var minX = Math.Min(road.StartNode.X, road.EndNode.X);
            var maxX = Math.Max(road.StartNode.X, road.EndNode.X);
            var minY = Math.Min(road.StartNode.Z, road.EndNode.Z);
            var maxY = Math.Max(road.StartNode.Z, road.EndNode.Z);

            var margin = 10.5f;

            if (minX - margin >= x && maxX + margin <= x &&
                minY - margin >= y && maxY + margin <= y)
            {
                return(false);
            }
            else
            {
                return(true);
            }
        }
Esempio n. 2
0
        public Ets2NavigationRoute(Ets2Item start, Ets2Item end, Ets2Point from, Ets2Point to, Ets2Mapper mapper)
        {
            Start = start;
            End = end;
            From = from;
            To = to;
            Mapper = mapper;

            if (Start != End)
            {
                ThreadPool.QueueUserWorkItem(FindRoute);
            }
        }
Esempio n. 3
0
        private float RoadDistance(Ets2Item road, float x, float y)
        {
            if (road == null)
            {
                return(float.MaxValue);
            }
            if (road.StartNode == null || road.EndNode == null)
            {
                return(float.MaxValue);
            }

            if (Math.Abs(road.StartNode.X - x) > 500)
            {
                return(float.MaxValue);
            }
            if (Math.Abs(road.StartNode.Z - y) > 500)
            {
                return(float.MaxValue);
            }
            if (road.RoadPolygons == null)
            {
                road.GenerateRoadPolygon(64);
            }

            var minPerPoint = float.MaxValue;

            foreach (var pt in road.RoadPolygons)
            {
                var dx1 = pt.X - x;
                var dy1 = pt.Y - y;
                var r1  = (float)Math.Sqrt(dx1 * dx1 + dy1 * dy1);

                if (minPerPoint >= r1)
                {
                    minPerPoint = r1;
                }
            }

            return(minPerPoint);
        }
        public Ets2NavigationSegment(Ets2Item prefab)
        {
            Type = Ets2NavigationSegmentType.Prefab;

            Prefab = prefab;
        }
Esempio n. 5
0
        public Ets2Item FindItem(ulong uid)
        {
            if (uid == 0)
                return null;

            var pos = Stream.IndexesOfUlong(BitConverter.GetBytes(uid));

            foreach (var off in pos)
            {
                var offs = off - 4;

                var type = BitConverter.ToUInt32(Stream, offs);

                if (type < 0x40 && type != 0)
                {
                    var item = new Ets2Item(uid, this, offs);
                    if (item.Valid)
                    {
                        return item;
                    }
                }
            }

            return null;
        }