handle multiple seats in sofas
This commit is contained in:
parent
6867564f44
commit
fdb7b55a81
|
@ -21,6 +21,7 @@ globals = {
|
||||||
read_globals = {
|
read_globals = {
|
||||||
"minetest", "core",
|
"minetest", "core",
|
||||||
"vector", "ItemStack",
|
"vector", "ItemStack",
|
||||||
|
"dump",
|
||||||
|
|
||||||
-- Stdlib
|
-- Stdlib
|
||||||
string = {fields = {"split", "trim"}},
|
string = {fields = {"split", "trim"}},
|
||||||
|
|
|
@ -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 = {
|
|
||||||
}
|
|
||||||
|
|
|
@ -28,13 +28,7 @@ minetest.register_node(":lrfurn:armchair", {
|
||||||
on_dig = unifieddyes.on_dig,
|
on_dig = unifieddyes.on_dig,
|
||||||
on_rotate = unifieddyes.fix_after_screwdriver_nsew,
|
on_rotate = unifieddyes.fix_after_screwdriver_nsew,
|
||||||
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
|
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
|
||||||
if not clicker:is_player() then
|
return lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, 1)
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
pos.y = pos.y-0.5
|
|
||||||
clicker:setpos(pos)
|
|
||||||
clicker:set_hp(20)
|
|
||||||
return itemstack
|
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -57,6 +51,9 @@ homedecor.register("armchair", {
|
||||||
end,
|
end,
|
||||||
on_dig = unifieddyes.on_dig,
|
on_dig = unifieddyes.on_dig,
|
||||||
on_rotate = unifieddyes.fix_after_screwdriver_nsew,
|
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
|
-- crafts
|
||||||
|
|
|
@ -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 })
|
minetest.swap_node(pos, { name = node.name, param2 = fdir+colorbits })
|
||||||
end
|
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.."/longsofas.lua")
|
||||||
dofile(modpath.."/sofas.lua")
|
dofile(modpath.."/sofas.lua")
|
||||||
dofile(modpath.."/armchairs.lua")
|
dofile(modpath.."/armchairs.lua")
|
||||||
|
|
|
@ -42,12 +42,7 @@ minetest.register_node(":lrfurn:longsofa", {
|
||||||
end,
|
end,
|
||||||
on_dig = unifieddyes.on_dig,
|
on_dig = unifieddyes.on_dig,
|
||||||
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
|
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
|
||||||
if not clicker:is_player() then
|
return lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, 3)
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
pos.y = pos.y-0.5
|
|
||||||
clicker:setpos(pos)
|
|
||||||
return itemstack
|
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -42,12 +42,7 @@ minetest.register_node(":lrfurn:sofa", {
|
||||||
end,
|
end,
|
||||||
on_dig = unifieddyes.on_dig,
|
on_dig = unifieddyes.on_dig,
|
||||||
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
|
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
|
||||||
if not clicker:is_player() then
|
return lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, 2)
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
pos.y = pos.y-0.5
|
|
||||||
clicker:setpos(pos)
|
|
||||||
return itemstack
|
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue