From 59dbeebc2f282f85be5d1135aa70c6c2f36d8376 Mon Sep 17 00:00:00 2001 From: Paramat Date: Tue, 3 Jul 2018 19:52:28 +0100 Subject: [PATCH] Boats: Add cruise mode (boat autoforward) Document controls in README.txt. Optimise 'get yaw' and 'set yaw' code. --- mods/boats/README.txt | 16 ++++++++++++++++ mods/boats/init.lua | 29 +++++++++++++++++++++-------- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/mods/boats/README.txt b/mods/boats/README.txt index 59631d9d..a2ccb485 100644 --- a/mods/boats/README.txt +++ b/mods/boats/README.txt @@ -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. diff --git a/mods/boats/init.lua b/mods/boats/init.lua index 82722ee1..3d781b73 100644 --- a/mods/boats/init.lua +++ b/mods/boats/init.lua @@ -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