1 #include "animation.qh"
2 #ifndef ANIM_ANIMATION_H
3 #define ANIM_ANIMATION_H
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 void setterDummy(entity, float) {}
21 ATTRIB(Animation, setter, void(entity, float), setterDummy)
22 ATTRIB(Animation, value, float, 0)
23 ATTRIB(Animation, startTime, float, 0)
24 ATTRIB(Animation, duration, float, 0)
25 ATTRIB(Animation, startValue, float, 0)
26 ATTRIB(Animation, delta, float, 0)
27 ATTRIB(Animation, stopped, float, false)
28 ATTRIB(Animation, finished, float, false)
33 METHOD(Animation, configureAnimation, void(entity this, entity obj, void(entity, float) objSetter, float animStartTime, float animDuration, float animStartValue, float animEndValue))
35 this.setObjectSetter(this, obj, objSetter);
36 this.setTimeStartDuration(this, animStartTime, animDuration);
37 this.setValueStartEnd(this, animStartValue, animEndValue);
40 METHOD(Animation, update, void(entity this, float animDuration, float animStartValue, float animEndValue))
42 this.setTimeStartDuration(this, time, animDuration);
43 this.setValueStartEnd(this, animStartValue, animEndValue);
46 METHOD(Animation, setTimeStartEnd, void(entity this, float s, float e))
49 this.duration = e - s;
52 METHOD(Animation, setTimeStartDuration, void(entity this, float s, float d))
58 METHOD(Animation, setValueStartEnd, void(entity this, float s, float e))
64 METHOD(Animation, setValueStartDelta, void(entity this, float s, float d))
70 METHOD(Animation, setObjectSetter, void(entity this, entity o, void(entity, float) s))
76 METHOD(Animation, tick, void(entity this, float tickTime))
78 if (this.isStopped(this) || this.isFinished(this) || (tickTime < this.startTime)) return;
80 if (tickTime >= (this.startTime + this.duration)) this.finishAnim(this);
81 else this.value = this.calcValue(this, (tickTime - this.startTime), this.duration, this.startValue, this.delta);
83 this.setter(this.object, this.value);
86 METHOD(Animation, calcValue, float(entity this, float tickTime, float animDuration, float animStartValue, float animDelta))
88 return animStartValue;
91 METHOD(Animation, isStopped, bool(entity this))
96 METHOD(Animation, stopAnim, void(entity this))
101 METHOD(Animation, resumeAnim, void(entity this))
103 this.stopped = false;
106 METHOD(Animation, isFinished, bool(entity this))
108 return this.finished;
111 METHOD(Animation, finishAnim, void(entity this))
113 this.value = this.delta + this.startValue;
114 this.finished = true;
115 this.setter(this.object, this.value);