From aa5ec2ec02f331542dfe40e781c7c93ee4c0c131 Mon Sep 17 00:00:00 2001 From: random-geek <35757396+random-geek@users.noreply.github.com> Date: Sun, 30 Dec 2018 16:07:30 -0800 Subject: Extend pitch fly mode to swimming (#7943) --- src/client/localplayer.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src/client/localplayer.cpp') diff --git a/src/client/localplayer.cpp b/src/client/localplayer.cpp index c15c90931..dbb50d397 100644 --- a/src/client/localplayer.cpp +++ b/src/client/localplayer.cpp @@ -468,6 +468,7 @@ void LocalPlayer::applyControl(float dtime, Environment *env) { // Clear stuff swimming_vertical = false; + swimming_pitch = false; setPitch(control.pitch); setYaw(control.yaw); @@ -492,7 +493,7 @@ void LocalPlayer::applyControl(float dtime, Environment *env) bool free_move = fly_allowed && player_settings.free_move; bool fast_move = fast_allowed && player_settings.fast_move; - bool pitch_fly = free_move && player_settings.pitch_fly; + bool pitch_move = (free_move || in_liquid) && player_settings.pitch_move; // When aux1_descends is enabled the fast key is used to go down, so fast isn't possible bool fast_climb = fast_move && control.aux1 && !player_settings.aux1_descends; bool continuous_forward = player_settings.continuous_forward; @@ -685,10 +686,17 @@ void LocalPlayer::applyControl(float dtime, Environment *env) if (!free_move) slip_factor = getSlipFactor(env, speedH); + // Don't sink when swimming in pitch mode + if (pitch_move && in_liquid) { + v3f controlSpeed = speedH + speedV; + if (controlSpeed.getLength() > 0.01f) + swimming_pitch = true; + } + // Accelerate to target speed with maximum increment accelerate((speedH + speedV) * physics_override_speed, incH * physics_override_speed * slip_factor, incV * physics_override_speed, - pitch_fly); + pitch_move); } v3s16 LocalPlayer::getStandingNodePos() -- cgit v1.2.3