/// <summary>
        /// Plan over all exits
        /// </summary>
        /// <param name="exitWaypoint"></param>
        /// <param name="goal"></param>
        /// <returns></returns>
        public IntersectionPlan GetIntersectionExitPlan(ITraversableWaypoint exitWaypoint, INavigableNode goal)
        {
            // initialize the intersection plan
            IntersectionPlan ip = new IntersectionPlan(exitWaypoint, new List <PlanableInterconnect>(), null);

            ip.ExitWaypoint = exitWaypoint;

            //check valid exit
            if (exitWaypoint.IsExit)
            {
                // plan over each interconnect
                foreach (ArbiterInterconnect ai in exitWaypoint.Exits)
                {
                    // start of plan is the final wp of itner
                    INavigableNode start = (INavigableNode)ai.FinalGeneric;

                    // plan
                    double time;
                    List <INavigableNode> nodes;
                    this.Plan(start, goal, out nodes, out time);
                    time += ai.TimeCost();

                    // create planned interconnect
                    PlanableInterconnect pi = new PlanableInterconnect(ai, time, nodes);

                    // add planned interconnect to the intersection plan
                    ip.PossibleEntries.Add(pi);
                }
            }

            // return the plan
            return(ip);
        }
        /// <summary>
        /// Plan over all exits
        /// </summary>
        /// <param name="exitWaypoint"></param>
        /// <param name="goal"></param>
        /// <returns></returns>
        public IntersectionPlan GetIntersectionExitPlan(ITraversableWaypoint exitWaypoint, INavigableNode goal)
        {
            // initialize the intersection plan
            IntersectionPlan ip = new IntersectionPlan(exitWaypoint, new List<PlanableInterconnect>(), null);
            ip.ExitWaypoint = exitWaypoint;

            //check valid exit
            if (exitWaypoint.IsExit)
            {
                // plan over each interconnect
                foreach (ArbiterInterconnect ai in exitWaypoint.Exits)
                {
                    // start of plan is the final wp of itner
                    INavigableNode start = (INavigableNode)ai.FinalGeneric;

                    // plan
                    double time;
                    List<INavigableNode> nodes;
                    this.Plan(start, goal, out nodes, out time);
                    time += ai.TimeCost();

                    // create planned interconnect
                    PlanableInterconnect pi = new PlanableInterconnect(ai, time, nodes);

                    // add planned interconnect to the intersection plan
                    ip.PossibleEntries.Add(pi);
                }
            }

            // return the plan
            return ip;
        }