Fix regression in automatic_face_movement_max_rotation_per_sec

Values <= 0 should make the yaw change instant. This worked in 0.4.16 but was broken in 089f59458286.

Per bug report by oil_boi_minetest on IRC.
This commit is contained in:
Pedro Gimeno 2019-04-04 18:53:55 +02:00 committed by Paramat
parent 007ce24a11
commit 12a63021d0
2 changed files with 18 additions and 7 deletions

@ -1000,10 +1000,16 @@ void GenericCAO::step(float dtime, ClientEnvironment *env)
float target_yaw = atan2(m_velocity.Z, m_velocity.X) * 180 / M_PI float target_yaw = atan2(m_velocity.Z, m_velocity.X) * 180 / M_PI
+ m_prop.automatic_face_movement_dir_offset; + m_prop.automatic_face_movement_dir_offset;
float max_rotation_delta = float max_rotation_per_sec =
dtime * m_prop.automatic_face_movement_max_rotation_per_sec; m_prop.automatic_face_movement_max_rotation_per_sec;
if (max_rotation_per_sec > 0) {
float max_rotation_delta = dtime * max_rotation_per_sec;
wrappedApproachShortest(m_rotation.Y, target_yaw, max_rotation_delta, 360.f); wrappedApproachShortest(m_rotation.Y, target_yaw, max_rotation_delta, 360.f);
} else
// Negative values of ...max_rotation_per_sec mean disabled.
m_rotation.Y = target_yaw;
rot_translator.val_current = m_rotation; rot_translator.val_current = m_rotation;
updateNodePos(); updateNodePos();

@ -457,11 +457,16 @@ void LuaEntitySAO::step(float dtime, bool send_recommended)
float target_yaw = atan2(m_velocity.Z, m_velocity.X) * 180 / M_PI float target_yaw = atan2(m_velocity.Z, m_velocity.X) * 180 / M_PI
+ m_prop.automatic_face_movement_dir_offset; + m_prop.automatic_face_movement_dir_offset;
float max_rotation_delta =
dtime * m_prop.automatic_face_movement_max_rotation_per_sec;
float max_rotation_per_sec =
m_prop.automatic_face_movement_max_rotation_per_sec;
if (max_rotation_per_sec > 0) {
float max_rotation_delta = dtime * max_rotation_per_sec;
m_rotation.Y = wrapDegrees_0_360(m_rotation.Y); m_rotation.Y = wrapDegrees_0_360(m_rotation.Y);
wrappedApproachShortest(m_rotation.Y, target_yaw, max_rotation_delta, 360.f); wrappedApproachShortest(m_rotation.Y, target_yaw, max_rotation_delta, 360.f);
} else
// Negative values of ...max_rotation_per_sec mean disabled.
m_rotation.Y = target_yaw;
} }
} }