User Tools

Site Tools


script_animation_flip

====== About the script ====== * Purpose : This script will give you a beautiful page transition animation and an optional horizontal & vertical page loop * Author : [[https://plus.google.com/+LukasMorawietz|LM13]] * Current Version : 3.1 * Link: https://plus.google.com/115366157037831519359/posts/EAUStJNGa5o * Video : https://plus.google.com/115366157037831519359/posts/9eUTw8cCCpi * Download avialable! (Check repository) ====== Changelog ====== * Version 1.0 (30/4/2014): initial release in wiki * Version 2.0 (18/5/2014): Reworked parsing structure, added vertical support, improved smoothness * Version 2.1 (20/6/2014): added rotation check * Version 3.1 (21/7/2014): standalone, reworked structure ====== How to use the script ====== * Set the script to the positionchanged event of your container * enable infinte scrolling if you want a page loop, disable it if you don't want to loop through pages * in this container: create a shortcut to the script * one click on the shortcut will enable the animation, clicking again will disable the animation. * BE SURE TO DISABLE THE ANIMATION BEFORE YOU EDIT, MOVE OR ADD ITEMS! ====== Issues and hints ====== * this will break any other script, which uses item or container tags, and will be broken by them * you can improve smoothness if you create on each page a panel and put all items in it. * don't use dual position, this will do weird stuff * make sure all of your items have exactly one of the following rotations: 0°,90°,180°,270° //please report all bugs in the g+ community// ====== Script ====== <sxh javascript;> var e=LL.getEvent(); var d=e.getContainer(); var cont= JSON.parse(d.getTag()||"null"); var items=d.getItems(); var dwidth=d.getWidth(); var dheight=d.getHeight(); if(e.getSource()!="C_POSITION_CHANGED") { if(cont==null) cont=new Object(); var box=d.getBoundingBox(); cont.minx=box.getLeft(); cont.maxx=box.getRight(); cont.miny=box.getTop(); cont.maxy=box.getBottom(); var minpagex=Math.floor( cont.minx/dwidth); var minpagey=Math.floor( cont.miny/dheight); if(cont.setup!=true) { cont.pages=[]; for(x=0;x<Math.ceil(cont.maxx/dwidth)-minpagex;x++) { cont.pages[x]=[]; for(y=0;y<Math.ceil(cont.maxy/dheight)-minpagey;y++) { cont.pages[x][y]=[]; } } for(x=0;x<items.length;x++) { var i=items.getAt(x); var pinned=i.getProperties() .getString("i.pinMode"); if(pinned!="XY") { var data=new Object(); data.posx=i.getPositionX(); data.posy=i.getPositionY(); data.rot=Math.abs(i.getRotation())==90; data.sx=data.rot?i.getScaleX():i.getScaleY(); data.sy=data.rot?i.getScaleY():i.getScaleX(); data.pin=pinned; if(i.getProperties().getBoolean("i.onGrid")) data.onGrid=true; else data.onGrid=false; i.getProperties().edit().setBoolean("i.onGrid",false).commit(); if(pinned=="X") { var ypages=cont.pages[Math.floor(data.posx/dwidth)-minpagex][Math.floor(data.posy/dheight)-minpagey]; for(z=0;cont.pages[z]!=null;z++) cont.pages[z][Math.floor(data.posy/dheight)-minpagey].push(i.getId()); } else if(pinned=="Y") { var xpages=cont.pages[Math.floor(data.posx/dwidth)-minpagex]; for(z=0;z<xpages.length;z++) xpages[z].push(i.getId()); } else cont.pages[Math.floor(data.posx/dwidth)-minpagex][Math.floor(data.posy/dheight)-minpagey].push(i.getId()); i.setTag(JSON.stringify(data)); } } cont.setup=true; Android.makeNewToast("Animation enabled",true).show(); LL.writeToLogFile(JSON.stringify(cont.pages),false); } else { var cellw=d.getCellWidth(); var cellh=d.getCellHeight(); for(x=0;x<items.length;x++) { var i=items.getAt(x); var data=JSON.parse(i.getTag()); i.setScale(1,1); if(data!=null&& data.onGrid==true) { iwidth=i.getWidth(); iheight=i.getHeight(); i.getProperties().edit().setBoolean("i.onGrid",true).commit(); i.setCell(Math.round(data.posx/cellw),Math.round(data.posy/cellh),Math.round((data.posx+iwidth)/cellw),Math.round(( data.posy+iheight)/cellh)); } } cont.setup=false; Android.makeNewToast("Animation disabled",true).show(); } d.setTag(JSON.stringify(cont)); } if(cont==null || !cont.setup || d.getPositionScale()!=1)return; var dposx=d.getPositionX(); var dposy=d.getPositionY(); var currentx=Math.floor(dposx/dwidth); var pageposx=currentx*dwidth; var percentx=(dposx-pageposx)/dwidth; var currenty=Math.floor(dposy/dheight); var pageposy=currenty*dheight; var percenty=(dposy-pageposy)/dheight; var maxpagex=Math.floor( (cont.maxx-dwidth)/dwidth); var maxpagey=Math.floor( (cont.maxy-dheight)/dheight); var minpagex=Math.floor( cont.minx/dwidth); var minpagey=Math.floor( cont.miny/dheight); if(((percentx>0.005 && percentx<99.995) ||(percenty>0.005 && percenty<99.995)) && dposx>cont.minx-dwidth && dposy>cont.miny-dheight) { var scrollLimit=d.getProperties() .getBoolean("noScrollLimit"); if(dposx>cont.maxx-dwidth&&scrollLimit){ d.setPosition(cont.minx-dwidth,dposy,1,false); } else if(dposy>cont.maxy-dheight&&scrollLimit) d.setPosition(dposx,cont.miny-dheight,1,false); if(dposx<cont.minx&&scrollLimit) cont.statex=true; if(dposy<cont.miny&&scrollLimit) cont.statey=true; var items0=(cont.pages[(cont.statex?maxpagex:currentx)-minpagex]||[])[(cont.statey?maxpagey:currenty)-minpagey]; if(items0!=null) { for(z=0;z<items0.length;z++) { var item=LL.getItemById(items0[z]); var data=JSON.parse(item.getTag()); item.setScale(((data.pin=="X"||percentx>=0.5||percenty>=0.5)?1:data.rot?1-percenty*2:1-percentx*2)*data.sx, ((data.pin=="Y"||percentx>=0.5||percenty>=0.5)?1:1-(data.rot?percentx:percenty)*2)*data.sy); item.setPosition(data.pin=="X"?data.posx:dposx+((data.posx%dwidth+dwidth)%dwidth)+percentx*(dwidth- ((data.posx%dwidth+dwidth)%dwidth)*2),data.pin=="Y"?data.posy:dposy+((data.posy%dheight+dheight)%dheight)+percenty*(dheight- ((data.posy%dheight+dheight)%dheight)*2)); item.setVisibility((percentx<0.5||data.pin=="X")&&(percenty<0.5||data.pin=="Y")); } } var items=(cont.pages[currentx+1-minpagex]||[])[(cont.statey?maxpagey:currenty)-minpagey]; if(items!=null) { for(z=0;z<items.length;z++) { if(items0==null||items0.indexOf(items[z])==-1) { var item=LL.getItemById(items[z]); var data=JSON.parse(item.getTag()); item.setScale((data.pin=="X"||percentx<0.5||percenty>=0.5?1:data.rot?1-percenty*2:percentx>0.005?percentx*2-1:1)*data.sx,(data.pin=="Y"||percentx<0.5||percenty>=0.5?1:data.rot?(percentx>0.005?percentx*2-1:1):1-percenty*2)*data.sy); item.setPosition(data.pin=="X"?data.posx:dposx+dwidth/2*(2-percentx*2)+ ((data.posx%dwidth+dwidth)%dwidth)*(percentx*2-1),data.pin=="Y"?data.posy:dposy+((data.posy%dheight+dheight)%dheight)+percenty*(dheight- ((data.posy%dheight+dheight)%dheight)*2)); item.setVisibility((percentx>=0.5||data.pin=="X")&&(percenty<0.5||data.pin=="Y")); } } } var items=(cont.pages[(cont.statex?maxpagex:currentx)-minpagex]||[])[currenty+1-minpagey]; if(items!=null) { for(z=0;z<items.length;z++) { if(items0==null||items0.indexOf(items[z])==-1) { var item=LL.getItemById(items[z]); var data=JSON.parse(item.getTag()); item.setScale((data.pin=="X"||percentx>=0.5||percenty<0.5?1:data.rot?(percenty>0.005?percenty*2-1:1):1-percentx*2)*data.sx,(data.pin=="Y"|| percentx>=0.5||percenty<0.5?1:data.rot?1-percentx*2:percenty>0.005?percenty*2-1:1)*data.sy); item.setPosition(data.pin=="X"?data.posx:dposx+((data.posx%dwidth+dwidth)%dwidth)+percentx*(dwidth- ((data.posx%dwidth+dwidth)%dwidth)*2),data.pin=="Y"?data.posy:dposy+dheight/2*(2-percenty*2)+ ((data.posy%dheight+dheight)%dheight)*(percenty*2-1)); item.setVisibility((percentx<0.5||data.pin=="X")&&(percenty>=0.5||data.pin=="Y")); } } } } else { d.setPosition(dposx,dposy); d.setPosition(dposx<cont.minx?cont.maxx-dwidth:dposx,dposy<cont.miny?cont.maxy-dheight:dposy,1,false); cont.statex=false; cont.statey=false; for(i=0;i<items.length;i++) { item=items.getAt(i); var data=JSON.parse(item.getTag()); item.setScale(data.sx,data.sy); item.setPosition(data.posx,data.posy); item.setVisibility(true); } } </sxh>

script_animation_flip.txt · Last modified: 2014/09/24 16:10 by lm13