| 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 --]] |