diff options
author | SmallJoker <SmallJoker@users.noreply.github.com> | 2020-04-23 12:16:36 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-23 12:16:36 +0200 |
commit | ce5b0932f8e17244bd6c1e307f1fce76b16e6474 (patch) | |
tree | 45f9c53a91b21fa9584b421160cb7687eb33445c | |
parent | 6ba44d74526031a07bbc5093b708b8b99a27456a (diff) | |
download | minetest-ce5b0932f8e17244bd6c1e307f1fce76b16e6474.tar.gz minetest-ce5b0932f8e17244bd6c1e307f1fce76b16e6474.tar.bz2 minetest-ce5b0932f8e17244bd6c1e307f1fce76b16e6474.zip |
Camera: Fix shootline line offsets II (#9730)
-rw-r--r-- | src/client/game.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/client/game.cpp b/src/client/game.cpp index 4b2d7c652..3429cc57b 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -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 |