]> git.lizzy.rs Git - minetest.git/commitdiff
Use player as starting point instead of camera when pointing node (#8261)
authorMuhammad Rifqi Priyo Susanto <muhammadrifqipriyosusanto@gmail.com>
Sat, 27 Apr 2019 10:44:56 +0000 (17:44 +0700)
committerSmallJoker <SmallJoker@users.noreply.github.com>
Sat, 27 Apr 2019 10:44:56 +0000 (12:44 +0200)
Same pointing area on both camera modes.
This fix is inapplicable for non-crosshair input.

src/client/game.cpp

index 379f32949722fbb12bbb44af20b28a4b3d69ab23..0badda5355ba9228c92919ae54ee4f207a6bca15 100644 (file)
@@ -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