Nenue@6
|
1 --- ${PACKAGE_NAME}
|
Nenue@6
|
2 -- @file-author@
|
Nenue@6
|
3 -- @project-revision@ @project-hash@
|
Nenue@6
|
4 -- @file-revision@ @file-hash@
|
Nenue@6
|
5 -- Created: 1/17/2016 6:51 PM
|
Nenue@6
|
6
|
Nenue@6
|
7 local ADDON, Turok = ...
|
Nenue@6
|
8 local T, _G, pairs, pairs = Turok.Addon, _G, pairs, ipairs
|
Nenue@6
|
9 local mod = T:NewModule("PetBattle")
|
Nenue@9
|
10 local print = function(...)
|
Nenue@9
|
11 if not DEBUG then return end
|
Nenue@9
|
12 if _G.Devian and _G.DevianDB.workspace ~= 1 then
|
Nenue@9
|
13 _G.print('Petz', ...)
|
Nenue@9
|
14 end
|
Nenue@9
|
15 end
|
Nenue@6
|
16 local trace = function(self, e, ...)
|
Nenue@6
|
17 print(e, ...)
|
Nenue@6
|
18 end
|
Nenue@6
|
19
|
Nenue@6
|
20 local PBS
|
Nenue@6
|
21 local turn_font = [[Interface\Addons\Turok\Media\font\ArchivoNarrow-Bold.ttf]]
|
Nenue@6
|
22 local turn_size = 24
|
Nenue@6
|
23 local turn_outline = 'OUTLINE'
|
Nenue@6
|
24 local icon_size = 64
|
Nenue@6
|
25 local spacing = 5
|
Nenue@6
|
26 local padding = 0
|
Nenue@6
|
27 local strongweak_size = 20
|
Nenue@6
|
28
|
Nenue@6
|
29 local cpb = C_PetBattles
|
Nenue@6
|
30 T.defaults.petbattle = {
|
Nenue@6
|
31 swatch = {
|
Nenue@6
|
32 anchor = 'BOTTOM', anchorTo = 'BOTTOM',
|
Nenue@6
|
33 parent = 'UIParent',
|
Nenue@6
|
34 x = 0, y =240,
|
Nenue@6
|
35 width = 200, height = 100,
|
Nenue@6
|
36 font = [[Interface\Addons\Turok\Media\font\ArchivoNarrow-Bold.ttf]],
|
Nenue@6
|
37 size = 16,
|
Nenue@6
|
38 },
|
Nenue@6
|
39 spell = {
|
Nenue@6
|
40 anchor = 'TOPLEFT', anchorTo = 'TOPLEFT',
|
Nenue@6
|
41 size = 24,
|
Nenue@6
|
42 width = 72, height = 72,
|
Nenue@6
|
43 x = 0, y =0,
|
Nenue@6
|
44 padding = 0,
|
Nenue@6
|
45 spacing = 0,
|
Nenue@6
|
46 },
|
Nenue@6
|
47 sideSwatch = {
|
Nenue@6
|
48 width = 100, height = 50, padding = 0, spacing = 5,
|
Nenue@6
|
49 anchor = 'TOPLEFT', anchorTo = 'BOTTOMLEFT', x = 0, y = 0,
|
Nenue@6
|
50 parent = 'TkPetSwatch',
|
Nenue@6
|
51 },
|
Nenue@6
|
52 sideSpell = {
|
Nenue@6
|
53 anchor = 'TOPLEFT', anchorTo = 'TOPLEFT',
|
Nenue@6
|
54 size = 16,
|
Nenue@6
|
55 width = 36, height = 36,
|
Nenue@6
|
56 padding = 0,
|
Nenue@6
|
57 spacing = 0,
|
Nenue@6
|
58 },
|
Nenue@6
|
59 icon = {
|
Nenue@6
|
60 size = 72,
|
Nenue@6
|
61 width = 64,
|
Nenue@6
|
62 height = 64,
|
Nenue@6
|
63 }
|
Nenue@6
|
64 }
|
Nenue@6
|
65 mod.abilityButtons = {}
|
Nenue@6
|
66 mod.switcherButtons = {}
|
Nenue@6
|
67 mod.icons = {}
|
Nenue@6
|
68 mod.strongweak = {}
|
Nenue@6
|
69 mod.turns = {}
|
Nenue@6
|
70 mod.petlist = {}
|
Nenue@6
|
71 local PLAYER, ENEMY = 1, 2
|
Nenue@6
|
72 local function PBS_UpdateEnemySwatch(self)
|
Nenue@6
|
73
|
Nenue@6
|
74 print('UpdateSwatch')
|
Nenue@6
|
75 local db = TurokData.petbattle.swatch
|
Nenue@6
|
76 local playerActivePet = cpb.GetActivePet(PLAYER)
|
Nenue@6
|
77 local enemyActivePet = cpb.GetActivePet(ENEMY)
|
Nenue@6
|
78 local enemyNumPets = cpb.GetNumPets(ENEMY)
|
Nenue@6
|
79 local playerPetType = cpb.GetPetType(PLAYER, playerActivePet)
|
Nenue@6
|
80 local enemyPetType = cpb.GetPetType(ENEMY, enemyActivePet)
|
Nenue@6
|
81 local enemyPetName = cpb.GetName(ENEMY, playerActivePet)
|
Nenue@6
|
82 for petSlot=1, 3 do
|
Nenue@6
|
83 local swatchFrame = (petSlot == enemyActivePet) and self or ((petSlot < enemyNumPets) and self.sideSwatch or self.sideSwatch2)
|
Nenue@6
|
84 local db = (swatchFrame == self) and db.spell or db.sideSpell
|
Nenue@6
|
85 local type = cpb.GetPetType(ENEMY, petSlot)
|
Nenue@6
|
86 print(cText(' PetType='), enemyActivePet)
|
Nenue@6
|
87 print(cText(' current='), enemyPetType)
|
Nenue@6
|
88 for spellSlot=1, 3 do
|
Nenue@6
|
89 print(' ', cText('PetSlotOffset='), cNum(petSlot), cText('AbilitySlotOffset'), cNum(spellSlot))
|
Nenue@6
|
90 local id, name, texture, cooldown, desc, numTurns, attackType, noStrongWeakHints = cpb.GetAbilityInfo(ENEMY, petSlot, spellSlot)
|
Nenue@6
|
91 local usable, remaining = cpb.GetAbilityState(ENEMY, petSlot, spellSlot)
|
Nenue@6
|
92
|
Nenue@6
|
93 --print('info', cpb.GetAbilityInfo(ENEMY, petSlot, spellSlot))
|
Nenue@6
|
94 -- print('effect', cpb.GetAbilityEffectInfo(id, turnIdx, effectIdx, paramName)
|
Nenue@6
|
95 --print('state', cpb.GetAbilityState(ENEMY,petSlot,spellSlot))
|
Nenue@6
|
96 --print('statemod', cpb.GetAbilityStateModification(ENEMY,petSlot,spellSlot))
|
Nenue@6
|
97 --print('proc', cpb.GetAbilityProcTurnIndex(ENEMY,petSlot,spellSlot))
|
Nenue@6
|
98 --print('statemod', cpb.GetAbilityState(ENEMY,petSlot,spellSlot))
|
Nenue@6
|
99 local AbilityButton, icon, strong, turns -- Icon, Strength/Weakness, Turns cooldown
|
Nenue@6
|
100 if not swatchFrame.buttons[spellSlot] then
|
Nenue@6
|
101 swatchFrame.buttons[spellSlot] = CreateFrame('Frame', 'TkPetSpell'..spellSlot, swatchFrame, 'TkPetSpellTemplate')
|
Nenue@6
|
102 AbilityButton = swatchFrame.buttons[spellSlot]
|
Nenue@6
|
103
|
Nenue@6
|
104 AbilityButton:SetSize(db.width, db.height)
|
Nenue@6
|
105 AbilityButton:SetPoint(db.anchor, swatchFrame, db.anchor, (spellSlot-1)*(db.width+ db.spacing), 0)
|
Nenue@6
|
106
|
Nenue@6
|
107 AbilityButton.icon:SetSize(db.width, db.height)
|
Nenue@6
|
108 AbilityButton.icon:SetTexCoord(0.1, 0.9, 0.1, 0.9)
|
Nenue@6
|
109
|
Nenue@6
|
110 AbilityButton.strongWeakHint:SetSize(strongweak_size, strongweak_size)
|
Nenue@6
|
111 AbilityButton.strongWeakHint:SetPoint('CENTER', swatchFrame.buttons[spellSlot], 'CENTER', 0, 0)
|
Nenue@6
|
112
|
Nenue@6
|
113 AbilityButton.turnsLeft:SetFont(turn_font, turn_size, turn_outline)
|
Nenue@6
|
114 AbilityButton.turnsLeft:SetPoint('CENTER', icon, 'CENTER')
|
Nenue@6
|
115 else
|
Nenue@6
|
116 AbilityButton = swatchFrame.buttons[spellSlot]
|
Nenue@6
|
117 end
|
Nenue@6
|
118 local icon, strong , turns = AbilityButton.icon, AbilityButton.strongWeakHint, AbilityButton.turnsLeft
|
Nenue@6
|
119
|
Nenue@6
|
120 print('Working on:', swatchFrame, AbilityButton)
|
Nenue@6
|
121 print('AbilityState('..petSlot..', '..spellSlot..')', 'usable=', usable, 'turnsLeft=', remaining)
|
Nenue@6
|
122 print(cWord(name), cKey(attackType))
|
Nenue@6
|
123
|
Nenue@6
|
124 if petSlot > enemyNumPets then
|
Nenue@6
|
125 -- this will also eval true when pet battle over since numPets will be 0
|
Nenue@6
|
126 AbilityButton.popOut:Play()
|
Nenue@6
|
127 else
|
Nenue@6
|
128 local abilityChanged
|
Nenue@6
|
129 if id ~= AbilityButton.spellID then
|
Nenue@6
|
130 abilityChanged = true
|
Nenue@6
|
131 AbilityButton.spellID = id
|
Nenue@6
|
132 AbilityButton.spellName = name
|
Nenue@6
|
133 AbilityButton.spellDesc = desc
|
Nenue@6
|
134 AbilityButton.spellType = attackType
|
Nenue@6
|
135 AbilityButton.spellMaxCooldown = cooldown
|
Nenue@6
|
136 AbilityButton.spellDesc = desc
|
Nenue@6
|
137 AbilityButton.spellCooldown = remaining
|
Nenue@6
|
138 AbilityButton.spellNumTurns = numTurns
|
Nenue@6
|
139 end
|
Nenue@6
|
140 if AbilityButton.petType ~= enemyPetType then
|
Nenue@6
|
141 AbilityButton.petType = enemyPetType
|
Nenue@6
|
142 AbilityButton.noStrongWeakHints = noStrongWeakHints
|
Nenue@6
|
143 end
|
Nenue@6
|
144
|
Nenue@6
|
145 if not usable then
|
Nenue@6
|
146 icon:SetDesaturated(true)
|
Nenue@6
|
147 icon:SetVertexColor(0.5, 0.5, 0.5, 1)
|
Nenue@6
|
148 else
|
Nenue@6
|
149 icon:SetDesaturated(false)
|
Nenue@6
|
150 icon:SetVertexColor(1, 1, 1, 1)
|
Nenue@6
|
151 end
|
Nenue@6
|
152
|
Nenue@6
|
153 icon:SetTexture(texture)
|
Nenue@6
|
154 turns:SetText((cooldown > 0) and cooldown or nil)
|
Nenue@6
|
155 --AbilityButton.damage:SetText()
|
Nenue@6
|
156
|
Nenue@6
|
157 print('noStrongWeakHints', noStrongWeakHints)
|
Nenue@6
|
158 print('abilityModification', cpb.GetAttackModifier(enemyPetType, playerPetType))
|
Nenue@6
|
159 local modifier = cpb.GetAttackModifier(enemyPetType, playerPetType)
|
Nenue@6
|
160 if not noStrongWeakHints then
|
Nenue@6
|
161 if modifier < 1 then
|
Nenue@6
|
162 strong:SetTexture(0,1,0,0.5)
|
Nenue@6
|
163 else
|
Nenue@6
|
164 strong:SetTexture(1,0,0,0.5)
|
Nenue@6
|
165 end
|
Nenue@6
|
166
|
Nenue@6
|
167 strong:Show()
|
Nenue@6
|
168 else
|
Nenue@6
|
169 strong:Hide()
|
Nenue@6
|
170 end
|
Nenue@6
|
171 if numTurns then
|
Nenue@6
|
172 print('numTurns=',numTurns)
|
Nenue@6
|
173 end
|
Nenue@6
|
174 if not AbilityButton:IsVisible() or abilityChanged then
|
Nenue@6
|
175 AbilityButton:Show()
|
Nenue@6
|
176 AbilityButton.popIn:Play()
|
Nenue@6
|
177 end
|
Nenue@6
|
178
|
Nenue@6
|
179 end
|
Nenue@6
|
180
|
Nenue@6
|
181
|
Nenue@6
|
182 end
|
Nenue@6
|
183 swatchFrame:SetSize(db.width*3+db.spacing*2+db.padding*2, db.height+padding*2)
|
Nenue@6
|
184 swatchFrame.petName = enemyPetName
|
Nenue@6
|
185 swatchFrame.petType = enemyPetType
|
Nenue@6
|
186 local db = (swatchFrame == self) and db.swatch or db.sideSwatch
|
Nenue@6
|
187 swatchFrame:Show()
|
Nenue@6
|
188 end
|
Nenue@6
|
189 end
|
Nenue@6
|
190
|
Nenue@6
|
191 local function PBS_Switch ()
|
Nenue@6
|
192 print('Switch button was clicked.')
|
Nenue@6
|
193 end
|
Nenue@6
|
194 mod.PLAYER_ENTERING_WORLD = function(self, e)
|
Nenue@6
|
195 print(cpb.IsInBattle())
|
Nenue@6
|
196 if cpb.IsInBattle() then
|
Nenue@6
|
197 PBS_UpdateEnemySwatch(PBS, e, 2)
|
Nenue@6
|
198 end
|
Nenue@6
|
199
|
Nenue@6
|
200
|
Nenue@6
|
201 if _G.PetBattleFrame.BottomFrame.SwitchPetButton then
|
Nenue@6
|
202 print("There's a pet battle frame button ")
|
Nenue@6
|
203 --_G.PetBattleFrame.BottomFrame.SwitchPetButton:SetScript('OnClick', PBS_Switch)
|
Nenue@6
|
204 end
|
Nenue@6
|
205 end
|
Nenue@6
|
206
|
Nenue@6
|
207 local PBS_Hide = function()
|
Nenue@6
|
208 for i = 1, 3 do
|
Nenue@6
|
209 if PBS.buttons[i] then
|
Nenue@6
|
210 PBS.buttons[i].popOut:Play()
|
Nenue@6
|
211 end
|
Nenue@6
|
212 if PBS.sideSwatch.buttons[i] then
|
Nenue@6
|
213 PBS.sideSwatch.buttons[i].popOut:Play()
|
Nenue@6
|
214 end
|
Nenue@6
|
215 if PBS.sideSwatch2.buttons[i] then
|
Nenue@6
|
216 PBS.sideSwatch2.buttons[i].popOut:Play()
|
Nenue@6
|
217 end
|
Nenue@6
|
218 end
|
Nenue@6
|
219 end
|
Nenue@6
|
220
|
Nenue@6
|
221 local PBS_Event = function(self, e, ...)
|
Nenue@6
|
222 print('event', e)
|
Nenue@6
|
223 local owner = ...
|
Nenue@6
|
224 if e == 'PET_BATTLE_PET_ROUND_PLAYBACK_COMPLETE' or e == 'PET_BATTLE_OPENING_DONE' then
|
Nenue@6
|
225 PBS_UpdateEnemySwatch(PBS)
|
Nenue@6
|
226 elseif e == 'PET_BATTLE_CLOSE' then
|
Nenue@6
|
227 PBS_Hide(PBS)
|
Nenue@6
|
228 end
|
Nenue@6
|
229 end
|
Nenue@6
|
230 function mod:OnEnable()
|
Nenue@6
|
231 PBS = CreateFrame('Frame', 'TkPetSwatch', UIParent, 'TkPetSwatchTemplate')
|
Nenue@6
|
232 PBS.buttons = {}
|
Nenue@6
|
233 PBS.sideSwatch = CreateFrame('Frame', 'TkSideSwatch', PBS, 'TkPetSwatchTemplate')
|
Nenue@6
|
234 PBS.sideSwatch.buttons = {}
|
Nenue@6
|
235 PBS.sideSwatch2 = CreateFrame('Frame', 'TkSideSwatch', PBS, 'TkPetSwatchTemplate')
|
Nenue@6
|
236 PBS.sideSwatch2.buttons = {}
|
Nenue@6
|
237 local db = TurokData.petbattle
|
Nenue@6
|
238 T.SetFrameLayout(PBS, db.swatch)
|
Nenue@6
|
239 T.SetFrameLayout(PBS.sideSwatch, db.sideSwatch)
|
Nenue@6
|
240 T.SetFrameLayout(PBS.sideSwatch2, db.sideSwatch)
|
Nenue@6
|
241 PBS.sideSwatch2:ClearAllPoints()
|
Nenue@6
|
242 PBS.sideSwatch2:SetPoint('LEFT', PBS.sideSwatch, 'RIGHT', db.sideSpell.spacing, 0)
|
Nenue@6
|
243
|
Nenue@6
|
244 mod.effectIndex = {
|
Nenue@6
|
245 cpb.GetAllEffectNames()
|
Nenue@6
|
246 }
|
Nenue@6
|
247
|
Nenue@6
|
248 PBS:SetScript('OnEvent', PBS_Event)
|
Nenue@6
|
249 PBS:RegisterEvent('PET_BATTLE_OPENING_DONE')
|
Nenue@6
|
250 PBS:RegisterEvent('PET_BATTLE_PET_CHANGED')
|
Nenue@6
|
251 PBS:RegisterEvent('PET_BATTLE_OVER')
|
Nenue@6
|
252 PBS:RegisterEvent('PET_BATTLE_CLOSE')
|
Nenue@6
|
253 PBS:RegisterEvent('PET_BATTLE_ABILITY_CHANGED')
|
Nenue@6
|
254 PBS:RegisterEvent('PET_BATTLE_ACTION_SELECTED')
|
Nenue@6
|
255 --PBS:RegisterEvent('PET_BATTLE_AURA_APPLIED')
|
Nenue@6
|
256 --PBS:RegisterEvent('PET_BATTLE_AURA_CANCELED')
|
Nenue@6
|
257 --PBS:RegisterEvent('PET_BATTLE_PET_TYPE_CHANGED')
|
Nenue@6
|
258 PBS:RegisterEvent('PET_BATTLE_TURN_STARTED')
|
Nenue@6
|
259 --PBS:RegisterEvent('PET_BATTLE_HEALTH_CHANGED')
|
Nenue@6
|
260 --PBS:RegisterEvent('PET_BATTLE_MAX_HEALTH_CHANGED')
|
Nenue@6
|
261 PBS:RegisterEvent('PET_BATTLE_PET_ROUND_RESULTS')
|
Nenue@6
|
262 PBS:RegisterEvent('PET_BATTLE_PET_ROUND_PLAYBACK_COMPLETE')
|
Nenue@6
|
263 end
|
Nenue@6
|
264
|
Nenue@6
|
265 --[[
|
Nenue@6
|
266 mod.PET_BATTLE_OPENING_DONE = trace
|
Nenue@6
|
267 mod.PET_BATTLE_OPENING_START = trace
|
Nenue@6
|
268 mod.PET_BATTLE_OVER = trace
|
Nenue@6
|
269 mod.PET_BATTLE_ABILITY_CHANGED = trace
|
Nenue@6
|
270 mod.PET_BATTLE_ACTION_SELECTED = trace
|
Nenue@6
|
271 mod.PET_BATTLE_AURA_APPLIED = trace -- <team> <slot> <id>
|
Nenue@6
|
272 mod.PET_BATTLE_AURA_CANCELED = trace -- <team> <slot> <id>
|
Nenue@6
|
273 mod.PET_BATTLE_AURA_CHANGED = trace -- <team> <slot> <id>
|
Nenue@6
|
274 mod.PET_BATTLE_CAPTURED = trace
|
Nenue@6
|
275 mod.PET_BATTLE_CLOSE = trace
|
Nenue@6
|
276 mod.PET_BATTLE_FINAL_ROUND = trace -- <team>
|
Nenue@6
|
277 mod.PET_BATTLE_HEALTH_CHANGED = trace -- <team> <pet slot> <delta>
|
Nenue@6
|
278 mod.PET_BATTLE_LEVEL_CHANGED = trace
|
Nenue@6
|
279 mod.PET_BATTLE_LOOT_RECEIVED = trace
|
Nenue@6
|
280 mod.PET_BATTLE_MAX_HEALTH_CHANGED = trace
|
Nenue@6
|
281 mod.PET_BATTLE_PET_CHANGED = trace -- <team>
|
Nenue@6
|
282 mod.PET_BATTLE_PET_TYPE_CHANGED = trace -- <team> <slot> <type>
|
Nenue@6
|
283 mod.PET_BATTLE_PET_ROUND_PLAYBACK_COMPLETE = trace -- <round number>
|
Nenue@6
|
284 mod.PET_BATTLE_PET_ROUND_RESULTS = trace -- <round number>
|
Nenue@6
|
285 mod.PET_BATTLE_PVP_DUEL_REQUESTED = trace
|
Nenue@6
|
286 mod.PET_BATTLE_PVP_DUEL_REQUEST_CANCEL = trace
|
Nenue@6
|
287 mod.PET_BATTLE_QUEUE_PROPOSAL_ACCEPTED = trace
|
Nenue@6
|
288 mod.PET_BATTLE_QUEUE_PROPOSAL_DECLINED = trace
|
Nenue@6
|
289 mod.PET_BATTLE_QUEUE_PROPOSE_MATCH = trace
|
Nenue@6
|
290 mod.PET_BATTLE_QUEUE_STATUS = trace
|
Nenue@6
|
291 mod.PET_BATTLE_TURN_STARTED = trace
|
Nenue@6
|
292 mod.PET_BATTLE_XP_CHANGED = trace -- <team> <slot> <exp>
|
Nenue@6
|
293 --]] |