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