mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-26 09:35:28 +00:00
1. Skip smooth camera transition after changing cell; 2. Fix 'zoom out when move' for extremely high speed;
This commit is contained in:
parent
a890c951bc
commit
68148f5ec7
@ -65,6 +65,7 @@ namespace MWRender
|
||||
mFocalPointCurrentOffset(osg::Vec2d()),
|
||||
mFocalPointTargetOffset(osg::Vec2d()),
|
||||
mFocalPointTransitionSpeedCoef(1.f),
|
||||
mSkipFocalPointTransition(true),
|
||||
mPreviousTransitionInfluence(0.f),
|
||||
mSmoothedSpeed(0.f),
|
||||
mZoomOutWhenMoveCoef(Settings::Manager::getFloat("zoom out when move coef", "Camera")),
|
||||
@ -219,6 +220,7 @@ namespace MWRender
|
||||
updateFocalPointOffset(duration);
|
||||
|
||||
float speed = mTrackingPtr.getClass().getSpeed(mTrackingPtr);
|
||||
speed /= (1.f + speed / 500.f);
|
||||
float maxDelta = 300.f * duration;
|
||||
mSmoothedSpeed += osg::clampBetween(speed - mSmoothedSpeed, -maxDelta, maxDelta);
|
||||
}
|
||||
@ -235,6 +237,14 @@ namespace MWRender
|
||||
if (duration <= 0)
|
||||
return;
|
||||
|
||||
if (mSkipFocalPointTransition)
|
||||
{
|
||||
mSkipFocalPointTransition = false;
|
||||
mPreviousExtraOffset = osg::Vec2d();
|
||||
mPreviousTransitionInfluence = 0.f;
|
||||
mFocalPointCurrentOffset = mFocalPointTargetOffset;
|
||||
}
|
||||
|
||||
osg::Vec2d oldOffset = mFocalPointCurrentOffset;
|
||||
|
||||
if (mPreviousTransitionInfluence > 0)
|
||||
|
@ -59,6 +59,7 @@ namespace MWRender
|
||||
osg::Vec2d mFocalPointCurrentOffset;
|
||||
osg::Vec2d mFocalPointTargetOffset;
|
||||
float mFocalPointTransitionSpeedCoef;
|
||||
bool mSkipFocalPointTransition;
|
||||
|
||||
// This fields are used to make focal point transition smooth if previous transition was not finished.
|
||||
float mPreviousTransitionInfluence;
|
||||
@ -84,6 +85,7 @@ namespace MWRender
|
||||
|
||||
void setFocalPointTransitionSpeed(float v) { mFocalPointTransitionSpeedCoef = v; }
|
||||
void setFocalPointTargetOffset(osg::Vec2d v);
|
||||
void skipFocalPointTransition() { mSkipFocalPointTransition = true; }
|
||||
void enableDynamicCameraDistance(bool v) { mDynamicCameraDistanceEnabled = v; }
|
||||
void enableCrosshairInThirdPersonMode(bool v) { mShowCrosshairInThirdPersonMode = v; }
|
||||
|
||||
|
@ -945,6 +945,7 @@ namespace MWWorld
|
||||
removeContainerScripts(getPlayerPtr());
|
||||
mWorldScene->changeToInteriorCell(cellName, position, adjustPlayerPos, changeEvent);
|
||||
addContainerScripts(getPlayerPtr(), getPlayerPtr().getCell());
|
||||
mRendering->getCamera()->skipFocalPointTransition();
|
||||
}
|
||||
|
||||
void World::changeToExteriorCell (const ESM::Position& position, bool adjustPlayerPos, bool changeEvent)
|
||||
@ -960,6 +961,7 @@ namespace MWWorld
|
||||
removeContainerScripts(getPlayerPtr());
|
||||
mWorldScene->changeToExteriorCell(position, adjustPlayerPos, changeEvent);
|
||||
addContainerScripts(getPlayerPtr(), getPlayerPtr().getCell());
|
||||
mRendering->getCamera()->skipFocalPointTransition();
|
||||
}
|
||||
|
||||
void World::changeToCell (const ESM::CellId& cellId, const ESM::Position& position, bool adjustPlayerPos, bool changeEvent)
|
||||
|
Loading…
x
Reference in New Issue
Block a user