1
0
mirror of https://github.com/moparisthebest/minetest synced 2024-12-22 15:48:48 -05:00

Fix the bouncy node related stuff a bit

This commit is contained in:
Perttu Ahola 2012-09-01 13:21:52 +03:00
parent 3b43c69df4
commit c129b3852b
2 changed files with 11 additions and 5 deletions

View File

@ -2033,10 +2033,18 @@ void ClientEnvironment::step(float dtime)
i = player_collisions.begin();
i != player_collisions.end(); i++)
{
CollisionInfo &info = *i;
v3f speed_diff = info.new_speed - info.old_speed;;
// Handle only fall damage
// (because otherwise walking against something in fast_move kills you)
if(speed_diff.Y < 0 || info.old_speed.Y >= 0)
continue;
// Get rid of other components
speed_diff.X = 0;
speed_diff.Z = 0;
f32 pre_factor = 1; // 1 hp per node/s
f32 tolerance = BS*14; // 5 without damage
f32 post_factor = 1; // 1 hp per node/s
CollisionInfo &info = *i;
if(info.type == COLLISION_NODE)
{
const ContentFeatures &f = m_gamedef->ndef()->
@ -2045,8 +2053,7 @@ void ClientEnvironment::step(float dtime)
int addp = itemgroup_get(f.groups, "fall_damage_add_percent");
pre_factor = 1.0 + (float)addp/100.0;
}
float speed = (info.new_speed - info.old_speed).getLength();
speed *= pre_factor;
float speed = pre_factor * speed_diff.getLength();
if(speed > tolerance)
{
f32 damage_f = (speed - tolerance)/BS * post_factor;

View File

@ -486,9 +486,8 @@ 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);