1 #include "landmanager.hpp"
2 
3 #include <osg/Stats>
4 
5 #include <components/resource/objectcache.hpp>
6 
7 #include "../mwbase/environment.hpp"
8 #include "../mwbase/world.hpp"
9 #include "../mwworld/esmstore.hpp"
10 
11 namespace MWRender
12 {
13 
LandManager(int loadFlags)14 LandManager::LandManager(int loadFlags)
15     : GenericResourceManager<std::pair<int, int> >(nullptr)
16     , mLoadFlags(loadFlags)
17 {
18     mCache = new CacheType;
19 }
20 
getLand(int x,int y)21 osg::ref_ptr<ESMTerrain::LandObject> LandManager::getLand(int x, int y)
22 {
23     osg::ref_ptr<osg::Object> obj = mCache->getRefFromObjectCache(std::make_pair(x,y));
24     if (obj)
25         return static_cast<ESMTerrain::LandObject*>(obj.get());
26     else
27     {
28         const ESM::Land* land = MWBase::Environment::get().getWorld()->getStore().get<ESM::Land>().search(x,y);
29         if (!land)
30             return nullptr;
31         osg::ref_ptr<ESMTerrain::LandObject> landObj (new ESMTerrain::LandObject(land, mLoadFlags));
32         mCache->addEntryToObjectCache(std::make_pair(x,y), landObj.get());
33         return landObj;
34     }
35 }
36 
reportStats(unsigned int frameNumber,osg::Stats * stats) const37 void LandManager::reportStats(unsigned int frameNumber, osg::Stats *stats) const
38 {
39     stats->setAttribute(frameNumber, "Land", mCache->getCacheSize());
40 }
41 
42 
43 }
44