GameObject CreateTerrainTile(int x, int z) { float px = (x - tilesN / 2.0f) * tileWidth + tileWidth / 2.0f; float pz = (z - tilesN / 2.0f) * tileDepth + tileDepth / 2.0f; tiles[x, z] = Instantiate(terrainTile); tiles[x, z].transform.parent = transform; tiles[x, z].transform.position = new Vector3(px, 0.0f, pz); S_TerrainTile tileScript = tiles[x, z].GetComponent <S_TerrainTile>(); tileScript.SetPosition(x, z); tilesList.Add(tiles[x, z]); return(tiles[x, z]); }
void CreateMountainRange(bool volcano = false, bool mountain = false) { int[] coords; if (volcano) { coords = GetRandomCoordinatesInsideRegion(Config.Volcano_Init_Region); } else { coords = GetRandomCoordinatesInsideRegion(Config.Mountain_Init_Region); } S_TerrainTile tileScript = tiles[coords[0], coords[1]].GetComponent <S_TerrainTile>(); tileScript.SetHeight(2); if (volcano) { tileScript.CreateVolcano(); } if (mountain) { tileScript.CreateMountain(); } for (int ix = coords[0] - 2; ix <= coords[0] + 2; ix++) { for (int iz = coords[1] - 2; iz <= coords[1] + 2; iz++) { if (ix == coords[0] && iz == coords[1]) { continue; } if (CoordinateInside(ix, iz)) { if (Random.value < 0.5) { tileScript = tiles[ix, iz].GetComponent <S_TerrainTile>(); tileScript.SetHeight(1); } } } } }
void CreateRivers() { List <GameObject> mountains = tilesList.FindAll(t => t.GetComponent <S_TerrainTile>().GetHeight() == 2); foreach (GameObject mountain in mountains) { if (!mountain.GetComponent <S_TerrainTile>().HasTerrainObjectByTag("Volcano")) { int riverLength = 0; int tries = 0; S_TerrainTile next; S_TerrainTile current = mountain.GetComponent <S_TerrainTile>(); while (riverLength < 20 && tries < 1000) { tries++; current.SetAndLoadType(TERRAIN_TYPES["river"]); if (current.x == 0 || current.z == 0 || current.x == tilesN - 1 || current.z == tilesN - 1) { break; } if (riverLength > 10) { break; } //next = GetRandomTileUntilDistance(current.x, current.z, 0.7f).GetComponent<S_TerrainTile>(); next = GetTile(current.x, current.z - 1).GetComponent <S_TerrainTile>(); if (next.GetTileType() == TERRAIN_TYPES["river"]) { continue; } //if (next.GetHeight() > current.GetHeight()) // continue; current = next; riverLength++; } break; } } }