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)
32 METHOD(Animation, configureAnimation, void(entity this, entity obj, void(entity, float) objSetter, float animStartTime, float animDuration, float animStartValue, float animEndValue))
34 this.setObjectSetter(this, obj, objSetter);
35 this.setTimeStartDuration(this, animStartTime, animDuration);
36 this.setValueStartEnd(this, animStartValue, animEndValue);
39 METHOD(Animation, update, void(entity this, float animDuration, float animStartValue, float animEndValue))
41 this.setTimeStartDuration(this, time, animDuration);
42 this.setValueStartEnd(this, animStartValue, animEndValue);
45 METHOD(Animation, setTimeStartEnd, void(entity this, float s, float e))
48 this.duration = e - s;
51 METHOD(Animation, setTimeStartDuration, void(entity this, float s, float d))
57 METHOD(Animation, setValueStartEnd, void(entity this, float s, float e))
63 METHOD(Animation, setValueStartDelta, void(entity this, float s, float d))
69 METHOD(Animation, setObjectSetter, void(entity this, entity o, void(entity, float) s))
75 METHOD(Animation, tick, void(entity this, float tickTime))
77 if (this.isStopped(this) || this.isFinished(this) || (tickTime < this.startTime)) return;
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);
82 this.setter(this.object, this.value);
85 METHOD(Animation, calcValue, float(entity this, float tickTime, float animDuration, float animStartValue, float animDelta))
87 return animStartValue;
90 METHOD(Animation, isStopped, bool(entity this))
95 METHOD(Animation, stopAnim, void(entity this))
100 METHOD(Animation, resumeAnim, void(entity this))
102 this.stopped = false;
105 METHOD(Animation, isFinished, bool(entity this))
107 return this.finished;
110 METHOD(Animation, finishAnim, void(entity this))
112 this.value = this.delta + this.startValue;
113 this.finished = true;
114 this.setter(this.object, this.value);