mirror of
https://github.com/minetest/minetest.git
synced 2024-12-23 22:52:25 +01:00
Apply camera smoothing to 'air stepheight' (#10025)
Recent changes to collision code have changed the behaviour of the 'touching_ground' bool in movement code. This had the effect of disabling camera smoothing when 'air stepheight' occurred when jumping onto a node while pressing forwards against the node, causing an unpleasant sharp camera movement. Rewrite the conditions for camera smoothing such that it is applied when jumping.
This commit is contained in:
parent
da71313e1d
commit
dc6318b84a
@ -342,9 +342,13 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime, f32 tool_r
|
||||
if (player->getParent())
|
||||
player_position = player->getParent()->getPosition();
|
||||
|
||||
if(player->touching_ground &&
|
||||
player_position.Y > old_player_position.Y)
|
||||
{
|
||||
// Smooth the camera movement when the player instantly moves upward due to stepheight.
|
||||
// To smooth the 'not touching_ground' stepheight, smoothing is necessary when jumping
|
||||
// or swimming (for when moving from liquid to land).
|
||||
// Disable smoothing if climbing or flying, to avoid upwards offset of player model
|
||||
// when seen in 3rd person view.
|
||||
bool flying = g_settings->getBool("free_move") && m_client->checkLocalPrivilege("fly");
|
||||
if (player_position.Y > old_player_position.Y && !player->is_climbing && !flying) {
|
||||
f32 oldy = old_player_position.Y;
|
||||
f32 newy = player_position.Y;
|
||||
f32 t = std::exp(-23 * frametime);
|
||||
@ -607,14 +611,11 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime, f32 tool_r
|
||||
const bool walking = movement_XZ && player->touching_ground;
|
||||
const bool swimming = (movement_XZ || player->swimming_vertical) && player->in_liquid;
|
||||
const bool climbing = movement_Y && player->is_climbing;
|
||||
if ((walking || swimming || climbing) &&
|
||||
(!g_settings->getBool("free_move") || !m_client->checkLocalPrivilege("fly"))) {
|
||||
if ((walking || swimming || climbing) && !flying) {
|
||||
// Start animation
|
||||
m_view_bobbing_state = 1;
|
||||
m_view_bobbing_speed = MYMIN(speed.getLength(), 70);
|
||||
}
|
||||
else if (m_view_bobbing_state == 1)
|
||||
{
|
||||
} else if (m_view_bobbing_state == 1) {
|
||||
// Stop animation
|
||||
m_view_bobbing_state = 2;
|
||||
m_view_bobbing_speed = 60;
|
||||
|
Loading…
Reference in New Issue
Block a user