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