mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-31 15:32:45 +00:00
Support vectors in settings.cfg
This commit is contained in:
parent
3be1cdef33
commit
8cdc7031f5
@ -21,14 +21,14 @@ namespace MWRender
|
||||
mAutoSwitchShoulder(Settings::Manager::getBool("auto switch shoulder", "Camera")),
|
||||
mOverShoulderHorizontalOffset(30.f), mOverShoulderVerticalOffset(-10.f)
|
||||
{
|
||||
std::stringstream offset(Settings::Manager::getString("view over shoulder offset", "Camera"));
|
||||
offset >> mOverShoulderHorizontalOffset >> mOverShoulderVerticalOffset;
|
||||
mDefaultShoulderIsRight = mOverShoulderHorizontalOffset >= 0;
|
||||
mOverShoulderHorizontalOffset = std::abs(mOverShoulderHorizontalOffset);
|
||||
osg::Vec2f offset = Settings::Manager::getVector2("view over shoulder offset", "Camera");
|
||||
mOverShoulderHorizontalOffset = std::abs(offset.x());
|
||||
mOverShoulderVerticalOffset = offset.y();
|
||||
mDefaultShoulderIsRight = offset.x() >= 0;
|
||||
|
||||
mCamera->enableDynamicCameraDistance(true);
|
||||
mCamera->enableCrosshairInThirdPersonMode(true);
|
||||
mCamera->setFocalPointTargetOffset({mOverShoulderHorizontalOffset, mOverShoulderVerticalOffset});
|
||||
mCamera->setFocalPointTargetOffset(offset);
|
||||
}
|
||||
|
||||
void ViewOverShoulderController::update()
|
||||
|
@ -76,6 +76,28 @@ bool Manager::getBool (const std::string& setting, const std::string& category)
|
||||
return Misc::StringUtils::ciEqual(string, "true");
|
||||
}
|
||||
|
||||
osg::Vec2f Manager::getVector2 (const std::string& setting, const std::string& category)
|
||||
{
|
||||
const std::string& value = getString(setting, category);
|
||||
std::stringstream stream(value);
|
||||
float x, y;
|
||||
stream >> x >> y;
|
||||
if (stream.fail())
|
||||
throw std::runtime_error(std::string("Can't parse 2d vector: " + value));
|
||||
return osg::Vec2f(x, y);
|
||||
}
|
||||
|
||||
osg::Vec3f Manager::getVector3 (const std::string& setting, const std::string& category)
|
||||
{
|
||||
const std::string& value = getString(setting, category);
|
||||
std::stringstream stream(value);
|
||||
float x, y, z;
|
||||
stream >> x >> y >> z;
|
||||
if (stream.fail())
|
||||
throw std::runtime_error(std::string("Can't parse 3d vector: " + value));
|
||||
return osg::Vec3f(x, y, z);
|
||||
}
|
||||
|
||||
void Manager::setString(const std::string &setting, const std::string &category, const std::string &value)
|
||||
{
|
||||
CategorySettingValueMap::key_type key = std::make_pair(category, setting);
|
||||
@ -111,6 +133,20 @@ void Manager::setBool(const std::string &setting, const std::string &category, c
|
||||
setString(setting, category, value ? "true" : "false");
|
||||
}
|
||||
|
||||
void Manager::setVector2 (const std::string &setting, const std::string &category, const osg::Vec2f value)
|
||||
{
|
||||
std::ostringstream stream;
|
||||
stream << value.x() << " " << value.y();
|
||||
setString(setting, category, stream.str());
|
||||
}
|
||||
|
||||
void Manager::setVector3 (const std::string &setting, const std::string &category, const osg::Vec3f value)
|
||||
{
|
||||
std::ostringstream stream;
|
||||
stream << value.x() << ' ' << value.y() << ' ' << value.z();
|
||||
setString(setting, category, stream.str());
|
||||
}
|
||||
|
||||
void Manager::resetPendingChange(const std::string &setting, const std::string &category)
|
||||
{
|
||||
CategorySettingValueMap::key_type key = std::make_pair(category, setting);
|
||||
|
@ -6,6 +6,8 @@
|
||||
#include <set>
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <osg/Vec2f>
|
||||
#include <osg/Vec3f>
|
||||
|
||||
namespace Settings
|
||||
{
|
||||
@ -44,11 +46,15 @@ namespace Settings
|
||||
static float getFloat (const std::string& setting, const std::string& category);
|
||||
static std::string getString (const std::string& setting, const std::string& category);
|
||||
static bool getBool (const std::string& setting, const std::string& category);
|
||||
static osg::Vec2f getVector2 (const std::string& setting, const std::string& category);
|
||||
static osg::Vec3f getVector3 (const std::string& setting, const std::string& category);
|
||||
|
||||
static void setInt (const std::string& setting, const std::string& category, const int value);
|
||||
static void setFloat (const std::string& setting, const std::string& category, const float value);
|
||||
static void setString (const std::string& setting, const std::string& category, const std::string& value);
|
||||
static void setBool (const std::string& setting, const std::string& category, const bool value);
|
||||
static void setVector2 (const std::string& setting, const std::string& category, const osg::Vec2f value);
|
||||
static void setVector3 (const std::string& setting, const std::string& category, const osg::Vec3f value);
|
||||
};
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user