From 522a9ccd6818a14efe4886365e57b312d559d8db Mon Sep 17 00:00:00 2001 From: orwell96 Date: Mon, 22 Aug 2016 22:41:09 +0200 Subject: tidying up the tracks and trackworker/placer code and making rail registration a lot more modular --- tracks.lua | 504 ++++++++++++++++++++++++++----------------------------------- 1 file changed, 214 insertions(+), 290 deletions(-) (limited to 'tracks.lua') diff --git a/tracks.lua b/tracks.lua index 0f08e74..73d3033 100644 --- a/tracks.lua +++ b/tracks.lua @@ -26,7 +26,99 @@ vert2={ ]]-- advtrains.all_tracktypes={} -function advtrains.register_tracks(tracktype, def) +--definition preparation +local function conns(c1, c2, r1, r2, rh, rots) return {conn1=c1, conn2=c2, rely1=r1, rely2=r2, railheight=rh} end + +local t_30deg={ + regstep=1, + variant={ + st=conns(0,8), + cr=conns(0,7), + swlst=conns(0,8), + swlcr=conns(0,7), + swrst=conns(0,8), + swrcr=conns(0,9), + vst1=conns(8,0,0,0.5,0.25), + vst2=conns(8,0,0.5,1,0.75), + }, + switch={ + swlst="swlcr", + swlcr="swlst", + swrst="swrcr", + swrcr="swrst", + }, + trackplacer={ + st=true, + cr=true, + }, + tpsingle={ + st=true, + }, + tpdefault="st", + trackworker={ + ["swrcr"]="st", + ["swrst"]="st", + ["st"]="cr", + ["cr"]="swlst", + ["swlcr"]="swrcr", + ["swlst"]="swrst", + }, + rotation={"", "_30", "_45", "_60"}, + increativeinv={vst1=true, vst2=true} +} +local t_45deg={ + regstep=2, + variant={ + st=conns(0,8), + cr=conns(0,6), + swlst=conns(0,8), + swlcr=conns(0,6), + swrst=conns(0,8), + swrcr=conns(0,10), + vst1=conns(8,0,0,0.5,0.25), + vst2=conns(8,0,0.5,1,0.75), + }, + switch={ + swlst="swlcr", + swlcr="swlst", + swrst="swrcr", + swrcr="swrst", + }, + trackplacer={ + st=true, + cr=true, + }, + tpsingle={ + st=true, + }, + tpdefault="st", + trackworker={ + ["swrcr"]="st", + ["swrst"]="st", + ["st"]="cr", + ["cr"]="swlst", + ["swlcr"]="swrcr", + ["swlst"]="swrst", + }, + rotation={"", "_45"}, + increativeinv={vst1=true, vst2=true} +} + +--definition format: ([] optional) +--[[{ + nodename_prefix + texture_prefix + [shared_texture] + models_prefix + models_suffix (with dot) + [shared_model] + formats={ + st,cr,swlst,swlcr,swrst,swrcr,vst1,vst2 + (each a table with indices 0-3, for if to register a rail with this 'rotation' table entry. nil is assumed as 'all', set {} to not register at all) + } + common={} change something on common rail appearance +}]] +function advtrains.register_tracks(tracktype, def, preset) local function make_switchfunc(suffix_target) return function(pos, node) if advtrains.is_train_at_pos(pos) then return end @@ -35,115 +127,33 @@ function advtrains.register_tracks(tracktype, def) advtrains.reset_trackdb_position(pos) end end - local function make_overdef(img_suffix, conn1, conn2, switchfunc) + local function make_overdef(img_suffix, conns, switchfunc) return { - tiles = {def.texture_prefix.."_"..img_suffix..".png"}, + mesh = def.shared_model or (def.models_prefix.."_"..img_suffix..def.models_suffix), + tiles = {def.shared_texture or (def.texture_prefix.."_"..img_suffix..".png")}, inventory_image = def.texture_prefix.."_"..img_suffix..".png", wield_image = def.texture_prefix.."_"..img_suffix..".png", - connect1=conn1, - connect2=conn2, + connect1=conns.conn1, + connect2=conns.conn2, + rely1=conns.rely1 or 0, + rely2=conns.rely2 or 0, + railheight=conns.railheight or 0, on_rightclick=switchfunc, } end - local common_def=advtrains.merge_tables({ - description = def.description, - drawtype = "mesh", - mesh = "trackplane.b3d", - paramtype="light", - paramtype2="facedir", - walkable = false, - selection_box = { - type = "fixed", - fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, - }, - groups = { - attached_node=1, - ["advtrains_track_"..tracktype]=1, - dig_immediate=2, - not_in_creative_inventory=1, - }, - rely1=0, - rely2=0, - railheight=0, - drop="advtrains:placetrack_"..tracktype, - --on_rightclick=function(pos, node, clicker) - -- minetest.set_node(pos, {name=node.name, param2=(node.param2+1)%4}) - --end - can_dig=function(pos) - return not advtrains.is_train_at_pos(pos) - end, - after_dig_node=function(pos) - advtrains.invalidate_all_paths() - advtrains.reset_trackdb_position(pos) - end, - after_place_node=function(pos) - advtrains.reset_trackdb_position(pos) - end, - }, def.common or {}) - minetest.register_node(def.nodename_prefix.."_st", advtrains.merge_tables(common_def, make_overdef("st", 0, 8), def.straight or {})) - minetest.register_node(def.nodename_prefix.."_st_45", advtrains.merge_tables(common_def, make_overdef("st_45", 2, 10), def.straight45 or {})) - - minetest.register_node(def.nodename_prefix.."_cr", advtrains.merge_tables(common_def, make_overdef("cr", 0, 6), def.curve or {})) - minetest.register_node(def.nodename_prefix.."_cr_45", advtrains.merge_tables(common_def, make_overdef("cr_45", 2, 8), def.curve45 or {})) - - advtrains.trackplacer_register(def.nodename_prefix.."_st", 0, 8) - advtrains.trackplacer_register(def.nodename_prefix.."_st_45", 2, 10) - advtrains.trackplacer_register(def.nodename_prefix.."_cr", 0, 6) - advtrains.trackplacer_register(def.nodename_prefix.."_cr_45", 2, 8) - - - minetest.register_node(def.nodename_prefix.."_swl_st", advtrains.merge_tables(common_def, make_overdef("swl_st", 0, 8, make_switchfunc("swl_cr")), def.lswitchst or {})) - minetest.register_node(def.nodename_prefix.."_swl_st_45", advtrains.merge_tables(common_def, make_overdef("swl_st_45", 2, 10, make_switchfunc("swl_cr_45")), def.lswitchst45 or {})) - minetest.register_node(def.nodename_prefix.."_swl_cr", advtrains.merge_tables(common_def, make_overdef("swl_cr", 0, 6, make_switchfunc("swl_st")), def.lswitchcr or {})) - minetest.register_node(def.nodename_prefix.."_swl_cr_45", advtrains.merge_tables(common_def, make_overdef("swl_cr_45", 2, 8, make_switchfunc("swl_st_45")), def.lswitchcr45 or {})) - - minetest.register_node(def.nodename_prefix.."_swr_st", advtrains.merge_tables(common_def, make_overdef("swr_st", 0, 8, make_switchfunc("swr_cr")), def.rswitchst or {})) - minetest.register_node(def.nodename_prefix.."_swr_st_45", advtrains.merge_tables(common_def, make_overdef("swr_st_45", 2, 10, make_switchfunc("swr_cr_45")), def.rswitchst45 or {})) - minetest.register_node(def.nodename_prefix.."_swr_cr", advtrains.merge_tables(common_def, make_overdef("swr_cr", 0, 10, make_switchfunc("swr_st")), def.rswitchcr or {})) - minetest.register_node(def.nodename_prefix.."_swr_cr_45", advtrains.merge_tables(common_def, make_overdef("swr_cr_45", 2, 12, make_switchfunc("swr_st_45")), def.rswitchcr45 or {})) - - minetest.register_node(def.nodename_prefix.."_vert1", advtrains.merge_tables(common_def, make_overdef("vert1", 0, 8), { - mesh = "trackvertical1.b3d", - rely1=0, - rely2=0.5, - railheight=0.25, - description = def.description.." (vertical track lower node)", - }, def.vert1 or {})) - minetest.register_node(def.nodename_prefix.."_vert2", advtrains.merge_tables(common_def, make_overdef("vert2", 0, 8), { - mesh = "trackvertical2.b3d", - rely1=0.5, - rely2=1, - railheight=0.75, - description = def.description.." (vertical track upper node)", - },def.vert2 or {})) - - advtrains.register_track_placer(def.nodename_prefix, def.texture_prefix, def.description) - table.insert(advtrains.all_tracktypes, tracktype) -end - -function advtrains.register_tracks_finer(tracktype, def) - local function make_switchfunc(suffix_target) - return function(pos, node) - if advtrains.is_train_at_pos(pos) then return end - advtrains.invalidate_all_paths() - minetest.set_node(pos, {name=def.nodename_prefix.."_"..suffix_target, param2=node.param2}) - advtrains.reset_trackdb_position(pos) - end - end - local function make_overdef(img_suffix, conn1, conn2, switchfunc) + local function cycle_conns(conns, rotid) + local add=(rotid-1)*preset.regstep return { - tiles = {def.texture_prefix.."_"..img_suffix..".png"}, - inventory_image = def.texture_prefix.."_"..img_suffix..".png", - wield_image = def.texture_prefix.."_"..img_suffix..".png", - connect1=conn1, - connect2=conn2, - on_rightclick=switchfunc, + conn1=(conns.conn1+add)%16, + conn2=(conns.conn2+add)%16, + rely1=conns.rely1 or 0, + rely2=conns.rely2 or 0, + railheight=conns.railheight or 0, } end local common_def=advtrains.merge_tables({ description = def.description, drawtype = "mesh", - mesh = "trackplane.b3d", paramtype="light", paramtype2="facedir", walkable = false, @@ -155,15 +165,12 @@ function advtrains.register_tracks_finer(tracktype, def) attached_node=1, ["advtrains_track_"..tracktype]=1, dig_immediate=2, - --not_in_creative_inventory=1, + not_in_creative_inventory=1,--NOTE see below when changing groups }, rely1=0, rely2=0, railheight=0, drop="advtrains:placetrack_"..tracktype, - --on_rightclick=function(pos, node, clicker) - -- minetest.set_node(pos, {name=node.name, param2=(node.param2+1)%4}) - --end can_dig=function(pos) return not advtrains.is_train_at_pos(pos) end, @@ -175,200 +182,47 @@ function advtrains.register_tracks_finer(tracktype, def) advtrains.reset_trackdb_position(pos) end, }, def.common or {}) - minetest.register_node(def.nodename_prefix.."_st", advtrains.merge_tables(common_def, make_overdef("st", 0, 8), def.straight or {})) - minetest.register_node(def.nodename_prefix.."_st_30", advtrains.merge_tables(common_def, make_overdef("st_30", 1, 9), def.straight30 or {})) - minetest.register_node(def.nodename_prefix.."_st_45", advtrains.merge_tables(common_def, make_overdef("st_45", 2, 10), def.straight45 or {})) - minetest.register_node(def.nodename_prefix.."_st_60", advtrains.merge_tables(common_def, make_overdef("st_60", 3, 11), def.straight60 or {})) - - minetest.register_node(def.nodename_prefix.."_cr", advtrains.merge_tables(common_def, make_overdef("cr", 0, 7), def.curve or {})) - minetest.register_node(def.nodename_prefix.."_cr_30", advtrains.merge_tables(common_def, make_overdef("cr_30", 1, 8), def.curve45 or {})) - minetest.register_node(def.nodename_prefix.."_cr_45", advtrains.merge_tables(common_def, make_overdef("cr_45", 2, 9), def.curve45 or {})) - minetest.register_node(def.nodename_prefix.."_cr_60", advtrains.merge_tables(common_def, make_overdef("cr_60", 3, 10), def.curve45 or {})) + --make trackplacer base def + advtrains.trackplacer.register_tracktype(def.nodename_prefix, preset.tpdefault) + advtrains.trackplacer.register_track_placer(def.nodename_prefix, def.texture_prefix, def.description) - --[[advtrains.trackplacer_register(def.nodename_prefix.."_st", 0, 8) - advtrains.trackplacer_register(def.nodename_prefix.."_st_45", 2, 10) - advtrains.trackplacer_register(def.nodename_prefix.."_cr", 0, 6) - advtrains.trackplacer_register(def.nodename_prefix.."_cr_45", 2, 8) - --]] - --[[ - minetest.register_node(def.nodename_prefix.."_swl_st", advtrains.merge_tables(common_def, make_overdef("swl_st", 0, 8, make_switchfunc("swl_cr")), def.lswitchst or {})) - minetest.register_node(def.nodename_prefix.."_swl_st_45", advtrains.merge_tables(common_def, make_overdef("swl_st_45", 2, 10, make_switchfunc("swl_cr_45")), def.lswitchst45 or {})) - minetest.register_node(def.nodename_prefix.."_swl_cr", advtrains.merge_tables(common_def, make_overdef("swl_cr", 0, 6, make_switchfunc("swl_st")), def.lswitchcr or {})) - minetest.register_node(def.nodename_prefix.."_swl_cr_45", advtrains.merge_tables(common_def, make_overdef("swl_cr_45", 2, 8, make_switchfunc("swl_st_45")), def.lswitchcr45 or {})) - - minetest.register_node(def.nodename_prefix.."_swr_st", advtrains.merge_tables(common_def, make_overdef("swr_st", 0, 8, make_switchfunc("swr_cr")), def.rswitchst or {})) - minetest.register_node(def.nodename_prefix.."_swr_st_45", advtrains.merge_tables(common_def, make_overdef("swr_st_45", 2, 10, make_switchfunc("swr_cr_45")), def.rswitchst45 or {})) - minetest.register_node(def.nodename_prefix.."_swr_cr", advtrains.merge_tables(common_def, make_overdef("swr_cr", 0, 10, make_switchfunc("swr_st")), def.rswitchcr or {})) - minetest.register_node(def.nodename_prefix.."_swr_cr_45", advtrains.merge_tables(common_def, make_overdef("swr_cr_45", 2, 12, make_switchfunc("swr_st_45")), def.rswitchcr45 or {})) - - minetest.register_node(def.nodename_prefix.."_vert1", advtrains.merge_tables(common_def, make_overdef("vert1", 0, 8), { - mesh = "trackvertical1.b3d", - rely1=0, - rely2=0.5, - railheight=0.25, - description = def.description.." (vertical track lower node)", - }, def.vert1 or {})) - minetest.register_node(def.nodename_prefix.."_vert2", advtrains.merge_tables(common_def, make_overdef("vert2", 0, 8), { - mesh = "trackvertical2.b3d", - rely1=0.5, - rely2=1, - railheight=0.75, - description = def.description.." (vertical track upper node)", - },def.vert2 or {})) - ]] - - --we don't have texures yet - - advtrains.register_track_placer(def.nodename_prefix, def.texture_prefix, def.description) - table.insert(advtrains.all_tracktypes, tracktype) -end - ---def must include: models_prefix, models_suffix(with dot) --- def.shared_texture="full_name.png" if shared texture for all models is wanted -function advtrains.register_tracks_modeled(tracktype, def) - local function make_switchfunc(suffix_target) - return function(pos, node) - if advtrains.is_train_at_pos(pos) then return end - advtrains.invalidate_all_paths() - minetest.set_node(pos, {name=def.nodename_prefix.."_"..suffix_target, param2=node.param2}) - advtrains.reset_trackdb_position(pos) + for suffix, conns in pairs(preset.variant) do + for rotid, rotation in ipairs(preset.rotation) do + if not def.formats[suffix] or def.formats[suffix][rotid] then + local switchfunc + if preset.switch[suffix] then + switchfunc=make_switchfunc(preset.switch[suffix]..rotation) + end + minetest.register_node(def.nodename_prefix.."_"..suffix..rotation, advtrains.merge_tables( + common_def, + make_overdef( + suffix..rotation, + cycle_conns(conns, rotid), + switchfunc + ) + ), + preset.increativeinv[suffix] and { + groups = {--NOTE change groups here too + attached_node=1, + ["advtrains_track_"..tracktype]=1, + dig_immediate=2, + }, + } or {} + ) + --trackplacer + if preset.trackplacer[suffix] then + advtrains.trackplacer.add_double_conn(def.nodename_prefix, suffix, rotation, cycle_conns(conns, rotid)) + end + if preset.tpsingle[suffix] then + advtrains.trackplacer.add_single_conn(def.nodename_prefix, suffix, rotation, cycle_conns(conns, rotid)) + end + advtrains.trackplacer.add_worked(def.nodename_prefix, suffix, rotation, preset.trackworker[suffix]) + end end end - local function make_overdef(img_suffix, conn1, conn2, switchfunc) - return { - mesh = def.models_prefix.."_"..img_suffix..def.models_suffix, - tiles = {def.shared_texture or (def.texture_prefix.."_"..img_suffix..".png")}, - inventory_image = def.texture_prefix.."_"..img_suffix..".png", - wield_image = def.texture_prefix.."_"..img_suffix..".png", - connect1=conn1, - connect2=conn2, - on_rightclick=switchfunc, - } - end - local common_def=advtrains.merge_tables({ - description = def.description, - drawtype = "mesh", - paramtype="light", - paramtype2="facedir", - walkable = false, - selection_box = { - type = "fixed", - fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, - }, - groups = { - attached_node=1, - ["advtrains_track_"..tracktype]=1, - dig_immediate=2, - not_in_creative_inventory=1, - }, - rely1=0, - rely2=0, - railheight=0, - drop="advtrains:placetrack_"..tracktype, - --on_rightclick=function(pos, node, clicker) - -- minetest.set_node(pos, {name=node.name, param2=(node.param2+1)%4}) - --end - can_dig=function(pos) - return not advtrains.is_train_at_pos(pos) - end, - after_dig_node=function(pos) - advtrains.invalidate_all_paths() - advtrains.reset_trackdb_position(pos) - end, - after_place_node=function(pos) - advtrains.reset_trackdb_position(pos) - end, - }, def.common or {}) - minetest.register_node(def.nodename_prefix.."_st", advtrains.merge_tables(common_def, make_overdef("st", 0, 8), def.straight or {})) - minetest.register_node(def.nodename_prefix.."_st_30", advtrains.merge_tables(common_def, make_overdef("st_30", 1, 9), def.straight30 or {})) - minetest.register_node(def.nodename_prefix.."_st_45", advtrains.merge_tables(common_def, make_overdef("st_45", 2, 10), def.straight45 or {})) - minetest.register_node(def.nodename_prefix.."_st_60", advtrains.merge_tables(common_def, make_overdef("st_60", 3, 11), def.straight60 or {})) - - minetest.register_node(def.nodename_prefix.."_cr", advtrains.merge_tables(common_def, make_overdef("cr", 0, 7), def.curve or {})) - minetest.register_node(def.nodename_prefix.."_cr_30", advtrains.merge_tables(common_def, make_overdef("cr_30", 1, 8), def.curve30 or {})) - minetest.register_node(def.nodename_prefix.."_cr_45", advtrains.merge_tables(common_def, make_overdef("cr_45", 2, 9), def.curve45 or {})) - minetest.register_node(def.nodename_prefix.."_cr_60", advtrains.merge_tables(common_def, make_overdef("cr_60", 3, 10), def.curve60 or {})) - - minetest.register_node(def.nodename_prefix.."_vst1", advtrains.merge_tables(common_def, make_overdef("vst1", 8, 0), - { - rely1=0, - rely2=0.5, - railheight=0.25, - }, - def.vst1 or {})) - minetest.register_node(def.nodename_prefix.."_vst2", advtrains.merge_tables(common_def, make_overdef("vst2", 8, 0), - { - rely1=0.5, - rely2=1, - railheight=0.75, - }, - def.vst2 or {})) - - advtrains.trackplacer_register(def.nodename_prefix.."_st", 0, 8) - advtrains.trackplacer_register(def.nodename_prefix.."_st_30", 1, 9) - advtrains.trackplacer_register(def.nodename_prefix.."_st_45", 2, 10) - advtrains.trackplacer_register(def.nodename_prefix.."_st_60", 3, 11) - advtrains.trackplacer_register(def.nodename_prefix.."_cr", 0, 7) - advtrains.trackplacer_register(def.nodename_prefix.."_cr_30", 1, 8) - advtrains.trackplacer_register(def.nodename_prefix.."_cr_45", 2, 9) - advtrains.trackplacer_register(def.nodename_prefix.."_cr_60", 3, 10) - - --[[advtrains.trackplacer_register(def.nodename_prefix.."_st", 0, 8) - advtrains.trackplacer_register(def.nodename_prefix.."_st_45", 2, 10) - advtrains.trackplacer_register(def.nodename_prefix.."_cr", 0, 6) - advtrains.trackplacer_register(def.nodename_prefix.."_cr_45", 2, 8) - --]] - --[[ - minetest.register_node(def.nodename_prefix.."_swl_st", advtrains.merge_tables(common_def, make_overdef("swl_st", 0, 8, make_switchfunc("swl_cr")), def.lswitchst or {})) - minetest.register_node(def.nodename_prefix.."_swl_st_45", advtrains.merge_tables(common_def, make_overdef("swl_st_45", 2, 10, make_switchfunc("swl_cr_45")), def.lswitchst45 or {})) - minetest.register_node(def.nodename_prefix.."_swl_cr", advtrains.merge_tables(common_def, make_overdef("swl_cr", 0, 6, make_switchfunc("swl_st")), def.lswitchcr or {})) - minetest.register_node(def.nodename_prefix.."_swl_cr_45", advtrains.merge_tables(common_def, make_overdef("swl_cr_45", 2, 8, make_switchfunc("swl_st_45")), def.lswitchcr45 or {})) - - minetest.register_node(def.nodename_prefix.."_swr_st", advtrains.merge_tables(common_def, make_overdef("swr_st", 0, 8, make_switchfunc("swr_cr")), def.rswitchst or {})) - minetest.register_node(def.nodename_prefix.."_swr_st_45", advtrains.merge_tables(common_def, make_overdef("swr_st_45", 2, 10, make_switchfunc("swr_cr_45")), def.rswitchst45 or {})) - minetest.register_node(def.nodename_prefix.."_swr_cr", advtrains.merge_tables(common_def, make_overdef("swr_cr", 0, 10, make_switchfunc("swr_st")), def.rswitchcr or {})) - minetest.register_node(def.nodename_prefix.."_swr_cr_45", advtrains.merge_tables(common_def, make_overdef("swr_cr_45", 2, 12, make_switchfunc("swr_st_45")), def.rswitchcr45 or {})) - - minetest.register_node(def.nodename_prefix.."_vert1", advtrains.merge_tables(common_def, make_overdef("vert1", 0, 8), { - mesh = "trackvertical1.b3d", - rely1=0, - rely2=0.5, - railheight=0.25, - description = def.description.." (vertical track lower node)", - }, def.vert1 or {})) - minetest.register_node(def.nodename_prefix.."_vert2", advtrains.merge_tables(common_def, make_overdef("vert2", 0, 8), { - mesh = "trackvertical2.b3d", - rely1=0.5, - rely2=1, - railheight=0.75, - description = def.description.." (vertical track upper node)", - },def.vert2 or {})) - ]] - - advtrains.register_track_placer(def.nodename_prefix, def.texture_prefix, def.description) table.insert(advtrains.all_tracktypes, tracktype) end -advtrains.register_tracks("regular", { - nodename_prefix="advtrains:track", - texture_prefix="advtrains_track", - description="Regular Train Track", -}) - -advtrains.register_tracks_finer("fineturns", { - nodename_prefix="advtrains:olddtrack", - texture_prefix="advtrains_dtrack", - description="Fine Turn Train Track", -}) - -advtrains.register_tracks_modeled("default", { - nodename_prefix="advtrains:dtrack", - texture_prefix="advtrains_dtrack", - models_prefix="advtrains_dtrack", - models_suffix=".b3d", - shared_texture="advtrains_dtrack_rail.png", - description="New Default Train Track", -}) function advtrains.is_track_and_drives_on(nodename, drives_on) if not minetest.registered_nodes[nodename] then @@ -393,6 +247,76 @@ function advtrains.get_track_connections(name, param2) return (nodedef.connect1 + 4 * noderot)%16, (nodedef.connect2 + 4 * noderot)%16, nodedef.rely1 or 0, nodedef.rely2 or 0, nodedef.railheight or 0 end +--END code, BEGIN definition +--definition format: ([] optional) +--[[{ + nodename_prefix + texture_prefix + [shared_texture] + models_prefix + models_suffix (with dot) + [shared_model] + formats={ + st,cr,swlst,swlcr,swrst,swrcr,vst1,vst2 + (each a table with indices 0-3, for if to register a rail with this 'rotation' table entry. nil is assumed as 'all', set {} to not register at all) + } + common={} change something on common rail appearance +}]] + +advtrains.register_tracks("regular", { + nodename_prefix="advtrains:track", + texture_prefix="advtrains_track", + shared_model="trackplane.b3d", + description="Regular Train Track", + formats={vst1={}, vst2={}}, +}, t_45deg) + + +advtrains.register_tracks("default", { + nodename_prefix="advtrains:dtrack", + texture_prefix="advtrains_dtrack", + models_prefix="advtrains_dtrack", + models_suffix=".b3d", + shared_texture="advtrains_dtrack_rail.png", + description="New Default Train Track", + formats={vst1={true}, vst2={true}, swlcr={}, swlst={}, swrcr={}, swrst={}}, +}, t_30deg) + +--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 + minetest.register_abm({ + -- In the following two fields, also group:groupname will work. + nodenames = {"advtrains:track_"..name}, + interval = 1.0, -- Operation interval in seconds + chance = 1, -- Chance of trigger per-node per-interval is 1.0 / this + action = function(pos, node, active_object_count, active_object_count_wider) minetest.set_node(pos, {name="advtrains:track_"..rep, param2=node.param2}) end, + }) + minetest.register_abm({ + -- In the following two fields, also group:groupname will work. + nodenames = {"advtrains:track_"..name.."_45"}, + interval = 1.0, -- Operation interval in seconds + chance = 1, -- Chance of trigger per-node per-interval is 1.0 / this + action = function(pos, node, active_object_count, active_object_count_wider) minetest.set_node(pos, {name="advtrains:track_"..rep.."_45", param2=node.param2}) end, + }) +end + +minetest.register_abm({ +-- In the following two fields, also group:groupname will work. + nodenames = {"advtrains:track_vert1"}, + interval = 1.0, -- Operation interval in seconds + chance = 1, -- Chance of trigger per-node per-interval is 1.0 / this + action = function(pos, node, active_object_count, active_object_count_wider) minetest.set_node(pos, {name="advtrains:dtrack_vst1", param2=(node.param2+2)%4}) end, +}) +minetest.register_abm({ +-- In the following two fields, also group:groupname will work. + nodenames = {"advtrains:track_vert2"}, + interval = 1.0, -- Operation interval in seconds + chance = 1, -- Chance of trigger per-node per-interval is 1.0 / this + action = function(pos, node, active_object_count, active_object_count_wider) minetest.set_node(pos, {name="advtrains:dtrack_vst2", param2=(node.param2+2)%4}) end, +}) + + -- cgit v1.2.3