use the same height on non-1st person modes

This commit is contained in:
greye 2012-08-17 22:08:16 +04:00
parent 7303d595dd
commit b6954a4e8d
2 changed files with 19 additions and 18 deletions

View File

@ -2,7 +2,6 @@
#include <OgreSceneNode.h> #include <OgreSceneNode.h>
#include <OgreCamera.h> #include <OgreCamera.h>
#include <OgreRay.h>
#include "../mwbase/environment.hpp" #include "../mwbase/environment.hpp"
#include "../mwbase/soundmanager.hpp" #include "../mwbase/soundmanager.hpp"
@ -38,9 +37,6 @@ namespace MWRender
bool Player::rotate(const Ogre::Vector3 &rot, bool adjust) bool Player::rotate(const Ogre::Vector3 &rot, bool adjust)
{ {
mUpdates = 0;
mTimeIdle = 0.f;
if (mVanity.enabled) { if (mVanity.enabled) {
toggleVanityMode(false); toggleVanityMode(false);
} }
@ -120,13 +116,6 @@ namespace MWRender
void Player::update(float duration) void Player::update(float duration)
{ {
Ogre::Vector3 pos = mPlayerNode->getPosition(); Ogre::Vector3 pos = mPlayerNode->getPosition();
if (!mVanity.enabled) {
++mUpdates;
mTimeIdle += duration;
if (mTimeIdle > 30.f) {
toggleVanityMode(true);
}
}
if (mAnimation) { if (mAnimation) {
mAnimation->runAnimation(duration); mAnimation->runAnimation(duration);
} }
@ -145,10 +134,10 @@ namespace MWRender
mFirstPersonView = !mFirstPersonView; mFirstPersonView = !mFirstPersonView;
if (mFirstPersonView) { if (mFirstPersonView) {
mCamera->setPosition(0.f, 0.f, 0.f); mCamera->setPosition(0.f, 0.f, 0.f);
mCameraNode->setPosition(0.f, 0.f, 128.f); setLowHeight(false);
} else { } else {
mCamera->setPosition(0.f, 0.f, mCameraDistance); mCamera->setPosition(0.f, 0.f, mCameraDistance);
mCameraNode->setPosition(0.f, 0.f, 104.f); setLowHeight(true);
} }
mPlayerNode->setVisible(!mFirstPersonView, false); mPlayerNode->setVisible(!mFirstPersonView, false);
} }
@ -176,15 +165,17 @@ namespace MWRender
float offset = mPreviewCam.offset; float offset = mPreviewCam.offset;
Ogre::Vector3 rot(0.f, 0.f, 0.f); Ogre::Vector3 rot(0.f, 0.f, 0.f);
if (mVanity.enabled) { if (mVanity.enabled) {
mPlayerNode->setVisible(true, false);
rot.x = Ogre::Degree(-30.f).valueRadians(); rot.x = Ogre::Degree(-30.f).valueRadians();
mMainCam.offset = mCamera->getPosition().z; mMainCam.offset = mCamera->getPosition().z;
mPlayerNode->setVisible(true, false);
setLowHeight(true);
} else { } else {
rot.x = getPitch(); rot.x = getPitch();
offset = mMainCam.offset; offset = mMainCam.offset;
mPlayerNode->setVisible(!mFirstPersonView, false); mPlayerNode->setVisible(!mFirstPersonView, false);
setLowHeight(!mFirstPersonView);
} }
rot.z = getYaw(); rot.z = getYaw();
mCamera->setPosition(0.f, 0.f, offset); mCamera->setPosition(0.f, 0.f, offset);
@ -201,15 +192,17 @@ namespace MWRender
mPreviewMode = enable; mPreviewMode = enable;
float offset = mCamera->getPosition().z; float offset = mCamera->getPosition().z;
if (mPreviewMode) { if (mPreviewMode) {
mPlayerNode->setVisible(true, false);
mMainCam.offset = offset; mMainCam.offset = offset;
offset = mPreviewCam.offset; offset = mPreviewCam.offset;
mPlayerNode->setVisible(true, false);
setLowHeight(true);
} else { } else {
mPreviewCam.offset = offset; mPreviewCam.offset = offset;
offset = mMainCam.offset; offset = mMainCam.offset;
mPlayerNode->setVisible(!mFirstPersonView, false); mPlayerNode->setVisible(!mFirstPersonView, false);
setLowHeight(!mFirstPersonView);
} }
mCamera->setPosition(0.f, 0.f, offset); mCamera->setPosition(0.f, 0.f, offset);
rotateCamera(Ogre::Vector3(getPitch(), 0.f, getYaw()), false); rotateCamera(Ogre::Vector3(getPitch(), 0.f, getYaw()), false);
@ -357,4 +350,13 @@ namespace MWRender
{ {
mFreeLook = enable; mFreeLook = enable;
} }
void Player::setLowHeight(bool low)
{
if (low) {
mCameraNode->setPosition(0.f, 0.f, mHeight * 0.85);
} else {
mCameraNode->setPosition(0.f, 0.f, mHeight);
}
}
} }

View File

@ -45,9 +45,6 @@ namespace MWRender
bool mDistanceAdjusted; bool mDistanceAdjusted;
float mTimeIdle;
int mUpdates;
/// Updates sound manager listener data /// Updates sound manager listener data
void updateListener(); void updateListener();
@ -61,6 +58,8 @@ namespace MWRender
void compensateYaw(float diff); void compensateYaw(float diff);
void setLowHeight(bool low = true);
public: public:
Player (Ogre::Camera *camera, Ogre::SceneNode* mNode); Player (Ogre::Camera *camera, Ogre::SceneNode* mNode);