diff options
author | Loic Blot <loic.blot@unix-experience.fr> | 2016-02-14 17:45:06 +0100 |
---|---|---|
committer | Loic Blot <loic.blot@unix-experience.fr> | 2016-02-14 17:52:10 +0100 |
commit | 3a74b84007f2c0f0690524459cc935616f8805d2 (patch) | |
tree | 2f2a8072fde9f3b451eaa2e2ccf3d42c6b475822 /src/localplayer.cpp | |
parent | cfc8e447595db0351754a2eae29a18918742d29d (diff) | |
download | minetest-3a74b84007f2c0f0690524459cc935616f8805d2.tar.gz minetest-3a74b84007f2c0f0690524459cc935616f8805d2.tar.bz2 minetest-3a74b84007f2c0f0690524459cc935616f8805d2.zip |
Player::accelerateHorizontal/Vertical should be member of LocalPlayer
Diffstat (limited to 'src/localplayer.cpp')
-rw-r--r-- | src/localplayer.cpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/localplayer.cpp b/src/localplayer.cpp index 60aec95d4..524c6272e 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -622,3 +622,36 @@ v3s16 LocalPlayer::getStandingNodePos() return floatToInt(getPosition() - v3f(0, BS, 0), BS); } +// Horizontal acceleration (X and Z), Y direction is ignored +void LocalPlayer::accelerateHorizontal(const v3f &target_speed, const f32 max_increase) +{ + if (max_increase == 0) + return; + + v3f d_wanted = target_speed - m_speed; + d_wanted.Y = 0; + f32 dl = d_wanted.getLength(); + if (dl > max_increase) + dl = max_increase; + + v3f d = d_wanted.normalize() * dl; + + m_speed.X += d.X; + m_speed.Z += d.Z; +} + +// Vertical acceleration (Y), X and Z directions are ignored +void LocalPlayer::accelerateVertical(const v3f &target_speed, const f32 max_increase) +{ + if (max_increase == 0) + return; + + f32 d_wanted = target_speed.Y - m_speed.Y; + if (d_wanted > max_increase) + d_wanted = max_increase; + else if (d_wanted < -max_increase) + d_wanted = -max_increase; + + m_speed.Y += d_wanted; +} + |