summaryrefslogtreecommitdiff
path: root/src/localplayer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/localplayer.cpp')
-rw-r--r--src/localplayer.cpp35
1 files changed, 14 insertions, 21 deletions
diff --git a/src/localplayer.cpp b/src/localplayer.cpp
index ee9b41c58..9c70c8b2f 100644
--- a/src/localplayer.cpp
+++ b/src/localplayer.cpp
@@ -35,6 +35,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
LocalPlayer::LocalPlayer(IGameDef *gamedef):
Player(gamedef),
+ parent(0),
isAttached(false),
overridePosition(v3f(0,0,0)),
last_position(v3f(0,0,0)),
@@ -388,7 +389,8 @@ void LocalPlayer::applyControl(float dtime)
bool free_move = fly_allowed && g_settings->getBool("free_move");
bool fast_move = fast_allowed && g_settings->getBool("fast_move");
- bool fast_or_aux1_descends = (fast_move && control.aux1) || (fast_move && g_settings->getBool("aux1_descends"));
+ // 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 && !g_settings->getBool("aux1_descends");
bool continuous_forward = g_settings->getBool("continuous_forward");
// Whether superspeed mode is used or not
@@ -417,14 +419,12 @@ void LocalPlayer::applyControl(float dtime)
}
else if(in_liquid || in_liquid_stable)
{
- // Always use fast when aux1_descends & fast_move are enabled in liquid, since the aux1 button would mean both turbo and "swim down" causing a conflict
- speedV.Y = -movement_speed_fast;
+ speedV.Y = -movement_speed_walk;
swimming_vertical = true;
}
else if(is_climbing)
{
- // Always use fast when aux1_descends & fast_move are enabled when climbing, since the aux1 button would mean both turbo and "descend" causing a conflict
- speedV.Y = -movement_speed_fast;
+ speedV.Y = -movement_speed_climb;
}
else
{
@@ -461,8 +461,7 @@ void LocalPlayer::applyControl(float dtime)
}
else if(in_liquid || in_liquid_stable)
{
- if(fast_or_aux1_descends)
- // Always use fast when aux1_descends & fast_move are enabled in liquid, since the aux1 button would mean both turbo and "swim down" causing a conflict
+ if(fast_climb)
speedV.Y = -movement_speed_fast;
else
speedV.Y = -movement_speed_walk;
@@ -470,8 +469,7 @@ void LocalPlayer::applyControl(float dtime)
}
else if(is_climbing)
{
- if(fast_or_aux1_descends)
- // Always use fast when aux1_descends & fast_move are enabled when climbing, since the aux1 button would mean both turbo and "descend" causing a conflict
+ if(fast_climb)
speedV.Y = -movement_speed_fast;
else
speedV.Y = -movement_speed_climb;
@@ -528,7 +526,7 @@ void LocalPlayer::applyControl(float dtime)
v3f speedJ = getSpeed();
if(speedJ.Y >= -0.5 * BS)
{
- speedJ.Y = movement_speed_jump;
+ speedJ.Y = movement_speed_jump * physics_override_jump;
setSpeed(speedJ);
MtEvent *e = new SimpleTriggerEvent("PlayerJump");
@@ -537,8 +535,7 @@ void LocalPlayer::applyControl(float dtime)
}
else if(in_liquid)
{
- if(fast_or_aux1_descends)
- // Always use fast when aux1_descends & fast_move are enabled in liquid, since the aux1 button would mean both turbo and "swim down" causing a conflict
+ if(fast_climb)
speedV.Y = movement_speed_fast;
else
speedV.Y = movement_speed_walk;
@@ -546,8 +543,7 @@ void LocalPlayer::applyControl(float dtime)
}
else if(is_climbing)
{
- if(fast_or_aux1_descends)
- // Always use fast when aux1_descends & fast_move are enabled when climbing, since the aux1 button would mean both turbo and "descend" causing a conflict
+ if(fast_climb)
speedV.Y = movement_speed_fast;
else
speedV.Y = movement_speed_climb;
@@ -555,7 +551,7 @@ void LocalPlayer::applyControl(float dtime)
}
// The speed of the player (Y is ignored)
- if(superspeed || (is_climbing && fast_or_aux1_descends) || ((in_liquid || in_liquid_stable) && fast_or_aux1_descends))
+ if(superspeed || (is_climbing && fast_climb) || ((in_liquid || in_liquid_stable) && fast_climb))
speedH = speedH.normalize() * movement_speed_fast;
else if(control.sneak && !free_move && !in_liquid && !in_liquid_stable)
speedH = speedH.normalize() * movement_speed_crouch;
@@ -574,17 +570,14 @@ void LocalPlayer::applyControl(float dtime)
incH = movement_acceleration_air * BS * dtime;
incV = 0; // No vertical acceleration in air
}
- else if(superspeed || (fast_move && control.aux1))
- incH = incV = movement_acceleration_fast * BS * dtime;
- else if ((in_liquid || in_liquid_stable) && fast_or_aux1_descends)
- // Always use fast when aux1_descends & fast_move are enabled in liquid, since the aux1 button would mean both turbo and "swim down" causing a conflict
+ else if (superspeed || (is_climbing && fast_climb) || ((in_liquid || in_liquid_stable) && fast_climb))
incH = incV = movement_acceleration_fast * BS * dtime;
else
incH = incV = movement_acceleration_default * BS * dtime;
// Accelerate to target speed with maximum increment
- accelerateHorizontal(speedH, incH);
- accelerateVertical(speedV, incV);
+ accelerateHorizontal(speedH * physics_override_speed, incH * physics_override_speed);
+ accelerateVertical(speedV * physics_override_speed, incV * physics_override_speed);
}
v3s16 LocalPlayer::getStandingNodePos()