]> git.lizzy.rs Git - Crafter.git/blob - mods/redstone/inverter.lua
Extreme redstone optimizations
[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.set_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                 minetest.after(0,function()
68                         redstone.update(pos)
69                 end)
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                         dir = dir
85                 })
86         end,
87 })
88
89
90
91 --[[
92  ██████╗ ███████╗███████╗
93 ██╔═══██╗██╔════╝██╔════╝
94 ██║   ██║█████╗  █████╗  
95 ██║   ██║██╔══╝  ██╔══╝  
96 ╚██████╔╝██║     ██║     
97  ╚═════╝ ╚═╝     ╚═╝     
98 ]]--
99
100 minetest.register_node("redstone:inverter_off", {
101     description = "Redstone Inverter",
102     tiles = {"repeater_off.png"},
103     groups = {stone = 1, hard = 1, pickaxe = 1, hand = 4,attached_node = 1,redstone_activation_directional=1,torch_directional=1,redstone_power=9},
104     sounds = main.stoneSound(),
105     paramtype = "light",
106         paramtype2 = "facedir",
107         sunlight_propagates = true,
108         walkable = false,
109         drawtype= "nodebox",
110         drop="redstone:inverter_off",
111         node_box = {
112                 type = "fixed",
113                 fixed = {
114                                 --left  front  bottom right back top
115                                 {-0.5, -0.5,  -0.5, 0.5,  -0.3, 0.5}, --base
116                                 {-0.2, -0.5,  0.2, 0.2,  0.1, 0.4}, --output post
117                         },
118                 },
119         after_place_node = function(pos, placer, itemstack, pointed_thing)
120                 local dir = minetest.facedir_to_dir(minetest.get_node(pos).param2)
121                 redstone.inject(pos,{
122                         name = "redstone:inverter_off",
123                         torch  = 9,
124                         torch_directional = true,
125                         directional_activator = true,
126                         input  = vector.subtract(pos,dir),
127                         output = vector.add(pos,dir),
128                         dir = dir
129                 })
130                 redstone.update(pos)
131         end,
132         after_destruct = function(pos, oldnode)
133                 redstone.inject(pos,nil)
134                 redstone.update(pos)
135         end
136 })
137
138 redstone.register_activator({
139         name = "redstone:inverter_off",
140         activate = function(pos)
141                 
142                 local param2 = minetest.get_node(pos).param2
143                 minetest.set_node(pos,{name="redstone:inverter_on",param2=param2})
144                 local dir = minetest.facedir_to_dir(param2)
145                 redstone.inject(pos,{
146                         name = "redstone:inverter_on",
147                         directional_activator = true,
148                         input  = vector.subtract(pos,dir),
149                         dir = dir
150                 })
151                 minetest.after(0,function()
152                         redstone.update(pos)
153                 end)
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  = 9,
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                 redstone.update(pos)
174         end,
175 })