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