Skip to content

Commit 5c8bd34

Browse files
authoredJul 7, 2018
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.
1 parent 7e1b07f commit 5c8bd34

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed
 

‎mods/boats/init.lua

+9-9
Original file line numberDiff line numberDiff line change
@@ -141,26 +141,26 @@ function boat.on_step(self, dtime)
141141
"[boats] Cruise on")
142142
end
143143
elseif ctrl.down then
144-
self.v = self.v - 0.1
144+
self.v = self.v - dtime * 1.8
145145
if self.auto then
146146
self.auto = false
147147
minetest.chat_send_player(driver_name,
148148
"[boats] Cruise off")
149149
end
150150
elseif ctrl.up or self.auto then
151-
self.v = self.v + 0.1
151+
self.v = self.v + dtime * 1.8
152152
end
153153
if ctrl.left then
154-
if self.v < 0 then
155-
self.object:set_yaw(self.object:get_yaw() - (1 + dtime) * 0.03)
154+
if self.v < -0.001 then
155+
self.object:set_yaw(self.object:get_yaw() - dtime * 0.9)
156156
else
157-
self.object:set_yaw(self.object:get_yaw() + (1 + dtime) * 0.03)
157+
self.object:set_yaw(self.object:get_yaw() + dtime * 0.9)
158158
end
159159
elseif ctrl.right then
160-
if self.v < 0 then
161-
self.object:set_yaw(self.object:get_yaw() + (1 + dtime) * 0.03)
160+
if self.v < -0.001 then
161+
self.object:set_yaw(self.object:get_yaw() + dtime * 0.9)
162162
else
163-
self.object:set_yaw(self.object:get_yaw() - (1 + dtime) * 0.03)
163+
self.object:set_yaw(self.object:get_yaw() - dtime * 0.9)
164164
end
165165
end
166166
end
@@ -170,7 +170,7 @@ function boat.on_step(self, dtime)
170170
return
171171
end
172172
local s = get_sign(self.v)
173-
self.v = self.v - 0.02 * s
173+
self.v = self.v - dtime * 0.6 * s
174174
if s ~= get_sign(self.v) then
175175
self.object:set_velocity({x = 0, y = 0, z = 0})
176176
self.v = 0

0 commit comments

Comments
 (0)
Please sign in to comment.