mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-11-04 07:26: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));
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |