]> git.lizzy.rs Git - Crafter.git/blob - mods/redstone/repeater.lua
eb7134e1e2b07ce594ef9affcc5d516714727f9f
[Crafter.git] / mods / redstone / repeater.lua
1 local minetest,vector = minetest,vector
2
3 local max_timer = 7
4 for level = 0,max_timer do
5
6
7
8
9 --[[
10  ██████╗ ███╗   ██╗
11 ██╔═══██╗████╗  ██║
12 ██║   ██║██╔██╗ ██║
13 ██║   ██║██║╚██╗██║
14 ╚██████╔╝██║ ╚████║
15  ╚═════╝ ╚═╝  ╚═══╝
16 ]]--
17
18 minetest.register_node("redstone:repeater_on_"..level, {
19         description = "Redstone Repeater",
20         tiles = {"repeater_on.png"},
21         groups = {stone = 1, hard = 1, pickaxe = 1, hand = 4,attached_node = 1,redstone_activation_directional=1,repeater_on=1,repeater=1,torch_directional=1,redstone_power=16,repeater_level=level},
22         sounds = main.stoneSound(),
23         paramtype = "light",
24         paramtype2 = "facedir",
25         sunlight_propagates = true,
26         walkable = false,
27         drawtype= "nodebox",
28         drop="redstone:repeater_off_0",
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.1, -0.5,  0.2, 0.1,  0.1, 0.4}, --output post
35                                 {-0.1, -0.5,  -0.05-(level*0.05), 0.1,  0.1, 0.15-(level*0.05)}, --input post
36                         },
37                 },
38
39         on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
40                 local newlevel = level + 1
41                 if newlevel > max_timer then
42                         newlevel = 0
43                 end
44                 local param2 = minetest.get_node(pos).param2
45                 local dir = minetest.facedir_to_dir(param2)
46
47                 minetest.swap_node(pos,{name="redstone:repeater_on_"..newlevel,param2=param2})
48                 minetest.sound_play("lever", {pos=pos})
49                 redstone.inject(pos,{
50                         name = "redstone:repeater_on_"..newlevel,
51                         torch  = 16,
52                         torch_directional = true,
53                         directional_activator = true,
54                         input  = vector.subtract(pos,dir),
55                         output = vector.add(pos,dir),
56                         dir = dir
57                 })
58         end,
59         
60         on_timer = function(pos, elapsed)
61                 local param2 = minetest.get_node(pos).param2
62                 minetest.swap_node(pos, {name="redstone:repeater_off_"..level,param2=param2})
63                 local dir = minetest.facedir_to_dir(param2)
64                 redstone.inject(pos,{
65                         name = "redstone:repeater_off_"..level,
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         after_destruct = function(pos, oldnode)
76                 local param2 = oldnode.param2
77                 local dir = minetest.facedir_to_dir(param2)
78                 redstone.inject(pos,nil)
79                 --redstone.update(pos)
80                 redstone.update(vector.add(pos,dir))
81         end,
82
83         after_place_node = function(pos)
84                 local dir = minetest.facedir_to_dir(minetest.get_node(pos).param2)
85                 redstone.inject(pos,{
86                         name = "redstone:repeater_on_"..level,
87                         torch  = 16,
88                         torch_directional = true,
89                         directional_activator = true,
90                         input  = vector.subtract(pos,dir),
91                         output = vector.add(pos,dir),
92                         dir = dir
93                 })
94                 redstone.update(pos)
95                 redstone.update(vector.add(pos,dir))
96         end
97 })
98
99 redstone.register_activator({
100         name = "redstone:repeater_on_"..level,
101         deactivate = function(pos)
102                 local timer = minetest.get_node_timer(pos)
103                 if not timer:is_started() then
104                         timer:start(level/max_timer)
105                 end
106         end
107 })
108
109
110 minetest.register_lbm({
111         name = "redstone:startup_activator_on_"..level,
112         nodenames = {"redstone:repeater_on_"..level},
113         run_at_every_load = true,
114         action = function(pos)
115                 local dir = minetest.facedir_to_dir(minetest.get_node(pos).param2)
116                 redstone.inject(pos,{
117                         name = "redstone:repeater_on_"..level,
118                         torch  = 16,
119                         torch_directional = true,
120                         directional_activator = true,
121                         input  = vector.subtract(pos,dir),
122                         output = vector.add(pos,dir),
123                         dir = dir
124                 })
125                 --redstone.update(pos)
126                 redstone.update(vector.add(pos,dir))
127         end,
128 })
129
130
131
132
133
134
135
136
137
138
139 --[[
140  ██████╗ ███████╗███████╗
141 ██╔═══██╗██╔════╝██╔════╝
142 ██║   ██║█████╗  █████╗  
143 ██║   ██║██╔══╝  ██╔══╝  
144 ╚██████╔╝██║     ██║     
145  ╚═════╝ ╚═╝     ╚═╝     
146 ]]--
147
148
149
150 minetest.register_node("redstone:repeater_off_"..level, {
151     description = "Redstone Repeater",
152     tiles = {"repeater_off.png"},
153     groups = {stone = 1, hard = 1, pickaxe = 1, hand = 4,attached_node = 1,repeater_off=1,repeater=1,redstone_activation_directional=1,repeater_level=level},
154     sounds = main.stoneSound(),
155     paramtype = "light",
156         paramtype2 = "facedir",
157         sunlight_propagates = true,
158         walkable = false,
159         drawtype= "nodebox",
160         drop="redstone:repeater_off_0",
161         node_box = {
162                 type = "fixed",
163                 fixed = {
164                                 --left  front  bottom right back top
165                                 {-0.5, -0.5,  -0.5, 0.5,  -0.3, 0.5}, --base
166                                 {-0.1, -0.5,  0.2, 0.1,  0.1, 0.4}, --output post
167                                 {-0.1, -0.5,  -0.05-(level*0.05), 0.1,  0.1, 0.15-(level*0.05)}, --input post
168                         },
169                 },      
170
171         on_timer = function(pos, elapsed)
172                 local param2 = minetest.get_node(pos).param2
173                 minetest.swap_node(pos, {name="redstone:repeater_on_"..level,param2=param2})
174
175                 local dir = minetest.facedir_to_dir(param2)
176                 redstone.inject(pos,{
177                         name = "redstone:repeater_on_"..level,
178                         torch  = 16,
179                         torch_directional = true,
180                         directional_activator = true,
181                         input  = vector.subtract(pos,dir),
182                         output = vector.add(pos,dir),
183                         dir = dir
184                 })
185                 --redstone.update(pos)
186                 redstone.update(vector.add(pos,dir))
187         end,
188
189         on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
190                 local newlevel = level + 1
191                 if newlevel > max_timer then
192                         newlevel = 0
193                 end
194                 local param2 = minetest.get_node(pos).param2
195                 local dir = minetest.facedir_to_dir(param2)
196                 minetest.swap_node(pos,{name="redstone:repeater_off_"..newlevel,param2=param2})
197                 redstone.inject(pos,{
198                         name = "redstone:repeater_off_"..newlevel,
199                         directional_activator = true,
200                         input  = vector.subtract(pos,dir),
201                         output = vector.add(pos,dir),
202                         dir = dir
203                 })
204                 minetest.sound_play("lever", {pos=pos})
205         end,
206
207         after_destruct = function(pos, oldnode)
208                 local param2 = oldnode.param2
209                 local dir = minetest.facedir_to_dir(param2)
210                 redstone.inject(pos,nil)
211                 --redstone.update(pos)
212                 redstone.update(vector.add(pos,dir))
213         end,
214
215         after_place_node = function(pos)
216                 local dir = minetest.facedir_to_dir(minetest.get_node(pos).param2)
217                 redstone.inject(pos,{
218                         name = "redstone:repeater_off_"..level,
219                         directional_activator = true,
220                         input  = vector.subtract(pos,dir),
221                         output = vector.add(pos,dir),
222                         dir = dir
223                 })
224                 redstone.update(pos)
225                 redstone.update(vector.add(pos,dir))
226         end
227 })
228
229
230 redstone.register_activator({
231         name = "redstone:repeater_off_"..level,
232         activate = function(pos)
233                 local timer = minetest.get_node_timer(pos)
234                 if not timer:is_started() then
235                         timer:start(level/max_timer)
236                 end
237         end
238 })
239
240
241 minetest.register_lbm({
242         name = "redstone:startup_activator_off_"..level,
243         nodenames = {"redstone:repeater_off_"..level},
244         run_at_every_load = true,
245         action = function(pos)
246                 local dir = minetest.facedir_to_dir(minetest.get_node(pos).param2)
247                 redstone.inject(pos,{
248                         name = "redstone:repeater_off_"..level,
249                         directional_activator = true,
250                         input  = vector.subtract(pos,dir),
251                         dir = dir
252                 })
253                 --redstone.update(pos)
254                 redstone.update(vector.add(pos,dir))
255         end,
256 })
257
258 end