Files
coa-weakauras/WeakAuras/SubRegionTypes/BarModel.lua
T
Bunny67 f2e1a0928d init
2020-06-02 23:40:06 +03:00

156 lines
3.3 KiB
Lua

if not WeakAuras.IsCorrectVersion() then return end
local SharedMedia = LibStub("LibSharedMedia-3.0");
local L = WeakAuras.L;
local default = function(parentType)
return {
bar_model_visible = true,
bar_model_alpha = 1,
model_x = 0,
model_y = 0,
model_z = 0,
rotation = 0,
model_path = "235338",
bar_model_clip = true
}
end
local properties = {
bar_model_visible = {
display = L["Visibility"],
setter = "SetVisible",
type = "bool",
defaultProperty = true
},
bar_model_alpha = {
display = L["Alpha"],
setter = "SetAlpha",
type = "number",
min = 0,
max = 1,
bigStep = 0.1
}
}
local function CreateModel()
return CreateFrame("PlayerModel", nil, UIParent)
end
-- Keep the two model apis separate
local pool = CreateObjectPool(CreateModel)
local function AcquireModel(region, data)
local model = pool:Acquire()
model:ClearAllPoints()
if region.parentType == "aurabar" then
model:SetAllPoints(region.parent.bar)
else
model:SetAllPoints(region.parent)
end
model:SetParent(region)
--model:SetKeepModelOnHide(true)
model:Show()
-- Adjust model
model:SetModel(data.model_path)
model:SetPosition(data.model_z, data.model_x, data.model_y);
model:SetScript("OnShow", function()
model:SetModel(data.model_path)
model:SetPosition(data.model_z, data.model_x, data.model_y);
end)
model:SetFacing(0);
return model
end
local function ReleaseModel(model)
--model:SetKeepModelOnHide(false)
model:Hide()
pool:Release(model)
end
local function create()
local subRegion = CreateFrame("FRAME", nil, UIParent)
--subRegion:SetClipsChildren(true)
return subRegion
end
local function onAcquire(subRegion)
subRegion:Show()
end
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)
region.model = nil
end
region.data = data
region.parentType = parentData.regionType
region.parent = parent
region:SetParent(parent)
if parentData.regionType == "aurabar" then
if data.bar_model_clip then
region:SetAllPoints(parent.bar.fgFrame)
else
region:SetAllPoints(parent.bar)
end
else
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)
end
local function supports(regionType)
return regionType == "aurabar" or regionType == "icon"
end
WeakAuras.RegisterSubRegionType("subbarmodel", L["Model"], supports, create, modify, onAcquire, onRelease, default, nil, properties);