From 36bc5ba82f9a4439832bf297bc587008f7c0b404 Mon Sep 17 00:00:00 2001 From: None Date: Wed, 9 Apr 2014 17:02:25 +0400 Subject: [PATCH] Add weak wooden door. Boltable. --- doors/depends.txt | 1 + doors/init.lua | 117 +++++++++++++++++------- real_locks/depends.txt | 1 - real_locks/init.lua | 11 ++- real_locks/textures/real_locks_bolt.png | Bin 0 -> 199 bytes 5 files changed, 97 insertions(+), 33 deletions(-) create mode 100644 real_locks/textures/real_locks_bolt.png diff --git a/doors/depends.txt b/doors/depends.txt index 4ad96d5..94165de 100644 --- a/doors/depends.txt +++ b/doors/depends.txt @@ -1 +1,2 @@ default +real_locks diff --git a/doors/init.lua b/doors/init.lua index 2b8ee5e..4b70898 100644 --- a/doors/init.lua +++ b/doors/init.lua @@ -4,7 +4,7 @@ doors = {} --{{{ Functions ---{{{ can_open for door with bolt +--{{{ can_open_bolted doors.can_open_bolted = function (pos, node, clicker) if string.find(node.name, "_1") then local door_facedir = node.param2 @@ -21,7 +21,7 @@ doors.swap_door = function (pos, dir, check_name, replace, replace_dir, meta) pos.y = pos.y+dir local replace_node = minetest.get_node(pos) - if not replace_node.name == check_name then + if replace_node.name ~= check_name then return end @@ -42,20 +42,32 @@ doors.swap_door = function (pos, dir, check_name, replace, replace_dir, meta) end --}}} +--{{{ get_swap_parts +local function get_swap_parts(part, mode) + if mode == "open" then + if part == "t_1" then return -1, "_b_1", "_t_2", "_b_2" + elseif part == "b_1" then return 1, "_t_1", "_b_2", "_t_2" + elseif part == "t_2" then return -1, "_b_2", "_t_1", "_b_1" + elseif part == "b_2" then return 1, "_t_2", "_b_1", "_t_1" + end + elseif mode == "swap" then + if part == "t_1" then return -1, "_b_1", "_t_1", "_b_1" + elseif part == "b_1" then return 1, "_t_1", "_b_1", "_t_1" + elseif part == "t_2" then return -1, "_b_2", "_t_2", "_b_2" + elseif part == "b_2" then return 1, "_t_2", "_b_2", "_t_2" + end + end +end +--}}} + --{{{ open_door doors.open_door = function (pos, name) - local part = name:sub(-3) + local dir, check, pointed_part, second_part = get_swap_parts(name:sub(-3), "open") name = name:sub(0,-5) - - if part == "t_1" then - doors.swap_door(pos,-1, name.."_b_1", name.."_t_2", name.."_b_2") - elseif part == "b_1" then - doors.swap_door(pos, 1, name.."_t_1", name.."_b_2", name.."_t_2") - elseif part == "t_2" then - doors.swap_door(pos,-1, name.."_b_2", name.."_t_1", name.."_b_1") - elseif part == "b_2" then - doors.swap_door(pos, 1, name.."_t_2", name.."_b_1", name.."_t_1") - end + doors.swap_door(pos, dir, + name .. check, + name .. pointed_part, + name .. second_part) end --}}} @@ -86,6 +98,24 @@ doors.rightclick_on_locked = function(pos, node, clicker, wield_item) end --}}} +--{{{ rightclick_on_lockable +doors.rightclick_on_lockable = function (pos, node, clicker, wield_item) + local name = node.name:sub(1,-5) + local dir, check, pointed_part, second_part = get_swap_parts(name:sub(-3), "swap") + + if wield_item:get_name() == "real_locks:lock" then + doors.swap_door(pos, dir, + name .. check, + name .. "_locked" .. pointed_part, + name .. "_locked" .. second_part + ) + wield_item:take_item() + else + doors.open_door(pos, node.name) + end +end +--}}} + --{{{ rightclock_on_bolted doors.rightclick_on_bolted = function(pos, node, clicker) if doors.can_open_bolted(pos, node, clicker) then @@ -94,13 +124,28 @@ doors.rightclick_on_bolted = function(pos, node, clicker) end --}}} ---{{{ rightclick_on_lockable -doors.rightclick_on_lockable = function (pos, node, clicker, wield_item) - if wield_item:get_name() == "real_locks:lock" then - doors.swap_door(pos, 1, name.."_t_1", - name.."locked_b_1", name.."locked_t_1", - {"lock_pass", wield_item:get_metadata()} +--{{{ rightclick_on_boltable +doors.rightclick_on_boltable = function (pos, node, clicker, wield_item) + local name = node.name:sub(1,-5) + + local bolted = "bolted" + local cw = "" + if string.find(name, "_cw") then + bolted = "_bolted_cw" + cw = "_cw" + name = name:sub(1,-4) + end + + local dir, check, pointed_part, second_part = get_swap_parts(node.name:sub(-3), "swap") + + print(name .. cw .. check) + if wield_item:get_name() == "real_locks:bolt" then + doors.swap_door(pos, dir, + name .. cw .. check, + name .. bolted .. pointed_part, + name .. bolted .. second_part ) + print(minetest.get_node(pos).name) wield_item:take_item() else doors.open_door(pos, node.name) @@ -259,6 +304,16 @@ end --{{{ Default tiles table local tt = {} local tb = {} +tt = { + "door_wood_a.png", + "door_wood_side.png", "door_wood_side_open.png", + "door_wood_y.png", "door_wood_y_open.png" +} +tb = { + "door_wood_b.png", + "door_wood_side.png", "door_wood_side_open.png", + "door_wood_y.png", "door_wood_y_open.png" +} local t = { t_1 = { tt[4], tt[4], @@ -305,23 +360,23 @@ local t = { --}}} --{{{ door wood weak -tt = { - "door_wood_a.png", - "door_wood_side.png", "door_wood_side_open.png", - "door_wood_y.png", "door_wood_y_open.png" -} -tb = { - "door_wood_b.png", - "door_wood_side.png", "door_wood_side_open.png", - "door_wood_y.png", "door_wood_y_open.png" -} - doors:register_door("doors:door_wood_weak", { description = "Weak wooden door", inventory_image = "door_wood_weak.png", groups = {snappy=1,choppy=1,oddly_breakable_by_hand=2,flammable=2,door=1}, - tiles = t + tiles = t, + rightclick = doors.rightclick_on_boltable }) + +-- Bolted version +doors:register_door("doors:door_wood_weak_bolted", { + description = "Weak wooden door", + inventory_image = "door_wood_weak.png", + groups = {snappy=1,choppy=1,oddly_breakable_by_hand=2,flammable=2,door=1}, + tiles = t, + rightclick = doors.rightclick_on_bolted +}) + --}}} --{{{ door wood diff --git a/real_locks/depends.txt b/real_locks/depends.txt index f2c4494..4ad96d5 100644 --- a/real_locks/depends.txt +++ b/real_locks/depends.txt @@ -1,2 +1 @@ default -doors diff --git a/real_locks/init.lua b/real_locks/init.lua index 84ff8ab..9aeceee 100644 --- a/real_locks/init.lua +++ b/real_locks/init.lua @@ -1,6 +1,6 @@ real_locks = {} ---{{{ Defaul can_open() for locked object +--{{{ Default can_open() for locked object real_locks.can_open_locked = function (pos, wield) if wield:get_name() == "real_locks:key" then local lock_pass = minetest.get_meta(pos):get_string("lock_pass") @@ -66,6 +66,15 @@ minetest.register_craftitem("real_locks:lock", { stack_max = 1, range = 2, }) + +minetest.register_craftitem("real_locks:bolt", { + description = "Bolt", + groups = {}, + inventory_image = "real_locks_bolt.png", + wield_image = "real_locks_bolt.png", + stack_max = 1, + range = 2, +}) --}}} --{{{Craft recipes diff --git a/real_locks/textures/real_locks_bolt.png b/real_locks/textures/real_locks_bolt.png new file mode 100644 index 0000000000000000000000000000000000000000..629ff0d3c35403397216530d7fefe30e8b14d4f6 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPq3n!PNp5eB|{y-tw%#er@=ltB<)VvZPmw~~#C^fMp zHASI3vm`^o-P1Q9MK6^dD6Z}4;uvCaIypgtRfO41T literal 0 HcmV?d00001