From 7abb5392c0eff8f975f6bd093132b2b78caaf468 Mon Sep 17 00:00:00 2001 From: cheapie Date: Tue, 10 May 2016 15:38:02 -0500 Subject: Add pedestrian crossing signals --- trafficlight/init.lua | 147 ++++++++++++++++++++- trafficlight/textures/streets_pl_dontwalk.png | Bin 0 -> 631 bytes .../textures/streets_pl_flashingdontwalk.png | Bin 0 -> 798 bytes trafficlight/textures/streets_pl_off.png | Bin 0 -> 571 bytes trafficlight/textures/streets_pl_walk.png | Bin 0 -> 628 bytes 5 files changed, 143 insertions(+), 4 deletions(-) create mode 100644 trafficlight/textures/streets_pl_dontwalk.png create mode 100644 trafficlight/textures/streets_pl_flashingdontwalk.png create mode 100644 trafficlight/textures/streets_pl_off.png create mode 100644 trafficlight/textures/streets_pl_walk.png diff --git a/trafficlight/init.lua b/trafficlight/init.lua index bd1a9b9..baaa924 100644 --- a/trafficlight/init.lua +++ b/trafficlight/init.lua @@ -21,6 +21,35 @@ streets.tlBox = { {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.plRhythm = { + toRed = { + {name = "streets:pedlight_top_dontwalk", pauseBefore = 0} + }, + toFlashRed = { + {name = "streets:pedlight_top_flashingdontwalk", pauseBefore = 0} + }, + toGreen = { + {name = "streets:pedlight_top_walk", pauseBefore = 0} + }, + toOff = { + {name = "streets:pedlight_top_off", pauseBefore = 0} + }, +} + streets.tlRhythm = { toRed = { {name = "streets:trafficlight_top_red", pauseBefore = 0} @@ -90,7 +119,9 @@ streets.tlSwitch = function(def) end local rhythm = {} local nodename = minetest.get_node(def.pos).name - if nodename:find("left") then + if nodename:find("pedlight") then + rhythm = streets.plRhythm + elseif nodename:find("left") then rhythm = streets.tlRhythm_left elseif nodename:find("right") then rhythm = streets.tlRhythm_right @@ -120,6 +151,7 @@ streets.on_digiline_receive = function(pos, node, channel, msg) return end -- Tl states + local ped = minetest.get_node(pos).name:find("pedlight") if msg == "OFF" then streets.tlSwitch({ pos = pos, @@ -138,14 +170,14 @@ streets.on_digiline_receive = function(pos, node, channel, msg) elseif msg == "WARN" then streets.tlSwitch({ pos = pos, - to = "toWarn" + to = ped and "toFlashRed" or "toWarn" }) - elseif msg == "FLASHYELLOW" then + elseif (not ped) and msg == "FLASHYELLOW" then streets.tlSwitch({ pos = pos, to = "toWarn" }) - elseif msg == "YELLOW" then + elseif (not ped) and msg == "YELLOW" then streets.tlSwitch({ pos = pos, to = "toYellow" @@ -190,6 +222,113 @@ minetest.register_node(":streets:digiline_distributor",{ } }) +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)")), diff --git a/trafficlight/textures/streets_pl_dontwalk.png b/trafficlight/textures/streets_pl_dontwalk.png new file mode 100644 index 0000000..3abc776 Binary files /dev/null and b/trafficlight/textures/streets_pl_dontwalk.png differ diff --git a/trafficlight/textures/streets_pl_flashingdontwalk.png b/trafficlight/textures/streets_pl_flashingdontwalk.png new file mode 100644 index 0000000..4fbed1e Binary files /dev/null and b/trafficlight/textures/streets_pl_flashingdontwalk.png differ diff --git a/trafficlight/textures/streets_pl_off.png b/trafficlight/textures/streets_pl_off.png new file mode 100644 index 0000000..1b41b40 Binary files /dev/null and b/trafficlight/textures/streets_pl_off.png differ diff --git a/trafficlight/textures/streets_pl_walk.png b/trafficlight/textures/streets_pl_walk.png new file mode 100644 index 0000000..392f024 Binary files /dev/null and b/trafficlight/textures/streets_pl_walk.png differ -- cgit v1.2.3