Back to Home

ESO Lua File v100034

ingame/instancekickwarning/instancekickwarning.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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
-- ZO_InstanceKickWarning Base Object
local ZO_InstanceKickWarning = ZO_Object:Subclass()
function ZO_InstanceKickWarning:New(control)
    local instanceKickWarning = ZO_Object.New(self)
    instanceKickWarning:Initialize(control)
    return instanceKickWarning
end
do
    local INSTANCE_KICK_KEYBOARD_STYLE =
    {
        font = "ZoFontWinH2",
        anchorOffsetY = ZO_COMMON_INFO_DEFAULT_KEYBOARD_BOTTOM_OFFSET_Y,
    }
    local INSTANCE_KICK_GAMEPAD_STYLE =
    {
        font = "ZoFontGamepad34",
        anchorOffsetY = ZO_COMMON_INFO_DEFAULT_GAMEPAD_BOTTOM_OFFSET_Y,
    }
    function ZO_InstanceKickWarning:ApplyPlatformStyle(style)
        self.kickLabel:SetFont(style.font)
        self.container:ClearAnchors()
        self.container:SetAnchor(BOTTOM, nil, BOTTOM, 0, style.anchorOffsetY)
        ApplyTemplateToControl(self.keybindButton, ZO_GetPlatformTemplate("ZO_KeybindButton"))
    end
    function ZO_InstanceKickWarning:Initialize(control)
        self.control = control
        local function OnPlayerActivated()
            local timeRemaining, totalTime = GetInstanceKickTime()
            self:OnInstanceKickTimeUpdate(timeRemaining, totalTime)
        end
        local function OnInstanceKickTimeUpdate(event, timeRemaining, totalTime)
            if not timeRemaining then
                timeRemaining, totalTime = GetInstanceKickTime()
            elseif not totalTime then
                totalTime = timeRemaining
            end
            self:OnInstanceKickTimeUpdate(timeRemaining, totalTime)
        end
        local function OnGroupInviteUpdate()
            self:UpdateVisibility()
        end
        self.control:RegisterForEvent(EVENT_PLAYER_ACTIVATED, OnPlayerActivated)
        self.control:RegisterForEvent(EVENT_INSTANCE_KICK_TIME_UPDATE, OnInstanceKickTimeUpdate)
        self.control:RegisterForEvent(EVENT_GROUP_INVITE_RECEIVED, OnGroupInviteUpdate)
        self.control:RegisterForEvent(EVENT_GROUP_INVITE_REMOVED, OnGroupInviteUpdate)
        self.container = self.control:GetNamedChild("Container")
        self.keybindButton = self.container:GetNamedChild("KeybindButton")
        self.keybindButton:SetKeybind("INSTANCE_KICK_LEAVE_INSTANCE")
        self.keybindButton:SetText(GetString(SI_INSTANCE_KICK_LEAVE_NOW_KEYBIND))
        self.timerCooldown = self.container:GetNamedChild("Timer")
        self.timerCooldown:SetNumWarningSounds(5)
        self.kickLabel = self.container:GetNamedChild("Text")
        ZO_PlatformStyle:New(function(...) self:ApplyPlatformStyle(...) end, INSTANCE_KICK_KEYBOARD_STYLE, INSTANCE_KICK_GAMEPAD_STYLE)
        if IsPlayerActivated() then
            OnInstanceKickTimeUpdate()
        end
    end
end
function ZO_InstanceKickWarning:OnInstanceKickTimeUpdate(timeRemaining, totalTime)
    if timeRemaining and totalTime and timeRemaining > 0 and totalTime > 0 then
        self.timerCooldown:Start(timeRemaining)
        self.kickPending = true
        self:UpdateVisibility()
        
        -- give an alert text to explain why being removed from the instance
        if(IsUnitGrouped("player")) then
            ZO_Alert(UI_ALERT_CATEGORY_ALERT, SOUNDS.GENERAL_ALERT_ERROR, GetString(SI_INSTANCE_KICK_WARNING_GROUPED))
        else
            ZO_Alert(UI_ALERT_CATEGORY_ALERT, SOUNDS.GENERAL_ALERT_ERROR, GetString(SI_INSTANCE_KICK_WARNING_UNGROUPED))
        end
    else
        self.timerCooldown:Stop()
        self.kickPending = false
        self:UpdateVisibility()
    end
end
-- There are two instance kick controls, and the order they update their visibility may be arbitrary
-- Starting value is set to 1 due to Dead using Hidden Reasons, and therefore being set to shown by default to force a RefreshVisibility
local g_showingCount = 1
function ZO_InstanceKickWarning:SetHidden(hidden)
    if hidden ~= self.control:IsHidden() then
        self.control:SetHidden(hidden)
        if hidden then
            g_showingCount = g_showingCount - 1
            if g_showingCount == 0 then
                RemoveActionLayerByName(GetString(SI_KEYBINDINGS_LAYER_INSTANCE_KICK_WARNING))
            end
        else
            if g_showingCount == 0 then
                PushActionLayerByName(GetString(SI_KEYBINDINGS_LAYER_INSTANCE_KICK_WARNING))
            end
            g_showingCount = g_showingCount + 1
        end
    end
end
-- ZO_InstanceKickWarning_Alive...Used when the player is alive (in shared info area)
local ZO_InstanceKickWarning_Alive = ZO_InstanceKickWarning:Subclass()
function ZO_InstanceKickWarning_Alive:Initialize(control)
    ZO_InstanceKickWarning.Initialize(self, control)
    SHARED_INFORMATION_AREA:AddInstanceKick(self)
end
function ZO_InstanceKickWarning_Alive:UpdateVisibility()
    local groupInviterName = GetGroupInviteInfo()
    local hasInvitePending = groupInviterName ~= ""
    local hideKickWarning = hasInvitePending or not self.kickPending
    SHARED_INFORMATION_AREA:SetHidden(self, hideKickWarning)
end
-- ZO_InstanceKickWarning_Dead...Used when the player is dead
local ZO_InstanceKickWarning_Dead = ZO_InstanceKickWarning:Subclass()
function ZO_InstanceKickWarning_Dead:Initialize(control)
    self.hiddenReasons = ZO_HiddenReasons:New()
    ZO_InstanceKickWarning.Initialize(self, control)
end
function ZO_InstanceKickWarning_Dead:UpdateVisibility()
    self:SetHiddenForReason("kickPending", not self.kickPending)
end
function ZO_InstanceKickWarning_Dead:RefreshVisible()
    self:SetHidden(self.hiddenReasons:IsHidden())
end
function ZO_InstanceKickWarning_Dead:SetHiddenForReason(reason, hidden)
    if self.hiddenReasons:SetHiddenForReason(reason, hidden) then
        self:RefreshVisible()
    end
end
-- Global functions
    INSTANCE_KICK_WARNING_ALIVE = ZO_InstanceKickWarning_Alive:New(control)
end
    INSTANCE_KICK_WARNING_DEAD = ZO_InstanceKickWarning_Dead:New(control)
end