Back to Home

ESO Lua File v100028

ingame/activecombattips/activecombattips.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
ACTIVE_COMBAT_TIP_SYSTEM = nil
ZO_ActiveCombatTip = ZO_Object:Subclass()
local FADE_OUT_TIME = 750
local FADE_IN_TIME = 250
local MIN_TIME_BETWEEN_MESSAGES = 5000
function ZO_ActiveCombatTip:New(...)
    local acts = ZO_Object.New(self)
    acts:Initialize(...)
    return acts
end
function ZO_ActiveCombatTip:Initialize(control)
    self.control = control
    self.tip = control:GetNamedChild("Tip")
    self.tipText = self.tip:GetNamedChild("TipText")
    self.icon = self.tip:GetNamedChild("Icon")
    self.supressionTime = 0
    self.animation = ANIMATION_MANAGER:CreateTimelineFromVirtual("ActiveCombatTipAnimation", self.tip)
    self.animation:SetHandler("OnStop", function(timeline) 
        if timeline:GetProgress() == 1.0 and not timeline:IsPlayingBackward() then 
            SHARED_INFORMATION_AREA:SetHidden(self.tip, true)
            self.activeCombatTipId = nil
        end 
    end)
    control:RegisterForEvent(EVENT_DISPLAY_ACTIVE_COMBAT_TIP, function(eventCode, ...) self:OnDisplayActiveCombatTip(...) end)
    control:RegisterForEvent(EVENT_REMOVE_ACTIVE_COMBAT_TIP, function(eventCode, ...) self:OnRemoveActiveCombatTip(...) end)
    self:ApplyStyle() -- Setup initial visual style based on current mode.
    control:RegisterForEvent(EVENT_GAMEPAD_PREFERRED_MODE_CHANGED, function() self:OnGamepadPreferredModeChanged() end)
    SHARED_INFORMATION_AREA:AddActiveCombatTips(self.tip)
end
function ZO_ActiveCombatTip:ApplyStyle()
    ApplyTemplateToControl(self.control, ZO_GetPlatformTemplate("ZO_ActiveCombatTips"))
end
function ZO_ActiveCombatTip:OnGamepadPreferredModeChanged()
    self:ApplyStyle()
    self:RefreshTip()
end
function ZO_ActiveCombatTip:IsInSupression()
    return self.supressionTime > GetFrameTimeMilliseconds()
end
function ZO_ActiveCombatTip:RefreshTip()
    local activeCombatTipId = self.activeCombatTipId
    if not activeCombatTipId then
        return
    end
    local name, tipText, iconPath = GetActiveCombatTipInfo(activeCombatTipId)
    self.tipText:SetText(tipText)
    self.tipText:ClearAnchors()
    if iconPath ~= "" then
        self.icon:SetHidden(false)
        self.icon:SetTexture(iconPath)
        self.tipText:SetAnchor(LEFT, self.icon, RIGHT, 5, 0)
    else
        self.icon:SetHidden(true)
        self.tipText:SetAnchor(TOPLEFT, nil, TOPLEFT, 0, 0)
    end
end
function ZO_ActiveCombatTip:OnDisplayActiveCombatTip(activeCombatTipId)
    if not self.activeCombatTipId and not self:IsInSupression() then
        SHARED_INFORMATION_AREA:SetHidden(self.tip, false)
        self.animation:PlayFromEnd()
        self.activeCombatTipId = activeCombatTipId
        self:RefreshTip()
        self.tip.activeCombatTipId = activeCombatTipId
        PlaySound(SOUNDS.ACTIVE_COMBAT_TIP_SHOWN)
    end
end
local SoundsForReason = {
    [ACTIVE_COMBAT_TIP_RESULT_SUCCESS] = SOUNDS.ACTIVE_COMBAT_TIP_SUCCESS,
    [ACTIVE_COMBAT_TIP_RESULT_FAILURE] =  SOUNDS.ACTIVE_COMBAT_TIP_FAILS,
    [ACTIVE_COMBAT_TIP_RESULT_NO_ACTION] =  nil,
}
function ZO_ActiveCombatTip:OnRemoveActiveCombatTip(activeCombatTipId, reason)
    if self.activeCombatTipId == activeCombatTipId then
        self.animation:PlayFromStart()
        self.supressionTime = MIN_TIME_BETWEEN_MESSAGES + GetFrameTimeMilliseconds()
        
        if SoundsForReason[reason] then
            PlaySound(SoundsForReason[reason])
        end
    end
end
    ACTIVE_COMBAT_TIP_SYSTEM = ZO_ActiveCombatTip:New(control)
end