예제 #1
0
        public RegionWaypointPoint GiveNeighborWaypointInNeighborRegion
            (Guid sourceRegionID,
            Guid sourceWaypointID,
            Guid sinkRegionID)
        {
            RegionWaypointPoint regionWaypointPoint = new RegionWaypointPoint();

            ConnectionType[] emptyAvoid = new ConnectionType[0];
            RegionEdge       regionEdge =
                GetRegionEdgeMostNearSourceWaypoint(sourceRegionID,
                                                    sourceWaypointID,
                                                    sinkRegionID,
                                                    emptyAvoid);

            regionWaypointPoint._waypointID = regionEdge._waypoint2;
            regionWaypointPoint._regionID   = regionEdge._region2;
            return(regionWaypointPoint);
        }
예제 #2
0
        public int GetDistanceOfLongHallway(RegionWaypointPoint currentGuid,
                                            int nextStep,
                                            List <RegionWaypointPoint> allRoute,
                                            ConnectionType[] avoidConnectionType)
        {
            int distance = 0;

            if (nextStep <= 0)
            {
                nextStep = 1;
            }
            for (int i = nextStep - 1; i < allRoute.Count(); i++)
            {
                if (allRoute[i]._regionID != allRoute[i + 1]._regionID)
                {
                    if (_regions[allRoute[i]._regionID]._floor ==
                        _regions[allRoute[i + 1]._regionID]._floor)
                    {
                        RegionEdge regionEdge =
                            GetRegionEdgeMostNearSourceWaypoint
                                (allRoute[i].
                                _regionID, allRoute[i].
                                _waypointID, allRoute[i + 1].
                                _regionID, avoidConnectionType);
                        distance = System.Convert.ToInt32(regionEdge._distance);
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    WaypointEdge waypointEdge =
                        GetWaypointEdgeInRegion(allRoute[i]._regionID,
                                                allRoute[i]._waypointID,
                                                allRoute[i + 1]._waypointID,
                                                avoidConnectionType);

                    distance =
                        distance + System.Convert.ToInt32(waypointEdge._distance);

                    if (i + 2 >= allRoute.Count())
                    {
                        break;
                    }
                    else
                    {
                        WaypointEdge currentWaypointEdge =
                            GetWaypointEdgeInRegion(allRoute[i]._regionID,
                                                    allRoute[i]._waypointID,
                                                    allRoute[i + 1]._waypointID,
                                                    avoidConnectionType);
                        WaypointEdge nextWaypointEdge =
                            GetWaypointEdgeInRegion(allRoute[i + 1]._regionID,
                                                    allRoute[i + 1]._waypointID,
                                                    allRoute[i + 2]._waypointID,
                                                    avoidConnectionType);
                        if (currentWaypointEdge._direction
                            != nextWaypointEdge._direction)
                        {
                            break;
                        }
                    }
                }
            }
            return(distance);
        }