aboutsummaryrefslogtreecommitdiff
path: root/advtrains_train_track/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'advtrains_train_track/init.lua')
-rw-r--r--advtrains_train_track/init.lua267
1 files changed, 14 insertions, 253 deletions
diff --git a/advtrains_train_track/init.lua b/advtrains_train_track/init.lua
index 608a8eb..35937bc 100644
--- a/advtrains_train_track/init.lua
+++ b/advtrains_train_track/init.lua
@@ -567,17 +567,6 @@ minetest.register_craft({
---- translate well to a block game.
-- END crossings
-advtrains.default_slope_formats = {t_30deg_slope = {
- vst1={true, false, true},
- vst2={true, false, true},
- vst31={true}, vst32={true}, vst33={true},
- vst41={true}, vst42={true}, vst43={true}, vst44={true},
- vst51={true}, vst52={true}, vst53={true}, vst54={true}, vst55={true},
- vst61={true}, vst62={true}, vst63={true}, vst64={true}, vst65={true}, vst66={true},
- vst71={true}, vst72={true}, vst73={true}, vst74={true}, vst75={true}, vst76={true}, vst77={true},
- vst81={true}, vst82={true}, vst83={true}, vst84={true}, vst85={true}, vst86={true}, vst87={true}, vst88={true},
-}}
-
--slopes
advtrains.register_tracks("default", {
nodename_prefix="advtrains:dtrack",
@@ -587,7 +576,7 @@ advtrains.register_tracks("default", {
shared_texture="advtrains_dtrack_shared.png",
second_texture="default_gravel.png",
description=attrans("Track"),
- formats=advtrains.default_slope_formats.t_30deg_slope,
+ formats={vst1={true, false, true}, vst2={true, false, true}, vst31={true}, vst32={true}, vst33={true}},
}, advtrains.ap.t_30deg_slope)
minetest.register_craft({
@@ -600,27 +589,6 @@ minetest.register_craft({
},
})
-advtrains.register_tracks("default", {
- nodename_prefix="advtrains:dtrack_rg",
- texture_prefix="advtrains_dtrack_rg",
- models_prefix="advtrains_dtrack",
- models_suffix=".obj",
- shared_texture="advtrains_dtrack_shared.png",
- second_texture="ch_extras_gravel.png",
- description=attrans("Track with Railway Gravel"),
- formats=advtrains.default_slope_formats.t_30deg_slope,
-}, advtrains.ap.t_30deg_slope)
-
-minetest.register_craft({
- type = "shapeless",
- output = 'advtrains:dtrack_rg_slopeplacer 2',
- recipe = {
- "advtrains:dtrack_placer",
- "advtrains:dtrack_placer",
- "ch_core:railway_gravel",
- },
-})
-
--bumpers
advtrains.register_tracks("default", {
@@ -689,9 +657,10 @@ advtrains.register_tracks("default", {
minetest.register_craft({
output = "advtrains:dtrack_atc_placer",
recipe = {
- {"mesecons_microcontroller:microcontroller0000", ""},
- {"advtrains:dtrack_placer", ""},
- },
+ {"","mesecons_microcontroller:microcontroller0000",""},
+ {"","advtrains:dtrack_placer",""},
+ {"","",""}
+ }
})
-- Tracks for loading and unloading trains
@@ -719,12 +688,12 @@ local function show_fc_formspec(pos,player)
local form = 'formspec_version[4]'..
'size[10,5]'..
- 'label[0.5,0.4;kolej nakládání/vykládání]'..
- 'label[0.5,1.1;Nastavte nákladní kód. Vagony se zadaným kódem budou naloženy/vyloženy.]'..
- 'label[0.5,1.6;Prázdné pole znamená všechny vagony.]'..
- 'label[0.5,2.1;Pro vypnutí zadejte kód #.]'..
- 'field[0.5,3;5.5,1;fc;kód:;'..minetest.formspec_escape(fc)..']'..
- 'button[6.5,3;3,1;save;Uložit]'
+ 'label[0.5,0.4;Advtrains Loading/Unloading Track]'..
+ 'label[0.5,1.1;Set the code to match against the wagon\'s freight code]'..
+ 'label[0.5,1.6;A blank field matches all wagons (default)]'..
+ 'label[0.5,2.1;Use code # to disable the track section]'..
+ 'field[0.5,3;5.5,1;fc;FC;'..minetest.formspec_escape(fc)..']'..
+ 'button[6.5,3;3,1;save;Submit]'
minetest.show_formspec(pname, "at_load_unload_"..advtrains.encode_pos(pos), form)
end
@@ -734,13 +703,13 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
local pos = advtrains.decode_pos(pe)
if pos then
if minetest.is_protected(pos, pname) then
- minetest.chat_send_player(pname, "Pozice je zastřežená!")
+ minetest.chat_send_player(pname, "Position is protected!")
return
end
if fields.save then
minetest.get_meta(pos):set_string("fc",tostring(fields.fc))
- minetest.chat_send_player(pname,"Nákladní kód nastaven: "..tostring(fields.fc))
+ minetest.chat_send_player(pname,"Freight code set: "..tostring(fields.fc))
show_fc_formspec(pos,player)
end
end
@@ -953,7 +922,7 @@ minetest.register_craft({
})
-if minetest.get_modpath("mesecons") then
+if mesecon then
advtrains.register_tracks("default", {
nodename_prefix="advtrains:dtrack_detector_off",
texture_prefix="advtrains_dtrack_detector",
@@ -1022,215 +991,7 @@ minetest.register_craft({
"mesecons:wire_00000000_off"
},
})
-
-local function swap_to_off(pos)
- local node = advtrains.ndb.get_node(pos)
- if node == nil then
- minetest.log("error", "Advtrains node at "..minetest.pos_to_string(pos).." expected, but not found!")
- else
- local old_node_name = node.name
- node.name = old_node_name:gsub("rdetector_on", "rdetector_off")
- assert(node.name)
- if node.name ~= old_node_name then
- advtrains.ndb.swap_node(pos, node)
- if advtrains.is_node_loaded(pos) then
- mesecon.receptor_off(pos, advtrains.meseconrules)
- end
- end
- end
-end
-
-local function swap_to_on(pos)
- local node = advtrains.ndb.get_node(pos)
- if node == nil then
- minetest.log("error", "Advtrains node at "..minetest.pos_to_string(pos).." expected, but not found!")
- else
- local old_node_name = node.name
- node.name = old_node_name:gsub("rdetector_off", "rdetector_on")
- assert(node.name)
- if node.name ~= old_node_name then
- advtrains.ndb.swap_node(pos, node)
- if advtrains.is_node_loaded(pos) then
- mesecon.receptor_on(pos, advtrains.meseconrules)
- end
- end
- end
-end
-
-local rdetector_data = {
- --[[
- [pos_hash] = {
- pos = pos,
- created = ...,
- trains = {
- [train_id] = {expiration = timestamp}}}
- ]]
-}
-
-local function watch_trains(pos_hash, created)
- assert(pos_hash)
- assert(created)
- local data = rdetector_data[pos_hash]
- if data == nil then
- return
- elseif created ~= data.created then
- return -- not my data
- else
- minetest.after(1, watch_trains, pos_hash, created)
- end
- local kept = 0
- local to_delete = {}
- local now = minetest.get_us_time()
- for train_id, traindata in pairs(data.trains) do
- local train = advtrains.trains[train_id]
- if train == nil or not train.last_pos then
- table.insert(to_delete, train_id) -- train does not exist
- elseif traindata.expiration ~= nil and traindata.expiration <= now then
- table.insert(to_delete, train_id) -- train expired
- else
- kept = kept + 1
- end
- end
- if kept == 0 then
- -- no kept trains => disable the node
- swap_to_off(data.pos)
- rdetector_data[pos_hash] = nil -- no trains remain, delete data
- elseif #to_delete > 0 then
- for _, train_id in ipairs(to_delete) do
- data.trains[train_id] = nil
- end
- end
-end
-
-local function on_train_approach(pos, train_id)
- local pos_hash = advtrains.encode_pos(pos)
- local data = rdetector_data[pos_hash]
- local now = minetest.get_us_time()
- local expiration = now + 30000000
- if data == nil then
- rdetector_data[pos_hash] = {
- pos = pos,
- created = now,
- trains = {[train_id] = {expiration = expiration}},
- }
- minetest.after(0.1, swap_to_on, pos)
- minetest.after(1, watch_trains, pos_hash, now)
- else
- data.trains[train_id] = {expiration = expiration}
- end
-end
-
-local function on_train_enter(pos, train_id)
- local pos_hash = advtrains.encode_pos(pos)
- local data = rdetector_data[pos_hash]
- local now = minetest.get_us_time()
- if data == nil then
- rdetector_data[pos_hash] = {
- pos = pos,
- created = now,
- trains = {[train_id] = {}},
- }
- minetest.after(0.1, swap_to_on, pos)
- minetest.after(1, watch_trains, pos_hash, now)
- else
- data.trains[train_id] = {}
- end
end
-
-local function on_train_leave(pos, train_id)
- local pos_hash = advtrains.encode_pos(pos)
- local data = rdetector_data[pos_hash]
- if data ~= nil then
- data.trains[train_id] = {expiration = minetest.get_us_time() - 1000000}
- end
-end
-
-local function after_dig_node(pos)
- rdetector_data[advtrains.encode_pos(pos)] = nil
-end
-
-advtrains.register_tracks("default", {
- nodename_prefix="advtrains:dtrack_rdetector_off",
- texture_prefix="advtrains_dtrack_detector",
- models_prefix="advtrains_dtrack",
- models_suffix=".b3d",
- shared_texture="advtrains_dtrack_shared_rdetector_off.png",
- description=attrans("Remote Detector Rail"),
- formats={},
- get_additional_definiton = function(def, preset, suffix, rotation)
- return {
- mesecons = {
- receptor = {
- state = mesecon.state.off,
- rules = advtrains.meseconrules
- }
- },
- after_dig_node = after_dig_node,
- drop = "advtrains:dtrack_rdetector_off_placer",
- advtrains = {
- on_updated_from_nodedb = function(pos, node)
- mesecon.receptor_off(pos, advtrains.meseconrules)
- end,
- on_train_approach = function(pos, train_id, train, index, has_entered)
- if has_entered then
- on_train_enter(pos, train_id)
- else
- on_train_approach(pos, train_id)
- end
- end,
- on_train_enter = on_train_enter,
- on_train_leave = on_train_leave,
- }
- }
- end
-}, advtrains.ap.t_30deg_straightonly)
-advtrains.register_tracks("default", {
- nodename_prefix="advtrains:dtrack_rdetector_on",
- texture_prefix="advtrains_dtrack",
- models_prefix="advtrains_dtrack",
- models_suffix=".b3d",
- shared_texture="advtrains_dtrack_shared_rdetector_on.png",
- description=attrans("Remote Detector Rail"),
- formats={},
- get_additional_definiton = function(def, preset, suffix, rotation)
- return {
- after_dig_node = after_dig_node,
- drop = "advtrains:dtrack_rdetector_off_placer",
- mesecons = {
- receptor = {
- state = mesecon.state.on,
- rules = advtrains.meseconrules
- }
- },
- advtrains = {
- on_updated_from_nodedb = function(pos, node)
- mesecon.receptor_on(pos, advtrains.meseconrules)
- end,
- on_train_approach = function(pos, train_id, train, index, has_entered)
- if has_entered then
- on_train_enter(pos, train_id)
- else
- on_train_approach(pos, train_id)
- end
- end,
- on_train_enter = on_train_enter,
- on_train_leave = on_train_leave,
- }
- }
- end
-}, advtrains.ap.t_30deg_straightonly_noplacer)
-minetest.register_craft({
-type="shapeless",
-output = 'advtrains:dtrack_rdetector_off_placer',
-recipe = {
- "advtrains:dtrack_detector_off_placer",
- "default:mese_crystal",
-},
-})
-
-end
-
-
--TODO legacy
--I know lbms are better for this purpose
for name,rep in pairs({swl_st="swlst", swr_st="swrst", swl_cr="swlcr", swr_cr="swrcr", }) do