]> git.lizzy.rs Git - xdecor.git/blob - pressureplates.lua
Pressure plates : only rotate on facedir <= 3 with screwdriver
[xdecor.git] / pressureplates.lua
1 -- Thanks to sofar for helping with that code.
2 local plate = {}
3 screwdriver = screwdriver or {}
4
5 function plate.construct(pos)
6         local timer = minetest.get_node_timer(pos)
7         timer:start(0.5)
8 end
9
10 function plate.door_toggle(pos_plate, pos_door, player)
11         local plate = minetest.get_node(pos_plate)
12         local door = doors.get(pos_door)
13
14         minetest.set_node(pos_plate, {name=plate.name:gsub("_off", "_on"), param2=plate.param2})
15         door:open(player)
16
17         minetest.after(2, function()
18                 minetest.set_node(pos_plate, {name=plate.name, param2=plate.param2})
19                 door:close(player)
20         end)
21 end
22
23 function plate.timer(pos)
24         local objs = minetest.get_objects_inside_radius(pos, 0.8)
25         if objs == {} or not doors.get then return true end
26         local minp = {x=pos.x-2, y=pos.y, z=pos.z-2}
27         local maxp = {x=pos.x+2, y=pos.y, z=pos.z+2}
28         local doors = minetest.find_nodes_in_area(minp, maxp, "group:door")
29
30         for _, player in pairs(objs) do
31                 if player:is_player() then
32                         for i = 1, #doors do
33                                 plate.door_toggle(pos, doors[i], player)
34                         end
35                 end
36         end
37         return true
38 end
39
40 for _, m in pairs({"wooden", "stone"}) do
41         xdecor.register("pressure_"..m.."_off", {
42                 description = m:gsub("^%l", string.upper).." Pressure Plate",
43                 tiles = {"xdecor_pressure_"..m..".png"},
44                 drawtype = "nodebox",
45                 node_box = xdecor.pixelbox(16, {{1, 0, 1, 14, 1, 14}}),
46                 groups = {snappy=3},
47                 sounds = default.node_sound_wood_defaults(),
48                 sunlight_propagates = true,
49                 on_rotate = screwdriver.rotate_simple,
50                 on_construct = plate.construct,
51                 on_timer = plate.timer
52         })
53
54         xdecor.register("pressure_"..m.."_on", {
55                 tiles = {"xdecor_pressure_"..m..".png"},
56                 drawtype = "nodebox",
57                 node_box = xdecor.pixelbox(16, {{1, 0, 1, 14, 0.4, 14}}),
58                 groups = {snappy=3, not_in_creative_inventory=1},
59                 sounds = default.node_sound_wood_defaults(),
60                 drop = "xdecor:pressure_"..m.."_off",
61                 sunlight_propagates = true,
62                 on_rotate = screwdriver.rotate_simple
63         })
64 end