Traffic light improvements and fixes

master
cheapie 2018-08-12 16:03:26 -05:00
parent d7343483c4
commit 78b0d22908
16 changed files with 367 additions and 32 deletions

View File

@ -135,6 +135,7 @@ streets.on_digiline_receive = function(pos, node, channel, msg)
end end
-- Tl states -- Tl states
local name = minetest.get_node(pos).name local name = minetest.get_node(pos).name
local althalfhz = minetest.get_node(pos).param2 % 2 == 1
if msg == "OFF" then if msg == "OFF" then
if name:find("pedlight") then if name:find("pedlight") then
if name == "streets:pedlight_top_flashingdontwalk" then if name == "streets:pedlight_top_flashingdontwalk" then
@ -181,6 +182,29 @@ streets.on_digiline_receive = function(pos, node, channel, msg)
else else
streets.tlSwitch(pos,"streets:trafficlight_top_green") streets.tlSwitch(pos,"streets:trafficlight_top_green")
end end
elseif msg == "FLASHGREEN" 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_flashingwalk")
elseif name:find("extender_left") then
streets.tlSwitch(pos,"streets:trafficlight_top_extender_left_flashgreen")
elseif name:find("extender_right") then
streets.tlSwitch(pos,"streets:trafficlight_top_extender_right_flashgreen")
elseif name:find("left") then
streets.tlSwitch(pos,"streets:trafficlight_top_left_flashgreen")
elseif name:find("right") then
streets.tlSwitch(pos,"streets:trafficlight_top_right_flashgreen")
elseif name:find("beacon_hybrid") then
--Not Supported
elseif name:find("beacon") then
--Not Supported
elseif name:find("rrfb") then
--Not Supported
else
streets.tlSwitch(pos,"streets:trafficlight_top_flashgreen")
end
elseif msg == "RED" then elseif msg == "RED" then
if name:find("pedlight") then if name:find("pedlight") then
if name == "streets:pedlight_top_flashingdontwalk" then if name == "streets:pedlight_top_flashingdontwalk" then
@ -204,20 +228,36 @@ streets.on_digiline_receive = function(pos, node, channel, msg)
else else
streets.tlSwitch(pos,"streets:trafficlight_top_red") streets.tlSwitch(pos,"streets:trafficlight_top_red")
end end
elseif msg == "WARN" then elseif msg == "WARN" or msg == "FLASHYELLOW" then
if name:find("pedlight") then if name:find("pedlight") then
if name ~= "streets:pedlight_top_flashingdontwalk" then if name ~= "streets:pedlight_top_flashingdontwalk" then
ped_on_flash_start(pos) ped_on_flash_start(pos)
end end
streets.tlSwitch(pos,"streets:pedlight_top_flashingdontwalk") streets.tlSwitch(pos,"streets:pedlight_top_flashingdontwalk")
elseif name:find("extender_left") then elseif name:find("extender_left") then
streets.tlSwitch(pos,"streets:trafficlight_top_extender_left_off") if althalfhz then
streets.tlSwitch(pos,"streets:trafficlight_top_extender_left_flashyellow_alt")
else
streets.tlSwitch(pos,"streets:trafficlight_top_extender_left_flashyellow")
end
elseif name:find("extender_right") then elseif name:find("extender_right") then
streets.tlSwitch(pos,"streets:trafficlight_top_extender_right_off") if althalfhz then
streets.tlSwitch(pos,"streets:trafficlight_top_extender_right_flashyellow_alt")
else
streets.tlSwitch(pos,"streets:trafficlight_top_extender_right_flashyellow")
end
elseif name:find("left") then elseif name:find("left") then
streets.tlSwitch(pos,"streets:trafficlight_top_left_warn") if althalfhz then
streets.tlSwitch(pos,"streets:trafficlight_top_left_warn_alt")
else
streets.tlSwitch(pos,"streets:trafficlight_top_left_warn")
end
elseif name:find("right") then elseif name:find("right") then
streets.tlSwitch(pos,"streets:trafficlight_top_right_warn") if althalfhz then
streets.tlSwitch(pos,"streets:trafficlight_top_right_warn_alt")
else
streets.tlSwitch(pos,"streets:trafficlight_top_right_warn")
end
elseif name:find("beacon_hybrid") then elseif name:find("beacon_hybrid") then
streets.tlSwitch(pos,"streets:beacon_hybrid_flashyellow") streets.tlSwitch(pos,"streets:beacon_hybrid_flashyellow")
elseif name:find("beacon") then elseif name:find("beacon") then
@ -225,30 +265,11 @@ streets.on_digiline_receive = function(pos, node, channel, msg)
elseif name:find("rrfb") then elseif name:find("rrfb") then
streets.tlSwitch(pos,"streets:trafficlight_rrfb_on") streets.tlSwitch(pos,"streets:trafficlight_rrfb_on")
else else
streets.tlSwitch(pos,"streets:trafficlight_top_warn") if althalfhz then
end streets.tlSwitch(pos,"streets:trafficlight_top_warn_alt")
elseif msg == "FLASHYELLOW" then else
if name:find("pedlight") then streets.tlSwitch(pos,"streets:trafficlight_top_warn")
if name ~= "streets:pedlight_top_flashingdontwalk" then
ped_on_flash_start(pos)
end end
streets.tlSwitch(pos,"streets:pedlight_top_flashingdontwalk")
elseif name:find("extender_left") then
streets.tlSwitch(pos,"streets:trafficlight_top_extender_left_flashyellow")
elseif name:find("extender_right") then
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
streets.tlSwitch(pos,"streets:trafficlight_top_right_warn")
elseif name:find("beacon_hybrid") then
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 end
elseif msg == "YELLOW" then elseif msg == "YELLOW" then
if name:find("pedlight") then if name:find("pedlight") then
@ -273,6 +294,26 @@ streets.on_digiline_receive = function(pos, node, channel, msg)
else else
streets.tlSwitch(pos,"streets:trafficlight_top_yellow") streets.tlSwitch(pos,"streets:trafficlight_top_yellow")
end end
elseif msg == "REDYELLOW" then
if name:find("pedlight") then
--Not Supported
elseif name:find("extender_left") then
--Not Supported
elseif name:find("extender_right") then
--Not Supported
elseif name:find("left") then
streets.tlSwitch(pos,"streets:trafficlight_top_left_redyellow")
elseif name:find("right") then
streets.tlSwitch(pos,"streets:trafficlight_top_right_redyellow")
elseif name:find("beacon_hybrid") then
--Not Supported
elseif name:find("beacon") then
--Not Supported
elseif name:find("rrfb") then
--Not Supported
else
streets.tlSwitch(pos,"streets:trafficlight_top_redyellow")
end
elseif msg == "FLASHRED" then elseif msg == "FLASHRED" then
if name:find("pedlight") then if name:find("pedlight") then
if name ~= "streets:pedlight_top_flashingdontwalk" then if name ~= "streets:pedlight_top_flashingdontwalk" then
@ -284,9 +325,17 @@ streets.on_digiline_receive = function(pos, node, channel, msg)
elseif name:find("extender_right") then elseif name:find("extender_right") then
streets.tlSwitch(pos,"streets:trafficlight_top_extender_right_off") streets.tlSwitch(pos,"streets:trafficlight_top_extender_right_off")
elseif name:find("left") then elseif name:find("left") then
streets.tlSwitch(pos,"streets:trafficlight_top_left_flashred") if althalfhz then
streets.tlSwitch(pos,"streets:trafficlight_top_left_flashred_alt")
else
streets.tlSwitch(pos,"streets:trafficlight_top_left_flashred")
end
elseif name:find("right") then elseif name:find("right") then
streets.tlSwitch(pos,"streets:trafficlight_top_right_flashred") if althalfhz then
streets.tlSwitch(pos,"streets:trafficlight_top_right_flashred_alt")
else
streets.tlSwitch(pos,"streets:trafficlight_top_right_flashred")
end
elseif name:find("beacon_hybrid") then elseif name:find("beacon_hybrid") then
streets.tlSwitch(pos,"streets:beacon_hybrid_flashred") streets.tlSwitch(pos,"streets:beacon_hybrid_flashred")
elseif name:find("beacon") then elseif name:find("beacon") then
@ -294,7 +343,11 @@ streets.on_digiline_receive = function(pos, node, channel, msg)
elseif name:find("rrfb") then elseif name:find("rrfb") then
--Not Supported --Not Supported
else else
streets.tlSwitch(pos,"streets:trafficlight_top_flashred") if althalfhz then
streets.tlSwitch(pos,"streets:trafficlight_top_flashred_alt")
else
streets.tlSwitch(pos,"streets:trafficlight_top_flashred")
end
end end
end end
end end
@ -787,6 +840,82 @@ minetest.register_node(":streets:trafficlight_top_extender_left_flashyellow",{
end, end,
}) })
minetest.register_node(":streets:trafficlight_top_extender_left_flashyellow_alt",{
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_alt.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_flashgreen",{
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_tle_left_flashgreen.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",{ minetest.register_node(":streets:trafficlight_top_extender_left_green",{
drop = "streets:trafficlight_top_extender_left_off", drop = "streets:trafficlight_top_extender_left_off",
description = streets.S("Traffic Light Left-Turn Module"), description = streets.S("Traffic Light Left-Turn Module"),
@ -930,6 +1059,82 @@ minetest.register_node(":streets:trafficlight_top_extender_right_flashyellow",{
end, end,
}) })
minetest.register_node(":streets:trafficlight_top_extender_right_flashyellow_alt",{
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_alt.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_flashgreen",{
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_tle_right_flashgreen.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",{ minetest.register_node(":streets:trafficlight_top_extender_right_green",{
drop = "streets:trafficlight_top_extender_left_off", drop = "streets:trafficlight_top_extender_left_off",
description = streets.S("Traffic Light Right-Turn Module"), description = streets.S("Traffic Light Right-Turn Module"),
@ -1077,6 +1282,33 @@ minetest.register_node(":streets:pedlight_top_flashingdontwalk",{
}, },
}) })
minetest.register_node(":streets:pedlight_top_flashingwalk",{
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_flashingwalk.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 = {},
wire = {rules=streets.tlDigilineRules},
effector = {
action = function(pos, node, channel, msg)
streets.on_digiline_receive(pos, node, channel, msg)
end
}
},
})
minetest.register_entity(":streets:pedcountdown",{ minetest.register_entity(":streets:pedcountdown",{
physical = false, physical = false,
collisionbox = {0,0,0,0,0,0}, collisionbox = {0,0,0,0,0,0},
@ -1209,7 +1441,29 @@ for _,i in pairs({"","_left","_right"}) do
}, },
}) })
minetest.register_alias("streets:trafficlight_top"..i.."_redyellow","streets:trafficlight_top"..i.."_green") minetest.register_node(":streets:trafficlight_top"..i.."_redyellow",{
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.."_redyellow.png"},
node_box = {
type = "fixed",
fixed = streets.tlBox
},
light_source = 6,
digiline = {
receptor = {},
wire = {rules=streets.tlDigilineRules},
effector = {
action = function(pos, node, channel, msg)
streets.on_digiline_receive(pos, node, channel, msg)
end
}
},
})
minetest.register_node(":streets:trafficlight_top"..i.."_green",{ minetest.register_node(":streets:trafficlight_top"..i.."_green",{
drop = "streets:trafficlight_top"..i.."_off", drop = "streets:trafficlight_top"..i.."_off",
@ -1288,6 +1542,87 @@ for _,i in pairs({"","_left","_right"}) do
} }
}, },
}) })
minetest.register_node(":streets:trafficlight_top"..i.."_warn_alt",{
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_alt.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 = {},
wire = {rules=streets.tlDigilineRules},
effector = {
action = function(pos, node, channel, msg)
streets.on_digiline_receive(pos, node, channel, msg)
end
}
},
})
minetest.register_node(":streets:trafficlight_top"..i.."_flashred_alt",{
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_alt.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 = {},
wire = {rules=streets.tlDigilineRules},
effector = {
action = function(pos, node, channel, msg)
streets.on_digiline_receive(pos, node, channel, msg)
end
}
},
})
minetest.register_node(":streets:trafficlight_top"..i.."_flashgreen",{
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.."_flashgreen.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 = {},
wire = {rules=streets.tlDigilineRules},
effector = {
action = function(pos, node, channel, msg)
streets.on_digiline_receive(pos, node, channel, msg)
end
}
},
})
end end
minetest.register_node(":streets:trafficlight_rrfb_off",{ minetest.register_node(":streets:trafficlight_rrfb_off",{

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB