mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-28 17:56:37 +00:00 
			
		
		
		
	Set visibility flags and the render queue group for particles
This commit is contained in:
		
							parent
							
								
									2db72ae607
								
							
						
					
					
						commit
						878b4c15c5
					
				
					 3 changed files with 39 additions and 8 deletions
				
			
		|  | @ -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…
	
		Reference in a new issue