diff options
Diffstat (limited to 'homedecor/bedroom.lua')
-rw-r--r-- | homedecor/bedroom.lua | 332 |
1 files changed, 202 insertions, 130 deletions
diff --git a/homedecor/bedroom.lua b/homedecor/bedroom.lua index 51c4dd5..92e0bc5 100644 --- a/homedecor/bedroom.lua +++ b/homedecor/bedroom.lua @@ -1,31 +1,16 @@ -local S = homedecor.gettext -local bedcolors = { - { "black", "#000000:200" }, --new cg72 - { "brown", "#603010:175" }, - { "blue", "#0000d0:150" }, - { "cyan", "#009fa7:150" }, --new cg72 - { "darkgrey", "#101010:175" }, - { "dark_green", "#007000:150" }, - { "green", "#00d000:150" }, --new cg72 - { "grey", "#101010:100" }, --new cg72 - { "magenta", "#e0048b:150" }, --new cg72 - { "orange", "#ff3000:150" }, - { "pink", "#ff80b0:150" }, - { "red", "#d00000:150" }, - { "violet", "#7000e0:150" }, - { "white", "#000000:000" }, --new cg72 - { "yellow", "#ffe000:150" } -} +local S = homedecor_i18n.gettext + +local function N_(x) return x end local bed_sbox = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 1.5 } + type = "wallmounted", + wall_side = { -0.5, -0.5, -0.5, 0.5, 0.5, 1.5 } } local bed_cbox = { - type = "fixed", - fixed = { + type = "wallmounted", + wall_side = { { -0.5, -0.5, -0.5, 0.5, -0.05, 1.5 }, { -0.5, -0.5, 1.44, 0.5, 0.5, 1.5 }, { -0.5, -0.5, -0.5, 0.5, 0.18, -0.44 }, @@ -33,130 +18,145 @@ local bed_cbox = { } local kbed_sbox = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 1.5, 0.5, 1.5 } + type = "wallmounted", + wall_side = { -0.5, -0.5, -0.5, 1.5, 0.5, 1.5 } } local kbed_cbox = { - type = "fixed", - fixed = { + type = "wallmounted", + wall_side = { { -0.5, -0.5, -0.5, 1.5, -0.05, 1.5 }, { -0.5, -0.5, 1.44, 1.5, 0.5, 1.5 }, { -0.5, -0.5, -0.5, 1.5, 0.18, -0.44 }, } } -for i in ipairs(bedcolors) do - local color = bedcolors[i][1] - local color2=color - local hue = bedcolors[i][2] - - if color == "darkgrey" then - color2 = "dark_grey" - end - homedecor.register("bed_"..color.."_regular", { - mesh = "homedecor_bed_regular.obj", - tiles = { - "homedecor_bed_frame.png", - "default_wood.png", - "wool_white.png", - "wool_"..color2..".png", - "homedecor_bed_bottom.png", - "wool_"..color2..".png^[brighten", -- pillow - }, - inventory_image = "homedecor_bed_inv.png^(homedecor_bed_overlay_inv.png^[colorize:"..hue..")", - description = S("Bed (%s)"):format(color), - groups = {snappy=3}, - selection_box = bed_sbox, - collision_box = bed_cbox, - sounds = default.node_sound_wood_defaults(), - on_rotate = screwdriver.disallow, - after_place_node = function(pos, placer, itemstack, pointed_thing) - if not placer:get_player_control().sneak then - return homedecor.bed_expansion(pos, placer, itemstack, pointed_thing, color) - end - end, - after_dig_node = function(pos) - homedecor.unextend_bed(pos, color) - end, - on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - if minetest.get_modpath("beds") then - beds.on_rightclick(pos, clicker) - end +homedecor.register("bed_regular", { + mesh = "homedecor_bed_regular.obj", + tiles = { + { name = "homedecor_bed_frame.png", color = 0xffffffff }, + { name = "default_wood.png", color = 0xffffffff }, + { name = "wool_white.png", color = 0xffffffff }, + "wool_white.png", + { name = "homedecor_bed_bottom.png", color = 0xffffffff }, + "wool_white.png^[brighten", -- pillow + }, + inventory_image = "homedecor_bed_inv.png", + paramtype2 = "colorwallmounted", + palette = "unifieddyes_palette_colorwallmounted.png", + description = S("Bed"), + groups = {snappy=3}, + selection_box = bed_sbox, + node_box = bed_cbox, + sounds = default.node_sound_wood_defaults(), + on_rotate = screwdriver.disallow, + after_place_node = function(pos, placer, itemstack, pointed_thing) + homedecor.fix_rotation_nsew(pos, placer, itemstack, pointed_thing) + if not placer:get_player_control().sneak then + return homedecor.bed_expansion(pos, placer, itemstack, pointed_thing) + end + end, + after_dig_node = function(pos) + homedecor.unextend_bed(pos) + end, + 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, "homedecor:bed_regular", "wallmounted") + elseif itemname == "homedecor:bed_regular" then + homedecor.bed_expansion(pos, clicker, itemstack, pointed_thing, true) + return itemstack + else +-- if minetest.get_modpath("beds") then +-- beds.on_rightclick(pos, clicker) +-- end return itemstack end - }) + end +}) - homedecor.register("bed_"..color.."_extended", { - mesh = "homedecor_bed_extended.obj", - tiles = { - "homedecor_bed_frame.png", - "default_wood.png", - "wool_white.png", - "wool_"..color2..".png", - "homedecor_bed_bottom.png", - "wool_"..color2..".png^[brighten", - }, - selection_box = bed_sbox, - collision_box = bed_cbox, - sounds = default.node_sound_wood_defaults(), - expand = { forward = "air" }, - on_rotate = screwdriver.disallow, - after_dig_node = function(pos) - homedecor.unextend_bed(pos, color) - end, - on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - if minetest.get_modpath("beds") then - beds.on_rightclick(pos, clicker) - end +homedecor.register("bed_extended", { + mesh = "homedecor_bed_extended.obj", + tiles = { + { name = "homedecor_bed_frame.png", color = 0xffffffff }, + { name = "default_wood.png", color = 0xffffffff }, + { name = "wool_white.png", color = 0xffffffff }, + "wool_white.png", + { name = "homedecor_bed_bottom.png", color = 0xffffffff }, + "wool_white.png^[brighten", + }, + paramtype2 = "colorwallmounted", + palette = "unifieddyes_palette_colorwallmounted.png", + selection_box = bed_sbox, + node_box = bed_cbox, + groups = {snappy=3}, + sounds = default.node_sound_wood_defaults(), + expand = { forward = "air" }, + on_rotate = screwdriver.disallow, + after_dig_node = function(pos) + homedecor.unextend_bed(pos) + end, + 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, "homedecor:bed_extended", "wallmounted") + else +-- if minetest.get_modpath("beds") then +-- beds.on_rightclick(pos, clicker) +-- end return itemstack - end, - drop = "homedecor:bed_"..color.."_regular" - }) + end + end, + drop = "homedecor:bed_regular" +}) - homedecor.register("bed_"..color.."_kingsize", { - mesh = "homedecor_bed_kingsize.obj", - tiles = { - "homedecor_bed_frame.png", - "default_wood.png", - "wool_white.png", - "wool_"..color2..".png", - "homedecor_bed_bottom.png", - "wool_"..color2..".png^[brighten", - }, - inventory_image = "homedecor_bed_kingsize_inv.png^(homedecor_bed_kingsize_overlay_inv.png^[colorize:"..hue..")", - groups = {snappy=3, not_in_creative_inventory=1}, - description = S("Bed (%s, king sized)"):format(color), - groups = {snappy=3, not_in_creative_inventory=1}, - selection_box = kbed_sbox, - collision_box = kbed_cbox, - sounds = default.node_sound_wood_defaults(), - on_rotate = screwdriver.disallow, - after_dig_node = function(pos, oldnode, oldmetadata, digger) - local inv = digger:get_inventory() - if digger:get_player_control().sneak and inv:room_for_item("main", "bed_"..color.."_regular 1") then - inv:remove_item("main", "homedecor:bed_"..color.."_kingsize 1") - inv:add_item("main", "homedecor:bed_"..color.."_regular 2") - end - end, - on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - if minetest.get_modpath("beds") then - beds.on_rightclick(pos, clicker) - end +homedecor.register("bed_kingsize", { + mesh = "homedecor_bed_kingsize.obj", + tiles = { + { name = "homedecor_bed_frame.png", color = 0xffffffff }, + { name = "default_wood.png", color = 0xffffffff }, + { name = "wool_white.png", color = 0xffffffff }, + "wool_white.png", + { name = "homedecor_bed_bottom.png", color = 0xffffffff }, + "wool_white.png^[brighten", + }, + paramtype2 = "colorwallmounted", + palette = "unifieddyes_palette_colorwallmounted.png", + inventory_image = "homedecor_bed_kingsize_inv.png", + groups = {snappy=3, not_in_creative_inventory=1}, + description = S("Bed (king sized)"), + groups = {snappy=3, not_in_creative_inventory=1}, + selection_box = kbed_sbox, + node_box = kbed_cbox, + sounds = default.node_sound_wood_defaults(), + on_rotate = screwdriver.disallow, + after_place_node = homedecor.fix_rotation_nsew, + after_dig_node = function(pos, oldnode, oldmetadata, digger) + local inv = digger:get_inventory() + if digger:get_player_control().sneak and inv:room_for_item("main", "bed_regular 1") then + inv:remove_item("main", "homedecor:bed_kingsize 1") + inv:add_item("main", "homedecor:bed_regular 2") + end + end, + 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, "homedecor:bed_kingsize", "wallmounted") + else +-- if minetest.get_modpath("beds") then +-- beds.on_rightclick(pos, clicker) +-- end return itemstack end - }) - - minetest.register_alias("homedecor:bed_"..color.."_foot", "homedecor:bed_"..color.."_regular") - minetest.register_alias("homedecor:bed_"..color.."_footext", "homedecor:bed_"..color.."_extended") - minetest.register_alias("homedecor:bed_"..color.."_head", "air") - -end - + end +}) -for _, w in pairs({"mahogany", "oak"}) do +for _, w in pairs({ N_("mahogany"), N_("oak") }) do homedecor.register("nightstand_"..w.."_one_drawer", { - description = S("Nightstand with One Drawer ("..w..")"), + description = S("Nightstand with One Drawer (@1)", S(w)), tiles = { 'homedecor_nightstand_'..w..'_tb.png', 'homedecor_nightstand_'..w..'_tb.png^[transformFY', 'homedecor_nightstand_'..w..'_lr.png^[transformFX', @@ -167,7 +167,7 @@ for _, w in pairs({"mahogany", "oak"}) do type = "fixed", fixed = { { -8/16, 0, -30/64, 8/16, 8/16, 8/16 }, -- top half - { -7/16, 1/16, -32/64, 7/16, 7/16, -29/64}, -- drawer face + { -7/16, 1/16, -32/64, 7/16, 7/16, -29/64}, -- drawer face { -8/16, -8/16, -30/64, -7/16, 0, 8/16 }, -- left { 7/16, -8/16, -30/64, 8/16, 0, 8/16 }, -- right { -8/16, -8/16, 7/16, 8/16, 0, 8/16 }, -- back @@ -185,7 +185,7 @@ for _, w in pairs({"mahogany", "oak"}) do }) homedecor.register("nightstand_"..w.."_two_drawers", { - description = S("Nightstand with Two Drawers ("..w..")"), + description = S("Nightstand with Two Drawers (@1)", S(w)), tiles = { 'homedecor_nightstand_'..w..'_tb.png', 'homedecor_nightstand_'..w..'_tb.png^[transformFY', 'homedecor_nightstand_'..w..'_lr.png^[transformFX', @@ -210,3 +210,75 @@ for _, w in pairs({"mahogany", "oak"}) do }, }) end + +-- convert to param2 colorization + +local bedcolors = { + "black", + "brown", + "blue", + "cyan", + "darkgrey", + "dark_green", + "green", + "grey", + "magenta", + "orange", + "pink", + "red", + "violet", + "white", + "yellow" +} + +homedecor.old_bed_nodes = {} + +for _, color in ipairs(bedcolors) do + table.insert(homedecor.old_bed_nodes, "homedecor:bed_"..color.."_regular") + table.insert(homedecor.old_bed_nodes, "homedecor:bed_"..color.."_extended") + table.insert(homedecor.old_bed_nodes, "homedecor:bed_"..color.."_kingsize") +end + +minetest.register_lbm({ + name = "homedecor:convert_beds", + label = "Convert homedecor static bed nodes to use param2 color", + run_at_every_load = true, + nodenames = homedecor.old_bed_nodes, + action = function(pos, node) + local name = node.name + local color = string.sub(name, string.find(name, "_") + 1) + local color = string.sub(color, 1, string.find(color, "_", -10) - 1) -- -10 puts us near the end of the color field + + if color == "darkgrey" then + color = "dark_grey" + 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 + + if string.find(name, "regular") then + new_name = "homedecor:bed_regular" + elseif string.find(name, "extended") then + new_name = "homedecor:bed_extended" + else + new_name = "homedecor:bed_kingsize" + end + + minetest.set_node(pos, { name = new_name, param2 = param2 }) + local meta = minetest.get_meta(pos) + meta:set_string("dye", "unifieddyes:"..color) + end +}) |