from retail

This commit is contained in:
Bunny67
2020-12-27 05:57:15 +03:00
parent 7cbc40c959
commit e0672fe539
31 changed files with 291 additions and 131 deletions
+76 -33
View File
@@ -4,6 +4,8 @@ local AddonName, Private = ...
local SharedMedia = LibStub("LibSharedMedia-3.0");
local L = WeakAuras.L;
Private.barmodels = {}
local default = function(parentType)
return {
bar_model_visible = true,
@@ -35,8 +37,23 @@ local properties = {
}
}
local function PreShow(self)
local data = self.data
--self:SetKeepModelOnHide(true)
self:Show()
-- Adjust model
self:SetModel(data.model_path)
self:SetPosition(data.model_z, data.model_x, data.model_y);
self:SetFacing(0);
self:SetAlpha(self.region.alpha)
end
local function CreateModel()
return CreateFrame("PlayerModel", nil, UIParent)
local model = CreateFrame("PlayerModel", nil, UIParent)
model.PreShow = PreShow;
return model
end
-- Keep the two model apis separate
@@ -44,6 +61,8 @@ local pool = CreateObjectPool(CreateModel)
local function AcquireModel(region, data)
local model = pool:Acquire()
model.data = data
Private.barmodels[model] = true
model:ClearAllPoints()
@@ -72,12 +91,66 @@ local function ReleaseModel(model)
--model:SetKeepModelOnHide(false)
model:Hide()
pool:Release(model)
Private.barmodels[model] = nil
end
local funcs = {
SetVisible = function(self, visible)
self.visible = visible
self:UpdateVisible()
end,
SetAlpha = function(self, alpha)
if self.model then
self.model:SetModelAlpha(alpha)
end
self.alpha = alpha
end,
AlphaChanged = function(self)
self:SetAlpha(self.alpha)
end,
UpdateVisible = function(self)
local effectiveVisible = self.parent_visible and self.visible and not self.toosmall
if effectiveVisible then
if not self.model then
self.model = AcquireModel(self, self.data)
self.model:SetAlpha(self.alpha)
self.model.region = self
end
else
if self.model then
ReleaseModel(self.model)
self.model = nil
end
end
end,
PreShow = function(self)
self.parent_visible = true
self:UpdateVisible()
end,
PreHide = function(self)
self.parent_visible = false
self:UpdateVisible()
end,
OnSizeChanged = function(self)
-- WORKAROUND clipping being broken on the SL beta with some setups with bars of zero width
if self:GetWidth() < 1 or self:GetHeight() < 1 then
self.toosmall = true
else
self.toosmall = false
end
self:UpdateVisible()
end
}
local function create()
local subRegion = CreateFrame("FRAME", nil, UIParent)
--subRegion:SetClipsChildren(true)
for k, v in pairs(funcs) do
subRegion[k] = v
end
subRegion:SetScript("OnSizeChanged", subRegion.OnSizeChanged)
return subRegion
end
@@ -89,34 +162,6 @@ local function onRelease(subRegion)
subRegion:Hide()
end
local funcs = {
SetVisible = function(self, visible)
self.visible = visible
if visible then
if not self.model then
self.model = AcquireModel(self, self.data)
self.model:SetAlpha(self.alpha)
end
self:Show()
else
self:Hide()
if self.model then
ReleaseModel(self.model)
self.model = nil
end
end
end,
SetAlpha = function(self, alpha)
if self.model then
self.model:SetAlpha(alpha)
end
self.alpha = alpha
end,
AlphaChanged = function(self)
self:SetAlpha(self.alpha)
end
}
local function modify(parent, region, parentData, data, first)
if region.model then
ReleaseModel(region.model)
@@ -139,14 +184,12 @@ local function modify(parent, region, parentData, data, first)
region:SetAllPoints(parent)
end
for k, v in pairs(funcs) do
region[k] = v
end
region:SetAlpha(data.bar_model_alpha)
region:SetVisible(data.bar_model_visible)
parent.subRegionEvents:AddSubscriber("AlphaChanged", region)
parent.subRegionEvents:AddSubscriber("PreShow", region)
parent.subRegionEvents:AddSubscriber("PreHide", region)
end
local function supports(regionType)