]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/menu/anim/animation.qc
Uncrustify menu/{anim,item}/*
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / anim / animation.qc
1 #ifndef ANIM_ANIMATION_H
2         #define ANIM_ANIMATION_H
3         CLASS(Animation, Object)
4                 METHOD(Animation, configureAnimation, void(entity, entity, void(entity, float), float, float, float, float));
5                 METHOD(Animation, update, void(entity, 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                 void setterDummy(entity, float) {}
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         METHOD(Animation, configureAnimation, void(entity this, entity obj, void(entity, float) objSetter, float animStartTime, float animDuration, float animStartValue, float animEndValue))
33         {
34                 this.setObjectSetter(this, obj, objSetter);
35                 this.setTimeStartDuration(this, animStartTime, animDuration);
36                 this.setValueStartEnd(this, animStartValue, animEndValue);
37         }
38
39         METHOD(Animation, update, void(entity this, float animDuration, float animStartValue, float animEndValue))
40         {
41                 this.setTimeStartDuration(this, time, animDuration);
42                 this.setValueStartEnd(this, animStartValue, animEndValue);
43         }
44
45         METHOD(Animation, setTimeStartEnd, void(entity this, float s, float e))
46         {
47                 this.startTime = s;
48                 this.duration = e - s;
49         }
50
51         METHOD(Animation, setTimeStartDuration, void(entity this, float s, float d))
52         {
53                 this.startTime = s;
54                 this.duration = d;
55         }
56
57         METHOD(Animation, setValueStartEnd, void(entity this, float s, float e))
58         {
59                 this.startValue = s;
60                 this.delta = e - s;
61         }
62
63         METHOD(Animation, setValueStartDelta, void(entity this, float s, float d))
64         {
65                 this.startValue = s;
66                 this.delta = d;
67         }
68
69         METHOD(Animation, setObjectSetter, void(entity this, entity o, void(entity, float) s))
70         {
71                 this.object = o;
72                 this.setter = s;
73         }
74
75         METHOD(Animation, tick, void(entity this, float tickTime))
76         {
77                 if (this.isStopped(this) || this.isFinished(this) || (tickTime < this.startTime)) return;
78
79                 if (tickTime >= (this.startTime + this.duration)) this.finishAnim(this);
80                 else this.value = this.calcValue(this, (tickTime - this.startTime), this.duration, this.startValue, this.delta);
81
82                 this.setter(this.object, this.value);
83         }
84
85         METHOD(Animation, calcValue, float(entity this, float tickTime, float animDuration, float animStartValue, float animDelta))
86         {
87                 return animStartValue;
88         }
89
90         METHOD(Animation, isStopped, bool(entity this))
91         {
92                 return this.stopped;
93         }
94
95         METHOD(Animation, stopAnim, void(entity this))
96         {
97                 this.stopped = true;
98         }
99
100         METHOD(Animation, resumeAnim, void(entity this))
101         {
102                 this.stopped = false;
103         }
104
105         METHOD(Animation, isFinished, bool(entity this))
106         {
107                 return this.finished;
108         }
109
110         METHOD(Animation, finishAnim, void(entity this))
111         {
112                 this.value = this.delta + this.startValue;
113                 this.finished = true;
114                 this.setter(this.object, this.value);
115         }
116
117 #endif