Ejemplo n.º 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);
            }
        }
Ejemplo n.º 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));
        }