multidecor/decor_api/lighting.lua

65 lines
1.8 KiB
Lua

local default_on_rightclick = function(pos)
local node = minetest.get_node(pos)
local add_props = minetest.registered_nodes[node.name].add_properties
if not add_props or not add_props.swap_light then
return
end
minetest.set_node(pos, {name="multidecor:" .. add_props.swap_light.name, param2=node.param2})
minetest.sound_play({name=add_props.swap_light.sound, gain=0.2}, {
pos = pos,
max_hear_distance = 8
})
end
function register.register_light(name, base_def, add_def, craft_def)
local def = table.copy(base_def)
def.type = "light"
def.paramtype2 = "facedir"
if add_def then
if add_def.recipe then
craft_def = add_def
else
def.add_properties = add_def
end
end
if def.callbacks then
def.callbacks.on_rightclick = def.callbacks.on_rightclick or default_on_rightclick
else
def.callbacks = {on_rightclick = default_on_rightclick}
end
local sound_off
local are_props = def.add_properties and def.add_properties.swap_light
if are_props then
sound_off = def.add_properties.swap_light.sound_off or "multidecor_light_off"
def.add_properties.swap_light.sound = def.add_properties.swap_light.sound_on or "multidecor_light_on"
def.add_properties.swap_light.sound_on = nil
def.add_properties.swap_light.sound_off = nil
end
register.register_furniture_unit(name, def, craft_def)
if are_props then
local def2 = table.copy(def)
local swap_light_name = def2.add_properties.swap_light.name
def2.light_source = def2.add_properties.swap_light.light_level or 8
def2.drop = "multidecor:" .. name
if def2.groups then
def2.groups.not_in_creative_inventory = 1
else
def2.groups = {not_in_creative_inventory = 1}
end
def2.add_properties.swap_light = {name=name, sound=sound_off}
register.register_furniture_unit(swap_light_name, def2)
end
end