1
0
mirror of https://github.com/mt-mods/homedecor_modpack.git synced 2024-11-16 15:20:35 +01:00
homedecor_modpack/homedecor/window_treatments.lua
Vanessa Ezekowitz 175724d53c add a function to correct for broken placement rotation
for wallmounted nodes (engine or _game bug), and put it
to use.
2017-01-29 03:45:58 -05:00

275 lines
8.0 KiB
Lua

local S = homedecor.gettext
local function N_(x) return x end
homedecor.register("window_quartered", {
description = S("Window (quartered)"),
tiles = {
"homedecor_window_sides.png",
"homedecor_window_sides.png",
"homedecor_window_sides.png",
"homedecor_window_sides.png",
"homedecor_window_quartered.png",
"homedecor_window_quartered.png"
},
use_texture_alpha = true,
groups = {snappy=3},
sounds = default.node_sound_glass_defaults(),
node_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, 0.025, 0.5, 0.5, 0}, -- NodeBox1
{-0.5, 0.4375, -0.0625, 0.5, 0.5, 0.0625}, -- NodeBox2
{-0.5, -0.5, -0.0625, 0.5, -0.4375, 0.0625}, -- NodeBox3
{-0.5, -0.0625, -0.025, 0.5, 0.0625, 0.025}, -- NodeBox4
{0.4375, -0.5, -0.0625, 0.5, 0.5, 0.0625}, -- NodeBox5
{-0.5, -0.5, -0.0625, -0.4375, 0.5, 0.0625}, -- NodeBox6
{-0.0625, -0.5, -0.025, 0.0625, 0.5, 0.025}, -- NodeBox7
}
},
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.0625, 0.5, 0.5, 0.0625}
}
})
homedecor.register("window_plain", {
description = S("Window (plain)"),
tiles = {
"homedecor_window_sides.png",
"homedecor_window_sides.png",
"homedecor_window_sides.png",
"homedecor_window_sides.png",
"homedecor_window_frame.png",
"homedecor_window_frame.png"
},
use_texture_alpha = true,
groups = {snappy=3},
sounds = default.node_sound_glass_defaults(),
node_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, 0.025, 0.5, 0.5, 0}, -- NodeBox1
{-0.5, 0.4375, -0.0625, 0.5, 0.5, 0.0625}, -- NodeBox2
{-0.5, -0.5, -0.0625, 0.5, -0.4375, 0.0625}, -- NodeBox3
{0.4375, -0.5, -0.0625, 0.5, 0.5, 0.0625}, -- NodeBox4
{-0.5, -0.5, -0.0625, -0.4375, 0.5, 0.0625}, -- NodeBox5
}
},
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.0625, 0.5, 0.5, 0.0625}
}
})
local wb1_cbox = {
type = "fixed",
fixed = { -8/16, -8/16, 5/16, 8/16, 8/16, 8/16 },
}
homedecor.register("blinds_thick", {
description = S("Window Blinds (thick)"),
mesh = "homedecor_windowblind_thick.obj",
inventory_image = "homedecor_windowblind_thick_inv.png",
tiles = {
"homedecor_windowblind_strings.png",
"homedecor_windowblinds.png"
},
walkable = false,
groups = {snappy=3},
sounds = default.node_sound_wood_defaults(),
selection_box = wb1_cbox
})
local wb2_cbox = {
type = "fixed",
fixed = { -8/16, -8/16, 6/16, 8/16, 8/16, 8/16 },
}
homedecor.register("blinds_thin", {
description = S("Window Blinds (thin)"),
mesh = "homedecor_windowblind_thin.obj",
inventory_image = "homedecor_windowblind_thin_inv.png",
tiles = {
"homedecor_windowblind_strings.png",
"homedecor_windowblinds.png"
},
walkable = false,
groups = {snappy=3},
sounds = default.node_sound_wood_defaults(),
selection_box = wb2_cbox
})
minetest.register_node("homedecor:curtain_closed", {
description = S("Curtains"),
tiles = { "homedecor_curtain.png" },
inventory_image = "homedecor_curtain.png",
drawtype = 'signlike',
use_texture_alpha = true,
walkable = false,
groups = { snappy = 3 },
sounds = default.node_sound_leaves_defaults(),
paramtype2 = "colorwallmounted",
palette = "unifieddyes_palette_colorwallmounted.png",
selection_box = { type = "wallmounted" },
after_dig_node = unifieddyes.after_dig_node,
after_place_node = homedecor.fix_rotation,
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:curtain_closed", "wallmounted")
else
local topnode = minetest.get_node({x=pos.x, y=pos.y+1.0, z=pos.z})
if string.find(topnode.name, "homedecor:curtainrod") then
-- Open the curtains
local fdir = node.param2
minetest.set_node(pos, { name = "homedecor:curtain_open", param2 = fdir })
end
return itemstack
end
end
})
minetest.register_node("homedecor:curtain_open", {
description = S("Curtains"),
tiles = { "homedecor_curtain_open.png" },
inventory_image = "homedecor_curtain_open.png",
drawtype = 'signlike',
use_texture_alpha = true,
walkable = false,
groups = { snappy = 3 },
sounds = default.node_sound_leaves_defaults(),
paramtype2 = "colorwallmounted",
palette = "unifieddyes_palette_colorwallmounted.png",
selection_box = { type = "wallmounted" },
after_dig_node = unifieddyes.after_dig_node,
after_place_node = homedecor.fix_rotation,
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:curtain_open", "wallmounted")
else
local topnode = minetest.get_node({x=pos.x, y=pos.y+1.0, z=pos.z})
if string.find(topnode.name, "homedecor:curtainrod") then
-- Close the curtains
local fdir = node.param2
minetest.set_node(pos, { name = "homedecor:curtain_closed", param2 = fdir })
end
return itemstack
end
end
})
local mats = {
{ "brass", S("brass"), "homedecor_generic_metal_brass.png" },
{ "wrought_iron", S("wrought iron"), "homedecor_generic_metal_wrought_iron.png" },
{ "wood", S("wood"), "default_wood.png" }
}
for _, m in ipairs(mats) do
local material, mat_name, texture = unpack(m)
homedecor.register("curtainrod_"..material, {
tiles = { texture },
inventory_image = "homedecor_curtainrod_"..material.."_inv.png",
description = S("Curtain Rod (@1)", mat_name),
groups = { snappy = 3 },
node_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, 0.375, 0.5, -0.4375, 0.4375},
{-0.4375, -0.5, 0.4375, -0.375, -0.4375, 0.5},
{0.375, -0.5, 0.4375, 0.4375, -0.4375, 0.5}
}
}
})
end
homedecor.register("window_flowerbox", {
description = S("Window flowerbox"),
tiles = {
"homedecor_flowerbox_top.png",
"homedecor_flowerbox_bottom.png",
"homedecor_flowerbox_sides.png"
},
inventory_image = "homedecor_flowerbox_inv.png",
sounds = default.node_sound_stone_defaults(),
groups = { snappy = 3 },
node_box = {
type = "fixed",
fixed = {
{-0.375, 0.25, -0.125, 0.375, 0.5, 0.375}, -- NodeBox1
{-0.3125, 0.4375, 0.375, -0.25, 0.4875, 0.5}, -- NodeBox2
{0.25, 0.4375, 0.375, 0.3125, 0.4875, 0.5}, -- NodeBox3
}
}
})
homedecor.register("stained_glass", {
description = S("Stained Glass"),
tiles = {"homedecor_stained_glass.png"},
inventory_image = "homedecor_stained_glass.png",
groups = {snappy=3},
use_texture_alpha = true,
light_source = 3,
sounds = default.node_sound_glass_defaults(),
node_box = {
type = "fixed",
fixed = { {-0.5, -0.5, 0.46875, 0.5, 0.5, 0.5} }
}
})
-- Convert old curtain nodes to param2-colorization
local curtaincolors = {
{ N_("red"), "ad2323" },
{ N_("green"), "27a927" },
{ N_("blue"), "2626c6" },
{ N_("white"), "ffffff" },
{ N_("pink"), "ff8fb7" },
{ N_("violet"), "7f29d7" },
}
homedecor.old_static_curtain_nodes = {}
for _, i in ipairs(curtaincolors) do
local color,hue = unpack(i)
table.insert(homedecor.old_static_curtain_nodes, "homedecor:curtain_"..color)
table.insert(homedecor.old_static_curtain_nodes, "homedecor:curtain_open_"..color)
end
minetest.register_lbm({
name = "homedecor:convert_curtains",
label = "Convert static curtain nodes to use param2 color",
run_at_every_load = true,
nodenames = homedecor.old_static_curtain_nodes,
action = function(pos, node)
local name = node.name
local color = string.sub(name, 19)
local openclose = "closed"
if string.find(color, "open") then
color = string.sub(color, 6)
openclose = "open"
end
local metadye = "medium_"..color
if color == "pink" then
metadye = "light_red"
end
if color == "white" then
metadye = "white"
end
local newnode = "homedecor:curtain_"..openclose
local paletteidx, _ = unifieddyes.getpaletteidx("unifieddyes:"..metadye, "wallmounted")
local newparam2 = paletteidx + (node.param2 % 8)
minetest.set_node(pos, { name = newnode, param2 = newparam2 })
local meta = minetest.get_meta(pos)
meta:set_string("dye", "unifieddyes:"..metadye)
end
})