diff --git a/apps/openmw/mwbase/world.hpp b/apps/openmw/mwbase/world.hpp index 6ef1a6c2b..a67ac666d 100644 --- a/apps/openmw/mwbase/world.hpp +++ b/apps/openmw/mwbase/world.hpp @@ -327,6 +327,7 @@ namespace MWBase virtual void togglePlayerLooking(bool enable) = 0; virtual void changeVanityModeScale(float factor) = 0; virtual bool vanityRotateCamera(float * rot) = 0; + virtual void setCameraDistance(float dist, bool adjust = false, bool override = true)=0; virtual void setupPlayer() = 0; virtual void renderPlayer() = 0; diff --git a/apps/openmw/mwinput/inputmanagerimp.cpp b/apps/openmw/mwinput/inputmanagerimp.cpp index d2aa6e51e..95d98e35f 100644 --- a/apps/openmw/mwinput/inputmanagerimp.cpp +++ b/apps/openmw/mwinput/inputmanagerimp.cpp @@ -588,7 +588,10 @@ namespace MWInput } if (arg.zrel) + { MWBase::Environment::get().getWorld()->changeVanityModeScale(arg.zrel); + MWBase::Environment::get().getWorld()->setCameraDistance(arg.zrel, true, true); + } } return true; diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index c4b086b89..61463b449 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -319,7 +319,8 @@ void RenderingManager::update (float duration, bool paused) Ogre::Vector3 playerPos(_playerPos[0], _playerPos[1], _playerPos[2]); Ogre::Vector3 orig, dest; - mCamera->setCameraDistance(); + //Why is this line here? + // mCamera->setCameraDistance(); if(!mCamera->getPosition(orig, dest)) { orig.z += mCamera->getHeight() * mRootNode->getScale().z; diff --git a/apps/openmw/mwrender/renderingmanager.hpp b/apps/openmw/mwrender/renderingmanager.hpp index 2111b89f1..4c65ac6ce 100644 --- a/apps/openmw/mwrender/renderingmanager.hpp +++ b/apps/openmw/mwrender/renderingmanager.hpp @@ -86,6 +86,13 @@ public: void resetCamera(); bool vanityRotateCamera(const float *rot); + void setCameraDistance(float dist, bool adjust = false, bool override = true) + { + if(!mCamera->isVanityOrPreviewModeEnabled() && !mCamera->isFirstPerson()) + { + mCamera->setCameraDistance(-dist/120.f*10, adjust, override); + } + } void setupPlayer(const MWWorld::Ptr &ptr); void renderPlayer(const MWWorld::Ptr &ptr); diff --git a/apps/openmw/mwworld/worldimp.cpp b/apps/openmw/mwworld/worldimp.cpp index a479c9a14..d839a051a 100644 --- a/apps/openmw/mwworld/worldimp.cpp +++ b/apps/openmw/mwworld/worldimp.cpp @@ -1576,6 +1576,11 @@ namespace MWWorld return mRendering->vanityRotateCamera(rot); } + void World::setCameraDistance(float dist, bool adjust, bool override) + { + return mRendering->setCameraDistance(dist, adjust, override);; + } + void World::setupPlayer() { const ESM::NPC *player = mStore.get().find("player"); diff --git a/apps/openmw/mwworld/worldimp.hpp b/apps/openmw/mwworld/worldimp.hpp index 9e9d76bd5..1b436373b 100644 --- a/apps/openmw/mwworld/worldimp.hpp +++ b/apps/openmw/mwworld/worldimp.hpp @@ -376,6 +376,7 @@ namespace MWWorld } virtual bool vanityRotateCamera(float * rot); + virtual void setCameraDistance(float dist, bool adjust = false, bool override = true); virtual void setupPlayer(); virtual void renderPlayer();