Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local Combo = {isComboPoints = true}
- ShadowUF.ComboPoints = Combo
- local function createIcons(config, pointsFrame)
- local point, relativePoint, x, y
- local pointsConfig = pointsFrame.cpConfig
- if( config.growth == "LEFT" ) then
- point, relativePoint = "BOTTOMRIGHT", "BOTTOMLEFT"
- x = config.spacing
- elseif( config.growth == "UP" ) then
- point, relativePoint = "BOTTOMLEFT", "TOPLEFT"
- y = config.spacing
- elseif( config.growth == "DOWN" ) then
- point, relativePoint = "TOPLEFT", "BOTTOMLEFT"
- y = config.spacing
- else
- point, relativePoint = "BOTTOMLEFT", "BOTTOMRIGHT"
- x = config.spacing
- end
- x = x or 0
- y = y or 0
- for id=1, pointsConfig.max do
- pointsFrame.icons[id] = pointsFrame.icons[id] or pointsFrame:CreateTexture(nil, "OVERLAY")
- local texture = pointsFrame.icons[id]
- texture:SetTexture(pointsConfig.icon)
- texture:SetSize(config.size or 16, config.size or 16)
- if( id > 1 ) then
- texture:ClearAllPoints()
- texture:SetPoint(point, pointsFrame.icons[id - 1], relativePoint, x, y)
- else
- texture:ClearAllPoints()
- texture:SetPoint("CENTER", pointsFrame, "CENTER", 0, 0)
- end
- end
- end
- local function createBlocks(config, pointsFrame)
- local pointsConfig = pointsFrame.cpConfig
- if pointsConfig.max == 0 then return end
- pointsFrame.visibleBlocks = pointsConfig.max
- -- Position bars, the 5 accounts for borders
- local blockWidth = (pointsFrame:GetWidth() - ((pointsConfig.max / (pointsConfig.grouping or 1)) - 1)) / pointsConfig.max
- for id=1, pointsConfig.max do
- pointsFrame.blocks[id] = pointsFrame.blocks[id] or pointsFrame:CreateTexture(nil, "OVERLAY")
- local texture = pointsFrame.blocks[id]
- local color = ShadowUF.db.profile.powerColors[pointsConfig.colorKey or "COMBOPOINTS"]
- texture:SetVertexColor(color.r, color.g, color.b, color.a)
- texture:SetHorizTile(false)
- texture:SetTexture(ShadowUF.Layout.mediaPath.statusbar)
- texture:SetHeight(pointsFrame:GetHeight())
- texture:SetWidth(blockWidth)
- texture:ClearAllPoints()
- if not texture.background and config.background then
- texture.background = pointsFrame:CreateTexture(nil, "BORDER")
- texture.background:SetHeight(1)
- texture.background:SetWidth(1)
- texture.background:SetAllPoints(texture)
- texture.background:SetHorizTile(false)
- texture.background:SetVertexColor(color.r, color.g, color.b, ShadowUF.db.profile.bars.backgroundAlpha)
- texture.background:SetTexture(ShadowUF.Layout.mediaPath.statusbar)
- end
- if texture.background then
- texture.background:SetShown(config.background)
- end
- local offset = 1
- if pointsConfig.grouping and ((id - 1) % pointsConfig.grouping ~= 0) then
- offset = 0
- end
- if( config.growth == "LEFT" ) then
- if( id > 1 ) then
- texture:SetPoint("TOPRIGHT", pointsFrame.blocks[id - 1], "TOPLEFT", -offset, 0)
- else
- texture:SetPoint("TOPRIGHT", pointsFrame, "TOPRIGHT", 0, 0)
- end
- else
- if( id > 1 ) then
- texture:SetPoint("TOPLEFT", pointsFrame.blocks[id - 1], "TOPRIGHT", offset, 0)
- else
- texture:SetPoint("TOPLEFT", pointsFrame, "TOPLEFT", 0, 0)
- end
- end
- end
- end
- function Combo:OnLayoutApplied(frame, config)
- local key = self:GetComboPointType()
- local pointsFrame = frame[key]
- if( not pointsFrame ) then return end
- pointsFrame:SetFrameLevel(frame.topFrameLevel + 1)
- local pointsConfig = pointsFrame.cpConfig
- config = config[key]
- -- Not a bar so set the containers frame configuration
- if( config and not config.isBar ) then
- ShadowUF.Layout:ToggleVisibility(pointsFrame, frame.visibility[key])
- end
- if( not frame.visibility[key] ) then return end
- -- Hide the active combo points
- if( pointsFrame.points ) then
- for _, texture in pairs(pointsFrame.points) do
- texture:Hide()
- end
- end
- -- Setup for bar display!
- if( config.isBar ) then
- pointsFrame.blocks = pointsFrame.blocks or {}
- pointsFrame.points = pointsFrame.blocks
- createBlocks(config, pointsFrame, pointsConfig.max)
- -- guess not, will have to do icons :(
- else
- pointsFrame.icons = pointsFrame.icons or {}
- pointsFrame.points = pointsFrame.icons
- createIcons(config, pointsFrame, pointsConfig.max)
- -- Position the main frame
- pointsFrame:SetSize(0.1, 0.1)
- ShadowUF.Layout:AnchorFrame(frame, pointsFrame, config)
- end
- end
- function Combo:OnDisable(frame)
- frame:UnregisterAll(self)
- end
- function Combo:UpdateBarBlocks(frame, event, unit, powerType)
- local key = self:GetComboPointType()
- local pointsFrame = frame[key]
- if( not pointsFrame or not pointsFrame.cpConfig.eventType or not pointsFrame.blocks ) then return end
- if( event and powerType ~= pointsFrame.cpConfig.eventType ) then return end
- local max = self.GetMaxPoints and self:GetMaxPoints() or UnitPowerMax("player", pointsFrame.cpConfig.powerType)
- if( max == 0 or pointsFrame.visibleBlocks == max ) then return end
- pointsFrame.cpConfig.max = max
- if( not ShadowUF.db.profile.units[frame.unitType][key].isBar ) then
- createIcons(ShadowUF.db.profile.units[frame.unitType][key], pointsFrame)
- pointsFrame.visibleBlocks = max
- return
- else
- createBlocks(ShadowUF.db.profile.units[frame.unitType][key], pointsFrame)
- pointsFrame.visibleBlocks = max
- end
- local blockWidth = (pointsFrame:GetWidth() - (max - 1)) / max
- for id=1, max do
- pointsFrame.blocks[id]:SetWidth(blockWidth)
- pointsFrame.blocks[id]:Show()
- end
- for id=max+1, #pointsFrame.blocks do
- pointsFrame.blocks[id]:Hide()
- end
- end
- function Combo:Update(frame, event, unit, powerType)
- local key = self:GetComboPointType()
- -- Anything power based will have an eventType to filter on
- if( event and frame[key].cpConfig.eventType and frame[key].cpConfig.eventType ~= powerType ) then return end
- local points = self:GetPoints(unit)
- -- Bar display, hide it if we don't have any combo points
- if( ShadowUF.db.profile.units[frame.unitType][key].isBar ) then
- ShadowUF.Layout:SetBarVisibility(frame, key, ShadowUF.db.profile.units[frame.unitType][key].showAlways or (points and points > 0))
- end
- local hasEchoing = IsPlayerSpell(385616)
- for id, pointTexture in pairs(frame[key].points) do
- local color = ShadowUF.db.profile.powerColors["COMBOPOINTS"]
- if hasEchoing then
- for idx=1,40 do
- local name, _, _, _, _, _, _, _, _, spellId = UnitBuff("player", idx)
- if spellId ~= nil then
- if id == 5 and spellId == 354838 then
- color = ShadowUF.db.profile.powerColors["CHI"]
- end
- if id == 4 and spellId == 323560 then
- color = ShadowUF.db.profile.powerColors["CHI"]
- end
- if id == 3 and spellId == 323559 then
- color = ShadowUF.db.profile.powerColors["CHI"]
- end
- if id == 2 and spellId == 323558 then
- color = ShadowUF.db.profile.powerColors["CHI"]
- end
- end
- end
- if( id <= points ) then
- pointTexture:SetVertexColor(color.r, color.g, color.b, color.a)
- pointTexture:Show()
- else
- pointTexture.background:SetVertexColor(color.r, color.g, color.b, 0.3)
- pointTexture:Hide()
- end
- else
- if( id <= points ) then
- pointTexture:Show()
- else
- pointTexture:Hide()
- end
- end
- end
- end
- function Combo:OnLayoutWidgets(frame)
- local key = self:GetComboPointType()
- if( not frame.visibility[key] or not ShadowUF.db.profile.units[frame.unitType][key].isBar or not frame[key].blocks) then return end
- local height = frame[key]:GetHeight()
- for _, block in pairs(frame[key].blocks) do
- block:SetHeight(height)
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement