Skip to content

Commit

Permalink
Boats: Properly use 'dtime' for consistent responsiveness
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
paramat committed Jul 7, 2018
1 parent 7e1b07f commit 5c8bd34
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions mods/boats/init.lua
Expand Up @@ -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
Expand All @@ -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
Expand Down

0 comments on commit 5c8bd34

Please sign in to comment.