コード例 #1
0
    // 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();
    }