diff options
author | Perttu Ahola <celeron55@gmail.com> | 2011-06-26 15:45:13 +0300 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2011-06-26 15:45:13 +0300 |
commit | 3b098fd5dc1a3e05d671b3ec1a9acb20a036b88f (patch) | |
tree | 265a17e8531a57bff10b5c53d84b4c05fef3f921 /src | |
parent | c1ceabef717d4461cab8832fe75068c7c14cb9b5 (diff) | |
download | minetest-3b098fd5dc1a3e05d671b3ec1a9acb20a036b88f.tar.gz minetest-3b098fd5dc1a3e05d671b3ec1a9acb20a036b88f.tar.bz2 minetest-3b098fd5dc1a3e05d671b3ec1a9acb20a036b88f.zip |
improved player fall damage detection
Diffstat (limited to 'src')
-rw-r--r-- | src/player.cpp | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/src/player.cpp b/src/player.cpp index 198eca957..6bacb088d 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=("<<oldpos_i.X<<","<<oldpos_i.Y<<"," <<oldpos_i.Z<<")"<<std::endl;*/ @@ -405,8 +407,23 @@ void LocalPlayer::move(f32 dtime, Map &map, f32 pos_max_d, if(position.Y < min_y) { position.Y = min_y; + + //v3f old_speed = m_speed; + if(m_speed.Y < 0) m_speed.Y = 0; + + /*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); + } + }*/ } } @@ -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) |