Integrate AddGlow with material controllers

actorid
scrawl 11 years ago
parent 16b3927f17
commit 6d27ebabb6

@ -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,29 +146,21 @@ 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());
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);
}
}
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)));
}
};
@ -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:

@ -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…
Cancel
Save