Boats: Properly use 'dtime' for consistent responsiveness
authorParamat <paramat@users.noreply.github.com>
Sat, 7 Jul 2018 20:00:31 +0000 (21:00 +0100)
committerGitHub <noreply@github.com>
Sat, 7 Jul 2018 20:00:31 +0000 (21:00 +0100)
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

index 3d781b730d529dbb883446e41c9d5a182496b132..da0f463d7b284d5bb6bb62710b5e2eed245b6694 100644 (file)
@@ -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