diff options
Diffstat (limited to 'src/content_sao.cpp')
-rw-r--r-- | src/content_sao.cpp | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/content_sao.cpp b/src/content_sao.cpp index 468a39110..e9b5782a9 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -206,9 +206,12 @@ public: m_speed_f *= pos_max_d / (m_speed_f.getLength()*dtime); v3f pos_f = getBasePosition(); v3f pos_f_old = pos_f; + v3f accel_f = v3f(0,0,0); + f32 stepheight = 0; IGameDef *gamedef = m_env->getGameDef(); moveresult = collisionMoveSimple(&m_env->getMap(), gamedef, - pos_max_d, box, dtime, pos_f, m_speed_f); + pos_max_d, box, stepheight, dtime, + pos_f, m_speed_f, accel_f); if(send_recommended == false) return; @@ -452,16 +455,18 @@ void LuaEntitySAO::step(float dtime, bool send_recommended) box.MaxEdge *= BS; collisionMoveResult moveresult; f32 pos_max_d = BS*0.25; // Distance per iteration - v3f p_pos = getBasePosition(); + f32 stepheight = 0; // Maximum climbable step height + v3f p_pos = m_base_position; v3f p_velocity = m_velocity; + v3f p_acceleration = m_acceleration; IGameDef *gamedef = m_env->getGameDef(); - moveresult = collisionMovePrecise(&m_env->getMap(), gamedef, - pos_max_d, box, dtime, p_pos, p_velocity); + moveresult = collisionMoveSimple(&m_env->getMap(), gamedef, + pos_max_d, box, stepheight, dtime, + p_pos, p_velocity, p_acceleration); // Apply results - setBasePosition(p_pos); + m_base_position = p_pos; m_velocity = p_velocity; - - m_velocity += dtime * m_acceleration; + m_acceleration = p_acceleration; } else { m_base_position += dtime * m_velocity + 0.5 * dtime * dtime * m_acceleration; |