From 56c9c4dbd95270b8b0b98691bd188d961c490815 Mon Sep 17 00:00:00 2001 From: greye Date: Fri, 10 Aug 2012 21:03:46 +0400 Subject: [PATCH 1/3] remove some redundant code --- apps/openmw/mwworld/scene.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwworld/scene.cpp b/apps/openmw/mwworld/scene.cpp index ec557e35c7..40d0a634a4 100644 --- a/apps/openmw/mwworld/scene.cpp +++ b/apps/openmw/mwworld/scene.cpp @@ -140,19 +140,18 @@ namespace MWWorld const ESM::Position& pos, bool adjustPlayerPos) { - MWBase::Environment::get().getWorld()->getPlayer().setCell (cell); - bool hasWater = cell->cell->data.flags & cell->cell->HasWater; mPhysics->setCurrentWater(hasWater, cell->cell->water); MWBase::World *world = MWBase::Environment::get().getWorld(); MWWorld::Ptr player = world->getPlayer().getPlayer(); + world->getPlayer().setCell(cell); + if (adjustPlayerPos) { world->moveObject(player, pos.pos[0], pos.pos[1], pos.pos[2]); world->rotateObject(player, pos.rot[0], pos.rot[1], pos.rot[2]); } - world->getPlayer().setCell(cell); MWMechanics::MechanicsManager *mechMgr = MWBase::Environment::get().getMechanicsManager(); From bed6545e45e9d456eeda474d2a0ac8327e6c0c13 Mon Sep 17 00:00:00 2001 From: greye Date: Fri, 10 Aug 2012 21:06:09 +0400 Subject: [PATCH 2/3] still fix assertion fail --- apps/openmw/mwworld/scene.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwworld/scene.cpp b/apps/openmw/mwworld/scene.cpp index 40d0a634a4..531546a576 100644 --- a/apps/openmw/mwworld/scene.cpp +++ b/apps/openmw/mwworld/scene.cpp @@ -144,10 +144,10 @@ namespace MWWorld mPhysics->setCurrentWater(hasWater, cell->cell->water); MWBase::World *world = MWBase::Environment::get().getWorld(); - MWWorld::Ptr player = world->getPlayer().getPlayer(); - world->getPlayer().setCell(cell); + MWWorld::Ptr player = world->getPlayer().getPlayer(); + if (adjustPlayerPos) { world->moveObject(player, pos.pos[0], pos.pos[1], pos.pos[2]); world->rotateObject(player, pos.rot[0], pos.rot[1], pos.rot[2]); From 0042020385b7303d20490e810e49e9b6f8e97b0c Mon Sep 17 00:00:00 2001 From: greye Date: Fri, 10 Aug 2012 21:24:07 +0400 Subject: [PATCH 3/3] should fix 'north direction' bug not even compiled --- apps/openmw/mwrender/renderingmanager.cpp | 31 ++++++++++++----------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 8719557ca3..4534fee2c7 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -254,27 +254,28 @@ RenderingManager::rotateObject( Ogre::Vector3 &rot, bool adjust) { - if (ptr.getRefData().getHandle() == "player") { - if (adjust) { - return mPlayer->adjustRotation(rot); - } else { - return mPlayer->setRotation(rot); - } + bool isPlayer = ptr.getRefData().getHandle() == "player"; + bool force = true; + + if (isPlayer) { + force = (adjust) ? mPlayer->adjustRotation(rot) : mPlayer->setRotation(rot); } MWWorld::Class::get(ptr).adjustRotation(ptr, rot.x, rot.y, rot.z); - if (adjust) { float *f = ptr.getRefData().getPosition().rot; - rot.x += f[0], rot.y += f[1], rot.z += f[2]; + rot.x += Ogre::Radian(f[0]).valueDegrees(); + rot.y += Ogre::Radian(f[1]).valueDegrees(); + rot.z += Ogre::Radian(f[2]).valueDegrees(); + } + if (!isPlayer) { + Ogre::Quaternion xr(Ogre::Degree(rot.x), Ogre::Vector3::UNIT_X); + Ogre::Quaternion yr(Ogre::Degree(rot.y), Ogre::Vector3::UNIT_Y); + Ogre::Quaternion zr(Ogre::Degree(rot.z), Ogre::Vector3::UNIT_Z); + + ptr.getRefData().getBaseNode()->setOrientation(xr * yr * zr); } - Ogre::Quaternion xr(Ogre::Degree(rot.x), Ogre::Vector3::UNIT_X); - Ogre::Quaternion yr(Ogre::Degree(rot.y), Ogre::Vector3::UNIT_Y); - Ogre::Quaternion zr(Ogre::Degree(rot.z), Ogre::Vector3::UNIT_Z); - - ptr.getRefData().getBaseNode()->setOrientation(xr * yr * zr); - - return true; + return force; } void