diff options
Diffstat (limited to 'source/game/terrain/StarCacheSelector.cpp')
-rw-r--r-- | source/game/terrain/StarCacheSelector.cpp | 26 |
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]); + }); +} + +} |