Boats: Add cruise mode (boat autoforward)
authorParamat <paramat@users.noreply.github.com>
Tue, 3 Jul 2018 18:52:28 +0000 (19:52 +0100)
committerGitHub <noreply@github.com>
Tue, 3 Jul 2018 18:52:28 +0000 (19:52 +0100)
Document controls in README.txt.

Optimise 'get yaw' and 'set yaw' code.

mods/boats/README.txt
mods/boats/init.lua

index 59631d9d396592a4479ae14d17dee749f4825136..a2ccb485a8a22c98db5bc269a8ed61aaed4b1b0e 100644 (file)
@@ -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.
index 82722ee11529d53fd255d8995f2829b5b91fc969..3d781b730d529dbb883446e41c9d5a182496b132 100644 (file)
@@ -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