Back to Home

ESO Lua File v100019

libraries/utility/zo_prioritizedvisibility.lua

[◄ back to folders ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
ZO_PrioritizedVisibility = ZO_Object:Subclass()
function ZO_PrioritizedVisibility:New(...)
    local prioritizedVisibility = ZO_Object.New(self)
    prioritizedVisibility:Initialize(...)
    return prioritizedVisibility
end
function ZO_PrioritizedVisibility:Initialize()
    self.prioritizedObjectsToShow = {}
    self.objectToPriority = {}
    self.supressed = false
    self.searchComparator = function(left, right)
        return self.objectToPriority[left] - self.objectToPriority[right]
    end
end
-- These can be controls or objects with a SetHidden method
function ZO_PrioritizedVisibility:Add(objectToControl, priority)
    self.objectToPriority[objectToControl] = priority
end
function ZO_PrioritizedVisibility:SetHidden(objectToControl, hidden)
    local found, index = zo_binarysearch(objectToControl, self.prioritizedObjectsToShow, self.searchComparator)
    if found then
        if hidden then
            table.remove(self.prioritizedObjectsToShow, index)
            
            if index == 1 then
                objectToControl:SetHidden(true)
                if #self.prioritizedObjectsToShow > 0 then
                    self.prioritizedObjectsToShow[1]:SetHidden(self.supressed)
                end
            end
        end
    else
        if not hidden then
            if index == 1 and #self.prioritizedObjectsToShow > 0 then
                self.prioritizedObjectsToShow[1]:SetHidden(true)
            end
            table.insert(self.prioritizedObjectsToShow, index, objectToControl)
            objectToControl:SetHidden(self.supressed or index ~= 1)
        end
    end
end
function ZO_PrioritizedVisibility:IsHidden(objectToControl)
    return self.prioritizedObjectsToShow[1] ~= objectToControl
end
function ZO_PrioritizedVisibility:SetSupressed(supressed)
    if self.supressed ~= supressed then
        self.supressed = supressed
        if #self.prioritizedObjectsToShow > 0 then
            self.prioritizedObjectsToShow[1]:SetHidden(supressed)
        end
    end
end
function ZO_PrioritizedVisibility:IsSuppressed()
    return self.supressed
end