Add pedestrian crossing signals

master
cheapie 2016-05-10 15:38:02 -05:00
parent 8e9477c451
commit 7abb5392c0
5 changed files with 143 additions and 4 deletions

View File

@ -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)")),

Binary file not shown.

After

Width:  |  Height:  |  Size: 631 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 798 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 571 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 628 B