mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-03-03 13:19:40 +00:00
Use the Werewolf field of view override (Fixes #3064)
Need to re-run the settings importer for the feature to work.
This commit is contained in:
parent
9d4af59860
commit
136a425cec
4 changed files with 49 additions and 3 deletions
|
@ -638,6 +638,9 @@ MwIniImporter::MwIniImporter()
|
||||||
"Blood:Texture Name 1",
|
"Blood:Texture Name 1",
|
||||||
"Blood:Texture Name 2",
|
"Blood:Texture Name 2",
|
||||||
|
|
||||||
|
// werewolf (Bloodmoon)
|
||||||
|
"General:Werewolf FOV",
|
||||||
|
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -136,6 +136,8 @@ namespace MWRender
|
||||||
, mUnderwaterFog(0.f)
|
, mUnderwaterFog(0.f)
|
||||||
, mUnderwaterIndoorFog(fallback->getFallbackFloat("Water_UnderwaterIndoorFog"))
|
, mUnderwaterIndoorFog(fallback->getFallbackFloat("Water_UnderwaterIndoorFog"))
|
||||||
, mNightEyeFactor(0.f)
|
, mNightEyeFactor(0.f)
|
||||||
|
, mFieldOfViewOverride(0.f)
|
||||||
|
, mFieldOfViewOverridden(false)
|
||||||
{
|
{
|
||||||
resourceSystem->getSceneManager()->setParticleSystemMask(MWRender::Mask_ParticleSystem);
|
resourceSystem->getSceneManager()->setParticleSystemMask(MWRender::Mask_ParticleSystem);
|
||||||
|
|
||||||
|
@ -769,7 +771,10 @@ namespace MWRender
|
||||||
void RenderingManager::updateProjectionMatrix()
|
void RenderingManager::updateProjectionMatrix()
|
||||||
{
|
{
|
||||||
double aspect = mViewer->getCamera()->getViewport()->aspectRatio();
|
double aspect = mViewer->getCamera()->getViewport()->aspectRatio();
|
||||||
mViewer->getCamera()->setProjectionMatrixAsPerspective(mFieldOfView, aspect, mNearClip, mViewDistance);
|
float fov = mFieldOfView;
|
||||||
|
if (mFieldOfViewOverridden)
|
||||||
|
fov = mFieldOfViewOverride;
|
||||||
|
mViewer->getCamera()->setProjectionMatrixAsPerspective(fov, aspect, mNearClip, mViewDistance);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingManager::updateTextureFiltering()
|
void RenderingManager::updateTextureFiltering()
|
||||||
|
@ -912,4 +917,23 @@ namespace MWRender
|
||||||
mCamera->setCameraDistance(-factor/120.f*10, true, true);
|
mCamera->setCameraDistance(-factor/120.f*10, true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RenderingManager::overrideFieldOfView(float val)
|
||||||
|
{
|
||||||
|
if (mFieldOfViewOverridden != true || mFieldOfViewOverride != val)
|
||||||
|
{
|
||||||
|
mFieldOfViewOverridden = true;
|
||||||
|
mFieldOfViewOverride = val;
|
||||||
|
updateProjectionMatrix();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void RenderingManager::resetFieldOfView()
|
||||||
|
{
|
||||||
|
if (mFieldOfViewOverridden == true)
|
||||||
|
{
|
||||||
|
mFieldOfViewOverridden = false;
|
||||||
|
updateProjectionMatrix();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -170,6 +170,11 @@ namespace MWRender
|
||||||
void togglePlayerLooking(bool enable);
|
void togglePlayerLooking(bool enable);
|
||||||
void changeVanityModeScale(float factor);
|
void changeVanityModeScale(float factor);
|
||||||
|
|
||||||
|
/// temporarily override the field of view with given value.
|
||||||
|
void overrideFieldOfView(float val);
|
||||||
|
/// reset a previous overrideFieldOfView() call, i.e. revert to field of view specified in the settings file.
|
||||||
|
void resetFieldOfView();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void updateProjectionMatrix();
|
void updateProjectionMatrix();
|
||||||
void updateTextureFiltering();
|
void updateTextureFiltering();
|
||||||
|
@ -208,6 +213,8 @@ namespace MWRender
|
||||||
|
|
||||||
float mNearClip;
|
float mNearClip;
|
||||||
float mViewDistance;
|
float mViewDistance;
|
||||||
|
float mFieldOfViewOverride;
|
||||||
|
bool mFieldOfViewOverridden;
|
||||||
float mFieldOfView;
|
float mFieldOfView;
|
||||||
|
|
||||||
void operator = (const RenderingManager&);
|
void operator = (const RenderingManager&);
|
||||||
|
|
|
@ -1565,8 +1565,20 @@ namespace MWWorld
|
||||||
mPlayer->setLastKnownExteriorPosition(pos.asVec3());
|
mPlayer->setLastKnownExteriorPosition(pos.asVec3());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player.getClass().getNpcStats(player).isWerewolf())
|
bool isWerewolf = player.getClass().getNpcStats(player).isWerewolf();
|
||||||
MWBase::Environment::get().getWindowManager()->setWerewolfOverlay(mRendering->getCamera()->isFirstPerson());
|
bool isFirstPerson = mRendering->getCamera()->isFirstPerson();
|
||||||
|
if (isWerewolf && isFirstPerson)
|
||||||
|
{
|
||||||
|
float werewolfFov = mFallback.getFallbackFloat("General_Werewolf_FOV");
|
||||||
|
if (werewolfFov != 0)
|
||||||
|
mRendering->overrideFieldOfView(werewolfFov);
|
||||||
|
MWBase::Environment::get().getWindowManager()->setWerewolfOverlay(true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mRendering->resetFieldOfView();
|
||||||
|
MWBase::Environment::get().getWindowManager()->setWerewolfOverlay(false);
|
||||||
|
}
|
||||||
|
|
||||||
// Sink the camera while sneaking
|
// Sink the camera while sneaking
|
||||||
bool sneaking = player.getClass().getCreatureStats(getPlayerPtr()).getStance(MWMechanics::CreatureStats::Stance_Sneak);
|
bool sneaking = player.getClass().getCreatureStats(getPlayerPtr()).getStance(MWMechanics::CreatureStats::Stance_Sneak);
|
||||||
|
|
Loading…
Reference in a new issue