homedecor_modpack/homedecor/bathroom_sanitation.lua
2015-04-28 14:22:51 -04:00

305 lines
8.5 KiB
Lua

local S = homedecor.gettext
local toilet_cbox = {
type = "fixed",
fixed = { -6/16, -8/16, -8/16, 6/16, 9/16, 8/16 }
}
homedecor.register("toilet", {
description = S("Toilet"),
mesh = "homedecor_toilet_closed.obj",
tiles = {
"homedecor_marble_light.png",
"homedecor_marble_light.png",
"homedecor_marble_light.png",
"homedecor_generic_metal_neutral.png"
},
selection_box = toilet_cbox,
collision_box = toilet_cbox,
groups = {cracky=3,},
sounds = default.node_sound_stone_defaults(),
on_punch = function (pos, node, puncher)
node.name = "homedecor:toilet_open"
minetest.set_node(pos, node)
end,
})
homedecor.register("toilet_open", {
mesh = "homedecor_toilet_open.obj",
tiles = {
"homedecor_marble_light.png",
"homedecor_marble_light.png",
"homedecor_marble_light.png",
"default_water.png",
"homedecor_generic_metal_neutral.png"
},
selection_box = toilet_cbox,
collision_box = toilet_cbox,
drop = "homedecor:toilet",
groups = {cracky = 3,},
--sounds = {dig = "3dforniture_dig_toilet", gain=0.5},
sounds = default.node_sound_stone_defaults(),
on_punch = function (pos, node, puncher)
node.name = "homedecor:toilet"
minetest.set_node(pos, node)
minetest.sound_play("homedecor_toilet_flush", {
pos=pos,
max_hear_distance = 5,
gain = 1,
})
end,
})
-- toilet paper :-)
local tp_cbox = {
type = "fixed",
fixed = { -0.25, 0.125, 0.0625, 0.1875, 0.4375, 0.5 }
}
homedecor.register("toilet_paper", {
description = S("Toilet paper"),
mesh = "homedecor_toilet_paper.obj",
tiles = {
"homedecor_generic_quilted_paper.png",
"default_wood.png"
},
inventory_image = "homedecor_toilet_paper_inv.png",
selection_box = tp_cbox,
collision_box = tp_cbox,
groups = {snappy=2,oddly_breakable_by_hand=3,flammable=3},
sounds = default.node_sound_defaults(),
})
--Sink
local sink_cbox = {
type = "fixed",
fixed = { -5/16, -8/16, 1/16, 5/16, 8/16, 8/16 }
}
homedecor.register("sink", {
description = S("Bathroom Sink"),
mesh = "homedecor_bathroom_sink.obj",
tiles = {
"homedecor_marble_light.png",
"forniture_marble.png",
"default_water.png"
},
inventory_image="homedecor_bathroom_sink_inv.png",
selection_box = sink_cbox,
collision_box = sink_cbox,
groups = {cracky=2,},
sounds = default.node_sound_stone_defaults(),
})
--Taps
homedecor.register("taps", {
description = S("Bathroom taps/faucet"),
mesh = "homedecor_bathroom_faucet.obj",
tiles = {
"homedecor_generic_metal_neutral.png",
"homedecor_generic_metal_bright.png",
"homedecor_generic_metal_white.png",
"homedecor_generic_metal_bright.png"
},
inventory_image = "3dforniture_taps_inv.png",
wield_image = "3dforniture_taps_inv.png",
sunlight_propagates = true,
selection_box = {
type = "fixed",
fixed = { -4/16, -7/16, 4/16, 4/16, -4/16, 8/16 },
},
walkable = false,
groups = {cracky=2,},
sounds = default.node_sound_stone_defaults(),
})
homedecor.register("taps_brass", {
description = S("Bathroom taps/faucet (brass)"),
mesh = "homedecor_bathroom_faucet.obj",
tiles = {
"homedecor_generic_metal_brass.png",
"homedecor_generic_metal_brass.png",
"homedecor_generic_metal_white.png",
"homedecor_generic_metal_brass.png"
},
inventory_image = "3dforniture_taps_brass_inv.png",
wield_image = "3dforniture_taps_brass_inv.png",
sunlight_propagates = true,
selection_box = {
type = "fixed",
fixed = { -4/16, -7/16, 4/16, 4/16, -4/16, 8/16 },
},
walkable = false,
groups = {cracky=2,},
sounds = default.node_sound_stone_defaults(),
})
--Shower Tray
homedecor.register("shower_tray", {
description = S("Shower Tray"),
tiles = {
"forniture_marble_base_ducha_top.png",
"forniture_marble.png"
},
sunlight_propagates = true,
legacy_facedir_simple = true,
node_box = {
type = "fixed",
fixed = {
{ -0.50, -0.50, -0.50, 0.50, -0.45, 0.50, },
{ -0.50, -0.45, -0.50, 0.50, -0.40, -0.45, },
{ -0.50, -0.45, 0.45, 0.50, -0.40, 0.50, },
{ -0.50, -0.45, -0.45, -0.45, -0.40, 0.45, },
{ 0.45, -0.45, -0.45, 0.50, -0.40, 0.45, },
},
},
selection_box = {
type = "fixed",
fixed = { -0.5, -0.5, -0.5, 0.5, -0.4, 0.5 },
},
groups = {cracky=2},
sounds = default.node_sound_stone_defaults(),
on_destruct = function(pos)
if id and s_handle then
minetest.delete_particlespawner(id)
minetest.after(0, function(s_handle)
minetest.sound_stop(s_handle)
end, s_handle)
else return end
end
})
--Shower Head
local fdir_to_flowpos = {
minx = { 0.15, 0.05, -0.15, -0.05 }, maxx = { -0.15, -0.3, 0.15, 0.3 },
minz = { 0.05, 0.15, -0.05, -0.15 }, maxz = { -0.3, -0.15, 0.3, 0.15 },
velx = { 0, -0.2, 0, 0.2 }, velz = { -0.2, 0, 0.2, 0 }
}
local sh_cbox = {
type = "fixed",
fixed = { -0.2, -0.4, -0.05, 0.2, 0.1, 0.5 }
}
homedecor.register("shower_head", {
drawtype = "mesh",
mesh = "homedecor_shower_head.obj",
tiles = {
"homedecor_generic_metal_neutral.png",
"homedecor_shower_head.png"
},
inventory_image = "homedecor_shower_head_inv.png",
description = "Shower Head",
groups = {snappy=3},
selection_box = sh_cbox,
collision_box = sh_cbox,
on_rightclick = function (pos, node, clicker)
local below = minetest.get_node({x=pos.x, y=pos.y-2.0, z=pos.z})
local is_tray = string.find(below.name, "homedecor:shower_tray")
local fdir = node.param2
local minx = fdir_to_flowpos.minx[fdir + 1]
local maxx = fdir_to_flowpos.maxx[fdir + 1]
local minz = fdir_to_flowpos.minz[fdir + 1]
local maxz = fdir_to_flowpos.maxz[fdir + 1]
local velx = fdir_to_flowpos.velx[fdir + 1]
local velz = fdir_to_flowpos.velz[fdir + 1]
local this_spawner_meta = minetest.get_meta(pos)
local id = this_spawner_meta:get_int("active")
local s_handle = this_spawner_meta:get_int("sound")
if id ~= 0 then
if s_handle then
minetest.after(0, function(s_handle)
minetest.sound_stop(s_handle)
end, s_handle)
end
local player = clicker:get_player_name()
minetest.delete_particlespawner(id, player)
this_spawner_meta:set_int("active", nil)
this_spawner_meta:set_int("sound", nil)
return
end
if fdir and fdir < 4 and is_tray and (not id or id == 0) then
id = minetest.add_particlespawner({
amount = 60, time = 0, collisiondetection = true,
minpos = {x=pos.x - minx, y=pos.y-0.45, z=pos.z - minz},
maxpos = {x=pos.x - maxx, y=pos.y-0.45, z=pos.z - maxz},
minvel = {x=velx, y=-2, z=velz}, maxvel = {x=velx, y=-2, z=velz},
minacc = {x=0, y=0, z=0}, maxacc = {x=0, y=-0.05, z=0},
minexptime = 2, maxexptime = 4, minsize = 0.5, maxsize = 1,
texture = "homedecor_water_particle.png",
})
s_handle = minetest.sound_play("homedecor_shower", {
pos = pos,
max_hear_distance = 5,
loop = true
})
this_spawner_meta:set_int("active", id)
this_spawner_meta:set_int("sound", s_handle)
return
end
end,
on_destruct = function(pos)
local this_spawner_meta = minetest.get_meta(pos)
local id = this_spawner_meta:get_int("active")
local s_handle = this_spawner_meta:get_int("sound")
if id ~= 0 then
minetest.delete_particlespawner(id)
end
if s_handle then
minetest.after(0, function(s_handle)
minetest.sound_stop(s_handle)
end, s_handle)
end
this_spawner_meta:set_int("active", nil)
this_spawner_meta:set_int("sound", nil)
end
})
local bs_cbox = {
type = "fixed",
fixed = { -8/16, -8/16, 1/16, 8/16, 8/16, 8/16 }
}
homedecor.register("bathroom_set", {
drawtype = "mesh",
mesh = "homedecor_bathroom_set.obj",
tiles = {
"homedecor_bathroom_set_mirror.png",
"homedecor_bathroom_set_tray.png",
"homedecor_bathroom_set_toothbrush.png",
"homedecor_bathroom_set_cup.png",
"homedecor_bathroom_set_toothpaste.png",
},
inventory_image = "homedecor_bathroom_set_inv.png",
description = "Bathroom sundries set",
groups = {snappy=3},
selection_box = bs_cbox,
collision_box = bs_cbox,
})
minetest.register_alias("3dforniture:toilet", "homedecor:toilet")
minetest.register_alias("3dforniture:toilet_open", "homedecor:toilet_open")
minetest.register_alias("3dforniture:sink", "homedecor:sink")
minetest.register_alias("3dforniture:taps", "homedecor:taps")
minetest.register_alias("3dforniture:shower_tray", "homedecor:shower_tray")
minetest.register_alias("3dforniture:shower_head", "homedecor:shower_head")
minetest.register_alias("3dforniture:table_lamp", "homedecor:table_lamp_off")
minetest.register_alias("toilet", "homedecor:toilet")
minetest.register_alias("sink", "homedecor:sink")
minetest.register_alias("taps", "homedecor:taps")
minetest.register_alias("shower_tray", "homedecor:shower_tray")
minetest.register_alias("shower_head", "homedecor:shower_head")
minetest.register_alias("table_lamp", "homedecor:table_lamp_off")