annotate 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
rev   line source
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 --]]