#ifdef INTERFACE
CLASS(Keyframe) EXTENDS(Animation)
+ METHOD(Keyframe, addEasing, entity(entity, float, float, float(float, float, float, float)))
METHOD(Keyframe, addAnim, void(entity, entity))
METHOD(Keyframe, calcValue, float(entity, float, float, float, float))
ATTRIB(Keyframe, currentChild, entity, NULL)
ENDCLASS(Animation)
entity makeHostedKeyframe(entity, void(entity, float), float, float, float);
entity makeKeyframe(entity, void(entity, float), float, float, float);
+float getNewChildStart(entity);
+float getNewChildDuration(entity, float);
+float getNewChildValue(entity);
#endif
#ifdef IMPLEMENTATION
return me;
}
+entity addEasingKeyframe(entity me, float durationTime, float end, float(float, float, float, float) func)
+{
+ entity other;
+ other = makeEasing(me.object, me.setter, func, getNewChildStart(me), getNewChildDuration(me, durationTime), getNewChildValue(me), end);
+ me.addAnim(me, other);
+ return other;
+}
+
+float getNewChildStart(entity me)
+{
+ if (me.lastChild)
+ return (me.lastChild.startTime + me.lastChild.duration);
+ else
+ return 0;
+}
+
+float getNewChildDuration(entity me, float durationTime)
+{
+ float dura, maxDura;
+ maxDura = me.duration;
+ if (me.lastChild) maxDura = maxDura - (me.lastChild.startTime + me.lastChild.duration);
+ dura = durationTime;
+ if (0 >= dura || dura > maxDura) dura = maxDura;
+ return dura;
+}
+
+float getNewChildValue(entity me)
+{
+ if (me.lastChild)
+ return (me.lastChild.startValue + me.lastChild.delta);
+ else
+ return me.startValue;
+}
+
void addAnimKeyframe(entity me, entity other)
{
if(other.parent)