Skip to content

Commit 59dbeeb

Browse files
authored
Boats: Add cruise mode (boat autoforward)
Document controls in README.txt. Optimise 'get yaw' and 'set yaw' code.
1 parent 876a9ca commit 59dbeeb

2 files changed

Lines changed: 37 additions & 8 deletions

File tree

mods/boats/README.txt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,19 @@ Textures: Zeg9 (CC BY-SA 3.0)
1313
Model: thetoon and Zeg9 (CC BY-SA 3.0),
1414
modified by PavelS(SokolovPavel) (CC BY-SA 3.0),
1515
modified by sofar (CC BY-SA 3.0)
16+
17+
Controls
18+
--------
19+
Right mouse button = Enter or exit boat when pointing at boat.
20+
Forward = Speed up.
21+
Slow down when moving backwards.
22+
Forward + backward = Enable cruise mode: Boat will accelerate to maximum forward
23+
speed and remain at that speed without needing to hold the
24+
forward key.
25+
Backward = Slow down.
26+
Speed up when moving backwards.
27+
Disable cruise mode.
28+
Left = Turn to the left.
29+
Turn to the right when moving backwards.
30+
Right = Turn to the right.
31+
Turn to the left when moving backwards.

mods/boats/init.lua

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ local boat = {
4444
driver = nil,
4545
v = 0,
4646
last_v = 0,
47-
removed = false
47+
removed = false,
48+
auto = false
4849
}
4950

5051

@@ -55,6 +56,7 @@ function boat.on_rightclick(self, clicker)
5556
local name = clicker:get_player_name()
5657
if self.driver and clicker == self.driver then
5758
self.driver = nil
59+
self.auto = false
5860
clicker:set_detach()
5961
player_api.player_attached[name] = false
6062
player_api.set_animation(clicker, "stand" , 30)
@@ -130,24 +132,35 @@ end
130132
function boat.on_step(self, dtime)
131133
self.v = get_v(self.object:get_velocity()) * get_sign(self.v)
132134
if self.driver then
135+
local driver_name = self.driver:get_player_name()
133136
local ctrl = self.driver:get_player_control()
134-
local yaw = self.object:get_yaw()
135-
if ctrl.up then
136-
self.v = self.v + 0.1
137+
if ctrl.up and ctrl.down then
138+
if not self.auto then
139+
self.auto = true
140+
minetest.chat_send_player(driver_name,
141+
"[boats] Cruise on")
142+
end
137143
elseif ctrl.down then
138144
self.v = self.v - 0.1
145+
if self.auto then
146+
self.auto = false
147+
minetest.chat_send_player(driver_name,
148+
"[boats] Cruise off")
149+
end
150+
elseif ctrl.up or self.auto then
151+
self.v = self.v + 0.1
139152
end
140153
if ctrl.left then
141154
if self.v < 0 then
142-
self.object:set_yaw(yaw - (1 + dtime) * 0.03)
155+
self.object:set_yaw(self.object:get_yaw() - (1 + dtime) * 0.03)
143156
else
144-
self.object:set_yaw(yaw + (1 + dtime) * 0.03)
157+
self.object:set_yaw(self.object:get_yaw() + (1 + dtime) * 0.03)
145158
end
146159
elseif ctrl.right then
147160
if self.v < 0 then
148-
self.object:set_yaw(yaw + (1 + dtime) * 0.03)
161+
self.object:set_yaw(self.object:get_yaw() + (1 + dtime) * 0.03)
149162
else
150-
self.object:set_yaw(yaw - (1 + dtime) * 0.03)
163+
self.object:set_yaw(self.object:get_yaw() - (1 + dtime) * 0.03)
151164
end
152165
end
153166
end

0 commit comments

Comments
 (0)