From 5c8bd349577f3967ab541a5da7f3a5f6f2ff5971 Mon Sep 17 00:00:00 2001 From: Paramat Date: Sat, 7 Jul 2018 21:00:31 +0100 Subject: [PATCH] Boats: Properly use 'dtime' for consistent responsiveness Previously, boat responsiveness varied greatly depending on server lag and singleplayer / multiplayer. 'dtime' is the time from the last execution of the boat entity 'on step' function, so must multiply acceleration and yaw change. Retune acceleration, turn rate and drift deceleration. Make reversed turn only happen with significant backwards speed. --- mods/boats/init.lua | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/mods/boats/init.lua b/mods/boats/init.lua index 3d781b73..da0f463d 100644 --- a/mods/boats/init.lua +++ b/mods/boats/init.lua @@ -141,26 +141,26 @@ function boat.on_step(self, dtime) "[boats] Cruise on") end elseif ctrl.down then - self.v = self.v - 0.1 + self.v = self.v - dtime * 1.8 if self.auto then self.auto = false minetest.chat_send_player(driver_name, "[boats] Cruise off") end elseif ctrl.up or self.auto then - self.v = self.v + 0.1 + self.v = self.v + dtime * 1.8 end if ctrl.left then - if self.v < 0 then - self.object:set_yaw(self.object:get_yaw() - (1 + dtime) * 0.03) + if self.v < -0.001 then + self.object:set_yaw(self.object:get_yaw() - dtime * 0.9) else - self.object:set_yaw(self.object:get_yaw() + (1 + dtime) * 0.03) + self.object:set_yaw(self.object:get_yaw() + dtime * 0.9) end elseif ctrl.right then - if self.v < 0 then - self.object:set_yaw(self.object:get_yaw() + (1 + dtime) * 0.03) + if self.v < -0.001 then + self.object:set_yaw(self.object:get_yaw() + dtime * 0.9) else - self.object:set_yaw(self.object:get_yaw() - (1 + dtime) * 0.03) + self.object:set_yaw(self.object:get_yaw() - dtime * 0.9) end end end @@ -170,7 +170,7 @@ function boat.on_step(self, dtime) return end local s = get_sign(self.v) - self.v = self.v - 0.02 * s + self.v = self.v - dtime * 0.6 * s if s ~= get_sign(self.v) then self.object:set_velocity({x = 0, y = 0, z = 0}) self.v = 0