| 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 |