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