From 22f3bad59de14b62c6680d10aff2cea5ac5b11dc Mon Sep 17 00:00:00 2001 From: Mel Date: Tue, 9 Apr 2024 03:34:50 +0200 Subject: Traverse all chunk blocks in a unified (and cache-friendly) way --- src/World/Chunk.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src/World/Chunk.cpp') diff --git a/src/World/Chunk.cpp b/src/World/Chunk.cpp index b4a9ece..eeaefa0 100644 --- a/src/World/Chunk.cpp +++ b/src/World/Chunk.cpp @@ -39,10 +39,18 @@ Bool Chunk::is_valid_position(Position::BlockLocal pos) { return pos.x() < Width && pos.y() < Height && pos.z() < Width; } -U64 Chunk::pos(U32 x, U32 y, U32 z) { +U64 Chunk::pos(U32 const x, U32 const y, U32 const z) { return x + Width * y + Width * Height * z; } +Position::BlockLocal Chunk::pos(U64 const i) { + return { + i % Width, + i / Width % Height, + i / (Width * Height) + }; +} + AABB Chunk::block_bounds(Position::BlockLocal pos) { return { {pos.x(), pos.y(), pos.z()}, -- cgit 1.4.1