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