summaryrefslogtreecommitdiff
path: root/src/localplayer.cpp
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2012-09-01 12:58:37 +0300
committerPerttu Ahola <celeron55@gmail.com>2012-09-01 12:58:37 +0300
commit3b43c69df4ce7d68aebb4bd02aaa4aca18b9afad (patch)
tree60f6b5b30e8f18eacc71d812a30776641c32999c /src/localplayer.cpp
parentb17d3e7ad7e59a10df50277c15174529f20d0bed (diff)
downloadminetest-3b43c69df4ce7d68aebb4bd02aaa4aca18b9afad.tar.gz
minetest-3b43c69df4ce7d68aebb4bd02aaa4aca18b9afad.tar.bz2
minetest-3b43c69df4ce7d68aebb4bd02aaa4aca18b9afad.zip
Add bouncy node group
Diffstat (limited to 'src/localplayer.cpp')
-rw-r--r--src/localplayer.cpp24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/localplayer.cpp b/src/localplayer.cpp
index 16111629e..15b6fd15d 100644
--- a/src/localplayer.cpp
+++ b/src/localplayer.cpp
@@ -189,7 +189,7 @@ void LocalPlayer::move(f32 dtime, Map &map, f32 pos_max_d,
bool touching_ground_was = touching_ground;
touching_ground = result.touching_ground;
- bool standing_on_unloaded = result.standing_on_unloaded;
+ //bool standing_on_unloaded = result.standing_on_unloaded;
/*
Check the nodes under the player to see from which node the
@@ -282,18 +282,25 @@ void LocalPlayer::move(f32 dtime, Map &map, f32 pos_max_d,
/*
Report collisions
*/
+ bool bouncy_jump = false;
if(collision_info)
{
- // Report fall collision
- if(old_speed.Y < m_speed.Y - 0.1 && !standing_on_unloaded)
- {
- CollisionInfo info;
- info.t = COLLISION_FALL;
- info.speed = m_speed.Y - old_speed.Y;
+ for(size_t i=0; i<result.collisions.size(); i++){
+ const CollisionInfo &info = result.collisions[i];
collision_info->push_back(info);
+ if(info.new_speed.Y - info.old_speed.Y > 0.1*BS &&
+ info.bouncy)
+ bouncy_jump = true;
}
}
+ if(bouncy_jump && control.jump){
+ m_speed.Y += 6.5*BS;
+ touching_ground = false;
+ MtEvent *e = new SimpleTriggerEvent("PlayerJump");
+ m_gamedef->event()->put(e);
+ }
+
if(!touching_ground_was && touching_ground){
MtEvent *e = new SimpleTriggerEvent("PlayerRegainGround");
m_gamedef->event()->put(e);
@@ -479,8 +486,9 @@ void LocalPlayer::applyControl(float dtime)
v3f speed = getSpeed();
if(speed.Y >= -0.5*BS)
{
- speed.Y = 6.5*BS;
+ speed.Y += 6.5*BS;
setSpeed(speed);
+ m_can_jump = false;
MtEvent *e = new SimpleTriggerEvent("PlayerJump");
m_gamedef->event()->put(e);