]> git.lizzy.rs Git - Crafter.git/blob - mods/redstone/button.lua
4ff0248398ee15c037b10771750a09de8e5369b6
[Crafter.git] / mods / redstone / button.lua
1 local minetest,table,vector = minetest,table,vector
2
3 local excluded_mods = {redstone=true,door=true}
4 local registered_nodes
5 minetest.register_on_mods_loaded(function()
6         registered_nodes  = minetest.registered_nodes
7 end)
8
9 minetest.register_node("redstone:button_off", {
10     description = "Button",
11     tiles = {"stone.png"},
12     groups = {stone = 1, hard = 1, pickaxe = 1, hand = 4,attached_node = 1,dig_immediate=1},
13     sounds = main.stoneSound(),
14     paramtype = "light",
15         paramtype2 = "wallmounted",
16         sunlight_propagates = true,
17         walkable = false,
18         drawtype= "nodebox",
19         drop="redstone:button_off",
20         node_box = {
21                 type = "fixed",
22                 fixed = {
23                                 --left front bottom right back top
24                                 {-0.25, -0.5,  -0.15, 0.25,  -0.3, 0.15},
25                         },
26                 },
27         on_construct = function(pos)
28                 local param2 = minetest.get_node(pos).param2
29                 local dir = minetest.wallmounted_to_dir(param2)
30                 local node = minetest.get_node(vector.add(pos,dir)).name
31                 if excluded_mods[registered_nodes[node].mod_origin] then
32                         minetest.swap_node(pos,{name="air"})
33                         redstone.inject(pos,nil)
34                         minetest.throw_item(pos, "redstone:button_off")
35                 end
36         end,
37     on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
38                 minetest.swap_node(pos, {name="redstone:button_on",param2=node.param2})
39
40                 minetest.sound_play("lever", {pos=pos})
41
42                 local timer = minetest.get_node_timer(pos)
43                 timer:start(1.25)
44
45                 local dir = minetest.wallmounted_to_dir(node.param2)
46
47                 redstone.inject(pos,{torch=9})
48                 local pos2 = vector.add(dir,pos)
49                 redstone.inject(pos2,{torch=9})
50
51                 redstone.update(pos)
52                 redstone.update(pos2)
53         end,
54         after_destruct = function(pos, oldnode)
55                 redstone.inject(pos,nil)
56                 local dir = minetest.wallmounted_to_dir(oldnode.param2)
57                 local pos2 = vector.add(dir,pos)
58                 redstone.inject(pos2,nil)
59
60                 redstone.update(pos)
61                 redstone.update(pos2)
62         end,
63 })
64 minetest.register_node("redstone:button_on", {
65     description = "Button",
66     tiles = {"stone.png"},
67     groups = {stone = 1, hard = 1, pickaxe = 1, hand = 4,attached_node = 1,dig_immediate=1},
68     sounds = main.stoneSound(),
69     paramtype = "light",
70         paramtype2 = "wallmounted",
71         sunlight_propagates = true,
72         walkable = false,
73         drawtype= "nodebox",
74         drop="redstone:button_off",
75         node_box = {
76                 type = "fixed",
77                 fixed = {
78                                 --left front bottom right back top
79                                 {-0.25, -0.5,  -0.15, 0.25,  -0.45, 0.15},
80                         },
81                 },
82     on_timer = function(pos, elapsed)
83                 minetest.sound_play("lever", {pos=pos,pitch=0.8})
84
85                 local node = minetest.get_node(pos)
86                 minetest.swap_node(pos, {name="redstone:button_off",param2=node.param2})
87
88                 redstone.inject(pos,nil)
89                 local param2 = minetest.get_node(pos).param2
90                 local dir = minetest.wallmounted_to_dir(param2)
91                 local pos2 = vector.add(dir,pos)
92                 redstone.inject(pos2,nil)
93
94                 redstone.update(pos)
95                 redstone.update(pos2)
96                 
97         end,
98         after_destruct = function(pos, oldnode)
99                 redstone.inject(pos,nil)
100                 local dir = minetest.wallmounted_to_dir(oldnode.param2)
101                 local pos2 = vector.add(dir,pos)
102                 redstone.inject(pos2,nil)
103
104                 redstone.update(pos)
105                 redstone.update(pos2)
106         end,
107 })
108
109 minetest.register_lbm({
110         name = "redstone:button_on",
111         nodenames = {"redstone:button_on"},
112         run_at_every_load = true,
113         action = function(pos)
114                 local param2 = minetest.get_node(pos).param2
115                 local dir = minetest.wallmounted_to_dir(param2)
116
117                 redstone.inject(pos,{torch=9})
118                 local pos2 = vector.add(dir,pos)
119                 redstone.inject(pos2,{torch=9})
120
121                 minetest.after(0,function()
122                         redstone.update(pos)
123                         redstone.update(pos2)
124                 end)
125         end,
126 })