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