Nenue@80
|
1 -- Veneer
|
Nenue@80
|
2 -- OrderHall.lua
|
Nenue@80
|
3 -- Created: 10/7/2016 10:55 PM
|
Nenue@80
|
4 -- %file-revision%
|
Nenue@80
|
5 --
|
Nenue@80
|
6
|
Nenue@80
|
7 VeneerWorldStateCurrencyMixin = {}
|
Nenue@81
|
8 VeneerWorldStateProgressMixin = {}
|
Nenue@81
|
9 VeneerWorldStateMixin = {
|
Nenue@81
|
10 detectedFrames = {}
|
Nenue@81
|
11 }
|
Nenue@80
|
12 local print = DEVIAN_WORKSPACE and function(...) print('VnWorldState', ...) end or nop
|
Nenue@80
|
13
|
Nenue@80
|
14 function VeneerWorldStateMixin:Setup()
|
Nenue@80
|
15 self:Refresh()
|
Nenue@80
|
16 --DEFAULT_CHAT_FRAME:AddMessage('Loaded')
|
Nenue@81
|
17 print('All:Setup()')
|
Nenue@81
|
18
|
Nenue@81
|
19 self.modules = self.modules or {self:GetChildren()}
|
Nenue@81
|
20 for i, frame in ipairs(self.modules) do
|
Nenue@81
|
21 if frame.Setup then
|
Nenue@81
|
22 frame:Setup()
|
Nenue@81
|
23 end
|
Nenue@81
|
24 end
|
Nenue@80
|
25 end
|
Nenue@80
|
26
|
Nenue@80
|
27 function VeneerWorldStateMixin:Refresh()
|
Nenue@81
|
28 if OrderHallCommandBar then
|
Nenue@81
|
29 if not self.detectedFrames[OrderHallCommandBar] then
|
Nenue@81
|
30 self.detectedFrames[OrderHallCommandBar] = true
|
Nenue@81
|
31 hooksecurefunc(OrderHallCommandBar,'Show', function()
|
Nenue@81
|
32 self:Refresh()
|
Nenue@81
|
33 end)
|
Nenue@81
|
34 end
|
Nenue@81
|
35
|
Nenue@81
|
36
|
Nenue@81
|
37 OrderHallCommandBar:ClearAllPoints()
|
Nenue@81
|
38 OrderHallCommandBar:SetPoint('TOP')
|
Nenue@81
|
39 OrderHallCommandBar:SetWidth(600)
|
Nenue@81
|
40 OrderHallCommandBar.Background:SetColorTexture(0,0,0,0.5)
|
Nenue@81
|
41 OrderHallCommandBar.WorldMapButton:Hide()
|
Nenue@81
|
42 OrderHallCommandBar:EnableMouse(false)
|
Nenue@81
|
43 end
|
Nenue@81
|
44
|
Nenue@80
|
45 end
|
Nenue@80
|
46 local initialized
|
Nenue@80
|
47 function VeneerWorldStateMixin:OnEvent(event, arg)
|
Nenue@80
|
48 print(event, arg)
|
Nenue@81
|
49
|
Nenue@81
|
50 if event == 'PLAYER_LOGIN' and not initialized then
|
Nenue@81
|
51 if IsLoggedIn() then
|
Nenue@81
|
52 initialized = true
|
Nenue@80
|
53 self:Setup()
|
Nenue@81
|
54 self:UnregisterEvent('PLAYER_LOGIN')
|
Nenue@81
|
55 end
|
Nenue@80
|
56 end
|
Nenue@80
|
57
|
Nenue@80
|
58 if event == 'PLAYER_ENTERING_WORLD' then
|
Nenue@80
|
59 self:Update()
|
Nenue@81
|
60 elseif event == 'PLAYER_REGEN_ENABLED' then
|
Nenue@81
|
61 self:Show()
|
Nenue@81
|
62 elseif event == 'PLAYER_REGEN_DISABLED' then
|
Nenue@81
|
63 self:Hide()
|
Nenue@80
|
64 end
|
Nenue@80
|
65 end
|
Nenue@80
|
66
|
Nenue@80
|
67 function VeneerWorldStateMixin:Update()
|
Nenue@81
|
68 self.modules = self.modules or {self:GetChildren()}
|
Nenue@80
|
69 print('|cFFFFFF00All:Update()|r')
|
Nenue@81
|
70 self.maxHeight = 0
|
Nenue@81
|
71 for i, frame in ipairs(self.modules) do
|
Nenue@80
|
72 if frame.Update then
|
Nenue@80
|
73 print(frame:GetName())
|
Nenue@80
|
74 frame:Update()
|
Nenue@81
|
75 if frame:IsVisible() then
|
Nenue@81
|
76 self.maxHeight = max(self.maxHeight, frame.maxHeight)
|
Nenue@81
|
77 end
|
Nenue@80
|
78 end
|
Nenue@80
|
79 end
|
Nenue@81
|
80 self:SetHeight(self.maxHeight)
|
Nenue@80
|
81 end
|
Nenue@80
|
82
|
Nenue@80
|
83
|
Nenue@80
|
84
|
Nenue@80
|
85 function VeneerWorldStateMixin:OnLoad ()
|
Nenue@81
|
86 self:RegisterEvent('PLAYER_LOGIN')
|
Nenue@80
|
87 self:RegisterEvent('ADDON_LOADED')
|
Nenue@80
|
88 self:RegisterEvent('ARTIFACT_UPDATE')
|
Nenue@80
|
89 self:RegisterEvent('ARTIFACT_XP_UPDATE')
|
Nenue@80
|
90 self:RegisterEvent('PLAYER_ENTERING_WORLD')
|
Nenue@81
|
91 self:RegisterEvent('PLAYER_REGEN_ENABLED')
|
Nenue@81
|
92 self:RegisterEvent('PLAYER_REGEN_DISABLED')
|
Nenue@80
|
93 end
|
Nenue@80
|
94
|
Nenue@80
|
95 function VeneerWorldStateCurrencyMixin:OnLoad ()
|
Nenue@80
|
96
|
Nenue@80
|
97 self:RegisterEvent('ZONE_CHANGED')
|
Nenue@80
|
98 self:RegisterEvent('CURRENCY_DISPLAY_UPDATE')
|
Nenue@80
|
99 self:RegisterEvent('CHAT_MSG_CURRENCY')
|
Nenue@80
|
100
|
Nenue@80
|
101 end
|
Nenue@80
|
102
|
Nenue@80
|
103 function VeneerWorldStateCurrencyMixin:OnEvent (event, arg)
|
Nenue@80
|
104 self:Update()
|
Nenue@80
|
105 end
|
Nenue@80
|
106
|
Nenue@80
|
107
|
Nenue@80
|
108 function VeneerWorldStateCurrencyMixin:Update()
|
Nenue@81
|
109
|
Nenue@80
|
110 print('currency refresh: zone =', mapID)
|
Nenue@81
|
111 if GetZoneText() == 'Suramar' then
|
Nenue@80
|
112 local name, earned, texture, earnedThisWeek, weeklyMax, totalMax = GetCurrencyInfo(1155)
|
Nenue@80
|
113
|
Nenue@80
|
114 self.Icon:SetTexture(texture)
|
Nenue@80
|
115 self.Label:SetFormattedText("%d / %d", earned, totalMax)
|
Nenue@80
|
116 self:Show()
|
Nenue@80
|
117 self:SetWidth(self.Icon:GetWidth() + self.Label:GetStringWidth() + 6)
|
Nenue@80
|
118 else
|
Nenue@80
|
119 self:Hide()
|
Nenue@80
|
120 end
|
Nenue@81
|
121
|
Nenue@81
|
122 self.maxHeight = self:GetHeight()
|
Nenue@81
|
123 end
|
Nenue@81
|
124
|
Nenue@81
|
125 function VeneerWorldStateProgressMixin:OnLoad()
|
Nenue@81
|
126 self:RegisterEvent('PLAYER_XP_UPDATE')
|
Nenue@81
|
127 self:RegisterEvent('PLAYER_LEVEL_UP')
|
Nenue@81
|
128 self:RegisterEvent('PLAYER_UPDATE_RESTING')
|
Nenue@81
|
129 self:RegisterEvent('ENABLE_XP_GAIN')
|
Nenue@81
|
130 self:RegisterEvent('DISABLE_XP_GAIN')
|
Nenue@81
|
131 self:RegisterEvent('PLAYER_LOGIN')
|
Nenue@81
|
132 self:RegisterEvent('ARTIFACT_UPDATE')
|
Nenue@81
|
133 self:RegisterEvent('ARTIFACT_XP_UPDATE')
|
Nenue@81
|
134
|
Nenue@81
|
135 end
|
Nenue@81
|
136
|
Nenue@81
|
137 function VeneerWorldStateProgressMixin:Setup()
|
Nenue@81
|
138 self:UpdateXPGain()
|
Nenue@81
|
139 if UnitLevel('player') < GetMaxPlayerLevel() then
|
Nenue@81
|
140 self.mode = 'xp'
|
Nenue@81
|
141 else
|
Nenue@81
|
142 self.mode = 'artifact'
|
Nenue@81
|
143 end
|
Nenue@81
|
144 print('setup mode:', self.mode)
|
Nenue@81
|
145 self:Update()
|
Nenue@81
|
146 end
|
Nenue@81
|
147
|
Nenue@81
|
148 function VeneerWorldStateProgressMixin:OnEvent(event)
|
Nenue@81
|
149 if event == 'ENABLE_XP_GAIN' or event == 'DISABLE_XP_GAIN' then
|
Nenue@81
|
150 self:UpdateXPGain()
|
Nenue@81
|
151 elseif event == 'ARTIFACT_XP_UPDATE' or event == 'ARTIFACT_UPDATE' then
|
Nenue@81
|
152 self.mode = 'artifact'
|
Nenue@81
|
153 elseif event == 'PLAYER_XP_UPDATE' or 'PLAYER_LEVEL_UP' then
|
Nenue@81
|
154 self.mode = 'xp'
|
Nenue@81
|
155 end
|
Nenue@81
|
156
|
Nenue@81
|
157
|
Nenue@81
|
158 self:Update()
|
Nenue@81
|
159
|
Nenue@81
|
160 end
|
Nenue@81
|
161 function VeneerWorldStateProgressMixin:UpdateXPGain()
|
Nenue@81
|
162 if IsXPUserDisabled() then
|
Nenue@81
|
163 self.ProgressBar:SetColorTexture(0.75,0.75,0.75)
|
Nenue@81
|
164 self.mode = nil
|
Nenue@81
|
165 else
|
Nenue@81
|
166 self.ProgressBar:SetColorTexture(1,1,1)
|
Nenue@81
|
167 end
|
Nenue@81
|
168 end
|
Nenue@81
|
169
|
Nenue@81
|
170 local GetEquippedArtifactInfo = _G.C_ArtifactUI.GetEquippedArtifactInfo
|
Nenue@81
|
171 local GetCostForPointAtRank = _G.C_ArtifactUI.GetCostForPointAtRank
|
Nenue@81
|
172 function VeneerWorldStateProgressMixin:Update()
|
Nenue@81
|
173
|
Nenue@81
|
174 if not self.mode then
|
Nenue@81
|
175 if UnitLevel('player') < GetMaxPlayerLevel() then
|
Nenue@81
|
176 self.mode = 'xp'
|
Nenue@81
|
177 else
|
Nenue@81
|
178 self.mode = 'artifact'
|
Nenue@81
|
179 end
|
Nenue@81
|
180 end
|
Nenue@81
|
181
|
Nenue@81
|
182
|
Nenue@81
|
183 self.progressPercent = 0
|
Nenue@81
|
184 self.progressAmount = 0
|
Nenue@81
|
185 self.progressMax = 1
|
Nenue@81
|
186 self.progressOverflow = 0
|
Nenue@81
|
187 if self.mode == 'xp' then
|
Nenue@81
|
188 local xp = UnitXP('player')
|
Nenue@81
|
189 local xpMax = UnitXPMax('player')
|
Nenue@81
|
190 local bonusXP = GetXPExhaustion()
|
Nenue@81
|
191 if xp then
|
Nenue@81
|
192 self.progressPercent = xp / xpMax
|
Nenue@81
|
193 end
|
Nenue@81
|
194 elseif self.mode == 'artifact' then
|
Nenue@81
|
195
|
Nenue@81
|
196 local itemID, altItemID, name, icon, totalXP, pointsSpent = GetEquippedArtifactInfo()
|
Nenue@81
|
197 if not itemID then
|
Nenue@81
|
198 self:Hide()
|
Nenue@81
|
199 return
|
Nenue@81
|
200 end
|
Nenue@81
|
201
|
Nenue@81
|
202 local pointsAvailable = 0
|
Nenue@81
|
203
|
Nenue@81
|
204 local nextRankCost = GetCostForPointAtRank(pointsSpent) or 0
|
Nenue@81
|
205
|
Nenue@81
|
206 self.progressAmount = totalXP
|
Nenue@81
|
207 self.progressMax = nextRankCost
|
Nenue@81
|
208 if totalXP > nextRankCost then
|
Nenue@81
|
209 self.progressPercent = 1
|
Nenue@81
|
210 self.progressOverflow = totalXP - nextRankCost
|
Nenue@81
|
211 else
|
Nenue@81
|
212 self.progressPercent = totalXP / nextRankCost
|
Nenue@81
|
213 end
|
Nenue@81
|
214
|
Nenue@81
|
215 self.progressText = name .. ' ('..pointsSpent .. '): '.. totalXP .. ' / ' .. nextRankCost
|
Nenue@81
|
216 else
|
Nenue@81
|
217 self:Hide()
|
Nenue@81
|
218 return
|
Nenue@81
|
219 end
|
Nenue@81
|
220
|
Nenue@81
|
221 print(self.progressPercent, floor(self.ProgressBG:GetWidth()* self.progressPercent))
|
Nenue@81
|
222
|
Nenue@81
|
223 if self.progressPercent > 0 then
|
Nenue@81
|
224 self.ProgressBar:Show()
|
Nenue@81
|
225 self.ProgressBar:SetPoint('TOPRIGHT', self.ProgressBG, 'TOPLEFT', self.ProgressBG:GetWidth()* self.progressPercent , 0)
|
Nenue@81
|
226
|
Nenue@81
|
227 self.Label:SetText(self.progressText)
|
Nenue@81
|
228 else
|
Nenue@81
|
229 self.ProgressBar:Hide()
|
Nenue@81
|
230 end
|
Nenue@81
|
231
|
Nenue@81
|
232
|
Nenue@81
|
233
|
Nenue@81
|
234 self.maxHeight = self:GetHeight()
|
Nenue@80
|
235 end |