Camera: Fix shootline line offsets II (#9730)
authorSmallJoker <SmallJoker@users.noreply.github.com>
Thu, 23 Apr 2020 10:16:36 +0000 (12:16 +0200)
committerGitHub <noreply@github.com>
Thu, 23 Apr 2020 10:16:36 +0000 (12:16 +0200)
src/client/game.cpp

index 4b2d7c6521721ea3588676fb65861b019c7fbc5b..3429cc57bb78b1345eb2b08f02eab45e87930997 100644 (file)
@@ -3029,7 +3029,6 @@ void Game::processPlayerInteraction(f32 dtime, bool show_hud, bool show_debug)
 {
        LocalPlayer *player = client->getEnv().getLocalPlayer();
 
-       const v3f head_position = camera->getHeadPosition();
        const v3f camera_direction = camera->getDirection();
        const v3s16 camera_offset  = camera->getOffset();
 
@@ -3045,13 +3044,22 @@ 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>(head_position,
-                       head_position + camera_direction * BS * d);
-       } else {
+       switch (camera->getCameraMode()) {
+       case CAMERA_MODE_FIRST:
+               // Shoot from camera position, with bobbing
+               shootline.start = camera->getPosition();
+               break;
+       case CAMERA_MODE_THIRD:
+               // Shoot from player head, no bobbing
+               shootline.start = camera->getHeadPosition();
+               break;
+       case CAMERA_MODE_THIRD_FRONT:
+               shootline.start = camera->getHeadPosition();
                // prevent player pointing anything in front-view
-               shootline = core::line3d<f32>(head_position, head_position);
+               d = 0;
+               break;
        }
+       shootline.end = shootline.start + camera_direction * BS * d;
 
 #ifdef HAVE_TOUCHSCREENGUI