Back to Home

ESO Lua File v100029

common/rzchroma/rzchroma_manager.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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
ZO_RzChroma_Manager = ZO_CallbackObject:Subclass()
function ZO_RzChroma_Manager:New(...)
    local singleton = ZO_CallbackObject.New(self)
    singleton:Initialize(...)
    return singleton
end
function ZO_RzChroma_Manager:Initialize()
    self.deviceClearFunctions =
    {
        [CHROMA_DEVICE_TYPE_HEADSET] = ChromaClearHeadsetEffect,
    }
    self.activeEffects = {}
    self.dirtyDevices = {}
    self:MarkAllDirty()
end
function ZO_RzChroma_Manager:RegisterForEvents()
    local function OnUpdate(timeMs)
        self:OnUpdate(timeMs)
    end
    EVENT_MANAGER:RegisterForUpdate("RzChromaManager", 15, OnUpdate)
end
function ZO_RzChroma_Manager:OnUpdate(timeMs)
    self:FireCallbacks("OnUpdate", timeMs, self)
    for deviceType, _ in pairs(self.dirtyDevices) do
        self.dirtyDevices[deviceType] = nil
        self:ResetEffectState(deviceType)
        self:ProcessActiveEffects(deviceType)
        self:ApplyEffectState(deviceType)
    end
end
function ZO_RzChroma_Manager:ResetEffectState(deviceType)
    ChromaResetCustomEffectObject(deviceType)
    if self.deviceClearFunctions[deviceType] then
        self.deviceClearFunctions[deviceType]()
    end
end
function ZO_RzChroma_Manager:ProcessActiveEffects(deviceType)
    local activeDeviceEffects = self.activeEffects[deviceType]
    if activeDeviceEffects then
        for i, activeEffect in ipairs(activeDeviceEffects) do
            if activeEffect:IsCustom() then
                ZO_CHROMA_RENDERER:RenderEffect(activeEffect)
            else
                activeEffect:FireCreateFunction()
            end
        end
    end
end
function ZO_RzChroma_Manager:ApplyEffectState(deviceType)
    ChromaFinalizeCustomEffect(deviceType)
end
local function EffectSort(effect1, effect2)
    return effect1:GetDrawLevel() < effect2:GetDrawLevel()
end
function ZO_RzChroma_Manager:AddEffect(effect)
    local deviceType = effect:GetDeviceType()
    local activeDeviceEffects = self.activeEffects[deviceType]
    if not activeDeviceEffects then
        activeDeviceEffects = {}
        self.activeEffects[deviceType] = activeDeviceEffects
    end
    table.insert(activeDeviceEffects, effect)
    table.sort(activeDeviceEffects, EffectSort)
    effect:HandleAddEffect(self)
    self:MarkDirty(deviceType)
end
function ZO_RzChroma_Manager:RemoveEffect(effect)
    local deviceType = effect:GetDeviceType()
    local activeDeviceEffects = self.activeEffects[deviceType]
    if activeDeviceEffects then
        for i, activeEffect in ipairs(activeDeviceEffects) do
            if activeEffect == effect then
                table.remove(activeDeviceEffects, i)
                effect:HandleRemoveEffect(self)
                self:MarkDirty(deviceType)
                break
            end
        end
    end
end
function ZO_RzChroma_Manager:MarkAllDirty()
    for deviceType = CHROMA_DEVICE_TYPE_ITERATION_BEGIN, CHROMA_DEVICE_TYPE_ITERATION_END do
        self:MarkDirty(deviceType)
    end
end
function ZO_RzChroma_Manager:MarkDirty(deviceType)
    self.dirtyDevices[deviceType] = true
end