From 3bf42c6ff3805a0d42bbc661794a95ff31bedc26 Mon Sep 17 00:00:00 2001 From: untodesu Date: Sat, 15 Mar 2025 16:22:09 +0500 Subject: Add whatever I was working on for the last month --- game/client/chunk_quad.hh | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 game/client/chunk_quad.hh (limited to 'game/client/chunk_quad.hh') diff --git a/game/client/chunk_quad.hh b/game/client/chunk_quad.hh new file mode 100644 index 0000000..93fe904 --- /dev/null +++ b/game/client/chunk_quad.hh @@ -0,0 +1,38 @@ +#ifndef CLIENT_CHUNK_QUAD_HH +#define CLIENT_CHUNK_QUAD_HH 1 +#pragma once + +#include "core/constexpr.hh" + +#include "shared/voxel_registry.hh" + +// [0] XXXXXXXXYYYYYYYYZZZZZZZZWWWWHHHH +// [1] FFFFTTTTTTTTTTTAAAAA------------ +using ChunkQuad = std::array; + +constexpr inline static ChunkQuad make_chunk_quad(const glm::fvec3 &position, const glm::fvec2 &size, voxel_facing facing, std::size_t texture, std::size_t frames) +{ + ChunkQuad result = {}; + result[0] = 0x00000000; + result[1] = 0x00000000; + + // [0] XXXXXXXXYYYYYYYYZZZZZZZZ-------- + result[0] |= (0x000000FFU & static_cast(position.x * 16.0f)) << 24U; + result[0] |= (0x000000FFU & static_cast(position.y * 16.0f)) << 16U; + result[0] |= (0x000000FFU & static_cast(position.z * 16.0f)) << 8U; + + // [0] ------------------------WWWWHHHH + result[0] |= (0x0000000FU & static_cast(size.x * 16.0f - 1.0f)) << 4U; + result[0] |= (0x0000000FU & static_cast(size.y * 16.0f - 1.0f)); + + // [1] FFFF---------------------------- + result[1] |= (0x0000000FU & static_cast(facing)) << 28U; + + // [1] ----TTTTTTTTTTTAAAAA------------ + result[1] |= (0x000007FFU & static_cast(texture)) << 17U; + result[1] |= (0x0000001FU & static_cast(frames)) << 12U; + + return result; +} + +#endif /* CLIENT_CHUNK_QUAD_HH */ -- cgit