homedecor_modpack/lrfurn/sofas.lua
Vanessa Ezekowitz 6cadc7cf26 convert lrfurn to use param2 colorization
To maximize the palette, this uses the colorwallmounted param2 style,
which necessitated modifying the models to make wallmounted look like
normal facedir.  This means couches and chairs can now only ever be
placed upright, facing one of N/S/E/W like a couch or chair normally
would, but since the screwdriver was already disabled, it was basically
impossible to rotate them to any other orientation anyway.

Since this is colorwallmounted, it uses the 32-color abridged Unified Dyes
palette.
2017-01-30 17:10:01 -05:00

130 lines
3.4 KiB
Lua

local S = homedecor_i18n.gettext
local sofa_cbox = {
type = "wallmounted",
wall_side = {-0.5, -0.5, -0.5, 0.5, 0.5, 1.5}
}
minetest.register_node("lrfurn:sofa", {
description = "Sofa",
drawtype = "mesh",
mesh = "lrfurn_sofa_short.obj",
tiles = {
"lrfurn_upholstery.png",
{ name = "lrfurn_sofa_bottom.png", color = 0xffffffff }
},
paramtype = "light",
paramtype2 = "colorwallmounted",
palette = "unifieddyes_palette_colorwallmounted.png",
inventory_image = "lrfurn_sofa_inv.png",
groups = {snappy=3},
sounds = default.node_sound_wood_defaults(),
selection_box = sofa_cbox,
node_box = sofa_cbox,
on_rotate = screwdriver.disallow,
after_place_node = function(pos, placer, itemstack, pointed_thing)
lrfurn.fix_rotation(pos, placer, itemstack, pointed_thing)
if minetest.is_protected(pos, placer:get_player_name()) then return true end
local fdir = minetest.dir_to_facedir(placer:get_look_dir(), false)
if lrfurn.check_forward(pos, fdir, false, placer) then
itemstack:take_item()
else
minetest.chat_send_player(placer:get_player_name(), "No room to place the sofa!")
minetest.set_node(pos, { name = "air" })
end
return itemstack
end,
after_dig_node = unifieddyes.after_dig_node,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
local itemname = itemstack:get_name()
if string.find(itemname, "dye:") or string.find(itemname, "unifieddyes:") then
unifieddyes.on_rightclick(pos, node, clicker,
itemstack, pointed_thing, "lrfurn:sofa", "wallmounted")
else
if not clicker:is_player() then
return itemstack
end
pos.y = pos.y-0.5
clicker:setpos(pos)
clicker:set_hp(20)
return itemstack
end
end
})
minetest.register_craft({
output = "lrfurn:sofa",
recipe = {
{"wool:white", "wool:white", "", },
{"stairs:slab_wood", "stairs:slab_wood", "", },
{"group:stick", "group:stick", "", }
}
})
minetest.register_craft({
output = "lrfurn:sofa",
recipe = {
{"wool:white", "wool:white", "", },
{"moreblocks:slab_wood", "moreblocks:slab_wood", "", },
{"group:stick", "group:stick", "", }
}
})
-- convert old static nodes to param2 color
lrfurn.old_static_sofas = {}
for _, color in ipairs(lrfurn.colors) do
table.insert(lrfurn.old_static_sofas, "lrfurn:sofa_"..color)
end
minetest.register_lbm({
name = "lrfurn:convert_sofas",
label = "Convert lrfurn short sofas to use param2 color",
run_at_every_load = true,
nodenames = lrfurn.old_static_sofas,
action = function(pos, node)
local name = node.name
local color = string.sub(name, string.find(name, "_")+1)
if color == "red" then
color = "medium_red"
elseif color == "dark_green" then
color = "medium_green"
elseif color == "magenta" then
color = "medium_magenta"
elseif color == "cyan" then
color = "medium_cyan"
end
local paletteidx, _ = unifieddyes.getpaletteidx("unifieddyes:"..color, "wallmounted")
local old_fdir = math.floor(node.param2 % 32)
local new_fdir = 3
if old_fdir == 0 then
new_fdir = 3
elseif old_fdir == 1 then
new_fdir = 4
elseif old_fdir == 2 then
new_fdir = 2
elseif old_fdir == 3 then
new_fdir = 5
end
local param2 = paletteidx + new_fdir
minetest.set_node(pos, { name = "lrfurn:sofa", param2 = param2 })
local meta = minetest.get_meta(pos)
meta:set_string("dye", "unifieddyes:"..color)
end
})
if minetest.setting_get("log_mods") then
minetest.log("action", "[lrfurn/sofas] "..S("Loaded!"))
end