Exemple #1
0
        public TownsAndRoads(Tile[,] tileGrid, List <Intersection> intersectionList, List <Town> townList, LoadingInfo loadingInfo)
        {
            ShrunkWorldBuilder.shrunkWorldWidth  = CreatingWorld.worldWidth / 2;
            ShrunkWorldBuilder.shrunkWorldHeight = CreatingWorld.worldHeight / 2;
            shrunkMap = new ShrunkNode[ShrunkWorldBuilder.shrunkWorldWidth, ShrunkWorldBuilder.shrunkWorldHeight];

            // DebugLine("ShrunkWorldBuilder");
            ShrunkWorldBuilder shrunkWorldBuilder = new ShrunkWorldBuilder(tileGrid, shrunkMap, loadingInfo);
            //  DebugLine("TownSitesBuilder");
            TownSitesBuilder townSitesBuilder = new TownSitesBuilder(shrunkMap, townList, ref connectionList, loadingInfo);
            //   DebugLine("BuildingTownRoads");
            BuildingTownRoads buildingTownRoads = new BuildingTownRoads(townList, shrunkMap, shrunkPlotList, loadingInfo);
            //   DebugLine("ClearingShrunkPlotErrors");
            ClearingShrunkPlotErrors clearingShrunkPlotErrors = new ClearingShrunkPlotErrors(shrunkMap, shrunkPlotList);
            //   DebugLine("ExpandShrunkPlot");
            ExpandShrunkPlot expandShrunkPlot = new ExpandShrunkPlot(shrunkPlotList, townList, loadingInfo);
            //  DebugLine("ConnectingTowns");
            ConnectingTowns connectingTowns = new ConnectingTowns(ref townList, ref connectionList, shrunkMap, loadingInfo);
            //   DebugLine("ClearingRoadErrors");
            ClearingRoadErrors clearingRoadErrors = new ClearingRoadErrors(shrunkMap, loadingInfo);
            //    DebugLine("ExpandShrunkWorld");
            ExpandShrunkWorld expandShrunkWorld = new ExpandShrunkWorld(tileGrid, shrunkMap, loadingInfo);
            //    DebugLine("LoadingTownBuildings");
            LoadingTownBuildings loadingTownBuildings = new LoadingTownBuildings(buildingList);
            //     DebugLine("AddingTownBuildings");
            AddingTownBuildings addingTownBuildings = new AddingTownBuildings(buildingList, tileGrid, townList, loadingInfo);
            //     DebugLine("AddingRoadTiles");
            AddingRoadTiles addingRoadTiles = new AddingRoadTiles(tileGrid, loadingInfo);
            //     DebugLine("CreatingIntersections");
            CreatingIntersections creatingIntersections = new CreatingIntersections(tileGrid, shrunkMap, intersectionList, loadingInfo);
            //     DebugLine("ModifyingIntersectionRoadId");
            ModifyingIntersectionRoadId modifyingIntersectionRoadId = new ModifyingIntersectionRoadId(tileGrid, shrunkMap, loadingInfo);
            //     DebugLine("AddingStreetLights");
            AddingStreetLights addingStreetLights = new AddingStreetLights(tileGrid, shrunkMap, loadingInfo);
        }
        private void AddNewPoints(Dictionary <int, AStarNode> toCheckList, Dictionary <int, AStarNode> checkedNodeList, Point workingPoint, AStarNode workingNode, int findTownId)
        {
            for (byte i = 0; i < 8; i += 2)
            {
                Point newPoint = workingPoint + AngleStuff.directionPoint[i];

                if (ShrunkWorldBuilder.xLegitShrunkMap(newPoint.X, 0) && ShrunkWorldBuilder.yLegitShrunkMap(newPoint.Y, 0))
                {
                    if (shrunkMap[newPoint.X, newPoint.Y].townId == findTownId)
                    {
                        //we found it... lets add this cheapy to the list so it will always grab it next time
                        int id = GetOneD(newPoint);
                        toCheckList.Add(id, new AStarNode(id, GetOneD(workingPoint), 1, 1, i, false));
                        break;
                    }
                    else
                    {
                        if (!IsInLists(newPoint, toCheckList, checkedNodeList))
                        {
                            int tileScore = shrunkMap[newPoint.X, newPoint.Y].pathScore;
                            int id        = GetOneD(newPoint);
                            toCheckList.Add(id, new AStarNode(id, GetOneD(workingPoint), CalcNScore(tileScore, workingNode, i != workingNode.directionFrom), CalcHScore(newPoint), i, false));
                        }
                    }
                }
            }
        }
 private void CheckingPoints(byte direction, ShrunkNode[,] shrunkMap)
 {
     if (ShrunkWorldBuilder.xLegitShrunkMap(newPoint.X, 0) && ShrunkWorldBuilder.yLegitShrunkMap(newPoint.Y, 0))
     {
         if (!(IsSearched[newPoint.X, newPoint.Y]))  //if it hasnt been searched add it to the list
         {
             if (direction == directionFrom[currentPoint.X, currentPoint.Y])
             {
                 CalculateNewScores(false, shrunkMap);
             }
             else
             {
                 CalculateNewScores(true, shrunkMap);
             }
             AddToList(direction);
         }
         else// it has been searched.  lets remove the old one from the list
         {
             CalculateNewScores(false, shrunkMap);
             if (newPointScore < score[newPoint.X, newPoint.Y])  //this one is better
             {
                 AddToList(direction);
                 RemoveFromList();
             }
         }
     }
 }
 private bool AnyRoadsLeftOrRight(int x, int y, ShrunkNode[,] shrunkMap)
 {
     if (!ShrunkWorldBuilder.IsRoad(new Point(x - 1, y), shrunkMap))
     {
         return(ShrunkWorldBuilder.IsRoad(new Point(x + 1, y), shrunkMap));
     }
     return(true);
 }
 private bool AnyRoadsUpOrDown(int x, int y, ShrunkNode[,] shrunkMap)
 {
     if (!ShrunkWorldBuilder.IsRoad(new Point(x, y - 1), shrunkMap))
     {
         return(ShrunkWorldBuilder.IsRoad(new Point(x, y + 1), shrunkMap));
     }
     return(true);
 }
        private int CountNeighbourRoadsShrunkMap(ShrunkNode[,] shrunkMap, Point point)
        {
            int   amount = 0;
            Point nextPoint;

            for (int i = 0; i < 8; i += 2)
            {
                nextPoint = AngleStuff.AddPointToDirection(point, i);
                if (ShrunkWorldBuilder.PointLegit(nextPoint))
                {
                    if (shrunkMap[nextPoint.X, nextPoint.Y].landType == LandType.CITYROAD || shrunkMap[nextPoint.X, nextPoint.Y].landType == LandType.COUNTRYROAD)
                    {
                        amount++;
                    }
                }
            }
            return(amount);
        }
        private void UpdateNewPoints(ShrunkNode[,] shrunkMap, int findTownId)
        {
            for (byte i = 0; i < 8; i += 2)
            {
                newPoint = AngleStuff.AddPointToDirection(currentPoint, i);
                CheckingPoints(i, shrunkMap);

                if (ShrunkWorldBuilder.xLegitShrunkMap(newPoint.X, 0) && ShrunkWorldBuilder.yLegitShrunkMap(newPoint.Y, 0))
                {
                    if (shrunkMap[newPoint.X, newPoint.Y].townId == findTownId)
                    {
                        found        = true;
                        currentPoint = newPoint;
                        break;
                    }
                }
            }
        }
        //should each stoplight be its own mapobject
        //its extra things to add to our draw list then
        private void AddIntersection(List <Intersection> intersectionList, Tile[,] tileGrid, ShrunkNode[,] shrunkMap, int shrunkX, int shrunkY, Point expandedPoint, Random rndExtras, int id)
        {
            Intersection intersection = new Intersection(rndExtras, expandedPoint.X, expandedPoint.Y, id);

            MapObject mapObject;

            Dictionary <Direction, StopLight> stopLightList = new Dictionary <Direction, StopLight>();
            int       tileX;
            int       tileY;
            StopLight stopLight;

            int stageLeftRight = rndExtras.Next(0, 1) * 2;  //should always be 0 or 2
            int stageUpDown;

            if (stageLeftRight == 0)
            {
                stageUpDown = 2;
            }
            else
            {
                stageUpDown = 0;
            }


            //Road Down
            if (ShrunkWorldBuilder.IsRoad(new Point(shrunkX, shrunkY + 1), shrunkMap))
            {
                tileX     = expandedPoint.X;
                tileY     = expandedPoint.Y + 1;
                stopLight = new StopLight(0, stageUpDown, intersection, 0);
                stopLightList.Add(Direction.DOWN, stopLight);
                mapObject = new MapObject(stopLight, tileX, tileY, Color.White, 1f);
                tileGrid[tileX, tileY].AddMapObject(mapObject, false, false, true, null, false);
                AddWhiteLine(tileGrid, tileX, tileY, 3);
            }

            // Road Right
            if (ShrunkWorldBuilder.IsRoad(new Point(shrunkX + 1, shrunkY), shrunkMap))
            {
                tileX     = expandedPoint.X + 1;
                tileY     = expandedPoint.Y + 1;
                stopLight = new StopLight(6, stageLeftRight, intersection, 3);
                stopLightList.Add(Direction.RIGHT, stopLight);
                mapObject = new MapObject(stopLight, tileX, tileY, Color.White, 1f);
                tileGrid[tileX, tileY].AddMapObject(mapObject, false, false, true, null, false);
                AddWhiteLine(tileGrid, tileX, tileY, 2);
            }

            // Road Up
            if (ShrunkWorldBuilder.IsRoad(new Point(shrunkX, shrunkY - 1), shrunkMap))
            {
                tileX = expandedPoint.X + 1;
                tileY = expandedPoint.Y;

                stopLight = new StopLight(4, stageUpDown, intersection, 2);
                stopLightList.Add(Direction.UP, stopLight);
                mapObject = new MapObject(stopLight, tileX, tileY, Color.White, 1f);
                tileGrid[tileX, tileY].AddMapObject(mapObject, false, false, true, null, false);
                AddWhiteLine(tileGrid, tileX, tileY, 1);
            }

            //Road Left
            if (ShrunkWorldBuilder.IsRoad(new Point(shrunkX - 1, shrunkY), shrunkMap))
            {
                tileX = expandedPoint.X;
                tileY = expandedPoint.Y;

                stopLight = new StopLight(2, stageLeftRight, intersection, 1);
                stopLightList.Add(Direction.LEFT, stopLight);
                mapObject = new MapObject(stopLight, tileX, tileY, Color.White, 1f);
                tileGrid[tileX, tileY].AddMapObject(mapObject, false, false, true, null, false);
                AddWhiteLine(tileGrid, tileX, tileY, 0);
            }

            AddTurningArrows(tileGrid, expandedPoint, 0);

            intersection.SetStopLightList(stopLightList);
            intersectionList.Add(intersection);
        }