forked from Mirrorlandia_minetest/minetest
Fix the bouncy node related stuff a bit
This commit is contained in:
parent
3b43c69df4
commit
c129b3852b
@ -2033,10 +2033,18 @@ void ClientEnvironment::step(float dtime)
|
|||||||
i = player_collisions.begin();
|
i = player_collisions.begin();
|
||||||
i != player_collisions.end(); i++)
|
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 pre_factor = 1; // 1 hp per node/s
|
||||||
f32 tolerance = BS*14; // 5 without damage
|
f32 tolerance = BS*14; // 5 without damage
|
||||||
f32 post_factor = 1; // 1 hp per node/s
|
f32 post_factor = 1; // 1 hp per node/s
|
||||||
CollisionInfo &info = *i;
|
|
||||||
if(info.type == COLLISION_NODE)
|
if(info.type == COLLISION_NODE)
|
||||||
{
|
{
|
||||||
const ContentFeatures &f = m_gamedef->ndef()->
|
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");
|
int addp = itemgroup_get(f.groups, "fall_damage_add_percent");
|
||||||
pre_factor = 1.0 + (float)addp/100.0;
|
pre_factor = 1.0 + (float)addp/100.0;
|
||||||
}
|
}
|
||||||
float speed = (info.new_speed - info.old_speed).getLength();
|
float speed = pre_factor * speed_diff.getLength();
|
||||||
speed *= pre_factor;
|
|
||||||
if(speed > tolerance)
|
if(speed > tolerance)
|
||||||
{
|
{
|
||||||
f32 damage_f = (speed - tolerance)/BS * post_factor;
|
f32 damage_f = (speed - tolerance)/BS * post_factor;
|
||||||
|
@ -486,9 +486,8 @@ void LocalPlayer::applyControl(float dtime)
|
|||||||
v3f speed = getSpeed();
|
v3f speed = getSpeed();
|
||||||
if(speed.Y >= -0.5*BS)
|
if(speed.Y >= -0.5*BS)
|
||||||
{
|
{
|
||||||
speed.Y += 6.5*BS;
|
speed.Y = 6.5*BS;
|
||||||
setSpeed(speed);
|
setSpeed(speed);
|
||||||
m_can_jump = false;
|
|
||||||
|
|
||||||
MtEvent *e = new SimpleTriggerEvent("PlayerJump");
|
MtEvent *e = new SimpleTriggerEvent("PlayerJump");
|
||||||
m_gamedef->event()->put(e);
|
m_gamedef->event()->put(e);
|
||||||
|
Loading…
Reference in New Issue
Block a user