mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-31 20:56:39 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			80 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include "nifoverrides.hpp"
 | |
| 
 | |
| #include <OgreStringConverter.h>
 | |
| 
 | |
| #include <../components/misc/stringops.hpp>
 | |
| 
 | |
| #include "../extern/shiny/Main/MaterialInstance.hpp"
 | |
| 
 | |
| #include <stdexcept>
 | |
| 
 | |
| 
 | |
| using namespace NifOverrides;
 | |
| 
 | |
| Overrides::TransparencyOverrideMap Overrides::mTransparencyOverrides = Overrides::TransparencyOverrideMap();
 | |
| Overrides::MaterialOverrideMap Overrides::mMaterialOverrides = Overrides::MaterialOverrideMap();
 | |
| 
 | |
| void Overrides::loadTransparencyOverrides (const std::string& file)
 | |
| {
 | |
|     Ogre::ConfigFile cf;
 | |
|     cf.load(file);
 | |
| 
 | |
|     Ogre::ConfigFile::SectionIterator seci = cf.getSectionIterator();
 | |
|     while (seci.hasMoreElements())
 | |
|     {
 | |
|         Ogre::String sectionName = seci.peekNextKey();
 | |
|         mTransparencyOverrides[sectionName] =
 | |
|                 Ogre::StringConverter::parseInt(cf.getSetting("alphaRejectValue", sectionName));
 | |
|         seci.getNext();
 | |
|     }
 | |
| }
 | |
| 
 | |
| void Overrides::loadMaterialOverrides(const std::string &file)
 | |
| {
 | |
|     Ogre::ConfigFile cf;
 | |
|     cf.load(file);
 | |
| 
 | |
|     Ogre::ConfigFile::SectionIterator seci = cf.getSectionIterator();
 | |
|     while (seci.hasMoreElements())
 | |
|     {
 | |
|         Ogre::String sectionName = seci.peekNextKey();
 | |
| 
 | |
|         Ogre::ConfigFile::SettingsMultiMap *settings = seci.getNext();
 | |
|         Ogre::ConfigFile::SettingsMultiMap::iterator i;
 | |
|         std::map<std::string, std::string> overrides;
 | |
|         for (i = settings->begin(); i != settings->end(); ++i)
 | |
|         {
 | |
|             overrides[i->first] = i->second;
 | |
|         }
 | |
|         mMaterialOverrides[sectionName] = overrides;
 | |
|     }
 | |
| 
 | |
| }
 | |
| 
 | |
| TransparencyResult Overrides::getTransparencyOverride(const std::string& texture)
 | |
| {
 | |
|     TransparencyResult result;
 | |
|     result.first = false;
 | |
| 
 | |
|     TransparencyOverrideMap::iterator it = mTransparencyOverrides.find(Misc::StringUtils::lowerCase(texture));
 | |
|     if (it != mTransparencyOverrides.end())
 | |
|     {
 | |
|         result.first = true;
 | |
|         result.second = it->second;
 | |
|     }
 | |
| 
 | |
|     return result;
 | |
| }
 | |
| 
 | |
| void Overrides::getMaterialOverrides(const std::string &texture, sh::MaterialInstance* material)
 | |
| {
 | |
|     MaterialOverrideMap::iterator it = mMaterialOverrides.find(Misc::StringUtils::lowerCase(texture));
 | |
|     if (it != mMaterialOverrides.end())
 | |
|     {
 | |
|         const std::map<std::string, std::string>& overrides = it->second;
 | |
|         for (std::map<std::string, std::string>::const_iterator it = overrides.begin(); it != overrides.end(); ++it)
 | |
|         {
 | |
|             material->setProperty(it->first, sh::makeProperty(it->second));
 | |
|         }
 | |
|     }
 | |
| }
 |