Back to Home

ESO Lua File v100031

libraries/zo_crossfadebg/zo_crossfadebg.lua

[◄ back to folders ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
local Crossfade = ZO_Object:Subclass()
function Crossfade:New(...)
    local crossfade = ZO_Object.New(self)
    crossfade:Initialize(...)
    return crossfade
end
function Crossfade:Initialize(control)
    control.m_object = self
    self.m_control = control
    local function ResizeBG()
    end
    control:RegisterForEvent(EVENT_SCREEN_RESIZED, ResizeBG)
    ResizeBG()
end
function Crossfade:InitializeBuffer(control, startingTexture, initialDrawLevel)
    if(control.m_timeline == nil) then
        control.m_timeline = ANIMATION_MANAGER:CreateTimelineFromVirtual("ZO_CrossfadeAnimation", control)
        control.m_timeline.m_crossFade = self
    else
        control.m_timeline:Stop()
    end
    control:SetTexture(startingTexture)
    control:SetDrawLevel(initialDrawLevel)
    control:SetAlpha(1)
    control:SetHidden(false)
    return control
end
function Crossfade:OnComplete()
    self.m_backBuffer:SetDrawLevel(self.m_backBuffer:GetDrawLevel() + 1)
    self.m_frontBuffer:SetDrawLevel(self.m_frontBuffer:GetDrawLevel() - 1)
    self.m_frontBuffer, self.m_backBuffer = self.m_backBuffer, self.m_frontBuffer
end
function Crossfade:InitializeBufferImages(frontBufferImage, backBufferImage)
    self.m_frontBuffer = self:InitializeBuffer(self.m_control:GetNamedChild("1"), frontBufferImage, 1)
    self.m_backBuffer = self:InitializeBuffer(self.m_control:GetNamedChild("2"), backBufferImage, 0)
end
function Crossfade:DoCrossfade(newBG)
    self.m_frontBuffer.m_timeline:PlayFromStart()
    self.m_backBuffer:SetTexture(newBG)    
    self.m_backBuffer.m_textureFile = newBG
    self.m_backBuffer:SetAlpha(1)
end
function Crossfade:PlaySlideShow(delay, ...)
    if(self.m_slideShowIsPlaying) then return end
    local currentImageIndex = 2 -- start with the second image, the first is shown automatically...don't want to crossfade into an identical image
    local imageData = { ... }
    local function SlideShowCallback()
        self:DoCrossfade(imageData[currentImageIndex])
        currentImageIndex = currentImageIndex + 1
        if(currentImageIndex > #imageData) then currentImageIndex = 1 end
    end
    self:InitializeBufferImages(imageData[1], imageData[2])
    self.m_slideShowEventName = self.m_control:GetName().."SlideShowEvent"
    EVENT_MANAGER:RegisterForUpdate(self.m_slideShowEventName, delay, SlideShowCallback)
    self.m_slideShowIsPlaying = true
end
function Crossfade:StopSlideShow()
    -- You should have started the show before calling this...
    if(not self.m_slideShowIsPlaying) then return end
    EVENT_MANAGER:UnregisterForUpdate(self.m_slideShowEventName)
    self.m_slideShowEventName = nil
    self.m_slideShowIsPlaying = nil
end
--[[
Global API
--]]
    self.m_object = Crossfade:New(self)
end
    return control.m_object
end
function ZO_CrossfadeBG_OnCrossfadeComplete(timeline, completedPlaying)
    if(completedPlaying) then
        timeline.m_crossFade:OnComplete()
    end
end