From 369177aa8015d75f4cb18c65f435efc1f2a9e05a Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Sun, 16 Oct 2011 18:45:17 +0300 Subject: Better player damage prevention when falling on unloaded blocks, not involving getting stuck in there. --- src/player.cpp | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) (limited to 'src/player.cpp') diff --git a/src/player.cpp b/src/player.cpp index 6a774251c..732911828 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -33,7 +33,6 @@ Player::Player(): in_water_stable(false), is_climbing(false), swimming_up(false), - is_frozen(false), inventory_backup(NULL), craftresult_is_preview(true), hp(20), @@ -335,19 +334,8 @@ void LocalPlayer::move(f32 dtime, Map &map, f32 pos_max_d, /* Calculate new position */ - if(is_frozen) { - // Still move very slowly so as not to feel all completely stuck - position += m_speed * dtime * 0.001; - } - else { - position += m_speed * dtime; - } + position += m_speed * dtime; - /* - If the player enters an unloaded chunk this is set to true. - */ - is_frozen = false; - // Skip collision detection if a special movement mode is used bool free_move = g_settings->getBool("free_move"); if(free_move) @@ -505,6 +493,8 @@ void LocalPlayer::move(f32 dtime, Map &map, f32 pos_max_d, < nodebox = getNodeBox(v3s16(x,y,z), BS); @@ -546,6 +535,8 @@ void LocalPlayer::move(f32 dtime, Map &map, f32 pos_max_d, && nodebox.MinEdge.Z+d < playerbox.MaxEdge.Z ){ touching_ground = true; + if(is_unloaded) + standing_on_unloaded = true; } // If player doesn't intersect with node, ignore node. @@ -727,7 +718,7 @@ void LocalPlayer::move(f32 dtime, Map &map, f32 pos_max_d, if(collision_info) { // Report fall collision - if(old_speed.Y < m_speed.Y - 0.1) + if(old_speed.Y < m_speed.Y - 0.1 && !standing_on_unloaded) { CollisionInfo info; info.t = COLLISION_FALL; -- cgit v1.2.3