Skip to content
Snippets Groups Projects
Unverified Commit 59dbeebc authored by Paramat's avatar Paramat Committed by GitHub
Browse files

Boats: Add cruise mode (boat autoforward)

Document controls in README.txt.

Optimise 'get yaw' and 'set yaw' code.
parent 876a9ca5
No related branches found
No related tags found
No related merge requests found
......@@ -13,3 +13,19 @@ Textures: Zeg9 (CC BY-SA 3.0)
Model: thetoon and Zeg9 (CC BY-SA 3.0),
modified by PavelS(SokolovPavel) (CC BY-SA 3.0),
modified by sofar (CC BY-SA 3.0)
Controls
--------
Right mouse button = Enter or exit boat when pointing at boat.
Forward = Speed up.
Slow down when moving backwards.
Forward + backward = Enable cruise mode: Boat will accelerate to maximum forward
speed and remain at that speed without needing to hold the
forward key.
Backward = Slow down.
Speed up when moving backwards.
Disable cruise mode.
Left = Turn to the left.
Turn to the right when moving backwards.
Right = Turn to the right.
Turn to the left when moving backwards.
......@@ -44,7 +44,8 @@ local boat = {
driver = nil,
v = 0,
last_v = 0,
removed = false
removed = false,
auto = false
}
......@@ -55,6 +56,7 @@ function boat.on_rightclick(self, clicker)
local name = clicker:get_player_name()
if self.driver and clicker == self.driver then
self.driver = nil
self.auto = false
clicker:set_detach()
player_api.player_attached[name] = false
player_api.set_animation(clicker, "stand" , 30)
......@@ -130,24 +132,35 @@ end
function boat.on_step(self, dtime)
self.v = get_v(self.object:get_velocity()) * get_sign(self.v)
if self.driver then
local driver_name = self.driver:get_player_name()
local ctrl = self.driver:get_player_control()
local yaw = self.object:get_yaw()
if ctrl.up then
self.v = self.v + 0.1
if ctrl.up and ctrl.down then
if not self.auto then
self.auto = true
minetest.chat_send_player(driver_name,
"[boats] Cruise on")
end
elseif ctrl.down then
self.v = self.v - 0.1
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
end
if ctrl.left then
if self.v < 0 then
self.object:set_yaw(yaw - (1 + dtime) * 0.03)
self.object:set_yaw(self.object:get_yaw() - (1 + dtime) * 0.03)
else
self.object:set_yaw(yaw + (1 + dtime) * 0.03)
self.object:set_yaw(self.object:get_yaw() + (1 + dtime) * 0.03)
end
elseif ctrl.right then
if self.v < 0 then
self.object:set_yaw(yaw + (1 + dtime) * 0.03)
self.object:set_yaw(self.object:get_yaw() + (1 + dtime) * 0.03)
else
self.object:set_yaw(yaw - (1 + dtime) * 0.03)
self.object:set_yaw(self.object:get_yaw() - (1 + dtime) * 0.03)
end
end
end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment