mirror of
https://github.com/OpenMW/openmw.git
synced 2025-01-30 08:15:37 +00:00
Initialize navigator max climb and max slope settings in makeSettingsFromSettingsManager
To avoid having multiple places to initialize them when they will be required by multiple binaries.
This commit is contained in:
parent
d6613d3677
commit
6986feb81b
8 changed files with 25 additions and 24 deletions
|
@ -3,7 +3,6 @@
|
|||
|
||||
namespace MWPhysics
|
||||
{
|
||||
static constexpr float sStepSizeUp = 34.0f;
|
||||
static constexpr float sStepSizeDown = 62.0f;
|
||||
|
||||
static constexpr float sMinStep = 10.0f; // hack to skip over tiny unwalkable slopes
|
||||
|
@ -12,7 +11,6 @@ namespace MWPhysics
|
|||
static constexpr bool sDoExtraStairHacks = true;
|
||||
|
||||
static constexpr float sGroundOffset = 1.0f;
|
||||
static constexpr float sMaxSlope = 46.0f;
|
||||
|
||||
// Arbitrary number. To prevent infinite loops. They shouldn't happen but it's good to be prepared.
|
||||
static constexpr int sMaxIterations = 8;
|
||||
|
|
|
@ -230,7 +230,7 @@ namespace MWPhysics
|
|||
float hitHeight = tracer.mHitPoint.z() - tracer.mEndPos.z() + actor.mHalfExtentsZ;
|
||||
osg::Vec3f oldPosition = newPosition;
|
||||
bool usedStepLogic = false;
|
||||
if (hitHeight < sStepSizeUp && !isActor(tracer.mHitObject))
|
||||
if (hitHeight < Constants::sStepSizeUp && !isActor(tracer.mHitObject))
|
||||
{
|
||||
// Try to step up onto it.
|
||||
// NOTE: this modifies newPosition and velocity on its own if successful
|
||||
|
|
|
@ -3,7 +3,8 @@
|
|||
|
||||
#include <osg/Vec3f>
|
||||
|
||||
#include "constants.hpp"
|
||||
#include <components/misc/constants.hpp>
|
||||
|
||||
#include "../mwworld/ptr.hpp"
|
||||
|
||||
class btCollisionWorld;
|
||||
|
@ -30,7 +31,7 @@ namespace MWPhysics
|
|||
template <class Vec3>
|
||||
static bool isWalkableSlope(const Vec3 &normal)
|
||||
{
|
||||
static const float sMaxSlopeCos = std::cos(osg::DegreesToRadians(sMaxSlope));
|
||||
static const float sMaxSlopeCos = std::cos(osg::DegreesToRadians(Constants::sMaxSlope));
|
||||
return (normal.z() > sMaxSlopeCos);
|
||||
}
|
||||
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
#include <BulletCollision/CollisionDispatch/btCollisionObject.h>
|
||||
#include <BulletCollision/CollisionDispatch/btCollisionWorld.h>
|
||||
|
||||
#include <components/misc/constants.hpp>
|
||||
|
||||
#include "collisiontype.hpp"
|
||||
#include "constants.hpp"
|
||||
#include "movementsolver.hpp"
|
||||
|
@ -13,7 +15,7 @@ namespace MWPhysics
|
|||
{
|
||||
if (!stepper.mHitObject)
|
||||
return false;
|
||||
static const float sMaxSlopeCos = std::cos(osg::DegreesToRadians(sMaxSlope));
|
||||
static const float sMaxSlopeCos = std::cos(osg::DegreesToRadians(Constants::sMaxSlope));
|
||||
if (stepper.mPlaneNormal.z() <= sMaxSlopeCos)
|
||||
return false;
|
||||
|
||||
|
@ -34,13 +36,13 @@ namespace MWPhysics
|
|||
// Stairstepping algorithms work by moving up to avoid the step, moving forwards, then moving back down onto the ground.
|
||||
// This algorithm has a couple of minor problems, but they don't cause problems for sane geometry, and just prevent stepping on insane geometry.
|
||||
|
||||
mUpStepper.doTrace(mColObj, position, position+osg::Vec3f(0.0f,0.0f,sStepSizeUp), mColWorld);
|
||||
mUpStepper.doTrace(mColObj, position, position + osg::Vec3f(0.0f, 0.0f, Constants::sStepSizeUp), mColWorld);
|
||||
|
||||
float upDistance = 0;
|
||||
if(!mUpStepper.mHitObject)
|
||||
upDistance = sStepSizeUp;
|
||||
else if(mUpStepper.mFraction*sStepSizeUp > sCollisionMargin)
|
||||
upDistance = mUpStepper.mFraction*sStepSizeUp - sCollisionMargin;
|
||||
upDistance = Constants::sStepSizeUp;
|
||||
else if(mUpStepper.mFraction * Constants::sStepSizeUp > sCollisionMargin)
|
||||
upDistance = mUpStepper.mFraction * Constants::sStepSizeUp - sCollisionMargin;
|
||||
else
|
||||
{
|
||||
return false;
|
||||
|
@ -76,9 +78,9 @@ namespace MWPhysics
|
|||
}
|
||||
else if(attempt == 3)
|
||||
{
|
||||
if(upDistance > sStepSizeUp)
|
||||
if(upDistance > Constants::sStepSizeUp)
|
||||
{
|
||||
upDistance = sStepSizeUp;
|
||||
upDistance = Constants::sStepSizeUp;
|
||||
tracerPos = position + osg::Vec3f(0.0f, 0.0f, upDistance);
|
||||
}
|
||||
moveDistance = sMinStep2;
|
||||
|
|
|
@ -173,13 +173,12 @@ namespace MWWorld
|
|||
|
||||
mPhysics.reset(new MWPhysics::PhysicsSystem(resourceSystem, rootNode));
|
||||
|
||||
if (auto navigatorSettings = DetourNavigator::makeSettingsFromSettingsManager())
|
||||
if (Settings::Manager::getBool("enable", "Navigator"))
|
||||
{
|
||||
navigatorSettings->mMaxClimb = MWPhysics::sStepSizeUp;
|
||||
navigatorSettings->mMaxSlope = MWPhysics::sMaxSlope;
|
||||
navigatorSettings->mSwimHeightScale = mSwimHeightScale;
|
||||
auto navigatorSettings = DetourNavigator::makeSettingsFromSettingsManager();
|
||||
navigatorSettings.mSwimHeightScale = mSwimHeightScale;
|
||||
DetourNavigator::RecastGlobalAllocator::init();
|
||||
mNavigator.reset(new DetourNavigator::NavigatorImpl(*navigatorSettings));
|
||||
mNavigator.reset(new DetourNavigator::NavigatorImpl(navigatorSettings));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -1,14 +1,12 @@
|
|||
#include "settings.hpp"
|
||||
|
||||
#include <components/settings/settings.hpp>
|
||||
#include <components/misc/constants.hpp>
|
||||
|
||||
namespace DetourNavigator
|
||||
{
|
||||
std::optional<Settings> makeSettingsFromSettingsManager()
|
||||
Settings makeSettingsFromSettingsManager()
|
||||
{
|
||||
if (!::Settings::Manager::getBool("enable", "Navigator"))
|
||||
return std::optional<Settings>();
|
||||
|
||||
Settings navigatorSettings;
|
||||
|
||||
navigatorSettings.mBorderSize = ::Settings::Manager::getInt("border size", "Navigator");
|
||||
|
@ -16,9 +14,9 @@ namespace DetourNavigator
|
|||
navigatorSettings.mCellSize = ::Settings::Manager::getFloat("cell size", "Navigator");
|
||||
navigatorSettings.mDetailSampleDist = ::Settings::Manager::getFloat("detail sample dist", "Navigator");
|
||||
navigatorSettings.mDetailSampleMaxError = ::Settings::Manager::getFloat("detail sample max error", "Navigator");
|
||||
navigatorSettings.mMaxClimb = 0;
|
||||
navigatorSettings.mMaxClimb = Constants::sStepSizeUp;
|
||||
navigatorSettings.mMaxSimplificationError = ::Settings::Manager::getFloat("max simplification error", "Navigator");
|
||||
navigatorSettings.mMaxSlope = 0;
|
||||
navigatorSettings.mMaxSlope = Constants::sMaxSlope;
|
||||
navigatorSettings.mRecastScaleFactor = ::Settings::Manager::getFloat("recast scale factor", "Navigator");
|
||||
navigatorSettings.mSwimHeightScale = 0;
|
||||
navigatorSettings.mMaxEdgeLen = ::Settings::Manager::getInt("max edge len", "Navigator");
|
||||
|
|
|
@ -41,7 +41,7 @@ namespace DetourNavigator
|
|||
std::chrono::milliseconds mMinUpdateInterval;
|
||||
};
|
||||
|
||||
std::optional<Settings> makeSettingsFromSettingsManager();
|
||||
Settings makeSettingsFromSettingsManager();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -36,6 +36,9 @@ const std::string HerbalismLabel = "HerbalismSwitch";
|
|||
// Percentage height at which projectiles are spawned from an actor
|
||||
const float TorsoHeight = 0.75f;
|
||||
|
||||
static constexpr float sStepSizeUp = 34.0f;
|
||||
static constexpr float sMaxSlope = 46.0f;
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue