Something went wrong. Try again.
OpenMW is an open implementation of the Morrowind engine
Something went wrong. Try again.
4.3 kB · 130 lines
C++
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131#include "resourcesystem.hpp"
#include <algorithm>
#include "animblendrulesmanager.hpp"#include "bgsmfilemanager.hpp"#include "imagemanager.hpp"#include "keyframemanager.hpp"#include "niffilemanager.hpp"#include "scenemanager.hpp"
namespace Resource{
ResourceSystem::ResourceSystem( const VFS::Manager* vfs, double expiryDelay, const ToUTF8::StatelessUtf8Encoder* encoder) : mVFS(vfs) { mNifFileManager = std::make_unique<NifFileManager>(vfs, encoder); mBgsmFileManager = std::make_unique<BgsmFileManager>(vfs, expiryDelay); mImageManager = std::make_unique<ImageManager>(vfs, expiryDelay); mSceneManager = std::make_unique<SceneManager>( vfs, mImageManager.get(), mNifFileManager.get(), mBgsmFileManager.get(), expiryDelay); mKeyframeManager = std::make_unique<KeyframeManager>(vfs, mSceneManager.get(), expiryDelay, encoder); mAnimBlendRulesManager = std::make_unique<AnimBlendRulesManager>(vfs, expiryDelay);
addResourceManager(mNifFileManager.get()); addResourceManager(mBgsmFileManager.get()); addResourceManager(mKeyframeManager.get()); // note, scene references images so add images afterwards for correct implementation of updateCache() addResourceManager(mSceneManager.get()); addResourceManager(mImageManager.get()); addResourceManager(mAnimBlendRulesManager.get()); }
ResourceSystem::~ResourceSystem() { // this has to be defined in the .cpp file as we can't delete incomplete types
mResourceManagers.clear(); }
SceneManager* ResourceSystem::getSceneManager() { return mSceneManager.get(); }
ImageManager* ResourceSystem::getImageManager() { return mImageManager.get(); }
BgsmFileManager* ResourceSystem::getBgsmFileManager() { return mBgsmFileManager.get(); }
NifFileManager* ResourceSystem::getNifFileManager() { return mNifFileManager.get(); }
KeyframeManager* ResourceSystem::getKeyframeManager() { return mKeyframeManager.get(); }
AnimBlendRulesManager* ResourceSystem::getAnimBlendRulesManager() { return mAnimBlendRulesManager.get(); }
void ResourceSystem::setExpiryDelay(double expiryDelay) { for (std::vector<BaseResourceManager*>::iterator it = mResourceManagers.begin(); it != mResourceManagers.end(); ++it) (*it)->setExpiryDelay(expiryDelay);
// NIF files aren't needed any more once the converted objects are cached in SceneManager / BulletShapeManager, // so no point in using an expiry delay mNifFileManager->setExpiryDelay(0.0); }
void ResourceSystem::updateCache(double referenceTime) { for (std::vector<BaseResourceManager*>::iterator it = mResourceManagers.begin(); it != mResourceManagers.end(); ++it) (*it)->updateCache(referenceTime); }
void ResourceSystem::clearCache() { for (std::vector<BaseResourceManager*>::iterator it = mResourceManagers.begin(); it != mResourceManagers.end(); ++it) (*it)->clearCache(); }
void ResourceSystem::addResourceManager(BaseResourceManager* resourceMgr) { mResourceManagers.push_back(resourceMgr); }
void ResourceSystem::removeResourceManager(BaseResourceManager* resourceMgr) { std::vector<BaseResourceManager*>::iterator found = std::find(mResourceManagers.begin(), mResourceManagers.end(), resourceMgr); if (found != mResourceManagers.end()) mResourceManagers.erase(found); }
const VFS::Manager* ResourceSystem::getVFS() const { return mVFS; }
void ResourceSystem::reportStats(unsigned int frameNumber, osg::Stats* stats) const { for (std::vector<BaseResourceManager*>::const_iterator it = mResourceManagers.begin(); it != mResourceManagers.end(); ++it) (*it)->reportStats(frameNumber, stats); }
void ResourceSystem::releaseGLObjects(osg::State* state) { for (std::vector<BaseResourceManager*>::const_iterator it = mResourceManagers.begin(); it != mResourceManagers.end(); ++it) (*it)->releaseGLObjects(state); }
}