aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/client/game.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/client/game.cpp b/src/client/game.cpp
index 379f32949..0badda535 100644
--- a/src/client/game.cpp
+++ b/src/client/game.cpp
@@ -2961,10 +2961,15 @@ void Game::processPlayerInteraction(f32 dtime, bool show_hud, bool show_debug)
hlist ? hlist->getItem(0).getDefinition(itemdef_manager) : itemdef_manager->get("");
v3f player_position = player->getPosition();
+ v3f player_eye_position = player->getEyePosition();
v3f camera_position = camera->getPosition();
v3f camera_direction = camera->getDirection();
v3s16 camera_offset = camera->getOffset();
+ if (camera->getCameraMode() == CAMERA_MODE_FIRST)
+ player_eye_position += player->eye_offset_first;
+ else
+ player_eye_position += player->eye_offset_third;
/*
Calculate what block is the crosshair pointing to
@@ -2981,11 +2986,11 @@ void Game::processPlayerInteraction(f32 dtime, bool show_hud, bool show_debug)
core::line3d<f32> shootline;
if (camera->getCameraMode() != CAMERA_MODE_THIRD_FRONT) {
- shootline = core::line3d<f32>(camera_position,
- camera_position + camera_direction * BS * d);
+ shootline = core::line3d<f32>(player_eye_position,
+ player_eye_position + camera_direction * BS * d);
} else {
// prevent player pointing anything in front-view
- shootline = core::line3d<f32>(camera_position,camera_position);
+ shootline = core::line3d<f32>(camera_position, camera_position);
}
#ifdef HAVE_TOUCHSCREENGUI