Allow cart exit with jump key

master
Joachim Stolberg 2022-01-03 11:57:14 +01:00
parent e587efc2b8
commit 3afac50041
2 changed files with 24 additions and 6 deletions

View File

@ -217,9 +217,20 @@ local function on_step(self, dtime)
recording_waypoints(self)
self.rec_time = self.rec_time + 2.0
end
recording_junctions(self)
if recording_junctions(self) then
local pos = vector.round(self.object:get_pos())
minecart.stop_recording(self, pos, true)
local player = minetest.get_player_by_name(self.driver)
minecart.manage_attachment(player, self, false)
minecart.entity_to_node(pos, self)
end
else
player_ctrl(self)
if player_ctrl(self) then
local pos = vector.round(self.object:get_pos())
local player = minetest.get_player_by_name(self.driver)
minecart.manage_attachment(player, self, false)
minecart.entity_to_node(pos, self)
end
end
end
end
@ -241,7 +252,7 @@ local function on_entitycard_punch(self, puncher, time_from_last_punch, tool_cap
-- Dig cart
if self.driver then
-- remove cart as driver
minecart.stop_recording(self, pos)
minecart.stop_recording(self, pos, true)
minecart.monitoring_remove_cart(self.owner, self.userID)
minecart.remove_entity(self, pos, puncher)
minecart.manage_attachment(puncher, self, false)
@ -273,12 +284,13 @@ local function on_entitycard_rightclick(self, clicker)
if self.driver then
-- get off
local pos = vector.round(self.object:get_pos())
minecart.stop_recording(self, pos, true)
minecart.manage_attachment(clicker, self, false)
minecart.entity_to_node(pos, self)
else
-- get on
local pos = vector.round(self.object:get_pos())
minecart.stop_recording(self, pos)
minecart.stop_recording(self, pos, true)
minecart.manage_attachment(clicker, self, true)
end
end

View File

@ -103,12 +103,14 @@ function minecart.start_recording(self, pos)
end
end
function minecart.stop_recording(self, pos)
function minecart.stop_recording(self, pos, force_exit)
--print("stop_recording")
if self.driver and self.is_recording then
local dest_pos = minecart.get_buffer_pos(pos, self.driver)
local player = minetest.get_player_by_name(self.driver)
if dest_pos and player and #self.checkpoints > 3 then
if force_exit then
minetest.chat_send_player(self.driver, S("[minecart] Recording canceled!"))
elseif dest_pos and player and #self.checkpoints > 3 then
-- Remove last checkpoint, because it is potentially too close to the dest_pos
table.remove(self.checkpoints)
if self.start_pos then
@ -163,6 +165,8 @@ function minecart.recording_junctions(self)
self.ctrl = {right = true}
elseif ctrl.up or ctrl.down then
self.ctrl = nil
elseif ctrl.jump then
return true
end
end
if self.hud_time <= self.timebase then
@ -186,6 +190,8 @@ function minecart.player_ctrl(self)
self.ctrl = {left = true}
elseif ctrl.right then
self.ctrl = {right = true}
elseif ctrl.jump then
return true
end
end
end