From 53cb15cad0a10a1cd0e6e364791adf01239c9998 Mon Sep 17 00:00:00 2001 From: Hume2 Date: Thu, 10 Oct 2019 18:39:05 +0200 Subject: Make it work --- interlocking.lua | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 interlocking.lua (limited to 'interlocking.lua') diff --git a/interlocking.lua b/interlocking.lua new file mode 100644 index 0000000..98faa94 --- /dev/null +++ b/interlocking.lua @@ -0,0 +1,105 @@ +local setaspectf = function() + return function(pos, node, asp) + if not asp.main.free then + if asp.shunt.free then + advtrains.ndb.swap_node(pos, {name="linetrack:signal_shunt", param2 = node.param2}) + else + advtrains.ndb.swap_node(pos, {name="linetrack:signal_danger", param2 = node.param2}) + end + else + if asp.dst.free and asp.main.speed == -1 then + advtrains.ndb.swap_node(pos, {name="linetrack:signal_free", param2 = node.param2}) + else + advtrains.ndb.swap_node(pos, {name="linetrack:signal_slow", param2 = node.param2}) + end + end + local meta = minetest.get_meta(pos) + if meta then + meta:set_string("infotext", minetest.serialize(asp)) + end + end +end + +local suppasp = { + main = { + free = nil, + speed = {6, -1}, + }, + dst = { + free = nil, + speed = nil, + }, + shunt = { + free = nil, + proceed_as_main = true, + }, + info = { + call_on = false, + dead_end = false, + w_speed = nil, + } +} + +for typ, prts in pairs({ + danger = {asp = advtrains.interlocking.DANGER, n = "slow", ici=true}, + slow = {asp = { main = { free = true, speed = 6 }, shunt = {proceed_as_main = true}} , n = "free"}, + free = {asp = { main = { free = true, speed = -1 }, shunt = {proceed_as_main = true}} , n = "shunt"}, + shunt = {asp = { main = {free = false}, shunt = {free = true} } , n = "danger"}, + }) do + minetest.register_node("linetrack:signal_"..typ, { + description = "Generic Main Signal", + drawtype = "mesh", + mesh = "linetrack_signal.obj", + tiles = {"linetrack_signal_"..typ..".png"}, + + paramtype="light", + sunlight_propagates=true, + light_source = 4, + walkable = false, + + groups = { + cracky = 2, + advtrains_signal = 2, + not_blocking_trains = 1, + save_in_at_nodedb = 1, + not_in_creative_inventory = prts.ici and 0 or 1, + }, + drop = "linetrack:signal_danger", + inventory_image = "linetrack_signal_danger.png", + sounds = default.node_sound_stone_defaults(), + advtrains = { + set_aspect = setaspectf(), + supported_aspects = suppasp, + get_aspect = function(pos, node) + return prts.asp + end, + }, + use_texture_alpha = true, + on_rightclick = advtrains.interlocking.signal_rc_handler, + can_dig = advtrains.interlocking.signal_can_dig, + use_texture_alpha = true, + }) +end + +local at_tcb = minetest.registered_nodes["advtrains_interlocking:tcb_node"] + +minetest.register_node("linetrack:tcb_node", { + drawtype = "mesh", + paramtype="light", + paramtype2="facedir", + walkable = false, + mesh = "linetrack_signal.obj", + tiles = {"linetrack_tcb.png"}, + description="Line Circuit Break", + sunlight_propagates=true, + groups = { + cracky=3, + not_blocking_trains=1, + --save_in_at_nodedb=2, + at_il_track_circuit_break = 1, + }, + after_place_node = at_tcb.after_place_node, + on_rightclick = at_tcb.on_rightclick, + can_dig = at_tcb.can_dig, + after_dig_node = at_tcb.after_dig_node, +}) -- cgit v1.2.3