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")),
|
mAutoSwitchShoulder(Settings::Manager::getBool("auto switch shoulder", "Camera")),
|
||||||
mOverShoulderHorizontalOffset(30.f), mOverShoulderVerticalOffset(-10.f)
|
mOverShoulderHorizontalOffset(30.f), mOverShoulderVerticalOffset(-10.f)
|
||||||
{
|
{
|
||||||
std::stringstream offset(Settings::Manager::getString("view over shoulder offset", "Camera"));
|
osg::Vec2f offset = Settings::Manager::getVector2("view over shoulder offset", "Camera");
|
||||||
offset >> mOverShoulderHorizontalOffset >> mOverShoulderVerticalOffset;
|
mOverShoulderHorizontalOffset = std::abs(offset.x());
|
||||||
mDefaultShoulderIsRight = mOverShoulderHorizontalOffset >= 0;
|
mOverShoulderVerticalOffset = offset.y();
|
||||||
mOverShoulderHorizontalOffset = std::abs(mOverShoulderHorizontalOffset);
|
mDefaultShoulderIsRight = offset.x() >= 0;
|
||||||
|
|
||||||
mCamera->enableDynamicCameraDistance(true);
|
mCamera->enableDynamicCameraDistance(true);
|
||||||
mCamera->enableCrosshairInThirdPersonMode(true);
|
mCamera->enableCrosshairInThirdPersonMode(true);
|
||||||
mCamera->setFocalPointTargetOffset({mOverShoulderHorizontalOffset, mOverShoulderVerticalOffset});
|
mCamera->setFocalPointTargetOffset(offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ViewOverShoulderController::update()
|
void ViewOverShoulderController::update()
|
||||||
|
@ -76,6 +76,28 @@ bool Manager::getBool (const std::string& setting, const std::string& category)
|
|||||||
return Misc::StringUtils::ciEqual(string, "true");
|
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)
|
void Manager::setString(const std::string &setting, const std::string &category, const std::string &value)
|
||||||
{
|
{
|
||||||
CategorySettingValueMap::key_type key = std::make_pair(category, setting);
|
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");
|
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)
|
void Manager::resetPendingChange(const std::string &setting, const std::string &category)
|
||||||
{
|
{
|
||||||
CategorySettingValueMap::key_type key = std::make_pair(category, setting);
|
CategorySettingValueMap::key_type key = std::make_pair(category, setting);
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
#include <set>
|
#include <set>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <osg/Vec2f>
|
||||||
|
#include <osg/Vec3f>
|
||||||
|
|
||||||
namespace Settings
|
namespace Settings
|
||||||
{
|
{
|
||||||
@ -44,11 +46,15 @@ namespace Settings
|
|||||||
static float getFloat (const std::string& setting, const std::string& category);
|
static float getFloat (const std::string& setting, const std::string& category);
|
||||||
static std::string getString (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 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 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 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 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 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