From 3b098fd5dc1a3e05d671b3ec1a9acb20a036b88f Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Sun, 26 Jun 2011 15:45:13 +0300 Subject: [PATCH] improved player fall damage detection --- src/player.cpp | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/src/player.cpp b/src/player.cpp index 198eca95..6bacb088 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -309,6 +309,8 @@ void LocalPlayer::move(f32 dtime, Map &map, f32 pos_max_d, v3f oldpos = position; v3s16 oldpos_i = floatToInt(oldpos, BS); + v3f old_speed = m_speed; + /*std::cout<<"oldpos_i=("<push_back(info); + } + }*/ } } @@ -557,13 +574,13 @@ void LocalPlayer::move(f32 dtime, Map &map, f32 pos_max_d, */ if(other_axes_overlap && main_axis_collides) { - v3f old_speed = m_speed; + //v3f old_speed = m_speed; m_speed -= m_speed.dotProduct(dirs[i]) * dirs[i]; position -= position.dotProduct(dirs[i]) * dirs[i]; position += oldpos.dotProduct(dirs[i]) * dirs[i]; - if(collision_info) + /*if(collision_info) { // Report fall collision if(old_speed.Y < m_speed.Y - 0.1) @@ -573,7 +590,7 @@ void LocalPlayer::move(f32 dtime, Map &map, f32 pos_max_d, info.speed = m_speed.Y - old_speed.Y; collision_info->push_back(info); } - } + }*/ } } @@ -656,6 +673,21 @@ void LocalPlayer::move(f32 dtime, Map &map, f32 pos_max_d, Set new position */ setPosition(position); + + /* + Report collisions + */ + if(collision_info) + { + // Report fall collision + if(old_speed.Y < m_speed.Y - 0.1) + { + CollisionInfo info; + info.t = COLLISION_FALL; + info.speed = m_speed.Y - old_speed.Y; + collision_info->push_back(info); + } + } } void LocalPlayer::move(f32 dtime, Map &map, f32 pos_max_d)