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); } } } }
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); } } } }
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); }
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); } } } } }
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); } } } }
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; } } } } }