feat: make Sand/Snow opaque and register Sand/Snow/Water blocks

This commit is contained in:
MDietermann
2026-05-31 21:38:11 +02:00
parent 4e14786668
commit 6eb17b6c5d
6 changed files with 59 additions and 1 deletions

View File

View File

@@ -8,11 +8,15 @@ public sealed class BlockRegistry
public StoneBlock Stone { get; } = new();
public DirtBlock Dirt { get; } = new();
public GrassBlock Grass { get; } = new();
public SandBlock Sand { get; } = new();
public SnowBlock Snow { get; } = new();
public WaterBlock Water { get; } = new();
public BlockRegistry()
{
// Index by id. Order does not matter; slot = block.Id.
IBlock[] blocks = new IBlock[] { this.Air, this.Stone, this.Dirt, this.Grass };
IBlock[] blocks = new IBlock[]
{ this.Air, this.Stone, this.Dirt, this.Grass, this.Sand, this.Snow, this.Water };
this._byId = new IBlock[blocks.Length];
foreach (IBlock block in blocks)
{

10
World/Blocks/SandBlock.cs Normal file
View File

@@ -0,0 +1,10 @@
namespace VoxelEngine.World.Blocks;
public class SandBlock : IBlock
{
public ushort Id => 4;
public string Name => "Sand";
public bool IsOpaque => true;
public bool IsSolid => true;
public TileCoord GetTextureTile(BlockFace face) => new(2, 1);
}

16
World/Blocks/SnowBlock.cs Normal file
View File

@@ -0,0 +1,16 @@
namespace VoxelEngine.World.Blocks;
public class SnowBlock : IBlock
{
public ushort Id => 5;
public string Name => "Snow Block";
public bool IsOpaque => true;
public bool IsSolid => true;
public TileCoord GetTextureTile(BlockFace face) => face switch
{
BlockFace.Top => new TileCoord(2, 0),
BlockFace.Bottom => new TileCoord(0, 0),
_ => new TileCoord(3, 0)
};
}

View File

@@ -0,0 +1,6 @@
namespace VoxelEngine.World.Blocks;
public class WaterBlock
{
}