summaryrefslogtreecommitdiff
path: root/init.lua
diff options
context:
space:
mode:
authorcheapie <no-email-for-you@example.com>2017-01-16 18:12:11 -0600
committercheapie <no-email-for-you@example.com>2017-01-16 18:12:11 -0600
commitfd64aeba76655bcd3680a8d408e050597d34e5b0 (patch)
tree1370a6a6977c221658728c6f31b85f339693a2da /init.lua
downloademtraffic-fd64aeba76655bcd3680a8d408e050597d34e5b0.tar
emtraffic-fd64aeba76655bcd3680a8d408e050597d34e5b0.tar.gz
emtraffic-fd64aeba76655bcd3680a8d408e050597d34e5b0.tar.bz2
emtraffic-fd64aeba76655bcd3680a8d408e050597d34e5b0.tar.xz
emtraffic-fd64aeba76655bcd3680a8d408e050597d34e5b0.zip
Add content
Diffstat (limited to 'init.lua')
-rw-r--r--init.lua106
1 files changed, 106 insertions, 0 deletions
diff --git a/init.lua b/init.lua
new file mode 100644
index 0000000..cd70486
--- /dev/null
+++ b/init.lua
@@ -0,0 +1,106 @@
+local polemount_nodebox = {
+ { -0.35, -0.45, 0.35, 0.35, 0.45, 0.85 }
+}
+
+
+minetest.register_node("emtraffic:controller", {
+ tiles = {
+ "emtraffic_sides.png",
+ "emtraffic_sides.png",
+ "emtraffic_sides.png",
+ "emtraffic_sides.png",
+ "emtraffic_sides.png",
+ "emtraffic_front.png",
+ },
+ description = "Electromechanical Traffic Signal Controller",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ drawtype = "nodebox",
+ groups = {dig_immediate=2},
+ sounds = default.node_sound_metal_defaults(),
+ on_construct = function(pos)
+ local meta = minetest.get_meta(pos)
+ meta:set_string("state","greena")
+ digiline:receptor_send(pos,digiline.rules.default,"a","RED")
+ digiline:receptor_send(pos,digiline.rules.default,"b","RED")
+ digiline:receptor_send(pos,digiline.rules.default,"c","RED")
+ digiline:receptor_send(pos,digiline.rules.default,"d","RED")
+ local timer = minetest.get_node_timer(pos)
+ timer:start(3)
+ end,
+ on_timer = function(pos)
+ minetest.sound_play("emtraffic_solenoid",{gain=0.25,max_hear_distance=8,pos=pos})
+ local meta = minetest.get_meta(pos)
+ local timer = minetest.get_node_timer(pos)
+ local state = meta:get_string("state")
+ if state == "allreda" then
+ state = "greena"
+ minetest.after(0.5,function(pos)
+ digiline:receptor_send(pos,digiline.rules.default,"a","RED")
+ digiline:receptor_send(pos,digiline.rules.default,"b","RED")
+ digiline:receptor_send(pos,digiline.rules.default,"c","RED")
+ digiline:receptor_send(pos,digiline.rules.default,"d","RED")
+ timer:start(3)
+ end,pos)
+ elseif state == "yellowa" then
+ state = "allredb"
+ minetest.after(0.5,function(pos)
+ digiline:receptor_send(pos,digiline.rules.default,"a","YELLOW")
+ digiline:receptor_send(pos,digiline.rules.default,"b","RED")
+ digiline:receptor_send(pos,digiline.rules.default,"c","YELLOW")
+ digiline:receptor_send(pos,digiline.rules.default,"d","RED")
+ end,pos)
+ timer:start(3)
+ elseif state == "greena" then
+ state = "yellowa"
+ minetest.after(0.5,function(pos)
+ digiline:receptor_send(pos,digiline.rules.default,"a","GREEN")
+ digiline:receptor_send(pos,digiline.rules.default,"b","RED")
+ digiline:receptor_send(pos,digiline.rules.default,"c","GREEN")
+ digiline:receptor_send(pos,digiline.rules.default,"d","RED")
+ end,pos)
+ timer:start(15)
+ elseif state == "allredb" then
+ state = "greenb"
+ minetest.after(0.5,function(pos)
+ digiline:receptor_send(pos,digiline.rules.default,"a","RED")
+ digiline:receptor_send(pos,digiline.rules.default,"b","RED")
+ digiline:receptor_send(pos,digiline.rules.default,"c","RED")
+ digiline:receptor_send(pos,digiline.rules.default,"d","RED")
+ end,pos)
+ timer:start(3)
+ elseif state == "yellowb" then
+ state = "allreda"
+ minetest.after(0.5,function(pos)
+ digiline:receptor_send(pos,digiline.rules.default,"a","RED")
+ digiline:receptor_send(pos,digiline.rules.default,"b","YELLOW")
+ digiline:receptor_send(pos,digiline.rules.default,"c","RED")
+ digiline:receptor_send(pos,digiline.rules.default,"d","YELLOW")
+ end,pos)
+ timer:start(3)
+ elseif state == "greenb" then
+ state = "yellowb"
+ minetest.after(0.5,function(pos)
+ digiline:receptor_send(pos,digiline.rules.default,"a","RED")
+ digiline:receptor_send(pos,digiline.rules.default,"b","GREEN")
+ digiline:receptor_send(pos,digiline.rules.default,"c","RED")
+ digiline:receptor_send(pos,digiline.rules.default,"d","GREEN")
+ end,pos)
+ timer:start(10)
+ end
+ meta:set_string("state",state)
+ end,
+ node_box = {
+ type = "fixed",
+ fixed = polemount_nodebox
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = polemount_nodebox
+ },
+ digiline =
+ {
+ receptor = {},
+ effector = {},
+ },
+})