]> git.lizzy.rs Git - minetest.git/commitdiff
Extend pitch fly mode to swimming (#7943)
authorrandom-geek <35757396+random-geek@users.noreply.github.com>
Mon, 31 Dec 2018 00:07:30 +0000 (16:07 -0800)
committerParamat <paramat@users.noreply.github.com>
Mon, 31 Dec 2018 00:07:30 +0000 (00:07 +0000)
12 files changed:
README.md
builtin/settingtypes.txt
minetest.conf.example
src/client/clientenvironment.cpp
src/client/game.cpp
src/client/inputhandler.cpp
src/client/keys.h
src/client/localplayer.cpp
src/client/localplayer.h
src/defaultsettings.cpp
src/player.cpp
src/player.h

index c0160ca00240886e71f630cf52277d00e96a53c3..0c27d3a50fe67ddfda1035933da8635429f98b73 100644 (file)
--- a/README.md
+++ b/README.md
@@ -65,7 +65,7 @@ Some can be changed in the key config dialog in the settings tab.
 | +                             | Increase view range                                            |
 | -                             | Decrease view range                                            |
 | K                             | Enable/disable fly mode (needs fly privilege)                  |
-| L                             | Enable/disable pitch fly mode                                  |
+| L                             | Enable/disable pitch move mode                                 |
 | J                             | Enable/disable fast mode (needs fast privilege)                |
 | H                             | Enable/disable noclip mode (needs noclip privilege)            |
 | E                             | Move fast in fast mode                                         |
index 66d4c324e004eb7d07759db1d566422f0e2bb515..a199e7e7f7a23bfbb300f371f68589c16973478c 100644 (file)
@@ -72,8 +72,8 @@ enable_build_where_you_stand (Build inside player) bool false
 #    This requires the "fly" privilege on the server.
 free_move (Flying) bool false
 
-#    If enabled together with fly mode, makes move directions relative to the player's pitch.
-pitch_fly (Pitch fly mode) bool false
+#    If enabled, makes move directions relative to the player's pitch when flying or swimming.
+pitch_move (Pitch move mode) bool false
 
 #    Fast movement (via the "special" key).
 #    This requires the "fast" privilege on the server.
@@ -211,9 +211,9 @@ keymap_rangeselect (Range select key) key KEY_KEY_R
 #    See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
 keymap_freemove (Fly key) key KEY_KEY_K
 
-#    Key for toggling pitch fly mode.
+#    Key for toggling pitch move mode.
 #    See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
-keymap_pitchfly (Pitch fly key) key KEY_KEY_L
+keymap_pitchmove (Pitch move key) key KEY_KEY_L
 
 #    Key for toggling fast mode.
 #    See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
index 0bf0b988e259650e991b401996df5a4219f23db0..64fe7ef2933c66e4d9b7f236365aa811a7e25b43 100644 (file)
@@ -26,9 +26,9 @@
 #    type: bool
 # free_move = false
 
-#    If enabled together with fly mode, makes move directions relative to the player's pitch.
+#    If enabled, makes move directions relative to the player's pitch when flying or swimming.
 #    type: bool
-# pitch_fly = false
+# pitch_move = false
 
 #    Fast movement (via the "special" key).
 #    This requires the "fast" privilege on the server.
 #    type: key
 # keymap_freemove = KEY_KEY_K
 
-#    Key for toggling pitch fly mode.
+#    Key for toggling pitch move mode.
 #    See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
 #    type: key
-# keymap_pitchfly = KEY_KEY_L
+# keymap_pitchmove = KEY_KEY_L
 
 #    Key for toggling fast mode.
 #    See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
index 7c2ec099ce017fff7f4afc37433e7838cd4aef9f..1783e89617ced425c2eea7c4abf903a39d7fa535 100644 (file)
@@ -170,7 +170,8 @@ void ClientEnvironment::step(float dtime)
                                                lplayer->physics_override_gravity * dtime_part * 2.0f;
 
                                // Liquid floating / sinking
-                               if (lplayer->in_liquid && !lplayer->swimming_vertical)
+                               if (lplayer->in_liquid && !lplayer->swimming_vertical &&
+                                               !lplayer->swimming_pitch)
                                        speed.Y -= lplayer->movement_liquid_sink * dtime_part * 2.0f;
 
                                // Liquid resistance
index 06e8eefe3d61084b325c551f6613fde005614b96..bd37bd58a9c5a78a6d3c4f8d80a3e3875eb24772 100644 (file)
@@ -702,7 +702,7 @@ class Game {
        void openConsole(float scale, const wchar_t *line=NULL);
        void toggleFreeMove();
        void toggleFreeMoveAlt();
-       void togglePitchFly();
+       void togglePitchMove();
        void toggleFast();
        void toggleNoClip();
        void toggleCinematic();
@@ -1898,8 +1898,8 @@ void Game::processKeyInput()
                toggleFreeMove();
        } else if (wasKeyDown(KeyType::JUMP)) {
                toggleFreeMoveAlt();
-       } else if (wasKeyDown(KeyType::PITCHFLY)) {
-               togglePitchFly();
+       } else if (wasKeyDown(KeyType::PITCHMOVE)) {
+               togglePitchMove();
        } else if (wasKeyDown(KeyType::FASTMOVE)) {
                toggleFast();
        } else if (wasKeyDown(KeyType::NOCLIP)) {
@@ -2109,15 +2109,15 @@ void Game::toggleFreeMoveAlt()
 }
 
 
-void Game::togglePitchFly()
+void Game::togglePitchMove()
 {
-       bool pitch_fly = !g_settings->getBool("pitch_fly");
-       g_settings->set("pitch_fly", bool_to_cstr(pitch_fly));
+       bool pitch_move = !g_settings->getBool("pitch_move");
+       g_settings->set("pitch_move", bool_to_cstr(pitch_move));
 
-       if (pitch_fly) {
-               m_game_ui->showTranslatedStatusText("Pitch fly mode enabled");
+       if (pitch_move) {
+               m_game_ui->showTranslatedStatusText("Pitch move mode enabled");
        } else {
-               m_game_ui->showTranslatedStatusText("Pitch fly mode disabled");
+               m_game_ui->showTranslatedStatusText("Pitch move mode disabled");
        }
 }
 
index 2692e9f1e70d73f6c527e02a1248ae8f0f0cef53..a79b04a9058dcf8910859c3c83d518f458ab5273 100644 (file)
@@ -48,7 +48,7 @@ void KeyCache::populate()
        key[KeyType::CONSOLE] = getKeySetting("keymap_console");
        key[KeyType::MINIMAP] = getKeySetting("keymap_minimap");
        key[KeyType::FREEMOVE] = getKeySetting("keymap_freemove");
-       key[KeyType::PITCHFLY] = getKeySetting("keymap_pitchfly");
+       key[KeyType::PITCHMOVE] = getKeySetting("keymap_pitchmove");
        key[KeyType::FASTMOVE] = getKeySetting("keymap_fastmove");
        key[KeyType::NOCLIP] = getKeySetting("keymap_noclip");
        key[KeyType::HOTBAR_PREV] = getKeySetting("keymap_hotbar_previous");
index 28c6574baa263e97c5277365d8ca8b298bc2e0e3..50d3d194b4eefe09c7988f7c6a55fa7d5a3a9d4c 100644 (file)
@@ -47,7 +47,7 @@ class KeyType
                CONSOLE,
                MINIMAP,
                FREEMOVE,
-               PITCHFLY,
+               PITCHMOVE,
                FASTMOVE,
                NOCLIP,
                HOTBAR_PREV,
index c15c909318afb3862d2134ef84ca61a72c94a9ed..dbb50d397bb435476dc9d5b847019b6834bd8679 100644 (file)
@@ -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()
index 28404aa012f92018b10bc6ba5ad2ac563dda879e..b1fc1fbc8be72be21b91c175c0154f745a6fca9b 100644 (file)
@@ -62,6 +62,7 @@ class LocalPlayer : public Player
        u8 liquid_viscosity = 0;
        bool is_climbing = false;
        bool swimming_vertical = false;
+       bool swimming_pitch = false;
 
        float physics_override_speed = 1.0f;
        float physics_override_jump = 1.0f;
index b061b6845cf429509aee26f84fc2a7d871838303..daa0159278497679fafbd7ab38e355cf4baff11f 100644 (file)
@@ -43,7 +43,7 @@ void set_default_settings(Settings *settings)
        settings->setDefault("meshgen_block_cache_size", "20");
        settings->setDefault("enable_vbo", "true");
        settings->setDefault("free_move", "false");
-       settings->setDefault("pitch_fly", "false");
+       settings->setDefault("pitch_move", "false");
        settings->setDefault("fast_move", "false");
        settings->setDefault("noclip", "false");
        settings->setDefault("screenshot_path", ".");
@@ -81,7 +81,7 @@ void set_default_settings(Settings *settings)
        settings->setDefault("keymap_console", "KEY_F10");
        settings->setDefault("keymap_rangeselect", "KEY_KEY_R");
        settings->setDefault("keymap_freemove", "KEY_KEY_K");
-       settings->setDefault("keymap_pitchfly", "KEY_KEY_L");
+       settings->setDefault("keymap_pitchmove", "KEY_KEY_L");
        settings->setDefault("keymap_fastmove", "KEY_KEY_J");
        settings->setDefault("keymap_noclip", "KEY_KEY_H");
        settings->setDefault("keymap_hotbar_next", "KEY_KEY_N");
index f00eb082917da17f3fd0c35cbe3ec0c8010101a0..9beeab74e4f4da8d60bb8342af5fba69ee04d842 100644 (file)
@@ -139,7 +139,7 @@ void Player::clearHud()
 void PlayerSettings::readGlobalSettings()
 {
        free_move = g_settings->getBool("free_move");
-       pitch_fly = g_settings->getBool("pitch_fly");
+       pitch_move = g_settings->getBool("pitch_move");
        fast_move = g_settings->getBool("fast_move");
        continuous_forward = g_settings->getBool("continuous_forward");
        always_fly_fast = g_settings->getBool("always_fly_fast");
index 9af6e5cac595f9da957e9c41767a87e84877f30f..05b6fcbb53e21fba10143e716311fa14d4c08380 100644 (file)
@@ -87,7 +87,7 @@ struct PlayerControl
 struct PlayerSettings
 {
        bool free_move = false;
-       bool pitch_fly = false;
+       bool pitch_move = false;
        bool fast_move = false;
        bool continuous_forward = false;
        bool always_fly_fast = false;
@@ -96,7 +96,7 @@ struct PlayerSettings
        bool autojump = false;
 
        const std::string setting_names[8] = {
-               "free_move", "pitch_fly", "fast_move", "continuous_forward", "always_fly_fast",
+               "free_move", "pitch_move", "fast_move", "continuous_forward", "always_fly_fast",
                "aux1_descends", "noclip", "autojump"
        };
        void readGlobalSettings();