]> git.lizzy.rs Git - xdecor.git/blobdiff - mechanisms.lua
Mailbox: minor code cleaning
[xdecor.git] / mechanisms.lua
index 33d90e20109d9497669d94b9b1673a7b0b94aadc..36e0ef8bc91bd69c037eb283a2268720dafa1f87 100644 (file)
@@ -1,4 +1,8 @@
--- Thanks to sofar for helping with that code.
+--[[ Thanks to sofar for helping with that code.
+Pressure plates work better with this setting in minetest.conf (requires 0.4.14):
+       nodetimer_interval = 0.1
+]]
+
 local plate = {}
 screwdriver = screwdriver or {}
 
@@ -6,18 +10,24 @@ local function door_toggle(pos_actuator, pos_door, player)
        local actuator = minetest.get_node(pos_actuator)
        local door = doors.get(pos_door)
 
-       minetest.set_node(pos_actuator, {name=actuator.name:gsub("_off", "_on"), param2=actuator.param2})
+       if actuator.name:sub(-4) == "_off" then
+               minetest.set_node(pos_actuator,
+                       {name=actuator.name:gsub("_off", "_on"), param2=actuator.param2})
+       end
        door:open(player)
 
        minetest.after(2, function()
-               minetest.set_node(pos_actuator, {name=actuator.name, param2=actuator.param2})
+               if minetest.get_node(pos_actuator).name:sub(-3) == "_on" then
+                       minetest.set_node(pos_actuator,
+                               {name=actuator.name, param2=actuator.param2})
+               end
                door:close(player)
        end)
 end
 
 function plate.construct(pos)
        local timer = minetest.get_node_timer(pos)
-       timer:start(0.5)
+       timer:start(0.1)
 end
 
 function plate.timer(pos)
@@ -32,37 +42,47 @@ function plate.timer(pos)
                        for i = 1, #doors do
                                door_toggle(pos, doors[i], player)
                        end
+                       break
                end
        end
        return true
 end
 
-for _, m in pairs({"wooden", "stone"}) do
-       xdecor.register("pressure_"..m.."_off", {
-               description = m:gsub("^%l", string.upper).." Pressure Plate",
-               tiles = {"xdecor_pressure_"..m..".png"},
+function plate.register(material, desc, def)
+       xdecor.register("pressure_"..material.."_off", {
+               description = desc.." Pressure Plate",
+               tiles = {"xdecor_pressure_"..material..".png"},
                drawtype = "nodebox",
                node_box = xdecor.pixelbox(16, {{1, 0, 1, 14, 1, 14}}),
-               groups = {snappy=3},
-               sounds = default.node_sound_wood_defaults(),
+               groups = def.groups,
+               sounds = def.sounds,
                sunlight_propagates = true,
                on_rotate = screwdriver.rotate_simple,
                on_construct = plate.construct,
                on_timer = plate.timer
        })
-
-       xdecor.register("pressure_"..m.."_on", {
-               tiles = {"xdecor_pressure_"..m..".png"},
+       xdecor.register("pressure_"..material.."_on", {
+               tiles = {"xdecor_pressure_"..material..".png"},
                drawtype = "nodebox",
                node_box = xdecor.pixelbox(16, {{1, 0, 1, 14, 0.4, 14}}),
-               groups = {snappy=3, not_in_creative_inventory=1},
-               sounds = default.node_sound_wood_defaults(),
-               drop = "xdecor:pressure_"..m.."_off",
+               groups = def.groups,
+               sounds = def.sounds,
+               drop = "xdecor:pressure_"..material.."_off",
                sunlight_propagates = true,
                on_rotate = screwdriver.rotate_simple
        })
 end
 
+plate.register("wood", "Wooden", {
+       sounds = default.node_sound_wood_defaults(),
+       groups = {choppy=3, oddly_breakable_by_hand=2, flammable=2}
+})
+
+plate.register("stone", "Stone", {
+       sounds = default.node_sound_stone_defaults(),
+       groups = {cracky=3, oddly_breakable_by_hand=2}
+})
+
 xdecor.register("lever_off", {
        description = "Lever",
        tiles = {"xdecor_lever_off.png"},