From 0042020385b7303d20490e810e49e9b6f8e97b0c Mon Sep 17 00:00:00 2001
From: greye <greye@null.net>
Date: Fri, 10 Aug 2012 21:24:07 +0400
Subject: [PATCH] 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