Back to Home

ESO Lua File v101041

ingame/companion/keyboard/companionoverview_keyboard.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
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
ZO_CompanionOverview_Keyboard = ZO_InitializingObject:Subclass()
function ZO_CompanionOverview_Keyboard:Initialize(control)
    self.control = control
    --Initialize the progress bar
    self.progressContainer = control:GetNamedChild("LevelProgress")
    self.levelBar = ZO_CompanionProgressBar_Keyboard:New(self.progressContainer)
    self.passivePerkLabel = control:GetNamedChild("PassivePerkValue")
    self.readOnlyActionBar = ZO_KeyboardAssignableActionBar:New(control:GetNamedChild("ReadOnlyActionBar"))
    self.readOnlyActionBar:SetHotbarEditsEnabled(false)
    local RAPPORT_GRADIENT_START = ZO_ColorDef:New("722323") --Red
    local RAPPORT_GRADIENT_END = ZO_ColorDef:New("009966") --Green
    local RAPPORT_GRADIENT_MIDDLE = ZO_ColorDef:New("9D840D") --Yellow
    --Grab the rapport controls
    local rapportContainer = control:GetNamedChild("RapportContainer")
    self.rapportBarControl = rapportContainer:GetNamedChild("ProgressBar")
    self.rapportStatusLabel = rapportContainer:GetNamedChild("StatusValue")
    self.rapportDescriptionLabel = rapportContainer:GetNamedChild("Description")
    --Initialize the rapport bar
    self.rapportBar = ZO_SlidingStatusBar:New(self.rapportBarControl)
    self.rapportBar:SetGradientColors(RAPPORT_GRADIENT_START, RAPPORT_GRADIENT_END, RAPPORT_GRADIENT_MIDDLE)
    --Initialize the dropdown control
    self.outfitContainer = control:GetNamedChild("Outfit")
    self.outfitDropdown = ZO_ComboBox_ObjectFromContainer(self.outfitContainer:GetNamedChild("Dropdown"))
    EVENT_MANAGER:RegisterForEvent("ZO_CompanionOverview_Keyboard", EVENT_COMPANION_RAPPORT_UPDATE, function(eventId, ...) self:RefreshCompanionRapport(...) end)
    -- fragment
    COMPANION_OVERVIEW_KEYBOARD_FRAGMENT = ZO_FadeSceneFragment:New(control)
    COMPANION_OVERVIEW_KEYBOARD_FRAGMENT:RegisterCallback("StateChange", function(oldState, newState)
        if newState == SCENE_FRAGMENT_SHOWING then
            if HasActiveCompanion() then
                if not self.initialized then
                    self.initialized = true
                    self:OnDeferredInitialize()
                end
                self.levelBar:OnShowing()
                self:RefreshCompanionRapport()
                self:RefreshPassivePerk()
                --Order matters
                ACTION_BAR_ASSIGNMENT_MANAGER:SetHotbarCycleOverride(HOTBAR_CATEGORY_COMPANION)
                self.readOnlyActionBar:RefreshAllButtons()
            end
        elseif newState == SCENE_HIDING then
            if self.pendingEquipOutfitIndex ~= ZO_OUTFIT_MANAGER:GetEquippedOutfitIndex(GAMEPLAY_ACTOR_CATEGORY_COMPANION) then
                if self.pendingEquipOutfitIndex then
                    ZO_OUTFIT_MANAGER:EquipOutfit(GAMEPLAY_ACTOR_CATEGORY_COMPANION, self.pendingEquipOutfitIndex)
                else
                    ZO_OUTFIT_MANAGER:UnequipOutfit(GAMEPLAY_ACTOR_CATEGORY_COMPANION)
                end
            end
            ITEM_PREVIEW_KEYBOARD:ClearPreviewCollection()
            ApplyChangesToPreviewCollectionShown()
        elseif newState == SCENE_FRAGMENT_HIDDEN then
            ACTION_BAR_ASSIGNMENT_MANAGER:SetHotbarCycleOverride(nil)
        end
    end)
end
function ZO_CompanionOverview_Keyboard:OnDeferredInitialize()
end
function ZO_CompanionOverview_Keyboard:InitializeOutfitDropdown()
    self.pendingEquipOutfitIndex = ZO_OUTFIT_MANAGER:GetEquippedOutfitIndex(GAMEPLAY_ACTOR_CATEGORY_COMPANION)
    self.outfitDropdown:SetSortsItems(false)
    local function OnEquippedOutfit()
        self.pendingEquipOutfitIndex = ZO_OUTFIT_MANAGER:GetEquippedOutfitIndex(GAMEPLAY_ACTOR_CATEGORY_COMPANION)
    end
    local function OnRefreshOutfits()
    end
    OnRefreshOutfits()
    ZO_OUTFIT_MANAGER:RegisterCallback("RefreshEquippedOutfitIndex", OnEquippedOutfit)
    ZO_OUTFIT_MANAGER:RegisterCallback("RefreshOutfits", OnRefreshOutfits)
    ZO_OUTFIT_MANAGER:RegisterCallback("RefreshOutfitName", OnRefreshOutfits)
end
function ZO_CompanionOverview_Keyboard:UpdateOutfitDropdownSelection()
    local IGNORE_CALLBACK = true
    local equippedOutfitIndex = ZO_OUTFIT_MANAGER:GetEquippedOutfitIndex(GAMEPLAY_ACTOR_CATEGORY_COMPANION)
    local itemEntries = self.outfitDropdown:GetItems()
    for i, entry in ipairs(itemEntries) do
        if equippedOutfitIndex == entry.outfitIndex then
            self.outfitDropdown:SelectItem(entry, IGNORE_CALLBACK)
            break
        end
    end
end
function ZO_CompanionOverview_Keyboard:UpdateOutfitDropdownOutfits()
    self.outfitDropdown:ClearItems()
    local function OnUnequipOutfitSelected()
        self.pendingEquipOutfitIndex = UNEQUIP_OUTFIT
        if HasActiveCompanion() and COMPANION_OVERVIEW_KEYBOARD_FRAGMENT:IsShowing() then
            ITEM_PREVIEW_KEYBOARD:PreviewUnequipOutfit(GAMEPLAY_ACTOR_CATEGORY_COMPANION)
        end
    end
    
    local function OnOutfitEntrySelected(_, _, entry)
        self.pendingEquipOutfitIndex = entry.outfitIndex
        if HasActiveCompanion() and COMPANION_OVERVIEW_KEYBOARD_FRAGMENT:IsShowing() then
            ITEM_PREVIEW_KEYBOARD:PreviewOutfit(GAMEPLAY_ACTOR_CATEGORY_COMPANION, entry.outfitIndex)
        end
    end
    local unequippedOutfitEntry = self.outfitDropdown:CreateItemEntry(GetString(SI_NO_OUTFIT_EQUIP_ENTRY), OnUnequipOutfitSelected)
    self.outfitDropdown:AddItem(unequippedOutfitEntry, ZO_COMBOBOX_SUPPRESS_UPDATE)
    local equippedOutfitIndex = ZO_OUTFIT_MANAGER:GetEquippedOutfitIndex(GAMEPLAY_ACTOR_CATEGORY_COMPANION)
    local defaultEntry = unequippedOutfitEntry
    local numOutfits = ZO_OUTFIT_MANAGER:GetNumOutfits(GAMEPLAY_ACTOR_CATEGORY_COMPANION)
    for outfitIndex = 1, numOutfits do
        local outfitManipulator = ZO_OUTFIT_MANAGER:GetOutfitManipulator(GAMEPLAY_ACTOR_CATEGORY_COMPANION, outfitIndex)
        local entry = self.outfitDropdown:CreateItemEntry(outfitManipulator:GetOutfitName(), OnOutfitEntrySelected)
        entry.outfitIndex = outfitIndex
        self.outfitDropdown:AddItem(entry, ZO_COMBOBOX_SUPPRESS_UPDATE)
        if equippedOutfitIndex == outfitIndex then
            defaultEntry = entry
        end
    end
    self.outfitDropdown:UpdateItems()
    self.outfitDropdown:SelectItem(defaultEntry)
end
function ZO_CompanionOverview_Keyboard:RefreshCompanionRapport()
    if HasActiveCompanion() and COMPANION_OVERVIEW_KEYBOARD_FRAGMENT:IsShowing() then
        --Grab the rapport value, level, and description for the active companion
        local rapportValue = GetActiveCompanionRapport()
        local rapportLevel = GetActiveCompanionRapportLevel()
        local rapportDescription = GetActiveCompanionRapportLevelDescription(rapportLevel)
        self.rapportBar:SetValue(rapportValue)
        self.rapportStatusLabel:SetText(GetString("SI_COMPANIONRAPPORTLEVEL", rapportLevel))
        self.rapportDescriptionLabel:SetText(rapportDescription)
    end
end
function ZO_CompanionOverview_Keyboard:RefreshPassivePerk()
    if HasActiveCompanion() and COMPANION_OVERVIEW_KEYBOARD_FRAGMENT:IsShowing() then
        local passiveAbilityId = ZO_COMPANION_MANAGER:GetActiveCompanionPassivePerkAbilityId()
        if self.passiveAbilityId ~= passiveAbilityId then
            self.passiveAbilityId = passiveAbilityId
            local formattedPassivePerkName = ZO_CachedStrFormat(SI_ABILITY_NAME, GetAbilityName(passiveAbilityId))
            self.passivePerkLabel:SetText(formattedPassivePerkName)
        end
    end
end
function ZO_CompanionOverview_Keyboard:PassivePerk_OnMouseEnter(control)
    if self.passiveAbilityId then
        InitializeTooltip(AbilityTooltip, control, RIGHT, -5, 0, LEFT)
        AbilityTooltip:SetAbilityId(self.passiveAbilityId)
    end
end
function ZO_CompanionOverview_Keyboard:PassivePerk_OnMouseExit(control)
    ClearTooltip(AbilityTooltip)
end
-----------------------------
-- Global XML Functions
-----------------------------
    COMPANION_OVERVIEW_KEYBOARD = ZO_CompanionOverview_Keyboard:New(control)
end
    COMPANION_OVERVIEW_KEYBOARD:PassivePerk_OnMouseEnter(self)
end
    COMPANION_OVERVIEW_KEYBOARD:PassivePerk_OnMouseExit(self)
end