#pragma once #include #include #include #include #include "Generator.hpp" #include "ChunkIndex.hpp" namespace MC::World { class World { public: World() : m_generator(), m_chunks(), m_visible_chunks() {} struct ChunkData { ChunkData(ChunkIndex index, std::shared_ptr chunk) : index(index), chunk(std::move(chunk)), mesh() {} ChunkIndex index; std::shared_ptr chunk; std::optional mesh; }; std::vector get_visible_chunks(Vector<3> position); private: std::unordered_set get_visible_chunk_indices(Vector<3> position) const; ChunkData& get_or_generate(ChunkIndex index); uint8_t m_view_distance_radius = 6; Generator m_generator; std::unordered_map m_chunks; std::unordered_set m_visible_chunks; }; }