]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/menu/anim/easing.c
always show some icons on the mod icon panel when in config mode
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / anim / easing.c
1 #ifdef INTERFACE
2 CLASS(Easing) EXTENDS(Animation)
3         METHOD(Easing, calcValue, float(entity, float, float, float, float))
4         METHOD(Easing, setMath, void(entity, float(float, float, float, float)))
5         ATTRIB(Easing, math, float(float, float, float, float), easingLinear)
6 ENDCLASS(Easing)
7 entity makeHostedEasing(entity, void(entity, float), float(float, float, float, float), float, float, float);
8 entity makeEasing(entity, void(entity, float), float(float, float, float, float), float, float, float, float);
9 float easingLinear(float, float, float, float);
10 float easingQuadIn(float, float, float, float);
11 float easingQuadOut(float, float, float, float);
12 float easingQuadInOut(float, float, float, float);
13 #endif
14
15 #ifdef IMPLEMENTATION
16 entity makeHostedEasing(entity obj, void(entity, float) setter, float(float, float, float, float) func, float duration, float startValue, float end)
17 {
18         entity me;
19         me = makeEasing(obj, setter, func, time, duration, startValue, end);
20         anim.addAnim(anim, me);
21         return me;
22 }
23
24 entity makeEasing(entity obj, void(entity, float) setter, float(float, float, float, float) func, float startTime, float duration, float startValue, float end)
25 {
26         entity me;
27         me = spawnEasing();
28         me.configureAnimation(me, obj, setter, startTime, duration, startValue, end);
29         me.setMath(me, func);
30         return me;
31 }
32
33 float calcValueEasing(entity me, float time, float duration, float start, float delta)
34 {
35         return me.math(time, duration, start, delta);
36 }
37
38 void setMathEasing(entity me, float(float, float, float, float) func)
39 {
40         me.math = func;
41 }
42
43 float easingLinear(float time, float duration, float start, float delta)
44 {
45         return (delta * (time / duration)) + start;
46 }
47
48 float easingQuadIn(float time, float duration, float start, float delta)
49 {
50         float frac = time / duration;
51         return (delta * frac * frac) + start;
52 }
53
54 float easingQuadOut(float time, float duration, float start, float delta)
55 {
56         float frac = time / duration;
57         return (-delta * frac * (frac - 2)) + start;
58 }
59
60 float easingQuadInOut(float time, float duration, float start, float delta)
61 {
62         if (time < (duration / 2))
63         {
64                 return easingQuadIn(time, (duration / 2), start, (delta / 2));
65         }
66         else
67         {
68                 return easingQuadOut((time - (duration / 2)), (duration / 2), (start + (delta / 2)), (delta / 2));
69         }
70 }
71
72 #endif