From: Paramat Date: Sat, 7 Jul 2018 20:00:31 +0000 (+0100) Subject: Boats: Properly use 'dtime' for consistent responsiveness X-Git-Tag: 5.0.0~62 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=5c8bd349577f3967ab541a5da7f3a5f6f2ff5971;p=oweals%2Fminetest_game.git 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. --- 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