forked from mtcontrib/homedecor_modpack
Rearrange mesecons, diglines, dimmable functions and related, tweak
digiline stuff to be more generic, and add various digilines connections rules to complement mesecons rules. Mesecons must be present to get the "wallmounted" rules for digilines nodes. Without mesecons, nodes that want wall rules will get alldir rules instead. Add mesecons support to table and standing lamps (off -> max -> off). Add digilines support to all other lights that now support mesecons, except rope lights, since they're a mesecon conductor. (will approach that last one later)
This commit is contained in:
parent
9b77ba1c28
commit
301ae2ee1d
@ -7,3 +7,4 @@ moreblocks?
|
|||||||
building_blocks?
|
building_blocks?
|
||||||
darkage?
|
darkage?
|
||||||
mesecons?
|
mesecons?
|
||||||
|
digilines?
|
||||||
|
@ -11,26 +11,23 @@ local function is_protected(pos, clicker)
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
local actions = {
|
-- control and brightness for dimmable lamps
|
||||||
action_off = function(pos, node)
|
|
||||||
local sep = string.find(node.name, "_o", -5)
|
local repl = {
|
||||||
local onoff = string.sub(node.name, sep + 1)
|
["off"] = "low",
|
||||||
if minetest.get_meta(pos):get_int("toggled") > 0 then
|
["low"] = "med",
|
||||||
minetest.swap_node(pos, {
|
["med"] = "hi",
|
||||||
name = string.sub(node.name, 1, sep - 1).."_off",
|
["hi"] = "max",
|
||||||
param2 = node.param2
|
["max"] = "off",
|
||||||
})
|
["on"] = "off",
|
||||||
end
|
}
|
||||||
end,
|
|
||||||
action_on = function(pos, node)
|
local brightness_tab = {
|
||||||
minetest.get_meta(pos):set_int("toggled", 1)
|
0xffd0d0d0,
|
||||||
local sep = string.find(node.name, "_o", -5)
|
0xffd8d8d8,
|
||||||
local onoff = string.sub(node.name, sep + 1)
|
0xffe0e0e0,
|
||||||
minetest.swap_node(pos, {
|
0xffe8e8e8,
|
||||||
name = string.sub(node.name, 1, sep - 1).."_on",
|
0xffffffff,
|
||||||
param2 = node.param2
|
|
||||||
})
|
|
||||||
end
|
|
||||||
}
|
}
|
||||||
|
|
||||||
local rules_xz = {
|
local rules_xz = {
|
||||||
@ -63,7 +60,34 @@ local rules_toponly = {
|
|||||||
{x = 0, y = 1, z = -1},
|
{x = 0, y = 1, z = -1},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-- mesecons compatibility
|
||||||
|
|
||||||
|
local actions
|
||||||
|
|
||||||
if minetest.get_modpath("mesecons") then
|
if minetest.get_modpath("mesecons") then
|
||||||
|
|
||||||
|
actions = {
|
||||||
|
action_off = function(pos, node)
|
||||||
|
local sep = string.find(node.name, "_", -5)
|
||||||
|
local onoff = string.sub(node.name, sep + 1)
|
||||||
|
if minetest.get_meta(pos):get_int("toggled") > 0 then
|
||||||
|
minetest.swap_node(pos, {
|
||||||
|
name = string.sub(node.name, 1, sep - 1).."_off",
|
||||||
|
param2 = node.param2
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
action_on = function(pos, node)
|
||||||
|
minetest.get_meta(pos):set_int("toggled", 1)
|
||||||
|
local sep = string.find(node.name, "_", -5)
|
||||||
|
local onoff = string.sub(node.name, sep + 1)
|
||||||
|
minetest.swap_node(pos, {
|
||||||
|
name = string.sub(node.name, 1, sep - 1).."_on",
|
||||||
|
param2 = node.param2
|
||||||
|
})
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
homedecor.mesecon_wall_light = {
|
homedecor.mesecon_wall_light = {
|
||||||
effector = table.copy(actions)
|
effector = table.copy(actions)
|
||||||
}
|
}
|
||||||
@ -87,17 +111,13 @@ if minetest.get_modpath("mesecons") then
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- digilines compatibility
|
-- digilines compatibility
|
||||||
-- the following functions are based on the so-named ones in Jeija's digilines mod
|
-- this one is based on the so-named one in Jeija's digilines mod
|
||||||
|
|
||||||
local on_digiline_receive_std = function(pos, node, channel, msg)
|
local player_last_clicked = {}
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local setchan = meta:get_string("channel")
|
local digiline_on_punch
|
||||||
if setchan ~= channel then return end
|
|
||||||
local num = tonumber(msg)
|
if minetest.get_modpath("digilines") then
|
||||||
if msg == "colon" or msg == "period" or msg == "off" or (num and (num >= 0 and num <= 9)) then
|
|
||||||
minetest.swap_node(pos, { name = "led_marquee:marquee_"..msg, param2 = node.param2})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local on_digiline_receive_string = function(pos, node, channel, msg)
|
local on_digiline_receive_string = function(pos, node, channel, msg)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
@ -109,35 +129,16 @@ local on_digiline_receive_string = function(pos, node, channel, msg)
|
|||||||
or msg == "low"
|
or msg == "low"
|
||||||
or msg == "med"
|
or msg == "med"
|
||||||
or msg == "hi"
|
or msg == "hi"
|
||||||
or msg == "max" then
|
or msg == "max"
|
||||||
|
or msg == "on" then
|
||||||
local basename = string.sub(node.name, 1, string.find(node.name, "_", -5) - 1)
|
local basename = string.sub(node.name, 1, string.find(node.name, "_", -5) - 1)
|
||||||
|
if minetest.registered_nodes[basename.."_"..msg] then
|
||||||
minetest.swap_node(pos, {name = basename.."_"..msg, param2 = node.param2})
|
minetest.swap_node(pos, {name = basename.."_"..msg, param2 = node.param2})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local repl = {
|
|
||||||
["off"] ="low",
|
|
||||||
["low"] ="med",
|
|
||||||
["med"] ="hi",
|
|
||||||
["hi"] ="max",
|
|
||||||
["max"] ="off",
|
|
||||||
}
|
|
||||||
|
|
||||||
local player_last_clicked = {}
|
|
||||||
|
|
||||||
local dl_onreceive
|
|
||||||
local dl_digiline
|
|
||||||
local dl_on_punch
|
|
||||||
local function dl_on_rightclick(pos, node, clicker, itemstack, pointed_thing)
|
|
||||||
if is_protected(pos, clicker) then return end
|
|
||||||
local delim = string.find(node.name, "_", -5)
|
|
||||||
local basename = string.sub(node.name, 1, delim - 1)
|
|
||||||
local suffix = string.sub(node.name, delim + 1)
|
|
||||||
minetest.set_node(pos, {name = basename.."_"..repl[suffix], param2 = node.param2})
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if minetest.get_modpath("digilines") then
|
|
||||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
local pos = player_last_clicked[name]
|
local pos = player_last_clicked[name]
|
||||||
@ -150,14 +151,54 @@ if minetest.get_modpath("digilines") then
|
|||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
dl_digiline = {
|
if minetest.get_modpath("mesecons") then
|
||||||
|
homedecor.digiline_wall_light = {
|
||||||
effector = {
|
effector = {
|
||||||
action = on_digiline_receive_string,
|
action = on_digiline_receive_string,
|
||||||
},
|
},
|
||||||
|
wire = {
|
||||||
|
rules = mesecon.rules.wallmounted_get
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
homedecor.digiline_wall_light = {
|
||||||
|
effector = {
|
||||||
|
action = on_digiline_receive_string,
|
||||||
|
},
|
||||||
|
wire = {
|
||||||
|
rules = rules_alldir
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
homedecor.digiline_xz_light = {
|
||||||
|
effector = {
|
||||||
|
action = on_digiline_receive_string,
|
||||||
|
},
|
||||||
|
wire = {
|
||||||
rules = rules_xz
|
rules = rules_xz
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function dl_on_punch(pos, node, puncher, pointed_thing)
|
homedecor.digiline_alldir_light = {
|
||||||
|
effector = {
|
||||||
|
action = on_digiline_receive_string,
|
||||||
|
},
|
||||||
|
wire = {
|
||||||
|
rules = rules_alldir
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
homedecor.digiline_toponly_light = {
|
||||||
|
effector = {
|
||||||
|
action = on_digiline_receive_string,
|
||||||
|
},
|
||||||
|
wire = {
|
||||||
|
rules = rules_toponly
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function digiline_on_punch(pos, node, puncher, pointed_thing)
|
||||||
if is_protected(pos, puncher) then return end
|
if is_protected(pos, puncher) then return end
|
||||||
|
|
||||||
if puncher:get_player_control().sneak then
|
if puncher:get_player_control().sneak then
|
||||||
@ -168,23 +209,17 @@ if minetest.get_modpath("digilines") then
|
|||||||
minetest.show_formspec(name, "homedecor:lamp_set_channel", form)
|
minetest.show_formspec(name, "homedecor:lamp_set_channel", form)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function dl_on_rightclick(pos, node, clicker, itemstack, pointed_thing)
|
-- turn on/off, cycle brightness
|
||||||
|
|
||||||
|
function on_rightclick(pos, node, clicker, itemstack, pointed_thing)
|
||||||
if is_protected(pos, clicker) then return end
|
if is_protected(pos, clicker) then return end
|
||||||
local delim = string.find(node.name, "_", -5)
|
local delim = string.find(node.name, "_", -5)
|
||||||
local basename = string.sub(node.name, 1, delim - 1)
|
local basename = string.sub(node.name, 1, delim - 1)
|
||||||
local suffix = string.sub(node.name, delim + 1)
|
local suffix = string.sub(node.name, delim + 1)
|
||||||
minetest.swap_node(pos, {name = basename.."_"..repl[suffix], param2 = node.param2})
|
minetest.swap_node(pos, {name = basename.."_"..repl[suffix], param2 = node.param2})
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
local brightness_tab = {
|
|
||||||
0xffd0d0d0,
|
|
||||||
0xffd8d8d8,
|
|
||||||
0xffe0e0e0,
|
|
||||||
0xffe8e8e8,
|
|
||||||
0xffffffff,
|
|
||||||
}
|
|
||||||
|
|
||||||
function homedecor.toggle_light(pos, node, clicker, itemstack, pointed_thing)
|
function homedecor.toggle_light(pos, node, clicker, itemstack, pointed_thing)
|
||||||
if is_protected(pos, clicker) then return end
|
if is_protected(pos, clicker) then return end
|
||||||
@ -194,6 +229,9 @@ function homedecor.toggle_light(pos, node, clicker, itemstack, pointed_thing)
|
|||||||
minetest.swap_node(pos, {name = newname, param2 = node.param2})
|
minetest.swap_node(pos, {name = newname, param2 = node.param2})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-----
|
||||||
|
-- The actual lights! :-)
|
||||||
|
|
||||||
for _, onoff in ipairs({"on", "off"}) do
|
for _, onoff in ipairs({"on", "off"}) do
|
||||||
|
|
||||||
local onflag = (onoff == "on")
|
local onflag = (onoff == "on")
|
||||||
@ -277,7 +315,9 @@ for _, onoff in ipairs({"on", "off"}) do
|
|||||||
{items = {"homedecor:glowlight_half_on"}, inherit_color = true },
|
{items = {"homedecor:glowlight_half_on"}, inherit_color = true },
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mesecons = homedecor.mesecon_wall_light
|
mesecons = homedecor.mesecon_wall_light,
|
||||||
|
digiline = homedecor.digiline_wall_light,
|
||||||
|
on_punch = digiline_on_punch
|
||||||
})
|
})
|
||||||
|
|
||||||
sides_edges = "homedecor_glowlight_thin_sides_edges.png"
|
sides_edges = "homedecor_glowlight_thin_sides_edges.png"
|
||||||
@ -340,7 +380,9 @@ for _, onoff in ipairs({"on", "off"}) do
|
|||||||
{items = {"homedecor:glowlight_quarter_on"}, inherit_color = true },
|
{items = {"homedecor:glowlight_quarter_on"}, inherit_color = true },
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mesecons = homedecor.mesecon_wall_light
|
mesecons = homedecor.mesecon_wall_light,
|
||||||
|
digiline = homedecor.digiline_wall_light,
|
||||||
|
on_punch = digiline_on_punch
|
||||||
})
|
})
|
||||||
|
|
||||||
tb_edges = "homedecor_glowlight_cube_tb_edges.png"
|
tb_edges = "homedecor_glowlight_cube_tb_edges.png"
|
||||||
@ -404,7 +446,9 @@ for _, onoff in ipairs({"on", "off"}) do
|
|||||||
{items = {"homedecor:glowlight_small_cube_on"}, inherit_color = true },
|
{items = {"homedecor:glowlight_small_cube_on"}, inherit_color = true },
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mesecons = homedecor.mesecon_wall_light
|
mesecons = homedecor.mesecon_wall_light,
|
||||||
|
digiline = homedecor.digiline_wall_light,
|
||||||
|
on_punch = digiline_on_punch
|
||||||
})
|
})
|
||||||
|
|
||||||
local lighttex
|
local lighttex
|
||||||
@ -437,7 +481,9 @@ for _, onoff in ipairs({"on", "off"}) do
|
|||||||
{items = {"homedecor:plasma_lamp_on"}},
|
{items = {"homedecor:plasma_lamp_on"}},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mesecons = homedecor.mesecon_alldir_light
|
mesecons = homedecor.mesecon_alldir_light,
|
||||||
|
digiline = homedecor.digiline_alldir_light,
|
||||||
|
on_punch = digiline_on_punch
|
||||||
})
|
})
|
||||||
|
|
||||||
local lighttex = "homedecor_blanktile.png"
|
local lighttex = "homedecor_blanktile.png"
|
||||||
@ -473,7 +519,9 @@ for _, onoff in ipairs({"on", "off"}) do
|
|||||||
{items = {"homedecor:plasma_ball_on"}},
|
{items = {"homedecor:plasma_ball_on"}},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mesecons = homedecor.mesecon_xz_light
|
mesecons = homedecor.mesecon_xz_light,
|
||||||
|
digiline = homedecor.digiline_xz_light,
|
||||||
|
on_punch = digiline_on_punch
|
||||||
})
|
})
|
||||||
|
|
||||||
local gl_cbox = {
|
local gl_cbox = {
|
||||||
@ -505,7 +553,9 @@ for _, onoff in ipairs({"on", "off"}) do
|
|||||||
{items = {"homedecor:ground_lantern_on"}},
|
{items = {"homedecor:ground_lantern_on"}},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mesecons = homedecor.mesecon_xz_light
|
mesecons = homedecor.mesecon_xz_light,
|
||||||
|
digiline = homedecor.digiline_xz_light,
|
||||||
|
on_punch = digiline_on_punch
|
||||||
})
|
})
|
||||||
|
|
||||||
local hl_cbox = {
|
local hl_cbox = {
|
||||||
@ -530,7 +580,9 @@ for _, onoff in ipairs({"on", "off"}) do
|
|||||||
{items = {"homedecor:hanging_lantern_on"}},
|
{items = {"homedecor:hanging_lantern_on"}},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mesecons = homedecor.mesecon_alldir_light
|
mesecons = homedecor.mesecon_alldir_light,
|
||||||
|
digiline = homedecor.digiline_alldir_light,
|
||||||
|
on_punch = digiline_on_punch
|
||||||
})
|
})
|
||||||
|
|
||||||
local cl_cbox = {
|
local cl_cbox = {
|
||||||
@ -555,7 +607,9 @@ for _, onoff in ipairs({"on", "off"}) do
|
|||||||
{items = {"homedecor:ceiling_lantern_on"}},
|
{items = {"homedecor:ceiling_lantern_on"}},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mesecons = homedecor.mesecon_toponly_light
|
mesecons = homedecor.mesecon_toponly_light,
|
||||||
|
digiline = homedecor.digiline_toponly_light,
|
||||||
|
on_punch = digiline_on_punch
|
||||||
})
|
})
|
||||||
|
|
||||||
if minetest.get_modpath("darkage") then
|
if minetest.get_modpath("darkage") then
|
||||||
@ -580,7 +634,9 @@ for _, onoff in ipairs({"on", "off"}) do
|
|||||||
{items = {"homedecor:lattice_lantern_large_on"}},
|
{items = {"homedecor:lattice_lantern_large_on"}},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mesecons = homedecor.mesecon_alldir_light
|
mesecons = homedecor.mesecon_alldir_light,
|
||||||
|
digiline = homedecor.digiline_alldir_light,
|
||||||
|
on_punch = digiline_on_punch
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -620,7 +676,9 @@ for _, onoff in ipairs({"on", "off"}) do
|
|||||||
{items = {"homedecor:lattice_lantern_small_on"}},
|
{items = {"homedecor:lattice_lantern_small_on"}},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mesecons = homedecor.mesecon_wall_light
|
mesecons = homedecor.mesecon_alldir_light,
|
||||||
|
digiline = homedecor.digiline_alldir_light,
|
||||||
|
on_punch = digiline_on_punch
|
||||||
})
|
})
|
||||||
|
|
||||||
-- "gooseneck" style desk lamps
|
-- "gooseneck" style desk lamps
|
||||||
@ -658,7 +716,9 @@ for _, onoff in ipairs({"on", "off"}) do
|
|||||||
{items = {"homedecor:desk_lamp_on"}, inherit_color = true },
|
{items = {"homedecor:desk_lamp_on"}, inherit_color = true },
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mesecons = homedecor.mesecon_xz_light
|
mesecons = homedecor.mesecon_xz_light,
|
||||||
|
digiline = homedecor.digiline_xz_light,
|
||||||
|
on_punch = digiline_on_punch
|
||||||
})
|
})
|
||||||
|
|
||||||
-- "kitchen"/"dining room" ceiling lamp
|
-- "kitchen"/"dining room" ceiling lamp
|
||||||
@ -682,7 +742,9 @@ for _, onoff in ipairs({"on", "off"}) do
|
|||||||
{items = {"homedecor:ceiling_lamp_on"}},
|
{items = {"homedecor:ceiling_lamp_on"}},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mesecons = homedecor.mesecon_toponly_light
|
mesecons = homedecor.mesecon_toponly_light,
|
||||||
|
digiline = homedecor.digiline_toponly_light,
|
||||||
|
on_punch = digiline_on_punch
|
||||||
})
|
})
|
||||||
|
|
||||||
-- rope lighting
|
-- rope lighting
|
||||||
@ -1067,9 +1129,10 @@ local function reg_lamp(suffix, nxt, light, brightness)
|
|||||||
{items = {"homedecor:table_lamp_hi"}, inherit_color = true },
|
{items = {"homedecor:table_lamp_hi"}, inherit_color = true },
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
digiline = dl_digiline,
|
digiline = homedecor.digiline_xz_light,
|
||||||
on_rightclick = dl_on_rightclick,
|
mesecons = homedecor.mesecon_wall_light,
|
||||||
on_punch = dl_on_punch
|
on_rightclick = on_rightclick,
|
||||||
|
on_punch = digiline_on_punch
|
||||||
})
|
})
|
||||||
|
|
||||||
homedecor.register("standing_lamp_"..suffix, {
|
homedecor.register("standing_lamp_"..suffix, {
|
||||||
@ -1099,11 +1162,13 @@ local function reg_lamp(suffix, nxt, light, brightness)
|
|||||||
{items = {"homedecor:standing_lamp_hi"}, inherit_color = true },
|
{items = {"homedecor:standing_lamp_hi"}, inherit_color = true },
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
digiline = dl_digiline,
|
digiline = homedecor.digiline_xz_light,
|
||||||
on_rightclick = dl_on_rightclick,
|
mesecons = homedecor.mesecon_wall_light,
|
||||||
on_punch = dl_on_punch
|
on_rightclick = on_rightclick,
|
||||||
|
on_punch = digiline_on_punch
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
-- for old maps that had the original 3dforniture mod
|
-- for old maps that had the original 3dforniture mod
|
||||||
minetest.register_alias("3dforniture:table_lamp_"..suffix, "homedecor:table_lamp_"..suffix)
|
minetest.register_alias("3dforniture:table_lamp_"..suffix, "homedecor:table_lamp_"..suffix)
|
||||||
end
|
end
|
||||||
@ -1114,6 +1179,9 @@ reg_lamp("med", "hi", 7, 3 )
|
|||||||
reg_lamp("hi", "max", 11, 4 )
|
reg_lamp("hi", "max", 11, 4 )
|
||||||
reg_lamp("max", "off", 14, 5 )
|
reg_lamp("max", "off", 14, 5 )
|
||||||
|
|
||||||
|
-- mesecons compatibility
|
||||||
|
minetest.register_alias("homedecor:table_lamp_on", "homedecor:table_lamp_max")
|
||||||
|
minetest.register_alias("homedecor:standing_lamp_on", "homedecor:standing_lamp_max")
|
||||||
|
|
||||||
-- conversion LBM for param2 coloring
|
-- conversion LBM for param2 coloring
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user