summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2011-06-26 15:45:13 +0300
committerPerttu Ahola <celeron55@gmail.com>2011-06-26 15:45:13 +0300
commit3b098fd5dc1a3e05d671b3ec1a9acb20a036b88f (patch)
tree265a17e8531a57bff10b5c53d84b4c05fef3f921
parentc1ceabef717d4461cab8832fe75068c7c14cb9b5 (diff)
downloadminetest-3b098fd5dc1a3e05d671b3ec1a9acb20a036b88f.tar.gz
minetest-3b098fd5dc1a3e05d671b3ec1a9acb20a036b88f.tar.bz2
minetest-3b098fd5dc1a3e05d671b3ec1a9acb20a036b88f.zip
improved player fall damage detection
-rw-r--r--src/player.cpp38
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)