Back to Home

ESO Lua File v101042

libraries/utility/zo_scrollanimationutils.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
98
99
100
101
102
103
104
105
106
107
108
--Shared Scroll Animation Functions
---------------------------------------
local MIN_SCROLL_VALUE = 0
local MAX_SCROLL_VALUE = 100
ZO_SCROLL_DIRECTION_HORIZONTAL = 1
ZO_SCROLL_DIRECTION_VERTICAL = 2
function ZO_SetSliderValueAnimated(self, targetValue)
    self.timeline:Stop()
    targetValue = zo_clamp(targetValue, MIN_SCROLL_VALUE, MAX_SCROLL_VALUE)
    self.animationStart = self.scrollValue
    self.animationTarget = targetValue
    self.timeline:PlayFromStart()
end
function ZO_UpdateScrollFade(useFadeGradient, scroll, scrollDirection, maxFadeGradientSize)
    if(useFadeGradient) then
        local sliderValue = select(scrollDirection, scroll:GetScrollOffsets())
        local sliderMin = 0
        local sliderMax = select(scrollDirection, scroll:GetScrollExtents())
        if(sliderValue > sliderMin) then
            scroll:SetFadeGradient(1, 0, 1, zo_min(sliderValue - sliderMin, maxFadeGradientSize or 128))
        else
            scroll:SetFadeGradient(1, 0, 0, 0)
        end
        
        if(sliderValue < sliderMax) then
            scroll:SetFadeGradient(2, 0, -1, zo_min(sliderMax - sliderValue, maxFadeGradientSize or 128))
        else
            scroll:SetFadeGradient(2, 0, 0, 0);
        end
    else
        scroll:SetFadeGradient(1, 0, 0, 0)
        scroll:SetFadeGradient(2, 0, 0, 0)
    end
end
function ZO_OnAnimationStop(animationObject, control)
    local scrollObject = animationObject.scrollObject
    scrollObject.animationStart = nil
    scrollObject.animationTarget = nil
end
function ZO_OnAnimationUpdate(animationObject, progress)
    local scrollObject = animationObject.scrollObject
    if (scrollObject.animationTarget == nil) then
        return
    end
    local value = scrollObject.animationStart + (scrollObject.animationTarget - scrollObject.animationStart) * progress
    scrollObject.scrollValue = value
    ZO_ScrollAnimation_MoveWindow(scrollObject, value)
    ZO_UpdateScrollFade(scrollObject.useFadeGradient, scrollObject.scroll, ZO_SCROLL_DIRECTION_VERTICAL, ZO_GetScrollMaxFadeGradientSize(scrollObject))
end
function ZO_GetScrollMaxFadeGradientSize(scrollObject)
    return scrollObject.maxFadeGradientSize
end
function ZO_SetScrollMaxFadeGradientSize(scrollObject, maxFadeGradientSize)
    scrollObject.maxFadeGradientSize = maxFadeGradientSize
end
function ZO_CreateScrollAnimation(scrollObject)
    local animation, timeline = CreateSimpleAnimation(ANIMATION_CUSTOM)
    animation.scrollObject = scrollObject
    animation:SetDuration(10)
    animation:SetHandler("OnStop", ZO_OnAnimationStop)
    return animation, timeline
end
function ZO_ScrollRelative(self, verticalDelta)
    local scroll = self.scroll
    local _, verticalExtents = scroll:GetScrollExtents()   
    
    if(verticalExtents > 0) then
        if(self.animationTarget) then
            local oldVerticalOffset = (self.animationTarget * verticalExtents) / 100
            local newVerticalOffset = oldVerticalOffset + verticalDelta
            ZO_SetSliderValueAnimated(self, (newVerticalOffset / verticalExtents) * 100)
        else
            local _, currentVerticalOffset = scroll:GetScrollOffsets()
            local newVerticalOffset = currentVerticalOffset + verticalDelta
            ZO_SetSliderValueAnimated(self, (newVerticalOffset / verticalExtents) * 100)
        end
    end
end
    local scroll = self.scroll
    local _, verticalExtents = scroll:GetScrollExtents()
    
    scroll:SetVerticalScroll((value/(MAX_SCROLL_VALUE - MIN_SCROLL_VALUE)) * verticalExtents) 
end
    if self then
        ZO_ScrollAnimation_MoveWindow(self, self.scrollValue)
        ZO_UpdateScrollFade(self.useFadeGradient, self.scroll, ZO_SCROLL_DIRECTION_VERTICAL, ZO_GetScrollMaxFadeGradientSize(self))
    end
end