mirror of
https://github.com/minetest/minetest_game.git
synced 2024-12-22 23:10:17 +01:00
Boats: Add cruise mode (boat autoforward)
Document controls in README.txt. Optimise 'get yaw' and 'set yaw' code.
This commit is contained in:
parent
876a9ca5d2
commit
59dbeebc2f
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user