forked from minetest/minetest_game
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),
|
Model: thetoon and Zeg9 (CC BY-SA 3.0),
|
||||||
modified by PavelS(SokolovPavel) (CC BY-SA 3.0),
|
modified by PavelS(SokolovPavel) (CC BY-SA 3.0),
|
||||||
modified by sofar (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,
|
driver = nil,
|
||||||
v = 0,
|
v = 0,
|
||||||
last_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()
|
local name = clicker:get_player_name()
|
||||||
if self.driver and clicker == self.driver then
|
if self.driver and clicker == self.driver then
|
||||||
self.driver = nil
|
self.driver = nil
|
||||||
|
self.auto = false
|
||||||
clicker:set_detach()
|
clicker:set_detach()
|
||||||
player_api.player_attached[name] = false
|
player_api.player_attached[name] = false
|
||||||
player_api.set_animation(clicker, "stand" , 30)
|
player_api.set_animation(clicker, "stand" , 30)
|
||||||
@ -130,24 +132,35 @@ end
|
|||||||
function boat.on_step(self, dtime)
|
function boat.on_step(self, dtime)
|
||||||
self.v = get_v(self.object:get_velocity()) * get_sign(self.v)
|
self.v = get_v(self.object:get_velocity()) * get_sign(self.v)
|
||||||
if self.driver then
|
if self.driver then
|
||||||
|
local driver_name = self.driver:get_player_name()
|
||||||
local ctrl = self.driver:get_player_control()
|
local ctrl = self.driver:get_player_control()
|
||||||
local yaw = self.object:get_yaw()
|
if ctrl.up and ctrl.down then
|
||||||
if ctrl.up then
|
if not self.auto then
|
||||||
self.v = self.v + 0.1
|
self.auto = true
|
||||||
|
minetest.chat_send_player(driver_name,
|
||||||
|
"[boats] Cruise on")
|
||||||
|
end
|
||||||
elseif ctrl.down then
|
elseif ctrl.down then
|
||||||
self.v = self.v - 0.1
|
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
|
end
|
||||||
if ctrl.left then
|
if ctrl.left then
|
||||||
if self.v < 0 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
|
else
|
||||||
self.object:set_yaw(yaw + (1 + dtime) * 0.03)
|
self.object:set_yaw(self.object:get_yaw() + (1 + dtime) * 0.03)
|
||||||
end
|
end
|
||||||
elseif ctrl.right then
|
elseif ctrl.right then
|
||||||
if self.v < 0 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
|
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
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user