forked from teamnwah/openmw-tes3coop
Integrate AddGlow with material controllers
This commit is contained in:
parent
16b3927f17
commit
6d27ebabb6
5 changed files with 19 additions and 27 deletions
|
@ -141,15 +141,15 @@ void MWBase::Environment::cleanup()
|
|||
delete mScriptManager;
|
||||
mScriptManager = 0;
|
||||
|
||||
delete mWindowManager;
|
||||
mWindowManager = 0;
|
||||
|
||||
delete mWorld;
|
||||
mWorld = 0;
|
||||
|
||||
delete mSoundManager;
|
||||
mSoundManager = 0;
|
||||
|
||||
delete mWindowManager;
|
||||
mWindowManager = 0;
|
||||
|
||||
delete mInputManager;
|
||||
mInputManager = 0;
|
||||
}
|
||||
|
|
|
@ -146,30 +146,22 @@ void Animation::setObjectRoot(const std::string &model, bool baseonly)
|
|||
struct AddGlow
|
||||
{
|
||||
Ogre::Vector3* mColor;
|
||||
AddGlow(Ogre::Vector3* col) : mColor(col) {}
|
||||
NifOgre::MaterialControllerManager* mMaterialControllerMgr;
|
||||
AddGlow(Ogre::Vector3* col, NifOgre::MaterialControllerManager* materialControllerMgr)
|
||||
: mColor(col)
|
||||
, mMaterialControllerMgr(materialControllerMgr)
|
||||
{}
|
||||
|
||||
// TODO: integrate this with material controllers?
|
||||
void operator()(Ogre::Entity* entity) const
|
||||
{
|
||||
unsigned int numsubs = entity->getNumSubEntities();
|
||||
for(unsigned int i = 0;i < numsubs;++i)
|
||||
{
|
||||
unsigned int numsubs = entity->getNumSubEntities();
|
||||
for(unsigned int i = 0;i < numsubs;++i)
|
||||
{
|
||||
Ogre::SubEntity* subEnt = entity->getSubEntity(i);
|
||||
std::string newName = subEnt->getMaterialName() + "@fx";
|
||||
if (sh::Factory::getInstance().searchInstance(newName) == NULL)
|
||||
{
|
||||
sh::MaterialInstance* instance =
|
||||
sh::Factory::getInstance().createMaterialInstance(newName, subEnt->getMaterialName());
|
||||
if (!entity->getNumSubEntities())
|
||||
return;
|
||||
Ogre::MaterialPtr writableMaterial = mMaterialControllerMgr->getWritableMaterial(entity);
|
||||
sh::MaterialInstance* instance = sh::Factory::getInstance().getMaterialInstance(writableMaterial->getName());
|
||||
|
||||
instance->setProperty("env_map", sh::makeProperty(new sh::BooleanValue(true)));
|
||||
instance->setProperty("env_map_color", sh::makeProperty(new sh::Vector3(mColor->x, mColor->y, mColor->z)));
|
||||
}
|
||||
subEnt->setMaterialName(newName);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class VisQueueSet
|
||||
|
@ -216,7 +208,7 @@ void Animation::setRenderProperties(NifOgre::ObjectScenePtr objlist, Ogre::uint3
|
|||
|
||||
if (enchantedGlow)
|
||||
std::for_each(objlist->mEntities.begin(), objlist->mEntities.end(),
|
||||
AddGlow(glowColor));
|
||||
AddGlow(glowColor, &objlist->mMaterialControllerMgr));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -390,7 +390,6 @@ Ogre::String NIFMaterialLoader::getMaterial(const Nif::ShapeData *shapedata,
|
|||
instance->setProperty("depth_write", sh::makeProperty(new sh::StringValue(((depthFlags>>1)&1) ? "on" : "off")));
|
||||
// depth_func???
|
||||
|
||||
sh::Factory::getInstance()._ensureMaterial(name, "Default");
|
||||
return name;
|
||||
}
|
||||
|
||||
|
|
|
@ -45,6 +45,8 @@ class MaterialControllerManager
|
|||
{
|
||||
public:
|
||||
~MaterialControllerManager();
|
||||
|
||||
/// @attention if \a movable is an Entity, it needs to have *one* SubEntity
|
||||
Ogre::MaterialPtr getWritableMaterial (Ogre::MovableObject* movable);
|
||||
|
||||
private:
|
||||
|
|
3
extern/shiny/Main/Factory.hpp
vendored
3
extern/shiny/Main/Factory.hpp
vendored
|
@ -259,9 +259,8 @@ namespace sh
|
|||
Platform* mPlatform;
|
||||
|
||||
MaterialInstance* findInstance (const std::string& name);
|
||||
public:
|
||||
MaterialInstance* searchInstance (const std::string& name);
|
||||
private:
|
||||
MaterialInstance* searchInstance (const std::string& name);
|
||||
/// @return was anything removed?
|
||||
bool removeCache (const std::string& pattern);
|
||||
|
||||
|
|
Loading…
Reference in a new issue