diff --git a/src/world/generator/SurroundMap.hpp b/src/world/generator/SurroundMap.hpp new file mode 100644 index 00000000..45713870 --- /dev/null +++ b/src/world/generator/SurroundMap.hpp @@ -0,0 +1,38 @@ +#pragma once + +#include + +#define GLM_ENABLE_EXPERIMENTAL +#include + +class SurroundMap { + struct Entry { + /// @brief Level is increased when all surrounding (8) entries having + // greather or equal confirmed level + int level = 0; + /// @brief number of surrounding entries having greather or equal + /// confirmed level + int surrounding = 0; + /// @brief level confirmed status (entry is ready to expand) + bool confirmed = true; + /// @brief mark used on sweep event (extra isles garbage collection) + bool marked = false; + }; + std::unordered_map entries; +public: + /// @brief Reset all isles marks + void resetMarks(); + + /// @brief Mark all connected entries + /// @param point origin point + void markIsle(const glm::ivec2& point); + + /// @brief Erase all non-marked isles + /// @return erased entries positions + std::vector sweep(); + + /// @brief Expand all confirmed entries with specified level + /// @param level target entries level + /// @return All upgraded entries positions + std::vector expand(int level); +}; diff --git a/test/world/generator/SurroundMap.cpp b/test/world/generator/SurroundMap.cpp new file mode 100644 index 00000000..ede9217f --- /dev/null +++ b/test/world/generator/SurroundMap.cpp @@ -0,0 +1,7 @@ +#include + +#include "world/generator/SurroundMap.hpp" + +TEST(SurroundMap, InitTest) { + SurroundMap map; +}