From af7a83300f0de145b8261b53c3bc620469428199 Mon Sep 17 00:00:00 2001 From: MDietermann Date: Sun, 31 May 2026 21:39:42 +0200 Subject: [PATCH] feat: 4x4 atlas with TileCoord-based UVs and grass faces --- Assets/textures/VoxelShadeAtlas.png | Bin 4679 -> 9499 bytes World/Blocks/GrassBlock.cs | 6 +++--- World/Blocks/TileCoord.cs | 5 +++++ 3 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 World/Blocks/TileCoord.cs diff --git a/Assets/textures/VoxelShadeAtlas.png b/Assets/textures/VoxelShadeAtlas.png index bb6dcce1c099a0d1060cc73db92eaf5b471ef999..9d87c43b37232068844e6782f2cabac556f671db 100644 GIT binary patch literal 9499 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 face switch { - BlockFace.Top => new(0, 1), // grass top - BlockFace.Bottom => new(0, 0), // dirt - _ => new(1, 1) // grass side + BlockFace.Top => new TileCoord(0, 1), // grass top + BlockFace.Bottom => new TileCoord(0, 0), // dirt + _ => new TileCoord(1, 1) // grass side }; } diff --git a/World/Blocks/TileCoord.cs b/World/Blocks/TileCoord.cs new file mode 100644 index 0000000..f090a44 --- /dev/null +++ b/World/Blocks/TileCoord.cs @@ -0,0 +1,5 @@ +namespace VoxelEngine.World.Blocks; + +// Position of a tile within the texture atlas, in tile units. +// Origin (0,0) is the top-left tile; X increases right, Y increases down. +public readonly record struct TileCoord(int X, int Y);