// Procedurally generate a tile void GenerateBasicTile(Volume tile, int tileX, int tileY) { // Clear the tile tile.Frames[0].Voxels = new Voxel[tile.XSize * tile.YSize * tile.ZSize]; // Copy the floor tile from our tilesheet to this tile (playfield tiles only have one animation frame - 0) Helper.CopyVoxelsInBox(ref Tileset.Frames[(int)Tiles.Ground].Voxels, ref tile.Frames[0].Voxels, new PicaVoxelPoint(Tileset.Frames[0].XSize, Tileset.Frames[0].YSize, Tileset.Frames[0].ZSize), new PicaVoxelPoint(tile.XSize, tile.YSize, tile.ZSize), true); // Make some random grass // Z value of 14 is 1 less than the ground layer at Z15 int grassAmount = Random.Range(0, 30); for (int i = 0; i < grassAmount; i++) tile.Frames[0].Voxels[Random.Range(0, 16) + tile.XSize * (Random.Range(0, 16) + tile.YSize * 14)] = new Voxel() { State = VoxelState.Active, Color = new Color(Random.Range(0f, 0.2f), Random.Range(0.5f, 0.8f), Random.Range(0f, 0.2f)), // This is a random green color Value = 1 // We'll give the grass a value of 1 so we can distinguish it later }; // Maybe a random scenery tile if not in/near the walls? int tree = Random.Range(0, 25); if (tree < 4 && tileY>1 && tileY<Y_TILES-2) { Helper.CopyVoxelsInBox(ref Tileset.Frames[tree + 1].Voxels, ref tile.Frames[0].Voxels, new PicaVoxelPoint(Tileset.Frames[0].XSize, Tileset.Frames[0].YSize, Tileset.Frames[0].ZSize), new PicaVoxelPoint(tile.XSize, tile.YSize, tile.ZSize), true); } tile.UpdateAllChunksNextFrame(); }