Improve code so that carts exactly follow the rails and can be controlled by speed limit signs

master
Joachim Stolberg 2021-04-25 17:54:08 +02:00
parent 73f7fd4304
commit 647419a317
8 changed files with 11 additions and 9 deletions

View File

@ -23,7 +23,7 @@ function minecart.is_cart_available(pos, param2, radius)
end
-- The entity check is needed for a cart with driver
local entity = minecart.get_entitycart_nearby(pos, param2, radius)
if entity and entity.driver then
if entity then
return true
end
end

View File

@ -328,8 +328,8 @@ function minecart.entity_to_node(pos, entity)
local facedir = minetest.dir_to_facedir(dir)
minecart.stop_recording(entity, pos)
entity.object:remove()
minecart.add_nodecart(pos, entity.node_name, facedir, entity.cargo, entity.owner, entity.userID)
minecart.stop_monitoring(entity.owner, entity.userID, pos)
local pos2 = minecart.add_nodecart(pos, entity.node_name, facedir, entity.cargo, entity.owner, entity.userID)
minecart.stop_monitoring(entity.owner, entity.userID, pos2)
end
function minecart.add_node_to_player_inventory(pos, player, node_name)

View File

@ -148,7 +148,7 @@ local function running(self)
self.num_sections = (self.num_sections or 0) + 1
-- Got stuck somewhere
if new_speed < 0.1 or dist < 0.2 then
if new_speed < 0.1 or dist < 0 then
print("Got stuck somewhere", new_speed, dist)
stop_cart(self, wayp_pos)
return

View File

@ -36,7 +36,7 @@ dofile(MP .. "/api.lua")
dofile(MP .. "/minecart.lua")
dofile(MP .. "/buffer.lua")
dofile(MP .. "/protection.lua")
dofile(MP .. "/tool.lua")
--dofile(MP .. "/tool.lua")
dofile(MP .. "/signs.lua")
dofile(MP .. "/terminal.lua")

View File

@ -46,6 +46,6 @@ Travel time=Fahrzeit
Speed "1"=Tempo "1"
Speed "2"=Tempo "2"
Speed "4"=Tempo "4"
Speed "8"=Tempo "8"
No speed limit=Keine Geschwindigkeitsbegrenzung
Cart List=Cart Liste
Cart Terminal=Cart Terminal

View File

@ -30,6 +30,7 @@ function minecart.start_nodecart(pos, node_name, puncher)
local userID = M(pos):get_int("userID")
-- check if valid cart
if not minecart.monitoring_valid_cart(owner, userID, pos, node_name) then
print("invalid cart", owner, userID, pos, node_name)
M(pos):set_string("infotext",
minetest.get_color_escape_sequence("#FFFF00") .. owner .. ": 0")
return
@ -102,6 +103,7 @@ function minecart.on_nodecart_punch(pos, node, puncher, pointed_thing)
local ndef = minetest.registered_nodes[node.name]
if not ndef.has_cargo or not ndef.has_cargo(pos) then
minecart.remove_nodecart(pos)
minecart.add_node_to_player_inventory(pos, puncher, node.name)
minecart.monitoring_remove_cart(owner, userID)
end
else

View File

@ -439,8 +439,8 @@ carts:register_rail("minecart:rail", {
carts:register_rail("minecart:powerrail", {
description = "Powered Rail",
tiles = {
"carts_rail_straight.png^minecart_waypoint.png", "carts_rail_curved.png^minecart_waypoint.png",
"carts_rail_t_junction.png^minecart_waypoint.png", "carts_rail_crossing.png^minecart_waypoint.png"
"carts_rail_straight_pwr.png^minecart_waypoint.png", "carts_rail_curved_pwr.png^minecart_waypoint.png",
"carts_rail_t_junction_pwr.png^minecart_waypoint.png", "carts_rail_crossing_pwr.png^minecart_waypoint.png"
},
inventory_image = "carts_rail_straight.png",
wield_image = "carts_rail_straight.png",

View File

@ -68,7 +68,7 @@ register_sign({
register_sign({
name = "speed8",
description = S('Speed "8"'),
description = S('No speed limit'),
image = "minecart_sign8.png",
})