diff --git a/README.md b/README.md index c0160ca0..0c27d3a5 100644 --- 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 | diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index 66d4c324..a199e7e7 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -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 diff --git a/minetest.conf.example b/minetest.conf.example index 0bf0b988..64fe7ef2 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -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. @@ -202,10 +202,10 @@ # 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 diff --git a/src/client/clientenvironment.cpp b/src/client/clientenvironment.cpp index 7c2ec099..1783e896 100644 --- a/src/client/clientenvironment.cpp +++ b/src/client/clientenvironment.cpp @@ -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 diff --git a/src/client/game.cpp b/src/client/game.cpp index 06e8eefe..bd37bd58 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -702,7 +702,7 @@ protected: 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"); } } diff --git a/src/client/inputhandler.cpp b/src/client/inputhandler.cpp index 2692e9f1..a79b04a9 100644 --- a/src/client/inputhandler.cpp +++ b/src/client/inputhandler.cpp @@ -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"); diff --git a/src/client/keys.h b/src/client/keys.h index 28c6574b..50d3d194 100644 --- a/src/client/keys.h +++ b/src/client/keys.h @@ -47,7 +47,7 @@ public: CONSOLE, MINIMAP, FREEMOVE, - PITCHFLY, + PITCHMOVE, FASTMOVE, NOCLIP, HOTBAR_PREV, diff --git a/src/client/localplayer.cpp b/src/client/localplayer.cpp index c15c9093..dbb50d39 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() diff --git a/src/client/localplayer.h b/src/client/localplayer.h index 28404aa0..b1fc1fbc 100644 --- a/src/client/localplayer.h +++ b/src/client/localplayer.h @@ -62,6 +62,7 @@ public: 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; diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index b061b684..daa01592 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -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"); diff --git a/src/player.cpp b/src/player.cpp index f00eb082..9beeab74 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -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"); diff --git a/src/player.h b/src/player.h index 9af6e5ca..05b6fcbb 100644 --- a/src/player.h +++ b/src/player.h @@ -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();