mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-03-14 01:19:59 +00:00
Set visibility flags and the render queue group for particles
This commit is contained in:
parent
2db72ae607
commit
878b4c15c5
@ -1,6 +1,7 @@
|
||||
#include "activatoranimation.hpp"
|
||||
|
||||
#include <OgreEntity.h>
|
||||
#include <OgreParticleSystem.h>
|
||||
#include <OgreSceneManager.h>
|
||||
#include <OgreSubEntity.h>
|
||||
|
||||
@ -29,14 +30,20 @@ ActivatorAnimation::ActivatorAnimation(const MWWorld::Ptr &ptr)
|
||||
for(size_t i = 0;i < mObjectList.mEntities.size();i++)
|
||||
{
|
||||
Ogre::Entity *ent = mObjectList.mEntities[i];
|
||||
ent->setVisibilityFlags(RV_Misc);
|
||||
|
||||
for(unsigned int j=0; j < ent->getNumSubEntities(); ++j)
|
||||
{
|
||||
Ogre::SubEntity* subEnt = ent->getSubEntity(j);
|
||||
subEnt->setRenderQueueGroup(subEnt->getMaterial()->isTransparent() ? RQG_Alpha : RQG_Main);
|
||||
}
|
||||
}
|
||||
for(size_t i = 0;i < mObjectList.mParticles.size();i++)
|
||||
{
|
||||
Ogre::ParticleSystem *part = mObjectList.mParticles[i];
|
||||
part->setVisibilityFlags(RV_Misc);
|
||||
|
||||
ent->setVisibilityFlags(RV_Misc);
|
||||
part->setRenderQueueGroup(RQG_Alpha);
|
||||
}
|
||||
setAnimationSource(mesh);
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
#include "creatureanimation.hpp"
|
||||
|
||||
#include <OgreEntity.h>
|
||||
#include <OgreParticleSystem.h>
|
||||
#include <OgreSceneManager.h>
|
||||
#include <OgreSubEntity.h>
|
||||
|
||||
@ -37,6 +38,13 @@ CreatureAnimation::CreatureAnimation(const MWWorld::Ptr &ptr)
|
||||
subEnt->setRenderQueueGroup(subEnt->getMaterial()->isTransparent() ? RQG_Alpha : RQG_Main);
|
||||
}
|
||||
}
|
||||
for(size_t i = 0;i < mObjectList.mParticles.size();i++)
|
||||
{
|
||||
Ogre::ParticleSystem *part = mObjectList.mParticles[i];
|
||||
part->setVisibilityFlags(RV_Actors);
|
||||
|
||||
part->setRenderQueueGroup(RQG_Alpha);
|
||||
}
|
||||
|
||||
std::vector<std::string> names;
|
||||
if((ref->mBase->mFlags&ESM::Creature::Biped))
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
#include <OgreSceneManager.h>
|
||||
#include <OgreEntity.h>
|
||||
#include <OgreParticleSystem.h>
|
||||
#include <OgreSubEntity.h>
|
||||
|
||||
#include "../mwworld/esmstore.hpp"
|
||||
@ -109,6 +110,15 @@ NpcAnimation::NpcAnimation(const MWWorld::Ptr& ptr, Ogre::SceneNode* node, MWWor
|
||||
subEnt->setRenderQueueGroup(subEnt->getMaterial()->isTransparent() ? RQG_Alpha : RQG_Main);
|
||||
}
|
||||
}
|
||||
for(size_t i = 0;i < mObjectList.mParticles.size();i++)
|
||||
{
|
||||
Ogre::ParticleSystem *part = mObjectList.mParticles[i];
|
||||
|
||||
part->getUserObjectBindings().setUserAny(Ogre::Any(-1));
|
||||
if(mVisibilityFlags != 0)
|
||||
part->setVisibilityFlags(mVisibilityFlags);
|
||||
part->setRenderQueueGroup(RQG_Alpha);
|
||||
}
|
||||
|
||||
std::vector<std::string> skelnames(1, smodel);
|
||||
if(!mNpc->isMale() && !isBeast)
|
||||
@ -306,19 +316,25 @@ NifOgre::ObjectList NpcAnimation::insertBoundedPart(const std::string &model, in
|
||||
{
|
||||
NifOgre::ObjectList objects = NifOgre::Loader::createObjects(mObjectList.mSkelBase, bonename,
|
||||
mInsert, model);
|
||||
const std::vector<Ogre::Entity*> &parts = objects.mEntities;
|
||||
for(size_t i = 0;i < parts.size();i++)
|
||||
for(size_t i = 0;i < objects.mEntities.size();i++)
|
||||
{
|
||||
parts[i]->getUserObjectBindings().setUserAny(Ogre::Any(group));
|
||||
if (mVisibilityFlags != 0)
|
||||
parts[i]->setVisibilityFlags(mVisibilityFlags);
|
||||
objects.mEntities[i]->getUserObjectBindings().setUserAny(Ogre::Any(group));
|
||||
if(mVisibilityFlags != 0)
|
||||
objects.mEntities[i]->setVisibilityFlags(mVisibilityFlags);
|
||||
|
||||
for(unsigned int j=0; j < parts[i]->getNumSubEntities(); ++j)
|
||||
for(unsigned int j=0; j < objects.mEntities[i]->getNumSubEntities(); ++j)
|
||||
{
|
||||
Ogre::SubEntity* subEnt = parts[i]->getSubEntity(j);
|
||||
Ogre::SubEntity* subEnt = objects.mEntities[i]->getSubEntity(j);
|
||||
subEnt->setRenderQueueGroup(subEnt->getMaterial()->isTransparent() ? RQG_Alpha : RQG_Main);
|
||||
}
|
||||
}
|
||||
for(size_t i = 0;i < objects.mParticles.size();i++)
|
||||
{
|
||||
objects.mParticles[i]->getUserObjectBindings().setUserAny(Ogre::Any(group));
|
||||
if(mVisibilityFlags != 0)
|
||||
objects.mParticles[i]->setVisibilityFlags(mVisibilityFlags);
|
||||
objects.mParticles[i]->setRenderQueueGroup(RQG_Alpha);
|
||||
}
|
||||
if(objects.mSkelBase)
|
||||
{
|
||||
Ogre::AnimationStateSet *aset = objects.mSkelBase->getAllAnimationStates();
|
||||
|
Loading…
x
Reference in New Issue
Block a user