]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/menu/anim/animation.qc
Merge branch 'master' into terencehill/menu_gametype_tooltips_2
[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, update, void(entity, 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_update(entity me, float animDuration, float animStartValue, float animEndValue)
40 {
41         me.setTimeStartDuration(me, time, animDuration);
42         me.setValueStartEnd(me, animStartValue, animEndValue);
43 }
44
45 void Animation_setTimeStartEnd(entity me, float s, float e)
46 {
47         me.startTime = s;
48         me.duration = e - s;
49 }
50
51 void Animation_setTimeStartDuration(entity me, float s, float d)
52 {
53         me.startTime = s;
54         me.duration = d;
55 }
56
57 void Animation_setValueStartEnd(entity me, float s, float e)
58 {
59         me.startValue = s;
60         me.delta = e - s;
61 }
62
63 void Animation_setValueStartDelta(entity me, float s, float d)
64 {
65         me.startValue = s;
66         me.delta = d;
67 }
68
69 void Animation_setObjectSetter(entity me, entity o, void(entity, float) s)
70 {
71         me.object = o;
72         me.setter = s;
73 }
74
75 void Animation_tick(entity me, float tickTime)
76 {
77         if (me.isStopped(me) || me.isFinished(me) || (tickTime < me.startTime))
78                 return;
79
80         if (tickTime >= (me.startTime + me.duration))
81                 me.finishAnim(me);
82         else
83                 me.value = me.calcValue(me, (tickTime - me.startTime), me.duration, me.startValue, me.delta);
84
85         me.setter(me.object, me.value);
86 }
87
88 float Animation_calcValue(entity me, float tickTime, float animDuration, float animStartValue, float animDelta)
89 {
90         return animStartValue;
91 }
92
93 float Animation_isStopped(entity me)
94 {
95         return me.stopped;
96 }
97
98 void Animation_stopAnim(entity me)
99 {
100         me.stopped = true;
101 }
102
103 void Animation_resumeAnim(entity me)
104 {
105         me.stopped = false;
106 }
107
108 float Animation_isFinished(entity me)
109 {
110         return me.finished;
111 }
112
113 void Animation_finishAnim(entity me)
114 {
115         me.value = me.delta + me.startValue;
116         me.finished = true;
117         me.setter(me.object, me.value);
118 }
119
120 void setterDummy(entity obj, float objValue)
121 {
122 }
123
124 #endif