]> git.lizzy.rs Git - xdecor.git/commitdiff
Add Leaver (for opening doors)
authorJean-Patrick Guerrero <jeanpatrick.guerrero@gmail.com>
Sun, 28 Feb 2016 10:38:57 +0000 (11:38 +0100)
committerJean-Patrick Guerrero <jeanpatrick.guerrero@gmail.com>
Sun, 28 Feb 2016 10:53:37 +0000 (11:53 +0100)
init.lua
mechanisms.lua [new file with mode: 0644]
pressureplates.lua [deleted file]
recipes.lua
textures/xdecor_leaver_off.png [new file with mode: 0644]
textures/xdecor_leaver_on.png [new file with mode: 0644]

index 3b19a6b92640d2e526828ff5d8b5715f104c8992..9ec3c9a25a67ecfe4fb5dd2a0281289757e1f4b4 100644 (file)
--- a/init.lua
+++ b/init.lua
@@ -17,8 +17,8 @@ dofile(modpath.."/enchanting.lua")
 dofile(modpath.."/hive.lua")
 dofile(modpath.."/itemframe.lua")
 dofile(modpath.."/mailbox.lua")
+dofile(modpath.."/mechanisms.lua")
 dofile(modpath.."/nodes.lua")
-dofile(modpath.."/pressureplates.lua")
 dofile(modpath.."/recipes.lua")
 dofile(modpath.."/rope.lua")
 dofile(modpath.."/workbench.lua")
diff --git a/mechanisms.lua b/mechanisms.lua
new file mode 100644 (file)
index 0000000..596f808
--- /dev/null
@@ -0,0 +1,97 @@
+-- Thanks to sofar for helping with that code.
+local plate = {}
+screwdriver = screwdriver or {}
+
+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})
+       door:open(player)
+
+       minetest.after(2, function()
+               minetest.set_node(pos_actuator, {name=actuator.name, param2=actuator.param2})
+               door:close(player)
+       end)
+end
+
+function plate.construct(pos)
+       local timer = minetest.get_node_timer(pos)
+       timer:start(0.5)
+end
+
+function plate.timer(pos)
+       local objs = minetest.get_objects_inside_radius(pos, 0.8)
+       if objs == {} or not doors.get then return true end
+       local minp = {x=pos.x-2, y=pos.y, z=pos.z-2}
+       local maxp = {x=pos.x+2, y=pos.y, z=pos.z+2}
+       local doors = minetest.find_nodes_in_area(minp, maxp, "group:door")
+
+       for _, player in pairs(objs) do
+               if player:is_player() then
+                       for i = 1, #doors do
+                               door_toggle(pos, doors[i], player)
+                       end
+               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"},
+               drawtype = "nodebox",
+               node_box = xdecor.pixelbox(16, {{1, 0, 1, 14, 1, 14}}),
+               groups = {snappy=3},
+               sounds = default.node_sound_wood_defaults(),
+               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"},
+               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",
+               sunlight_propagates = true,
+               on_rotate = screwdriver.rotate_simple
+       })
+end
+
+xdecor.register("leaver_off", {
+       description = "Leaver",
+       tiles = {"xdecor_leaver_off.png"},
+       drawtype = "nodebox",
+       node_box = xdecor.pixelbox(16, {{2, 1, 15, 12, 14, 1}}),
+       groups = {cracky=3, oddly_breakable_by_hand=2},
+       sounds = default.node_sound_stone_defaults(),
+       sunlight_propagates = true,
+       on_rotate = screwdriver.rotate_simple,
+       on_rightclick = function(pos, node, clicker)
+               if not doors.get then return end
+               local minp = {x=pos.x-2, y=pos.y-1, z=pos.z-2}
+               local maxp = {x=pos.x+2, y=pos.y+1, z=pos.z+2}
+               local doors = minetest.find_nodes_in_area(minp, maxp, "group:door")
+
+               for i = 1, #doors do
+                       door_toggle(pos, doors[i], clicker)
+               end
+       end
+})
+
+xdecor.register("leaver_on", {
+       tiles = {"xdecor_leaver_on.png"},
+       drawtype = "nodebox",
+       node_box = xdecor.pixelbox(16, {{2, 1, 15, 12, 14, 1}}),
+       groups = {cracky=3, oddly_breakable_by_hand=2, not_in_creative_inventory=1},
+       sounds = default.node_sound_stone_defaults(),
+       sunlight_propagates = true,
+       on_rotate = screwdriver.rotate_simple,
+       drop = "xdecor:leaver_off"
+})
+
diff --git a/pressureplates.lua b/pressureplates.lua
deleted file mode 100644 (file)
index e50ce6e..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
--- Thanks to sofar for helping with that code.
-local plate = {}
-screwdriver = screwdriver or {}
-
-function plate.construct(pos)
-       local timer = minetest.get_node_timer(pos)
-       timer:start(0.5)
-end
-
-function plate.door_toggle(pos_plate, pos_door, player)
-       local plate = minetest.get_node(pos_plate)
-       local door = doors.get(pos_door)
-
-       minetest.set_node(pos_plate, {name=plate.name:gsub("_off", "_on"), param2=plate.param2})
-       door:open(player)
-
-       minetest.after(2, function()
-               minetest.set_node(pos_plate, {name=plate.name, param2=plate.param2})
-               door:close(player)
-       end)
-end
-
-function plate.timer(pos)
-       local objs = minetest.get_objects_inside_radius(pos, 0.8)
-       if objs == {} or not doors.get then return true end
-       local minp = {x=pos.x-2, y=pos.y, z=pos.z-2}
-       local maxp = {x=pos.x+2, y=pos.y, z=pos.z+2}
-       local doors = minetest.find_nodes_in_area(minp, maxp, "group:door")
-
-       for _, player in pairs(objs) do
-               if player:is_player() then
-                       for i = 1, #doors do
-                               plate.door_toggle(pos, doors[i], player)
-                       end
-               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"},
-               drawtype = "nodebox",
-               node_box = xdecor.pixelbox(16, {{1, 0, 1, 14, 1, 14}}),
-               groups = {snappy=3},
-               sounds = default.node_sound_wood_defaults(),
-               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"},
-               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",
-               sunlight_propagates = true,
-               on_rotate = screwdriver.rotate_simple
-       })
-end
index 39176383b13f090260a6aec65810d3b8f49c5e94..93e816845cb1e79b8d90a07595acd89c499e24b6 100644 (file)
@@ -221,6 +221,14 @@ minetest.register_craft({
        }
 })
 
+minetest.register_craft({
+       output = "xdecor:leaver_off",
+       recipe = {
+               {"group:stick"},
+               {"group:stone"}
+       }
+})
+
 minetest.register_craft({
        output = "xdecor:mailbox",
        recipe = {
diff --git a/textures/xdecor_leaver_off.png b/textures/xdecor_leaver_off.png
new file mode 100644 (file)
index 0000000..143ad88
Binary files /dev/null and b/textures/xdecor_leaver_off.png differ
diff --git a/textures/xdecor_leaver_on.png b/textures/xdecor_leaver_on.png
new file mode 100644 (file)
index 0000000..933d138
Binary files /dev/null and b/textures/xdecor_leaver_on.png differ