diff options
Diffstat (limited to 'advtrains_train_track/init.lua')
-rw-r--r-- | advtrains_train_track/init.lua | 267 |
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 |