aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorElias Fleckenstein <eliasfleckenstein@web.de>2022-07-24 00:18:39 +0200
committerLizzy Fleckenstein <eliasfleckenstein@web.de>2023-03-07 18:18:19 +0100
commitb8d4c31772b04d794b02727e803dd01a4c45c1e1 (patch)
treea61aef5fbaecb83ee6115543360303aab0ef0824 /src
parent925309eba69a95bcd2a49233125ce32e530fa663 (diff)
downloadminetest-b8d4c31772b04d794b02727e803dd01a4c45c1e1.tar.xz
Add setting to mirror hands
Diffstat (limited to 'src')
-rw-r--r--src/client/camera.cpp18
-rw-r--r--src/client/camera.h1
-rw-r--r--src/defaultsettings.cpp1
3 files changed, 14 insertions, 6 deletions
diff --git a/src/client/camera.cpp b/src/client/camera.cpp
index 68bed8ee2..5a3bd651a 100644
--- a/src/client/camera.cpp
+++ b/src/client/camera.cpp
@@ -64,6 +64,11 @@ WieldNode::WieldNode(HandIndex index, Client *client, scene::ISceneManager *mgr)
m_meshnode->drop(); // mgr grabbed it
}
+int WieldNode::getDirection()
+{
+ return g_settings->getBool("mirror_hands") ? -m_direction : m_direction;
+}
+
void WieldNode::step(f32 dtime)
{
bool was_under_zero = m_change_timer < 0;
@@ -136,7 +141,7 @@ void WieldNode::addArmInertia(f32 player_yaw, v3f camera_direction)
m_cam_vel_old.X = m_cam_vel.X;
f32 acc_X = 0.12f * (m_cam_vel.X - (gap_X * 0.1f));
- m_offset.X += (m_last_cam_pos.X < player_yaw ? acc_X : -acc_X) * m_direction;
+ m_offset.X += (m_last_cam_pos.X < player_yaw ? acc_X : -acc_X) * getDirection();
if (m_last_cam_pos.X != player_yaw)
m_last_cam_pos.X = player_yaw;
@@ -191,6 +196,7 @@ void WieldNode::addArmInertia(f32 player_yaw, v3f camera_direction)
void WieldNode::update(video::SColor player_light_color, f32 view_bobbing_anim, f32 tool_reload_ratio)
{
+ int direction = getDirection();
m_player_light_color = player_light_color;
// Position the wielded item
@@ -232,15 +238,15 @@ void WieldNode::update(video::SColor player_light_color, f32 view_bobbing_anim,
core::quaternion quat_end(v3f(80, 30, 100) * core::DEGTORAD);
core::quaternion quat_slerp;
quat_slerp.slerp(quat_begin, quat_end, sin(digfrac * M_PI));
- quat_slerp.W *= m_direction;
- quat_slerp.X *= m_direction;
+ quat_slerp.W *= direction;
+ quat_slerp.X *= direction;
quat_slerp.toEuler(rot);
rot *= core::RADTODEG;
- pos.X *= m_direction;
+ pos.X *= direction;
} else {
f32 bobfrac = my_modf(view_bobbing_anim);
- pos.X *= m_direction;
- pos.X -= sin(bobfrac*M_PI*2.0+M_PI*m_index) * 3.0 * m_direction;
+ pos.X *= direction;
+ pos.X -= sin(bobfrac*M_PI*2.0+M_PI*m_index) * 3.0 * direction;
pos.Y += sin(my_modf(bobfrac*2.0)*M_PI+M_PI*m_index) * 3.0;
}
diff --git a/src/client/camera.h b/src/client/camera.h
index ae27a5e42..2fceea6fd 100644
--- a/src/client/camera.h
+++ b/src/client/camera.h
@@ -77,6 +77,7 @@ class WieldNode
{
public:
WieldNode(HandIndex index, Client *client, scene::ISceneManager *mgr);
+ int getDirection();
void step(f32 dtime);
void addArmInertia(f32 player_yaw, v3f camera_direction);
void update(video::SColor player_light_color, f32 view_bobbing_anim, f32 tool_reload_ratio);
diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp
index 5710b731a..1dd4e2575 100644
--- a/src/defaultsettings.cpp
+++ b/src/defaultsettings.cpp
@@ -217,6 +217,7 @@ void set_default_settings()
settings->setDefault("enable_clouds", "true");
settings->setDefault("view_bobbing_amount", "1.0");
settings->setDefault("fall_bobbing_amount", "0.03");
+ settings->setDefault("mirror_hands", "false");
settings->setDefault("enable_3d_clouds", "true");
settings->setDefault("cloud_radius", "12");
settings->setDefault("menu_clouds", "true");