private void FillRenderDataForOneChunk(Island island, int chunkCoordinateX, int chunkCoordinateY) { int amountOfBlockVerticesAdded = 0; for (int islandX = CHUNK_EDGE_LENGTH_IN_BLOCKS * chunkCoordinateX; islandX < CHUNK_EDGE_LENGTH_IN_BLOCKS * (chunkCoordinateX + 1); islandX++) { for (int islandZ = CHUNK_EDGE_LENGTH_IN_BLOCKS * chunkCoordinateY; islandZ < CHUNK_EDGE_LENGTH_IN_BLOCKS * (chunkCoordinateY + 1); islandZ++) { for (int islandY = 0; islandY < Island.HEIGHT_IN_BLOCKS; islandY++) { if (islandX < island.GetXzDimension() && islandZ < island.GetXzDimension()) { BlockPosition globalPosition = new BlockPosition(islandX, islandY, islandZ); if (island.GetBlockAt(globalPosition).GetBlockType() != BlockTypes.AIR) { int inChunkX = islandX - CHUNK_EDGE_LENGTH_IN_BLOCKS * chunkCoordinateX; int inChunkZ = islandZ - CHUNK_EDGE_LENGTH_IN_BLOCKS * chunkCoordinateY; BlockVisualsBuilder blockVisualsBuilder = BuildBlockVisualsFromBlock(island, globalPosition, inChunkX, inChunkZ, amountOfBlockVerticesAdded); if (blockVisualsBuilder.GetShapePositions().Length > 0) { FillOpaqueBlockBuffersWithVisualRenderData(blockVisualsBuilder); amountOfBlockVerticesAdded += blockVisualsBuilder.GetNumberOfAddedVertices(); } } } } } } }
private void FillOpaqueBlockBuffersWithVisualRenderData(BlockVisualsBuilder blockRenderDataBuilder) { floatBuffersOfOpaqueBlocksInChunk.Add(blockRenderDataBuilder.GetShapePositions()); floatBuffersOfOpaqueBlocksInChunk.Add(blockRenderDataBuilder.GetShapeNormals()); floatBuffersOfOpaqueBlocksInChunk.Add(blockRenderDataBuilder.GetShapeUvCoordinates()); intBuffersOfOpaqueBlocksInChunk.Add(blockRenderDataBuilder.GetShapeIndices()); }