summaryrefslogtreecommitdiff
path: root/src/client/camera.cpp
diff options
context:
space:
mode:
authorSmallJoker <SmallJoker@users.noreply.github.com>2020-04-16 18:32:07 +0200
committerGitHub <noreply@github.com>2020-04-16 18:32:07 +0200
commit45999b74e610b13e8cda20c0c420e152b9837ea6 (patch)
tree5c82a99433496ce5cf15c24da30beb66bf7ff100 /src/client/camera.cpp
parent5cbe8437a8f7efc9c76baf23de700e96ad96b385 (diff)
downloadminetest-45999b74e610b13e8cda20c0c420e152b9837ea6.tar.gz
minetest-45999b74e610b13e8cda20c0c420e152b9837ea6.tar.bz2
minetest-45999b74e610b13e8cda20c0c420e152b9837ea6.zip
Camera: Fix shooting line offsets (#9681)
Removes duplicated offset calculations from Game and use whatever the Camera class returns. This keeps the eye position nicely in sync, and gets rid of duplicated code.
Diffstat (limited to 'src/client/camera.cpp')
-rw-r--r--src/client/camera.cpp26
1 files changed, 15 insertions, 11 deletions
diff --git a/src/client/camera.cpp b/src/client/camera.cpp
index 871ea709d..fb1c3ff56 100644
--- a/src/client/camera.cpp
+++ b/src/client/camera.cpp
@@ -333,17 +333,21 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime, f32 tool_r
fall_bobbing *= m_cache_fall_bobbing_amount;
}
- // Calculate players eye offset for different camera modes
- v3f PlayerEyeOffset = player->getEyeOffset();
- if (m_camera_mode == CAMERA_MODE_FIRST)
- PlayerEyeOffset += player->eye_offset_first;
- else
- PlayerEyeOffset += player->eye_offset_third;
-
- // Set head node transformation
- m_headnode->setPosition(PlayerEyeOffset+v3f(0,cameratilt*-player->hurt_tilt_strength+fall_bobbing,0));
- m_headnode->setRotation(v3f(player->getPitch(), 0, cameratilt*player->hurt_tilt_strength));
- m_headnode->updateAbsolutePosition();
+ // Calculate and translate the head SceneNode offsets
+ {
+ v3f eye_offset = player->getEyeOffset();
+ if (m_camera_mode == CAMERA_MODE_FIRST)
+ eye_offset += player->eye_offset_first;
+ else
+ eye_offset += player->eye_offset_third;
+
+ // Set head node transformation
+ eye_offset.Y += cameratilt * -player->hurt_tilt_strength + fall_bobbing;
+ m_headnode->setPosition(eye_offset);
+ m_headnode->setRotation(v3f(player->getPitch(), 0,
+ cameratilt * player->hurt_tilt_strength));
+ m_headnode->updateAbsolutePosition();
+ }
// Compute relative camera position and target
v3f rel_cam_pos = v3f(0,0,0);