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