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:
parent
878b4c15c5
commit
be419bc891
4 changed files with 16 additions and 1 deletions
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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())
|
||||||
{
|
{
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in a new issue