You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.1 KiB
C++
44 lines
1.1 KiB
C++
#include "landmanager.hpp"
|
|
|
|
#include <osg/Stats>
|
|
|
|
#include <components/resource/objectcache.hpp>
|
|
|
|
#include "../mwbase/environment.hpp"
|
|
#include "../mwbase/world.hpp"
|
|
#include "../mwworld/esmstore.hpp"
|
|
|
|
namespace MWRender
|
|
{
|
|
|
|
LandManager::LandManager(int loadFlags)
|
|
: GenericResourceManager<std::pair<int, int> >(nullptr)
|
|
, mLoadFlags(loadFlags)
|
|
{
|
|
mCache = new CacheType;
|
|
}
|
|
|
|
osg::ref_ptr<ESMTerrain::LandObject> LandManager::getLand(int x, int y)
|
|
{
|
|
osg::ref_ptr<osg::Object> obj = mCache->getRefFromObjectCache(std::make_pair(x,y));
|
|
if (obj)
|
|
return static_cast<ESMTerrain::LandObject*>(obj.get());
|
|
else
|
|
{
|
|
const ESM::Land* land = MWBase::Environment::get().getWorld()->getStore().get<ESM::Land>().search(x,y);
|
|
if (!land)
|
|
return nullptr;
|
|
osg::ref_ptr<ESMTerrain::LandObject> landObj (new ESMTerrain::LandObject(land, mLoadFlags));
|
|
mCache->addEntryToObjectCache(std::make_pair(x,y), landObj.get());
|
|
return landObj;
|
|
}
|
|
}
|
|
|
|
void LandManager::reportStats(unsigned int frameNumber, osg::Stats *stats) const
|
|
{
|
|
stats->setAttribute(frameNumber, "Land", mCache->getCacheSize());
|
|
}
|
|
|
|
|
|
}
|