2014-07-04 10:46:57 +00:00
|
|
|
#include "resourcesmanager.hpp"
|
|
|
|
|
|
|
|
#include <stdexcept>
|
|
|
|
|
2015-12-19 06:39:02 +00:00
|
|
|
#include <OgreResourceGroupManager.h>
|
|
|
|
|
2014-07-07 13:20:05 +00:00
|
|
|
void CSMWorld::ResourcesManager::addResources (const Resources& resources)
|
|
|
|
{
|
|
|
|
mResources.insert (std::make_pair (resources.getType(), resources));
|
2014-09-30 11:15:15 +00:00
|
|
|
mResources.insert (std::make_pair (UniversalId::getParentType (resources.getType()),
|
|
|
|
resources));
|
2014-07-07 13:20:05 +00:00
|
|
|
}
|
|
|
|
|
2014-07-04 10:46:57 +00:00
|
|
|
void CSMWorld::ResourcesManager::listResources()
|
|
|
|
{
|
2015-12-19 06:39:02 +00:00
|
|
|
// Following code was taken out of Resources ctor, since it was being executed each time
|
|
|
|
// and slow enough to showe up in the profiler.
|
|
|
|
//
|
|
|
|
// See Editor ctor which calls Bsa::registerResources()
|
|
|
|
//
|
|
|
|
// resourceGroups include those from config files, e.g.:
|
|
|
|
//
|
|
|
|
// C:/Program Files\OpenMW\data
|
|
|
|
// C:/Program Files (x86)\Bethesda Softworks\Morrowind\Data Files
|
|
|
|
//
|
|
|
|
// and from archives:
|
|
|
|
//
|
|
|
|
// C:/Program Files (x86)\Bethesda Softworks\Morrowind\Data Files\Morrowind.bsa
|
|
|
|
// C:/Program Files (x86)\Bethesda Softworks\Morrowind\Data Files\Tribunal.bsa
|
|
|
|
// C:/Program Files (x86)\Bethesda Softworks\Morrowind\Data Files\Bloodmoon.bsa
|
|
|
|
//
|
|
|
|
std::vector<Ogre::StringVectorPtr> resources;
|
|
|
|
|
|
|
|
Ogre::StringVector resourcesGroups =
|
|
|
|
Ogre::ResourceGroupManager::getSingleton().getResourceGroups();
|
|
|
|
|
|
|
|
for (Ogre::StringVector::iterator iter (resourcesGroups.begin());
|
|
|
|
iter!=resourcesGroups.end(); ++iter)
|
|
|
|
{
|
|
|
|
if (*iter=="General" || *iter=="Internal" || *iter=="Autodetect")
|
|
|
|
continue;
|
|
|
|
|
|
|
|
resources.push_back(
|
|
|
|
Ogre::ResourceGroupManager::getSingleton().listResourceNames (*iter));
|
|
|
|
}
|
|
|
|
|
2014-07-07 09:34:24 +00:00
|
|
|
static const char * const sMeshTypes[] = { "nif", 0 };
|
|
|
|
|
2015-12-19 06:39:02 +00:00
|
|
|
addResources (Resources ("meshes", UniversalId::Type_Mesh, resources, sMeshTypes));
|
|
|
|
addResources (Resources ("icons", UniversalId::Type_Icon, resources));
|
|
|
|
addResources (Resources ("music", UniversalId::Type_Music, resources));
|
|
|
|
addResources (Resources ("sound", UniversalId::Type_SoundRes, resources));
|
|
|
|
addResources (Resources ("textures", UniversalId::Type_Texture, resources));
|
|
|
|
addResources (Resources ("videos", UniversalId::Type_Video, resources));
|
2014-07-04 10:46:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
const CSMWorld::Resources& CSMWorld::ResourcesManager::get (UniversalId::Type type) const
|
|
|
|
{
|
|
|
|
std::map<UniversalId::Type, Resources>::const_iterator iter = mResources.find (type);
|
|
|
|
|
|
|
|
if (iter==mResources.end())
|
|
|
|
throw std::logic_error ("Unknown resource type");
|
|
|
|
|
|
|
|
return iter->second;
|
2015-03-11 14:54:45 +00:00
|
|
|
}
|