режим предателя + UI референсы и DragonUI
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
--[[ animTable = { --Note that only consistent data should be in here. These tables are meant to be shared across "sessions" of animations. Put changing data in the frame.
|
||||
totalTime = number, --Time to complete the animation in seconds.
|
||||
updateFunc = function, --The function called to do the actual change. Takes self, elapsed fraction. Usually frame.SetPoint, frame.SetAlpha, ect.
|
||||
getPosFunc = function, --The function returning the data being passed into updateFunc. For example. might return .18 if updateFunc is frame.SetAlpha.
|
||||
--]]
|
||||
local AnimatingFrames = {};
|
||||
|
||||
local AnimUpdateFrame = CreateFrame("Frame");
|
||||
|
||||
local function Animation_UpdateFrame(self, animElapsed, animTable)
|
||||
local totalTime = animTable.totalTime
|
||||
if ( animElapsed and (animElapsed < totalTime)) then --Should be animating
|
||||
local elapsedFraction = self.animReverse and (1-animElapsed/totalTime) or (animElapsed/totalTime);
|
||||
animTable.updateFunc(self, animTable.getPosFunc(self, elapsedFraction));
|
||||
else --Just finished animating
|
||||
animTable.updateFunc(self, animTable.getPosFunc(self, self.animReverse and 0 or 1));
|
||||
self.animating = false;
|
||||
|
||||
AnimatingFrames[self][animTable.updateFunc] = 0; --We use 0 instead of nil'ing out because we don't want to mess with 'next' (used in pairs)
|
||||
|
||||
if ( self.animPostFunc ) then
|
||||
self.animPostFunc(self);
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
local totalElapsed = 0;
|
||||
local function Animation_OnUpdate(self, elapsed)
|
||||
totalElapsed = totalElapsed + elapsed;
|
||||
local isAnyFrameAnimating = false;
|
||||
for frame, frameTable in pairs(AnimatingFrames) do
|
||||
for frameTable, animTable in pairs(frameTable) do
|
||||
if ( animTable ~= 0 ) then
|
||||
Animation_UpdateFrame(frame, totalElapsed - frame.animStartTime, animTable);
|
||||
isAnyFrameAnimating = true;
|
||||
end
|
||||
end
|
||||
end
|
||||
if ( not isAnyFrameAnimating ) then
|
||||
table.wipe(AnimatingFrames);
|
||||
AnimUpdateFrame:SetScript("OnUpdate", nil);
|
||||
end
|
||||
end
|
||||
|
||||
function SetUpAnimation(frame, animTable, postFunc, reverse)
|
||||
if ( type(animTable.updateFunc) == "string" ) then
|
||||
animTable.updateFunc = frame[animTable.updateFunc];
|
||||
end
|
||||
if ( not AnimatingFrames[frame] ) then
|
||||
AnimatingFrames[frame] = {};
|
||||
end
|
||||
|
||||
AnimatingFrames[frame][animTable.updateFunc] = animTable;
|
||||
|
||||
frame.animStartTime = totalElapsed;
|
||||
frame.animReverse = reverse;
|
||||
frame.animPostFunc = postFunc;
|
||||
frame.animating = true;
|
||||
|
||||
animTable.updateFunc(frame, animTable.getPosFunc(frame, frame.animReverse and 1 or 0));
|
||||
|
||||
AnimUpdateFrame:SetScript("OnUpdate", Animation_OnUpdate);
|
||||
end
|
||||
Reference in New Issue
Block a user