#pragma once #include #include #include "Chunk.hpp" #include "ChunkIndex.hpp" #include "Position.hpp" namespace MC::World { class ChunkRegistry { public: enum class Status { Empty, WaitingForGeneration, NeedsReification, WaitingForReification, Damaged, Done }; // I think a Chunk entity should just store all this by itself... struct Data { ChunkIndex index; Status status; std::optional chunk = {}; std::optional land_mesh = {}; std::optional water_mesh = {}; Status get_status() const { if (status == Status::Done && chunk.value().is_damaged()) { return Status::Damaged; } return status; } void damage() { if (status == Status::Done) chunk.value().damage(); } }; Data& get(ChunkIndex index); Data& find(Position::BlockWorld pos); Data& find(ChunkIndex chunk, Position::BlockLocal pos); private: std::unordered_map m_chunks; }; }