diff --git a/SQCSim2021/define.h b/SQCSim2021/define.h index d12d984..1bd66b8 100644 --- a/SQCSim2021/define.h +++ b/SQCSim2021/define.h @@ -21,6 +21,7 @@ #define FRAMES_RENDER_CHUNKS 2 #define FRAMES_UPDATE_CHUNKS 2 +#define FRAMES_DELETE_CHUNKS 2 #define VIEW_DISTANCE 512 #define MAX_SELECTION_DISTANCE 5 diff --git a/SQCSim2021/media/chunks/26_85.chunk b/SQCSim2021/media/chunks/26_85.chunk new file mode 100644 index 0000000..280bcc0 Binary files /dev/null and b/SQCSim2021/media/chunks/26_85.chunk differ diff --git a/SQCSim2021/world.cpp b/SQCSim2021/world.cpp index bc22409..e77cdc4 100644 --- a/SQCSim2021/world.cpp +++ b/SQCSim2021/world.cpp @@ -79,3 +79,21 @@ void World::TransposeWorld(Player& player) { player.Transpose(x, y); } +void World::CleanUpWorld(int& frames) { + if (!m_tbDeleted.empty() && !frames) { + m_tbDeleted.pop_back(); + frames = FRAMES_DELETE_CHUNKS; + } +} + +Chunk* World::RetrieveChunk(int x, int y) { + for (int index = 0; index < m_tbDeleted.size(); ++index) { + int cx, cy; + m_tbDeleted.at(index)->GetPosition(cx, cy); + + if (cx == x && cy == y) + return std::move(m_tbDeleted.at(index)); + } + + return nullptr; +} diff --git a/SQCSim2021/world.h b/SQCSim2021/world.h index 6d9c3c5..a90e08c 100644 --- a/SQCSim2021/world.h +++ b/SQCSim2021/world.h @@ -27,11 +27,14 @@ class World { BlockType BlockAt(const Vector3f& pos, BlockType defaultBlockType = BTYPE_AIR) const; void TransposeWorld(Player& player); + void CleanUpWorld(int& frames); + Chunk* RetrieveChunk(int x, int y); + private: Array2d m_chunks = Array2d(WORLD_SIZE_X, WORLD_SIZE_Y); std::vector m_tbDeleted; - int m_center[2] = {INT16_MAX / 2, INT16_MAX / 2}; + int m_center[2] = {INT16_MAX / 2 - WORLD_SIZE_X / 2, INT16_MAX / 2 - WORLD_SIZE_Y / 2}; }; #endif // WORLD_H__