Add left/right turn traffic lights

This commit is contained in:
cheapie 2016-01-12 15:50:18 -06:00
parent adfc0b8588
commit 29e20c68ee
16 changed files with 247 additions and 173 deletions

View File

@ -18,7 +18,7 @@ streets.tlBox = {
{-0.125, -0.125, 0.85, 0.125, 0.125, 0.75}, -- NodeBox11
}
streets.tlRythm = {
streets.tlRhythm = {
toRed = {
{name = "streets:trafficlight_top_yellow", pauseBefore = 0},
{name = "streets:trafficlight_top_red", pauseBefore = 3}
@ -39,8 +39,62 @@ streets.tlRythm = {
}
}
streets.tlRhythm_left = {
toRed = {
{name = "streets:trafficlight_top_left_yellow", pauseBefore = 0},
{name = "streets:trafficlight_top_left_red", pauseBefore = 3}
},
toGreen = {
{name = "streets:trafficlight_top_left_redyellow", pauseBefore = 0},
{name = "streets:trafficlight_top_left_green", pauseBefore = 1.5}
},
toOff = {
{name = "streets:trafficlight_top_left_warn", pauseBefore = 0},
{name = "streets:trafficlight_top_left_off", pauseBefore = 5}
},
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_yellow", pauseBefore = 0},
{name = "streets:trafficlight_top_right_red", pauseBefore = 3}
},
toGreen = {
{name = "streets:trafficlight_top_right_redyellow", pauseBefore = 0},
{name = "streets:trafficlight_top_right_green", pauseBefore = 1.5}
},
toOff = {
{name = "streets:trafficlight_top_right_warn", pauseBefore = 0},
{name = "streets:trafficlight_top_right_off", pauseBefore = 5}
},
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 or not streets.tlRythm[def.to] then
if not def.pos or not def.to then
return
end
local rhythm = {}
local nodename = minetest.get_node(def.pos).name
if 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)
@ -49,7 +103,7 @@ streets.tlSwitch = function(def)
return
end
-- Switch the trafficlight
for k, v in pairs(streets.tlRythm[def.to]) do
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})
@ -123,183 +177,185 @@ minetest.register_node(":streets:digiline_distributor",{
}
})
minetest.register_node(":streets:trafficlight_top_off",{
description = streets.S("Trafficlight"),
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.tlBox
},
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_off.png"},
digiline = {
receptor = {},
effector = {
action = function(pos, node, channel, msg)
streets.on_digiline_receive(pos, node, channel, msg)
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)")),
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.tlBox
},
tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png","streets_tl"..i.."_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
}
},
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,
})
end,
})
minetest.register_node(":streets:trafficlight_top_red",{
drop = "streets:trafficlight_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_tl_red.png"},
node_box = {
type = "fixed",
fixed = streets.tlBox
},
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:trafficlight_top"..i.."_red",{
drop = "streets:trafficlight_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_tl"..i.."_red.png"},
node_box = {
type = "fixed",
fixed = streets.tlBox
},
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:trafficlight_top_yellow",{
drop = "streets:trafficlight_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_tl_yellow.png"},
node_box = {
type = "fixed",
fixed = streets.tlBox
},
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:trafficlight_top"..i.."_yellow",{
drop = "streets:trafficlight_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_tl"..i.."_yellow.png"},
node_box = {
type = "fixed",
fixed = streets.tlBox
},
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:trafficlight_top_redyellow",{
drop = "streets:trafficlight_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_tl_redyellow.png"},
node_box = {
type = "fixed",
fixed = streets.tlBox
},
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:trafficlight_top"..i.."_redyellow",{
drop = "streets:trafficlight_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_tl"..i.."_redyellow.png"},
node_box = {
type = "fixed",
fixed = streets.tlBox
},
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:trafficlight_top_green",{
drop = "streets:trafficlight_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_tl_green.png"},
node_box = {
type = "fixed",
fixed = streets.tlBox
},
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:trafficlight_top"..i.."_green",{
drop = "streets:trafficlight_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_tl"..i.."_green.png"},
node_box = {
type = "fixed",
fixed = streets.tlBox
},
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:trafficlight_top_warn",{
drop = "streets:trafficlight_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_tl_warn.png",
animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.5},
}},
node_box = {
type = "fixed",
fixed = streets.tlBox
},
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:trafficlight_top"..i.."_warn",{
drop = "streets:trafficlight_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_tl"..i.."_warn.png",
animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.5},
}},
node_box = {
type = "fixed",
fixed = streets.tlBox
},
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:trafficlight_top_flashred",{
drop = "streets:trafficlight_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_tl_flashred.png",
animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.5},
}},
node_box = {
type = "fixed",
fixed = streets.tlBox
},
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:trafficlight_top"..i.."_flashred",{
drop = "streets:trafficlight_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_tl"..i.."_flashred.png",
animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.5},
}},
node_box = {
type = "fixed",
fixed = streets.tlBox
},
light_source = 6,
digiline = {
receptor = {},
effector = {
action = function(pos, node, channel, msg)
streets.on_digiline_receive(pos, node, channel, msg)
end
}
},
})
end
minetest.register_craft({
output = "streets:trafficlight_top_off",
@ -310,6 +366,24 @@ minetest.register_craft({
}
})
minetest.register_craft({
output = "streets:trafficlight_top_left_off",
recipe = {
{"dye:red", "default:steel_ingot", "default:steel_ingot"},
{"dye:yellow", "default:steel_ingot", "default:steel_ingot"},
{"dye:green", "default:steel_ingot", "default:steel_ingot"}
}
})
minetest.register_craft({
output = "streets:trafficlight_top_right_off",
recipe = {
{"default:steel_ingot", "default:steel_ingot", "dye:red"},
{"default:steel_ingot", "default:steel_ingot", "dye:yellow"},
{"default:steel_ingot", "default:steel_ingot", "dye:green"}
}
})
minetest.register_craft({
output = "streets:digiline_distributor",
recipe = {

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 976 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 913 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 941 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1003 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 884 B

After

Width:  |  Height:  |  Size: 843 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 950 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 892 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 941 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1000 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 976 B