Advertisement
Guest User

ACM Slim modified

a guest
Sep 8th, 2012
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.18 KB | None | 0 0
  1. -- declare addon ------------------------------------------------------------
  2. local ACM, private = ...
  3. local LibStub = LibStub
  4.  
  5. -- local variables ----------------------------------------------------------
  6. local allManaValues = {} -- stores all values during combat
  7. local span = 1100 -- this is the left and right limit of manaburn or managain in absolute MPS value (user setting?)
  8. local numsegments = 10 -- negative/positive half-bar number of segments (center segment excluded)
  9. local segment_span = span/numsegments -- how much MPS per segment?
  10.  
  11. -- declare the database
  12. local db
  13. function ACM:OnInitialize()
  14.     self:CreateManaBar()
  15. end
  16.  
  17. function ACM:OnEnable()
  18.     self:RegisterEvent("PLAYER_REGEN_ENABLED")
  19.     self:RegisterEvent("PLAYER_REGEN_DISABLED")
  20. end
  21.  
  22. function ACM:CreateManaBar()
  23.     -- build and set frame
  24.     private.manaDisplay = CreateFrame("Frame", "manaDisplay", UIParent)
  25.     private.manaDisplay:SetHeight(20)
  26.     private.manaDisplay:SetWidth(210)
  27.     BackDrop:EnhanceBackdrop(private.manaDisplay)
  28.     local TEXTURE = "Interface\\BUTTONS\\WHITE8X8"
  29.        
  30.     private.manaDisplay:SetBackdrop({
  31.         bgFile = TEXTURE, tile = false, tileSize = 16,
  32.         edgeFile = self.db.profile.barBorder, edgeSize = 16,
  33.         insets = { left = 4, right = 4, top = 4, bottom = 4 },
  34.     })
  35.        
  36.     private.manaDisplay:SetBackdropGradient("HORIZONTAL", 1, 0, 0, 0, 1, 0)
  37.     -- private.manaDisplay:SetBackdropBorderColor(0.6, 0.6, 0.6, 1)
  38.        
  39.     private.manaDisplay:SetAlpha(1)
  40.    
  41.     -- create the segments that the pointer is attached to
  42.     for i = 1, 21 do
  43.         local t = private.manaDisplay.segments[i] or private.manaDisplay:CreateTexture(nil, "ARTWORK")
  44.         t:SetPoint("LEFT", private.manaDisplay.segments[i - 1], "RIGHT", 0, 0)
  45.         t:SetWidth(private.manaDisplay:GetWidth() / 21)
  46.         t:SetHeight(private.manaDisplay:GetHeight() - 10)
  47.         t:SetTexture(TEXTURE)
  48.         t:SetAlpha(0.8)
  49.         private.manaDisplay.segments[i] = t
  50.     end
  51. end
  52.  
  53. local function round(input, idp)           
  54.     local mult = 10^(idp or 0)
  55.     if input >= 0 then return math.floor(input * mult + 0.5) / mult
  56.     else return math.ceil(input * mult - 0.5) / mult end
  57. end
  58.  
  59. local in_combat
  60. function ACM:PLAYER_REGEN_ENABLED()
  61.     in_combat = false
  62.     private.manaDisplay:SetScript("OnUpdate", nil) 
  63.    
  64.     -- reset indicator to posistion 0, which is 11, or centre
  65.     private.manaDisplay.indicator:SetPoint("CENTER", private.manaDisplay.segments[11], "RIGHT")
  66.        
  67.     -- calculate overall average gain or loss of Mana
  68.     local allManaSum = 0
  69.    
  70.     local t = allManaValues
  71.     for k = 1, #t do
  72.         local v = t[k]
  73.         allManaSum = allManaSum + v
  74.     end
  75.  
  76.     local combatAverage = round((allManaSum / #t))
  77.    
  78.     combatAverage = nil
  79.     allManaValues = {}
  80. end
  81.  
  82. function ACM:PLAYER_REGEN_DISABLED()   
  83.     if #self.db.char.logs > 20 then
  84.         table.remove(self.db.char.logs, 1) -- keep log file to a max of 20 entries, removing oldest
  85.     end
  86.     in_combat = true
  87.     local firstManaValue = UnitPower("player", SPELL_POWER_MANA)
  88.    
  89.     -- must show the display in combat, or nothing happens, including calculating/printing overall average
  90.     if not private.manaDisplay:IsShown() then
  91.         private.manaDisplay:Show()
  92.     end
  93.     private.manaDisplay.leftSide:SetText("")
  94.     private.manaDisplay.rightSide:SetText("")
  95.    
  96.     local counter = 0
  97.     private.manaDisplay:SetScript("OnUpdate", function(self, elapsed)
  98.         counter = counter + elapsed
  99.         if counter < 1 then return end
  100.         counter = 0
  101.  
  102.         local currentMana = UnitPower("player", SPELL_POWER_MANA)
  103.        
  104.         local deltaMana = currentMana - firstManaValue or currentMana
  105.         firstManaValue = currentMana
  106.  
  107.         local numManaValues = #allManaValues + 1
  108.         allManaValues[numManaValues] = deltaMana
  109.        
  110.         -- get 10 (or less, if there are less) recent values
  111.         local count = numManaValues >= 10 and 10 or numManaValues
  112.         for index = numManaValues - count + 1, numManaValues - 1 do
  113.             deltaMana = deltaMana + allManaValues[index]
  114.         end
  115.        
  116.         local average = deltaMana / count
  117.         local average_normalized = floor(min(min(abs(average)/segment_span,numsegments),numsegments)+0.5)-- normalized to absolute 'segment units'
  118.         local pointer = 11 -- 1-21 means 11 = center spot, 1-10 segments left, 12-21 segments right
  119.         if average < 0 then
  120.             pointer = (mumsegments + 1) - average_normalized
  121.         elseif average > 0 then
  122.             pointer = average_normalized + (numsegments + 1)
  123.         end
  124.        
  125.         private.manaDisplay.indicator:SetPoint("CENTER", private.manaDisplay.segments[pointer], "RIGHT")
  126.        
  127.         -- losing mana
  128.         if average < 0 then
  129.             -- respect user's display settings
  130.             if self.db.profile.showLeft then
  131.                 private.manaDisplay.leftSide:SetFormattedText(L["Full Burn!"] .."\n%d", average)
  132.                 private.manaDisplay.rightSide:SetText("")
  133.             else
  134.                 private.manaDisplay.leftSide:SetFormattedText(average)
  135.                 private.manaDisplay.rightSide:SetText("")
  136.             end
  137.            
  138.         -- gaining mana
  139.         elseif average > 1 then
  140.             -- more respecting
  141.             if self.db.profile.showRight then
  142.                 private.manaDisplay.rightSide:SetFormattedText(L["Gaining Mana!"] .."\n%d", average)
  143.                 private.manaDisplay.leftSide:SetText("")
  144.             else
  145.                 private.manaDisplay.rightSide:SetFormattedText(average)
  146.                 private.manaDisplay.leftSide:SetText("")
  147.             end
  148.            
  149.         -- breaking even
  150.         else
  151.             private.manaDisplay.leftSide:SetText("")
  152.             private.manaDisplay.rightSide:SetText("")
  153.         end
  154.     end)
  155. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement