MapVar("g_Colorization", {}, weak_keys_meta) function AddColorization(obj, color_mod, reason) local curr_colorization = g_Colorization[obj] if not curr_colorization then curr_colorization = { original = obj:GetColorModifier(), modifiers = {} } g_Colorization[obj] = curr_colorization end curr_colorization.modifiers[reason] = color_mod local active_mod for _, mod in sorted_pairs(curr_colorization.modifiers) do active_mod = mod end if active_mod then obj:SetColorModifier(active_mod) end end function RemoveColorization(obj, reason) local curr_colorization = g_Colorization[obj] if not curr_colorization or not curr_colorization.modifiers then return end curr_colorization.modifiers[reason] = nil local active_mod for _, mod in sorted_pairs(curr_colorization.modifiers) do active_mod = mod end if active_mod then obj:SetColorModifier(active_mod) else obj:SetColorModifier(curr_colorization.original) g_Colorization[obj] = nil end end