public void SetupChunks() { int chunkW = vChunkSize.x * vTileSize.x; int chunkH = vChunkSize.x * vTileSize.x; int colCount = Mathf.Max(Screen.width / chunkH + chunkBuffer * 2, 1); int rowCount = Mathf.Max(Screen.height / chunkH + chunkBuffer * 2, 1); int startPosX = -(vChunkSize.x * colCount) / 2 + vGridCenter.x; int startPosY = -(vChunkSize.y * rowCount) / 2 + vGridCenter.y; for (int row = 0; row < rowCount; ++row) { mapRows.Add(null); for (int col = 0; col < colCount; ++col) { int fChunkX = vChunkSize.x * col; int fChunkY = vChunkSize.y * row; Vector2Int vMapPos = new Vector2Int(fChunkX + startPosX, fChunkY + startPosY); TileMapChunk chunk = new TileMapChunk(vMapPos, vChunkSize, vTileSize); chunk.Init(); AddChunk(chunk, col, row, colCount); } } }
public void AddChunk(TileMapChunk tChunk, int iCol, int iRow, int iRowSize) { if (mapRows[iRow] == null) { mapRows[iRow] = new TileMapChunkRow(iRowSize); } mapRows[iRow].Add(tChunk, iCol); }
public void Add(TileMapChunk chunk, int iCol) { if (mapChunks[iCol] != null) { Delete(mapChunks[iCol]); } mapChunks[iCol] = chunk; }
void GenerateChunks() { for (int x = 0; x < chunkCnt.x; x++) { for (int y = 0; y < chunkCnt.y; y++) { GameObject chunk = new GameObject("Chunk_" + x + "_" + y); chunk.transform.SetParent(transform); TileMapChunk tilemapChunk = new TileMapChunk(); tilemapChunk.layers = new TileMapLayer[tilemapLayers.Length]; for (int i = 0; i < tilemapLayers.Length; i++) { GameObject layer = new GameObject("Layer_" + tilemapLayers[i].name); layer.transform.SetParent(chunk.transform); tilemapChunk.layers[i] = new TileMapLayer(tilemapLayers[i].name, tilemapLayers[i].tile, tilemapLayers[i].randomizeDensity, tilemapLayers[i].noiseThreshold, null); Tilemap tm = layer.AddComponent <Tilemap>(); layer.AddComponent <TilemapRenderer>(); for (int sx = 0; sx < chunkSize.x; sx++) { for (int sy = 0; sy < chunkSize.y; sy++) { Vector3Int chunkOffset = new Vector3Int(sx + (x * chunkSize.x), sy + (y * chunkSize.y), 0); if (tilemapLayers[i].randomizeDensity && (noiseMap[chunkOffset.x, chunkOffset.y] > Random.value) && (noiseMap[chunkOffset.x, chunkOffset.y] > tilemapLayers[i].noiseThreshold)) { tm.SetTile(chunkOffset, tilemapLayers[i].tile); } else if (!tilemapLayers[i].randomizeDensity) { tm.SetTile(new Vector3Int(sx + (x * chunkSize.x), sy + (y * chunkSize.y), 0), tilemapLayers[i].tile); } } } tilemapChunk.layers[i].tilemap = tm; } tilemapChunks[chunkCnt.x * x + y] = tilemapChunk; } } }
public void Delete(TileMapChunk chunk) { }
public Tile(TileMapChunk parent, Vector2Int tilePosition, Vector2Int tileSize) { this.parent = parent; this.tilePosition = tilePosition; this.tileSize = tileSize; }