]> git.lizzy.rs Git - Crafter.git/blobdiff - mods/redstone/button.lua
Add in colored redstone lights
[Crafter.git] / mods / redstone / button.lua
index 63b10bf12ee6b665f78dfd1adb9da38d023d52d4..a292f9b683c2803660c50ecf68108adda6f2c53e 100644 (file)
@@ -1,22 +1,7 @@
---this removes power from node that the button is powering
-local function on_button_destroy(pos)
-       local param2 = minetest.get_node(pos).param2
-       local dir = minetest.wallmounted_to_dir(param2)
-       local pos = vector.add(dir,pos)
-       local node = minetest.get_node(pos)
-       local name = node.name
-       local def = minetest.registered_nodes[name]
-       
-       if def.drawtype == "normal" and string.match(name, "redstone:node_activated_") then
-               name = "main:"..string.gsub(name, "redstone:node_activated_", "")
-               minetest.set_node(pos, {name=name})
-               redstone.collect_info(pos)
-       end
-end
-
+local minetest,table,vector = minetest,table,vector
 
 minetest.register_node("redstone:button_off", {
-    description = "Crafting Table",
+    description = "Button",
     tiles = {"stone.png"},
     groups = {stone = 1, hard = 1, pickaxe = 1, hand = 4,attached_node = 1,dig_immediate=1},
     sounds = main.stoneSound(),
@@ -34,29 +19,34 @@ minetest.register_node("redstone:button_off", {
                        },
                },
     on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
-               minetest.set_node(pos, {name="redstone:button_on",param2=node.param2})
+               minetest.swap_node(pos, {name="redstone:button_on",param2=node.param2})
+
+               minetest.sound_play("lever", {pos=pos})
+
+               local timer = minetest.get_node_timer(pos)
+               timer:start(1.25)
+
                local dir = minetest.wallmounted_to_dir(node.param2)
-               local c_pos = table.copy(pos)
-               local pos = vector.add(dir,pos)
-               local name = minetest.get_node(pos).name
-               local def = minetest.registered_nodes[name]
-               
-               if def.drawtype == "normal" and string.match(name, "main:") then
-                       minetest.sound_play("lever", {pos=pos})
-                       name = "redstone:node_activated_"..string.gsub(name, "main:", "")
-                       minetest.set_node(pos,{name=name})
-                       redstone.collect_info(pos)
-               else
-                       minetest.sound_play("lever", {pos=pos,pitch=0.6})
-               end
-               
-               local timer = minetest.get_node_timer(c_pos)
-               timer:start(1)
+
+               redstone.inject(pos,{torch=9})
+               local pos2 = vector.add(dir,pos)
+               redstone.inject(pos2,{torch=9})
+
+               redstone.update(pos)
+               redstone.update(pos2)
+       end,
+       after_destruct = function(pos, oldnode)
+               redstone.inject(pos,nil)
+               local dir = minetest.wallmounted_to_dir(oldnode.param2)
+               local pos2 = vector.add(dir,pos)
+               redstone.inject(pos2,nil)
+
+               redstone.update(pos)
+               redstone.update(pos2)
        end,
-       on_destruct = on_button_destroy,
 })
 minetest.register_node("redstone:button_on", {
-    description = "Crafting Table",
+    description = "Button",
     tiles = {"stone.png"},
     groups = {stone = 1, hard = 1, pickaxe = 1, hand = 4,attached_node = 1,dig_immediate=1},
     sounds = main.stoneSound(),
@@ -75,9 +65,45 @@ minetest.register_node("redstone:button_on", {
                },
     on_timer = function(pos, elapsed)
                minetest.sound_play("lever", {pos=pos,pitch=0.8})
+
                local node = minetest.get_node(pos)
-               minetest.set_node(pos, {name="redstone:button_off",param2=node.param2})
-               on_button_destroy(pos)
+               minetest.swap_node(pos, {name="redstone:button_off",param2=node.param2})
+
+               redstone.inject(pos,nil)
+               local param2 = minetest.get_node(pos).param2
+               local dir = minetest.wallmounted_to_dir(param2)
+               local pos2 = vector.add(dir,pos)
+               redstone.inject(pos2,nil)
+
+               redstone.update(pos)
+               redstone.update(pos2)
+               
+       end,
+       after_destruct = function(pos, oldnode)
+               redstone.inject(pos,nil)
+               local dir = minetest.wallmounted_to_dir(oldnode.param2)
+               local pos2 = vector.add(dir,pos)
+               redstone.inject(pos2,nil)
+
+               redstone.update(pos)
+               redstone.update(pos2)
+       end,
+})
+
+minetest.register_lbm({
+       name = "redstone:button_on",
+       nodenames = {"redstone:button_on"},
+       run_at_every_load = true,
+       action = function(pos)
+               local dir = minetest.wallmounted_to_dir(node.param2)
+
+               redstone.inject(pos,{torch=9})
+               local pos2 = vector.add(dir,pos)
+               redstone.inject(pos2,{torch=9})
+
+               minetest.after(0,function()
+                       redstone.update(pos)
+                       redstone.update(pos2)
+               end)
        end,
-       on_destruct = on_button_destroy,
 })