Skip to content

Commit

Permalink
Boats: Add cruise mode (boat autoforward)
Browse files Browse the repository at this point in the history
Document controls in README.txt.

Optimise 'get yaw' and 'set yaw' code.
  • Loading branch information
paramat committed Jul 3, 2018
1 parent 876a9ca commit 59dbeeb
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 8 deletions.
16 changes: 16 additions & 0 deletions mods/boats/README.txt
Expand Up @@ -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.
29 changes: 21 additions & 8 deletions mods/boats/init.lua
Expand Up @@ -44,7 +44,8 @@ local boat = {
driver = nil,
v = 0,
last_v = 0,
removed = false
removed = false,
auto = false
}


Expand All @@ -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)
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 59dbeeb

Please sign in to comment.