Skip to content

Commit

Permalink
Use player as starting point instead of camera when pointing node (#8261
Browse files Browse the repository at this point in the history
)

Same pointing area on both camera modes.
This fix is inapplicable for non-crosshair input.
  • Loading branch information
srifqi authored and SmallJoker committed Apr 27, 2019
1 parent f409f44 commit 695d9ed
Showing 1 changed file with 8 additions and 3 deletions.
11 changes: 8 additions & 3 deletions src/client/game.cpp
Expand Up @@ -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
Expand All @@ -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
Expand Down

0 comments on commit 695d9ed

Please sign in to comment.