diff options
Diffstat (limited to 'streets/trafficlight')
24 files changed, 429 insertions, 0 deletions
| diff --git a/streets/trafficlight/depends.txt b/streets/trafficlight/depends.txt new file mode 100644 index 0000000..8d7b8d8 --- /dev/null +++ b/streets/trafficlight/depends.txt @@ -0,0 +1,4 @@ +default +streetsmod +digilines? +mesecons?
\ No newline at end of file diff --git a/streets/trafficlight/init.lua b/streets/trafficlight/init.lua new file mode 100644 index 0000000..38b18c4 --- /dev/null +++ b/streets/trafficlight/init.lua @@ -0,0 +1,367 @@ +--[[ +	StreetsMod: inDev Trafficlights +]] +dofile(streets.modpath .. "/../trafficlight/old2new.lua") + +streets.tlBox =	{ +	--[[ Thank you, rubenwardy, for your awesome NodeboxEditor! Not perfect, but still great! ]] +	{-0.1875,-0.5,0.5,0.1875,0.5,0.75}, --nodebox1 +	{-0.0625,0.375,0.3125,0.0625,0.4375,0.5}, --nodebox2 +	{-0.0625,0.0625,0.3125,0.0625,0.125,0.5}, --nodebox3 +	{-0.0625,-0.25,0.3125,0.0625,-0.1875,0.5}, --nodebox4 +	{0.0625,0.3125,0.3125,0.125,0.38,0.5}, --nodebox5 +	{-0.125,0.3125,0.3125,-0.0625,0.375,0.5}, --nodebox6 +	{0.0625,0,0.3125,0.125,0.0625,0.5}, --nodebox7 +	{-0.125,0,0.3125,-0.0625,0.0625,0.5}, --nodebox8 +	{0.0625,-0.3125,0.3125,0.125,-0.25,0.5}, --nodebox9 +	{-0.125,-0.3125,0.3125,-0.0625,-0.25,0.5}, --nodebox10 +	{-0.125, -0.125, 0.85, 0.125, 0.125, 0.75}, -- NodeBox11 +} + +streets.tlRhythm = { +	toRed = { +		{name = "streets:trafficlight_top_yellow", pauseBefore = 0}, +		{name = "streets:trafficlight_top_red", pauseBefore = 3} +	}, +	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_yellow", pauseBefore = 0}, +		{name = "streets:trafficlight_top_left_red", pauseBefore = 3} +	}, +	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_yellow", pauseBefore = 0}, +		{name = "streets:trafficlight_top_right_red", pauseBefore = 3} +	}, +	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 +	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) +	-- 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 + +streets.on_digiline_receive = function(pos, node, channel, msg) +	local setchan = minetest.get_meta(pos):get_string("channel") +	if setchan ~= channel then +		return +	end +	-- Tl states +	if msg == "OFF" then +		streets.tlSwitch({ +			pos = pos, +			to = "toOff" +		}) +	elseif msg == "GREEN" then +		streets.tlSwitch({ +			pos = pos, +			to = "toGreen" +		}) +	elseif msg == "RED" then +		streets.tlSwitch({ +			pos = pos, +			to = "toRed" +		}) +	elseif msg == "WARN" then +		streets.tlSwitch({ +			pos = pos, +			to = "toWarn" +		}) +	elseif msg == "FLASHRED" then +		streets.tlSwitch({ +			pos = pos, +			to = "toFlashRed" +		}) +	elseif msg == "GET" then +		local state = minetest.get_meta(pos):get_string("state") +		if not state or state == "" then +			state = "UNDEFINED" +		end +		digiline:receptor_send(pos, digiline.rules.default, channel, state) +	end +end + +minetest.register_node(":streets:digiline_distributor",{ +	description = streets.S("Digiline distributor"), +	tiles = {"streets_lampcontroller_top.png","streets_lampcontroller_bottom.png","streets_lampcontroller_sides.png"}, +	groups = {cracky = 1}, +	drawtype = "nodebox", +	paramtype = "light", +	node_box = { +		type = "fixed", +		fixed = { +			{-0.5,-0.5,-0.5,0.5,0.5,0.5}, +			{-0.05,0.5,-0.05,0.05,1.6,0.05} +		} +	}, +	digiline = { +		wire = { +			rules = { +				{x= 0, y= 0, z=-1}, +				{x= 0, y= 0, z= 1}, +				{x= 1, y= 0, z= 0}, +				{x=-1, y= 0, z= 0}, +				{x= 0, y= 2, z=0} +			} +		} +	} +}) + +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 +		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"..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_alias("streets:trafficlight_top"..i.."_redyellow","streets:trafficlight_top"..i.."_green") + +	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"..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"..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", +	recipe = { +		{"default:steel_ingot", "dye:red", "default:steel_ingot"}, +		{"default:steel_ingot", "dye:yellow", "default:steel_ingot"}, +		{"default:steel_ingot", "dye:green", "default:steel_ingot"} +	} +}) + +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 = { +		{"", "digilines:wire_std_00000000", ""}, +		{"digilines:wire_std_00000000", "mesecons_luacontroller:luacontroller0000", "digilines:wire_std_00000000"}, +		{"", "digilines:wire_std_00000000", ""} +	} +}) diff --git a/streets/trafficlight/old2new.lua b/streets/trafficlight/old2new.lua new file mode 100644 index 0000000..51ba9f3 --- /dev/null +++ b/streets/trafficlight/old2new.lua @@ -0,0 +1,58 @@ +--[[ +	StreetsMod: Convert old trafficlights +]] +minetest.register_node(":streets:trafficlight_bottom", { +	diggable = false, +	pointable = false, +	drawtype = "airlike", +	description = "I'm an old node, please drop me", +	groups = {not_in_creative_inventory = 1} +}) +minetest.register_abm({ +	nodenames = {"streets:trafficlight_bottom"}, +	interval = 1, +	chance = 1, +	action = function(pos, node) +		minetest.log("action", "Converting trafficlight at position " .. minetest.pos_to_string(pos)) +		-- Replace controller with distributor +		pos.y = pos.y - 2 +		minetest.set_node(pos, {name = "streets:digiline_distributor"}) +		-- Change bottom pole +		pos.y = pos.y + 2 +		minetest.set_node(pos, {name = "streets:bigpole", param2 = 2}) +		-- Change middle pole +		pos.y = pos.y + 1 +		minetest.set_node(pos, {name = "streets:bigpole", param2 = 2}) +		-- Change the top +		pos.y = pos.y + 1 +		local fd = minetest.get_node(pos).param2 +		local ch = minetest.get_meta(pos):get_string("channel") +		minetest.set_node(pos, {name = "streets:bigpole", param2 = 2}) +		-- Place new top +		if fd == 1 then +			minetest.set_node({x = pos.x - 1, y = pos.y, z = pos.z}, {name = "streets:trafficlight_top_warn", param2 = fd}) +			local meta = minetest.get_meta({x = pos.x - 1, y = pos.y, z = pos.z}) +			meta:set_string("channel", ch) +			meta:set_string("state", "warn") +			meta:set_string("formspec", "field[channel;Channel;${channel}]") +		elseif fd == 2 then +			minetest.set_node({x = pos.x, y = pos.y, z = pos.z + 1}, {name = "streets:trafficlight_top_warn", param2 = fd}) +			local meta = minetest.get_meta({x = pos.x, y = pos.y, z = pos.z + 1}) +			meta:set_string("channel", ch) +			meta:set_string("state", "warn") +			meta:set_string("formspec", "field[channel;Channel;${channel}]") +		elseif fd == 3 then +			minetest.set_node({x = pos.x + 1, y = pos.y, z = pos.z}, {name = "streets:trafficlight_top_warn", param2 = fd}) +			local meta = minetest.get_meta({x = pos.x + 1, y = pos.y, z = pos.z}) +			meta:set_string("channel", ch) +			meta:set_string("state", "warn") +			meta:set_string("formspec", "field[channel;Channel;${channel}]") +		elseif fd == 0 then +			minetest.set_node({x = pos.x, y = pos.y, z = pos.z - 1}, {name = "streets:trafficlight_top_warn", param2 = fd}) +			local meta = minetest.get_meta({x = pos.x, y = pos.y, z = pos.z - 1}) +			meta:set_string("channel", ch) +			meta:set_string("state", "warn") +			meta:set_string("formspec", "field[channel;Channel;${channel}]") +		end +	end +})
\ No newline at end of file diff --git a/streets/trafficlight/textures/streets_tl_bg.png b/streets/trafficlight/textures/streets_tl_bg.pngBinary files differ new file mode 100644 index 0000000..e4213db --- /dev/null +++ b/streets/trafficlight/textures/streets_tl_bg.png diff --git a/streets/trafficlight/textures/streets_tl_flashred.png b/streets/trafficlight/textures/streets_tl_flashred.pngBinary files differ new file mode 100644 index 0000000..82c118c --- /dev/null +++ b/streets/trafficlight/textures/streets_tl_flashred.png diff --git a/streets/trafficlight/textures/streets_tl_green.png b/streets/trafficlight/textures/streets_tl_green.pngBinary files differ new file mode 100644 index 0000000..7d7ba80 --- /dev/null +++ b/streets/trafficlight/textures/streets_tl_green.png diff --git a/streets/trafficlight/textures/streets_tl_left_flashred.png b/streets/trafficlight/textures/streets_tl_left_flashred.pngBinary files differ new file mode 100644 index 0000000..eb1d432 --- /dev/null +++ b/streets/trafficlight/textures/streets_tl_left_flashred.png diff --git a/streets/trafficlight/textures/streets_tl_left_green.png b/streets/trafficlight/textures/streets_tl_left_green.pngBinary files differ new file mode 100644 index 0000000..cd0ae67 --- /dev/null +++ b/streets/trafficlight/textures/streets_tl_left_green.png diff --git a/streets/trafficlight/textures/streets_tl_left_off.png b/streets/trafficlight/textures/streets_tl_left_off.pngBinary files differ new file mode 100644 index 0000000..74c88de --- /dev/null +++ b/streets/trafficlight/textures/streets_tl_left_off.png diff --git a/streets/trafficlight/textures/streets_tl_left_red.png b/streets/trafficlight/textures/streets_tl_left_red.pngBinary files differ new file mode 100644 index 0000000..db0694c --- /dev/null +++ b/streets/trafficlight/textures/streets_tl_left_red.png diff --git a/streets/trafficlight/textures/streets_tl_left_warn.png b/streets/trafficlight/textures/streets_tl_left_warn.pngBinary files differ new file mode 100644 index 0000000..e910682 --- /dev/null +++ b/streets/trafficlight/textures/streets_tl_left_warn.png diff --git a/streets/trafficlight/textures/streets_tl_left_yellow.png b/streets/trafficlight/textures/streets_tl_left_yellow.pngBinary files differ new file mode 100644 index 0000000..5eeddbb --- /dev/null +++ b/streets/trafficlight/textures/streets_tl_left_yellow.png diff --git a/streets/trafficlight/textures/streets_tl_off.png b/streets/trafficlight/textures/streets_tl_off.pngBinary files differ new file mode 100644 index 0000000..fb7dfaa --- /dev/null +++ b/streets/trafficlight/textures/streets_tl_off.png diff --git a/streets/trafficlight/textures/streets_tl_red.png b/streets/trafficlight/textures/streets_tl_red.pngBinary files differ new file mode 100644 index 0000000..4560199 --- /dev/null +++ b/streets/trafficlight/textures/streets_tl_red.png diff --git a/streets/trafficlight/textures/streets_tl_right_flashred.png b/streets/trafficlight/textures/streets_tl_right_flashred.pngBinary files differ new file mode 100644 index 0000000..14d1e4a --- /dev/null +++ b/streets/trafficlight/textures/streets_tl_right_flashred.png diff --git a/streets/trafficlight/textures/streets_tl_right_green.png b/streets/trafficlight/textures/streets_tl_right_green.pngBinary files differ new file mode 100644 index 0000000..f51ea81 --- /dev/null +++ b/streets/trafficlight/textures/streets_tl_right_green.png diff --git a/streets/trafficlight/textures/streets_tl_right_off.png b/streets/trafficlight/textures/streets_tl_right_off.pngBinary files differ new file mode 100644 index 0000000..7f5c3e5 --- /dev/null +++ b/streets/trafficlight/textures/streets_tl_right_off.png diff --git a/streets/trafficlight/textures/streets_tl_right_red.png b/streets/trafficlight/textures/streets_tl_right_red.pngBinary files differ new file mode 100644 index 0000000..8c25220 --- /dev/null +++ b/streets/trafficlight/textures/streets_tl_right_red.png diff --git a/streets/trafficlight/textures/streets_tl_right_warn.png b/streets/trafficlight/textures/streets_tl_right_warn.pngBinary files differ new file mode 100644 index 0000000..9d60365 --- /dev/null +++ b/streets/trafficlight/textures/streets_tl_right_warn.png diff --git a/streets/trafficlight/textures/streets_tl_right_yellow.png b/streets/trafficlight/textures/streets_tl_right_yellow.pngBinary files differ new file mode 100644 index 0000000..c92724a --- /dev/null +++ b/streets/trafficlight/textures/streets_tl_right_yellow.png diff --git a/streets/trafficlight/textures/streets_tl_warn.png b/streets/trafficlight/textures/streets_tl_warn.pngBinary files differ new file mode 100644 index 0000000..349fa84 --- /dev/null +++ b/streets/trafficlight/textures/streets_tl_warn.png diff --git a/streets/trafficlight/textures/streets_tl_yellow.png b/streets/trafficlight/textures/streets_tl_yellow.pngBinary files differ new file mode 100644 index 0000000..42b4803 --- /dev/null +++ b/streets/trafficlight/textures/streets_tl_yellow.png diff --git a/streets/trafficlight/textures/streets_trafficlight_inv.png b/streets/trafficlight/textures/streets_trafficlight_inv.pngBinary files differ new file mode 100644 index 0000000..fb76b72 --- /dev/null +++ b/streets/trafficlight/textures/streets_trafficlight_inv.png diff --git a/streets/trafficlight/textures/streets_trafficlight_template.png b/streets/trafficlight/textures/streets_trafficlight_template.pngBinary files differ new file mode 100644 index 0000000..f987c9b --- /dev/null +++ b/streets/trafficlight/textures/streets_trafficlight_template.png | 
