]> git.lizzy.rs Git - Crafter.git/blob - mods/redstone/inverter.lua
Fix update loop
[Crafter.git] / mods / redstone / inverter.lua
1 local
2 minetest,vector
3 =
4 minetest,vector
5
6 --[[
7  ██████╗ ███╗   ██╗
8 ██╔═══██╗████╗  ██║
9 ██║   ██║██╔██╗ ██║
10 ██║   ██║██║╚██╗██║
11 ╚██████╔╝██║ ╚████║
12  ╚═════╝ ╚═╝  ╚═══╝
13 ]]--
14
15 --inverts redstone signal
16 minetest.register_node("redstone:inverter_on", {
17     description = "Redstone Inverter",
18     tiles = {"repeater_on.png"},
19     groups = {stone = 1, hard = 1, pickaxe = 1, hand = 4,attached_node = 1,redstone_activation_directional=1},
20     sounds = main.stoneSound(),
21     paramtype = "light",
22         paramtype2 = "facedir",
23         sunlight_propagates = true,
24         walkable = false,
25         drawtype= "nodebox",
26         drop="redstone:inverter_off",
27         node_box = {
28                 type = "fixed",
29                 fixed = {
30                                 --left  front  bottom right back top
31                                 {-0.5, -0.5,  -0.5, 0.5,  -0.3, 0.5}, --base
32                                 {-0.2, -0.5,  0.2, 0.2,  0.1, 0.4}, --output post
33                         },
34                 },
35         after_place_node = function(pos, placer, itemstack, pointed_thing)
36                 local dir = minetest.facedir_to_dir(minetest.get_node(pos).param2)
37                 redstone.inject(pos,{
38                         name = "redstone:inverter_on",
39                         directional_activator = true,
40                         input  = vector.subtract(pos,dir),
41                         dir = dir
42                 })
43                 redstone.update(pos)
44         end,
45         after_destruct = function(pos, oldnode)
46                 redstone.inject(pos,nil)
47                 redstone.update(pos)
48         end
49 })
50
51
52 redstone.register_activator({
53         name = "redstone:inverter_on",
54         deactivate = function(pos)
55                 local param2 = minetest.get_node(pos).param2
56                 minetest.swap_node(pos,{name="redstone:inverter_off",param2=param2})
57                 local dir = minetest.facedir_to_dir(param2)
58                 redstone.inject(pos,{
59                         name = "redstone:inverter_off",
60                         torch  = 9,
61                         torch_directional = true,
62                         directional_activator = true,
63                         input  = vector.subtract(pos,dir),
64                         output = vector.add(pos,dir),
65                         dir = dir
66                 })
67                 redstone.update(vector.add(pos,dir))
68         end
69 })
70
71
72 minetest.register_lbm({
73         name = "redstone:startupinverter",
74         nodenames = {"redstone:inverter_on"},
75         run_at_every_load = true,
76         action = function(pos)
77                 local dir = minetest.facedir_to_dir(minetest.get_node(pos).param2)
78                 redstone.inject(pos,{
79                         name = "redstone:inverter_on",
80                         directional_activator = true,
81                         input  = vector.subtract(pos,dir),
82                         dir = dir
83                 })
84         end,
85 })
86
87
88
89 --[[
90  ██████╗ ███████╗███████╗
91 ██╔═══██╗██╔════╝██╔════╝
92 ██║   ██║█████╗  █████╗  
93 ██║   ██║██╔══╝  ██╔══╝  
94 ╚██████╔╝██║     ██║     
95  ╚═════╝ ╚═╝     ╚═╝     
96 ]]--
97
98 minetest.register_node("redstone:inverter_off", {
99     description = "Redstone Inverter",
100     tiles = {"repeater_off.png"},
101     groups = {stone = 1, hard = 1, pickaxe = 1, hand = 4,attached_node = 1,redstone_activation_directional=1,torch_directional=1,redstone_power=9},
102     sounds = main.stoneSound(),
103     paramtype = "light",
104         paramtype2 = "facedir",
105         sunlight_propagates = true,
106         walkable = false,
107         drawtype= "nodebox",
108         drop="redstone:inverter_off",
109         node_box = {
110                 type = "fixed",
111                 fixed = {
112                                 --left  front  bottom right back top
113                                 {-0.5, -0.5,  -0.5, 0.5,  -0.3, 0.5}, --base
114                                 {-0.2, -0.5,  0.2, 0.2,  0.1, 0.4}, --output post
115                         },
116                 },
117         after_place_node = function(pos, placer, itemstack, pointed_thing)
118                 local dir = minetest.facedir_to_dir(minetest.get_node(pos).param2)
119                 redstone.inject(pos,{
120                         name = "redstone:inverter_off",
121                         torch  = 9,
122                         torch_directional = true,
123                         directional_activator = true,
124                         input  = vector.subtract(pos,dir),
125                         output = vector.add(pos,dir),
126                         dir = dir
127                 })
128                 redstone.update(pos)
129         end,
130         after_destruct = function(pos, oldnode)
131                 redstone.inject(pos,nil)
132                 redstone.update(pos)
133         end
134 })
135
136 redstone.register_activator({
137         name = "redstone:inverter_off",
138         activate = function(pos)
139                 
140                 local param2 = minetest.get_node(pos).param2
141                 minetest.swap_node(pos,{name="redstone:inverter_on",param2=param2})
142                 local dir = minetest.facedir_to_dir(param2)
143                 redstone.inject(pos,{
144                         name = "redstone:inverter_on",
145                         directional_activator = true,
146                         input  = vector.subtract(pos,dir),
147                         dir = dir
148                 })
149                 redstone.update(vector.add(pos,dir))
150         end
151 })
152
153
154 minetest.register_lbm({
155         name = "redstone:also_startup_inverter",
156         nodenames = {"redstone:inverter_off"},
157         run_at_every_load = true,
158         action = function(pos)
159                 local dir = minetest.facedir_to_dir(minetest.get_node(pos).param2)
160                 redstone.inject(pos,{
161                         name = "redstone:inverter_off",
162                         torch  = 9,
163                         torch_directional = true,
164                         directional_activator = true,
165                         input  = vector.subtract(pos,dir),
166                         output = vector.add(pos,dir),
167                         dir    = dir
168                 })
169                 --redstone needs to warm up
170                 minetest.after(0,function()
171                         redstone.update(pos)
172                 end)
173         end,
174 })