diff options
author | cheapie <no-email-for-you@example.com> | 2015-10-20 16:15:59 -0500 |
---|---|---|
committer | cheapie <no-email-for-you@example.com> | 2015-10-20 16:15:59 -0500 |
commit | 350150cf7fb58f672a5b4fb29ff0b6e5701bd006 (patch) | |
tree | e3b90395db566e8752074d414224bdc81492244f | |
parent | b806b65a93a801b3032000b0c9289947036b08c9 (diff) | |
download | lightcontroller-350150cf7fb58f672a5b4fb29ff0b6e5701bd006.tar lightcontroller-350150cf7fb58f672a5b4fb29ff0b6e5701bd006.tar.gz lightcontroller-350150cf7fb58f672a5b4fb29ff0b6e5701bd006.tar.bz2 lightcontroller-350150cf7fb58f672a5b4fb29ff0b6e5701bd006.tar.xz lightcontroller-350150cf7fb58f672a5b4fb29ff0b6e5701bd006.zip |
Add stuff
-rw-r--r-- | COPYING | 14 | ||||
-rw-r--r-- | README | 8 | ||||
-rw-r--r-- | depends.txt | 1 | ||||
-rw-r--r-- | init.lua | 89 | ||||
-rw-r--r-- | init.lua.save | 48 |
5 files changed, 160 insertions, 0 deletions
@@ -0,0 +1,14 @@ + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2004 Sam Hocevar <sam@hocevar.net> + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. + @@ -0,0 +1,8 @@ +This mod adds two nodes that can be used to easily set up traffic lights. + + +Use: + +* Install a normal traffic light setup, with the main street's lights on the "main" channel and the side street's lights on "side". +* Place the master unit on a minor street approach and connect it with digilines +* (4+-way intersections only) Place a slave unit on all other minor street approaches, and connect them with digilines to the master unit, but NOT to the lights diff --git a/depends.txt b/depends.txt new file mode 100644 index 0000000..da1d119 --- /dev/null +++ b/depends.txt @@ -0,0 +1 @@ +digilines diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..564f4db --- /dev/null +++ b/init.lua @@ -0,0 +1,89 @@ +local emit_signals = function(pos) + local meta = minetest.get_meta(pos) + if meta:get_string("locked")~="true" then + meta:set_string("locked","true") + digiline:receptor_send(pos, digiline.rules.default, "main", "RED") + minetest.after(5,function(pos) + digiline:receptor_send(pos, digiline.rules.default, "side", "GREEN") + minetest.after(10,function(pos) + digiline:receptor_send(pos, digiline.rules.default, "side", "RED") + minetest.after(5,function(pos) + digiline:receptor_send(pos, digiline.rules.default, "main", "GREEN") + minetest.after(15,function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("locked","false") + end,pos) + end,pos) + end,pos) + end,pos) + end +end + +local lc_scan = function(pos) + local objs = minetest.get_objects_inside_radius(pos, 6) + if objs then + local _,obj + for _,obj in ipairs(objs) do + if obj:is_player() then + emit_signals(pos) + return + end + end + end +end + +local lc_slave_scan = function(pos) + local objs = minetest.get_objects_inside_radius(pos, 6) + if objs then + local _,obj + for _,obj in ipairs(objs) do + if obj:is_player() then + digiline:receptor_send(pos, digiline.rules.default, "detector", "car") + return + end + end + end +end + +local on_digiline_receive = function (pos, node, channel, msg) + if channel=="detector" then emit_signals(pos) end +end + +minetest.register_node("lightcontroller:trafficnext", { + description = "TrafficNeXt SoC - Master", + tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png^streets_tl_green.png","streets_tl_bg.png^streets_tl_green.png","streets_tl_bg.png^streets_tl_green.png","streets_tl_bg.png^streets_tl_green.png"}, + groups = {cracky=3, stone=1}, + sounds = default.node_sound_stone_defaults(), + digiline = + { + receptor = {}, + effector = { action = on_digiline_receive }, + }, + on_punch = function(pos) emit_signals(pos) end +}) + +minetest.register_abm({ + nodenames = {"lightcontroller:trafficnext"}, + interval = 1.0, + chance = 1, + action = function(pos) lc_scan(pos) end +}) + +minetest.register_node("lightcontroller:trafficnext_slave", { + description = "TrafficNeXt SoC - Slave", + tiles = {"streets_tl_bg.png","streets_tl_bg.png","streets_tl_bg.png^streets_tl_red.png","streets_tl_bg.png^streets_tl_red.png","streets_tl_bg.png^streets_tl_red.png","streets_tl_bg.png^streets_tl_red.png"}, + groups = {cracky=3, stone=1}, + sounds = default.node_sound_stone_defaults(), + digiline = + { + receptor = {}, + effector = { action = function() end}, + }, +}) + +minetest.register_abm({ + nodenames = {"lightcontroller:trafficnext_slave"}, + interval = 1.0, + chance = 1, + action = function(pos) lc_slave_scan(pos) end +}) diff --git a/init.lua.save b/init.lua.save new file mode 100644 index 0000000..a577ef4 --- /dev/null +++ b/init.lua.save @@ -0,0 +1,48 @@ +-- This function somewhat "borrowed" from Mesecons +local light_controller_scan = function (pos) + local objs = minetest.get_objects_inside_radius(pos, mesecon.setting("detector_radius", 6)) + for k, obj in pairs(objs) do + local isname = obj:get_player_name() + if (isname ~= "") then + return true + end + end + return false +end + + + +local emit_signals = function(pos) + local meta = minetest.get_meta(pos) + if meta:get_string("locked")~="true" then + meta:set_string("locked","true") + digiline:receptor_send(pos, digiline.rules.default, "main", "RED") + minetest.after(5,function(pos) + digiline:receptor_send(pos, digiline.rules.default, "side", "GREEN") + minetest.after(10,function(pos) + digiline:receptor_send(pos, digiline.rules.default, "side", "RED") + minetest.after(5,function(pos) + digiline:receptor_send(pos, digiline.rules.default, "main", "GREEN") + minetest.after(15,function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("locked","false") + end,pos) + end,pos) + end,pos) + end,pos) + end +end + + +minetest.register_node("lightcontroller:trafficnext", { + description = "TrafficNeXt SoC", + tiles = {"default_stone.png"}, + groups = {cracky=3, stone=1}, + sounds = default.node_sound_stone_defaults(), + digiline = + { + receptor = {}, + effector = {}, + }, + on_punch = function(pos) emit_signals(pos) end +}) |