Ejemplo n.º 1
0
 static void SetRoadsWithCrossingsAroundCrossroads(CityBlock cityBlock)
 {
     for (int x = 0; x < cityBlock.size.x; x++)
     {
         for (int y = 0; y < cityBlock.size.y; y++)
         {
             var road = cityBlock.GetRoadTile(x, y);
             if (road == RoadPiece.CROSS_N)
             {
                 cityBlock.SetRoadTile(x, y + 1, RoadPiece.VERTICAL_WITH_CROSSING);
             }
             else if (road == RoadPiece.CROSS_S)
             {
                 cityBlock.SetRoadTile(x, y - 1, RoadPiece.VERTICAL_WITH_CROSSING);
             }
             else if (road == RoadPiece.CROSS_E)
             {
                 cityBlock.SetRoadTile(x + 1, y, RoadPiece.HORIZONTAL_WITH_CROSSING);
             }
             else if (road == RoadPiece.CROSS_W)
             {
                 cityBlock.SetRoadTile(x - 1, y, RoadPiece.HORIZONTAL_WITH_CROSSING);
             }
         }
     }
 }
Ejemplo n.º 2
0
 static void SetCrossroadBorders(CityBlock cityBlock)
 {
     for (int x = 0; x < cityBlock.size.x; x++)
     {
         for (int y = 0; y < cityBlock.size.y; y++)
         {
             if (cityBlock.GetRoadTile(x, y) == RoadPiece.CROSS_CENTER)
             {
                 cityBlock.SetRoadTile(x - 1, y - 1,
                                       RoadPiece.CROSS_SW);
                 cityBlock.SetRoadTile(x - 1, y,
                                       RoadPiece.CROSS_W);
                 cityBlock.SetRoadTile(x - 1, y + 1,
                                       RoadPiece.CROSS_NW);
                 cityBlock.SetRoadTile(x, y + 1,
                                       RoadPiece.CROSS_N);
                 cityBlock.SetRoadTile(x + 1, y + 1,
                                       RoadPiece.CROSS_NE);
                 cityBlock.SetRoadTile(x + 1, y,
                                       RoadPiece.CROSS_E);
                 cityBlock.SetRoadTile(x + 1, y - 1,
                                       RoadPiece.CROSS_SE);
                 cityBlock.SetRoadTile(x, y - 1,
                                       RoadPiece.CROSS_S);
             }
         }
     }
 }
Ejemplo n.º 3
0
        static CityBlock GenerateGridLayout(CityBlockSettings settings)
        {
            var cityBlock = new CityBlock(settings);

            // add horizontal roads
            for (int y = 1; y < cityBlock.size.y - 1; y += settings.gap)
            {
                for (int x = 1; x < cityBlock.size.x - 1; x++)
                {
                    cityBlock.SetRoadTile(x, y, RoadPiece.HORIZONTAL);
                }
            }

            // add vertical roads
            for (int x = 1; x < cityBlock.size.x - 1; x += settings.gap)
            {
                for (int y = 1; y < cityBlock.size.y - 1; y++)
                {
                    if (cityBlock.GetRoadTile(x, y) != RoadPiece.NONE)
                    {
                        cityBlock.SetRoadTile(x, y, RoadPiece.CROSS_CENTER);
                    }
                    else
                    {
                        cityBlock.SetRoadTile(x, y, RoadPiece.VERTICAL);
                    }
                }
            }

            // ground level
            SetCrossroadBorders(cityBlock);
            SetPavementWrappedWithRoad(cityBlock);

            // buildings
            SetBuildingsOnPavement(cityBlock);

            // world border
            SetBorder(cityBlock);

            // features
            SetCornerLamps(cityBlock);
            SetRoadsWithCrossingsAroundCrossroads(cityBlock);

            return(cityBlock);
        }
Ejemplo n.º 4
0
        public void PopulateStage(CityBlock cityBlock, float pieceWidth)
        {
            var player = GameManager.Instance.GetPlayerController().transform;

            for (int x = 0; x < cityBlock.size.x; x++)
            {
                for (int y = 0; y < cityBlock.size.y; y++)
                {
                    if (cityBlock.GetRoadTile(x, y) == RoadPiece.NONE)
                    {
                        continue;
                    }

                    if (Random.value <= chanceOfEnemySpawnOnRoadPiece)
                    {
                        int numEnemies = Random.Range(
                            minEnemySpawnGroupSize, maxEnemySpawnGroupSize);
                        for (int i = 0; i < numEnemies; i++)
                        {
                            Vector3 position = CoordToPosition(x, y, pieceWidth);
                            position.x +=
                                Random.Range(-pieceWidth, pieceWidth) / 2;
                            position.z +=
                                Random.Range(-pieceWidth, pieceWidth) / 2;

                            var distToPlayer = (player.position - position).magnitude;
                            if (distToPlayer <= playerSafeRadius)
                            {
                                continue;
                            }

                            CreateEnemy(position);
                        }
                    }
                }
            }
        }
Ejemplo n.º 5
0
 static void SetPavementWrappedWithRoad(CityBlock cityBlock)
 {
     for (int x = 0; x < cityBlock.size.x; x++)
     {
         for (int y = 0; y < cityBlock.size.y; y++)
         {
             var road = cityBlock.GetRoadTile(x, y);
             if (road == RoadPiece.CROSS_NW)
             {
                 cityBlock.SetPavementTile(x, y, PavementPiece.CORNER_NW);
             }
             else if (road == RoadPiece.CROSS_SW)
             {
                 cityBlock.SetPavementTile(x, y, PavementPiece.CORNER_SW);
             }
             else if (road == RoadPiece.CROSS_SE)
             {
                 cityBlock.SetPavementTile(x, y, PavementPiece.CORNER_SE);
             }
             else if (road == RoadPiece.CROSS_NE)
             {
                 cityBlock.SetPavementTile(x, y, PavementPiece.CORNER_NE);
             }
             else if (road == RoadPiece.HORIZONTAL)
             {
                 cityBlock.SetPavementTile(x, y - 1, PavementPiece.SIDE_S);
                 cityBlock.SetPavementTile(x, y + 1, PavementPiece.SIDE_N);
             }
             else if (road == RoadPiece.VERTICAL)
             {
                 cityBlock.SetPavementTile(x - 1, y, PavementPiece.SIDE_W);
                 cityBlock.SetPavementTile(x + 1, y, PavementPiece.SIDE_E);
             }
         }
     }
 }
Ejemplo n.º 6
0
        public void Load(CityBlock cityBlock)
        {
            SetupDictionaries();

            // delete old city block (if any)
            if (loadedCityBlockHolder == null)
            {
                loadedCityBlockHolder = transform.Find(HOLDER_NAME);
            }
            if (loadedCityBlockHolder != null)
            {
                DestroyImmediate(loadedCityBlockHolder.gameObject);
            }

            // load new city block
            loadedCityBlock = cityBlock;

            // create holder
            loadedCityBlockHolder        = new GameObject(HOLDER_NAME).transform;
            loadedCityBlockHolder.parent = transform;

            for (int x = 0; x < loadedCityBlock.size.x; x++)
            {
                for (int y = 0; y < loadedCityBlock.size.y; y++)
                {
                    // create road entities
                    {
                        var type = loadedCityBlock.GetRoadTile(x, y);
                        if (type != RoadPiece.NONE)
                        {
                            var       prefab = roadPrefabs[type];
                            Transform road   = Instantiate(prefab) as Transform;
                            road.position += CoordToPosition(x, y, pieceWidth);
                            road.parent    = loadedCityBlockHolder;
                        }
                    }

                    // create pavement entities
                    {
                        var type = loadedCityBlock.GetPavementTile(x, y);
                        if (type != PavementPiece.NONE)
                        {
                            var       prefab   = pavementPrefabs[type];
                            Transform pavement = Instantiate(prefab) as Transform;
                            pavement.position += CoordToPosition(x, y, pieceWidth);
                            pavement.parent    = loadedCityBlockHolder;
                        }
                    }

                    // create building entities
                    {
                        var type = loadedCityBlock.GetBuildingTile(x, y);
                        if (type != BuildingPiece.NONE)
                        {
                            var       prefab   = buildingPrefabs[type];
                            Transform building = Instantiate(prefab) as Transform;
                            building.position += CoordToPosition(x, y, pieceWidth);
                            building.parent    = loadedCityBlockHolder;
                        }
                    }

                    // create misc entities
                    {
                        var type = loadedCityBlock.GetMiscTile(x, y);
                        if (type != MiscPiece.NONE)
                        {
                            var       prefab = miscPrefabs[type];
                            Transform misc   = Instantiate(prefab) as Transform;
                            misc.position += CoordToPosition(x, y, pieceWidth);
                            misc.parent    = loadedCityBlockHolder;
                        }
                    }
                }
            }
        }