View difference between Paste ID: q2hSk7ME and dxXFH8mv
SHOW: | | - or go back to the newest paste.
1
local Azurah = _G['Azurah'] -- grab addon table from global
2
local L = Azurah:GetLocale()
3
4
-- UPVALUES --
5
local strformat            = string.format
6
7
local uiFrames = {
8
   ['ZO_PlayerAttributeHealth']           = {1, L.Health},
9
   ['ZO_PlayerAttributeSiegeHealth']      = {2, L.HealthSiege},
10
   ['ZO_PlayerAttributeMagicka']          = {1, L.Magicka},
11
   ['ZO_PlayerAttributeWerewolf']         = {2, L.Werewolf},
12
   ['ZO_PlayerAttributeStamina']          = {1, L.Stamina},
13
   ['ZO_PlayerAttributeMountStamina']     = {2, L.StaminaMount},
14
   ['ZO_PlayerProgressBar']               = {1, L.Experience},
15
   ['ZO_SynergyTopLevelContainer']        = {1, L.Synergy},
16
   ['ZO_CompassFrame']                    = {1, L.Compass},
17
   ['ZO_TargetUnitFramereticleover']      = {1, L.ReticleOver},
18
   ['ZO_ActionBar1']                      = {1, L.ActionBar},
19
   ['ZO_SmallGroupAnchorFrame']           = {1, L.Group},
20
   ['ZO_LargeGroupAnchorFrame1']          = {1, L.Raid1},
21
   ['ZO_LargeGroupAnchorFrame2']          = {1, L.Raid2},
22
   ['ZO_LargeGroupAnchorFrame3']          = {1, L.Raid3},
23
   ['ZO_LargeGroupAnchorFrame4']          = {1, L.Raid4},
24
   ['ZO_LargeGroupAnchorFrame5']          = {1, L.Raid5},
25
   ['ZO_LargeGroupAnchorFrame6']          = {1, L.Raid6},
26
   ['ZO_FocusedQuestTrackerPanel']        = {1, L.FocusedQuest},
27
   ['ZO_PlayerToPlayerAreaPromptContainer'] = {1, L.PlayerPrompt},
28
   ['ZO_AlertTextNotification']           = {1, L.AlertText},
29
}
30
local defaultUIData = {}
31
local uiPanel
32
33
-- --------------------------------------------
34
-- DEFAULT ------------------------------------
35
-- --------------------------------------------
36
37
function Azurah:RecordDefaultData()
38
   for frame in pairs(uiFrames) do -- record default position data
39
      local _, point, rel, relPoint, x, y = _G[frame]:GetAnchor()
40
41
      defaultUIData[frame] = {
42
         ['point']      = point,
43
         ['rel']        = rel,
44
         ['relPoint']   = relPoint,
45
         ['x']       = x,
46
         ['y']       = y,
47
         ['scale']      = _G[frame]:GetScale()
48
      }
49
   end
50
end
51
52
function Azurah:RestoreDefaultData() -- reset all frames to default positions
53
   local data, obj
54
55
   for frame in pairs(uiFrames) do
56
      obj, data = _G[frame], defaultUIData[frame]
57
58
      if (self.db.uiData[frame]) then
59
         self.db.uiData[frame] = nil -- cleanse user data
60
      end
61
62
      obj:ClearAnchors()
63
      obj:SetAnchor(data.point, data.rel, data.relPoint, data.x, data.y)
64
      obj:SetScale(data.scale)
65
66
      self.movers[obj]:Sync() -- reset attachments to new frame positions
67
   end
68
69
   AZ_MOVED_COMPASS  = false  -- GLOBALS FOR WYKKYD
70
   AZ_MOVED_TARGET      = false  -- GLOBALS FOR WYKKYD
71
end
72
73
-- --------------------------------------------
74
-- USER ---------------------------------------
75
-- --------------------------------------------
76
77
function Azurah:RecordUserData(frame, point, x, y, scale)
78
   if (not self.db.uiData[frame]) then
79
      self.db.uiData[frame] = {}
80
   end
81
82
   self.db.uiData[frame].point      = point
83
   self.db.uiData[frame].x       = x
84
   self.db.uiData[frame].y       = y
85
   self.db.uiData[frame].scale      = scale
86
87
   -- special cases
88
   if (frame == 'ZO_CompassframeName') then
89
      AZ_MOVED_COMPASS = true -- GLOBALS FOR WYKKYD
90
   end
91
92
   if (frame == 'ZO_TargetUnitFramereticleover') then
93
      AZ_MOVED_TARGET = true  -- GLOBALS FOR WYKKYD
94
   end
95
96
   if (frame == 'ZO_PlayerAttributeHealth') then -- scale attached bar
97
      ZO_PlayerAttributeSiegeHealth:SetScale(scale)
98
   end
99
100
   if (frame == 'ZO_PlayerAttributeMagicka') then -- scale attached bar
101
      ZO_PlayerAttributeWerewolf:SetScale(scale)
102
   end
103
104
   if (frame == 'ZO_PlayerAttributeStamina') then -- scale attached bar
105
      ZO_PlayerAttributeMountStamina:SetScale(scale)
106
   end
107
end
108
109
function Azurah:RestoreUserData()
110
   local obj
111
112
   for frame, data in pairs(self.db.uiData) do
113
      if frame == "ZO_ExperienceBar" then
114
         self.db.uiData["ZO_PlayerProgressBar"] = data
115-
      end 
115+
         self.db.uiData["ZO_ExperienceBar"] = nil
116
         frame = "ZO_PlayerProgressBar"
117
      end
118
       
119
      obj = _G[frame]
120
121
      -- special casse
122
      if (frame == 'ZO_CompassFrame') then
123
         AZ_MOVED_COMPASS = true -- GLOBALS FOR WYKKYD
124
      end
125
126
      if (frame == 'ZO_TargetUnitFramereticleover') then
127
         AZ_MOVED_TARGET = true  -- GLOBALS FOR WYKKYD
128
      end
129
130
      if (frame == 'ZO_AlertTextNotification') then  -- set an actual size for positioning
131
         ZO_AlertTextNotification:SetDimensions(600, 56)
132
      end
133
134
      if (frame == 'ZO_PlayerToPlayerAreaPromptContainer') then -- special case, has no height
135
         ZO_PlayerToPlayerAreaPromptContainer:SetHeight(100)
136
      end
137
138
      if (frame == 'ZO_FocusedQuestTrackerPanel') then
139
         ZO_FocusedQuestTrackerPanel:SetHeight(200)
140
      end
141
142
      if (frame == 'ZO_PlayerAttributeHealth') then -- scale attached bar
143
         ZO_PlayerAttributeSiegeHealth:SetScale(data.scale)
144
      end
145
146
      if (frame == 'ZO_PlayerAttributeMagicka') then -- scale attached bar
147
         ZO_PlayerAttributeWerewolf:SetScale(data.scale)
148
      end
149
150
      if (frame == 'ZO_PlayerAttributeStamina') then -- scale attached bar
151
         ZO_PlayerAttributeMountStamina:SetScale(data.scale)
152
      end
153
154
      obj:ClearAnchors()
155
      obj:SetAnchor(data.point, GuiRoot, data.point, data.x, data.y)
156
      obj:SetScale(data.scale)
157
   end
158
end
159
160
-- --------------------------------------------
161
-- UNLOCK PANEL -------------------------------
162
-- --------------------------------------------
163
164
local function CreateButton(text, anchor, yOffset)
165
   local btn = WINDOW_MANAGER:CreateControlFromVirtual(nil, uiPanel, 'ZO_DefaultButton')
166
   btn:SetAnchor(TOP, anchor, BOTTOM, 0, yOffset)
167
   btn:SetWidth(180)
168
   btn:SetHeight(24)
169
   btn:SetFont('ZoFontAnnounceSmall')
170
   btn:SetText(text)
171
   return btn
172
end
173
174
local function BuildUnlockPanel()
175
   -- base frame setup
176
   uiPanel = WINDOW_MANAGER:CreateControl(nil, GuiRoot, CT_TOPLEVELCONTROL)
177
   uiPanel:SetDimensions(180, 130)
178
   uiPanel:SetAnchor(CENTER)
179
   uiPanel:SetMouseEnabled(true)
180
   uiPanel:SetMovable(true)
181
   uiPanel:SetClampedToScreen(true)
182
   -- background
183
   uiPanel.bg = WINDOW_MANAGER:CreateControl(nil, uiPanel, CT_BACKDROP)
184
   uiPanel.bg:SetAnchorFill(uiPanel)
185
   uiPanel.bg:SetCenterColor(0, 0, 0, 0.5)
186
   uiPanel.bg:SetEdgeColor(0,0,0,1)
187
   uiPanel.bg:SetEdgeTexture('', 8, 8, 1, 0)
188
   uiPanel.bg:SetInsets(3,3,-3,-3)
189
   -- header
190
   uiPanel.header = WINDOW_MANAGER:CreateControl(nil, uiPanel, CT_LABEL)
191
   uiPanel.header:SetAnchor(TOP, uiPanel, TOP, 0, 4)
192
   uiPanel.header:SetFont('ZoFontWinH4')
193
   uiPanel.header:SetText(L.Azurah .. ' - ' .. L.UnlockHeader)
194
   -- snap button
195
   uiPanel.snap = CreateButton(L.UnlockGridDisable, uiPanel.header, 2)
196
   uiPanel.snap:SetHandler('OnClicked', function()
197
      Azurah.snapToGrid = not Azurah.snapToGrid
198
      uiPanel.snap:SetText(Azurah.snapToGrid and L.UnlockGridDisable or L.UnlockGridEnable)
199
   end)
200
   -- lock button
201
   uiPanel.lock = CreateButton(L.UnlockLockFrames, uiPanel.snap, 6)
202
   uiPanel.lock:SetHandler('OnClicked', function()
203
      Azurah:LockUI()
204
   end)
205
   -- reset to defaults button
206
   uiPanel.reset = CreateButton(L.UnlockReset, uiPanel.lock, 16)
207
   uiPanel.reset:SetHandler('OnClicked', function()
208
      uiPanel.confirm:SetHidden(false)
209
      uiPanel.reset:SetHidden(true)
210
   end)
211
   -- reset to defaults confirm button
212
   uiPanel.confirm = CreateButton(L.UnlockResetConfirm, uiPanel.lock, 16)
213
   uiPanel.confirm:SetHandler('OnClicked', function()
214
      Azurah:RestoreDefaultData()
215
      uiPanel.reset:SetHidden(false)
216
      uiPanel.confirm:SetHidden(true)
217
   end)
218
   uiPanel.confirm:SetHidden(true)
219
   -- handlers
220
   uiPanel:SetHandler('OnShow', function()
221
      uiPanel.confirm:SetHidden(true)
222
      uiPanel.reset:SetHidden(false)
223
224
      for _, mover in pairs(Azurah.movers) do
225
         mover:Show()
226
      end
227
   end)
228
   uiPanel:SetHandler('OnHide', function()
229
      for _, mover in pairs(Azurah.movers) do
230
         mover:Hide()
231
      end
232
   end)
233
   uiPanel:SetHandler('OnMouseUp', function()
234
      uiPanel:StopMovingOrResizing()
235
   end)
236
237
   Azurah.uiPanel = uiPanel
238
end
239
240
function Azurah:LockUI()
241
   self.uiUnlocked = false
242
243
   if (uiPanel) then
244
      uiPanel:SetHidden(true)
245
   end
246
end
247
248
function Azurah:UnlockUI()
249
   if (not uiPanel) then -- first time using the overlays, register!
250
      BuildUnlockPanel() -- build ui panel to
251
252
      local mover
253
254
      for frame, data in pairs(uiFrames) do
255
         if (frame == 'ZO_AlertTextNotification') then -- special case, has no dimensions
256
            ZO_AlertTextNotification:SetDimensions(600, 56)
257
         end
258
259
         if (frame == 'ZO_PlayerToPlayerAreaPromptContainer') then -- special case, has no height
260
            ZO_PlayerToPlayerAreaPromptContainer:SetHeight(100)
261
         end
262
263
         if (frame == 'ZO_FocusedQuestTrackerPanel') then
264
            ZO_FocusedQuestTrackerPanel:SetHeight(200)
265
         end
266
267
         mover = self.Mover:New(_G[frame], data[2])
268
269
         if (data[1] == 2) then -- anchored frame, show but disallow drag
270
            mover:SetMouseEnabled(false)
271
            mover.overlay:SetCenterColor(0.6, 0.6, 0.6, 0.32)
272
            mover.overlay:SetEdgeColor(0.6, 0.6, 0.6, 1)
273
            mover.label:SetColor(0.6, 0.6, 0.6, 1)
274
         end
275
      end
276
   end
277
278
   uiPanel:SetHidden(false)
279
280
   self.uiUnlocked = true
281
end
282
283
-- --------------------------------------------
284
-- COMPASS PINS -------------------------------
285
-- --------------------------------------------
286
287
local compassPinScaleRef
288
289
local function OnPinAreaChanged()
290
   for k, v in pairs(COMPASS.areaAnimationPool:GetActiveObjects()) do
291
      v.areaTexture:SetScale(1 / compassPinScaleRef)
292
   end
293
end
294
295
function Azurah:ConfigureCompass()
296
   ZO_Compass:SetScale(self.db.compassPinScale)
297
   compassPinScaleRef = self.db.compassPinScale
298
299
   if (self.db.compassPinScale == 1) then -- default size
300
      EVENT_MANAGER:UnregisterForEvent(self.name, EVENT_PLAYER_IN_PIN_AREA_CHANGED) -- unregister check event
301
      EVENT_MANAGER:UnregisterForEvent(self.name, EVENT_QUEST_POSITION_REQUEST_COMPLETE) -- unregister check event
302
   else -- non-default size
303
      EVENT_MANAGER:RegisterForEvent(self.name, EVENT_PLAYER_IN_PIN_AREA_CHANGED,      OnPinAreaChanged)
304
      EVENT_MANAGER:RegisterForEvent(self.name, EVENT_QUEST_POSITION_REQUEST_COMPLETE, OnPinAreaChanged)
305
   end
306
307
   OnPinAreaChanged()
308
309
   if (self.db.compassHidePinLabel) then
310
      ZO_CompassCenterOverPinLabel:SetHidden(true)
311
      ZO_CompassCenterOverPinLabel:SetAlpha(0)
312
   else
313
      ZO_CompassCenterOverPinLabel:SetHidden(false)
314
      ZO_CompassCenterOverPinLabel:SetAlpha(1)
315
   end
316
end
317
318
function Azurah:InitializeUnlock()
319
   self:RecordDefaultData()
320
   self:RestoreUserData()
321
322
   ZO_PreHookHandler(ZO_ActionBar1, 'OnShow', function()
323
      if (self.db.uiData['ZO_ActionBar1']) then -- user has moved the action bar
324
         if (ZO_Skills:IsHidden()) then -- restore to user location on skill window close
325
            local data = self.db.uiData['ZO_ActionBar1']
326
            ZO_ActionBar1:ClearAnchors()
327
            ZO_ActionBar1:SetAnchor(data.point, GuiRoot, data.point, data.x, data.y)
328
            ZO_ActionBar1:SetScale(data.scale)
329
         else -- skill window is open, restore default scale (window is moved by stock code)
330
            ZO_ActionBar1:SetScale(1)
331
         end
332
      end
333
   end)
334
335
   ZO_PreHookHandler(ZO_Skills, 'OnShow', function()
336
      if (self.db.uiData['ZO_ActionBar1']) then -- user moved the action bar, make sure to move it to its proper place when skill window is open
337
         ZO_ActionBar1:SetScale(1)
338
         ZO_ActionBar1:ClearAnchors()
339
         ZO_ActionBar1:SetAnchor(BOTTOM, ZO_Skills, BOTTOM, -40, 40)
340
      end
341
   end)
342
343
   self:ConfigureCompass()
344
end