From 7b20942c765334687fd5f58df4c0190601b97b58 Mon Sep 17 00:00:00 2001 From: Mel Date: Sat, 22 Oct 2022 00:16:14 +0200 Subject: Fix chunk index hash to show infinite world --- src/World/ChunkIndex.hpp | 14 ++++---------- src/World/World.cpp | 8 ++++---- src/World/World.hpp | 1 + 3 files changed, 9 insertions(+), 14 deletions(-) (limited to 'src/World') diff --git a/src/World/ChunkIndex.hpp b/src/World/ChunkIndex.hpp index 330d202..cf5af07 100644 --- a/src/World/ChunkIndex.hpp +++ b/src/World/ChunkIndex.hpp @@ -7,13 +7,9 @@ namespace MC::World { struct ChunkIndex { - ChunkIndex(int64_t x, int64_t y) : x(x), y(x) {} + ChunkIndex(int32_t x, int32_t y) : x(x), y(y) {} - bool operator==(ChunkIndex& other) const { - return x == other.x && y == other.y; - } - - int64_t x, y; + int32_t x, y; }; } @@ -25,9 +21,7 @@ template<> struct std::equal_to { }; template<> struct std::hash { - std::size_t operator()(const MC::World::ChunkIndex& i) const noexcept { - std::size_t xh = std::hash{}(i.x); - std::size_t yh = std::hash{}(i.y); - return xh ^ (yh << 1); + size_t operator()(const MC::World::ChunkIndex& i) const noexcept { + return ((int64_t)i.x << 32) | i.y; } }; \ No newline at end of file diff --git a/src/World/World.cpp b/src/World/World.cpp index 5a0d729..449ba2d 100644 --- a/src/World/World.cpp +++ b/src/World/World.cpp @@ -31,8 +31,8 @@ std::vector World::get_visible_chunks(Vector<3> position) { } std::unordered_set World::get_visible_chunk_indices(Vector<3> position) const { - int64_t center_x = std::round(position.x() / CHUNK_WIDTH); - int64_t center_y = std::round(position.z() / CHUNK_HEIGHT); + int32_t center_x = std::round(position.x() / CHUNK_WIDTH); + int32_t center_y = std::round(position.z() / CHUNK_HEIGHT); auto upper_x_bound = center_x + m_view_distance_radius; auto lower_x_bound = center_x - m_view_distance_radius; @@ -41,8 +41,8 @@ std::unordered_set World::get_visible_chunk_indices(Vector<3> positi std::unordered_set indices{}; indices.reserve(m_view_distance_radius * m_view_distance_radius * 4); - for (int64_t x = lower_x_bound; x < upper_x_bound; x++) { - for (int64_t y = lower_y_bound; y < upper_y_bound; y++) { + for (int32_t x = lower_x_bound; x < upper_x_bound; x++) { + for (int32_t y = lower_y_bound; y < upper_y_bound; y++) { indices.emplace(x, y); } } diff --git a/src/World/World.hpp b/src/World/World.hpp index 3453b18..f113bda 100644 --- a/src/World/World.hpp +++ b/src/World/World.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include #include "Generator.hpp" -- cgit 1.4.1