#pragma once #include "../Common/Sizes.hpp" #include "../Math/Vector.hpp" #include "ChunkDimensions.hpp" #include "Position.hpp" namespace MC::World { struct ChunkIndex { ChunkIndex() : x(0), y(0) {} ChunkIndex(I32 x, I32 y) : x(x), y(y) {} Vector<3> middle() const { using namespace ChunkDimensions; return {(x + 0.5f) * Width, Height / 2.0f, (y + 0.5f) * Width}; } Position::BlockWorld world(Position::BlockLocal local) const { using namespace ChunkDimensions; return {x * Width + local.x(), local.y(), y * Width + local.z()}; } I32 x, y; }; } template<> struct std::equal_to { Bool operator()(const MC::World::ChunkIndex& i1, const MC::World::ChunkIndex& i2) const noexcept { return i1.x == i2.x && i1.y == i2.y; } }; template<> struct std::hash { USize operator()(const MC::World::ChunkIndex& i) const noexcept { return (I64)i.x << 32 | i.y; } };