]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/menu/anim/animation.c
1019fdacb3ec706b25c45b5734e7c081bcb85493
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / anim / animation.c
1 #ifdef INTERFACE
2 CLASS(Animation) EXTENDS(Object)
3         METHOD(Animation, configureAnimation, void(entity, entity, void(entity, float), float, float, float, float))
4         METHOD(Animation, setTimeStartEnd, void(entity, float, float))
5         METHOD(Animation, setTimeStartDuration, void(entity, float, float))
6         METHOD(Animation, setValueStartEnd, void(entity, float, float))
7         METHOD(Animation, setValueStartDelta, void(entity, float, float))
8         METHOD(Animation, setObjectSetter, void(entity, entity, void(entity, float)))
9         METHOD(Animation, tick, void(entity, float))
10         METHOD(Animation, calcValue, float(entity, float, float, float, float))
11         METHOD(Animation, isStopped, float(entity))
12         METHOD(Animation, stopAnim, void(entity))
13         METHOD(Animation, resumeAnim, void(entity))
14         METHOD(Animation, isFinished, float(entity))
15         METHOD(Animation, finishAnim, void(entity))
16         ATTRIB(Animation, object, entity, NULL)
17         ATTRIB(Animation, setter, void(entity, float), setterDummy)
18         ATTRIB(Animation, value, float, 0)
19         ATTRIB(Animation, startTime, float, 0)
20         ATTRIB(Animation, duration, float, 0)
21         ATTRIB(Animation, startValue, float, 0)
22         ATTRIB(Animation, delta, float, 0)
23         ATTRIB(Animation, stopped, float, FALSE)
24         ATTRIB(Animation, finished, float, FALSE)
25 ENDCLASS(Animation)
26 void setterDummy(entity, float);
27 #endif
28
29 #ifdef IMPLEMENTATION
30 void configureAnimationAnimation(entity me, entity obj, void(entity, float) objSetter, float animStartTime, float animDuration, float animStartValue, float animEndValue)
31 {
32         me.setObjectSetter(me, obj, objSetter);
33         me.setTimeStartDuration(me, animStartTime, animDuration);
34         me.setValueStartEnd(me, animStartValue, animEndValue);
35 }
36
37 void setTimeStartEndAnimation(entity me, float s, float e)
38 {
39         me.startTime = s;
40         me.duration = e - s;
41 }
42
43 void setTimeStartDurationAnimation(entity me, float s, float d)
44 {
45         me.startTime = s;
46         me.duration = d;
47 }
48
49 void setValueStartEndAnimation(entity me, float s, float e)
50 {
51         me.startValue = s;
52         me.delta = e - s;
53 }
54
55 void setValueStartDeltaAnimation(entity me, float s, float d)
56 {
57         me.startValue = s;
58         me.delta = d;
59 }
60
61 void setObjectSetterAnimation(entity me, entity o, void(entity, float) s)
62 {
63         me.object = o;
64         me.setter = s;
65 }
66
67 void tickAnimation(entity me, float tickTime)
68 {
69         if (me.isStopped(me) || me.isFinished(me) || (tickTime < me.startTime))
70                 return;
71
72         if (tickTime >= (me.startTime + me.duration))
73                 me.finishAnim(me);
74         else
75                 me.value = me.calcValue(me, (tickTime - me.startTime), me.duration, me.startValue, me.delta);
76
77         me.setter(me.object, me.value);
78 }
79
80 float calcValueAnimation(entity me, float tickTime, float animDuration, float animStartValue, float animDelta)
81 {
82         return animStartValue;
83 }
84
85 float isStoppedAnimation(entity me)
86 {
87         return me.stopped;
88 }
89
90 void stopAnimAnimation(entity me)
91 {
92         me.stopped = TRUE;
93 }
94
95 void resumeAnimAnimation(entity me)
96 {
97         me.stopped = FALSE;
98 }
99
100 float isFinishedAnimation(entity me)
101 {
102         return me.finished;
103 }
104
105 void finishAnimAnimation(entity me)
106 {
107         me.value = me.delta + me.startValue;
108         me.finished = TRUE;
109 }
110
111 void setterDummy(entity obj, float objValue)
112 {
113 }
114
115 #endif