Mercurial > wow > buffalo2
comparison Modules/ArtifactPower.lua @ 108:a41f6b74709a
- Handler number and boolean cluster arguments as positioning priority layer and "always top" respectively
- Use SetShown and IsShown instead of IsVisible in doing full re-anchor checks
| author | Nick@Zahhak |
|---|---|
| date | Sat, 25 Feb 2017 11:42:07 -0500 |
| parents | 8df154a2bfd6 |
| children | 1196c2bad31c |
comparison
equal
deleted
inserted
replaced
| 107:ff00679a7817 | 108:a41f6b74709a |
|---|---|
| 48 self:RegisterEvent('ARTIFACT_UPDATE') -- when artifact data has changed | 48 self:RegisterEvent('ARTIFACT_UPDATE') -- when artifact data has changed |
| 49 self:RegisterEvent('ARTIFACT_XP_UPDATE') -- when artifact xp has changed (but not necessarily data) | 49 self:RegisterEvent('ARTIFACT_XP_UPDATE') -- when artifact xp has changed (but not necessarily data) |
| 50 self:RegisterEvent('PLAYER_REGEN_ENABLED') | 50 self:RegisterEvent('PLAYER_REGEN_ENABLED') |
| 51 self:RegisterEvent('PLAYER_REGEN_DISABLED') | 51 self:RegisterEvent('PLAYER_REGEN_DISABLED') |
| 52 self:RegisterEvent('PLAYER_ENTERING_WORLD') | 52 self:RegisterEvent('PLAYER_ENTERING_WORLD') |
| 53 Veneer:AddHandler(self, self.anchorPoint, true) | 53 self:RegisterEvent('ITEM_LOCK_CHANGED') -- use to clear bag slot cache data |
| 54 Veneer:AddHandler(self, self.anchorPoint, 2) | |
| 54 SLASH_VENEER_AP1 = "/vap" | 55 SLASH_VENEER_AP1 = "/vap" |
| 55 SLASH_VENEER_AP2 = "/veneerap" | 56 SLASH_VENEER_AP2 = "/veneerap" |
| 56 SlashCmdList.VENEER_AP = function(arg) | 57 SlashCmdList.VENEER_AP = function(arg) |
| 57 if arg == 'fishing' then | 58 if arg == 'fishing' then |
| 58 if VeneerData.ArtifactPower.EnableFishing then | 59 if VeneerData.ArtifactPower.EnableFishing then |
| 60 else | 61 else |
| 61 VeneerData.ArtifactPower.EnableFishing = true | 62 VeneerData.ArtifactPower.EnableFishing = true |
| 62 end | 63 end |
| 63 self:Print('Show Underlight Angler:', (VeneerData.ArtifactPower.EnableFishing and 'ON' or 'OFF')) | 64 self:Print('Show Underlight Angler:', (VeneerData.ArtifactPower.EnableFishing and 'ON' or 'OFF')) |
| 64 self:Update() | 65 self:Update() |
| 65 | 66 elseif arg == 'reset' then |
| 67 if self.db then | |
| 68 table.wipe(self.db.cache) | |
| 69 table.wipe(self.db.fishingCache) | |
| 70 end | |
| 71 self:Print('Cache data reset.') | |
| 72 self:Update() | |
| 66 else | 73 else |
| 67 self:Show() | 74 self:Show() |
| 68 end | 75 end |
| 69 end | 76 end |
| 70 | 77 |
| 71 self.tooltip = CreateFrame('GameTooltip', TOOLTIP_NAME, self, 'GameTooltipTemplate') | 78 self.tooltip = CreateFrame('GameTooltip', TOOLTIP_NAME, self, 'GameTooltipTemplate') |
| 72 tinsert(UISpecialFrames, self:GetName()) | 79 tinsert(UISpecialFrames, self:GetName()) |
| 73 | 80 |
| 74 | 81 |
| 82 end | |
| 83 local ShortNumberString = function (value) | |
| 84 if value >= 100000 then | |
| 85 return tostring(floor(value/1000)) .. 'k' | |
| 86 elseif value >= 1000 then | |
| 87 return tostring(floor(value/100)/10) .. 'k' | |
| 88 else | |
| 89 return value | |
| 90 end | |
| 75 end | 91 end |
| 76 | 92 |
| 77 | 93 |
| 78 local IsBagnonOpen = function() | 94 local IsBagnonOpen = function() |
| 79 return ((BagnonFramebank and BagnonFramebank:IsShown()) or (BagnonFrameinventory and BagnonFrameinventory:IsShown())) | 95 return ((BagnonFramebank and BagnonFramebank:IsShown()) or (BagnonFrameinventory and BagnonFrameinventory:IsShown())) |
| 148 for i, data in pairs(self.fishingCache) do | 164 for i, data in pairs(self.fishingCache) do |
| 149 self.db.fishingCache[i] = data | 165 self.db.fishingCache[i] = data |
| 150 end | 166 end |
| 151 | 167 |
| 152 | 168 |
| 153 self.cache = self.db.cache | |
| 154 self.profile = self.db[guid] | 169 self.profile = self.db[guid] |
| 170 self.profile.cache = self.profile.cache or {} | |
| 171 self.profile.cache.bagItems = self.profile.cache.bagItems or {} | |
| 172 self.profile.cache.bags = self.profile.cache.bags or {} | |
| 173 self.profile.cache.fishing = self.profile.cache.fishing or {} | |
| 174 self.profile.cache.items = self.profile.cache.items or {} | |
| 155 self.profile.bagslots = self.profile.bagslots or {} | 175 self.profile.bagslots = self.profile.bagslots or {} |
| 156 self.profile.artifacts = self.profile.artifacts or {} | 176 self.profile.artifacts = self.profile.artifacts or {} |
| 157 self.updateSummary = true | 177 self.updateSummary = true |
| 178 self.cache = self.profile.cache | |
| 158 | 179 |
| 159 VeneerArtifactPowerTimer:SetScript('OnUpdate', function() | 180 VeneerArtifactPowerTimer:SetScript('OnUpdate', function() |
| 160 self:OnUpdate() | 181 self:OnUpdate() |
| 161 end) | 182 end) |
| 162 | 183 |
| 280 print('|cFF00FF88OnEvent()', event, ...) | 301 print('|cFF00FF88OnEvent()', event, ...) |
| 281 if event == 'PLAYER_ENTERING_WORLD' then | 302 if event == 'PLAYER_ENTERING_WORLD' then |
| 282 self:TryToShow() | 303 self:TryToShow() |
| 283 elseif event == 'BAG_UPDATE' then | 304 elseif event == 'BAG_UPDATE' then |
| 284 local containerID = ... | 305 local containerID = ... |
| 306 | |
| 307 | |
| 285 self:QueueBag(containerID) | 308 self:QueueBag(containerID) |
| 309 elseif event == 'ITEM_LOCK_CHANGED' then | |
| 310 | |
| 311 local containerID, slotID = ... | |
| 312 | |
| 313 if self.cache.bags[containerID] and self.cache.bags[containerID][slotID] then | |
| 314 self.cache.bags[containerID][slotID] = nil | |
| 315 self.cache.fishing[containerID][slotID] = nil | |
| 316 end | |
| 317 | |
| 318 | |
| 286 elseif event == 'PLAYER_BANKSLOTS_CHANGED' then | 319 elseif event == 'PLAYER_BANKSLOTS_CHANGED' then |
| 287 self:ScanAllBags() | 320 self:ScanAllBags() |
| 288 elseif event == 'BAG_UPDATE_DELAYED' then | 321 elseif event == 'BAG_UPDATE_DELAYED' then |
| 289 if not self.firstHit then | 322 if not self.firstHit then |
| 290 self.firstHit = true | 323 self.firstHit = true |
| 357 if self.bankAP and (self.bankAP > 0) then | 390 if self.bankAP and (self.bankAP > 0) then |
| 358 bankText = (bankText and (bankText .. ' | ') or '') .. '|cFFFFFF00'..tostring(self.bankAP)..'|r' | 391 bankText = (bankText and (bankText .. ' | ') or '') .. '|cFFFFFF00'..tostring(self.bankAP)..'|r' |
| 359 end | 392 end |
| 360 end | 393 end |
| 361 end | 394 end |
| 362 if self.fishingAP and self.fishingAP >= 1 then | 395 if self.fishingAP and self.fishingAP > 0 then |
| 363 bankText = (bankText and (bankText .. ' ') or '') .. '|cFF0088FF' .. tostring(self.fishingAP) .. ' fishing AP|r' | 396 bankText = (bankText and (bankText .. ' ') or '') .. '|cFF0088FF' .. tostring(self.fishingAP) .. ' fishing AP|r' |
| 364 end | 397 end |
| 365 | 398 |
| 366 self.SummaryHeader:SetText(bankText) | 399 self.SummaryHeader:SetText(bankText) |
| 367 | 400 |
| 368 local numButtons = 0 | 401 local numButtons = 0 |
| 369 local contentsHeight = 64 | 402 local contentsHeight = 16 + self.SummaryHeader:GetHeight() + 64 |
| 403 local contentsWidth = 64 | |
| 370 if self.profile.knowledgeMultiplier then | 404 if self.profile.knowledgeMultiplier then |
| 371 numButtons = self:UpdateArtifactButtons() | 405 numButtons = self:UpdateArtifactButtons() |
| 372 contentsHeight = contentsHeight + self:UpdateItemButtons() | 406 |
| 373 end | 407 contentsWidth = 64*numButtons + 4 * (numButtons+1) |
| 374 | 408 |
| 375 | 409 local itemsWidth, itemsHeight = self:UpdateItemButtons() |
| 376 | 410 contentsHeight = contentsHeight + itemsHeight |
| 377 self:SetWidth(64*numButtons + 4 * (numButtons+1)) | 411 contentsWidth = max(contentsWidth, itemsWidth) |
| 378 self:SetHeight(16 + self.SummaryHeader:GetHeight() + contentsHeight) | 412 end |
| 413 | |
| 414 | |
| 415 | |
| 416 self:SetWidth(contentsWidth) | |
| 417 self:SetHeight(contentsHeight) | |
| 379 self:Reanchor() | 418 self:Reanchor() |
| 380 end | 419 end |
| 381 | 420 |
| 382 function ap:UpdateArtifactButtons() | 421 function ap:UpdateArtifactButtons() |
| 383 | 422 |
| 393 fishingID = itemID | 432 fishingID = itemID |
| 394 fishingData = artifact | 433 fishingData = artifact |
| 395 end | 434 end |
| 396 | 435 |
| 397 else | 436 else |
| 398 numButtons = numButtons + 1 | 437 if artifact.level ~= 54 then |
| 399 button = self.Artifact[numButtons] | 438 numButtons = numButtons + 1 |
| 400 button.relativeFrame = lastFrame | 439 button = self.Artifact[numButtons] |
| 401 lastFrame = button:SetButton(itemID, artifact, numButtons, (self.equippedID == itemID)) | 440 button.relativeFrame = lastFrame |
| 402 end | 441 lastFrame = button:SetButton(itemID, artifact, numButtons, (self.equippedID == itemID)) |
| 403 | 442 end |
| 404 end | 443 end |
| 405 | 444 |
| 406 if fishingData then | 445 end |
| 446 | |
| 447 if fishingData and (self.fishingAP and self.fishingAP > 0) then | |
| 407 numButtons = numButtons + 1 | 448 numButtons = numButtons + 1 |
| 408 local button = self.Artifact[numButtons] | 449 local button = self.Artifact[numButtons] |
| 409 button.relativeFrame = lastFrame | 450 button.relativeFrame = lastFrame |
| 410 button:SetButton(fishingID, fishingData, numButtons, self.equippedID == fishingID) | 451 button:SetButton(fishingID, fishingData, numButtons, self.equippedID == fishingID) |
| 411 end | 452 end |
| 422 function ap:UpdateItemButtons() | 463 function ap:UpdateItemButtons() |
| 423 print('|cFF00FFFFUpdateItemButtons()|r') | 464 print('|cFF00FFFFUpdateItemButtons()|r') |
| 424 local lastFrame, upFrame | 465 local lastFrame, upFrame |
| 425 local numButtons = 0 | 466 local numButtons = 0 |
| 426 local buttonsHeight = 0 | 467 local buttonsHeight = 0 |
| 427 local buttonWidth = 0 | 468 local buttonsWidth = 0 |
| 428 for index, button in ipairs(self.Tokens) do | 469 for index, button in ipairs(self.Tokens) do |
| 429 if button.numItems >= 1 then | 470 if button.numItems >= 1 then |
| 430 if button.itemName then | 471 if button.itemName then |
| 431 self:SetItemAction(button) | 472 self:SetItemAction(button) |
| 432 end | 473 end |
| 436 print(index, button:GetID(), button.Icon:GetTexture()) | 477 print(index, button:GetID(), button.Icon:GetTexture()) |
| 437 if numButtons == 1 then | 478 if numButtons == 1 then |
| 438 button:SetPoint('TOPLEFT', self, 'TOPLEFT', 4, -76) | 479 button:SetPoint('TOPLEFT', self, 'TOPLEFT', 4, -76) |
| 439 upFrame = button | 480 upFrame = button |
| 440 buttonsHeight = 52 | 481 buttonsHeight = 52 |
| 441 elseif mod(numButtons,8) == 1 then | 482 buttonsWidth = 50 |
| 442 button:SetPoint('TOPLEFT', upFrame, 'BOTTOMLEFT', 0, -2) | |
| 443 upFrame = button | |
| 444 buttonsHeight = buttonsHeight + 52 | |
| 445 else | 483 else |
| 446 button:SetPoint('TOPLEFT', lastFrame, 'TOPRIGHT', 2, 0) | 484 local col = mod(numButtons,8) |
| 485 if col == 1 then | |
| 486 button:SetPoint('TOPLEFT', upFrame, 'BOTTOMLEFT', 0, -2) | |
| 487 upFrame = button | |
| 488 buttonsHeight = buttonsHeight + 52 | |
| 489 | |
| 490 else | |
| 491 button:SetPoint('TOPLEFT', lastFrame, 'TOPRIGHT', 2, 0) | |
| 492 | |
| 493 end | |
| 494 buttonsWidth = max(buttonsWidth, col * 50) | |
| 447 end | 495 end |
| 448 button.Count:SetText(button.numItems) | 496 button.Count:SetText(button.numItems) |
| 449 lastFrame = button | 497 lastFrame = button |
| 450 button:Show() | 498 button:Show() |
| 451 else | 499 else |
| 453 end | 501 end |
| 454 end | 502 end |
| 455 | 503 |
| 456 | 504 |
| 457 | 505 |
| 458 return buttonsHeight | 506 return buttonsWidth, buttonsHeight |
| 459 end | 507 end |
| 460 | 508 |
| 461 function ap:SetItemAction(button, name) | 509 function ap:SetItemAction(button, name) |
| 462 name = name or self.itemName | 510 name = name or self.itemName |
| 463 if InCombatLockdown() then | 511 if InCombatLockdown() then |
| 488 print(' created') | 536 print(' created') |
| 489 self.ItemButtons[itemID] = button | 537 self.ItemButtons[itemID] = button |
| 490 self.numItems = self.numItems + 1 | 538 self.numItems = self.numItems + 1 |
| 491 end | 539 end |
| 492 | 540 |
| 493 local itemAPtext = itemAP * self.profile.knowledgeMultiplier | 541 local itemAPtext = itemAP |
| 494 if itemAPtext >= 100000 then | 542 if itemAPtext >= 100000 then |
| 495 itemAPtext = floor(itemAPtext/1000) .. 'k' | 543 itemAPtext = floor(itemAPtext/1000) .. 'k' |
| 496 elseif itemAPtext >= 1000 then | 544 elseif itemAPtext >= 1000 then |
| 497 itemAPtext = (floor(itemAPtext/100)/10 ) .. 'k' | 545 itemAPtext = (floor(itemAPtext/100)/10 ) .. 'k' |
| 498 end | 546 end |
| 501 button.numItems = button.numItems + 1 | 549 button.numItems = button.numItems + 1 |
| 502 return button | 550 return button |
| 503 end | 551 end |
| 504 | 552 |
| 505 function ap:GetItemAP(itemID, itemLink, bagData) | 553 function ap:GetItemAP(itemID, itemLink, bagData) |
| 506 if not self.cache[itemID] then | 554 if not self.cache.items[itemID] then |
| 507 | 555 |
| 508 print('doing tooltip scan') | 556 print('doing tooltip scan') |
| 509 self.tooltip:SetOwner(self, 'ANCHOR_NONE') | 557 self.tooltip:SetOwner(self, 'ANCHOR_NONE') |
| 510 self.tooltip:SetHyperlink(itemLink) | 558 self.tooltip:SetHyperlink(itemLink) |
| 511 self.tooltip:Show() | 559 self.tooltip:Show() |
| 518 if text and text:match(ARTIFACT_POWER) then | 566 if text and text:match(ARTIFACT_POWER) then |
| 519 text = text:gsub('[,%D]', '') | 567 text = text:gsub('[,%D]', '') |
| 520 print(itemLink, '-', tonumber(text)) | 568 print(itemLink, '-', tonumber(text)) |
| 521 local itemAP = tonumber(text) | 569 local itemAP = tonumber(text) |
| 522 if itemAP then | 570 if itemAP then |
| 523 itemAP = itemAP / self.profile.knowledgeMultiplier | 571 itemAP = itemAP |
| 524 self.cache[itemID] = itemAP | 572 self.cache.items[itemID] = itemAP |
| 525 end | 573 end |
| 526 end | 574 end |
| 527 end | 575 end |
| 528 end | 576 end |
| 529 local fishingText = _G[TOOLTIP_NAME .. 'TextLeft3']:GetText() | 577 local fishingText = _G[TOOLTIP_NAME .. 'TextLeft3']:GetText() |
| 530 if fishingText and fishingText:match('fishing artifact') then | 578 if fishingText and fishingText:match('fishing artifact') then |
| 531 local fishingAP = fishingText:match("%d+") | 579 local fishingAP = fishingText:match("%d+") |
| 532 fishingAP = tonumber(fishingAP) | 580 fishingAP = tonumber(fishingAP) |
| 533 if fishingAP then | 581 if fishingAP then |
| 534 self.cache[itemID] = fishingAP | 582 self.cache.items[itemID] = fishingAP |
| 535 self.fishingCache[itemID] = true | 583 self.cache.fishing[itemID] = true |
| 536 end | 584 end |
| 537 end | 585 end |
| 538 else | 586 else |
| 539 | 587 |
| 540 self.cache[itemID] = 0 | 588 self.cache.items[itemID] = 0 |
| 541 end | 589 end |
| 542 end | 590 end |
| 543 return self.cache[itemID], self.fishingCache[itemID] | 591 return self.cache.items[itemID], self.cache.fishing[itemID] |
| 544 end | 592 end |
| 545 | 593 |
| 546 function ap:SetArtifact(itemID, name, texture, currentXP, pointsSpent) | 594 function ap:SetArtifact(itemID, name, texture, currentXP, pointsSpent) |
| 547 print('|cFF00FF00SetArtifact()|r') | 595 print('|cFF00FF00SetArtifact()|r') |
| 548 if not self.profile then | 596 if not self.profile then |
| 549 return | 597 return |
| 550 end | 598 end |
| 551 local artifacts = self.profile.artifacts | 599 local artifacts = self.profile.artifacts |
| 552 | 600 |
| 553 local multi = C_ArtifactUI.GetArtifactKnowledgeMultiplier() | 601 local multi = C_ArtifactUI.GetArtifactKnowledgeMultiplier() |
| 602 if multi and (self.profile.knowledgeMultiplier ~= multi) then | |
| 603 table.wipe(self.cache.items) | |
| 604 table.wipe(self.cache.fishing) | |
| 605 end | |
| 606 | |
| 554 self.profile.knowledgeMultiplier = multi or self.profile.knowledgeMultiplier | 607 self.profile.knowledgeMultiplier = multi or self.profile.knowledgeMultiplier |
| 555 print('multiplier:', multi) | 608 print('multiplier:', multi) |
| 556 | 609 |
| 557 if itemID then | 610 if itemID then |
| 558 | 611 |
| 565 artifact.name = name | 618 artifact.name = name |
| 566 artifact.texture = texture | 619 artifact.texture = texture |
| 567 artifact.currentXP = currentXP | 620 artifact.currentXP = currentXP |
| 568 artifact.level = pointsSpent | 621 artifact.level = pointsSpent |
| 569 local cost = C_ArtifactUI.GetCostForPointAtRank(pointsSpent) | 622 local cost = C_ArtifactUI.GetCostForPointAtRank(pointsSpent) |
| 570 artifact.cost = cost | 623 artifact.currentCost = cost |
| 571 | 624 |
| 572 local pointsAvailable = pointsSpent | 625 local pointsAvailable = pointsSpent |
| 573 local actualCost = cost | 626 local actualCost = cost |
| 574 local actualXP = currentXP | 627 local actualXP = currentXP |
| 575 while actualXP >= actualCost do | 628 while actualXP >= actualCost do |
| 601 bagData.totalAP = 0 | 654 bagData.totalAP = 0 |
| 602 bagData.fishingAP = 0 | 655 bagData.fishingAP = 0 |
| 603 bagData.items = bagData.items or {} | 656 bagData.items = bagData.items or {} |
| 604 table.wipe(bagData.items) | 657 table.wipe(bagData.items) |
| 605 | 658 |
| 659 self.cache.bagItems[id] = self.cache.bagItems[id] or {} | |
| 660 self.cache.bags[id] = self.cache.bags[id] or {} | |
| 661 self.cache.fishing[id] = self.cache.fishing[id] or {} | |
| 662 | |
| 606 for slotID = 1, numSlots do | 663 for slotID = 1, numSlots do |
| 607 local texture, count, locked, quality, readable, lootable, link = GetContainerItemInfo(id, slotID) | 664 local texture, count, locked, quality, readable, lootable, link = GetContainerItemInfo(id, slotID) |
| 608 if link then | 665 if link then |
| 609 local itemID = GetContainerItemID(id, slotID) | 666 local itemID = GetContainerItemID(id, slotID) |
| 610 local name, _, quality, iLevel, reqLevel, class, subclass = GetItemInfo(link) | 667 local name, _, quality, iLevel, reqLevel, class, subclass = GetItemInfo(link) |
| 611 | 668 |
| 612 if class == 'Consumable' and subclass == 'Other' then | 669 if class == 'Consumable' and subclass == 'Other' then |
| 613 --print(GetItemInfo(link)) | 670 --print(GetItemInfo(link)) |
| 614 local itemAP, isFishingAP = self:GetItemAP(itemID, link) | 671 local itemAP, isFishingAP |
| 672 if self.cache.bags[id][slotID] and (self.cache.bagItems[id][slotID] == itemID) then | |
| 673 print('slot cache data', id, slotID) | |
| 674 itemAP = self.cache.bags[id][slotID] | |
| 675 else | |
| 676 itemAP, isFishingAP = self:GetItemAP(itemID, link) | |
| 677 self.cache.bagItems[id][slotID] = itemID | |
| 678 self.cache.bags[id][slotID] = itemAP | |
| 679 self.cache.fishing[id][slotID] = isFishingAP | |
| 680 end | |
| 681 | |
| 682 | |
| 615 --print(itemAP, isFishingAP) | 683 --print(itemAP, isFishingAP) |
| 616 if itemAP and (itemAP > 0) then | 684 if itemAP and (itemAP > 0) then |
| 617 local itemButton = self:GetItemButton(itemID, texture, itemAP) | 685 local itemButton = self:GetItemButton(itemID, texture, itemAP) |
| 618 | 686 |
| 619 if isFishingAP then | 687 if isFishingAP then |
| 620 bagData.fishingItems = (bagData.fishingItems or 0) + 1 | 688 bagData.fishingItems = (bagData.fishingItems or 0) + 1 |
| 621 bagData.fishingAP = (bagData.fishingAP or 0) + itemAP | 689 bagData.fishingAP = (bagData.fishingAP or 0) + itemAP |
| 622 else | 690 else |
| 623 itemAP = itemAP * self.profile.knowledgeMultiplier | 691 itemAP = itemAP |
| 624 bagData.numItems = (bagData.numItems or 0) + 1 | 692 bagData.numItems = (bagData.numItems or 0) + 1 |
| 625 bagData.totalAP = (bagData.totalAP or 0) + itemAP | 693 bagData.totalAP = (bagData.totalAP or 0) + itemAP |
| 626 end | 694 end |
| 627 bagData.items[itemID] = (bagData.items[itemID] or 0) + 1 | 695 bagData.items[itemID] = (bagData.items[itemID] or 0) + 1 |
| 628 end | 696 end |
| 699 | 767 |
| 700 function VeneerArtifactButtonMixin:SetButton(itemID, artifact, index, equipped) | 768 function VeneerArtifactButtonMixin:SetButton(itemID, artifact, index, equipped) |
| 701 print(itemID, index) | 769 print(itemID, index) |
| 702 print(artifact.name, artifact.texture, artifact.currentXP) | 770 print(artifact.name, artifact.texture, artifact.currentXP) |
| 703 self:SetID(itemID) | 771 self:SetID(itemID) |
| 772 if not artifact.currentCost then | |
| 773 artifact.currentCost = artifact.cost | |
| 774 end | |
| 775 | |
| 704 for k,v in pairs(artifact) do | 776 for k,v in pairs(artifact) do |
| 705 --print('::',k,v) | 777 --print('::',k,v) |
| 706 self[k] = v | 778 self[k] = v |
| 707 end | 779 end |
| 708 | 780 |
| 722 end | 794 end |
| 723 self.potentialCost = potentialCost | 795 self.potentialCost = potentialCost |
| 724 self.potentialLevel = potentialPoints | 796 self.potentialLevel = potentialPoints |
| 725 self.potentialAdjustedXP = potentialXP | 797 self.potentialAdjustedXP = potentialXP |
| 726 | 798 |
| 727 | 799 self.maxCost = self.currentCost |
| 800 for i = self.level + 1, #POINT_COSTS do | |
| 801 self.maxCost = self.maxCost + POINT_COSTS[i] | |
| 802 end | |
| 728 | 803 |
| 729 if index ~= 1 then | 804 if index ~= 1 then |
| 730 self:ClearAllPoints() | 805 self:ClearAllPoints() |
| 731 self:SetPoint('TOPLEFT', self.relativeFrame, 'TOPRIGHT', 4, 0) | 806 self:SetPoint('TOPLEFT', self.relativeFrame, 'TOPRIGHT', 4, 0) |
| 732 else | 807 else |
| 739 self:Show() | 814 self:Show() |
| 740 return self | 815 return self |
| 741 end | 816 end |
| 742 | 817 |
| 743 function VeneerArtifactButtonMixin:Update() | 818 function VeneerArtifactButtonMixin:Update() |
| 744 | |
| 745 local r, g, b = 1, 1, 1 | 819 local r, g, b = 1, 1, 1 |
| 746 local lR, lG, lB = 1, 1, 0 | 820 local lR, lG, lB = 1, 1, 0 |
| 747 local levelText = self.level | 821 local levelText = self.level |
| 748 local xpValue = self.currentXP | 822 local xpValue = self.currentXP |
| 749 local costValue = self.cost | 823 local costValue = self.currentCost |
| 750 if self.actualLevel ~= self.level then | 824 if self.actualLevel ~= self.level then |
| 751 levelText, r,g,b = self.actualLevel, 0,1,0 | 825 levelText, r,g,b = self.actualLevel, 0,1,0 |
| 752 xpValue, costValue, lR, lG, lB = self.actualXP, self.actualCost, 0, 1, 0 | 826 xpValue, costValue, lR, lG, lB = self.actualXP, self.actualCost, 0, 1, 0 |
| 753 elseif self.potentialLevel ~= self.level then | 827 elseif self.potentialLevel ~= self.level then |
| 754 levelText, r, g, b = self.potentialLevel, 0,1,1 | 828 levelText, r, g, b = self.potentialLevel, 0,1,1 |
| 755 xpValue, costValue, lR, lG, lB = self.potentialAdjustedXP, self.potentialCost, 0,1,0 | 829 xpValue, costValue, lR, lG, lB = self.potentialAdjustedXP, self.potentialCost, 0,1,0 |
| 756 | 830 |
| 757 end | 831 end |
| 758 | 832 |
| 759 if xpValue >= 100000 then | |
| 760 xpValue = tostring(floor(xpValue/1000))..'k' | |
| 761 elseif xpValue > 1000 then | |
| 762 xpValue = tostring(floor(xpValue/100)/10)..'k' | |
| 763 end | |
| 764 if costValue >= 100000 then | |
| 765 costValue = tostring(floor(costValue/1000))..'k' | |
| 766 elseif costValue >= 1000 then | |
| 767 costValue = tostring(floor(costValue/100)/10)..'k' | |
| 768 end | |
| 769 | |
| 770 | |
| 771 self.Level:SetText(levelText) | 833 self.Level:SetText(levelText) |
| 772 self.Level:SetTextColor(r, g, b) | 834 self.Level:SetTextColor(r, g, b) |
| 773 self.CurrentXP:SetText(xpValue) | 835 self.CurrentXP:SetText(ShortNumberString( xpValue)) |
| 774 self.CurrentXP:SetTextColor(lR, lG, lB) | 836 self.CurrentXP:SetTextColor(lR, lG, lB) |
| 775 | 837 |
| 776 if self.isEquipped then | 838 if self.isEquipped then |
| 777 self:SetNormalTexture([[Interface\Buttons\ButtonHilight-Square]]) | 839 self:SetNormalTexture([[Interface\Buttons\ButtonHilight-Square]]) |
| 778 self:GetNormalTexture():SetBlendMode('ADD') | 840 self:GetNormalTexture():SetBlendMode('ADD') |
| 779 self:GetNormalTexture():SetVertexColor(0,1,0) | 841 self:GetNormalTexture():SetVertexColor(0,1,0) |
| 780 else | 842 else |
| 781 self:SetNormalTexture(nil, 'ADD') | 843 self:SetNormalTexture(nil, 'ADD') |
| 782 end | 844 end |
| 783 | 845 |
| 784 local currentProgress = (self.currentXP < self.cost) and (self.currentXP / self.cost) or 1 | 846 local currentProgress = (self.currentXP < self.currentCost) and (self.currentXP / self.currentCost) or 1 |
| 785 if self.level <= 53 then | 847 if self.level <= 53 then |
| 786 | |
| 787 self.CurrentProgress.animateFrom = self.CurrentProgress:GetHeight() or 1 | 848 self.CurrentProgress.animateFrom = self.CurrentProgress:GetHeight() or 1 |
| 788 self.CurrentProgress.animateTo = currentProgress * self:GetHeight() | 849 self.CurrentProgress.animateTo = currentProgress * self:GetHeight() |
| 789 self.CurrentProgress:Show() | 850 self.CurrentProgress:Show() |
| 790 self.ProgressLine:Show() | 851 self.ProgressLine:Show() |
| 791 else | 852 else |
| 793 self.ProgressLine:Hide() | 854 self.ProgressLine:Hide() |
| 794 end | 855 end |
| 795 | 856 |
| 796 if self.potentialXP > self.currentXP then | 857 if self.potentialXP > self.currentXP then |
| 797 local projectedProgress = (self.potentialAdjustedXP < self.potentialCost) and (self.potentialXP / self.potentialCost) or 1 | 858 local projectedProgress = (self.potentialAdjustedXP < self.potentialCost) and (self.potentialXP / self.potentialCost) or 1 |
| 798 | |
| 799 if (projectedProgress > currentProgress) then | 859 if (projectedProgress > currentProgress) then |
| 800 self.AdjustedProgress:SetPoint('BOTTOM', self.CurrentProgress, 'TOP') | 860 self.AdjustedProgress:SetPoint('BOTTOM', self.CurrentProgress, 'TOP') |
| 801 projectedProgress = projectedProgress - currentProgress | 861 projectedProgress = projectedProgress - currentProgress |
| 802 | |
| 803 else | 862 else |
| 804 self.AdjustedProgress:SetPoint('BOTTOM', self, 'BOTTOM') | 863 self.AdjustedProgress:SetPoint('BOTTOM', self, 'BOTTOM') |
| 805 end | 864 end |
| 806 print('show potential', currentProgress, projectedProgress) | 865 print('show potential', currentProgress, projectedProgress) |
| 807 self.AdjustedProgress.animateFrom = self.AdjustedProgress:GetHeight() or 1 | 866 self.AdjustedProgress.animateFrom = self.AdjustedProgress:GetHeight() or 1 |
| 808 self.AdjustedProgress.animateTo = projectedProgress * self:GetHeight() | 867 self.AdjustedProgress.animateTo = projectedProgress * self:GetHeight() |
| 809 | |
| 810 self.AdjustedLine:Show() | 868 self.AdjustedLine:Show() |
| 811 self.AdjustedProgress:Show() | 869 self.AdjustedProgress:Show() |
| 812 else | 870 else |
| 813 self.AdjustedProgress:Hide() | 871 self.AdjustedProgress:Hide() |
| 814 self.AdjustedLine:Hide() | 872 self.AdjustedLine:Hide() |
| 815 end | 873 end |
| 816 | |
| 817 | |
| 818 self.Icon:SetTexture(self.texture) | 874 self.Icon:SetTexture(self.texture) |
| 819 self:SetSize(64,64) | 875 self:SetSize(64,64) |
| 820 end | 876 end |
| 821 | 877 |
| 822 | 878 |
| 846 end | 902 end |
| 847 | 903 |
| 848 if self.AdjustedProgress.animateTo then | 904 if self.AdjustedProgress.animateTo then |
| 849 self:AnimateProgress(self.AdjustedProgress) | 905 self:AnimateProgress(self.AdjustedProgress) |
| 850 end | 906 end |
| 851 | |
| 852 end | 907 end |
| 853 | 908 |
| 854 function VeneerArtifactButtonMixin:OnEnter() | 909 function VeneerArtifactButtonMixin:OnEnter() |
| 855 GameTooltip:SetOwner(self, 'ANCHOR_CURSOR') | 910 GameTooltip:SetOwner(self, 'ANCHOR_CURSOR') |
| 856 GameTooltip:SetText(self.name) | 911 GameTooltip:SetText(self.name) |
| 857 GameTooltip:AddLine(tostring(self.currentXP) .. ' / '..tostring(self.cost), 1, 1, 0) | 912 GameTooltip:AddLine(ShortNumberString(self.currentXP) .. ' / '..ShortNumberString(self.currentCost), 1, 1, 0) |
| 858 if self.potentialXP > self.currentXP then | 913 if self.potentialXP > self.currentXP then |
| 859 GameTooltip:AddLine(tostring(self.potentialXP) .. ' potential XP', 0, 1, 1) | 914 GameTooltip:AddLine(ShortNumberString(self.potentialXP) .. ' potential XP', 0, 1, 1) |
| 860 if self.potentialAdjustedXP ~= self.potentialXP then | 915 if self.potentialAdjustedXP ~= self.potentialXP then |
| 861 GameTooltip:AddLine(tostring(self.potentialAdjustedXP) .. ' / ' .. tostring(self.potentialCost).. ' after', 0, 1, 0) | 916 GameTooltip:AddLine(ShortNumberString(self.potentialAdjustedXP) .. ' / ' .. ShortNumberString(self.potentialCost).. ' after', 0, 1, 0) |
| 862 end | 917 end |
| 863 end | 918 end |
| 864 if self.actualLevel ~= self.level then | 919 if self.actualLevel ~= self.level then |
| 865 GameTooltip:AddLine(tostring(self.actualLevel - self.level) .. ' points unlocked', 0, 1, 1) | 920 GameTooltip:AddLine(ShortNumberString(self.actualLevel - self.level) .. ' points unlocked', 0, 1, 1) |
| 921 end | |
| 922 if self.currentXP < self.currentCost then | |
| 923 GameTooltip:AddLine(ShortNumberString(self.currentCost - self.currentXP) .. ' needed') | |
| 866 end | 924 end |
| 867 | 925 |
| 868 GameTooltip:Show() | 926 GameTooltip:Show() |
| 869 end | 927 end |
| 870 function VeneerArtifactButtonMixin:OnLeave() | 928 function VeneerArtifactButtonMixin:OnLeave() |
| 929 if GameTooltip:IsOwned(self) then | |
| 930 GameTooltip:Hide() | |
| 931 end | |
| 932 end | |
| 933 function VeneerArtifactButtonMixin:OnHide() | |
| 934 | |
| 871 if GameTooltip:IsOwned(self) then | 935 if GameTooltip:IsOwned(self) then |
| 872 GameTooltip:Hide() | 936 GameTooltip:Hide() |
| 873 end | 937 end |
| 874 end | 938 end |
| 875 | 939 |
| 876 function VeneerArtifactButtonMixin:OnClick(button, down) | 940 function VeneerArtifactButtonMixin:OnClick(button, down) |
| 877 if self.isEquipped then | 941 if self.isEquipped then |
| 878 SocketInventoryItem(16) | 942 SocketInventoryItem(16) |
| 879 else | 943 else |
| 944 if IsShiftKeyDown() then | |
| 880 SocketContainerItem(self.containerID, self.slotID) | 945 SocketContainerItem(self.containerID, self.slotID) |
| 881 end | 946 else |
| 882 end | 947 |
| 948 end | |
| 949 end | |
| 950 end |
