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;
|
delete mScriptManager;
|
||||||
mScriptManager = 0;
|
mScriptManager = 0;
|
||||||
|
|
||||||
|
delete mWindowManager;
|
||||||
|
mWindowManager = 0;
|
||||||
|
|
||||||
delete mWorld;
|
delete mWorld;
|
||||||
mWorld = 0;
|
mWorld = 0;
|
||||||
|
|
||||||
delete mSoundManager;
|
delete mSoundManager;
|
||||||
mSoundManager = 0;
|
mSoundManager = 0;
|
||||||
|
|
||||||
delete mWindowManager;
|
|
||||||
mWindowManager = 0;
|
|
||||||
|
|
||||||
delete mInputManager;
|
delete mInputManager;
|
||||||
mInputManager = 0;
|
mInputManager = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -146,29 +146,21 @@ void Animation::setObjectRoot(const std::string &model, bool baseonly)
|
||||||
struct AddGlow
|
struct AddGlow
|
||||||
{
|
{
|
||||||
Ogre::Vector3* mColor;
|
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
|
void operator()(Ogre::Entity* entity) const
|
||||||
{
|
{
|
||||||
unsigned int numsubs = entity->getNumSubEntities();
|
if (!entity->getNumSubEntities())
|
||||||
for(unsigned int i = 0;i < numsubs;++i)
|
return;
|
||||||
{
|
Ogre::MaterialPtr writableMaterial = mMaterialControllerMgr->getWritableMaterial(entity);
|
||||||
unsigned int numsubs = entity->getNumSubEntities();
|
sh::MaterialInstance* instance = sh::Factory::getInstance().getMaterialInstance(writableMaterial->getName());
|
||||||
for(unsigned int i = 0;i < numsubs;++i)
|
|
||||||
{
|
instance->setProperty("env_map", sh::makeProperty(new sh::BooleanValue(true)));
|
||||||
Ogre::SubEntity* subEnt = entity->getSubEntity(i);
|
instance->setProperty("env_map_color", sh::makeProperty(new sh::Vector3(mColor->x, mColor->y, mColor->z)));
|
||||||
std::string newName = subEnt->getMaterialName() + "@fx";
|
|
||||||
if (sh::Factory::getInstance().searchInstance(newName) == NULL)
|
|
||||||
{
|
|
||||||
sh::MaterialInstance* instance =
|
|
||||||
sh::Factory::getInstance().createMaterialInstance(newName, subEnt->getMaterialName());
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -216,7 +208,7 @@ void Animation::setRenderProperties(NifOgre::ObjectScenePtr objlist, Ogre::uint3
|
||||||
|
|
||||||
if (enchantedGlow)
|
if (enchantedGlow)
|
||||||
std::for_each(objlist->mEntities.begin(), objlist->mEntities.end(),
|
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")));
|
instance->setProperty("depth_write", sh::makeProperty(new sh::StringValue(((depthFlags>>1)&1) ? "on" : "off")));
|
||||||
// depth_func???
|
// depth_func???
|
||||||
|
|
||||||
sh::Factory::getInstance()._ensureMaterial(name, "Default");
|
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -45,6 +45,8 @@ class MaterialControllerManager
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
~MaterialControllerManager();
|
~MaterialControllerManager();
|
||||||
|
|
||||||
|
/// @attention if \a movable is an Entity, it needs to have *one* SubEntity
|
||||||
Ogre::MaterialPtr getWritableMaterial (Ogre::MovableObject* movable);
|
Ogre::MaterialPtr getWritableMaterial (Ogre::MovableObject* movable);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
3
extern/shiny/Main/Factory.hpp
vendored
3
extern/shiny/Main/Factory.hpp
vendored
|
@ -259,9 +259,8 @@ namespace sh
|
||||||
Platform* mPlatform;
|
Platform* mPlatform;
|
||||||
|
|
||||||
MaterialInstance* findInstance (const std::string& name);
|
MaterialInstance* findInstance (const std::string& name);
|
||||||
public:
|
|
||||||
MaterialInstance* searchInstance (const std::string& name);
|
|
||||||
private:
|
private:
|
||||||
|
MaterialInstance* searchInstance (const std::string& name);
|
||||||
/// @return was anything removed?
|
/// @return was anything removed?
|
||||||
bool removeCache (const std::string& pattern);
|
bool removeCache (const std::string& pattern);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue