]> git.lizzy.rs Git - Crafter.git/blob - mods/redstone/repeater.lua
Fix repeaters rotating sideways
[Crafter.git] / mods / redstone / repeater.lua
1 local minetest,vector = minetest,vector
2
3 local max_timer = 7
4
5 for level = 0,max_timer do
6 minetest.register_node("redstone:repeater_off_"..level, {
7     description = "Redstone Repeater",
8     tiles = {"repeater_off.png"},
9     groups = {stone = 1, hard = 1, pickaxe = 1, hand = 4,attached_node = 1,repeater_off=1,repeater=1,redstone_activation_directional=1,repeater_level=level},
10     sounds = main.stoneSound(),
11     paramtype = "light",
12         paramtype2 = "facedir",
13         sunlight_propagates = true,
14         walkable = false,
15         drawtype= "nodebox",
16         drop="redstone:repeater_off_0",
17         node_box = {
18                 type = "fixed",
19                 fixed = {
20                                 --left  front  bottom right back top
21                                 {-0.5, -0.5,  -0.5, 0.5,  -0.3, 0.5}, --base
22                                 {-0.1, -0.5,  0.2, 0.1,  0.1, 0.4}, --output post
23                                 {-0.1, -0.5,  -0.05-(level*0.05), 0.1,  0.1, 0.15-(level*0.05)}, --input post
24                         },
25                 },      
26         redstone_activation = function(pos)
27                 local timer = minetest.get_node_timer(pos)
28                 if not timer:is_started() then
29                         timer:start(level/max_timer)
30                 end
31         end,
32
33         on_timer = function(pos, elapsed)
34                 local param2 = minetest.get_node(pos).param2
35                 minetest.swap_node(pos, {name="redstone:repeater_on_"..level,param2=param2})
36                 redstone.collect_info(pos)
37         end,
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                 minetest.swap_node(pos,{name="redstone:repeater_off_"..newlevel,param2=node.param2})
45                 minetest.sound_play("lever", {pos=pos})
46         end,
47
48         after_destruct = function(pos, oldnode)
49                 redstone.collect_info(pos)
50         end
51 })
52
53 minetest.register_node("redstone:repeater_on_"..level, {
54     description = "Redstone Repeater",
55     tiles = {"repeater_on.png"},
56     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=9,repeater_level=level},
57     sounds = main.stoneSound(),
58     paramtype = "light",
59         paramtype2 = "facedir",
60         sunlight_propagates = true,
61         walkable = false,
62         drawtype= "nodebox",
63         drop="redstone:repeater_off_0",
64         node_box = {
65                 type = "fixed",
66                 fixed = {
67                                 --left  front  bottom right back top
68                                 {-0.5, -0.5,  -0.5, 0.5,  -0.3, 0.5}, --base
69                                 {-0.1, -0.5,  0.2, 0.1,  0.1, 0.4}, --output post
70                                 {-0.1, -0.5,  -0.05-(level*0.05), 0.1,  0.1, 0.15-(level*0.05)}, --input post
71                         },
72                 },
73         on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
74                 local newlevel = level + 1
75                 if newlevel > max_timer then
76                         newlevel = 0
77                 end
78                 minetest.swap_node(pos,{name="redstone:repeater_on_"..newlevel,param2=node.param2})
79                 minetest.sound_play("lever", {pos=pos})
80         end,
81         redstone_deactivation = function(pos)
82                 local timer = minetest.get_node_timer(pos)
83                 if not timer:is_started() then
84                         timer:start(level/max_timer)
85                 end
86         end,
87         on_timer = function(pos, elapsed)
88                 local param2 = minetest.get_node(pos).param2
89                 minetest.swap_node(pos, {name="redstone:repeater_off_"..level,param2=param2})
90                 redstone.collect_info(pos)
91         end,
92         after_destruct = function(pos, oldnode)
93                 redstone.collect_info(pos)
94         end
95 })
96 end