From 888b0ebfec8c2eff9015163549a7e47443cb8665 Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Fri, 1 Apr 2016 21:00:20 -0400 Subject: "explode" all modpacks into their individual components (you can't have a modpack buried inside a modpack) --- trafficlight/init.lua | 367 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 367 insertions(+) create mode 100644 trafficlight/init.lua (limited to 'trafficlight/init.lua') diff --git a/trafficlight/init.lua b/trafficlight/init.lua new file mode 100644 index 0000000..38b18c4 --- /dev/null +++ b/trafficlight/init.lua @@ -0,0 +1,367 @@ +--[[ + StreetsMod: inDev Trafficlights +]] +dofile(streets.modpath .. "/../trafficlight/old2new.lua") + +streets.tlBox = { + --[[ Thank you, rubenwardy, for your awesome NodeboxEditor! Not perfect, but still great! ]] + {-0.1875,-0.5,0.5,0.1875,0.5,0.75}, --nodebox1 + {-0.0625,0.375,0.3125,0.0625,0.4375,0.5}, --nodebox2 + {-0.0625,0.0625,0.3125,0.0625,0.125,0.5}, --nodebox3 + {-0.0625,-0.25,0.3125,0.0625,-0.1875,0.5}, --nodebox4 + {0.0625,0.3125,0.3125,0.125,0.38,0.5}, --nodebox5 + {-0.125,0.3125,0.3125,-0.0625,0.375,0.5}, --nodebox6 + {0.0625,0,0.3125,0.125,0.0625,0.5}, --nodebox7 + {-0.125,0,0.3125,-0.0625,0.0625,0.5}, --nodebox8 + {0.0625,-0.3125,0.3125,0.125,-0.25,0.5}, --nodebox9 + {-0.125,-0.3125,0.3125,-0.0625,-0.25,0.5}, --nodebox10 + {-0.125, -0.125, 0.85, 0.125, 0.125, 0.75}, -- NodeBox11 +} + +streets.tlRhythm = { + toRed = { + {name = "streets:trafficlight_top_yellow", pauseBefore = 0}, + {name = "streets:trafficlight_top_red", pauseBefore = 3} + }, + toGreen = { + {name = "streets:trafficlight_top_green", pauseBefore = 0} + }, + toOff = { + {name = "streets:trafficlight_top_off", pauseBefore = 0} + }, + toWarn = { + {name = "streets:trafficlight_top_warn", pauseBefore = 0} + }, + toFlashRed = { + {name = "streets:trafficlight_top_flashred", pauseBefore = 0} + } +} + +streets.tlRhythm_left = { + toRed = { + {name = "streets:trafficlight_top_left_yellow", pauseBefore = 0}, + {name = "streets:trafficlight_top_left_red", pauseBefore = 3} + }, + toGreen = { + {name = "streets:trafficlight_top_left_green", pauseBefore = 0} + }, + toOff = { + {name = "streets:trafficlight_top_left_off", pauseBefore = 0} + }, + toWarn = { + {name = "streets:trafficlight_top_left_warn", pauseBefore = 0} + }, + toFlashRed = { + {name = "streets:trafficlight_top_left_flashred", pauseBefore = 0} + } +} + +streets.tlRhythm_right = { + toRed = { + {name = "streets:trafficlight_top_right_yellow", pauseBefore = 0}, + {name = "streets:trafficlight_top_right_red", pauseBefore = 3} + }, + toGreen = { + {name = "streets:trafficlight_top_right_green", pauseBefore = 0} + }, + toOff = { + {name = "streets:trafficlight_top_right_off", pauseBefore = 0} + }, + toWarn = { + {name = "streets:trafficlight_top_right_warn", pauseBefore = 0} + }, + toFlashRed = { + {name = "streets:trafficlight_top_right_flashred", pauseBefore = 0} + } +} + +streets.tlSwitch = function(def) + if not def.pos or not def.to then + return + end + local rhythm = {} + local nodename = minetest.get_node(def.pos).name + if nodename:find("left") then + rhythm = streets.tlRhythm_left + elseif nodename:find("right") then + rhythm = streets.tlRhythm_right + else + rhythm = streets.tlRhythm + end + if not rhythm[def.to] then + return + end + local meta = minetest.get_meta(def.pos) + -- Only switch if new state ~= current state + if "to" .. meta:get_string("state") == def.to then + return + end + -- Switch the trafficlight + for k, v in pairs(rhythm[def.to]) do + minetest.get_meta(def.pos):set_string("state", def.to:gsub("to", "")) + minetest.after(v.pauseBefore, function() + minetest.swap_node(def.pos, {name = v.name, param2 = minetest.get_node(def.pos).param2}) + end) + end +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 + if msg == "OFF" then + streets.tlSwitch({ + pos = pos, + to = "toOff" + }) + elseif msg == "GREEN" then + streets.tlSwitch({ + pos = pos, + to = "toGreen" + }) + elseif msg == "RED" then + streets.tlSwitch({ + pos = pos, + to = "toRed" + }) + elseif msg == "WARN" then + streets.tlSwitch({ + pos = pos, + to = "toWarn" + }) + elseif msg == "FLASHRED" then + streets.tlSwitch({ + pos = pos, + to = "toFlashRed" + }) + elseif msg == "GET" then + local state = minetest.get_meta(pos):get_string("state") + if not state or state == "" then + state = "UNDEFINED" + end + digiline:receptor_send(pos, digiline.rules.default, channel, state) + 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} + } + } + } +}) + +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_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_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_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_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.5}, + }}, + 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_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.5}, + }}, + 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", ""} + } +}) -- cgit v1.2.3