diff --git a/apps/openmw/mwinput/actionmanager.cpp b/apps/openmw/mwinput/actionmanager.cpp index ddde7a11e7..ec6c5cf7f1 100644 --- a/apps/openmw/mwinput/actionmanager.cpp +++ b/apps/openmw/mwinput/actionmanager.cpp @@ -110,19 +110,21 @@ namespace MWInput if (MWBase::Environment::get().getInputManager()->getControlSwitch("playerviewswitch")) { + const float switchLimit = 0.25; + MWBase::World* world = MWBase::Environment::get().getWorld(); if (mBindingsManager->actionIsActive(A_TogglePOV)) { - if (mPreviewPOVDelay == 0) - MWBase::Environment::get().getWorld()->togglePreviewMode(true); + if (world->isFirstPerson() ? mPreviewPOVDelay > switchLimit : mPreviewPOVDelay == 0) + world->togglePreviewMode(true); mPreviewPOVDelay += dt; } else { //disable preview mode if (mPreviewPOVDelay > 0) - MWBase::Environment::get().getWorld()->togglePreviewMode(false); - if (mPreviewPOVDelay > 0.f && mPreviewPOVDelay <= 0.25) - MWBase::Environment::get().getWorld()->togglePOV(); + world->togglePreviewMode(false); + if (mPreviewPOVDelay > 0.f && mPreviewPOVDelay <= switchLimit) + world->togglePOV(); mPreviewPOVDelay = 0.f; } } diff --git a/apps/openmw/mwrender/camera.cpp b/apps/openmw/mwrender/camera.cpp index 54bc581ef5..328e53a79a 100644 --- a/apps/openmw/mwrender/camera.cpp +++ b/apps/openmw/mwrender/camera.cpp @@ -287,6 +287,7 @@ namespace MWRender mFirstPersonView = !mFirstPersonView; updateStandingPreviewMode(); + instantTransition(); processViewChange(); } @@ -337,6 +338,8 @@ namespace MWRender mMode = enable ? Mode::Preview : Mode::Normal; if (mMode == Mode::Normal) updateStandingPreviewMode(); + else if (mFirstPersonView) + instantTransition(); if (mMode == Mode::Normal) { if (!mDeferredRotationAllowed)