Clean up the traffic light changing code
parent
61b30b012b
commit
90aabf0d23
|
@ -35,114 +35,11 @@ streets.plBox = {
|
||||||
{0.1875,-0.0625,0.3125,0.1375,-0.4375,0.5}, --Bottom Visor, Right
|
{0.1875,-0.0625,0.3125,0.1375,-0.4375,0.5}, --Bottom Visor, Right
|
||||||
}
|
}
|
||||||
|
|
||||||
streets.plRhythm = {
|
streets.tlSwitch = function(pos,to)
|
||||||
toRed = {
|
if not pos or not to then
|
||||||
{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}
|
|
||||||
},
|
|
||||||
toYellow = {
|
|
||||||
{name = "streets:trafficlight_top_yellow", pauseBefore = 0}
|
|
||||||
},
|
|
||||||
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_red", pauseBefore = 0}
|
|
||||||
},
|
|
||||||
toYellow = {
|
|
||||||
{name = "streets:trafficlight_top_left_yellow", pauseBefore = 0}
|
|
||||||
},
|
|
||||||
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_red", pauseBefore = 0}
|
|
||||||
},
|
|
||||||
toYellow = {
|
|
||||||
{name = "streets:trafficlight_top_right_yellow", pauseBefore = 0}
|
|
||||||
},
|
|
||||||
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
|
return
|
||||||
end
|
end
|
||||||
local rhythm = {}
|
minetest.swap_node(pos, {name = to, param2 = minetest.get_node(pos).param2})
|
||||||
local nodename = minetest.get_node(def.pos).name
|
|
||||||
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
|
|
||||||
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
|
end
|
||||||
|
|
||||||
streets.on_digiline_receive = function(pos, node, channel, msg)
|
streets.on_digiline_receive = function(pos, node, channel, msg)
|
||||||
|
@ -151,48 +48,77 @@ streets.on_digiline_receive = function(pos, node, channel, msg)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
-- Tl states
|
-- Tl states
|
||||||
local ped = minetest.get_node(pos).name:find("pedlight")
|
local name = minetest.get_node(pos).name
|
||||||
if msg == "OFF" then
|
if msg == "OFF" then
|
||||||
streets.tlSwitch({
|
if name:find("pedlight") then
|
||||||
pos = pos,
|
streets.tlSwitch(pos,"streets:pedlight_top_off")
|
||||||
to = "toOff"
|
elseif name:find("left") then
|
||||||
})
|
streets.tlSwitch(pos,"streets:trafficlight_top_left_off")
|
||||||
elseif msg == "GREEN" then
|
elseif name:find("right") then
|
||||||
streets.tlSwitch({
|
streets.tlSwitch(pos,"streets:trafficlight_top_right_off")
|
||||||
pos = pos,
|
else
|
||||||
to = "toGreen"
|
streets.tlSwitch(pos,"streets:trafficlight_top_off")
|
||||||
})
|
end
|
||||||
elseif msg == "RED" then
|
elseif msg == "GREEN" then
|
||||||
streets.tlSwitch({
|
if name:find("pedlight") then
|
||||||
pos = pos,
|
streets.tlSwitch(pos,"streets:pedlight_top_walk")
|
||||||
to = "toRed"
|
elseif name:find("left") then
|
||||||
})
|
streets.tlSwitch(pos,"streets:trafficlight_top_left_green")
|
||||||
elseif msg == "WARN" then
|
elseif name:find("right") then
|
||||||
streets.tlSwitch({
|
streets.tlSwitch(pos,"streets:trafficlight_top_right_green")
|
||||||
pos = pos,
|
else
|
||||||
to = ped and "toFlashRed" or "toWarn"
|
streets.tlSwitch(pos,"streets:trafficlight_top_green")
|
||||||
})
|
end
|
||||||
elseif (not ped) and msg == "FLASHYELLOW" then
|
elseif msg == "RED" then
|
||||||
streets.tlSwitch({
|
if name:find("pedlight") then
|
||||||
pos = pos,
|
streets.tlSwitch(pos,"streets:pedlight_top_dontwalk")
|
||||||
to = "toWarn"
|
elseif name:find("left") then
|
||||||
})
|
streets.tlSwitch(pos,"streets:trafficlight_top_left_red")
|
||||||
elseif (not ped) and msg == "YELLOW" then
|
elseif name:find("right") then
|
||||||
streets.tlSwitch({
|
streets.tlSwitch(pos,"streets:trafficlight_top_right_red")
|
||||||
pos = pos,
|
else
|
||||||
to = "toYellow"
|
streets.tlSwitch(pos,"streets:trafficlight_top_red")
|
||||||
})
|
end
|
||||||
elseif msg == "FLASHRED" then
|
elseif msg == "WARN" then
|
||||||
streets.tlSwitch({
|
if name:find("pedlight") then
|
||||||
pos = pos,
|
streets.tlSwitch(pos,"streets:pedlight_top_flashingdontwalk")
|
||||||
to = "toFlashRed"
|
elseif name:find("left") then
|
||||||
})
|
streets.tlSwitch(pos,"streets:trafficlight_top_left_warn")
|
||||||
elseif msg == "GET" then
|
elseif name:find("right") then
|
||||||
local state = minetest.get_meta(pos):get_string("state")
|
streets.tlSwitch(pos,"streets:trafficlight_top_right_warn")
|
||||||
if not state or state == "" then
|
else
|
||||||
state = "UNDEFINED"
|
streets.tlSwitch(pos,"streets:trafficlight_top_warn")
|
||||||
|
end
|
||||||
|
elseif msg == "FLASHYELLOW" then
|
||||||
|
if name:find("pedlight") then
|
||||||
|
streets.tlSwitch(pos,"streets:pedlight_top_flashingdontwalk")
|
||||||
|
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")
|
||||||
|
else
|
||||||
|
streets.tlSwitch(pos,"streets:trafficlight_top_warn")
|
||||||
|
end
|
||||||
|
elseif msg == "YELLOW" then
|
||||||
|
if name:find("pedlight") then
|
||||||
|
streets.tlSwitch(pos,"streets:pedlight_top_flashingdontwalk")
|
||||||
|
elseif name:find("left") then
|
||||||
|
streets.tlSwitch(pos,"streets:trafficlight_top_left_yellow")
|
||||||
|
elseif name:find("right") then
|
||||||
|
streets.tlSwitch(pos,"streets:trafficlight_top_right_yellow")
|
||||||
|
else
|
||||||
|
streets.tlSwitch(pos,"streets:trafficlight_top_yellow")
|
||||||
|
end
|
||||||
|
elseif msg == "FLASHRED" then
|
||||||
|
if name:find("pedlight") then
|
||||||
|
streets.tlSwitch(pos,"streets:pedlight_top_flashingdontwalk")
|
||||||
|
elseif name:find("left") then
|
||||||
|
streets.tlSwitch(pos,"streets:trafficlight_top_left_flashred")
|
||||||
|
elseif name:find("right") then
|
||||||
|
streets.tlSwitch(pos,"streets:trafficlight_top_right_flashred")
|
||||||
|
else
|
||||||
|
streets.tlSwitch(pos,"streets:trafficlight_top_flashred")
|
||||||
end
|
end
|
||||||
digiline:receptor_send(pos, digiline.rules.default, channel, state)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue