Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/game/terrain/StarCacheSelector.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/game/terrain/StarCacheSelector.cpp')
-rw-r--r--source/game/terrain/StarCacheSelector.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/source/game/terrain/StarCacheSelector.cpp b/source/game/terrain/StarCacheSelector.cpp
new file mode 100644
index 0000000..e6cd58b
--- /dev/null
+++ b/source/game/terrain/StarCacheSelector.cpp
@@ -0,0 +1,26 @@
+#include "StarCacheSelector.hpp"
+
+namespace Star {
+
+char const* const CacheSelector::Name = "cache";
+
+CacheSelector::CacheSelector(
+ Json const& config, TerrainSelectorParameters const& parameters, TerrainDatabase const* database)
+ : TerrainSelector(Name, config, parameters) {
+ auto sourceConfig = config.get("source");
+ String sourceType = sourceConfig.getString("type");
+ uint64_t seedBias = sourceConfig.getUInt("seedBias", 0);
+ TerrainSelectorParameters sourceParameters = parameters;
+ sourceParameters.seed += seedBias;
+ m_source = database->createSelectorType(type, sourceConfig, sourceParameters);
+
+ m_cache.setMaxSize(config.getUInt("lruCacheSize", 20000));
+}
+
+float CacheSelector::get(int x, int y) const {
+ return m_cache.get(Vec2I(x, y), [this](Vec2I const& key) {
+ return m_source->get(key[0], key[1]);
+ });
+}
+
+}