mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Add physics overrides for walk speed and Fast Mode (#14475)
Co-authored-by: Wuzzy <Wuzzy@disroot.org>
This commit is contained in:
parent
c044a3c1ca
commit
2bdd0a6bdb
8 changed files with 94 additions and 33 deletions
|
@ -586,6 +586,9 @@ void LocalPlayer::applyControl(float dtime, Environment *env)
|
|||
// Whether superspeed mode is used or not
|
||||
bool superspeed = false;
|
||||
|
||||
const f32 speed_walk = movement_speed_walk * physics_override.speed_walk;
|
||||
const f32 speed_fast = movement_speed_fast * physics_override.speed_fast;
|
||||
|
||||
if (always_fly_fast && free_move && fast_move)
|
||||
superspeed = true;
|
||||
|
||||
|
@ -600,11 +603,11 @@ void LocalPlayer::applyControl(float dtime, Environment *env)
|
|||
if (free_move) {
|
||||
// In free movement mode, aux1 descends
|
||||
if (fast_move)
|
||||
speedV.Y = -movement_speed_fast;
|
||||
speedV.Y = -speed_fast;
|
||||
else
|
||||
speedV.Y = -movement_speed_walk;
|
||||
speedV.Y = -speed_walk;
|
||||
} else if ((in_liquid || in_liquid_stable) && !m_disable_descend) {
|
||||
speedV.Y = -movement_speed_walk;
|
||||
speedV.Y = -speed_walk;
|
||||
swimming_vertical = true;
|
||||
} else if (is_climbing && !m_disable_descend) {
|
||||
speedV.Y = -movement_speed_climb * physics_override.speed_climb;
|
||||
|
@ -632,18 +635,18 @@ void LocalPlayer::applyControl(float dtime, Environment *env)
|
|||
if (free_move) {
|
||||
// In free movement mode, sneak descends
|
||||
if (fast_move && (control.aux1 || always_fly_fast))
|
||||
speedV.Y = -movement_speed_fast;
|
||||
speedV.Y = -speed_fast;
|
||||
else
|
||||
speedV.Y = -movement_speed_walk;
|
||||
speedV.Y = -speed_walk;
|
||||
} else if ((in_liquid || in_liquid_stable) && !m_disable_descend) {
|
||||
if (fast_climb)
|
||||
speedV.Y = -movement_speed_fast;
|
||||
speedV.Y = -speed_fast;
|
||||
else
|
||||
speedV.Y = -movement_speed_walk;
|
||||
speedV.Y = -speed_walk;
|
||||
swimming_vertical = true;
|
||||
} else if (is_climbing && !m_disable_descend) {
|
||||
if (fast_climb)
|
||||
speedV.Y = -movement_speed_fast;
|
||||
speedV.Y = -speed_fast;
|
||||
else
|
||||
speedV.Y = -movement_speed_climb * physics_override.speed_climb;
|
||||
}
|
||||
|
@ -666,14 +669,14 @@ void LocalPlayer::applyControl(float dtime, Environment *env)
|
|||
// Don't fly up if sneak key is pressed
|
||||
if (player_settings.aux1_descends || always_fly_fast) {
|
||||
if (fast_move)
|
||||
speedV.Y = movement_speed_fast;
|
||||
speedV.Y = speed_fast;
|
||||
else
|
||||
speedV.Y = movement_speed_walk;
|
||||
speedV.Y = speed_walk;
|
||||
} else {
|
||||
if (fast_move && control.aux1)
|
||||
speedV.Y = movement_speed_fast;
|
||||
speedV.Y = speed_fast;
|
||||
else
|
||||
speedV.Y = movement_speed_walk;
|
||||
speedV.Y = speed_walk;
|
||||
}
|
||||
}
|
||||
} else if (m_can_jump) {
|
||||
|
@ -690,13 +693,13 @@ void LocalPlayer::applyControl(float dtime, Environment *env)
|
|||
}
|
||||
} else if (in_liquid && !m_disable_jump && !control.sneak) {
|
||||
if (fast_climb)
|
||||
speedV.Y = movement_speed_fast;
|
||||
speedV.Y = speed_fast;
|
||||
else
|
||||
speedV.Y = movement_speed_walk;
|
||||
speedV.Y = speed_walk;
|
||||
swimming_vertical = true;
|
||||
} else if (is_climbing && !m_disable_jump && !control.sneak) {
|
||||
if (fast_climb)
|
||||
speedV.Y = movement_speed_fast;
|
||||
speedV.Y = speed_fast;
|
||||
else
|
||||
speedV.Y = movement_speed_climb * physics_override.speed_climb;
|
||||
}
|
||||
|
@ -705,11 +708,11 @@ void LocalPlayer::applyControl(float dtime, Environment *env)
|
|||
// The speed of the player (Y is ignored)
|
||||
if (superspeed || (is_climbing && fast_climb) ||
|
||||
((in_liquid || in_liquid_stable) && fast_climb))
|
||||
speedH = speedH.normalize() * movement_speed_fast;
|
||||
speedH = speedH.normalize() * speed_fast;
|
||||
else if (control.sneak && !free_move && !in_liquid && !in_liquid_stable)
|
||||
speedH = speedH.normalize() * movement_speed_crouch * physics_override.speed_crouch;
|
||||
else
|
||||
speedH = speedH.normalize() * movement_speed_walk;
|
||||
speedH = speedH.normalize() * speed_walk;
|
||||
|
||||
speedH *= control.movement_speed; /* Apply analog input */
|
||||
|
||||
|
@ -720,13 +723,13 @@ void LocalPlayer::applyControl(float dtime, Environment *env)
|
|||
(!free_move && m_can_jump && control.jump)) {
|
||||
// Jumping and falling
|
||||
if (superspeed || (fast_move && control.aux1))
|
||||
incH = movement_acceleration_fast * BS * dtime;
|
||||
incH = movement_acceleration_fast * physics_override.acceleration_fast * BS * dtime;
|
||||
else
|
||||
incH = movement_acceleration_air * physics_override.acceleration_air * BS * dtime;
|
||||
incV = 0.0f; // No vertical acceleration in air
|
||||
} else if (superspeed || (is_climbing && fast_climb) ||
|
||||
((in_liquid || in_liquid_stable) && fast_climb)) {
|
||||
incH = incV = movement_acceleration_fast * BS * dtime;
|
||||
incH = incV = movement_acceleration_fast * physics_override.acceleration_fast * BS * dtime;
|
||||
} else {
|
||||
incH = incV = movement_acceleration_default * physics_override.acceleration_default * BS * dtime;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue