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