Integrated the MTG beds API sleeping part with the mod's one
parent
f8f104f36f
commit
b14d1ec615
|
@ -1,3 +1,56 @@
|
|||
local default_on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
|
||||
local add_props = minetest.registered_nodes[node.name].add_properties
|
||||
|
||||
if not add_props then
|
||||
return
|
||||
end
|
||||
|
||||
local bed_dir = helpers.get_dir(pos)
|
||||
|
||||
local lpos = add_props.lay_pos1 or {x=0, y=0, z=0}
|
||||
lpos = pos + vector.rotate_around_axis(lpos, {x=0, y=1, z=0}, vector.dir_to_rotation(bed_dir).y)
|
||||
|
||||
local lpos2 = add_props.lay_pos2
|
||||
lpos2 = lpos2 and pos + vector.rotate_around_axis(lpos2, {x=0, y=1, z=0}, vector.dir_to_rotation(bed_dir).y)
|
||||
|
||||
local is_lpos_fr = true
|
||||
local is_lpos2_fr = true
|
||||
|
||||
for _, bpos in pairs(beds.bed_position) do
|
||||
if vector.equals(lpos, bpos) then
|
||||
is_lpos_fr = false
|
||||
elseif lpos2 and vector.equals(lpos2, bpos) then
|
||||
is_lpos2_fr = false
|
||||
end
|
||||
end
|
||||
|
||||
local tpos = is_lpos_fr and lpos or is_lpos2_fr and lpos2
|
||||
|
||||
if not tpos then
|
||||
minetest.chat_send_player(clicker:get_player_name(), "This bed is already occupied!")
|
||||
return
|
||||
end
|
||||
|
||||
beds.on_rightclick(tpos, clicker)
|
||||
|
||||
return itemstack
|
||||
end
|
||||
|
||||
local default_can_dig = function(pos)
|
||||
local add_props = minetest.registered_nodes[minetest.get_node(pos).name].add_properties
|
||||
|
||||
if not add_props then
|
||||
return
|
||||
end
|
||||
|
||||
local bed_dir = helpers.get_dir(pos)
|
||||
|
||||
local lpos = add_props.lay_pos1 or {x=0, y=0, z=0}
|
||||
lpos = pos + vector.rotate_around_axis(lpos, {x=0, y=1, z=0}, vector.dir_to_rotation(bed_dir).y)
|
||||
|
||||
return beds.can_dig(lpos)
|
||||
end
|
||||
|
||||
function register.register_bed(name, base_def, add_def, craft_def)
|
||||
local def = table.copy(base_def)
|
||||
|
||||
|
@ -6,16 +59,31 @@ function register.register_bed(name, base_def, add_def, craft_def)
|
|||
|
||||
if add_def then
|
||||
if add_def.recipe then
|
||||
craft_def = add_def
|
||||
craft_def = table.copy(add_def)
|
||||
else
|
||||
def.add_properties = add_def
|
||||
def.add_properties = table.copy(add_def)
|
||||
end
|
||||
end
|
||||
|
||||
local mtg_bed_def = minetest.registered_nodes["beds:bed_bottom"]
|
||||
if def.callbacks then
|
||||
def.callbacks.after_destruct = nil
|
||||
def.callbacks.after_dig_node = nil
|
||||
def.callbacks.on_rightclick = def.callbacks.on_rightclick or default_on_rightclick
|
||||
def.callbacks.on_destruct = def.callbacks.on_destruct or mtg_bed_def.on_destruct
|
||||
def.callbacks.can_dig = def.callbacks.can_dig or default_can_dig
|
||||
else
|
||||
def.callbacks = {
|
||||
on_rightclick = default_on_rightclick,
|
||||
on_destruct = mtg_bed_def.on_destruct,
|
||||
can_dig = default_can_dig
|
||||
}
|
||||
end
|
||||
|
||||
if def.add_properties then
|
||||
def.add_properties.lay_pos2 = nil
|
||||
end
|
||||
|
||||
register.register_furniture_unit(name, def, craft_def)
|
||||
|
||||
if add_def.double then
|
||||
|
@ -43,6 +111,9 @@ function register.register_bed(name, base_def, add_def, craft_def)
|
|||
def2.callbacks.after_dig_node = base_def.callbacks.after_dig_node
|
||||
end
|
||||
|
||||
if def2.add_properties then
|
||||
def2.add_properties.lay_pos2 = add_def.lay_pos2
|
||||
end
|
||||
register.register_furniture_unit(name .. "_double", def2)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
multidecor.helpers = {}
|
||||
|
||||
helpers = multidecor.helpers
|
||||
|
||||
-- Returns a direction of the node with 'pos' position
|
||||
function helpers.get_dir(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
local def = minetest.registered_nodes[node.name]
|
||||
local dir = def.paramtype2 == "facedir" and vector.copy(minetest.facedir_to_dir(node.param2)) or
|
||||
def.paramtype2 == "wallmounted" and vector.copy(minetest.wallmounted_to_dir(node.param2))
|
||||
dir = dir*-1
|
||||
return dir
|
||||
end
|
|
@ -2,6 +2,7 @@ multidecor = {}
|
|||
|
||||
local modpath = minetest.get_modpath("decor_api")
|
||||
|
||||
dofile(modpath .. "/common_helpers.lua")
|
||||
dofile(modpath .. "/connecting.lua")
|
||||
dofile(modpath .. "/register.lua")
|
||||
dofile(modpath .. "/bed.lua")
|
||||
|
|
|
@ -36,7 +36,7 @@ function shelves.rotate_shelf(pos, obj, is_drawer, move_dist)
|
|||
return
|
||||
end
|
||||
|
||||
local dir = shelves.get_dir(pos)
|
||||
local dir = helpers.get_dir(pos)
|
||||
local rot_y = vector.dir_to_rotation(dir).y
|
||||
|
||||
local rel_obj_pos = vector.subtract(obj:get_pos(), pos)
|
||||
|
@ -62,7 +62,7 @@ function shelves.rotate_shelf_bbox(obj)
|
|||
if not self then return end
|
||||
|
||||
local sel_box = minetest.registered_entities[self.name].selectionbox
|
||||
local dir = shelves.get_dir(self.connected_to.pos)
|
||||
local dir = helpers.get_dir(self.connected_to.pos)
|
||||
local yaw = vector.dir_to_rotation(dir).y
|
||||
|
||||
local box = {
|
||||
|
@ -88,16 +88,6 @@ function shelves.rotate_shelf_bbox(obj)
|
|||
obj:set_properties({selectionbox={box.min.x, box.min.y, box.min.z, box.max.x, box.max.y, box.max.z}})
|
||||
end
|
||||
|
||||
-- Returns a direction of the node with 'pos' position
|
||||
function shelves.get_dir(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
local def = minetest.registered_nodes[node.name]
|
||||
local dir = def.paramtype2 == "facedir" and vector.copy(minetest.facedir_to_dir(node.param2)) or
|
||||
def.paramtype2 == "wallmounted" and vector.copy(minetest.wallmounted_to_dir(node.param2))
|
||||
dir = dir*-1
|
||||
return dir
|
||||
end
|
||||
|
||||
-- Animates opening or closing the shelf 'obj'. The action directly depends on 'dir_sign' value ('1' is open, '-1' is close)
|
||||
function shelves.open_shelf(obj, dir_sign)
|
||||
local self = obj:get_luaentity()
|
||||
|
@ -112,7 +102,7 @@ function shelves.open_shelf(obj, dir_sign)
|
|||
--minetest.debug("2")
|
||||
local node_name = self.connected_to.name
|
||||
local shelf = minetest.registered_nodes[node_name].add_properties.shelves_data[self.shelf_data_i]
|
||||
local dir = shelves.get_dir(self.connected_to.pos)
|
||||
local dir = helpers.get_dir(self.connected_to.pos)
|
||||
|
||||
self.dir = dir_sign
|
||||
if shelf.type == "drawer" then
|
||||
|
|
|
@ -23,6 +23,8 @@ register.register_bed("jungle_bed", {
|
|||
},
|
||||
{
|
||||
common_name = "jungle_bed",
|
||||
lay_pos1 = {x=0, y=0, z=1},
|
||||
lay_pos2 = {x=-1, y=0, z=1},
|
||||
double = {
|
||||
mutable_bounding_box_indices = {1, 2},
|
||||
description = "Jungle Bed (double)",
|
||||
|
@ -64,6 +66,8 @@ register.register_bed("wooden_bed_with_legs", {
|
|||
},
|
||||
{
|
||||
common_name = "wooden_bed_with_legs",
|
||||
lay_pos1 = {x=0, y=0, z=1},
|
||||
lay_pos2 = {x=-1, y=0, z=1},
|
||||
double = {
|
||||
mutable_bounding_box_indices = {1, 2, 3},
|
||||
description = "Wooden bed with legs (double)",
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
name = modern
|
||||
description = Modern-style furniture
|
||||
depends = decor_api
|
||||
depends = beds, decor_api
|
||||
author = Andrey01
|
||||
|
|
|
@ -59,9 +59,6 @@ for _, wood_n in ipairs({"", "jungle", "pine", "aspen"}) do
|
|||
{-0.5, 0, 0.4, 0.5, -0.5, 0.5},
|
||||
{-0.5, 0, 0.15, -0.4, -0.5, 0.4},
|
||||
{0.4, 0, 0.15, 0.5, -0.5, 0.4}
|
||||
--[[{-0.5, 0.4, 0, 0.5, 0.5, 0.5},
|
||||
{-0.5, 0.15, 0, -0.4, 0.4, 0.5},
|
||||
{0.4, 0.15, 0, 0.5, 0.4, 0.5}]]
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue