Example #1
0
        private List <Vector3D> GetBestPathFromManagers(MyPlanet planet, Vector3D initialPosition, Vector3D targetPosition)
        {
            bool                    flag;
            List <Vector3D>         list;
            Vector3D?               nullable;
            List <MyNavmeshManager> list2 = (from m in this.m_planetManagers[planet]
                                             where m.ContainsPosition(initialPosition)
                                             select m).ToList <MyNavmeshManager>();

            if (list2.Count <= 0)
            {
                nullable = null;
                this.CreateManager(initialPosition, nullable).TilesToGenerate(initialPosition, targetPosition);
                return(new List <Vector3D>());
            }
            using (List <MyNavmeshManager> .Enumerator enumerator = list2.GetEnumerator())
            {
                while (true)
                {
                    if (!enumerator.MoveNext())
                    {
                        break;
                    }
                    MyNavmeshManager current = enumerator.Current;
                    if (current.ContainsPosition(targetPosition) && (current.GetPathPoints(initialPosition, targetPosition, out list, out flag) || !flag))
                    {
                        return(list);
                    }
                }
            }
            MyNavmeshManager manager  = null;
            double           maxValue = double.MaxValue;

            foreach (MyNavmeshManager manager3 in list2)
            {
                double num2 = (manager3.Center - initialPosition).LengthSquared();
                if (maxValue > num2)
                {
                    maxValue = num2;
                    manager  = manager3;
                }
            }
            if (((!manager.GetPathPoints(initialPosition, targetPosition, out list, out flag) & flag) && (list.Count <= 2)) && (maxValue > this.MIN_NAVMESH_MANAGER_SQUARED_DISTANCE))
            {
                double num3 = (initialPosition - targetPosition).LengthSquared();
                if (((manager.Center - targetPosition).LengthSquared() - num3) > this.MIN_NAVMESH_MANAGER_SQUARED_DISTANCE)
                {
                    nullable = null;
                    this.CreateManager(initialPosition, nullable).TilesToGenerate(initialPosition, targetPosition);
                }
            }
            return(list);
        }