ESO Lua File v100015

ingame/lfg/preferredroles.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
165
166
167
168
169
local USER_REQUESTED = true
local SYSTEM_REQUESTED = false
--------------------------------------
--Preferred Roles Manager
--------------------------------------
local PreferredRolesManager = ZO_Object:Subclass()
function PreferredRolesManager:New(...)
    local manager = ZO_Object.New(self)
    manager:Initialize(...)
    return manager
end
function PreferredRolesManager:Initialize(control)
    self.control = control
    local function OnActivityFinderStatusUpdate(status)
        self:DisableRoleButtons(status == ACTIVITY_FINDER_STATUS_QUEUED)
    end
    
    ZO_ACTIVITY_FINDER_ROOT_MANAGER:RegisterCallback("OnActivityFinderStatusUpdate", OnActivityFinderStatusUpdate)
end
function PreferredRolesManager:InitializeRoles()
    local isDPS, isHeal, isTank = GetPlayerRoles()
    self.roles = {
        [LFG_ROLE_DPS] = {
            button = self.control:GetNamedChild("ButtonsDPS"),
            isSelected = isDPS,
            tooltip = GetString(SI_GROUP_PREFERRED_ROLE_DPS_TOOLTIP),
        },
        [LFG_ROLE_HEAL] = {
            button = self.control:GetNamedChild("ButtonsHeal"),
            isSelected = isHeal,
            tooltip = GetString(SI_GROUP_PREFERRED_ROLE_HEAL_TOOLTIP),
        },
        [LFG_ROLE_TANK] = {
            button = self.control:GetNamedChild("ButtonsTank"),
            isSelected = isTank,
            tooltip = GetString(SI_GROUP_PREFERRED_ROLE_TANK_TOOLTIP),
        },
    }
    for roleType, roleData in pairs(self.roles) do
        if roleData.isSelected then
            ZO_CheckButton_SetChecked(roleData.button)
        end
    end
end
function PreferredRolesManager:RefreshRoles()
    local isDPS, isHeal, isTank = GetPlayerRoles()
    self:SetRoleToggled(LFG_ROLE_TANK, isTank, SYSTEM_REQUESTED)
    self:SetRoleToggled(LFG_ROLE_HEAL, isHeal, SYSTEM_REQUESTED)
    self:SetRoleToggled(LFG_ROLE_DPS, isDPS, SYSTEM_REQUESTED)
end
function PreferredRolesManager:SetRoleToggled(role, selected, userRequested)
    self.roles[role].isSelected = selected
    if userRequested then
        PlaySound(selected and SOUNDS.GROUP_ROLE_SELECTED or SOUNDS.GROUP_ROLE_DESELECTED)
        UpdatePlayerRole(role, selected)
        ZO_ACTIVITY_FINDER_ROOT_MANAGER:UpdateLocationData()
    else
        ZO_CheckButton_SetCheckState(self.roles[role].button, selected)
    end
end
function PreferredRolesManager:DisableRoleButtons(isDisabled)
    for roleType, roleData in pairs(self.roles) do
        --Force buttons only half selected (mouse down only) to be unselected before disabling
        if not roleData.isSelected then
            ZO_CheckButton_SetUnchecked(roleData.button, false)
        end
        ZO_CheckButton_SetEnableState(roleData.button, not isDisabled)
        --Force mouse to be enabled on disabled buttons so tooltips still work
        roleData.button:SetMouseEnabled(true)
    end
end
function PreferredRolesManager:GetSelectedRoleCount()
    local count = 0
    for roleType, roleData in pairs(self.roles) do
        if roleData.isSelected then
            count = count + 1
        end
    end
    return count
end
function PreferredRolesManager:GetRoles()
    local roles = self.roles
    return {
        [LFG_ROLE_DPS] = roles[LFG_ROLE_DPS].isSelected,
        [LFG_ROLE_HEAL] = roles[LFG_ROLE_HEAL].isSelected,
        [LFG_ROLE_TANK] = roles[LFG_ROLE_TANK].isSelected,
    }
end
function PreferredRolesManager:IsRoleSelected()
    local roles = self.roles
    return roles[LFG_ROLE_DPS].isSelected or roles[LFG_ROLE_HEAL].isSelected or roles[LFG_ROLE_TANK].isSelected
end
---- XML Callbacks ----
    InitializeTooltip(InformationTooltip, control, BOTTOM, 0, 0)
    local r, g, b = ZO_TOOLTIP_DEFAULT_COLOR:UnpackRGB()
    InformationTooltip:AddLine(GetString("SI_LFGROLE", control.role), "", r, g, b)
    InformationTooltip:AddLine(PREFERRED_ROLES.roles[control.role].tooltip, "", r, g, b)
    InformationTooltip:AddLine(GetString(SI_GROUP_PREFERRED_ROLE_DESCRIPTION), "", r, g, b)
    local lowestAverage = ZO_ACTIVITY_FINDER_ROOT_MANAGER:GetAverageRoleTime(control.role)
    if lowestAverage > 0 then
        local textLowestAverageTime = ZO_GetSimplifiedTimeEstimateText(lowestAverage * 1000)
        InformationTooltip:AddLine(zo_strformat(SI_ACTIVITY_FINDER_DUNGEON_AVERAGE_ROLE_TIME_FORMAT, textLowestAverageTime), "", r, g, b) 
    end
    local currentState = control:GetState()
    if currentState == BSTATE_DISABLED or currentState == BSTATE_DISABLED_PRESSED then
        InformationTooltip:AddLine(zo_strformat(SI_GROUP_LIST_PANEL_DISABLED_ROLE_TOOLTIP, tooltipText), "", ZO_ColorDef:New("ff0000"):UnpackRGB())
    end
end
    ClearTooltip(InformationTooltip)
end
function ZO_PreferredRolesButton_OnClicked(buttonControl, mouseButton)
    local buttonState = buttonControl:GetState()
    local role = buttonControl.role
    local toggleCheckOn = buttonState == BSTATE_NORMAL
    if toggleCheckOn or PREFERRED_ROLES:GetSelectedRoleCount() > 1 then --enforce having at least one role selected
        ZO_CheckButton_SetCheckState(buttonControl, toggleCheckOn)
        PREFERRED_ROLES:SetRoleToggled(role, toggleCheckOn, USER_REQUESTED)
    end
end
do
    local ROLE_NAME_LOOKUP =
    {
        [LFG_ROLE_TANK] = "tank",
        [LFG_ROLE_HEAL] = "healer",
        [LFG_ROLE_DPS] = "dps",
    }
        local roleName = ROLE_NAME_LOOKUP[role]
        control:SetNormalTexture(string.format("EsoUI/Art/LFG/LFG_%s_up_64.dds", roleName))
        control:SetPressedTexture(string.format("EsoUI/Art/LFG/LFG_%s_down_64.dds", roleName))
        control:SetMouseOverTexture(string.format("EsoUI/Art/LFG/LFG_%s_over_64.dds", roleName))
        control:SetPressedMouseOverTexture(string.format("EsoUI/Art/LFG/LFG_%s_down_over_64.dds", roleName))
        control:SetDisabledTexture(string.format("EsoUI/Art/LFG/LFG_%s_disabled_64.dds", roleName))
        control:SetDisabledPressedTexture(string.format("EsoUI/Art/LFG/LFG_%s_down_disabled_64.dds", roleName))
        control.role = role
    end
end
    PREFERRED_ROLES = PreferredRolesManager:New(self)
end