diff --git a/apps/openmw/engine.hpp b/apps/openmw/engine.hpp index 5e38ab28f..2f8a5b1d2 100644 --- a/apps/openmw/engine.hpp +++ b/apps/openmw/engine.hpp @@ -60,7 +60,7 @@ namespace OMW boost::filesystem::path mDataDir; boost::filesystem::path mResDir; OEngine::Render::OgreRenderer mOgre; - OEngine::Physic::PhysicEngine* mPhysicEngine; + OEngine::Physic::PhysicEngine* mPhysicEngine; std::string mCellName; std::string mMaster; bool mShowFPS; diff --git a/apps/openmw/mwrender/mwscene.cpp b/apps/openmw/mwrender/mwscene.cpp index 5117f7eb8..890bf2cd6 100644 --- a/apps/openmw/mwrender/mwscene.cpp +++ b/apps/openmw/mwrender/mwscene.cpp @@ -20,37 +20,37 @@ using namespace MWRender; using namespace Ogre; MWScene::MWScene(OEngine::Render::OgreRenderer &_rend , OEngine::Physic::PhysicEngine* physEng) - : rend(_rend) + : rend(_rend) { - eng = physEng; - rend.createScene("PlayerCam", 55, 5); + eng = physEng; + rend.createScene("PlayerCam", 55, 5); - // Set default mipmap level (NB some APIs ignore this) - TextureManager::getSingleton().setDefaultNumMipmaps(5); + // Set default mipmap level (NB some APIs ignore this) + TextureManager::getSingleton().setDefaultNumMipmaps(5); - // Load resources - ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); + // Load resources + ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); - // Turn the entire scene (represented by the 'root' node) -90 - // degrees around the x axis. This makes Z go upwards, and Y go into - // the screen (when x is to the right.) This is the orientation that - // Morrowind uses, and it automagically makes everything work as it - // should. - SceneNode *rt = rend.getScene()->getRootSceneNode(); - mwRoot = rt->createChildSceneNode(); - mwRoot->pitch(Degree(-90)); + // Turn the entire scene (represented by the 'root' node) -90 + // degrees around the x axis. This makes Z go upwards, and Y go into + // the screen (when x is to the right.) This is the orientation that + // Morrowind uses, and it automagically makes everything work as it + // should. + SceneNode *rt = rend.getScene()->getRootSceneNode(); + mwRoot = rt->createChildSceneNode(); + mwRoot->pitch(Degree(-90)); - //used to obtain ingame information of ogre objects (which are faced or selected) - mRaySceneQuery = rend.getScene()->createRayQuery(Ray()); + //used to obtain ingame information of ogre objects (which are faced or selected) + mRaySceneQuery = rend.getScene()->createRayQuery(Ray()); - Ogre::SceneNode *playerNode = mwRoot->createChildSceneNode(); - playerNode->pitch(Degree(90)); - Ogre::SceneNode *cameraYawNode = playerNode->createChildSceneNode(); - Ogre::SceneNode *cameraPitchNode = cameraYawNode->createChildSceneNode(); - cameraPitchNode->attachObject(getCamera()); + Ogre::SceneNode *playerNode = mwRoot->createChildSceneNode(); + playerNode->pitch(Degree(90)); + Ogre::SceneNode *cameraYawNode = playerNode->createChildSceneNode(); + Ogre::SceneNode *cameraPitchNode = cameraYawNode->createChildSceneNode(); + cameraPitchNode->attachObject(getCamera()); - mPlayer = new MWRender::Player (getCamera(), playerNode->getName()); + mPlayer = new MWRender::Player (getCamera(), playerNode->getName()); mFreeFly = true; } @@ -82,8 +82,8 @@ void MWScene::doPhysics (float duration, MWWorld::World& world, // stop changes to world from being reported back to the physics system MWWorld::DoingPhysics scopeGuard; - //set the DebugRenderingMode. To disable it,set it to 0 -// eng->setDebugRenderingMode(1); + //set the DebugRenderingMode. To disable it,set it to 0 + //eng->setDebugRenderingMode(1); //set the walkdirection to 0 (no movement) for every actor) for(std::map::iterator it = eng->PhysicActorMap.begin(); it != eng->PhysicActorMap.end();it++) @@ -95,7 +95,7 @@ void MWScene::doPhysics (float duration, MWWorld::World& world, for (std::vector >::const_iterator iter (actors.begin()); iter!=actors.end(); ++iter) { - OEngine::Physic::PhysicActor* act = eng->getCharacter(iter->first); + OEngine::Physic::PhysicActor* act = eng->getCharacter(iter->first); //dirty stuff to get the camera orientation. Must be changed! @@ -117,46 +117,46 @@ void MWScene::doPhysics (float duration, MWWorld::World& world, dir = 0.025*(quat*dir1); } - //set the walk direction - act->setWalkDirection(btVector3(dir.x,-dir.z,dir.y)); + //set the walk direction + act->setWalkDirection(btVector3(dir.x,-dir.z,dir.y)); } - eng->stepSimulation(duration); + eng->stepSimulation(duration); for(std::map::iterator it = eng->PhysicActorMap.begin(); it != eng->PhysicActorMap.end();it++) { OEngine::Physic::PhysicActor* act = it->second; - btVector3 newPos = act->getPosition(); + btVector3 newPos = act->getPosition(); MWWorld::Ptr ptr = world.getPtrViaHandle (it->first); - world.moveObject (ptr, newPos.x(), newPos.y(), newPos.z()); + world.moveObject (ptr, newPos.x(), newPos.y(), newPos.z()); } } void MWScene::addObject (const std::string& handle, const std::string& mesh, const Ogre::Quaternion& rotation, float scale, const Ogre::Vector3& position) { - OEngine::Physic::RigidBody* body = eng->createRigidBody(mesh,handle); - eng->addRigidBody(body); - btTransform tr; - tr.setOrigin(btVector3(position.x,position.y,position.z)); - tr.setRotation(btQuaternion(rotation.x,rotation.y,rotation.z,rotation.w)); - body->setWorldTransform(tr); + OEngine::Physic::RigidBody* body = eng->createRigidBody(mesh,handle); + eng->addRigidBody(body); + btTransform tr; + tr.setOrigin(btVector3(position.x,position.y,position.z)); + tr.setRotation(btQuaternion(rotation.x,rotation.y,rotation.z,rotation.w)); + body->setWorldTransform(tr); } void MWScene::addActor (const std::string& handle, const std::string& mesh, const Ogre::Vector3& position) { - //TODO:optimize this. Searching the std::map isn't very efficient i think. - eng->addCharacter(handle); - OEngine::Physic::PhysicActor* act = eng->getCharacter(handle); - act->setPosition(btVector3(position.x,position.y,position.z)); + //TODO:optimize this. Searching the std::map isn't very efficient i think. + eng->addCharacter(handle); + OEngine::Physic::PhysicActor* act = eng->getCharacter(handle); + act->setPosition(btVector3(position.x,position.y,position.z)); } void MWScene::removeObject (const std::string& handle) { - //TODO:check if actor??? + //TODO:check if actor??? eng->removeCharacter(handle); - eng->removeRigidBody(handle); - eng->deleteRigidBody(handle); + eng->removeRigidBody(handle); + eng->deleteRigidBody(handle); } void MWScene::moveObject (const std::string& handle, const Ogre::Vector3& position, bool updatePhysics) diff --git a/apps/openmw/mwrender/mwscene.hpp b/apps/openmw/mwrender/mwscene.hpp index aa567f7de..fd14fcce0 100644 --- a/apps/openmw/mwrender/mwscene.hpp +++ b/apps/openmw/mwrender/mwscene.hpp @@ -40,7 +40,7 @@ namespace MWRender Ogre::SceneNode *mwRoot; Ogre::RaySceneQuery *mRaySceneQuery; - OEngine::Physic::PhysicEngine* eng; + OEngine::Physic::PhysicEngine* eng; MWRender::Player *mPlayer; diff --git a/apps/openmw/mwworld/world.cpp b/apps/openmw/mwworld/world.cpp index c08dc420b..63019349c 100644 --- a/apps/openmw/mwworld/world.cpp +++ b/apps/openmw/mwworld/world.cpp @@ -412,7 +412,7 @@ namespace MWWorld : mSkyManager (0), mScene (renderer,physEng), mPlayer (0), mCurrentCell (0), mGlobalVariables (0), mSky (false), mCellChanged (false), mEnvironment (environment) { - mPhysEngine = physEng; + mPhysEngine = physEng; boost::filesystem::path masterPath (dataDir); masterPath /= master; @@ -437,7 +437,7 @@ namespace MWWorld mSkyManager = MWRender::SkyManager::create(renderer.getWindow(), mScene.getCamera(), resDir); - mPhysEngine = physEng; + mPhysEngine = physEng; } World::~World() diff --git a/apps/openmw/mwworld/world.hpp b/apps/openmw/mwworld/world.hpp index d64fa57be..6965aebc6 100644 --- a/apps/openmw/mwworld/world.hpp +++ b/apps/openmw/mwworld/world.hpp @@ -75,7 +75,7 @@ namespace MWWorld bool mCellChanged; Environment& mEnvironment; - OEngine::Physic::PhysicEngine* mPhysEngine; + OEngine::Physic::PhysicEngine* mPhysEngine; // not implemented World (const World&); diff --git a/components/interpreter/installopcodes.cpp b/components/interpreter/installopcodes.cpp index 2e22d10e5..f383ff47c 100644 --- a/components/interpreter/installopcodes.cpp +++ b/components/interpreter/installopcodes.cpp @@ -24,23 +24,23 @@ namespace Interpreter interpreter.installSegment5 (8, new OpNegateFloat); interpreter.installSegment5 (17, new OpIntToFloat1); interpreter.installSegment5 (18, new OpFloatToInt1); - + // local variables, global variables & literals interpreter.installSegment5 (0, new OpStoreLocalShort); interpreter.installSegment5 (1, new OpStoreLocalLong); - interpreter.installSegment5 (2, new OpStoreLocalFloat); - interpreter.installSegment5 (4, new OpFetchIntLiteral); - interpreter.installSegment5 (5, new OpFetchFloatLiteral); + interpreter.installSegment5 (2, new OpStoreLocalFloat); + interpreter.installSegment5 (4, new OpFetchIntLiteral); + interpreter.installSegment5 (5, new OpFetchFloatLiteral); interpreter.installSegment5 (21, new OpFetchLocalShort); interpreter.installSegment5 (22, new OpFetchLocalLong); - interpreter.installSegment5 (23, new OpFetchLocalFloat); + interpreter.installSegment5 (23, new OpFetchLocalFloat); interpreter.installSegment5 (39, new OpStoreGlobalShort); interpreter.installSegment5 (40, new OpStoreGlobalLong); - interpreter.installSegment5 (41, new OpStoreGlobalFloat); + interpreter.installSegment5 (41, new OpStoreGlobalFloat); interpreter.installSegment5 (42, new OpFetchGlobalShort); interpreter.installSegment5 (43, new OpFetchGlobalLong); - interpreter.installSegment5 (44, new OpFetchGlobalFloat); - + interpreter.installSegment5 (44, new OpFetchGlobalFloat); + // math interpreter.installSegment5 (9, new OpAddInt); interpreter.installSegment5 (10, new OpAddInt); @@ -50,57 +50,57 @@ namespace Interpreter interpreter.installSegment5 (14, new OpMulInt); interpreter.installSegment5 (15, new OpDivInt); interpreter.installSegment5 (16, new OpDivInt); - interpreter.installSegment5 (19, new OpSquareRoot); - interpreter.installSegment5 (26, - new OpCompare >); - interpreter.installSegment5 (27, - new OpCompare >); - interpreter.installSegment5 (28, - new OpCompare >); - interpreter.installSegment5 (29, - new OpCompare >); - interpreter.installSegment5 (30, - new OpCompare >); - interpreter.installSegment5 (31, - new OpCompare >); - - interpreter.installSegment5 (32, - new OpCompare >); - interpreter.installSegment5 (33, - new OpCompare >); - interpreter.installSegment5 (34, - new OpCompare >); - interpreter.installSegment5 (35, - new OpCompare >); - interpreter.installSegment5 (36, - new OpCompare >); - interpreter.installSegment5 (37, - new OpCompare >); - + interpreter.installSegment5 (19, new OpSquareRoot); + interpreter.installSegment5 (26, + new OpCompare >); + interpreter.installSegment5 (27, + new OpCompare >); + interpreter.installSegment5 (28, + new OpCompare >); + interpreter.installSegment5 (29, + new OpCompare >); + interpreter.installSegment5 (30, + new OpCompare >); + interpreter.installSegment5 (31, + new OpCompare >); + + interpreter.installSegment5 (32, + new OpCompare >); + interpreter.installSegment5 (33, + new OpCompare >); + interpreter.installSegment5 (34, + new OpCompare >); + interpreter.installSegment5 (35, + new OpCompare >); + interpreter.installSegment5 (36, + new OpCompare >); + interpreter.installSegment5 (37, + new OpCompare >); + // control structures - interpreter.installSegment5 (20, new OpReturn); + interpreter.installSegment5 (20, new OpReturn); interpreter.installSegment5 (24, new OpSkipZero); interpreter.installSegment5 (25, new OpSkipNonZero); interpreter.installSegment0 (1, new OpJumpForward); interpreter.installSegment0 (2, new OpJumpBackward); - + // misc - interpreter.installSegment3 (0, new OpMessageBox); - interpreter.installSegment5 (38, new OpMenuMode); - interpreter.installSegment5 (45, new OpRandom); - interpreter.installSegment5 (50, new OpGetSecondsPassed); + interpreter.installSegment3 (0, new OpMessageBox); + interpreter.installSegment5 (38, new OpMenuMode); + interpreter.installSegment5 (45, new OpRandom); + interpreter.installSegment5 (50, new OpGetSecondsPassed); interpreter.installSegment5 (51, new OpEnable); interpreter.installSegment5 (52, new OpDisable); interpreter.installSegment5 (53, new OpGetDisabled); interpreter.installSegment5 (54, new OpEnableExplicit); interpreter.installSegment5 (55, new OpDisableExplicit); interpreter.installSegment5 (56, new OpGetDisabledExplicit); - + // script control interpreter.installSegment5 (46, new OpScriptRunning); interpreter.installSegment5 (47, new OpStartScript); interpreter.installSegment5 (48, new OpStopScript); - + // spacial interpreter.installSegment5 (49, new OpGetDistance); interpreter.installSegment5 (57, new OpGetDistanceExplicit); diff --git a/components/nif/nif_file.cpp b/components/nif/nif_file.cpp index 6a4eb337c..3c7d7fb17 100644 --- a/components/nif/nif_file.cpp +++ b/components/nif/nif_file.cpp @@ -92,8 +92,8 @@ void NIFFile::parse() else if(rec == "NiRotatingParticles") { r = new NiRotatingParticles; r->recType = RC_NiRotatingParticles; } else if(rec == "NiAutoNormalParticles") { r = new NiAutoNormalParticles; r->recType = RC_NiAutoNormalParticles; } else if(rec == "NiCamera") { r = new NiCamera; r->recType = RC_NiCamera; } - else if(rec == "RootCollisionNode"){ r = new NiNode; r->recType = RC_RootCollisionNode; }// a root collision node is exactly like a node - //that's why there is no need to create a new type + else if(rec == "RootCollisionNode"){ r = new NiNode; r->recType = RC_RootCollisionNode; }// a root collision node is exactly like a node + //that's why there is no need to create a new type // Properties else if(rec == "NiTexturingProperty") { r = new NiTexturingProperty; r->recType = RC_NiTexturingProperty; } diff --git a/components/nifbullet/bullet_nif_loader.cpp b/components/nifbullet/bullet_nif_loader.cpp index b3fd9019c..1ff78023d 100644 --- a/components/nifbullet/bullet_nif_loader.cpp +++ b/components/nifbullet/bullet_nif_loader.cpp @@ -54,264 +54,264 @@ using namespace Mangle::VFS; //==================================================================================================== Ogre::Matrix3 ManualBulletShapeLoader::getMatrix(Nif::Transformation* tr) { - Ogre::Matrix3 rot(tr->rotation.v[0].array[0],tr->rotation.v[0].array[1],tr->rotation.v[0].array[2], - tr->rotation.v[1].array[0],tr->rotation.v[1].array[1],tr->rotation.v[1].array[2], - tr->rotation.v[2].array[0],tr->rotation.v[2].array[1],tr->rotation.v[2].array[2]); - return rot; + Ogre::Matrix3 rot(tr->rotation.v[0].array[0],tr->rotation.v[0].array[1],tr->rotation.v[0].array[2], + tr->rotation.v[1].array[0],tr->rotation.v[1].array[1],tr->rotation.v[1].array[2], + tr->rotation.v[2].array[0],tr->rotation.v[2].array[1],tr->rotation.v[2].array[2]); + return rot; } Ogre::Vector3 ManualBulletShapeLoader::getVector(Nif::Transformation* tr) { - Ogre::Vector3 vect3(tr->pos.array[0],tr->pos.array[1],tr->pos.array[2]); - return vect3; + Ogre::Vector3 vect3(tr->pos.array[0],tr->pos.array[1],tr->pos.array[2]); + return vect3; } btQuaternion ManualBulletShapeLoader::getbtQuat(Ogre::Matrix3 m) { - Ogre::Quaternion oquat(m); - btQuaternion quat; - quat.setW(oquat.w); - quat.setX(oquat.x); - quat.setY(oquat.y); - quat.setZ(oquat.z); - return quat; + Ogre::Quaternion oquat(m); + btQuaternion quat; + quat.setW(oquat.w); + quat.setX(oquat.x); + quat.setY(oquat.y); + quat.setZ(oquat.z); + return quat; } btVector3 ManualBulletShapeLoader::getbtVector(Nif::Vector v) { - btVector3 a(v.array[0],v.array[1],v.array[2]); - return a; + btVector3 a(v.array[0],v.array[1],v.array[2]); + return a; } void ManualBulletShapeLoader::loadResource(Ogre::Resource *resource) { - cShape = static_cast(resource); - resourceName = cShape->getName(); + cShape = static_cast(resource); + resourceName = cShape->getName(); cShape->collide = false; - currentShape = new btCompoundShape(); - cShape->Shape = currentShape; + currentShape = new btCompoundShape(); + cShape->Shape = currentShape; - if (!vfs) vfs = new OgreVFS(resourceGroup); + if (!vfs) vfs = new OgreVFS(resourceGroup); - if (!vfs->isFile(resourceName)) - { - warn("File not found."); - return; - } + if (!vfs->isFile(resourceName)) + { + warn("File not found."); + return; + } - // Load the NIF. TODO: Wrap this in a try-catch block once we're out - // of the early stages of development. Right now we WANT to catch - // every error as early and intrusively as possible, as it's most - // likely a sign of incomplete code rather than faulty input. - Nif::NIFFile nif(vfs->open(resourceName), resourceName); + // Load the NIF. TODO: Wrap this in a try-catch block once we're out + // of the early stages of development. Right now we WANT to catch + // every error as early and intrusively as possible, as it's most + // likely a sign of incomplete code rather than faulty input. + Nif::NIFFile nif(vfs->open(resourceName), resourceName); - if (nif.numRecords() < 1) - { - warn("Found no records in NIF."); - return; - } + if (nif.numRecords() < 1) + { + warn("Found no records in NIF."); + return; + } - // The first record is assumed to be the root node - Nif::Record *r = nif.getRecord(0); - assert(r != NULL); + // The first record is assumed to be the root node + Nif::Record *r = nif.getRecord(0); + assert(r != NULL); - Nif::Node *node = dynamic_cast(r); + Nif::Node *node = dynamic_cast(r); - if (node == NULL) - { - warn("First record in file was not a node, but a " + - r->recName.toString() + ". Skipping file."); - return; - } + if (node == NULL) + { + warn("First record in file was not a node, but a " + + r->recName.toString() + ". Skipping file."); + return; + } bool hasCollisionNode = hasRootCollisionNode(node); //do a first pass - handleNode(node,0,Ogre::Matrix3::IDENTITY,Ogre::Vector3::ZERO,1,hasCollisionNode,false,false); + handleNode(node,0,Ogre::Matrix3::IDENTITY,Ogre::Vector3::ZERO,1,hasCollisionNode,false,false); //if collide = false, then it does a second pass which create a shape for raycasting. if(cShape->collide == false) { - handleNode(node,0,Ogre::Matrix3::IDENTITY,Ogre::Vector3::ZERO,1,hasCollisionNode,false,true); + handleNode(node,0,Ogre::Matrix3::IDENTITY,Ogre::Vector3::ZERO,1,hasCollisionNode,false,true); } } bool ManualBulletShapeLoader::hasRootCollisionNode(Nif::Node* node) { - if (node->recType == Nif::RC_NiNode) - { - Nif::NodeList &list = ((Nif::NiNode*)node)->children; - int n = list.length(); - for (int i=0; irecType == Nif::RC_NiNode) + { + Nif::NodeList &list = ((Nif::NiNode*)node)->children; + int n = list.length(); + for (int i=0; irecType == Nif::RC_NiTriShape) + else if (node->recType == Nif::RC_NiTriShape) { return false; } - else if(node->recType == Nif::RC_RootCollisionNode) - { + else if(node->recType == Nif::RC_RootCollisionNode) + { return true; - } - + } + return false; } void ManualBulletShapeLoader::handleNode(Nif::Node *node, int flags, - Ogre::Matrix3 parentRot,Ogre::Vector3 parentPos,float parentScale,bool hasCollisionNode,bool isCollisionNode,bool raycastingOnly) + Ogre::Matrix3 parentRot,Ogre::Vector3 parentPos,float parentScale,bool hasCollisionNode,bool isCollisionNode,bool raycastingOnly) { - // Accumulate the flags from all the child nodes. This works for all - // the flags we currently use, at least. - flags |= node->flags; - - // Check for extra data - Nif::Extra *e = node; - while (!e->extra.empty()) - { - // Get the next extra data in the list - e = e->extra.getPtr(); - assert(e != NULL); - - if (e->recType == Nif::RC_NiStringExtraData) - { - // String markers may contain important information - // affecting the entire subtree of this node - Nif::NiStringExtraData *sd = (Nif::NiStringExtraData*)e; - - if (sd->string == "NCO" && !raycastingOnly) - { - // No collision. Use an internal flag setting to mark this. - // We ignor this node! - flags |= 0x800; - return; - } - else if (sd->string == "MRK" && !raycastingOnly) - // Marker objects. These are only visible in the - // editor. Until and unless we add an editor component to - // the engine, just skip this entire node. - return; - } - } - - //transfo of parents node + curent node - Ogre::Matrix3 finalRot; - Ogre::Vector3 finalPos; - float finalScale; - - Nif::Transformation &final = *((Nif::Transformation*)node->trafo); - Ogre::Vector3 nodePos = getVector(&final); - Ogre::Matrix3 nodeRot = getMatrix(&final); - - finalPos = nodePos + parentPos; - finalRot = parentRot*nodeRot; - finalScale = final.scale*parentScale; - - - // For NiNodes, loop through children - if (node->recType == Nif::RC_NiNode) - { - Nif::NodeList &list = ((Nif::NiNode*)node)->children; - int n = list.length(); - for (int i=0; iflags; + + // Check for extra data + Nif::Extra *e = node; + while (!e->extra.empty()) + { + // Get the next extra data in the list + e = e->extra.getPtr(); + assert(e != NULL); + + if (e->recType == Nif::RC_NiStringExtraData) + { + // String markers may contain important information + // affecting the entire subtree of this node + Nif::NiStringExtraData *sd = (Nif::NiStringExtraData*)e; + + if (sd->string == "NCO" && !raycastingOnly) + { + // No collision. Use an internal flag setting to mark this. + // We ignor this node! + flags |= 0x800; + return; + } + else if (sd->string == "MRK" && !raycastingOnly) + // Marker objects. These are only visible in the + // editor. Until and unless we add an editor component to + // the engine, just skip this entire node. + return; + } + } + + //transfo of parents node + curent node + Ogre::Matrix3 finalRot; + Ogre::Vector3 finalPos; + float finalScale; + + Nif::Transformation &final = *((Nif::Transformation*)node->trafo); + Ogre::Vector3 nodePos = getVector(&final); + Ogre::Matrix3 nodeRot = getMatrix(&final); + + finalPos = nodePos + parentPos; + finalRot = parentRot*nodeRot; + finalScale = final.scale*parentScale; + + + // For NiNodes, loop through children + if (node->recType == Nif::RC_NiNode) + { + Nif::NodeList &list = ((Nif::NiNode*)node)->children; + int n = list.length(); + for (int i=0; irecType == Nif::RC_NiTriShape && (isCollisionNode || !hasCollisionNode)) { cShape->collide = true; handleNiTriShape(dynamic_cast(node), flags,finalRot,finalPos,finalScale,raycastingOnly); } - else if(node->recType == Nif::RC_RootCollisionNode) - { - Nif::NodeList &list = ((Nif::NiNode*)node)->children; - int n = list.length(); - for (int i=0; irecType == Nif::RC_RootCollisionNode) + { + Nif::NodeList &list = ((Nif::NiNode*)node)->children; + int n = list.length(); + for (int i=0; i