#include "plugin.hpp" #include #include #include #include #include #include #include #include #include #include #include #include namespace MyGUIPlugin { // Dummy - obsolete when using MyGUI git, because the ScrollBar there has autorepeat support added. class MWScrollBar : public MyGUI::ScrollBar { MYGUI_RTTI_DERIVED(MWScrollBar) }; const std::string& ResourcePlugin::getName() const { static const std::string name = "OpenMW resource plugin"; return name; } void ResourcePlugin::install() { } void ResourcePlugin::uninstall() { } void ResourcePlugin::registerResources() { boost::program_options::variables_map variables; boost::program_options::options_description desc("Allowed options"); desc.add_options() ("data", boost::program_options::value()->default_value(Files::PathContainer(), "data")->multitoken()->composing()) ("data-local", boost::program_options::value()->default_value("")) ("fs-strict", boost::program_options::value()->implicit_value(true)->default_value(false)) ("fallback-archive", boost::program_options::value >()-> default_value(std::vector(), "fallback-archive")->multitoken()) ("encoding", boost::program_options::value()->default_value("win1252")); boost::program_options::notify(variables); Files::ConfigurationManager cfgManager; cfgManager.readConfiguration(variables, desc); std::vector archives = variables["fallback-archive"].as >(); bool fsStrict = variables["fs-strict"].as(); Files::PathContainer dataDirs, dataLocal; if (!variables["data"].empty()) { dataDirs = Files::PathContainer(variables["data"].as()); } std::string local = variables["data-local"].as(); if (!local.empty()) { dataLocal.push_back(Files::PathContainer::value_type(local)); } cfgManager.processPaths (dataDirs); cfgManager.processPaths (dataLocal, true); if (!dataLocal.empty()) dataDirs.insert (dataDirs.end(), dataLocal.begin(), dataLocal.end()); Files::Collections collections (dataDirs, !fsStrict); Bsa::registerResources(collections, archives, true, fsStrict); std::string encoding(variables["encoding"].as()); std::cout << ToUTF8::encodingUsingMessage(encoding) << std::endl; Gui::FontLoader loader(ToUTF8::calculateEncoding(encoding)); loader.loadAllFonts(false); } void ResourcePlugin::registerWidgets() { MyGUI::FactoryManager::getInstance().registerFactory("Widget"); MyGUI::FactoryManager::getInstance().registerFactory("Widget"); MyGUI::FactoryManager::getInstance().registerFactory("Widget"); MyGUI::FactoryManager::getInstance().registerFactory("Widget"); MyGUI::FactoryManager::getInstance().registerFactory("Widget"); MyGUI::FactoryManager::getInstance().registerFactory("Widget"); MyGUI::FactoryManager::getInstance().registerFactory("Widget"); } void ResourcePlugin::createTransparentBGTexture() { // This texture is manually created in OpenMW to be able to change its opacity at runtime in the options menu Ogre::TexturePtr tex = Ogre::TextureManager::getSingleton().createManual( "transparent.png", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::TEX_TYPE_2D, 1, 1, 0, Ogre::PF_A8R8G8B8, Ogre::TU_WRITE_ONLY); std::vector buffer; buffer.resize(1); const float val = 0.7; buffer[0] = (int(255*val) << 24) | (255 << 16) | (255 << 8) | 255; memcpy(tex->getBuffer()->lock(Ogre::HardwareBuffer::HBL_DISCARD), &buffer[0], 1*4); tex->getBuffer()->unlock(); } void ResourcePlugin::initialize() { MYGUI_LOGGING("OpenMW_Resource_Plugin", Info, "initialize"); registerResources(); registerWidgets(); createTransparentBGTexture(); } void ResourcePlugin::shutdown() { /// \todo cleanup MYGUI_LOGGING("OpenMW_Resource_Plugin", Info, "shutdown"); } }