diff options
author | random-geek <35757396+random-geek@users.noreply.github.com> | 2018-12-30 16:07:30 -0800 |
---|---|---|
committer | Paramat <paramat@users.noreply.github.com> | 2018-12-31 00:07:30 +0000 |
commit | aa5ec2ec02f331542dfe40e781c7c93ee4c0c131 (patch) | |
tree | 207960a9115366cc9d1d82cd593dd855b166b173 /src | |
parent | 7d7ccf5c0f3d8689519629282d72b1fea8f4bf30 (diff) | |
download | minetest-aa5ec2ec02f331542dfe40e781c7c93ee4c0c131.tar.gz minetest-aa5ec2ec02f331542dfe40e781c7c93ee4c0c131.tar.bz2 minetest-aa5ec2ec02f331542dfe40e781c7c93ee4c0c131.zip |
Extend pitch fly mode to swimming (#7943)
Diffstat (limited to 'src')
-rw-r--r-- | src/client/clientenvironment.cpp | 3 | ||||
-rw-r--r-- | src/client/game.cpp | 18 | ||||
-rw-r--r-- | src/client/inputhandler.cpp | 2 | ||||
-rw-r--r-- | src/client/keys.h | 2 | ||||
-rw-r--r-- | src/client/localplayer.cpp | 12 | ||||
-rw-r--r-- | src/client/localplayer.h | 1 | ||||
-rw-r--r-- | src/defaultsettings.cpp | 4 | ||||
-rw-r--r-- | src/player.cpp | 2 | ||||
-rw-r--r-- | src/player.h | 4 |
9 files changed, 29 insertions, 19 deletions
diff --git a/src/client/clientenvironment.cpp b/src/client/clientenvironment.cpp index 7c2ec099c..1783e8961 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 06e8eefe3..bd37bd58a 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 2692e9f1e..a79b04a90 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 28c6574ba..50d3d194b 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 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() diff --git a/src/client/localplayer.h b/src/client/localplayer.h index 28404aa01..b1fc1fbc8 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 b061b6845..daa015927 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 f00eb0829..9beeab74e 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 9af6e5cac..05b6fcbb5 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(); |