summaryrefslogtreecommitdiff
path: root/trafficlight
diff options
context:
space:
mode:
Diffstat (limited to 'trafficlight')
-rw-r--r--trafficlight/init.lua375
-rw-r--r--trafficlight/textures/streets_b_red.pngbin0 -> 847 bytes
-rw-r--r--trafficlight/textures/streets_pl_number_0l.pngbin0 -> 572 bytes
-rw-r--r--trafficlight/textures/streets_pl_number_0r.pngbin0 -> 615 bytes
-rw-r--r--trafficlight/textures/streets_pl_number_1l.pngbin0 -> 601 bytes
-rw-r--r--trafficlight/textures/streets_pl_number_1r.pngbin0 -> 602 bytes
-rw-r--r--trafficlight/textures/streets_pl_number_2l.pngbin0 -> 610 bytes
-rw-r--r--trafficlight/textures/streets_pl_number_2r.pngbin0 -> 610 bytes
-rw-r--r--trafficlight/textures/streets_pl_number_3l.pngbin0 -> 606 bytes
-rw-r--r--trafficlight/textures/streets_pl_number_3r.pngbin0 -> 610 bytes
-rw-r--r--trafficlight/textures/streets_pl_number_4l.pngbin0 -> 614 bytes
-rw-r--r--trafficlight/textures/streets_pl_number_4r.pngbin0 -> 620 bytes
-rw-r--r--trafficlight/textures/streets_pl_number_5l.pngbin0 -> 603 bytes
-rw-r--r--trafficlight/textures/streets_pl_number_5r.pngbin0 -> 621 bytes
-rw-r--r--trafficlight/textures/streets_pl_number_6l.pngbin0 -> 608 bytes
-rw-r--r--trafficlight/textures/streets_pl_number_6r.pngbin0 -> 618 bytes
-rw-r--r--trafficlight/textures/streets_pl_number_7l.pngbin0 -> 607 bytes
-rw-r--r--trafficlight/textures/streets_pl_number_7r.pngbin0 -> 620 bytes
-rw-r--r--trafficlight/textures/streets_pl_number_8l.pngbin0 -> 608 bytes
-rw-r--r--trafficlight/textures/streets_pl_number_8r.pngbin0 -> 611 bytes
-rw-r--r--trafficlight/textures/streets_pl_number_9l.pngbin0 -> 605 bytes
-rw-r--r--trafficlight/textures/streets_pl_number_9r.pngbin0 -> 613 bytes
-rw-r--r--trafficlight/textures/streets_pl_number_template.pngbin0 -> 669 bytes
-rw-r--r--trafficlight/textures/streets_pl_walk.pngbin628 -> 630 bytes
-rw-r--r--trafficlight/textures/streets_rrfb_inv.pngbin0 -> 3066 bytes
-rw-r--r--trafficlight/textures/streets_rrfb_off.pngbin0 -> 627 bytes
-rw-r--r--trafficlight/textures/streets_rrfb_on.pngbin0 -> 762 bytes
-rw-r--r--trafficlight/textures/streets_tl_straight_green.pngbin0 -> 938 bytes
-rw-r--r--trafficlight/textures/streets_trafficlight_inv_greenarrow.pngbin0 -> 2753 bytes
29 files changed, 373 insertions, 2 deletions
diff --git a/trafficlight/init.lua b/trafficlight/init.lua
index b55d467..2b2038b 100644
--- a/trafficlight/init.lua
+++ b/trafficlight/init.lua
@@ -75,6 +75,14 @@ streets.hbBox = {
{0.0625,-0.125,0.3125,0.125,-0.0625,0.5}, --Bottom Visor, Right
}
+streets.rrfbBox = {
+ {-0.375,0.05,0.5,0.375,0.3,0.75}, --Box
+
+ {-0.125, 0.125, 0.85, 0.125, 0.25, 0.75}, -- Pole Mounting Bracket
+
+ --These usually don't have visors
+}
+
streets.tlDigilineRules = {
{x= 0, y= 0, z=-1},
{x= 0, y= 0, z= 1},
@@ -84,6 +92,35 @@ streets.tlDigilineRules = {
{x= 0, y= 1, z= 0}
}
+local function ped_on_flash_start(pos)
+ local timer = minetest.get_node_timer(pos)
+ timer:set(99,0)
+end
+
+local function ped_on_flash_end(pos,record)
+ local objs = minetest.get_objects_inside_radius(pos,1.5)
+ for _,obj in pairs(objs) do
+ if obj:get_luaentity() and obj:get_luaentity().name == "streets:pedcountdown" then
+ obj:remove()
+ end
+ end
+ if not record then
+ timer:stop()
+ return
+ end
+ local timer = minetest.get_node_timer(pos)
+ local meta = minetest.get_meta(pos)
+ local lastflashtime = meta:get_int("lastflashtime")
+ local twoflashesago = meta:get_int("twoflashesago")
+ local flashtime = math.min(timer:get_elapsed(),99)
+ meta:set_int("twoflashesago",lastflashtime)
+ meta:set_int("lastflashtime",flashtime)
+ if math.abs(twoflashesago-lastflashtime) + math.abs(lastflashtime-flashtime) < 3 then
+ meta:set_int("flashtime",flashtime)
+ end
+ timer:stop()
+end
+
streets.tlSwitch = function(pos,to)
if not pos or not to then
return
@@ -100,6 +137,9 @@ streets.on_digiline_receive = function(pos, node, channel, msg)
local name = minetest.get_node(pos).name
if msg == "OFF" then
if name:find("pedlight") then
+ if name == "streets:pedlight_top_flashingdontwalk" then
+ ped_on_flash_end(pos,false)
+ end
streets.tlSwitch(pos,"streets:pedlight_top_off")
elseif name:find("extender_left") then
streets.tlSwitch(pos,"streets:trafficlight_top_extender_left_off")
@@ -113,11 +153,16 @@ streets.on_digiline_receive = function(pos, node, channel, msg)
streets.tlSwitch(pos,"streets:beacon_hybrid_off")
elseif name:find("beacon") then
streets.tlSwitch(pos,"streets:beacon_off")
+ elseif name:find("rrfb") then
+ streets.tlSwitch(pos,"streets:trafficlight_rrfb_off")
else
streets.tlSwitch(pos,"streets:trafficlight_top_off")
end
elseif msg == "GREEN" then
if name:find("pedlight") then
+ if name == "streets:pedlight_top_flashingdontwalk" then
+ ped_on_flash_end(pos,false)
+ end
streets.tlSwitch(pos,"streets:pedlight_top_walk")
elseif name:find("extender_left") then
streets.tlSwitch(pos,"streets:trafficlight_top_extender_left_green")
@@ -131,11 +176,16 @@ streets.on_digiline_receive = function(pos, node, channel, msg)
--Not Supported
elseif name:find("beacon") then
--Not Supported
+ elseif name:find("rrfb") then
+ --Not Supported
else
streets.tlSwitch(pos,"streets:trafficlight_top_green")
end
elseif msg == "RED" then
if name:find("pedlight") then
+ if name == "streets:pedlight_top_flashingdontwalk" then
+ ped_on_flash_end(pos,true)
+ end
streets.tlSwitch(pos,"streets:pedlight_top_dontwalk")
elseif name:find("extender_left") then
streets.tlSwitch(pos,"streets:trafficlight_top_extender_left_off")
@@ -148,12 +198,17 @@ streets.on_digiline_receive = function(pos, node, channel, msg)
elseif name:find("beacon_hybrid") then
streets.tlSwitch(pos,"streets:beacon_hybrid_red")
elseif name:find("beacon") then
+ streets.tlSwitch(pos,"streets:beacon_red")
+ elseif name:find("rrfb") then
--Not Supported
else
streets.tlSwitch(pos,"streets:trafficlight_top_red")
end
elseif msg == "WARN" then
if name:find("pedlight") then
+ if name ~= "streets:pedlight_top_flashingdontwalk" then
+ ped_on_flash_start(pos)
+ end
streets.tlSwitch(pos,"streets:pedlight_top_flashingdontwalk")
elseif name:find("extender_left") then
streets.tlSwitch(pos,"streets:trafficlight_top_extender_left_off")
@@ -167,16 +222,21 @@ streets.on_digiline_receive = function(pos, node, channel, msg)
streets.tlSwitch(pos,"streets:beacon_hybrid_flashyellow")
elseif name:find("beacon") then
streets.tlSwitch(pos,"streets:beacon_flashyellow")
+ elseif name:find("rrfb") then
+ streets.tlSwitch(pos,"streets:trafficlight_rrfb_on")
else
streets.tlSwitch(pos,"streets:trafficlight_top_warn")
end
elseif msg == "FLASHYELLOW" then
if name:find("pedlight") then
+ if name ~= "streets:pedlight_top_flashingdontwalk" then
+ ped_on_flash_start(pos)
+ end
streets.tlSwitch(pos,"streets:pedlight_top_flashingdontwalk")
elseif name:find("extender_left") then
- streets.tlSwitch(pos,"streets:trafficlight_top_extender_left_off")
+ streets.tlSwitch(pos,"streets:trafficlight_top_extender_left_flashyellow")
elseif name:find("extender_right") then
- streets.tlSwitch(pos,"streets:trafficlight_top_extender_right_off")
+ streets.tlSwitch(pos,"streets:trafficlight_top_extender_right_flashyellow")
elseif name:find("left") then
streets.tlSwitch(pos,"streets:trafficlight_top_left_warn")
elseif name:find("right") then
@@ -185,11 +245,16 @@ streets.on_digiline_receive = function(pos, node, channel, msg)
streets.tlSwitch(pos,"streets:beacon_hybrid_flashyellow")
elseif name:find("beacon") then
streets.tlSwitch(pos,"streets:beacon_flashyellow")
+ elseif name:find("rrfb") then
+ streets.tlSwitch(pos,"streets:trafficlight_rrfb_on")
else
streets.tlSwitch(pos,"streets:trafficlight_top_warn")
end
elseif msg == "YELLOW" then
if name:find("pedlight") then
+ if name ~= "streets:pedlight_top_flashingdontwalk" then
+ ped_on_flash_start(pos)
+ end
streets.tlSwitch(pos,"streets:pedlight_top_flashingdontwalk")
elseif name:find("extender_left") then
streets.tlSwitch(pos,"streets:trafficlight_top_extender_left_yellow")
@@ -202,12 +267,17 @@ streets.on_digiline_receive = function(pos, node, channel, msg)
elseif name:find("beacon_hybrid") then
streets.tlSwitch(pos,"streets:beacon_hybrid_yellow")
elseif name:find("beacon") then
+ streets.tlSwitch(pos,"streets:beacon_yellow")
+ elseif name:find("rrfb") then
--Not Supported
else
streets.tlSwitch(pos,"streets:trafficlight_top_yellow")
end
elseif msg == "FLASHRED" then
if name:find("pedlight") then
+ if name ~= "streets:pedlight_top_flashingdontwalk" then
+ ped_on_flash_start(pos)
+ end
streets.tlSwitch(pos,"streets:pedlight_top_flashingdontwalk")
elseif name:find("extender_left") then
streets.tlSwitch(pos,"streets:trafficlight_top_extender_left_off")
@@ -221,6 +291,8 @@ streets.on_digiline_receive = function(pos, node, channel, msg)
streets.tlSwitch(pos,"streets:beacon_hybrid_flashred")
elseif name:find("beacon") then
streets.tlSwitch(pos,"streets:beacon_flashred")
+ elseif name:find("rrfb") then
+ --Not Supported
else
streets.tlSwitch(pos,"streets:trafficlight_top_flashred")
end
@@ -465,6 +537,74 @@ minetest.register_node(":streets:beacon_off",{
end,
})
+minetest.register_node(":streets:beacon_red",{
+ drop = "streets:beacon_off",
+ drawtype="nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 1, level = 2, not_in_creative_inventory = 1},
+ light_source = 11,
+ sunlight_propagates = true,
+ node_box = {
+ type = "fixed",
+ fixed = streets.bBox
+ },
+ tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_b_red.png"},
+ digiline = {
+ receptor = {},
+ wire = {rules=streets.tlDigilineRules},
+ 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:beacon_yellow",{
+ drop = "streets:beacon_off",
+ drawtype="nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 1, level = 2, not_in_creative_inventory = 1},
+ light_source = 11,
+ sunlight_propagates = true,
+ node_box = {
+ type = "fixed",
+ fixed = streets.bBox
+ },
+ tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_yellow.png"},
+ digiline = {
+ receptor = {},
+ wire = {rules=streets.tlDigilineRules},
+ 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:beacon_flashred",{
drop = "streets:beacon_off",
drawtype="nodebox",
@@ -609,6 +749,44 @@ minetest.register_node(":streets:trafficlight_top_extender_left_yellow",{
end,
})
+minetest.register_node(":streets:trafficlight_top_extender_left_flashyellow",{
+ drop = "streets:trafficlight_top_extender_left_off",
+ description = streets.S("Traffic Light Left-Turn Module"),
+ drawtype="nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 1, level = 2, not_in_creative_inventory = 1},
+ light_source = 11,
+ sunlight_propagates = true,
+ node_box = {
+ type = "fixed",
+ fixed = streets.tleBox
+ },
+ tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png",{
+ name="streets_tl_left_warn.png",
+ animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.2},
+ }},
+ digiline = {
+ receptor = {},
+ wire = {rules=streets.tlDigilineRules},
+ 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_extender_left_green",{
drop = "streets:trafficlight_top_extender_left_off",
description = streets.S("Traffic Light Left-Turn Module"),
@@ -714,6 +892,44 @@ minetest.register_node(":streets:trafficlight_top_extender_right_yellow",{
end,
})
+minetest.register_node(":streets:trafficlight_top_extender_right_flashyellow",{
+ drop = "streets:trafficlight_top_extender_right_off",
+ description = streets.S("Traffic Light Right-Turn Module"),
+ drawtype="nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 1, level = 2, not_in_creative_inventory = 1},
+ light_source = 11,
+ sunlight_propagates = true,
+ node_box = {
+ type = "fixed",
+ fixed = streets.tleBox
+ },
+ tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png",{
+ name="streets_tl_right_warn.png",
+ animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.2},
+ }},
+ digiline = {
+ receptor = {},
+ wire = {rules=streets.tlDigilineRules},
+ 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_extender_right_green",{
drop = "streets:trafficlight_top_extender_left_off",
description = streets.S("Traffic Light Right-Turn Module"),
@@ -749,6 +965,8 @@ minetest.register_node(":streets:trafficlight_top_extender_right_green",{
end,
})
+
+
minetest.register_node(":streets:pedlight_top_off",{
description = streets.S("Pedestrian Light"),
drawtype="nodebox",
@@ -859,6 +1077,53 @@ minetest.register_node(":streets:pedlight_top_flashingdontwalk",{
},
})
+minetest.register_entity(":streets:pedcountdown",{
+ physical = false,
+ collisionbox = {0,0,0,0,0,0},
+ visual = "upright_sprite",
+ textures = {"streets_pl_number_0l.png"}
+})
+
+minetest.register_abm({
+ label = "Update pedestrian countdown time display",
+ nodenames = {"streets:pedlight_top_flashingdontwalk"},
+ interval = 1,
+ chance = 1,
+ catch_up = false,
+ action = function(pos,node)
+ local meta = minetest.get_meta(pos)
+ local timer = minetest.get_node_timer(pos)
+ local totaltime = meta:get_int("flashtime")
+ local timesofar = timer:get_elapsed()
+ local timeleft = math.max(0,totaltime-timesofar)
+ local objs = minetest.get_objects_inside_radius(pos,1.5)
+ for _,obj in pairs(objs) do
+ if obj:get_luaentity() and obj:get_luaentity().name == "streets:pedcountdown" then
+ obj:remove()
+ end
+ end
+ local backdir = minetest.facedir_to_dir(node.param2)
+ local frontdir = vector.multiply(backdir,-1)
+ local entpos = vector.add(vector.multiply(frontdir,-0.495),pos)
+ local entity = minetest.add_entity(entpos,"streets:pedcountdown")
+ local yaw = 0
+ if backdir.z == -1 then
+ yaw = math.pi
+ elseif backdir.x == 1 then
+ yaw = math.pi / 2
+ elseif backdir.x == -1 then
+ yaw = math.pi / -2
+ end
+ --Circles are hard...
+ entity:setyaw(yaw)
+
+ local ldigit = math.floor(timeleft/10)
+ local rdigit = timeleft % 10
+ local tex = string.format("streets_pl_number_%01dl.png^streets_pl_number_%01dr.png",ldigit,rdigit)
+ entity:set_properties({textures={tex}})
+ end
+})
+
for _,i in pairs({"","_left","_right"}) do
minetest.register_node(":streets:trafficlight_top"..i.."_off",{
@@ -1025,6 +1290,94 @@ for _,i in pairs({"","_left","_right"}) do
})
end
+minetest.register_node(":streets:trafficlight_rrfb_off",{
+ description = streets.S("Rectangular Rapid Flashing Beacon"),
+ drawtype="nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 1, level = 2},
+ inventory_image = "streets_rrfb_inv.png",
+ light_source = 11,
+ sunlight_propagates = true,
+ node_box = {
+ type = "fixed",
+ fixed = streets.rrfbBox
+ },
+ tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_rrfb_off.png"},
+ digiline = {
+ receptor = {},
+ wire = {rules=streets.tlDigilineRules},
+ 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_rrfb_on",{
+ drop = "streets:trafficlight_rrfb_off",
+ drawtype="nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 1, level = 2, not_in_creative_inventory = 1},
+ light_source = 11,
+ sunlight_propagates = true,
+ node_box = {
+ type = "fixed",
+ fixed = streets.rrfbBox
+ },
+ tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png",{
+ name="streets_rrfb_on.png",
+ animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=0.75},
+ }},
+ digiline = {
+ receptor = {},
+ wire = {rules=streets.tlDigilineRules},
+ 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:green_arrow",{
+ description = "Straight-through green arrow",
+ drawtype="nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 1, level = 2},
+ inventory_image = "streets_trafficlight_inv_greenarrow.png",
+ light_source = 11,
+ sunlight_propagates = true,
+ node_box = {
+ type = "fixed",
+ fixed = streets.bBox
+ },
+ tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_straight_green.png"}
+})
+
minetest.register_craft({
output = "streets:trafficlight_top_off",
recipe = {
@@ -1096,6 +1449,24 @@ minetest.register_craft({
})
minetest.register_craft({
+ output = "streets:trafficlight_rrfb_off",
+ recipe = {
+ {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
+ {"dye:yellow", "default:steel_ingot", "dye:yellow"},
+ {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}
+ }
+})
+
+minetest.register_craft({
+ output = "streets:green_arrow",
+ recipe = {
+ {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
+ {"default:steel_ingot", "dye:green", "default:steel_ingot"},
+ {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}
+ }
+})
+
+minetest.register_craft({
output = "streets:digiline_distributor",
recipe = {
{"", "digilines:wire_std_00000000", ""},
diff --git a/trafficlight/textures/streets_b_red.png b/trafficlight/textures/streets_b_red.png
new file mode 100644
index 0000000..7419027
--- /dev/null
+++ b/trafficlight/textures/streets_b_red.png
Binary files differ
diff --git a/trafficlight/textures/streets_pl_number_0l.png b/trafficlight/textures/streets_pl_number_0l.png
new file mode 100644
index 0000000..99fc263
--- /dev/null
+++ b/trafficlight/textures/streets_pl_number_0l.png
Binary files differ
diff --git a/trafficlight/textures/streets_pl_number_0r.png b/trafficlight/textures/streets_pl_number_0r.png
new file mode 100644
index 0000000..6f9b143
--- /dev/null
+++ b/trafficlight/textures/streets_pl_number_0r.png
Binary files differ
diff --git a/trafficlight/textures/streets_pl_number_1l.png b/trafficlight/textures/streets_pl_number_1l.png
new file mode 100644
index 0000000..e35735a
--- /dev/null
+++ b/trafficlight/textures/streets_pl_number_1l.png
Binary files differ
diff --git a/trafficlight/textures/streets_pl_number_1r.png b/trafficlight/textures/streets_pl_number_1r.png
new file mode 100644
index 0000000..b878ae6
--- /dev/null
+++ b/trafficlight/textures/streets_pl_number_1r.png
Binary files differ
diff --git a/trafficlight/textures/streets_pl_number_2l.png b/trafficlight/textures/streets_pl_number_2l.png
new file mode 100644
index 0000000..d439aa9
--- /dev/null
+++ b/trafficlight/textures/streets_pl_number_2l.png
Binary files differ
diff --git a/trafficlight/textures/streets_pl_number_2r.png b/trafficlight/textures/streets_pl_number_2r.png
new file mode 100644
index 0000000..dd9b4be
--- /dev/null
+++ b/trafficlight/textures/streets_pl_number_2r.png
Binary files differ
diff --git a/trafficlight/textures/streets_pl_number_3l.png b/trafficlight/textures/streets_pl_number_3l.png
new file mode 100644
index 0000000..bdab896
--- /dev/null
+++ b/trafficlight/textures/streets_pl_number_3l.png
Binary files differ
diff --git a/trafficlight/textures/streets_pl_number_3r.png b/trafficlight/textures/streets_pl_number_3r.png
new file mode 100644
index 0000000..da7de9a
--- /dev/null
+++ b/trafficlight/textures/streets_pl_number_3r.png
Binary files differ
diff --git a/trafficlight/textures/streets_pl_number_4l.png b/trafficlight/textures/streets_pl_number_4l.png
new file mode 100644
index 0000000..91d1ff4
--- /dev/null
+++ b/trafficlight/textures/streets_pl_number_4l.png
Binary files differ
diff --git a/trafficlight/textures/streets_pl_number_4r.png b/trafficlight/textures/streets_pl_number_4r.png
new file mode 100644
index 0000000..5468b00
--- /dev/null
+++ b/trafficlight/textures/streets_pl_number_4r.png
Binary files differ
diff --git a/trafficlight/textures/streets_pl_number_5l.png b/trafficlight/textures/streets_pl_number_5l.png
new file mode 100644
index 0000000..4d21bbd
--- /dev/null
+++ b/trafficlight/textures/streets_pl_number_5l.png
Binary files differ
diff --git a/trafficlight/textures/streets_pl_number_5r.png b/trafficlight/textures/streets_pl_number_5r.png
new file mode 100644
index 0000000..9992ed9
--- /dev/null
+++ b/trafficlight/textures/streets_pl_number_5r.png
Binary files differ
diff --git a/trafficlight/textures/streets_pl_number_6l.png b/trafficlight/textures/streets_pl_number_6l.png
new file mode 100644
index 0000000..92f64be
--- /dev/null
+++ b/trafficlight/textures/streets_pl_number_6l.png
Binary files differ
diff --git a/trafficlight/textures/streets_pl_number_6r.png b/trafficlight/textures/streets_pl_number_6r.png
new file mode 100644
index 0000000..ba84f54
--- /dev/null
+++ b/trafficlight/textures/streets_pl_number_6r.png
Binary files differ
diff --git a/trafficlight/textures/streets_pl_number_7l.png b/trafficlight/textures/streets_pl_number_7l.png
new file mode 100644
index 0000000..9328d86
--- /dev/null
+++ b/trafficlight/textures/streets_pl_number_7l.png
Binary files differ
diff --git a/trafficlight/textures/streets_pl_number_7r.png b/trafficlight/textures/streets_pl_number_7r.png
new file mode 100644
index 0000000..444ce49
--- /dev/null
+++ b/trafficlight/textures/streets_pl_number_7r.png
Binary files differ
diff --git a/trafficlight/textures/streets_pl_number_8l.png b/trafficlight/textures/streets_pl_number_8l.png
new file mode 100644
index 0000000..9a78cd8
--- /dev/null
+++ b/trafficlight/textures/streets_pl_number_8l.png
Binary files differ
diff --git a/trafficlight/textures/streets_pl_number_8r.png b/trafficlight/textures/streets_pl_number_8r.png
new file mode 100644
index 0000000..727afad
--- /dev/null
+++ b/trafficlight/textures/streets_pl_number_8r.png
Binary files differ
diff --git a/trafficlight/textures/streets_pl_number_9l.png b/trafficlight/textures/streets_pl_number_9l.png
new file mode 100644
index 0000000..4830e0f
--- /dev/null
+++ b/trafficlight/textures/streets_pl_number_9l.png
Binary files differ
diff --git a/trafficlight/textures/streets_pl_number_9r.png b/trafficlight/textures/streets_pl_number_9r.png
new file mode 100644
index 0000000..dabea2a
--- /dev/null
+++ b/trafficlight/textures/streets_pl_number_9r.png
Binary files differ
diff --git a/trafficlight/textures/streets_pl_number_template.png b/trafficlight/textures/streets_pl_number_template.png
new file mode 100644
index 0000000..41ae2f1
--- /dev/null
+++ b/trafficlight/textures/streets_pl_number_template.png
Binary files differ
diff --git a/trafficlight/textures/streets_pl_walk.png b/trafficlight/textures/streets_pl_walk.png
index 392f024..4a79e54 100644
--- a/trafficlight/textures/streets_pl_walk.png
+++ b/trafficlight/textures/streets_pl_walk.png
Binary files differ
diff --git a/trafficlight/textures/streets_rrfb_inv.png b/trafficlight/textures/streets_rrfb_inv.png
new file mode 100644
index 0000000..8977926
--- /dev/null
+++ b/trafficlight/textures/streets_rrfb_inv.png
Binary files differ
diff --git a/trafficlight/textures/streets_rrfb_off.png b/trafficlight/textures/streets_rrfb_off.png
new file mode 100644
index 0000000..0d1ba1a
--- /dev/null
+++ b/trafficlight/textures/streets_rrfb_off.png
Binary files differ
diff --git a/trafficlight/textures/streets_rrfb_on.png b/trafficlight/textures/streets_rrfb_on.png
new file mode 100644
index 0000000..4b28c81
--- /dev/null
+++ b/trafficlight/textures/streets_rrfb_on.png
Binary files differ
diff --git a/trafficlight/textures/streets_tl_straight_green.png b/trafficlight/textures/streets_tl_straight_green.png
new file mode 100644
index 0000000..afbd506
--- /dev/null
+++ b/trafficlight/textures/streets_tl_straight_green.png
Binary files differ
diff --git a/trafficlight/textures/streets_trafficlight_inv_greenarrow.png b/trafficlight/textures/streets_trafficlight_inv_greenarrow.png
new file mode 100644
index 0000000..530a9b9
--- /dev/null
+++ b/trafficlight/textures/streets_trafficlight_inv_greenarrow.png
Binary files differ