4 #include "animation.qc"
5 entity makeHostedEasing(entity, void(entity, float), float(float, float, float, float), float, float, float);
6 entity makeEasing(entity, void(entity, float), float(float, float, float, float), float, float, float, float);
7 float easingLinear(float, float, float, float);
8 float easingQuadIn(float, float, float, float);
9 float easingQuadOut(float, float, float, float);
10 float easingQuadInOut(float, float, float, float);
11 CLASS(Easing, Animation)
12 METHOD(Easing, calcValue, float(entity, float, float, float, float));
13 METHOD(Easing, setMath, void(entity, float(float, float, float, float)));
14 ATTRIB(Easing, math, float(float, float, float, float), easingLinear)
19 entity makeHostedEasing(entity obj, void(entity, float) objSetter, float(float, float, float, float) func, float animDuration, float animStartValue, float animEnd)
21 entity this = makeEasing(obj, objSetter, func, time, animDuration, animStartValue, animEnd);
22 anim.addAnim(anim, this);
26 entity makeEasing(entity obj, void(entity, float) objSetter, float(float, float, float, float) func, float animStartTime, float animDuration, float animStartValue, float animEnd)
28 entity this = NEW(Easing);
29 this.configureAnimation(this, obj, objSetter, animStartTime, animDuration, animStartValue, animEnd);
30 this.setMath(this, func);
34 METHOD(Easing, calcValue, float(entity this, float tickTime, float animDuration, float animStart, float animDelta))
36 return this.math(tickTime, animDuration, animStart, animDelta);
39 METHOD(Easing, setMath, void(entity this, float(float, float, float, float) func))
44 float easingLinear(float tickTime, float animDuration, float animStart, float animDelta)
46 return (animDelta * (tickTime / animDuration)) + animStart;
49 float easingQuadIn(float tickTime, float animDuration, float animStart, float animDelta)
51 float frac = tickTime / animDuration;
52 return (animDelta * frac * frac) + animStart;
55 float easingQuadOut(float tickTime, float animDuration, float animStart, float animDelta)
57 float frac = tickTime / animDuration;
58 return (-animDelta * frac * (frac - 2)) + animStart;
61 float easingQuadInOut(float tickTime, float animDuration, float animStart, float animDelta)
63 if (tickTime < (animDuration / 2)) return easingQuadIn(tickTime, (animDuration / 2), animStart, (animDelta / 2));
64 else return easingQuadOut((tickTime - (animDuration / 2)), (animDuration / 2), (animStart + (animDelta / 2)), (animDelta / 2));