mirror of https://github.com/OpenMW/openmw.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
4.6 KiB
C++
86 lines
4.6 KiB
C++
#include "settings.hpp"
|
|
|
|
#include <components/misc/constants.hpp>
|
|
#include <components/settings/settings.hpp>
|
|
|
|
#include <algorithm>
|
|
|
|
namespace DetourNavigator
|
|
{
|
|
RecastSettings makeRecastSettingsFromSettingsManager()
|
|
{
|
|
constexpr float epsilon = std::numeric_limits<float>::epsilon();
|
|
|
|
RecastSettings result;
|
|
|
|
result.mBorderSize = std::max(0, ::Settings::Manager::getInt("border size", "Navigator"));
|
|
result.mCellHeight = std::max(epsilon, ::Settings::Manager::getFloat("cell height", "Navigator"));
|
|
result.mCellSize = std::max(epsilon, ::Settings::Manager::getFloat("cell size", "Navigator"));
|
|
result.mDetailSampleDist = std::max(0.0f, ::Settings::Manager::getFloat("detail sample dist", "Navigator"));
|
|
result.mDetailSampleMaxError
|
|
= std::max(0.0f, ::Settings::Manager::getFloat("detail sample max error", "Navigator"));
|
|
result.mMaxClimb = Constants::sStepSizeUp;
|
|
result.mMaxSimplificationError
|
|
= std::max(0.0f, ::Settings::Manager::getFloat("max simplification error", "Navigator"));
|
|
result.mMaxSlope = Constants::sMaxSlope;
|
|
result.mRecastScaleFactor
|
|
= std::max(epsilon, ::Settings::Manager::getFloat("recast scale factor", "Navigator"));
|
|
result.mSwimHeightScale = 0;
|
|
result.mMaxEdgeLen = std::max(0, ::Settings::Manager::getInt("max edge len", "Navigator"));
|
|
result.mMaxVertsPerPoly = std::max(3, ::Settings::Manager::getInt("max verts per poly", "Navigator"));
|
|
result.mRegionMergeArea = std::max(0, ::Settings::Manager::getInt("region merge area", "Navigator"));
|
|
result.mRegionMinArea = std::max(0, ::Settings::Manager::getInt("region min area", "Navigator"));
|
|
result.mTileSize = std::max(1, ::Settings::Manager::getInt("tile size", "Navigator"));
|
|
|
|
return result;
|
|
}
|
|
|
|
DetourSettings makeDetourSettingsFromSettingsManager()
|
|
{
|
|
DetourSettings result;
|
|
|
|
result.mMaxNavMeshQueryNodes
|
|
= std::clamp(::Settings::Manager::getInt("max nav mesh query nodes", "Navigator"), 1, 65535);
|
|
result.mMaxPolys
|
|
= std::clamp(::Settings::Manager::getInt("max polygons per tile", "Navigator"), 1, (1 << 22) - 1);
|
|
result.mMaxPolygonPathSize
|
|
= static_cast<std::size_t>(std::max(0, ::Settings::Manager::getInt("max polygon path size", "Navigator")));
|
|
result.mMaxSmoothPathSize
|
|
= static_cast<std::size_t>(std::max(0, ::Settings::Manager::getInt("max smooth path size", "Navigator")));
|
|
|
|
return result;
|
|
}
|
|
|
|
Settings makeSettingsFromSettingsManager()
|
|
{
|
|
Settings result;
|
|
|
|
result.mRecast = makeRecastSettingsFromSettingsManager();
|
|
result.mDetour = makeDetourSettingsFromSettingsManager();
|
|
result.mMaxTilesNumber = std::max(0, ::Settings::Manager::getInt("max tiles number", "Navigator"));
|
|
result.mWaitUntilMinDistanceToPlayer
|
|
= ::Settings::Manager::getInt("wait until min distance to player", "Navigator");
|
|
result.mAsyncNavMeshUpdaterThreads = static_cast<std::size_t>(
|
|
std::max(0, ::Settings::Manager::getInt("async nav mesh updater threads", "Navigator")));
|
|
result.mMaxNavMeshTilesCacheSize = static_cast<std::size_t>(
|
|
std::max(std::int64_t{ 0 }, ::Settings::Manager::getInt64("max nav mesh tiles cache size", "Navigator")));
|
|
result.mEnableWriteRecastMeshToFile
|
|
= ::Settings::Manager::getBool("enable write recast mesh to file", "Navigator");
|
|
result.mEnableWriteNavMeshToFile = ::Settings::Manager::getBool("enable write nav mesh to file", "Navigator");
|
|
result.mRecastMeshPathPrefix = ::Settings::Manager::getString("recast mesh path prefix", "Navigator");
|
|
result.mNavMeshPathPrefix = ::Settings::Manager::getString("nav mesh path prefix", "Navigator");
|
|
result.mEnableRecastMeshFileNameRevision
|
|
= ::Settings::Manager::getBool("enable recast mesh file name revision", "Navigator");
|
|
result.mEnableNavMeshFileNameRevision
|
|
= ::Settings::Manager::getBool("enable nav mesh file name revision", "Navigator");
|
|
result.mMinUpdateInterval
|
|
= std::chrono::milliseconds(::Settings::Manager::getInt("min update interval ms", "Navigator"));
|
|
result.mEnableNavMeshDiskCache = ::Settings::Manager::getBool("enable nav mesh disk cache", "Navigator");
|
|
result.mWriteToNavMeshDb = ::Settings::Manager::getBool("write to navmeshdb", "Navigator");
|
|
result.mMaxDbFileSize
|
|
= static_cast<std::uint64_t>(::Settings::Manager::getInt64("max navmeshdb file size", "Navigator"));
|
|
|
|
return result;
|
|
}
|
|
}
|