Exemple #1
0
    /// <summary>
    /// 从源星球到目标星球的最短路径(待优化:保存源星球的最短路径表,下次寻找不必再次运算算法)
    /// </summary>
    /// <param name="StartStar">源星球</param>
    /// <param name="EndStar">目标星球</param>
    /// <returns>所有经过的星球(包括目标星球)</returns>
    public static RoutePlanResult Plan(UnitStar StartStar, UnitStar EndStar)
    {
        RoutePlanResult result = new RoutePlanResult();

        //在调用最短路径算法前, Node.CheckNodeCanReach先判断目标节点是否在源节点移动半径内,是的话直接返回源节点(两点之间,直线最短)
        if (StartStar.CheckStarReachByDistance(EndStar) == true)
        {
            result.PassedStars.Add(StartStar);
            result.PassedStars.Add(EndStar);
            result.Weight = StartStar.GetTargetStarDistance(EndStar);
        }
        else
        {
            RoutePlanner planner = new RoutePlanner();
            result = planner.Paln(MogoWorld.m_dataMapManager.GetStarList(), StartStar.UnitId, EndStar.UnitId);
            result.PassedStars.Add(EndStar);
            planner = null;
        }
        return(result);
    }