feat: add block model with IBlock flyweight and registry

This commit is contained in:
2026-05-28 11:53:15 +02:00
parent 17503820e6
commit f4d3f9aab4
8 changed files with 156 additions and 0 deletions

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

@@ -0,0 +1,10 @@
namespace VoxelEngine.World.Blocks;
public sealed class AirBlock : IBlock
{
public ushort Id => 0;
public string Name => "Air";
public bool IsOpaque => false;
public bool IsSolid => false;
public int GetTextureIndex(BlockFace face) => 0;
}

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

@@ -0,0 +1,10 @@
namespace VoxelEngine.World.Blocks;
public sealed class DirtBlock : IBlock
{
public ushort Id => 2;
public string Name => "Dirt";
public bool IsOpaque => true;
public bool IsSolid => true;
public int GetTextureIndex(BlockFace face) => 1;
}

View File

@@ -0,0 +1,16 @@
namespace VoxelEngine.World.Blocks;
public sealed class GrassBlock : IBlock
{
public ushort Id => 3;
public string Name => "Grass";
public bool IsOpaque => true;
public bool IsSolid => true;
public int GetTextureIndex(BlockFace face) => face switch
{
BlockFace.Top => 0, // grass top
BlockFace.Bottom => 1, // dirt
_ => 3 // grass side
};
}

View File

@@ -0,0 +1,10 @@
namespace VoxelEngine.World.Blocks;
public sealed class StoneBlock : IBlock
{
public ushort Id => 1;
public string Name => "Stone";
public bool IsOpaque => true;
public bool IsSolid => true;
public int GetTextureIndex(BlockFace face) => 2;
}