--[[ StreetsMod: inDev Trafficlights ]] dofile(streets.modpath .. "/../trafficlight/old2new.lua") streets.tlBox = { {-0.1875,-0.5,0.5,0.1875,0.5,0.75}, --Box {-0.125, -0.125, 0.85, 0.125, 0.125, 0.75}, -- Pole Mounting Bracket {-0.125,0.3125,0.3125,-0.0625,0.375,0.5}, --Top Visor, Left {-0.0625,0.375,0.3125,0.0625,0.4375,0.5}, --Top Visor, Center {0.0625,0.3125,0.3125,0.125,0.38,0.5}, --Top Visor, Right {-0.125,0,0.3125,-0.0625,0.0625,0.5}, --Middle Visor, Left {-0.0625,0.0625,0.3125,0.0625,0.125,0.5}, --Middle Visor, Center {0.0625,0,0.3125,0.125,0.0625,0.5}, --Middle Visor, Right {-0.125,-0.3125,0.3125,-0.0625,-0.25,0.5}, --Bottom Visor, Left {-0.0625,-0.25,0.3125,0.0625,-0.1875,0.5}, --Bottom Visor, Center {0.0625,-0.3125,0.3125,0.125,-0.25,0.5}, --Bottom Visor, Right } streets.plBox = { {-0.1875,-0.5,0.5,0.1875,0.5,0.75}, --Box {-0.125, -0.125, 0.85, 0.125, 0.125, 0.75}, -- Pole Mounting Bracket {-0.1875,0.0625,0.3125,-0.1375,0.4375,0.5}, --Top Visor, Left {-0.1375,0.3875,0.3125,0.1375,0.4375,0.5}, --Top Visor, Center {0.1875,0.0625,0.3125,0.1375,0.4375,0.5}, --Top Visor, Right {-0.1875,-0.0625,0.3125,-0.1375,-0.4375,0.5}, --Bottom Visor, Left {-0.1375,-0.0625,0.3125,0.1375,-0.1125,0.5}, --Bottom Visor, Center {0.1875,-0.0625,0.3125,0.1375,-0.4375,0.5}, --Bottom Visor, Right } streets.tlSwitch = function(pos,to) if not pos or not to then return end minetest.swap_node(pos, {name = to, param2 = minetest.get_node(pos).param2}) end streets.on_digiline_receive = function(pos, node, channel, msg) local setchan = minetest.get_meta(pos):get_string("channel") if setchan ~= channel then return end -- Tl states local name = minetest.get_node(pos).name if msg == "OFF" then if name:find("pedlight") then streets.tlSwitch(pos,"streets:pedlight_top_off") elseif name:find("left") then streets.tlSwitch(pos,"streets:trafficlight_top_left_off") elseif name:find("right") then streets.tlSwitch(pos,"streets:trafficlight_top_right_off") else streets.tlSwitch(pos,"streets:trafficlight_top_off") end elseif msg == "GREEN" then if name:find("pedlight") then streets.tlSwitch(pos,"streets:pedlight_top_walk") elseif name:find("left") then streets.tlSwitch(pos,"streets:trafficlight_top_left_green") elseif name:find("right") then streets.tlSwitch(pos,"streets:trafficlight_top_right_green") else streets.tlSwitch(pos,"streets:trafficlight_top_green") end elseif msg == "RED" then if name:find("pedlight") then streets.tlSwitch(pos,"streets:pedlight_top_dontwalk") elseif name:find("left") then streets.tlSwitch(pos,"streets:trafficlight_top_left_red") elseif name:find("right") then streets.tlSwitch(pos,"streets:trafficlight_top_right_red") else streets.tlSwitch(pos,"streets:trafficlight_top_red") end elseif msg == "WARN" then if name:find("pedlight") then streets.tlSwitch(pos,"streets:pedlight_top_flashingdontwalk") elseif name:find("left") then streets.tlSwitch(pos,"streets:trafficlight_top_left_warn") elseif name:find("right") then streets.tlSwitch(pos,"streets:trafficlight_top_right_warn") else streets.tlSwitch(pos,"streets:trafficlight_top_warn") end elseif msg == "FLASHYELLOW" then if name:find("pedlight") then streets.tlSwitch(pos,"streets:pedlight_top_flashingdontwalk") elseif name:find("left") then streets.tlSwitch(pos,"streets:trafficlight_top_left_warn") elseif name:find("right") then streets.tlSwitch(pos,"streets:trafficlight_top_right_warn") else streets.tlSwitch(pos,"streets:trafficlight_top_warn") end elseif msg == "YELLOW" then if name:find("pedlight") then streets.tlSwitch(pos,"streets:pedlight_top_flashingdontwalk") elseif name:find("left") then streets.tlSwitch(pos,"streets:trafficlight_top_left_yellow") elseif name:find("right") then streets.tlSwitch(pos,"streets:trafficlight_top_right_yellow") else streets.tlSwitch(pos,"streets:trafficlight_top_yellow") end elseif msg == "FLASHRED" then if name:find("pedlight") then streets.tlSwitch(pos,"streets:pedlight_top_flashingdontwalk") elseif name:find("left") then streets.tlSwitch(pos,"streets:trafficlight_top_left_flashred") elseif name:find("right") then streets.tlSwitch(pos,"streets:trafficlight_top_right_flashred") else streets.tlSwitch(pos,"streets:trafficlight_top_flashred") end end end minetest.register_node(":streets:digiline_distributor",{ description = streets.S("Digiline distributor"), tiles = {"streets_lampcontroller_top.png","streets_lampcontroller_bottom.png","streets_lampcontroller_sides.png"}, groups = {cracky = 1}, drawtype = "nodebox", paramtype = "light", node_box = { type = "fixed", fixed = { {-0.5,-0.5,-0.5,0.5,0.5,0.5}, {-0.05,0.5,-0.05,0.05,1.6,0.05} } }, digiline = { wire = { rules = { {x= 0, y= 0, z=-1}, {x= 0, y= 0, z= 1}, {x= 1, y= 0, z= 0}, {x=-1, y= 0, z= 0}, {x= 0, y= 2, z=0} } } } }) minetest.register_node(":streets:pedlight_top_off",{ description = streets.S("Pedestrian Light"), drawtype="nodebox", paramtype = "light", paramtype2 = "facedir", groups = {cracky = 1, level = 2}, inventory_image = "streets_trafficlight_inv.png", light_source = 11, sunlight_propagates = true, node_box = { type = "fixed", fixed = streets.plBox }, tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_pl_off.png"}, digiline = { receptor = {}, effector = { action = function(pos, node, channel, msg) streets.on_digiline_receive(pos, node, channel, msg) end } }, on_construct = function(pos) local meta = minetest.get_meta(pos) meta:set_string("formspec", "field[channel;Channel;${channel}]") end, on_receive_fields = function(pos, formname, fields, sender) if (fields.channel) then minetest.get_meta(pos):set_string("channel", fields.channel) minetest.get_meta(pos):set_string("state", "Off") end end, }) minetest.register_node(":streets:pedlight_top_dontwalk",{ drop = "streets:pedlight_top_off", groups = {cracky = 1, not_in_creative_inventory = 1}, paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, drawtype = "nodebox", tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_pl_dontwalk.png"}, node_box = { type = "fixed", fixed = streets.plBox }, light_source = 6, digiline = { receptor = {}, effector = { action = function(pos, node, channel, msg) streets.on_digiline_receive(pos, node, channel, msg) end } }, }) minetest.register_node(":streets:pedlight_top_walk",{ drop = "streets:pedlight_top_off", groups = {cracky = 1, not_in_creative_inventory = 1}, paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, drawtype = "nodebox", tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_pl_walk.png"}, node_box = { type = "fixed", fixed = streets.plBox }, light_source = 6, digiline = { receptor = {}, effector = { action = function(pos, node, channel, msg) streets.on_digiline_receive(pos, node, channel, msg) end } }, }) minetest.register_node(":streets:pedlight_top_flashingdontwalk",{ drop = "streets:pedlight_top_off", groups = {cracky = 1, not_in_creative_inventory = 1}, paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, drawtype = "nodebox", tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png",{ name="streets_pl_flashingdontwalk.png", animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.2}, }}, node_box = { type = "fixed", fixed = streets.plBox }, light_source = 6, digiline = { receptor = {}, effector = { action = function(pos, node, channel, msg) streets.on_digiline_receive(pos, node, channel, msg) end } }, }) for _,i in pairs({"","_left","_right"}) do minetest.register_node(":streets:trafficlight_top"..i.."_off",{ description = streets.S((i == "" and "Traffic Light") or (i == "_left" and "Traffic Light (Left Turn)") or (i == "_right" and "Traffic Light (Right Turn)")), drawtype="nodebox", paramtype = "light", paramtype2 = "facedir", groups = {cracky = 1, level = 2}, inventory_image = "streets_trafficlight_inv.png", light_source = 11, sunlight_propagates = true, node_box = { type = "fixed", fixed = streets.tlBox }, tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl"..i.."_off.png"}, digiline = { receptor = {}, effector = { action = function(pos, node, channel, msg) streets.on_digiline_receive(pos, node, channel, msg) end } }, on_construct = function(pos) local meta = minetest.get_meta(pos) meta:set_string("formspec", "field[channel;Channel;${channel}]") end, on_receive_fields = function(pos, formname, fields, sender) if (fields.channel) then minetest.get_meta(pos):set_string("channel", fields.channel) minetest.get_meta(pos):set_string("state", "Off") end end, }) minetest.register_node(":streets:trafficlight_top"..i.."_red",{ drop = "streets:trafficlight_top"..i.."_off", groups = {cracky = 1, not_in_creative_inventory = 1}, paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, drawtype = "nodebox", tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl"..i.."_red.png"}, node_box = { type = "fixed", fixed = streets.tlBox }, light_source = 6, digiline = { receptor = {}, effector = { action = function(pos, node, channel, msg) streets.on_digiline_receive(pos, node, channel, msg) end } }, }) minetest.register_node(":streets:trafficlight_top"..i.."_yellow",{ drop = "streets:trafficlight_top"..i.."_off", groups = {cracky = 1, not_in_creative_inventory = 1}, paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, drawtype = "nodebox", tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl"..i.."_yellow.png"}, node_box = { type = "fixed", fixed = streets.tlBox }, light_source = 6, digiline = { receptor = {}, effector = { action = function(pos, node, channel, msg) streets.on_digiline_receive(pos, node, channel, msg) end } }, }) minetest.register_alias("streets:trafficlight_top"..i.."_redyellow","streets:trafficlight_top"..i.."_green") minetest.register_node(":streets:trafficlight_top"..i.."_green",{ drop = "streets:trafficlight_top"..i.."_off", groups = {cracky = 1, not_in_creative_inventory = 1}, paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, drawtype = "nodebox", tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl"..i.."_green.png"}, node_box = { type = "fixed", fixed = streets.tlBox }, light_source = 6, digiline = { receptor = {}, effector = { action = function(pos, node, channel, msg) streets.on_digiline_receive(pos, node, channel, msg) end } }, }) minetest.register_node(":streets:trafficlight_top"..i.."_warn",{ drop = "streets:trafficlight_top"..i.."_off", groups = {cracky = 1, not_in_creative_inventory = 1}, paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, drawtype = "nodebox", tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png",{ name="streets_tl"..i.."_warn.png", animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.2}, }}, node_box = { type = "fixed", fixed = streets.tlBox }, light_source = 6, digiline = { receptor = {}, effector = { action = function(pos, node, channel, msg) streets.on_digiline_receive(pos, node, channel, msg) end } }, }) minetest.register_node(":streets:trafficlight_top"..i.."_flashred",{ drop = "streets:trafficlight_top"..i.."_off", groups = {cracky = 1, not_in_creative_inventory = 1}, paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, drawtype = "nodebox", tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png",{ name="streets_tl"..i.."_flashred.png", animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.2}, }}, node_box = { type = "fixed", fixed = streets.tlBox }, light_source = 6, digiline = { receptor = {}, effector = { action = function(pos, node, channel, msg) streets.on_digiline_receive(pos, node, channel, msg) end } }, }) end minetest.register_craft({ output = "streets:trafficlight_top_off", recipe = { {"default:steel_ingot", "dye:red", "default:steel_ingot"}, {"default:steel_ingot", "dye:yellow", "default:steel_ingot"}, {"default:steel_ingot", "dye:green", "default:steel_ingot"} } }) minetest.register_craft({ output = "streets:trafficlight_top_left_off", recipe = { {"dye:red", "default:steel_ingot", "default:steel_ingot"}, {"dye:yellow", "default:steel_ingot", "default:steel_ingot"}, {"dye:green", "default:steel_ingot", "default:steel_ingot"} } }) minetest.register_craft({ output = "streets:trafficlight_top_right_off", recipe = { {"default:steel_ingot", "default:steel_ingot", "dye:red"}, {"default:steel_ingot", "default:steel_ingot", "dye:yellow"}, {"default:steel_ingot", "default:steel_ingot", "dye:green"} } }) minetest.register_craft({ output = "streets:digiline_distributor", recipe = { {"", "digilines:wire_std_00000000", ""}, {"digilines:wire_std_00000000", "mesecons_luacontroller:luacontroller0000", "digilines:wire_std_00000000"}, {"", "digilines:wire_std_00000000", ""} } })