* implment https://github.com/mt-mods/homedecor_modpack/issues/31 - show players sitting in seats

* improve things
This commit is contained in:
wsor4035 2024-09-09 12:11:43 -04:00 committed by GitHub
parent b2e5c81e4d
commit a100d20d4d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 25 additions and 2 deletions

View File

@ -15,7 +15,8 @@ globals = {
"homedecor_doors_and_gates", "homedecor_doors_and_gates",
-- mod-deps -- mod-deps
"armor" "armor",
xcompat = {fields = {"player"}},
} }
read_globals = { read_globals = {

View File

@ -78,10 +78,18 @@ 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
local physics_cache = {}
function lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, seats) function lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, seats)
if not clicker:is_player() then if not clicker:is_player() then
return itemstack return itemstack
end end
if physics_cache[clicker:get_player_name()] then
lrfurn.stand(clicker)
return itemstack
end
--conversion table for param2 to dir --conversion table for param2 to dir
local p2d = { local p2d = {
vector.new(0, 0, 0), vector.new(0, 0, 0),
@ -120,11 +128,25 @@ function lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, seats)
end end
--seat the player --seat the player
sit_pos.y = sit_pos.y-0.5
clicker:set_pos(sit_pos) clicker:set_pos(sit_pos)
xcompat.player.player_attached[clicker:get_player_name()] = true
xcompat.player.set_animation(clicker, "sit", 0)
physics_cache[clicker:get_player_name()] = table.copy(clicker:get_physics_override())
clicker:set_physics_override({speed = 0, jump = 0, gravity = 0})
return itemstack return itemstack
end end
function lrfurn.stand(clicker)
xcompat.player.player_attached[clicker:get_player_name()] = false
if physics_cache[clicker:get_player_name()] then
clicker:set_physics_override(physics_cache[clicker:get_player_name()])
else --in case this is called and the cache is empty
clicker:set_physics_override({speed = 1, jump = 1, gravity = 1})
end
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")