1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-04-01 02:06:42 +00:00

Don't allow forcing vanity mode

This commit is contained in:
Chris Robinson 2013-04-27 01:24:36 -07:00
parent 2822f431c4
commit 137017b325
7 changed files with 40 additions and 71 deletions

View file

@ -317,7 +317,7 @@ namespace MWBase
virtual void togglePOV() = 0; virtual void togglePOV() = 0;
virtual void togglePreviewMode(bool enable) = 0; virtual void togglePreviewMode(bool enable) = 0;
virtual bool toggleVanityMode(bool enable, bool force) = 0; virtual bool toggleVanityMode(bool enable) = 0;
virtual void allowVanityMode(bool allow) = 0; virtual void allowVanityMode(bool allow) = 0;
virtual void togglePlayerLooking(bool enable) = 0; virtual void togglePlayerLooking(bool enable) = 0;
virtual void changeVanityModeScale(float factor) = 0; virtual void changeVanityModeScale(float factor) = 0;

View file

@ -719,19 +719,17 @@ namespace MWInput
void InputManager::resetIdleTime() void InputManager::resetIdleTime()
{ {
if (mTimeIdle < 0) { if (mTimeIdle < 0)
MWBase::Environment::get().getWorld()->toggleVanityMode(false, false); MWBase::Environment::get().getWorld()->toggleVanityMode(false);
}
mTimeIdle = 0.f; mTimeIdle = 0.f;
} }
void InputManager::updateIdleTime(float dt) void InputManager::updateIdleTime(float dt)
{ {
if (mTimeIdle >= 0.f) { if (mTimeIdle >= 0.f)
mTimeIdle += dt; mTimeIdle += dt;
}
if (mTimeIdle > 30.f) { if (mTimeIdle > 30.f) {
MWBase::Environment::get().getWorld()->toggleVanityMode(true, false); MWBase::Environment::get().getWorld()->toggleVanityMode(true);
mTimeIdle = -1.f; mTimeIdle = -1.f;
} }
} }

View file

@ -28,7 +28,6 @@ namespace MWRender
{ {
mVanity.enabled = false; mVanity.enabled = false;
mVanity.allowed = true; mVanity.allowed = true;
mVanity.forced = false;
mCameraNode->attachObject(mCamera); mCameraNode->attachObject(mCamera);
mCameraNode->setPosition(0.f, 0.f, mHeight); mCameraNode->setPosition(0.f, 0.f, mHeight);
@ -44,32 +43,13 @@ namespace MWRender
bool Player::rotate(const Ogre::Vector3 &rot, bool adjust) bool Player::rotate(const Ogre::Vector3 &rot, bool adjust)
{ {
if (mVanity.enabled) { if (mVanity.enabled)
toggleVanityMode(false); toggleVanityMode(false);
}
Ogre::Vector3 trueRot = rot; if (mFreeLook || mVanity.enabled || mPreviewMode)
rotateCamera(rot, adjust);
/// \note rotate player on forced vanity return (!mVanity.enabled && !mPreviewMode);
if (mVanity.forced) {
if (mFreeLook) {
float diff = (adjust) ? rot.z : mMainCam.yaw - rot.z;
mVanity.enabled = false;
rotateCamera(rot, adjust);
mVanity.enabled = true;
compensateYaw(diff);
}
trueRot.z = 0.f;
}
if (mFreeLook || mVanity.enabled || mPreviewMode) {
rotateCamera(trueRot, adjust);
}
/// \note if vanity mode is forced by TVM then rotate player
return (!mVanity.enabled && !mPreviewMode) || mVanity.forced;
} }
void Player::rotateCamera(const Ogre::Vector3 &rot, bool adjust) void Player::rotateCamera(const Ogre::Vector3 &rot, bool adjust)
@ -81,14 +61,9 @@ namespace MWRender
setYaw(rot.z); setYaw(rot.z);
setPitch(rot.x); setPitch(rot.x);
} }
Ogre::Quaternion xr(
Ogre::Radian(getPitch() + Ogre::Math::HALF_PI), Ogre::Quaternion xr(Ogre::Radian(getPitch() + Ogre::Math::HALF_PI), Ogre::Vector3::UNIT_X);
Ogre::Vector3::UNIT_X Ogre::Quaternion zr(Ogre::Radian(getYaw()), Ogre::Vector3::NEGATIVE_UNIT_Z);
);
Ogre::Quaternion zr(
Ogre::Radian(getYaw()),
Ogre::Vector3::NEGATIVE_UNIT_Z
);
if (!mVanity.enabled && !mPreviewMode) { if (!mVanity.enabled && !mPreviewMode) {
mPlayerNode->setOrientation(zr); mPlayerNode->setOrientation(zr);
mCameraNode->setOrientation(xr); mCameraNode->setOrientation(xr);
@ -150,23 +125,19 @@ namespace MWRender
void Player::allowVanityMode(bool allow) void Player::allowVanityMode(bool allow)
{ {
if (!allow && mVanity.enabled && !mVanity.forced) { if (!allow && mVanity.enabled)
toggleVanityMode(false); toggleVanityMode(false);
}
mVanity.allowed = allow; mVanity.allowed = allow;
} }
bool Player::toggleVanityMode(bool enable, bool force) bool Player::toggleVanityMode(bool enable)
{ {
if ((mVanity.forced && !force) || if(!mVanity.allowed && enable)
(!mVanity.allowed && (force || enable)))
{
return false; return false;
} else if (mVanity.enabled == enable) {
if(mVanity.enabled == enable)
return true; return true;
}
mVanity.enabled = enable; mVanity.enabled = enable;
mVanity.forced = force && enable;
mAnimation->setViewMode((mVanity.enabled || mPreviewMode || !mFirstPersonView) ? mAnimation->setViewMode((mVanity.enabled || mPreviewMode || !mFirstPersonView) ?
NpcAnimation::VM_Normal : NpcAnimation::VM_FirstPerson); NpcAnimation::VM_Normal : NpcAnimation::VM_FirstPerson);
@ -185,6 +156,7 @@ namespace MWRender
setLowHeight(!mFirstPersonView); setLowHeight(!mFirstPersonView);
} }
rot.z = getYaw(); rot.z = getYaw();
mCamera->setPosition(0.f, 0.f, offset); mCamera->setPosition(0.f, 0.f, offset);
rotateCamera(rot, false); rotateCamera(rot, false);
@ -193,12 +165,13 @@ namespace MWRender
void Player::togglePreviewMode(bool enable) void Player::togglePreviewMode(bool enable)
{ {
if (mPreviewMode == enable) { if(mPreviewMode == enable)
return; return;
}
mPreviewMode = enable; mPreviewMode = enable;
mAnimation->setViewMode((mVanity.enabled || mPreviewMode || !mFirstPersonView) ? mAnimation->setViewMode((mVanity.enabled || mPreviewMode || !mFirstPersonView) ?
NpcAnimation::VM_Normal : NpcAnimation::VM_FirstPerson); NpcAnimation::VM_Normal : NpcAnimation::VM_FirstPerson);
float offset = mCamera->getPosition().z; float offset = mCamera->getPosition().z;
if (mPreviewMode) { if (mPreviewMode) {
mMainCam.offset = offset; mMainCam.offset = offset;
@ -211,15 +184,15 @@ namespace MWRender
setLowHeight(!mFirstPersonView); 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);
} }
float Player::getYaw() float Player::getYaw()
{ {
if (mVanity.enabled || mPreviewMode) { if(mVanity.enabled || mPreviewMode)
return mPreviewCam.yaw; return mPreviewCam.yaw;
}
return mMainCam.yaw; return mMainCam.yaw;
} }
@ -247,16 +220,16 @@ namespace MWRender
void Player::setPitch(float angle) void Player::setPitch(float angle)
{ {
const float epsilon = 0.000001; const float epsilon = 0.000001f;
float limit = Ogre::Math::HALF_PI - epsilon; float limit = Ogre::Math::HALF_PI - epsilon;
if (mVanity.forced || mPreviewMode) { if(mPreviewMode)
limit /= 2; limit /= 2;
}
if (angle > limit) { if(angle > limit)
angle = limit; angle = limit;
} else if (angle < -limit) { else if(angle < -limit)
angle = -limit; angle = -limit;
}
if (mVanity.enabled || mPreviewMode) { if (mVanity.enabled || mPreviewMode) {
mPreviewCam.pitch = angle; mPreviewCam.pitch = angle;
} else { } else {
@ -266,9 +239,9 @@ namespace MWRender
void Player::setCameraDistance(float dist, bool adjust, bool override) void Player::setCameraDistance(float dist, bool adjust, bool override)
{ {
if (mFirstPersonView && !mPreviewMode && !mVanity.enabled) { if(mFirstPersonView && !mPreviewMode && !mVanity.enabled)
return; return;
}
Ogre::Vector3 v(0.f, 0.f, dist); Ogre::Vector3 v(0.f, 0.f, dist);
if (adjust) { if (adjust) {
v += mCamera->getPosition(); v += mCamera->getPosition();

View file

@ -37,7 +37,7 @@ namespace MWRender
bool mFreeLook; bool mFreeLook;
struct { struct {
bool enabled, allowed, forced; bool enabled, allowed;
} mVanity; } mVanity;
float mHeight, mCameraDistance; float mHeight, mCameraDistance;
@ -79,7 +79,7 @@ namespace MWRender
void toggleViewMode(); void toggleViewMode();
bool toggleVanityMode(bool enable, bool force = false); bool toggleVanityMode(bool enable);
void allowVanityMode(bool allow); void allowVanityMode(bool allow);
void togglePreviewMode(bool enable); void togglePreviewMode(bool enable);

View file

@ -71,8 +71,8 @@ class RenderingManager: private RenderingInterface, public Ogre::WindowEventList
mPlayer->togglePreviewMode(enable); mPlayer->togglePreviewMode(enable);
} }
bool toggleVanityMode(bool enable, bool force) { bool toggleVanityMode(bool enable) {
return mPlayer->toggleVanityMode(enable, force); return mPlayer->toggleVanityMode(enable);
} }
void allowVanityMode(bool allow) { void allowVanityMode(bool allow) {

View file

@ -282,10 +282,8 @@ namespace MWScript
MWBase::World *world = MWBase::World *world =
MWBase::Environment::get().getWorld(); MWBase::Environment::get().getWorld();
if (world->toggleVanityMode(sActivate, true)) { if (world->toggleVanityMode(sActivate)) {
context.report( context.report(sActivate ? "Vanity Mode -> On" : "Vanity Mode -> Off");
(sActivate) ? "Vanity Mode -> On" : "Vanity Mode -> Off"
);
sActivate = !sActivate; sActivate = !sActivate;
} else { } else {
context.report("Vanity Mode -> No"); context.report("Vanity Mode -> No");

View file

@ -347,8 +347,8 @@ namespace MWWorld
mRendering->togglePreviewMode(enable); mRendering->togglePreviewMode(enable);
} }
virtual bool toggleVanityMode(bool enable, bool force) { virtual bool toggleVanityMode(bool enable) {
return mRendering->toggleVanityMode(enable, force); return mRendering->toggleVanityMode(enable);
} }
virtual void allowVanityMode(bool allow) { virtual void allowVanityMode(bool allow) {