You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
251 lines
6.8 KiB
251 lines
6.8 KiB
local _, Cell = ...
|
|
local F = Cell.funcs
|
|
local A = Cell.animations
|
|
|
|
-------------------------------------------------
|
|
-- pool
|
|
-------------------------------------------------
|
|
local pool
|
|
|
|
-- local function creationFunc()
|
|
-- local f = CreateFrame("Frame")
|
|
-- f:Hide()
|
|
|
|
-- local tex = f:CreateTexture(nil, "ARTWORK")
|
|
-- tex:SetTexture("Interface/AddOns/Cell/Media/FlipBooks/heart.png")
|
|
-- tex:SetAllPoints(f)
|
|
-- tex:SetParentKey("Flipbook")
|
|
|
|
-- local ag = f:CreateAnimationGroup()
|
|
-- ag:SetLooping("REPEAT")
|
|
|
|
-- local flip = ag:CreateAnimation("FlipBook")
|
|
-- flip:SetDuration(1.6)
|
|
-- flip:SetFlipBookColumns(2)
|
|
-- flip:SetFlipBookRows(8)
|
|
-- flip:SetFlipBookFrames(16)
|
|
-- flip:SetChildKey("Flipbook")
|
|
|
|
-- f:SetScript("OnShow", function()
|
|
-- ag:Play()
|
|
-- end)
|
|
|
|
-- A:CreateFadeIn(f, 0, 1, 0.2)
|
|
-- A:CreateFadeOut(f, 1, 0, 0.2)
|
|
|
|
-- return f
|
|
-- end
|
|
|
|
local function creationFunc()
|
|
local f = CreateFrame("Frame")
|
|
f:Hide()
|
|
|
|
local tex = f:CreateTexture(nil, "ARTWORK")
|
|
tex:SetTexture("Interface/AddOns/Cell/Media/star.png")
|
|
tex:SetAllPoints(f)
|
|
|
|
local ag = f:CreateAnimationGroup()
|
|
ag:SetScript("OnFinished", function()
|
|
pool:Release(f)
|
|
end)
|
|
|
|
-- in -------------------------------------------------------------------- --
|
|
local in_t = ag:CreateAnimation("Translation")
|
|
in_t:SetOrder(1)
|
|
in_t:SetDuration(0.3)
|
|
in_t:SetSmoothing("IN_OUT")
|
|
|
|
local in_s = ag:CreateAnimation("Scale")
|
|
in_s:SetOrder(1)
|
|
in_s:SetScaleFrom(0, 0)
|
|
in_s:SetScaleTo(1, 1)
|
|
in_s:SetDuration(0.3)
|
|
|
|
local in_a = ag:CreateAnimation("Alpha")
|
|
in_a:SetOrder(1)
|
|
in_a:SetFromAlpha(0)
|
|
in_a:SetToAlpha(1)
|
|
in_a:SetDuration(0.3)
|
|
|
|
local in_spinning = ag:CreateAnimation("Rotation")
|
|
in_spinning:SetOrder(1)
|
|
in_spinning:SetDegrees(-360)
|
|
in_spinning:SetDuration(0.5)
|
|
in_spinning:SetEndDelay(0.5)
|
|
|
|
-- main ------------------------------------------------------------------ --
|
|
local main_s1 = ag:CreateAnimation("Scale")
|
|
main_s1:SetOrder(2)
|
|
main_s1:SetScaleTo(1.25, 1.25)
|
|
main_s1:SetDuration(0.2)
|
|
|
|
local main_t1 = ag:CreateAnimation("Translation")
|
|
main_t1:SetOffset(0, 5)
|
|
main_t1:SetDuration(0.1)
|
|
main_t1:SetOrder(2)
|
|
main_t1:SetSmoothing("OUT")
|
|
|
|
local main_t2 = ag:CreateAnimation("Translation")
|
|
main_t2:SetOffset(0, -5)
|
|
main_t2:SetDuration(0.1)
|
|
main_t2:SetOrder(2)
|
|
main_t2:SetSmoothing("IN")
|
|
main_t2:SetStartDelay(0.1)
|
|
main_t2:SetEndDelay(0.25)
|
|
|
|
local main_s2 = ag:CreateAnimation("Scale")
|
|
main_s2:SetOrder(3)
|
|
main_s2:SetScaleTo(1.25, 1.25)
|
|
main_s2:SetDuration(0.2)
|
|
|
|
local main_t3 = ag:CreateAnimation("Translation")
|
|
main_t3:SetOffset(0, 5)
|
|
main_t3:SetDuration(0.1)
|
|
main_t3:SetOrder(3)
|
|
main_t3:SetSmoothing("OUT")
|
|
|
|
local main_t4 = ag:CreateAnimation("Translation")
|
|
main_t4:SetOffset(0, -5)
|
|
main_t4:SetDuration(0.1)
|
|
main_t4:SetOrder(3)
|
|
main_t4:SetSmoothing("IN")
|
|
main_t4:SetStartDelay(0.1)
|
|
main_t4:SetEndDelay(0.5)
|
|
|
|
-- out ------------------------------------------------------------------- --
|
|
local out_s = ag:CreateAnimation("Scale")
|
|
out_s:SetOrder(4)
|
|
out_s:SetScaleTo(0, 0)
|
|
out_s:SetDuration(0.5)
|
|
out_s:SetSmoothing("IN")
|
|
|
|
local out_spinning = ag:CreateAnimation("Rotation")
|
|
out_spinning:SetOrder(4)
|
|
out_spinning:SetDegrees(-360)
|
|
out_spinning:SetDuration(0.5)
|
|
|
|
local out_t = ag:CreateAnimation("Translation")
|
|
out_t:SetOrder(4)
|
|
out_t:SetStartDelay(0.2)
|
|
out_t:SetDuration(0.3)
|
|
out_t:SetSmoothing("IN_OUT")
|
|
|
|
local out_a = ag:CreateAnimation("Alpha")
|
|
out_a:SetOrder(4)
|
|
out_a:SetFromAlpha(1)
|
|
out_a:SetToAlpha(0)
|
|
out_a:SetStartDelay(0.2)
|
|
out_a:SetDuration(0.3)
|
|
|
|
function f:Display(x, y)
|
|
in_t:SetOffset(x, y)
|
|
out_t:SetOffset(x, -y)
|
|
f:Show()
|
|
ag:Play()
|
|
end
|
|
|
|
return f
|
|
end
|
|
|
|
local function resetterFunc(_, f)
|
|
f:Hide()
|
|
end
|
|
|
|
pool = CreateObjectPool(creationFunc, resetterFunc)
|
|
|
|
-------------------------------------------------
|
|
-- show
|
|
-------------------------------------------------
|
|
local function Display(b)
|
|
local f = pool:Acquire()
|
|
f:SetParent(b.widgets.indicatorFrame)
|
|
-- f:SetFrameLevel(b:GetFrameLevel()+200)
|
|
f:SetPoint("CENTER", b, "BOTTOMLEFT")
|
|
|
|
local size = max(min(b:GetHeight(), b:GetWidth()), 64)
|
|
f:SetSize(size, size)
|
|
|
|
f:Display(ceil(b:GetWidth()/2), ceil(b:GetHeight()/2))
|
|
-- f:FadeIn()
|
|
-- C_Timer.After(3, f.FadeOut)
|
|
end
|
|
-- CellSupporterDisplay = Display
|
|
|
|
-- local function StopRainbow(unit)
|
|
-- local b = F:GetUnitButtonByUnit(unit)
|
|
-- if b then
|
|
-- local fs = b.indicators.nameText.name
|
|
-- -- stop rainbow
|
|
-- fs.rainbow = nil
|
|
-- if fs.updater then
|
|
-- fs.updater:SetScript("OnUpdate", nil)
|
|
-- fs:GetParent():UpdateName()
|
|
-- end
|
|
-- -- stop timer
|
|
-- if fs.timer then
|
|
-- fs.timer:Cancel()
|
|
-- fs.timer = nil
|
|
-- end
|
|
-- end
|
|
-- end
|
|
|
|
-- local function StartRainbow(unit)
|
|
-- local b = F:GetUnitButtonByUnit(unit)
|
|
-- if b then
|
|
-- local fs = b.indicators.nameText.name
|
|
-- Cell:StartRainbowText(fs)
|
|
-- -- reset timer
|
|
-- if fs.timer then
|
|
-- fs.timer:Cancel()
|
|
-- end
|
|
-- fs.timer = C_Timer.NewTimer(3, function()
|
|
-- StopRainbow(unit)
|
|
-- end)
|
|
-- end
|
|
-- end
|
|
|
|
-------------------------------------------------
|
|
-- events
|
|
-------------------------------------------------
|
|
local eventFrame = CreateFrame("Frame")
|
|
eventFrame:RegisterEvent("FIRST_FRAME_RENDERED")
|
|
|
|
local function Check()
|
|
pool:ReleaseAll()
|
|
|
|
-- Cell.wowSupporters[Cell.vars.playerNameFull] = true
|
|
|
|
if IsInGroup() then
|
|
for unit in F:IterateGroupMembers() do
|
|
local fullName = F:UnitFullName(unit)
|
|
if Cell.wowSupporters[fullName] then
|
|
F:HandleUnitButton("unit", unit, Display)
|
|
end
|
|
end
|
|
else
|
|
if Cell.wowSupporters[Cell.vars.playerNameFull] then
|
|
F:HandleUnitButton("unit", "player", Display)
|
|
end
|
|
end
|
|
end
|
|
|
|
local timer, members
|
|
eventFrame:SetScript("OnEvent", function(self, event)
|
|
if event == "FIRST_FRAME_RENDERED" then
|
|
eventFrame:UnregisterEvent("FIRST_FRAME_RENDERED")
|
|
eventFrame:RegisterEvent("GROUP_ROSTER_UPDATE")
|
|
end
|
|
|
|
if timer then
|
|
timer:Cancel()
|
|
timer = nil
|
|
end
|
|
|
|
if InCombatLockdown() then return end
|
|
|
|
local newMembers = GetNumGroupMembers()
|
|
if members ~= newMembers then
|
|
members = newMembers
|
|
timer = C_Timer.NewTimer(5, Check)
|
|
end
|
|
end)
|