ESO Lua File v100010

ingame/resourcewarner/resourcewarner.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
107
108
109
110
111
112
113
--Resource Warner
--------------------
local RESOURCE_WARNER_FLASH_TIME  = 300
local RESOURCE_WARNER_NUM_FLASHES = 3
ZO_ResourceWarner = ZO_Object:Subclass()
function ZO_ResourceWarner:New(...)
    local warner = ZO_Object.New(self)
    warner:Initialize(...)
    return warner
end
function ZO_ResourceWarner:Initialize(parent, powerType)
    self.warning = GetControl(parent, "Warner")
    self.warnAnimation = ZO_AlphaAnimation:New(self.warning)
    self.powerType = powerType
    self.statusBar = parent
    self.paused = false
    self.currentPower = 0
    self.warning:RegisterForEvent(EVENT_COMBAT_EVENT, function(eventCode, ...) self:OnCombatEvent(...) end)
    self.warning:RegisterForEvent(EVENT_POWER_UPDATE, function(_, unitTag, powerIndex, powerType, currentPower, maxPower) if unitTag == "player" then self:OnPowerUpdate(powerType, currentPower, maxPower) end end)
end
function ZO_ResourceWarner:SetPaused(paused)
    if self.paused ~= paused then
        self.paused = paused
        if paused and self.warnAnimation:IsPlaying() then
            self.warnAnimation:Stop()
        end
    end
end
function ZO_ResourceWarner:OnCombatEvent(result, isError, abilityName, abilityGraphic, abilityActionSlotType, sourceName, sourceType, targetName, targetType, hitValue, powerType, damageType, log)
    if not self.paused and result == ACTION_RESULT_INSUFFICIENT_RESOURCE and self.powerType == powerType then
        if(not self.warnAnimation:IsPlaying()) then
            self.warnAnimation:PingPong(0, 1, RESOURCE_WARNER_FLASH_TIME, RESOURCE_WARNER_NUM_FLASHES)
        else
            self.warnAnimation:SetPlaybackLoopsRemaining(RESOURCE_WARNER_NUM_FLASHES + 1)
        end
    end
end
function ZO_ResourceWarner:OnPowerUpdate(powerType, currentPower, maxPower)
    if not self.paused and self.powerType == powerType then
        if currentPower == 0 and self.currentPower > 0 and not self.warnAnimation:IsPlaying() then
            self.warnAnimation:PingPong(0, 1, RESOURCE_WARNER_FLASH_TIME, RESOURCE_WARNER_NUM_FLASHES)
        end
        self.currentPower = currentPower
    end
end
--Health Warner
---------------
local HEALTH_ALPHA_PULSE_THRESHOLD = 0.25
ZO_HealthWarner = ZO_Object:Subclass()
function ZO_HealthWarner:New(...)
    local warner = ZO_Object.New(self)
    warner:Initialize(...)
    return warner
end
function ZO_HealthWarner:Initialize(parent)
    self.warning = GetControl(parent, "Warner")
    self.warnAnimation = ZO_AlphaAnimation:New(self.warning)
    self.statusBar = parent
    self.paused = false
    self.warning:RegisterForEvent(EVENT_POWER_UPDATE, function(_, unitTag, powerIndex, powerType, health, maxHealth) if unitTag == "player" and powerType == POWERTYPE_HEALTH then self:OnHealthUpdate(health, maxHealth) end end)
end
function ZO_HealthWarner:SetPaused(paused)
    if self.paused ~= paused then
        self.paused = paused
        if paused then
            if self.warnAnimation:IsPlaying() then
                self.warnAnimation:Stop()
            end
        else
            local current, max = GetUnitPower("player", POWERTYPE_HEALTH)
            self.warning:SetAlpha(0)
            self:UpdateAlphaPulse(current / max)
        end
    end
end
function ZO_HealthWarner:UpdateAlphaPulse(healthPerc)
    if(healthPerc <= HEALTH_ALPHA_PULSE_THRESHOLD) then
        if(not self.warnAnimation:IsPlaying()) then
            self.warnAnimation:PingPong(0, 1, RESOURCE_WARNER_FLASH_TIME)
        end
    else
        if(self.warnAnimation:IsPlaying()) then
            self.warnAnimation:Stop()
            self.warning:SetAlpha(0)
        end
    end
end
function ZO_HealthWarner:OnHealthUpdate(health, maxHealth)
    if not self.paused then
        local healthPerc = health / maxHealth
        self:UpdateAlphaPulse(healthPerc)
    end
end