diff options
author | SmallJoker <SmallJoker@users.noreply.github.com> | 2020-04-16 18:32:07 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-16 18:32:07 +0200 |
commit | 45999b74e610b13e8cda20c0c420e152b9837ea6 (patch) | |
tree | 5c82a99433496ce5cf15c24da30beb66bf7ff100 /src/client/camera.cpp | |
parent | 5cbe8437a8f7efc9c76baf23de700e96ad96b385 (diff) | |
download | minetest-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.cpp | 26 |
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); |