Back to Home

ESO Lua File v101041

ingame/notificationicons/console/notificationicons_console.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
local NotificationIcons_Console = ZO_Object:Subclass()
function NotificationIcons_Console:New(...)
    local object = ZO_Object.New(self)
    object:Initialize(...)
    return object
end
function NotificationIcons_Console:Initialize(control)
    self.control = control
    self.numUnread = 0
    self.numNotifications = 0
    self.animToPlay = nil
    self.waitingToTrigger = false
    self.fadingOut = false
    self.notificationFrameTimeMS = 0
    self.fadeStartTimeMS = 0
    self.fadeTimeMS = 10000
    self.reshowTimeMS = 150000
    EVENT_MANAGER:RegisterForEvent("NotificationIcons_Console", EVENT_MAIL_NUM_UNREAD_CHANGED, function(_, numUnread) self:OnNumUnreadMailChanged(numUnread) end)
    control:SetHandler("OnUpdate", function() self:OnUpdate() end)
    --setup the animation for the control as a whole
    local function FadeStop() 
        if(self.fadingOut) then
            ALERT_MESSAGES_GAMEPAD:SetHoldDisplayingEntries(false)
            self.fadingOut = false
            self.notificationFrameTimeMS = GetFrameTimeMilliseconds()
        else
            if(self.animToPlay) then 
                self.animToPlay:PlayFromStart() 
            else
                self.fadeStartTimeMS = GetFrameTimeMilliseconds()
            end
        end
    end
    self.fadeTimeline = ANIMATION_MANAGER:CreateTimelineFromVirtual("ConsoleNotificationIconsFade", control)
    self.fadeTimeline:SetHandler("OnStop", FadeStop)
    --setup the animation on the mail and notification icons
    local function StartFadeTimer()
        self.animToPlay = nil
        self.fadeStartTimeMS = GetFrameTimeMilliseconds()
    end    
    self.mailIcon = control:GetNamedChild("Mail")
    self.mailPulseTimeline = ANIMATION_MANAGER:CreateTimelineFromVirtual("ConsoleNotificationPulse", self.mailIcon)
    self.mailPulseTimeline:SetHandler("OnStop", StartFadeTimer)
    --setup the animation on the notifications icon
    self.notificationsIcon = control:GetNamedChild("Notifications")
    self.notificationPulseTimeline = ANIMATION_MANAGER:CreateTimelineFromVirtual("ConsoleNotificationPulse", self.notificationsIcon)
    self.notificationPulseTimeline:SetHandler("OnStop", StartFadeTimer)
end
function NotificationIcons_Console:OnNumUnreadMailChanged(numUnread)
    if(numUnread > self.numUnread and IsPlayerActivated()) then
        self.animToPlay = self.mailPulseTimeline
        self.notificationFrameTimeMS = GetFrameTimeMilliseconds()
        self.waitingToTrigger = true
    end
    self.numUnread = numUnread
end
function NotificationIcons_Console:OnNumNotificationsChanged(numNotifications)
    if(numNotifications > self.numNotifications and IsPlayerActivated()) then
        self.animToPlay = self.notificationPulseTimeline
        self.notificationFrameTimeMS = GetFrameTimeMilliseconds()
        self.waitingToTrigger = true
    end
    self.numNotifications = numNotifications
end
function NotificationIcons_Console:OnUpdate()
    local time = GetFrameTimeMilliseconds()
    if(self.fadeStartTimeMS > 0) then
        -- trigger fade out at the end of fadeStartTimeMS or if a new alert text comes in
        if(ALERT_MESSAGES_GAMEPAD:HasActiveEntries() or
        (time > self.fadeStartTimeMS + self.fadeTimeMS)) then
            self.fadeStartTimeMS = 0
            self.fadeTimeline:PlayFromEnd()
            self.fadingOut = true
        end
    -- trigger fade in of the icons when the alert text queue empties
    elseif(self.waitingToTrigger) then
        if(self.notificationFrameTimeMS < time) and (not ALERT_MESSAGES_GAMEPAD:HasActiveEntries()) then
            self.fadeTimeline:PlayFromStart()
            self.waitingToTrigger = false
            self.notificationFrameTimeMS = time
            ALERT_MESSAGES_GAMEPAD:SetHoldDisplayingEntries(true)
        end
    -- retrigger the icons to show every reshowTimeMS if there are unread messages or notifications
    elseif((self.numUnread > 0 or self.numNotifications > 0) and (time > self.notificationFrameTimeMS + self.reshowTimeMS)) then
        self.notificationFrameTimeMS = time
        self.waitingToTrigger = true
    end
end
    NOTIFICATION_ICONS_CONSOLE = NotificationIcons_Console:New(control)
end