Browse Source

Boats: Add cruise mode (boat autoforward)

Document controls in README.txt.

Optimise 'get yaw' and 'set yaw' code.
Paramat 5 years ago
parent
commit
59dbeebc2f
2 changed files with 37 additions and 8 deletions
  1. 16 0
      mods/boats/README.txt
  2. 21 8
      mods/boats/init.lua

+ 16 - 0
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.

+ 21 - 8
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