From fdb7b55a819dfefd9db50549654e0fe5c9f3068b Mon Sep 17 00:00:00 2001 From: unknown <24964441+wsor4035@users.noreply.github.com> Date: Sun, 1 May 2022 14:32:05 -0400 Subject: [PATCH] handle multiple seats in sofas --- .luacheckrc | 1 + homedecor_seating/.luacheckrc | 23 ----------------- homedecor_seating/armchairs.lua | 11 +++----- homedecor_seating/init.lua | 45 +++++++++++++++++++++++++++++++++ homedecor_seating/longsofas.lua | 7 +---- homedecor_seating/sofas.lua | 7 +---- 6 files changed, 52 insertions(+), 42 deletions(-) delete mode 100644 homedecor_seating/.luacheckrc diff --git a/.luacheckrc b/.luacheckrc index 5dd6e28b..d4fd425b 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -21,6 +21,7 @@ globals = { read_globals = { "minetest", "core", "vector", "ItemStack", + "dump", -- Stdlib string = {fields = {"split", "trim"}}, diff --git a/homedecor_seating/.luacheckrc b/homedecor_seating/.luacheckrc deleted file mode 100644 index afda9303..00000000 --- a/homedecor_seating/.luacheckrc +++ /dev/null @@ -1,23 +0,0 @@ -unused_args = false -allow_defined_top = true -max_comment_line_length = 999 - -read_globals = { - "DIR_DELIM", - "minetest", "core", - "unpack", - "dump", - table = { fields = { "copy", "getn" } }, - "vector", "nodeupdate", - "VoxelManip", "VoxelArea", - "PseudoRandom", "ItemStack", - "creative", - "default", - "homedecor", - "unifieddyes", - "screwdriver", -} - -globals = { -} - diff --git a/homedecor_seating/armchairs.lua b/homedecor_seating/armchairs.lua index 609ce827..352e64f2 100644 --- a/homedecor_seating/armchairs.lua +++ b/homedecor_seating/armchairs.lua @@ -28,13 +28,7 @@ minetest.register_node(":lrfurn:armchair", { on_dig = unifieddyes.on_dig, on_rotate = unifieddyes.fix_after_screwdriver_nsew, on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - if not clicker:is_player() then - return itemstack - end - pos.y = pos.y-0.5 - clicker:setpos(pos) - clicker:set_hp(20) - return itemstack + return lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, 1) end }) @@ -57,6 +51,9 @@ homedecor.register("armchair", { end, on_dig = unifieddyes.on_dig, on_rotate = unifieddyes.fix_after_screwdriver_nsew, + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + return lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, 1) + end }) -- crafts diff --git a/homedecor_seating/init.lua b/homedecor_seating/init.lua index 3587e090..160f4f4f 100644 --- a/homedecor_seating/init.lua +++ b/homedecor_seating/init.lua @@ -78,6 +78,51 @@ function lrfurn.fix_sofa_rotation_nsew(pos, placer, itemstack, pointed_thing) minetest.swap_node(pos, { name = node.name, param2 = fdir+colorbits }) end +function lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, seats) + if not clicker:is_player() then + return itemstack + end + --conversion table for param2 to dir + local p2d = { + vector.new(0, 0, 0), + vector.new(0, 0, -1), + vector.new(0, 0, 1), + vector.new(1, 0, 0), + vector.new(-1, 0, 0), + } + + --generate posible seat positions + local valid_seats = {[minetest.hash_node_position(pos)] = pos} + if seats > 1 then + for i=1,seats-1 do + --since this are hardware colored nodes, node.param2 gives us a actual param to get a dir from + local npos = vector.add(pos, vector.multiply(p2d[node.param2 % 8], i)) + valid_seats[minetest.hash_node_position(npos)] = npos + end + end + + --see if we can find a non occupied seat + local sit_pos + for hash, spos in pairs(valid_seats) do + local pstatus = false + for _, ref in pairs(minetest.get_objects_inside_radius(spos, 0.5)) do + if ref:is_player() then + pstatus = true + end + end + if not pstatus then sit_pos = spos end + end + if not sit_pos then + minetest.chat_send_player(clicker:get_player_name(), "sorry, this seat is currently occupied") + return itemstack + end + + --seat the player + sit_pos.y = sit_pos.y-0.5 + clicker:setpos(sit_pos) + return itemstack +end + dofile(modpath.."/longsofas.lua") dofile(modpath.."/sofas.lua") dofile(modpath.."/armchairs.lua") diff --git a/homedecor_seating/longsofas.lua b/homedecor_seating/longsofas.lua index 90099509..f273bafd 100644 --- a/homedecor_seating/longsofas.lua +++ b/homedecor_seating/longsofas.lua @@ -42,12 +42,7 @@ minetest.register_node(":lrfurn:longsofa", { end, on_dig = unifieddyes.on_dig, on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - if not clicker:is_player() then - return itemstack - end - pos.y = pos.y-0.5 - clicker:setpos(pos) - return itemstack + return lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, 3) end }) diff --git a/homedecor_seating/sofas.lua b/homedecor_seating/sofas.lua index abc85c86..a26ff867 100644 --- a/homedecor_seating/sofas.lua +++ b/homedecor_seating/sofas.lua @@ -42,12 +42,7 @@ minetest.register_node(":lrfurn:sofa", { end, on_dig = unifieddyes.on_dig, on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - if not clicker:is_player() then - return itemstack - end - pos.y = pos.y-0.5 - clicker:setpos(pos) - return itemstack + return lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, 2) end })