2011-12-12 03:40:00 +00:00
|
|
|
#include "creatureanimation.hpp"
|
2012-07-03 13:32:38 +00:00
|
|
|
|
|
|
|
#include <OgreEntity.h>
|
|
|
|
#include <OgreSceneManager.h>
|
|
|
|
#include <OgreSubEntity.h>
|
|
|
|
|
2012-04-03 13:13:47 +00:00
|
|
|
#include "renderconst.hpp"
|
2011-12-12 03:40:00 +00:00
|
|
|
|
2012-07-03 10:30:50 +00:00
|
|
|
#include "../mwbase/world.hpp"
|
2011-12-12 03:40:00 +00:00
|
|
|
|
|
|
|
using namespace Ogre;
|
|
|
|
using namespace NifOgre;
|
|
|
|
namespace MWRender{
|
2011-12-12 04:42:39 +00:00
|
|
|
|
2012-07-13 03:12:18 +00:00
|
|
|
CreatureAnimation::~CreatureAnimation()
|
|
|
|
{
|
2011-12-12 04:42:39 +00:00
|
|
|
}
|
2012-07-13 03:12:18 +00:00
|
|
|
|
2012-09-14 22:57:29 +00:00
|
|
|
CreatureAnimation::CreatureAnimation(const MWWorld::Ptr& ptr): Animation()
|
2012-07-13 03:12:18 +00:00
|
|
|
{
|
|
|
|
MWWorld::LiveCellRef<ESM::Creature> *ref = ptr.get<ESM::Creature>();
|
2011-12-12 03:40:00 +00:00
|
|
|
|
2012-11-05 12:07:59 +00:00
|
|
|
assert (ref->mBase != NULL);
|
|
|
|
if(!ref->mBase->mModel.empty())
|
2012-07-13 03:12:18 +00:00
|
|
|
{
|
2012-11-05 12:07:59 +00:00
|
|
|
std::string mesh = "meshes\\" + ref->mBase->mModel;
|
2012-07-13 03:12:18 +00:00
|
|
|
|
2013-01-05 07:19:48 +00:00
|
|
|
createEntityList(ptr.getRefData().getBaseNode(), mesh);
|
2012-07-17 23:00:03 +00:00
|
|
|
for(size_t i = 0;i < mEntityList.mEntities.size();i++)
|
2012-04-04 16:53:40 +00:00
|
|
|
{
|
2012-07-17 23:00:03 +00:00
|
|
|
Ogre::Entity *ent = mEntityList.mEntities[i];
|
|
|
|
ent->setVisibilityFlags(RV_Actors);
|
2012-07-17 18:23:34 +00:00
|
|
|
|
|
|
|
bool transparent = false;
|
2012-07-17 23:00:03 +00:00
|
|
|
for (unsigned int j=0;j < ent->getNumSubEntities() && !transparent; ++j)
|
2012-04-04 16:53:40 +00:00
|
|
|
{
|
2012-07-17 23:00:03 +00:00
|
|
|
Ogre::MaterialPtr mat = ent->getSubEntity(j)->getMaterial();
|
2012-07-17 18:23:34 +00:00
|
|
|
Ogre::Material::TechniqueIterator techIt = mat->getTechniqueIterator();
|
|
|
|
while (techIt.hasMoreElements() && !transparent)
|
2012-04-04 16:53:40 +00:00
|
|
|
{
|
2012-07-17 18:23:34 +00:00
|
|
|
Ogre::Technique* tech = techIt.getNext();
|
|
|
|
Ogre::Technique::PassIterator passIt = tech->getPassIterator();
|
|
|
|
while (passIt.hasMoreElements() && !transparent)
|
|
|
|
{
|
|
|
|
Ogre::Pass* pass = passIt.getNext();
|
|
|
|
|
|
|
|
if (pass->getDepthWriteEnabled() == false)
|
|
|
|
transparent = true;
|
|
|
|
}
|
2012-04-04 16:53:40 +00:00
|
|
|
}
|
|
|
|
}
|
2012-07-17 23:00:03 +00:00
|
|
|
ent->setRenderQueueGroup(transparent ? RQG_Alpha : RQG_Main);
|
2012-07-17 18:23:34 +00:00
|
|
|
}
|
2011-12-12 03:40:00 +00:00
|
|
|
}
|
|
|
|
}
|
2011-12-26 03:37:26 +00:00
|
|
|
|
2012-07-13 03:12:18 +00:00
|
|
|
void CreatureAnimation::runAnimation(float timepassed)
|
|
|
|
{
|
2012-07-21 21:41:26 +00:00
|
|
|
// Placeholder
|
2012-07-20 05:34:26 +00:00
|
|
|
|
2012-07-21 21:41:26 +00:00
|
|
|
Animation::runAnimation(timepassed);
|
2011-12-26 03:37:26 +00:00
|
|
|
}
|
2012-07-13 03:12:18 +00:00
|
|
|
|
2012-01-17 14:10:53 +00:00
|
|
|
}
|