From 4c5b13a3473b970b639e7e63e4a09adfc7abcfe4 Mon Sep 17 00:00:00 2001 From: Jude Melton-Houghton Date: Sat, 29 Jan 2022 19:23:53 -0500 Subject: [PATCH] Fix conductor lighting when aliases are used (#582) --- mesecons/internal.lua | 11 ++--------- mesecons/util.lua | 16 ++++++++-------- 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/mesecons/internal.lua b/mesecons/internal.lua index 165c001..a584092 100644 --- a/mesecons/internal.lua +++ b/mesecons/internal.lua @@ -372,7 +372,6 @@ end local light_update_conductors -- Calculate the contents of the above set if they have not been calculated. --- This must be called before get_update_light_conductor. local function find_light_update_conductors() -- The expensive calculation is only done the first time. if light_update_conductors then return end @@ -415,12 +414,6 @@ local function find_light_update_conductors() end end --- This is the callback for swap_node_force in turnon and turnoff. It determines --- whether a conductor node necessitates a lighting update. -local function get_update_light_conductor(pos, name) - return light_update_conductors[name] ~= nil -end - -- Turn off an equipotential section starting at `pos`, which outputs in the direction of `link`. -- Breadth-first search. Map is abstracted away in a voxelmanip. -- Follow all all conductor paths replacing conductors that were already @@ -453,7 +446,7 @@ function mesecon.turnon(pos, link) end end - mesecon.swap_node_force(f.pos, mesecon.get_conductor_on(node, f.link), get_update_light_conductor) + mesecon.swap_node_force(f.pos, mesecon.get_conductor_on(node, f.link), light_update_conductors[node.name] ~= nil) end -- Only conductors with flat rules can be reliably skipped later @@ -527,7 +520,7 @@ function mesecon.turnoff(pos, link) end end - mesecon.swap_node_force(f.pos, mesecon.get_conductor_off(node, f.link), get_update_light_conductor) + mesecon.swap_node_force(f.pos, mesecon.get_conductor_off(node, f.link), light_update_conductors[node.name] ~= nil) end -- Only conductors with flat rules can be reliably skipped later diff --git a/mesecons/util.lua b/mesecons/util.lua index 7fb95cc..2e21a2e 100644 --- a/mesecons/util.lua +++ b/mesecons/util.lua @@ -389,10 +389,10 @@ end -- -- Existing param1, param2, and metadata are left alone. -- --- See mesecon.swap_node_force for documentation about get_update_light. -function mesecon.vm_swap_node(pos, name, get_update_light) +-- The swap will necessitate a light update unless update_light equals false. +function mesecon.vm_swap_node(pos, name, update_light) local tbl = vm_get_or_create_entry(pos) - tbl.update_light = tbl.update_light or (get_update_light == nil or get_update_light(pos, name)) + tbl.update_light = update_light ~= false or tbl.update_light local index = tbl.va:indexp(pos) tbl.data[index] = minetest.get_content_id(name) tbl.dirty = true @@ -426,15 +426,15 @@ end -- Outside a VM transaction, if the mapblock is not loaded, it is pulled into -- the server’s main map data cache and then accessed from there. -- --- Inside a VM transaction, the transaction’s VM cache is used. If a third --- argument is supplied, it may be called. If it returns false, the swap does --- not necessitate a lighting update. +-- Inside a VM transaction, the transaction’s VM cache is used. -- -- This function can only be used to change the node’s name, not its parameters -- or metadata. -function mesecon.swap_node_force(pos, name, get_update_light) +-- +-- The swap will necessitate a light update unless update_light equals false. +function mesecon.swap_node_force(pos, name, update_light) if vm_cache then - return mesecon.vm_swap_node(pos, name, get_update_light) + return mesecon.vm_swap_node(pos, name, update_light) else -- This serves to both ensure the mapblock is loaded and also hand us -- the old node table so we can preserve param2.