/* Script for converting first frame of Motion Tween (or multiple keyframes) to keyframes with easing effects Ladislav Zigo lacoz@web.de */ function main(plist){ var pl = eval(plist); var timeline = fl.getDocumentDOM().getTimeline(); var SelFrame = timeline.getSelectedFrames(); if((SelFrame[2] - SelFrame[1]) == 1){ // one frame selected if(timeline.layers[SelFrame[0]].frames.length <= SelFrame[1]){ alert("Select first frame of motion tween"); return; } var dur = timeline.layers[SelFrame[0]].frames[SelFrame[1]].duration; if(dur<2){ alert("Select first frame of motion tween"); return; }; var stEl = timeline.layers[SelFrame[0]].frames[SelFrame[1]].elements[0]; var endEl = timeline.layers[SelFrame[0]].frames[SelFrame[1]+dur].elements[0]; } else if((SelFrame[2] - SelFrame[1]) > 1){ // more frames selected var dur = SelFrame[2] - SelFrame[1] - 1; var stEl = timeline.layers[SelFrame[0]].frames[SelFrame[1]].elements[0]; var endEl = timeline.layers[SelFrame[0]].frames[SelFrame[2] - 1].elements[0]; } else { alert("No frames selected"); return; } // generate keyframes timeline.layers[SelFrame[0]].frames[SelFrame[1]].tweenType = 'none'; for(var i = 0; i < dur; i++){ timeline.insertKeyframe(); } // arrange it for(var i = 0; i < dur; i++){ var elem = timeline.layers[SelFrame[0]].frames[SelFrame[1]+i].elements[0]; var mat = elem.matrix // scale, position, skrew, roatation if(stEl.matrix.a != endEl.matrix.a) mat.a = customEasing(i,stEl.matrix.a,(endEl.matrix.a - stEl.matrix.a),dur,pl); if(stEl.matrix.b != endEl.matrix.b) mat.b = customEasing(i,stEl.matrix.b,(endEl.matrix.b - stEl.matrix.b),dur,pl); if(stEl.matrix.c != endEl.matrix.c) mat.c = customEasing(i,stEl.matrix.c,(endEl.matrix.c - stEl.matrix.c),dur,pl); if(stEl.matrix.d != endEl.matrix.b) mat.d = customEasing(i,stEl.matrix.d,(endEl.matrix.d - stEl.matrix.d),dur,pl); if(stEl.matrix.tx != endEl.matrix.tx) mat.tx = customEasing(i,stEl.matrix.tx,(endEl.matrix.tx - stEl.matrix.tx),dur,pl); if(stEl.matrix.ty != endEl.matrix.ty) mat.ty = customEasing(i,stEl.matrix.ty,(endEl.matrix.ty - stEl.matrix.ty),dur,pl); // elem.matrix = mat; // color transform + alpha if(stEl.colorAlphaAmount != endEl.colorAlphaAmount) elem.colorAlphaAmount = customEasing(i,stEl.colorAlphaAmount,(endEl.colorAlphaAmount - stEl.colorAlphaAmount),dur,pl); if(stEl.colorAlphaPercent != endEl.colorAlphaPercent) elem.colorAlphaPercent = customEasing(i,stEl.colorAlphaPercent,(endEl.colorAlphaPercent - stEl.colorAlphaPercent),dur,pl); if(stEl.colorBlueAmount != endEl.colorBlueAmount) elem.colorBlueAmount = customEasing(i,stEl.colorBlueAmount,(endEl.colorBlueAmount - stEl.colorBlueAmount),dur,pl); if(stEl.colorBluePercent != endEl.colorBluePercent) elem.colorBluePercent = customEasing(i,stEl.colorBluePercent,(endEl.colorBluePercent - stEl.colorBluePercent),dur,pl); if(stEl.colorGreenAmount != endEl.colorGreenAmount) elem.colorGreenAmount = customEasing(i,stEl.colorGreenAmount,(endEl.colorGreenAmount - stEl.colorGreenAmount),dur,pl); if(stEl.colorGreenPercent != endEl.colorGreenPercent) elem.colorGreenPercent = customEasing(i,stEl.colorGreenPercent,(endEl.colorGreenPercent - stEl.colorGreenPercent),dur,pl); if(stEl.colorRedAmount != endEl.colorRedAmount) elem.colorRedAmount = customEasing(i,stEl.colorRedAmount,(endEl.colorRedAmount - stEl.colorRedAmount),dur,pl); if(stEl.colorRedPercent != endEl.colorRedPercent) elem.colorRedPercent = customEasing(i,stEl.colorRedPercent,(endEl.colorRedPercent - stEl.colorRedPercent),dur,pl); } } function customEasing(t,b,c,d,pl){ var i,r; r = 200 * t/d; for(i = 0;r>pl[i+1].Mx;i++){ } i=pl[i]; if(i.Px != 0){ r=(-i.Nx+Math.sqrt(i.Nx*i.Nx-4*i.Px*(i.Mx-r)))/(2*i.Px); }else{ r=-(i.Mx-r)/i.Nx; } return b-c*((i.My+i.Ny*r+i.Py*r*r)/200); }