Beispiel #1
0
        /// <summary>
        /// 异步坐标点具体实现
        /// </summary>
        /// <param name="map"></param>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <param name="range"></param>
        /// <param name="IsIgnoreCorner"></param>
        /// <param name="OnComplete"></param>
        /// <returns></returns>
        IEnumerator FindPathAsynImpl(AStarMap map, Vector3 start, Vector3 end, float range, bool IsIgnoreCorner, Action <IList <AStarNode> > OnComplete)
        {
            AyncPathData data = new AyncPathData();

            ThreadPool.QueueUserWorkItem((state) =>
            {
                AyncPathData stateData       = state as AyncPathData;
                IList <AStarNode> startNodes = map.GetMapData().GetAStarNodes(start, range);
                IList <AStarNode> endNodes   = map.GetMapData().GetAStarNodes(end, range);
                if (startNodes.Count == 0 || endNodes.Count == 0)
                {
                    stateData.HasPath = false;
                }
                else
                {
                    stateData.Paths = map.GetPath(startNodes[0], endNodes[0], IsIgnoreCorner);
                    if (stateData.Paths == null)
                    {
                        stateData.HasPath = false;
                    }
                }
            }, data);

            while (data.HasPath && data.Paths == null)
            {
                yield return(m_WaitforEndOfFrame);
            }
            if (OnComplete != null)
            {
                OnComplete(data.Paths);
            }
        }
Beispiel #2
0
        /// <summary>
        /// 根据坐标同步寻路
        /// </summary>
        /// <param name="map"></param>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <param name="range"></param>
        /// <param name="IsIgnoreCorner"></param>
        /// <returns></returns>
        public IList <AStarNode> FindPathSync(AStarMap map, Vector3 start, Vector3 end, float range, bool IsIgnoreCorner)
        {
            IList <AStarNode> startNodes = map.GetMapData().GetAStarNodes(start, range);
            IList <AStarNode> endNodes   = map.GetMapData().GetAStarNodes(end, range);

            if (startNodes.Count == 0 || endNodes.Count == 0)
            {
                return(null);
            }
            return(FindPathSync(map, startNodes[0], endNodes[0], IsIgnoreCorner));
        }
Beispiel #3
0
        /// <summary>
        /// 异步寻路采用线程池管理
        /// </summary>
        /// <param name="map"></param>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <param name="IsIgnoreCorner"></param>
        /// <param name="OnComplete"></param>
        /// <returns></returns>
        IEnumerator FindPathAsynImpl(AStarMap map, AStarNode start, AStarNode end, bool IsIgnoreCorner, Action <IList <AStarNode> > OnComplete)
        {
            AyncPathData data = new AyncPathData();

            ThreadPool.QueueUserWorkItem((state) =>
            {
                AyncPathData stateData = state as AyncPathData;
                stateData.Paths        = map.GetPath(start, end, IsIgnoreCorner);
            }, data);
            while (data.Paths == null)
            {
                yield return(m_WaitforEndOfFrame);
            }
            if (OnComplete != null)
            {
                OnComplete(data.Paths);
            }
        }
Beispiel #4
0
        public int extend2;               // for extension


        public PathFindingRequest(Int3 from, Int3 to, AStarMap map, AStarPathPlanner planner, int ex1 = 0, int ex2 = 0)
        {
            fromPosition = from;
            toPosition   = to;
            INavGraph graph    = map as INavGraph;
            AStarNode fromNode = graph.GetNodeAt(to);
            AStarNode toNode   = graph.GetNodeAt(from);

            if (fromNode == null)
            {
                UnityEngine.Debug.LogError("PathFindingRequest: fromNode is null.");
            }
            if (toNode == null)
            {
                UnityEngine.Debug.LogError("PathFindingRequest: toNode is null.");
            }
            SetData(fromNode, toNode, map, planner);
            extend1 = ex1;
            extend2 = ex2;
        }
Beispiel #5
0
 /// <summary>
 /// 异步寻路
 /// </summary>
 /// <param name="map"></param>
 /// <param name="start"></param>
 /// <param name="end"></param>
 /// <param name="IsIgnoreCorner"></param>
 /// <param name="OnComplete"></param>
 public void FindPathAsyn(AStarMap map, AStarNode start, AStarNode end, bool IsIgnoreCorner, Action <IList <AStarNode> > OnComplete)
 {
     StartCoroutine(FindPathAsynImpl(map, start, end, IsIgnoreCorner, OnComplete));
 }
Beispiel #6
0
 /// <summary>
 /// 同步寻路
 /// </summary>
 /// <param name="map"></param>
 /// <param name="start"></param>
 /// <param name="end"></param>
 /// <param name="IsIgnoreCorner"></param>
 /// <returns></returns>
 public IList <AStarNode> FindPathSync(AStarMap map, AStarNode start, AStarNode end, bool IsIgnoreCorner)
 {
     return(map.GetPath(start, end, IsIgnoreCorner));
 }
Beispiel #7
0
 /// <summary>
 /// 异步坐标寻路
 /// </summary>
 /// <param name="map"></param>
 /// <param name="start"></param>
 /// <param name="end"></param>
 /// <param name="range"></param>
 /// <param name="IsIgnoreCorner"></param>
 /// <param name="OnComplete"></param>
 public void FindPathAsyn(AStarMap map, Vector3 start, Vector3 end, float range, bool IsIgnoreCorner, Action <IList <AStarNode> > OnComplete)
 {
     StartCoroutine(FindPathAsynImpl(map, start, end, range, IsIgnoreCorner, OnComplete));
 }