1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-04-01 00:36:46 +00:00

Handle NiCamera nodes

This commit is contained in:
Chris Robinson 2013-04-07 02:28:15 -07:00
parent 878b4c15c5
commit be419bc891
4 changed files with 16 additions and 1 deletions

View file

@ -46,6 +46,7 @@ Animation::~Animation()
sceneMgr->destroyEntity(mObjectList.mEntities[i]); sceneMgr->destroyEntity(mObjectList.mEntities[i]);
} }
mObjectList.mControllers.clear(); mObjectList.mControllers.clear();
mObjectList.mCameras.clear();
mObjectList.mParticles.clear(); mObjectList.mParticles.clear();
mObjectList.mEntities.clear(); mObjectList.mEntities.clear();
mObjectList.mSkelBase = NULL; mObjectList.mSkelBase = NULL;

View file

@ -384,6 +384,7 @@ void NpcAnimation::removeObjects(NifOgre::ObjectList &objects)
for(size_t i = 0;i < objects.mEntities.size();i++) for(size_t i = 0;i < objects.mEntities.size();i++)
sceneMgr->destroyEntity(objects.mEntities[i]); sceneMgr->destroyEntity(objects.mEntities[i]);
objects.mControllers.clear(); objects.mControllers.clear();
objects.mCameras.clear();
objects.mParticles.clear(); objects.mParticles.clear();
objects.mEntities.clear(); objects.mEntities.clear();
objects.mSkelBase = NULL; objects.mSkelBase = NULL;

View file

@ -498,6 +498,7 @@ void buildBones(Ogre::Skeleton *skel, const Nif::Node *node, Ogre::Bone *&animro
if(!(node->recType == Nif::RC_NiNode || /* Nothing special; children traversed below */ if(!(node->recType == Nif::RC_NiNode || /* Nothing special; children traversed below */
node->recType == Nif::RC_RootCollisionNode || /* handled in nifbullet (hopefully) */ node->recType == Nif::RC_RootCollisionNode || /* handled in nifbullet (hopefully) */
node->recType == Nif::RC_NiTriShape || /* Handled in the mesh loader */ node->recType == Nif::RC_NiTriShape || /* Handled in the mesh loader */
node->recType == Nif::RC_NiCamera ||
node->recType == Nif::RC_NiAutoNormalParticles || node->recType == Nif::RC_NiAutoNormalParticles ||
node->recType == Nif::RC_NiRotatingParticles node->recType == Nif::RC_NiRotatingParticles
)) ))
@ -1452,6 +1453,13 @@ class NIFObjectLoader : Ogre::ManualResourceLoader
e = e->extra; e = e->extra;
} }
if(node->recType == Nif::RC_NiCamera)
{
int trgtid = NIFSkeletonLoader::lookupOgreBoneHandle(mName, node->recIndex);
Ogre::Bone *trgtbone = objectlist.mSkelBase->getSkeleton()->getBone(trgtid);
objectlist.mCameras.push_back(trgtbone);
}
Nif::ControllerPtr ctrl = node->controller; Nif::ControllerPtr ctrl = node->controller;
while(!ctrl.empty()) while(!ctrl.empty())
{ {

View file

@ -42,9 +42,14 @@ static const char sTextKeyExtraDataID[] = "TextKeyExtraData";
struct ObjectList { struct ObjectList {
Ogre::Entity *mSkelBase; Ogre::Entity *mSkelBase;
std::vector<Ogre::Entity*> mEntities; std::vector<Ogre::Entity*> mEntities;
std::vector<Ogre::ParticleSystem*> mParticles; std::vector<Ogre::ParticleSystem*> mParticles;
// We could actually have Ogre::Camera objects, but that means more
// maintenance when switching cameras. The information in the NiCamera node
// is pretty much useless too anyway. So instead, this is just a list of
// bones in the mSkelBase which are NiCamera nodes.
std::vector<Ogre::Bone*> mCameras;
std::vector<Ogre::Controller<Ogre::Real> > mControllers; std::vector<Ogre::Controller<Ogre::Real> > mControllers;
ObjectList() : mSkelBase(0) ObjectList() : mSkelBase(0)