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