From: Stephan Stahl Date: Sun, 11 Apr 2010 19:25:50 +0000 (+0000) Subject: more work on the menu animation framework, keyframes are now more easy to use X-Git-Tag: xonotic-v0.1.0preview~659^2 X-Git-Url: http://git.xonotic.org/?a=commitdiff_plain;h=5f61346e8f05917ca28cd68565d87c025f328f74;p=xonotic%2Fxonotic-data.pk3dir.git more work on the menu animation framework, keyframes are now more easy to use --- diff --git a/qcsrc/menu/anim/keyframe.c b/qcsrc/menu/anim/keyframe.c index 39e1fd8b4..d32f19618 100644 --- a/qcsrc/menu/anim/keyframe.c +++ b/qcsrc/menu/anim/keyframe.c @@ -1,5 +1,6 @@ #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) @@ -8,6 +9,9 @@ CLASS(Keyframe) EXTENDS(Animation) 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 @@ -27,6 +31,40 @@ entity makeKeyframe(entity obj, void(entity, float) setter, float duration, floa 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)