Nenue@6: --- ${PACKAGE_NAME} Nenue@6: -- @file-author@ Nenue@6: -- @project-revision@ @project-hash@ Nenue@6: -- @file-revision@ @file-hash@ Nenue@6: -- Created: 1/17/2016 6:51 PM Nenue@6: Nenue@6: local ADDON, Turok = ... Nenue@6: local T, _G, pairs, pairs = Turok.Addon, _G, pairs, ipairs Nenue@6: local mod = T:NewModule("PetBattle") Nenue@9: local print = function(...) Nenue@9: if not DEBUG then return end Nenue@9: if _G.Devian and _G.DevianDB.workspace ~= 1 then Nenue@9: _G.print('Petz', ...) Nenue@9: end Nenue@9: end Nenue@6: local trace = function(self, e, ...) Nenue@6: print(e, ...) Nenue@6: end Nenue@6: Nenue@6: local PBS Nenue@6: local turn_font = [[Interface\Addons\Turok\Media\font\ArchivoNarrow-Bold.ttf]] Nenue@6: local turn_size = 24 Nenue@6: local turn_outline = 'OUTLINE' Nenue@6: local icon_size = 64 Nenue@6: local spacing = 5 Nenue@6: local padding = 0 Nenue@6: local strongweak_size = 20 Nenue@6: Nenue@6: local cpb = C_PetBattles Nenue@6: T.defaults.petbattle = { Nenue@6: swatch = { Nenue@6: anchor = 'BOTTOM', anchorTo = 'BOTTOM', Nenue@6: parent = 'UIParent', Nenue@6: x = 0, y =240, Nenue@6: width = 200, height = 100, Nenue@6: font = [[Interface\Addons\Turok\Media\font\ArchivoNarrow-Bold.ttf]], Nenue@6: size = 16, Nenue@6: }, Nenue@6: spell = { Nenue@6: anchor = 'TOPLEFT', anchorTo = 'TOPLEFT', Nenue@6: size = 24, Nenue@6: width = 72, height = 72, Nenue@6: x = 0, y =0, Nenue@6: padding = 0, Nenue@6: spacing = 0, Nenue@6: }, Nenue@6: sideSwatch = { Nenue@6: width = 100, height = 50, padding = 0, spacing = 5, Nenue@6: anchor = 'TOPLEFT', anchorTo = 'BOTTOMLEFT', x = 0, y = 0, Nenue@6: parent = 'TkPetSwatch', Nenue@6: }, Nenue@6: sideSpell = { Nenue@6: anchor = 'TOPLEFT', anchorTo = 'TOPLEFT', Nenue@6: size = 16, Nenue@6: width = 36, height = 36, Nenue@6: padding = 0, Nenue@6: spacing = 0, Nenue@6: }, Nenue@6: icon = { Nenue@6: size = 72, Nenue@6: width = 64, Nenue@6: height = 64, Nenue@6: } Nenue@6: } Nenue@6: mod.abilityButtons = {} Nenue@6: mod.switcherButtons = {} Nenue@6: mod.icons = {} Nenue@6: mod.strongweak = {} Nenue@6: mod.turns = {} Nenue@6: mod.petlist = {} Nenue@6: local PLAYER, ENEMY = 1, 2 Nenue@6: local function PBS_UpdateEnemySwatch(self) Nenue@6: Nenue@6: print('UpdateSwatch') Nenue@6: local db = TurokData.petbattle.swatch Nenue@6: local playerActivePet = cpb.GetActivePet(PLAYER) Nenue@6: local enemyActivePet = cpb.GetActivePet(ENEMY) Nenue@6: local enemyNumPets = cpb.GetNumPets(ENEMY) Nenue@6: local playerPetType = cpb.GetPetType(PLAYER, playerActivePet) Nenue@6: local enemyPetType = cpb.GetPetType(ENEMY, enemyActivePet) Nenue@6: local enemyPetName = cpb.GetName(ENEMY, playerActivePet) Nenue@6: for petSlot=1, 3 do Nenue@6: local swatchFrame = (petSlot == enemyActivePet) and self or ((petSlot < enemyNumPets) and self.sideSwatch or self.sideSwatch2) Nenue@6: local db = (swatchFrame == self) and db.spell or db.sideSpell Nenue@6: local type = cpb.GetPetType(ENEMY, petSlot) Nenue@6: print(cText(' PetType='), enemyActivePet) Nenue@6: print(cText(' current='), enemyPetType) Nenue@6: for spellSlot=1, 3 do Nenue@6: print(' ', cText('PetSlotOffset='), cNum(petSlot), cText('AbilitySlotOffset'), cNum(spellSlot)) Nenue@6: local id, name, texture, cooldown, desc, numTurns, attackType, noStrongWeakHints = cpb.GetAbilityInfo(ENEMY, petSlot, spellSlot) Nenue@6: local usable, remaining = cpb.GetAbilityState(ENEMY, petSlot, spellSlot) Nenue@6: Nenue@6: --print('info', cpb.GetAbilityInfo(ENEMY, petSlot, spellSlot)) Nenue@6: -- print('effect', cpb.GetAbilityEffectInfo(id, turnIdx, effectIdx, paramName) Nenue@6: --print('state', cpb.GetAbilityState(ENEMY,petSlot,spellSlot)) Nenue@6: --print('statemod', cpb.GetAbilityStateModification(ENEMY,petSlot,spellSlot)) Nenue@6: --print('proc', cpb.GetAbilityProcTurnIndex(ENEMY,petSlot,spellSlot)) Nenue@6: --print('statemod', cpb.GetAbilityState(ENEMY,petSlot,spellSlot)) Nenue@6: local AbilityButton, icon, strong, turns -- Icon, Strength/Weakness, Turns cooldown Nenue@6: if not swatchFrame.buttons[spellSlot] then Nenue@6: swatchFrame.buttons[spellSlot] = CreateFrame('Frame', 'TkPetSpell'..spellSlot, swatchFrame, 'TkPetSpellTemplate') Nenue@6: AbilityButton = swatchFrame.buttons[spellSlot] Nenue@6: Nenue@6: AbilityButton:SetSize(db.width, db.height) Nenue@6: AbilityButton:SetPoint(db.anchor, swatchFrame, db.anchor, (spellSlot-1)*(db.width+ db.spacing), 0) Nenue@6: Nenue@6: AbilityButton.icon:SetSize(db.width, db.height) Nenue@6: AbilityButton.icon:SetTexCoord(0.1, 0.9, 0.1, 0.9) Nenue@6: Nenue@6: AbilityButton.strongWeakHint:SetSize(strongweak_size, strongweak_size) Nenue@6: AbilityButton.strongWeakHint:SetPoint('CENTER', swatchFrame.buttons[spellSlot], 'CENTER', 0, 0) Nenue@6: Nenue@6: AbilityButton.turnsLeft:SetFont(turn_font, turn_size, turn_outline) Nenue@6: AbilityButton.turnsLeft:SetPoint('CENTER', icon, 'CENTER') Nenue@6: else Nenue@6: AbilityButton = swatchFrame.buttons[spellSlot] Nenue@6: end Nenue@6: local icon, strong , turns = AbilityButton.icon, AbilityButton.strongWeakHint, AbilityButton.turnsLeft Nenue@6: Nenue@6: print('Working on:', swatchFrame, AbilityButton) Nenue@6: print('AbilityState('..petSlot..', '..spellSlot..')', 'usable=', usable, 'turnsLeft=', remaining) Nenue@6: print(cWord(name), cKey(attackType)) Nenue@6: Nenue@6: if petSlot > enemyNumPets then Nenue@6: -- this will also eval true when pet battle over since numPets will be 0 Nenue@6: AbilityButton.popOut:Play() Nenue@6: else Nenue@6: local abilityChanged Nenue@6: if id ~= AbilityButton.spellID then Nenue@6: abilityChanged = true Nenue@6: AbilityButton.spellID = id Nenue@6: AbilityButton.spellName = name Nenue@6: AbilityButton.spellDesc = desc Nenue@6: AbilityButton.spellType = attackType Nenue@6: AbilityButton.spellMaxCooldown = cooldown Nenue@6: AbilityButton.spellDesc = desc Nenue@6: AbilityButton.spellCooldown = remaining Nenue@6: AbilityButton.spellNumTurns = numTurns Nenue@6: end Nenue@6: if AbilityButton.petType ~= enemyPetType then Nenue@6: AbilityButton.petType = enemyPetType Nenue@6: AbilityButton.noStrongWeakHints = noStrongWeakHints Nenue@6: end Nenue@6: Nenue@6: if not usable then Nenue@6: icon:SetDesaturated(true) Nenue@6: icon:SetVertexColor(0.5, 0.5, 0.5, 1) Nenue@6: else Nenue@6: icon:SetDesaturated(false) Nenue@6: icon:SetVertexColor(1, 1, 1, 1) Nenue@6: end Nenue@6: Nenue@6: icon:SetTexture(texture) Nenue@6: turns:SetText((cooldown > 0) and cooldown or nil) Nenue@6: --AbilityButton.damage:SetText() Nenue@6: Nenue@6: print('noStrongWeakHints', noStrongWeakHints) Nenue@6: print('abilityModification', cpb.GetAttackModifier(enemyPetType, playerPetType)) Nenue@6: local modifier = cpb.GetAttackModifier(enemyPetType, playerPetType) Nenue@6: if not noStrongWeakHints then Nenue@6: if modifier < 1 then Nenue@6: strong:SetTexture(0,1,0,0.5) Nenue@6: else Nenue@6: strong:SetTexture(1,0,0,0.5) Nenue@6: end Nenue@6: Nenue@6: strong:Show() Nenue@6: else Nenue@6: strong:Hide() Nenue@6: end Nenue@6: if numTurns then Nenue@6: print('numTurns=',numTurns) Nenue@6: end Nenue@6: if not AbilityButton:IsVisible() or abilityChanged then Nenue@6: AbilityButton:Show() Nenue@6: AbilityButton.popIn:Play() Nenue@6: end Nenue@6: Nenue@6: end Nenue@6: Nenue@6: Nenue@6: end Nenue@6: swatchFrame:SetSize(db.width*3+db.spacing*2+db.padding*2, db.height+padding*2) Nenue@6: swatchFrame.petName = enemyPetName Nenue@6: swatchFrame.petType = enemyPetType Nenue@6: local db = (swatchFrame == self) and db.swatch or db.sideSwatch Nenue@6: swatchFrame:Show() Nenue@6: end Nenue@6: end Nenue@6: Nenue@6: local function PBS_Switch () Nenue@6: print('Switch button was clicked.') Nenue@6: end Nenue@6: mod.PLAYER_ENTERING_WORLD = function(self, e) Nenue@6: print(cpb.IsInBattle()) Nenue@6: if cpb.IsInBattle() then Nenue@6: PBS_UpdateEnemySwatch(PBS, e, 2) Nenue@6: end Nenue@6: Nenue@6: Nenue@6: if _G.PetBattleFrame.BottomFrame.SwitchPetButton then Nenue@6: print("There's a pet battle frame button ") Nenue@6: --_G.PetBattleFrame.BottomFrame.SwitchPetButton:SetScript('OnClick', PBS_Switch) Nenue@6: end Nenue@6: end Nenue@6: Nenue@6: local PBS_Hide = function() Nenue@6: for i = 1, 3 do Nenue@6: if PBS.buttons[i] then Nenue@6: PBS.buttons[i].popOut:Play() Nenue@6: end Nenue@6: if PBS.sideSwatch.buttons[i] then Nenue@6: PBS.sideSwatch.buttons[i].popOut:Play() Nenue@6: end Nenue@6: if PBS.sideSwatch2.buttons[i] then Nenue@6: PBS.sideSwatch2.buttons[i].popOut:Play() Nenue@6: end Nenue@6: end Nenue@6: end Nenue@6: Nenue@6: local PBS_Event = function(self, e, ...) Nenue@6: print('event', e) Nenue@6: local owner = ... Nenue@6: if e == 'PET_BATTLE_PET_ROUND_PLAYBACK_COMPLETE' or e == 'PET_BATTLE_OPENING_DONE' then Nenue@6: PBS_UpdateEnemySwatch(PBS) Nenue@6: elseif e == 'PET_BATTLE_CLOSE' then Nenue@6: PBS_Hide(PBS) Nenue@6: end Nenue@6: end Nenue@6: function mod:OnEnable() Nenue@6: PBS = CreateFrame('Frame', 'TkPetSwatch', UIParent, 'TkPetSwatchTemplate') Nenue@6: PBS.buttons = {} Nenue@6: PBS.sideSwatch = CreateFrame('Frame', 'TkSideSwatch', PBS, 'TkPetSwatchTemplate') Nenue@6: PBS.sideSwatch.buttons = {} Nenue@6: PBS.sideSwatch2 = CreateFrame('Frame', 'TkSideSwatch', PBS, 'TkPetSwatchTemplate') Nenue@6: PBS.sideSwatch2.buttons = {} Nenue@6: local db = TurokData.petbattle Nenue@6: T.SetFrameLayout(PBS, db.swatch) Nenue@6: T.SetFrameLayout(PBS.sideSwatch, db.sideSwatch) Nenue@6: T.SetFrameLayout(PBS.sideSwatch2, db.sideSwatch) Nenue@6: PBS.sideSwatch2:ClearAllPoints() Nenue@6: PBS.sideSwatch2:SetPoint('LEFT', PBS.sideSwatch, 'RIGHT', db.sideSpell.spacing, 0) Nenue@6: Nenue@6: mod.effectIndex = { Nenue@6: cpb.GetAllEffectNames() Nenue@6: } Nenue@6: Nenue@6: PBS:SetScript('OnEvent', PBS_Event) Nenue@6: PBS:RegisterEvent('PET_BATTLE_OPENING_DONE') Nenue@6: PBS:RegisterEvent('PET_BATTLE_PET_CHANGED') Nenue@6: PBS:RegisterEvent('PET_BATTLE_OVER') Nenue@6: PBS:RegisterEvent('PET_BATTLE_CLOSE') Nenue@6: PBS:RegisterEvent('PET_BATTLE_ABILITY_CHANGED') Nenue@6: PBS:RegisterEvent('PET_BATTLE_ACTION_SELECTED') Nenue@6: --PBS:RegisterEvent('PET_BATTLE_AURA_APPLIED') Nenue@6: --PBS:RegisterEvent('PET_BATTLE_AURA_CANCELED') Nenue@6: --PBS:RegisterEvent('PET_BATTLE_PET_TYPE_CHANGED') Nenue@6: PBS:RegisterEvent('PET_BATTLE_TURN_STARTED') Nenue@6: --PBS:RegisterEvent('PET_BATTLE_HEALTH_CHANGED') Nenue@6: --PBS:RegisterEvent('PET_BATTLE_MAX_HEALTH_CHANGED') Nenue@6: PBS:RegisterEvent('PET_BATTLE_PET_ROUND_RESULTS') Nenue@6: PBS:RegisterEvent('PET_BATTLE_PET_ROUND_PLAYBACK_COMPLETE') Nenue@6: end Nenue@6: Nenue@6: --[[ Nenue@6: mod.PET_BATTLE_OPENING_DONE = trace Nenue@6: mod.PET_BATTLE_OPENING_START = trace Nenue@6: mod.PET_BATTLE_OVER = trace Nenue@6: mod.PET_BATTLE_ABILITY_CHANGED = trace Nenue@6: mod.PET_BATTLE_ACTION_SELECTED = trace Nenue@6: mod.PET_BATTLE_AURA_APPLIED = trace -- Nenue@6: mod.PET_BATTLE_AURA_CANCELED = trace -- Nenue@6: mod.PET_BATTLE_AURA_CHANGED = trace -- Nenue@6: mod.PET_BATTLE_CAPTURED = trace Nenue@6: mod.PET_BATTLE_CLOSE = trace Nenue@6: mod.PET_BATTLE_FINAL_ROUND = trace -- Nenue@6: mod.PET_BATTLE_HEALTH_CHANGED = trace -- Nenue@6: mod.PET_BATTLE_LEVEL_CHANGED = trace Nenue@6: mod.PET_BATTLE_LOOT_RECEIVED = trace Nenue@6: mod.PET_BATTLE_MAX_HEALTH_CHANGED = trace Nenue@6: mod.PET_BATTLE_PET_CHANGED = trace -- Nenue@6: mod.PET_BATTLE_PET_TYPE_CHANGED = trace -- Nenue@6: mod.PET_BATTLE_PET_ROUND_PLAYBACK_COMPLETE = trace -- Nenue@6: mod.PET_BATTLE_PET_ROUND_RESULTS = trace -- Nenue@6: mod.PET_BATTLE_PVP_DUEL_REQUESTED = trace Nenue@6: mod.PET_BATTLE_PVP_DUEL_REQUEST_CANCEL = trace Nenue@6: mod.PET_BATTLE_QUEUE_PROPOSAL_ACCEPTED = trace Nenue@6: mod.PET_BATTLE_QUEUE_PROPOSAL_DECLINED = trace Nenue@6: mod.PET_BATTLE_QUEUE_PROPOSE_MATCH = trace Nenue@6: mod.PET_BATTLE_QUEUE_STATUS = trace Nenue@6: mod.PET_BATTLE_TURN_STARTED = trace Nenue@6: mod.PET_BATTLE_XP_CHANGED = trace -- Nenue@6: --]]