mirror of
https://github.com/luanti-org/luanti.git
synced 2025-10-05 19:31:04 +00:00
Extend pitch fly mode to swimming (#7943)
This commit is contained in:
parent
7d7ccf5c0f
commit
aa5ec2ec02
12 changed files with 38 additions and 28 deletions
|
@ -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
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -47,7 +47,7 @@ public:
|
|||
CONSOLE,
|
||||
MINIMAP,
|
||||
FREEMOVE,
|
||||
PITCHFLY,
|
||||
PITCHMOVE,
|
||||
FASTMOVE,
|
||||
NOCLIP,
|
||||
HOTBAR_PREV,
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue