Dayz Explorer 1.29.162510
Loading...
Searching...
No Matches
animatedgridspacer.c
Go to the documentation of this file.
1// Different easing functions
10
12{
14 float m_ColumWidth = 0;
15
16 float m_AnimationDuration = 0.25;
17 float m_AnimationTime = 0;
18
22
23 bool m_IsAnimating = false;
25 int m_MaxColums = 3;
26
28
30
31 void AnimatedGridSpacer(Widget gridSpacer, int maxColums, float animDuration = 0.25, AnimatedGridSpacerEasingType easing = AnimatedGridSpacerEasingType.EASE_IN_OUT_CUBIC)
32 {
33 m_GridSpacer = gridSpacer;
34 m_MaxColums = maxColums;
35 m_AnimationDuration = animDuration;
36 m_EasingType = easing;
37
38 if (m_GridSpacer)
39 {
41
43 m_GridSpacer.GetScreenPos(m_BasePosX, m_BasePosY);
46 }
47
49 }
50
52 {
53 if (!m_GridSpacer)
54 return;
55
56 Widget panel = m_GridSpacer.GetChildren();
57 if (panel)
58 {
59 float w, h;
60 panel.GetSize(w, h);
61 m_ColumWidth = w;
62 }
63 }
64
65 float ApplyEasing(float t)
66 {
67 switch(m_EasingType)
68 {
69 case AnimatedGridSpacerEasingType.EASE_LINEAR:
70 {
71 return t;
72 }
73 case AnimatedGridSpacerEasingType.EASE_IN_OUT_CUBIC:
74 {
75 return Easing.EaseInOutCubic(t);
76 }
77 case AnimatedGridSpacerEasingType.EASE_IN_OUT_QUART:
78 {
79 return Easing.EaseInOutQuad(t);
80 }
81 case AnimatedGridSpacerEasingType.EASE_OUT_BOUNCE:
82 {
83 return Easing.EaseOutBounce(t);
84 }
85 case AnimatedGridSpacerEasingType.EASE_OUT_BACK:
86 {
87 return Easing.EaseOutBack(t);
88 }
89 }
90 return t;
91 }
92
93 void AnimateToColum(int targetColumn)
94 {
95 if (m_IsAnimating || targetColumn == m_CurrentColum)
96 return;
97
98 if (m_IsAnimating || targetColumn == m_CurrentColum)
99 return;
100
102 m_TargetPosX = m_BasePosX - (targetColumn * m_ColumWidth);
103 m_CurrentColum = targetColumn;
104 m_AnimationTime = 0;
105 m_IsAnimating = true;
106 }
107
109 {
110 if (!m_IsAnimating)
111 {
112 int nextColum = m_CurrentColum + 1;
113 if (nextColum <= m_MaxColums)
114 {
115 AnimateToColum(nextColum);
116 }
117 }
118 }
119
120 void MoveLeft()
121 {
122 if (!m_IsAnimating)
123 {
124 int prevColum = m_CurrentColum - 1;
125 if (prevColum >= 0)
126 {
127 AnimateToColum(prevColum);
128 }
129 }
130 }
131
132 void Update(float timeslice)
133 {
134 if (!m_IsAnimating || !m_GridSpacer)
135 return;
136
137 m_AnimationTime += timeslice;
139 {
142 m_AnimationTime = 0;
143 m_IsAnimating = false;
144
146 }
147 else
148 {
149 float progress = m_AnimationTime / m_AnimationDuration;
150 float easedProgress = ApplyEasing(progress);
151
152 m_CurrentPosX = m_StartPosX + (m_TargetPosX - m_StartPosX) * easedProgress;
154
155 m_OnAnimationComplete.Invoke();
156 }
157 }
158
159 void SetAnimationDuration(float duration)
160 {
161 m_AnimationDuration = duration;
162 }
163
165 {
166 m_EasingType = easing;
167 }
168
170 {
171 return m_IsAnimating;
172 }
173
175 {
176 return m_CurrentColum;
177 }
178}
int m_CurrentColum
bool m_IsAnimating
float m_ColumWidth
AnimatedGridSpacerEasingType m_EasingType
enum AnimatedGridSpacerEasingType m_GridSpacer
bool IsAnimating()
float m_TargetPosX
float m_BasePosX
void AnimateToColum(int targetColumn)
void MoveLeft()
int m_MaxColums
ref ScriptInvoker m_OnAnimationComplete
float ApplyEasing(float t)
void AnimatedGridSpacer(Widget gridSpacer, int maxColums, float animDuration=0.25, AnimatedGridSpacerEasingType easing=AnimatedGridSpacerEasingType.EASE_IN_OUT_CUBIC)
void SetAnimationDuration(float duration)
float m_CurrentPosY
float m_AnimationTime
float m_CurrentPosX
AnimatedGridSpacerEasingType
@ EASE_IN_OUT_QUART
@ EASE_OUT_BOUNCE
@ EASE_LINEAR
@ EASE_OUT_BACK
@ EASE_IN_OUT_CUBIC
float m_AnimationDuration
float m_BasePosY
int GetCurrentRow()
float m_StartPosX
void SetColumWidth()
void MoveRight()
void SetEasingType(AnimatedGridSpacerEasingType easing)
Input value between 0 and 1, returns value adjusted by easing, no automatic clamping of input(do your...
Definition easing.c:3
ScriptInvoker Class provide list of callbacks usage:
Definition tools.c:116
void Update()
Definition radialmenu.c:518