from retail
This commit is contained in:
+14
-14
@@ -342,12 +342,12 @@ local function UpdateMatchData(time, matchDataChanged, unit, index, filter, name
|
||||
return changed or data.lastChanged == time
|
||||
end
|
||||
|
||||
local function calculateNextCheck(triggerInfoRemaing, auraDataRemaing, auraDataExpirationTime, nextCheck)
|
||||
if auraDataRemaing > 0 and auraDataRemaing >= triggerInfoRemaing then
|
||||
local function calculateNextCheck(triggerInfoRemaining, auraDataRemaining, auraDataExpirationTime, nextCheck)
|
||||
if auraDataRemaining > 0 and auraDataRemaining >= triggerInfoRemaining then
|
||||
if not nextCheck then
|
||||
return auraDataExpirationTime - triggerInfoRemaing
|
||||
return auraDataExpirationTime - triggerInfoRemaining
|
||||
else
|
||||
return min(auraDataExpirationTime - triggerInfoRemaing, nextCheck)
|
||||
return min(auraDataExpirationTime - triggerInfoRemaining, nextCheck)
|
||||
end
|
||||
end
|
||||
return nextCheck
|
||||
@@ -815,7 +815,7 @@ local function GetAllUnits(unit, allUnits)
|
||||
local i = 1
|
||||
local max
|
||||
if unit == "boss" then
|
||||
max = 4
|
||||
max = MAX_BOSS_FRAMES
|
||||
elseif unit == "arena" then
|
||||
max = 5
|
||||
else
|
||||
@@ -873,7 +873,7 @@ local function TriggerInfoApplies(triggerInfo, unit)
|
||||
if triggerInfo.unit == "group" and triggerInfo.groupSubType == "party" then
|
||||
if IsInRaid() then
|
||||
-- Filter our player/party# while in raid and keep only raid units that are correct
|
||||
if unit:sub(1,4) ~= "raid" or not UnitIsUnit("player", unit) then
|
||||
if not WeakAuras.multiUnitUnits.raid[unit] or not UnitIsUnit("player", unit) then
|
||||
return false
|
||||
end
|
||||
else
|
||||
@@ -884,11 +884,11 @@ local function TriggerInfoApplies(triggerInfo, unit)
|
||||
end
|
||||
|
||||
-- Filter our player/party# while in raid
|
||||
if (triggerInfo.unit == "group" and triggerInfo.groupSubType == "group" and IsInRaid() and unit:sub(1,4) ~= "raid") then
|
||||
if (triggerInfo.unit == "group" and triggerInfo.groupSubType == "group" and IsInRaid() and not WeakAuras.multiUnitUnits.raid[unit]) then
|
||||
return false
|
||||
end
|
||||
|
||||
if triggerInfo.unit == "group" and triggerInfo.groupSubType == "raid" and unit:sub(1,4) ~= "raid" then
|
||||
if triggerInfo.unit == "group" and triggerInfo.groupSubType == "raid" and not WeakAuras.multiUnitUnits.raid[unit] then
|
||||
return false
|
||||
end
|
||||
|
||||
@@ -1356,13 +1356,13 @@ end
|
||||
|
||||
local function ScanUnit(time, arg1)
|
||||
if not arg1 then return end
|
||||
if (arg1:sub(1,4) == "raid" and IsInRaid()) then
|
||||
if (WeakAuras.multiUnitUnits.raid[arg1] and IsInRaid()) then
|
||||
ScanGroupUnit(time, matchDataChanged, "group", arg1)
|
||||
elseif ((arg1:sub(1,5) == "party" or arg1 == "player") and not IsInRaid()) then
|
||||
elseif (WeakAuras.multiUnitUnits.party[arg1] and not IsInRaid()) then
|
||||
ScanGroupUnit(time, matchDataChanged, "group", arg1)
|
||||
elseif arg1:sub(1,4) == "boss" then
|
||||
elseif WeakAuras.multiUnitUnits.boss[arg1] then
|
||||
ScanGroupUnit(time, matchDataChanged, "boss", arg1)
|
||||
elseif arg1:sub(1,5) == "arena" then
|
||||
elseif WeakAuras.multiUnitUnits.arena[arg1] then
|
||||
ScanGroupUnit(time, matchDataChanged, "arena", arg1)
|
||||
else
|
||||
ScanGroupUnit(time, matchDataChanged, nil, arg1)
|
||||
@@ -1515,11 +1515,11 @@ local function EventHandler(frame, event, arg1, arg2, ...)
|
||||
end
|
||||
end
|
||||
elseif event == "UNIT_FLAGS" then
|
||||
if arg1:sub(1,4) == "raid" or arg1:sub(1, 5) == "party" or arg1 == "player" then
|
||||
if WeakAuras.multiUnitUnits.group[arg1] then
|
||||
RecheckActiveForUnitType("group", arg1, deactivatedTriggerInfos)
|
||||
end
|
||||
elseif event == "PLAYER_FLAGS_CHANGED" then
|
||||
if arg1:sub(1,4) == "raid" or arg1:sub(1, 5) == "party" or arg1 == "player" then
|
||||
if WeakAuras.multiUnitUnits.group[arg1] then
|
||||
RecheckActiveForUnitType("group", arg1, deactivatedTriggerInfos)
|
||||
end
|
||||
elseif event == "UNIT_ENTERED_VEHICLE" or event == "UNIT_EXITED_VEHICLE" then
|
||||
|
||||
@@ -938,7 +938,7 @@ end
|
||||
local function MultiUnitLoop(Func, unit, ...)
|
||||
unit = string.lower(unit)
|
||||
if unit == "boss" or unit == "arena" then
|
||||
for i = 1, 5 do
|
||||
for i = 1, MAX_BOSS_FRAMES do
|
||||
Func(unit..i, ...)
|
||||
end
|
||||
elseif unit == "group" then
|
||||
@@ -2503,6 +2503,7 @@ function WeakAuras.WatchUnitChange(unit)
|
||||
watchUnitChange:RegisterEvent("PLAYER_TARGET_CHANGED")
|
||||
watchUnitChange:RegisterEvent("PLAYER_FOCUS_CHANGED");
|
||||
watchUnitChange:RegisterEvent("UNIT_TARGET");
|
||||
watchUnitChange:RegisterEvent("INSTANCE_ENCOUNTER_ENGAGE_UNIT");
|
||||
watchUnitChange:RegisterEvent("PARTY_MEMBERS_CHANGED");
|
||||
watchUnitChange:RegisterEvent("RAID_ROSTER_UPDATE");
|
||||
watchUnitChange:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
@@ -3036,10 +3037,9 @@ do
|
||||
if(v:GetObjectType() == "FontString") then
|
||||
local text = v:GetText();
|
||||
if(text) then
|
||||
local _, _, name = text:find("^(.+) %(%d+ [^%)]+%)$");
|
||||
local _, _, name, shortenedName = text:find("^((.-) ?+?[VI%d]*) %(%d+ .+%)$");
|
||||
if(name) then
|
||||
local _, _, shortenedName = name:find("^(.+) [VI%d]+$")
|
||||
return name, shortenedName or name;
|
||||
return name, shortenedName;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -552,7 +552,8 @@ local barPrototype = {
|
||||
["orientation"] = "HORIZONTAL",
|
||||
}
|
||||
|
||||
local function AnchorSubRegion(self, subRegion, anchorType, selfPoint, anchorPoint, anchorXOffset, anchorYOffset)
|
||||
local funcs = {
|
||||
AnchorSubRegion = function(self, subRegion, anchorType, selfPoint, anchorPoint, anchorXOffset, anchorYOffset)
|
||||
if anchorType == "area" then
|
||||
local anchor = self
|
||||
if selfPoint == "bar" then
|
||||
@@ -613,7 +614,81 @@ local function AnchorSubRegion(self, subRegion, anchorType, selfPoint, anchorPoi
|
||||
|
||||
subRegion:SetPoint(selfPoint, anchorRegion, anchorPoint, anchorXOffset, anchorYOffset)
|
||||
end
|
||||
end
|
||||
end,
|
||||
SetIconColor = function(self, r, g, b, a)
|
||||
self.icon:SetVertexColor(r, g, b, a);
|
||||
end,
|
||||
SetIconDesaturated = function(self, b)
|
||||
self.icon:SetDesaturated(b);
|
||||
end,
|
||||
SetBackgroundColor = function (self, r, g, b, a)
|
||||
self.bar:SetBackgroundColor(r, g, b, a);
|
||||
end,
|
||||
SetSparkColor = function(self, r, g, b, a)
|
||||
self.bar.spark:SetVertexColor(r, g, b, a);
|
||||
end,
|
||||
SetSparkHeight = function(self, height)
|
||||
self.bar.spark:SetHeight(height);
|
||||
end,
|
||||
SetSparkWidth = function(self, width)
|
||||
self.bar.spark:SetWidth(width);
|
||||
end,
|
||||
SetRegionWidth = function(self, width)
|
||||
self.width = width;
|
||||
self:Scale(self.scalex, self.scaley);
|
||||
end,
|
||||
SetRegionHeight = function(self, height)
|
||||
self.height = height;
|
||||
self:Scale(self.scalex, self.scaley);
|
||||
end,
|
||||
SetValue = function(self, value, total)
|
||||
local progress = 0;
|
||||
if (total ~= 0) then
|
||||
progress = value / total;
|
||||
end
|
||||
|
||||
if self.inverseDirection then
|
||||
progress = 1 - progress;
|
||||
end
|
||||
|
||||
self.bar:SetValue(progress);
|
||||
end,
|
||||
SetTime = function(self, duration, expirationTime, inverse)
|
||||
local remaining = expirationTime - GetTime();
|
||||
local progress = duration ~= 0 and remaining / duration or 0;
|
||||
-- Need to invert?
|
||||
if (
|
||||
(self.inverseDirection and not inverse)
|
||||
or (inverse and not self.inverseDirection)
|
||||
)
|
||||
then
|
||||
progress = 1 - progress;
|
||||
end
|
||||
self.bar:SetValue(progress);
|
||||
end,
|
||||
SetInverse = function(self, inverse)
|
||||
if (self.inverseDirection == inverse) then
|
||||
return;
|
||||
end
|
||||
self.inverseDirection = inverse;
|
||||
self.bar:SetValue(1 - self.bar:GetValue());
|
||||
self.subRegionEvents:Notify("InverseChanged")
|
||||
end,
|
||||
SetOrientation = function(self, orientation)
|
||||
self.orientation = orientation
|
||||
self:UpdateEffectiveOrientation()
|
||||
self.bar:SetValue(self.bar:GetValue());
|
||||
end,
|
||||
SetOverlayColor = function(self, id, r, g, b, a)
|
||||
self.bar:SetAdditionalBarColor(id, { r, g, b, a});
|
||||
end,
|
||||
GetEffectiveOrientation = function(self)
|
||||
return self.effectiveOrientation
|
||||
end,
|
||||
GetInverse = function(self)
|
||||
return self.inverseDirection
|
||||
end
|
||||
}
|
||||
|
||||
-- Called when first creating a new region/display
|
||||
local function create(parent)
|
||||
@@ -625,7 +700,6 @@ local function create(parent)
|
||||
|
||||
-- Create statusbar (inherit prototype)
|
||||
local bar = CreateFrame("FRAME", nil, region);
|
||||
WeakAuras:Mixin(bar, SmoothStatusBarMixin);
|
||||
local fg = bar:CreateTexture(nil, "BORDER");
|
||||
local bg = bar:CreateTexture(nil, "BACKGROUND");
|
||||
bg:SetAllPoints();
|
||||
@@ -664,7 +738,9 @@ local function create(parent)
|
||||
|
||||
WeakAuras.regionPrototype.create(region);
|
||||
|
||||
region.AnchorSubRegion = AnchorSubRegion
|
||||
for k, f in pairs(funcs) do
|
||||
region[k] = f
|
||||
end
|
||||
|
||||
-- Return new display/region
|
||||
return region;
|
||||
@@ -810,12 +886,6 @@ local function orientVertical(region, data)
|
||||
bar:SetOrientation("VERTICAL");
|
||||
end
|
||||
|
||||
local function orient(region, data, orientation)
|
||||
-- Apply correct orientation
|
||||
region.orientation = orientation;
|
||||
region:UpdateEffectiveOrientation()
|
||||
end
|
||||
|
||||
local function GetTexCoordZoom(texWidth)
|
||||
local texCoord = {texWidth, texWidth, texWidth, 1 - texWidth, 1 - texWidth, texWidth, 1 - texWidth, 1 - texWidth}
|
||||
return unpack(texCoord)
|
||||
@@ -959,6 +1029,8 @@ local function modify(parent, region, data)
|
||||
orientVertical(region, data);
|
||||
end
|
||||
end
|
||||
|
||||
region.subRegionEvents:Notify("OrientationChanged")
|
||||
end
|
||||
|
||||
-- Apply orientation alignment
|
||||
@@ -1090,123 +1162,16 @@ local function modify(parent, region, data)
|
||||
region.flipY = false
|
||||
end
|
||||
|
||||
region:UpdateEffectiveOrientation()
|
||||
|
||||
-- Update height
|
||||
self.bar.totalHeight = region.height * scaley
|
||||
self.bar.iconHeight = iconsize * scaley
|
||||
self:SetHeight(self.bar.totalHeight);
|
||||
icon:SetHeight(self.bar.iconHeight);
|
||||
|
||||
region:UpdateEffectiveOrientation()
|
||||
end
|
||||
-- region:Scale(1.0, 1.0);
|
||||
if data.smoothProgress then
|
||||
region.PreShow = function()
|
||||
region.bar:ResetSmoothedValue();
|
||||
end
|
||||
else
|
||||
region.PreShow = nil
|
||||
end
|
||||
|
||||
function region:SetValue(value, total)
|
||||
local progress = 0;
|
||||
if (total ~= 0) then
|
||||
progress = value / total;
|
||||
end
|
||||
|
||||
if region.inverseDirection then
|
||||
progress = 1 - progress;
|
||||
end
|
||||
|
||||
if (data.smoothProgress) then
|
||||
region.bar.targetValue = progress
|
||||
region.bar:SetSmoothedValue(progress);
|
||||
else
|
||||
region.bar:SetValue(progress);
|
||||
end
|
||||
end
|
||||
|
||||
function region:SetTime(duration, expirationTime, inverse)
|
||||
local remaining = expirationTime - GetTime();
|
||||
local progress = duration ~= 0 and remaining / duration or 0;
|
||||
-- Need to invert?
|
||||
if (
|
||||
(region.inverseDirection and not inverse)
|
||||
or (inverse and not region.inverseDirection)
|
||||
)
|
||||
then
|
||||
progress = 1 - progress;
|
||||
end
|
||||
if (data.smoothProgress) then
|
||||
region.bar.targetValue = progress
|
||||
region.bar:SetSmoothedValue(progress);
|
||||
else
|
||||
region.bar:SetValue(progress);
|
||||
end
|
||||
end
|
||||
|
||||
function region:SetIconColor(r, g, b, a)
|
||||
self.icon:SetVertexColor(r, g, b, a);
|
||||
end
|
||||
|
||||
function region:SetIconDesaturated(b)
|
||||
self.icon:SetDesaturated(b);
|
||||
end
|
||||
|
||||
function region:SetBackgroundColor(r, g, b, a)
|
||||
self.bar:SetBackgroundColor(r, g, b, a);
|
||||
end
|
||||
|
||||
function region:SetSparkColor(r, g, b, a)
|
||||
self.bar.spark:SetVertexColor(r, g, b, a);
|
||||
end
|
||||
|
||||
function region:SetSparkHeight(height)
|
||||
self.bar.spark:SetHeight(height);
|
||||
end
|
||||
|
||||
function region:SetSparkWidth(width)
|
||||
self.bar.spark:SetWidth(width);
|
||||
end
|
||||
|
||||
function region:SetRegionWidth(width)
|
||||
self.width = width;
|
||||
self:Scale(self.scalex, self.scaley);
|
||||
end
|
||||
|
||||
function region:SetRegionHeight(height)
|
||||
self.height = height;
|
||||
self:Scale(self.scalex, self.scaley);
|
||||
end
|
||||
|
||||
function region:SetInverse(inverse)
|
||||
if (region.inverseDirection == inverse) then
|
||||
return;
|
||||
end
|
||||
region.inverseDirection = inverse;
|
||||
if (data.smoothProgress) then
|
||||
if (region.bar.targetValue) then
|
||||
region.bar.targetValue = 1 - region.bar.targetValue
|
||||
region.bar:SetSmoothedValue(region.bar.targetValue);
|
||||
end
|
||||
else
|
||||
region.bar:SetValue(1 - region.bar:GetValue());
|
||||
end
|
||||
end
|
||||
|
||||
function region:SetOrientation(orientation)
|
||||
orient(region, data, orientation);
|
||||
if (data.smoothProgress) then
|
||||
if region.bar.targetValue then
|
||||
region.bar:SetSmoothedValue(region.bar.targetValue);
|
||||
end
|
||||
else
|
||||
region.bar:SetValue(region.bar:GetValue());
|
||||
end
|
||||
end
|
||||
|
||||
function region:SetOverlayColor(id, r, g, b, a)
|
||||
region.bar:SetAdditionalBarColor(id, { r, g, b, a});
|
||||
end
|
||||
-- Update internal bar alignment
|
||||
region.bar:Update();
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ local SubRegionEventSystem =
|
||||
end,
|
||||
|
||||
RemoveSubscriber = function(self, event, subRegion)
|
||||
tremove(self.events[event], subRegion)
|
||||
tremove(self.events[event], tIndexOf(self.events[event], subRegion))
|
||||
end,
|
||||
|
||||
Notify = function(self, event, ...)
|
||||
|
||||
@@ -0,0 +1,340 @@
|
||||
if not WeakAuras.IsCorrectVersion() then return end
|
||||
|
||||
local SharedMedia = LibStub("LibSharedMedia-3.0");
|
||||
local L = WeakAuras.L;
|
||||
|
||||
local default = function(parentType)
|
||||
return {
|
||||
tick_visible = true,
|
||||
tick_color = {1, 1, 1, 1},
|
||||
tick_placement_mode = "AtValue",
|
||||
tick_placement = "50",
|
||||
automatic_length = true,
|
||||
tick_thickness = 2,
|
||||
tick_length = 30,
|
||||
}
|
||||
end
|
||||
|
||||
local properties = {
|
||||
tick_visible = {
|
||||
display = L["Visibility"],
|
||||
setter = "SetVisible",
|
||||
type = "bool",
|
||||
defaultProperty = true,
|
||||
},
|
||||
tick_color = {
|
||||
display = L["Color"],
|
||||
setter = "SetTickColor",
|
||||
type = "color",
|
||||
},
|
||||
tick_placement_mode = {
|
||||
display = L["Placement Mode"],
|
||||
setter = "SetTickPlacementMode",
|
||||
type = "list",
|
||||
values = WeakAuras.tick_placement_modes,
|
||||
},
|
||||
tick_placement = {
|
||||
display = L["Placement"],
|
||||
setter = "SetTickPlacement",
|
||||
type = "number",
|
||||
validate = WeakAuras.ValidateNumeric,
|
||||
},
|
||||
automatic_length = {
|
||||
display = L["Automatic Length"],
|
||||
setter = "SetAutomaticLength",
|
||||
type = "bool",
|
||||
defaultProperty = true,
|
||||
},
|
||||
tick_thickness = {
|
||||
display = L["Thickness"],
|
||||
setter = "SetTickThickness",
|
||||
type = "number",
|
||||
min = 0,
|
||||
bigStep = 1,
|
||||
default = 2,
|
||||
},
|
||||
tick_length = {
|
||||
display = L["Length"],
|
||||
setter = "SetTickLength",
|
||||
type = "number",
|
||||
min = 0,
|
||||
bigStep = 1,
|
||||
default = 30,
|
||||
},
|
||||
}
|
||||
|
||||
local auraBarAnchor = {
|
||||
["HORIZONTAL"] = "LEFT",
|
||||
["HORIZONTAL_INVERSE"] = "RIGHT",
|
||||
["VERTICAL"] = "TOP",
|
||||
["VERTICAL_INVERSE"] = "BOTTOM",
|
||||
}
|
||||
|
||||
local auraBarAnchorInverse = {
|
||||
["HORIZONTAL"] = "RIGHT",
|
||||
["HORIZONTAL_INVERSE"] = "LEFT",
|
||||
["VERTICAL"] = "BOTTOM",
|
||||
["VERTICAL_INVERSE"] = "TOP",
|
||||
}
|
||||
|
||||
local function create()
|
||||
local subRegion = CreateFrame("FRAME", nil, UIParent)
|
||||
subRegion.texture = subRegion:CreateTexture()
|
||||
subRegion.texture:SetDrawLayer("ARTWORK", 3)
|
||||
subRegion.texture:SetAllPoints(subRegion)
|
||||
return subRegion
|
||||
end
|
||||
|
||||
local function onAcquire(subRegion)
|
||||
subRegion:Show()
|
||||
end
|
||||
|
||||
local function onRelease(subRegion)
|
||||
subRegion:Hide()
|
||||
end
|
||||
|
||||
local funcs = {
|
||||
Update = function(self, state)
|
||||
self.trigger_inverse = state.inverse
|
||||
self.state = state
|
||||
if state.progressType == "timed" then
|
||||
self.trigger_total = state.duration
|
||||
elseif state.progressType == "static" then
|
||||
self.trigger_total = state.total
|
||||
else
|
||||
self.trigger_total = nil
|
||||
end
|
||||
self:UpdateVisible()
|
||||
self:UpdateTickPlacement();
|
||||
self:UpdateTimerTick()
|
||||
end,
|
||||
OrientationChanged = function(self)
|
||||
self.orientation = self.parent:GetEffectiveOrientation()
|
||||
self.vertical = (self.orientation == "VERTICAL") or (self.orientation == "VERTICAL_INVERSE")
|
||||
|
||||
self:UpdateTickPlacement()
|
||||
self:UpdateTickSize()
|
||||
end,
|
||||
OnSizeChanged = function(self)
|
||||
if self.vertical then
|
||||
self.parentMinorSize, self.parentMajorSize = self.parent.bar:GetRealSize()
|
||||
else
|
||||
self.parentMajorSize, self.parentMinorSize = self.parent.bar:GetRealSize()
|
||||
end
|
||||
|
||||
self:UpdateTickPlacement()
|
||||
self:UpdateTickSize()
|
||||
end,
|
||||
InverseChanged = function(self)
|
||||
self.inverse = self.parent:GetInverse()
|
||||
self:UpdateTickPlacement()
|
||||
end,
|
||||
SetVisible = function(self, visible)
|
||||
if self.tick_visible ~= visible then
|
||||
self.tick_visible = visible
|
||||
self:UpdateVisible()
|
||||
end
|
||||
end,
|
||||
UpdateVisible = function(self)
|
||||
local missingProgress = self.tick_placement_mode == "AtValue" and not self.trigger_total
|
||||
if self.tick_visible and not missingProgress then
|
||||
self:Show()
|
||||
else
|
||||
self:Hide()
|
||||
end
|
||||
end,
|
||||
SetTickColor = function(self, r, g, b, a)
|
||||
self.tick_color[1], self.tick_color[2], self.tick_color[3], self.tick_color[4] = r, g, b, a or 1
|
||||
self.texture:SetTexture(r, g, b, a or 1)
|
||||
end,
|
||||
SetTickPlacementMode = function(self, placement_mode)
|
||||
if self.tick_placement_mode ~= placement_mode then
|
||||
self.tick_placement_mode = placement_mode
|
||||
self:UpdateTickPlacement()
|
||||
self:UpdateVisible()
|
||||
self:UpdateTimerTick()
|
||||
end
|
||||
end,
|
||||
UpdateTimerTick = function(self)
|
||||
if self.tick_placement_mode == "ValueOffset" and self.state and self.state.progressType == "timed" then
|
||||
if not self.TimerTick then
|
||||
self.TimerTick = self.UpdateTickPlacement
|
||||
self.parent:UpdateRegionHasTimerTick()
|
||||
self.parent.subRegionEvents:AddSubscriber("TimerTick", self)
|
||||
end
|
||||
else
|
||||
if self.TimerTick then
|
||||
self.TimerTick = nil
|
||||
self.parent:UpdateRegionHasTimerTick()
|
||||
self.parent.subRegionEvents:RemoveSubscriber("TimerTick", self)
|
||||
end
|
||||
end
|
||||
end,
|
||||
SetTickPlacement = function(self, placement)
|
||||
placement = tonumber(placement)
|
||||
if self.tick_placement ~= placement then
|
||||
self.tick_placement = placement
|
||||
self:UpdateTickPlacement()
|
||||
end
|
||||
end,
|
||||
UpdateTickPlacement = function(self)
|
||||
local offset, offsetx, offsety = self.tick_placement, 0, 0
|
||||
local width = self.parentMajorSize
|
||||
|
||||
local hide = false
|
||||
if self.tick_placement_mode == "AtValue" then
|
||||
local percent = self.trigger_total and self.trigger_total ~= 0 and self.tick_placement / self.trigger_total
|
||||
|
||||
if not self.trigger_total or percent < 0 or percent > 1 then
|
||||
hide = true
|
||||
offset = 0
|
||||
else
|
||||
offset = percent * width
|
||||
end
|
||||
elseif self.tick_placement_mode == "AtMissingValue" then
|
||||
local percent = self.trigger_total and self.trigger_total ~= 0 and self.tick_placement / self.trigger_total
|
||||
percent = 1 - percent
|
||||
if not self.trigger_total or percent < 0 or percent > 1 then
|
||||
hide = true
|
||||
offset = 0
|
||||
else
|
||||
offset = percent * width
|
||||
end
|
||||
elseif self.tick_placement_mode == "AtPercent" then
|
||||
if self.tick_placement >= 0 and self.tick_placement <= 100 then
|
||||
offset = (self.tick_placement / 100) * width
|
||||
else
|
||||
hide = true
|
||||
offset = 0
|
||||
end
|
||||
elseif self.tick_placement_mode == "ValueOffset" then
|
||||
if self.trigger_total and self.trigger_total ~= 0 then
|
||||
local atValue
|
||||
if self.state.progressType == "timed" then
|
||||
atValue = self.state.expirationTime - GetTime() + self.tick_placement
|
||||
else
|
||||
atValue = self.state.value + self.tick_placement
|
||||
end
|
||||
|
||||
local percent = atValue / self.trigger_total
|
||||
if not self.trigger_total or percent < 0 or percent > 1 then
|
||||
hide = true
|
||||
offset = 0
|
||||
else
|
||||
offset = percent * width
|
||||
end
|
||||
else
|
||||
hide = true
|
||||
offset = 0
|
||||
end
|
||||
end
|
||||
|
||||
if hide then
|
||||
self.texture:Hide()
|
||||
else
|
||||
self.texture:Show()
|
||||
end
|
||||
|
||||
|
||||
|
||||
local inverse = self.inverse
|
||||
if self.trigger_inverse then
|
||||
inverse = not inverse
|
||||
end
|
||||
|
||||
if (self.orientation == "HORIZONTAL_INVERSE") or (self.orientation == "VERTICAL") then
|
||||
offset = -offset
|
||||
end
|
||||
|
||||
if inverse then
|
||||
offset = -offset
|
||||
end
|
||||
|
||||
if (self.vertical) then
|
||||
offsety = offset
|
||||
else
|
||||
offsetx = offset
|
||||
end
|
||||
local side = inverse and auraBarAnchorInverse or auraBarAnchor
|
||||
self:ClearAllPoints()
|
||||
self:SetPoint("CENTER", self.parent.bar, side[self.orientation], offsetx, offsety)
|
||||
end,
|
||||
SetAutomaticLength = function(self, automatic_length)
|
||||
if self.automatic_length ~= automatic_length then
|
||||
self.automatic_length = automatic_length
|
||||
self:UpdateTickSize()
|
||||
end
|
||||
end,
|
||||
SetTickThickness = function(self, thickness, forced)
|
||||
if self.tick_thickness ~= thickness then
|
||||
self.tick_thickness = thickness
|
||||
self:UpdateTickSize()
|
||||
end
|
||||
end,
|
||||
SetTickLength = function(self, length, forced)
|
||||
if self.length ~= length then
|
||||
self.tick_length = length
|
||||
self:UpdateTickSize()
|
||||
end
|
||||
end,
|
||||
UpdateTickSize = function(self)
|
||||
if self.vertical then
|
||||
self:SetHeight(self.tick_thickness)
|
||||
else
|
||||
self:SetWidth(self.tick_thickness)
|
||||
end
|
||||
|
||||
local length = self.automatic_length and self.parentMinorSize or self.tick_length
|
||||
if self.vertical then
|
||||
self:SetWidth(length)
|
||||
else
|
||||
self:SetHeight(length)
|
||||
end
|
||||
end
|
||||
}
|
||||
|
||||
local function modify(parent, region, parentData, data, first)
|
||||
|
||||
region:SetParent(parent)
|
||||
region.orientation = parent.effectiveOrientation
|
||||
region.inverse = parentData.inverse
|
||||
region.trigger_inverse = false
|
||||
region.vertical = region.orientation == "VERTICAL" or region.orientation == "VERTICAL_INVERSE"
|
||||
if (region.vertical) then
|
||||
region.parentMinorSize, region.parentMajorSize = parent.bar:GetRealSize()
|
||||
else
|
||||
region.parentMajorSize, region.parentMinorSize = parent.bar:GetRealSize()
|
||||
end
|
||||
|
||||
region.parent = parent
|
||||
region.parentData = parentData
|
||||
region.tick_visible = data.tick_visible
|
||||
region.tick_color = data.tick_color
|
||||
region.tick_placement_mode = data.tick_placement_mode
|
||||
region.tick_placement = tonumber(data.tick_placement)
|
||||
region.automatic_length = data.automatic_length
|
||||
region.tick_thickness = data.tick_thickness
|
||||
region.tick_length = data.tick_length
|
||||
|
||||
for k, v in pairs(funcs) do
|
||||
region[k] = v
|
||||
end
|
||||
|
||||
region:SetVisible(data.tick_visible)
|
||||
region:SetTickColor(unpack(data.tick_color))
|
||||
|
||||
region:UpdateTickSize()
|
||||
|
||||
parent.subRegionEvents:AddSubscriber("Update", region)
|
||||
parent.subRegionEvents:AddSubscriber("OrientationChanged", region)
|
||||
parent.subRegionEvents:AddSubscriber("InverseChanged", region)
|
||||
parent:SetScript("OnSizeChanged", function() region:OnSizeChanged() end)
|
||||
|
||||
region.TimerTick = nil
|
||||
end
|
||||
|
||||
local function supports(regionType)
|
||||
return regionType == "aurabar"
|
||||
end
|
||||
|
||||
WeakAuras.RegisterSubRegionType("subtick", L["Tick"], supports, create, modify, onAcquire, onRelease, default, nil, properties);
|
||||
@@ -330,6 +330,13 @@ WeakAuras.spark_hide_types = {
|
||||
BOTH = L["Full/Empty"]
|
||||
}
|
||||
|
||||
WeakAuras.tick_placement_modes = {
|
||||
AtValue = L["At Value"],
|
||||
AtMissingValue = L["At missing Value"],
|
||||
AtPercent = L["At Percent"],
|
||||
ValueOffset = L["Offset from progress"]
|
||||
}
|
||||
|
||||
WeakAuras.containment_types = {
|
||||
OUTSIDE = L["Outside"],
|
||||
INSIDE = L["Inside"]
|
||||
|
||||
+9
-18
@@ -1917,7 +1917,7 @@ local function scanForLoadsImpl(toCheck, event, arg1, ...)
|
||||
|
||||
local _, class = UnitClass("player");
|
||||
|
||||
local incombat = UnitAffectingCombat("player") -- or UnitAffectingCombat("pet");
|
||||
local inCombat = UnitAffectingCombat("player") -- or UnitAffectingCombat("pet");
|
||||
local vehicle = UnitInVehicle("player") or UnitOnTaxi("player")
|
||||
local vehicleUi = UnitHasVehicleUI("player")
|
||||
|
||||
@@ -1936,8 +1936,8 @@ local function scanForLoadsImpl(toCheck, event, arg1, ...)
|
||||
if (data and not data.controlledChildren) then
|
||||
local loadFunc = loadFuncs[id];
|
||||
local loadOpt = loadFuncsForOptions[id];
|
||||
shouldBeLoaded = loadFunc and loadFunc("ScanForLoads_Auras", incombat, vehicle, vehicleUi, group, player, realm, class, faction, playerLevel, zone, size, difficulty);
|
||||
couldBeLoaded = loadOpt and loadOpt("ScanForLoads_Auras", incombat, vehicle, vehicleUi, group, player, realm, class, faction, playerLevel, zone, size, difficulty);
|
||||
shouldBeLoaded = loadFunc and loadFunc("ScanForLoads_Auras", inCombat, vehicle, vehicleUi, group, player, realm, class, faction, playerLevel, zone, size, difficulty);
|
||||
couldBeLoaded = loadOpt and loadOpt("ScanForLoads_Auras", inCombat, vehicle, vehicleUi, group, player, realm, class, faction, playerLevel, zone, size, difficulty);
|
||||
|
||||
if(shouldBeLoaded and not loaded[id]) then
|
||||
changed = changed + 1;
|
||||
@@ -2032,18 +2032,6 @@ function WeakAuras.RegisterLoadEvents()
|
||||
WeakAuras.StopProfileSystem("load");
|
||||
end);
|
||||
|
||||
--[[
|
||||
C_Timer.NewTicker(0.5, function()
|
||||
WeakAuras.StartProfileSystem("load");
|
||||
local zoneId = C_Map.GetBestMapForUnit("player");
|
||||
if loadFrame.zoneId ~= zoneId then
|
||||
WeakAuras.ScanForLoads(nil, "ZONE_CHANGED")
|
||||
loadFrame.zoneId = zoneId;
|
||||
end
|
||||
WeakAuras.StopProfileSystem("load");
|
||||
end)
|
||||
]]
|
||||
|
||||
unitLoadFrame:SetScript("OnEvent", function(frame, e, arg1, ...)
|
||||
WeakAuras.StartProfileSystem("load");
|
||||
if (arg1 == "player") then
|
||||
@@ -5758,7 +5746,7 @@ end
|
||||
local function ApplyStateToRegion(id, cloneId, region, parent)
|
||||
region:Update();
|
||||
|
||||
region.subRegionEvents:Notify("Update")
|
||||
region.subRegionEvents:Notify("Update", region.state, region.states)
|
||||
|
||||
WeakAuras.UpdateMouseoverTooltip(region);
|
||||
region:Expand();
|
||||
@@ -6232,7 +6220,7 @@ function WeakAuras.ReplacePlaceHolders(textStr, region, customFunc, useHiddenSta
|
||||
result = result .. string.sub(textStr, start, currentPos - 1)
|
||||
elseif state == 2 and currentPos > start then
|
||||
local symbol = string.sub(textStr, start, currentPos - 1)
|
||||
result = result .. ValueForSymbol(symbol, region, customFunc, regionState, regionStates)
|
||||
result = result .. ValueForSymbol(symbol, region, customFunc, regionState, regionStates, useHiddenStates)
|
||||
elseif state == 1 then
|
||||
result = result .. "%"
|
||||
end
|
||||
@@ -6692,11 +6680,14 @@ for i = 1, 5 do
|
||||
end
|
||||
|
||||
for i = 1, 4 do
|
||||
trackableUnits["boss" .. i] = true
|
||||
trackableUnits["party" .. i] = true
|
||||
trackableUnits["partypet" .. i] = true
|
||||
end
|
||||
|
||||
for i = 1, MAX_BOSS_FRAMES do
|
||||
trackableUnits["boss" .. i] = true
|
||||
end
|
||||
|
||||
for i = 1, 40 do
|
||||
trackableUnits["raid" .. i] = true
|
||||
trackableUnits["raidpet" .. i] = true
|
||||
|
||||
@@ -57,3 +57,4 @@ SubRegionTypes\SubText.lua
|
||||
SubRegionTypes\Border.lua
|
||||
SubRegionTypes\Glow.lua
|
||||
SubRegionTypes\BarModel.lua
|
||||
SubRegionTypes\Tick.lua
|
||||
|
||||
@@ -73,13 +73,6 @@ local function createOptions(id, data)
|
||||
name = L["Inverse"],
|
||||
order = 35
|
||||
},
|
||||
smoothProgress = {
|
||||
type = "toggle",
|
||||
width = WeakAuras.normalWidth,
|
||||
name = L["Smooth Progress"],
|
||||
desc = L["Animates progress changes"],
|
||||
order = 37
|
||||
},
|
||||
useTooltip = {
|
||||
type = "toggle",
|
||||
width = WeakAuras.normalWidth,
|
||||
@@ -603,7 +596,6 @@ local templates = {
|
||||
height = 30,
|
||||
barColor = { 0, 1, 0, 1},
|
||||
inverse = true,
|
||||
smoothProgress = true,
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -615,7 +607,6 @@ local templates = {
|
||||
rotateText = "LEFT",
|
||||
orientation = "VERTICAL_INVERSE",
|
||||
inverse = true,
|
||||
smoothProgress = true,
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
@@ -221,13 +221,6 @@ local function createOptions(id, data)
|
||||
bigStep = 0.01,
|
||||
isPercent = true
|
||||
},
|
||||
smoothProgress = {
|
||||
type = "toggle",
|
||||
width = WeakAuras.normalWidth,
|
||||
name = L["Smooth Progress"],
|
||||
desc = L["Animates progress changes"],
|
||||
order = 55.1
|
||||
},
|
||||
textureWrapMode = {
|
||||
type = "select",
|
||||
width = WeakAuras.normalWidth,
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
if not WeakAuras.IsCorrectVersion() then return end
|
||||
|
||||
local SharedMedia = LibStub("LibSharedMedia-3.0");
|
||||
local L = WeakAuras.L;
|
||||
|
||||
local indentWidth = WeakAuras.normalWidth * 0.06
|
||||
|
||||
local function createOptions(parentData, data, index, subIndex)
|
||||
local options = {
|
||||
__title = L["Tick %s"]:format(subIndex),
|
||||
__order = 1,
|
||||
__up = function()
|
||||
if (WeakAuras.ApplyToDataOrChildData(parentData, WeakAuras.MoveSubRegionUp, index, "subtick")) then
|
||||
WeakAuras.ReloadOptions2(parentData.id, parentData)
|
||||
end
|
||||
end,
|
||||
__down = function()
|
||||
if (WeakAuras.ApplyToDataOrChildData(parentData, WeakAuras.MoveSubRegionDown, index, "subtick")) then
|
||||
WeakAuras.ReloadOptions2(parentData.id, parentData)
|
||||
end
|
||||
end,
|
||||
__duplicate = function()
|
||||
if (WeakAuras.ApplyToDataOrChildData(parentData, WeakAuras.DuplicateSubRegion, index, "subtick")) then
|
||||
WeakAuras.ReloadOptions2(parentData.id, parentData)
|
||||
end
|
||||
end,
|
||||
__delete = function()
|
||||
if (WeakAuras.ApplyToDataOrChildData(parentData, WeakAuras.DeleteSubRegion, index, "subtick")) then
|
||||
WeakAuras.ReloadOptions2(parentData.id, parentData)
|
||||
end
|
||||
end,
|
||||
tick_visible = {
|
||||
type = "toggle",
|
||||
width = WeakAuras.normalWidth,
|
||||
name = L["Show Tick"],
|
||||
order = 1,
|
||||
},
|
||||
tick_color = {
|
||||
type = "color",
|
||||
width = WeakAuras.normalWidth,
|
||||
name = L["Color"],
|
||||
order = 2,
|
||||
hasAlpha = true,
|
||||
},
|
||||
tick_placement_mode = {
|
||||
type = "select",
|
||||
width = WeakAuras.normalWidth,
|
||||
name = L["Tick Mode"],
|
||||
order = 3,
|
||||
values = WeakAuras.tick_placement_modes,
|
||||
desc = L["Relative mode positions the tick at the position relative to the total width of the progress bar.\nAbsolute mode positions the tick at a fixed value."],
|
||||
},
|
||||
tick_placement = {
|
||||
type = "input",
|
||||
width = WeakAuras.normalWidth,
|
||||
name = L["Tick Placement"],
|
||||
order = 4,
|
||||
validate = WeakAuras.ValidateNumeric,
|
||||
desc = L["Enter in a value for the tick's placement."],
|
||||
},
|
||||
tick_space1 = {
|
||||
type = "description",
|
||||
width = WeakAuras.normalWidth,
|
||||
name = "",
|
||||
order = 5,
|
||||
},
|
||||
automatic_length = {
|
||||
type = "toggle",
|
||||
width = WeakAuras.normalWidth,
|
||||
name = L["Automatic length"],
|
||||
order = 6,
|
||||
desc = L["Matches the height setting of a horizontal bar or width for a vertical bar."],
|
||||
},
|
||||
tick_thickness = {
|
||||
type = "range",
|
||||
width = WeakAuras.normalWidth,
|
||||
name = L["Thickness"],
|
||||
order = 7,
|
||||
min = 0,
|
||||
softMax = 20,
|
||||
step = 1,
|
||||
},
|
||||
tick_length = {
|
||||
type = "range",
|
||||
width = WeakAuras.normalWidth,
|
||||
name = L["Length"],
|
||||
order = 8,
|
||||
min = 0,
|
||||
softMax = 50,
|
||||
step = 1,
|
||||
disabled = function() return data.automatic_length end,
|
||||
},
|
||||
}
|
||||
return options
|
||||
end
|
||||
|
||||
WeakAuras.RegisterSubRegionOptions("subtick", createOptions, L["Places a tick on the bar"]);
|
||||
@@ -32,6 +32,7 @@ SubRegionOptions\SubText.lua
|
||||
SubRegionOptions\Border.lua
|
||||
SubRegionOptions\Glow.lua
|
||||
SubRegionOptions\BarModel.lua
|
||||
SubRegionOptions\Tick.lua
|
||||
|
||||
Cache.lua
|
||||
|
||||
|
||||
Reference in New Issue
Block a user