173 lines
11 KiB
Lua
173 lines
11 KiB
Lua
for ind, sofa_type in pairs({"small", "middle", "long", "corner_1", "corner_2"}) do
|
|
for color, rgb_code in pairs(sofas_rgb_colors) do
|
|
for _, pillow_color in ipairs({"red", "green" , "blue", "yellow", "violet"}) do
|
|
minetest.register_node("luxury_decor:simple_".. color .. "_" .. sofa_type .. "_sofa_with_" .. pillow_color .. "_pillows", {
|
|
description = minetest.colorize(sofas_rgb_colors[color], "Simple " .. string.upper(color) .. " " .. string.upper(sofa_type) .. " Sofa With " .. string.upper(pillow_color) .. " Pillows" ),
|
|
visual_scale = 0.5,
|
|
mesh = "simple_"..sofa_type.."_sofa.obj",
|
|
tiles = {"simple_sofa.png^(simple_sofa_2.png^[colorize:" .. rgb_code .. ")^(simple_sofa_3.png^[colorize:" .. pillow_color .. ")"},
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
groups = {choppy = 2.5},
|
|
drawtype = "mesh",
|
|
collision_box = {
|
|
type = "fixed",
|
|
fixed = sofas_collision_boxes[sofa_type]
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = sofas_collision_boxes[sofa_type]
|
|
},
|
|
sounds = default.node_sound_wood_defaults(),
|
|
on_construct = function (pos)
|
|
local meta = minetest.get_meta(pos)
|
|
|
|
local seats_table = {
|
|
{["small"] =
|
|
{[1]=
|
|
{
|
|
is_busy = {bool=false, player=nil},
|
|
pos = {x = pos.x, y=pos.y+0.2, z = pos.z}
|
|
}
|
|
}
|
|
},
|
|
{["middle"] =
|
|
{[1]=
|
|
{
|
|
is_busy={bool=false, player=nil},
|
|
pos={x = pos.x, y = pos.y+0.2, z = pos.z}
|
|
},
|
|
[2]=
|
|
{
|
|
is_busy={bool=false, player=nil},
|
|
pos={x=pos.x+1, y=pos.y+0.2, z=pos.z}
|
|
}
|
|
}
|
|
},
|
|
{["long"] = {[1]={is_busy={bool=false, player_obj=nil}, pos={x=pos.x, y=pos.y+0.2, z=pos.z}},
|
|
[2]={is_busy={bool=false, player=nil}, pos={x=pos.x+1, y=pos.y+0.2, z=pos.z}},
|
|
[3]={is_busy={bool=false, player=nil}, pos={x=pos.x+2, y=pos.y+0.2, z=pos.z}}}},
|
|
{["corner_1"] = {[1]={is_busy={bool=false, player=nil}, pos={x=pos.x, y=pos.y+0.2, z=pos.z}},
|
|
[2]={is_busy={bool=false, player=nil}, pos={x=pos.x+1, y=pos.y+0.2, z=pos.z}},
|
|
[3]={is_busy={bool=false, player=nil}, pos={x=pos.x+2, y=pos.y+0.2, z=pos.z}},
|
|
[4]={is_busy={bool=false, player=nil}, pos={x=pos.x+2, y=pos.y+0.2, z=pos.z-1}}}},
|
|
{["corner_2"] = {[1]={is_busy={bool=false, player=nil}, pos={x=pos.x, y=pos.y+0.2, z=pos.z-1}},
|
|
[2]={is_busy={bool=false, player=nil}, pos={x=pos.x, y=pos.y+0.2, z=pos.z}},
|
|
[3]={is_busy={bool=false, player=nil}, pos={x=pos.x+1, y=pos.y+0.2, z=pos.z}},
|
|
[4]={is_busy={bool=false, player=nil}, pos={x=pos.x+2, y=pos.y+0.2, z=pos.z}}}}
|
|
|
|
}
|
|
|
|
for num, data in pairs(seats_table) do
|
|
for sf_type, sf_data in pairs(seats_table[num]) do
|
|
if minetest.get_node(pos).name == "luxury_decor:simple_" .. color .. "_" .. sf_type .. "_sofa_with_" .. pillow_color .. "_pillows" then
|
|
meta:set_string("seats_range", minetest.serialize(sf_data))
|
|
end
|
|
end
|
|
end
|
|
|
|
end,
|
|
after_dig_node = function (pos, oldnode, oldmetadata, digger)
|
|
--local seats = minetest.deserialize(minetest.get_meta(pos):get_string("seats_range"))
|
|
local seats = minetest.deserialize(oldmetadata.fields.seats_range)
|
|
if seats ~= nil then
|
|
for seat_num, seat_data in pairs(seats) do
|
|
if seat_data.is_busy.player ~= nil then
|
|
local player = minetest.get_player_by_name(seat_data.is_busy.player)
|
|
chairs.standup_player(player, pos, seats)
|
|
end
|
|
end
|
|
end
|
|
end,
|
|
on_rightclick = function (pos, node, clicker, itemstack, pointed_thing)
|
|
if string.find(itemstack:get_name(), "dye:") then
|
|
local get_player_contr = clicker:get_player_control()
|
|
|
|
if get_player_contr.sneak then
|
|
for _, p_color in ipairs({"red", "green", "blue", "yellow", "violet"}) do
|
|
if itemstack:get_name() == "dye:" .. p_color then
|
|
itemstack:take_item()
|
|
minetest.remove_node(pos)
|
|
minetest.set_node(pos, {name="luxury_decor:simple_" .. color .. "_" .. sofa_type .. "_sofa_with_" .. p_color .. "_pillows"})
|
|
end
|
|
end
|
|
else
|
|
for color2, rgb_code in pairs(sofas_rgb_colors) do
|
|
if "dye:" .. color2 == itemstack:get_name() then
|
|
itemstack:take_item()
|
|
minetest.remove_node(pos)
|
|
minetest.set_node(pos, {name="luxury_decor:simple_" .. color2 .. "_" .. sofa_type .. "_sofa_with_" .. pillow_color .. "_pillows"})
|
|
end
|
|
end
|
|
end
|
|
|
|
elseif string.find(itemstack:get_name(), "luxury_decor:simple_" .. color .. "_small_sofa_with_" .. pillow_color .. "_pillows") then
|
|
local dir = clicker:get_look_dir()
|
|
local player_pos = clicker:get_pos()
|
|
if pointed_thing.under.x ~= pointed_thing.above.x and string.find(node.name, "_long_") == nil then
|
|
local sofas_types_list = {"small", "middle", "long"}
|
|
if dir.x > 0 then
|
|
itemstack:take_item()
|
|
minetest.remove_node(pos)
|
|
minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z}, {name="luxury_decor:simple_" .. color .. "_" .. sofas_types_list[ind+1] .. "_sofa_with_" .. pillow_color .. "_pillows"})
|
|
elseif dir.x < 0 then
|
|
itemstack:take_item()
|
|
minetest.remove_node(pos)
|
|
minetest.set_node({x=pos.x, y=pos.y, z=pos.z}, {name="luxury_decor:simple_" .. color .. "_" .. sofas_types_list[ind+1] .. "_sofa_with_" .. pillow_color .. "_pillows"})
|
|
|
|
end
|
|
elseif pointed_thing.under.x > pointed_thing.above.x and string.find(node.name, "_long_") == nil then
|
|
local sofas_types_list = {"small", "middle", "long"}
|
|
if dir.x < 0 then
|
|
itemstack:take_item()
|
|
minetest.remove_node(pos)
|
|
minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z}, {name="luxury_decor:simple_" .. color .. "_" .. sofas_types_list[ind+1] .. "_sofa_with_" .. pillow_color .. "_pillows"})
|
|
elseif dir.x > 0 then
|
|
itemstack:take_item()
|
|
minetest.remove_node(pos)
|
|
minetest.set_node({x=pos.x, y=pos.y, z=pos.z}, {name="luxury_decor:simple_" .. color .. "_" .. sofas_types_list[ind+1] .. "_sofa_with_" .. pillow_color .. "_pillows"})
|
|
|
|
end
|
|
elseif pointed_thing.above.z ~= pointed_thing.under.z and player_pos.z < pos.z and string.find(node.name, "_long_") ~= nil then
|
|
if dir.x > 0 then
|
|
itemstack:take_item()
|
|
minetest.remove_node(pos)
|
|
minetest.set_node({x=pos.x-3, y=pos.y, z=pos.z}, {name="luxury_decor:simple_" .. color .. "_corner1_sofa_with_" .. pillow_color .. "_pillows"})
|
|
elseif dir.x < 0 then
|
|
itemstack:take_item()
|
|
minetest.remove_node(pos)
|
|
minetest.set_node(pos, {name="luxury_decor:simple_" .. color .. "_corner2_sofa_with_" .. pillow_color .. "_pillows"})
|
|
end
|
|
--elseif pointed_thing.under.x > pointed_thing.above.x and dir.y > 0 and string.find(node.name, "_long_") == nil then
|
|
--itemstack:take_item()
|
|
--minetest.remove_node(pos)
|
|
--minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z}, {name="luxury_decor:simple_" .. color .. "_" .. footstools_types_list[ind+1] .. "_footstool"})
|
|
--elseif pointed_thing.under.y > pointed_thing.above.y and dir.y > 0 and string.find(node.name, "_long_") == nil then
|
|
--itemstack:take_item()
|
|
--minetest.remove_node(pos)
|
|
--minetest.set_node({x=pos.x, y=pos.y, z=pos.z-1}, {name="luxury_decor:simple_" .. color .. "_" .. footstools_types_list[ind+1] .. "_footstool"})
|
|
elseif pointed_thing.under.y < pointed_thing.above.y and dir.y < 0 and string.find(node.name, "_long_") == nil then
|
|
itemstack:take_item()
|
|
--minetest.remove_node(pos)
|
|
--minetest.set_node({x=pos.x, y=pos.y, z=pos.z+1}, {name="luxury_decor:simple_" .. color .. "_" .. footstools_types_list[ind+1] .. "_footstool"})
|
|
|
|
end
|
|
|
|
else
|
|
local meta = clicker:get_meta()
|
|
local is_attached = minetest.deserialize(meta:get_string("is_attached"))
|
|
if is_attached == nil or is_attached == "" then
|
|
chairs.sit_player(clicker, node, pos, {{{x=81, y=81}, frame_speed=15, frame_blend=0}})
|
|
|
|
elseif is_attached ~= nil or is_attached ~= "" then
|
|
chairs.standup_player(clicker, pos)
|
|
|
|
end
|
|
end
|
|
return itemstack
|
|
end
|
|
})
|
|
end
|
|
end
|
|
end
|