User Tools

Site Tools


script_animation_bulldoze

====== Differences ====== This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
script_animation_bulldoze [2014/06/03 12:00]
lm13 [About the script]
script_animation_bulldoze [2015/07/09 19:56] (current)
lm13
Line 1: Line 1:
 ====== About the script ====== ====== About the script ======
-  * Purpose : These scripts ​will give you a beautiful page transition animation and an optional horizontal and vertical page loop+  * Purpose : This script ​will give you a beautiful page transition animation and an optional horizontal and vertical page loop
   * Author : [[https://​plus.google.com/​+LukasMorawietz|LM13]]   * Author : [[https://​plus.google.com/​+LukasMorawietz|LM13]]
-  * Current Version : 2.0+  * Current Version : 3.0.1
   * Link : https://​plus.google.com/​115366157037831519359/​posts/​GXVcfSaWVRi   * Link : https://​plus.google.com/​115366157037831519359/​posts/​GXVcfSaWVRi
   * Video : https://​plus.google.com/​115366157037831519359/​posts/​N4vKniRC4pe   * Video : https://​plus.google.com/​115366157037831519359/​posts/​N4vKniRC4pe
 +  * Download avialable! (Check repository)
 +
  
 ====== Changelog ====== ​ ====== Changelog ====== ​
   * Version 1.0 (1/4/2014): initial release in wiki   * Version 1.0 (1/4/2014): initial release in wiki
   * Version 2.0 (19/​5/​2014):​ added vertical support, improved smoothness   * Version 2.0 (19/​5/​2014):​ added vertical support, improved smoothness
 +  * Version 2.1 (20/​6/​2014):​ added rotation check
 +  * Version 3.0.1 (20/​7/​2014):​ standalone, improved smoothness
  
 ====== How to use the script ====== ====== How to use the script ======
-  * Set the main script to the positionchanged event of your container+  * Set the script to the positionchanged event of your container
   * enable infinte scrolling if you want to have a screen loop   * enable infinte scrolling if you want to have a screen loop
-  * in this container: create a shortcut to the [[script_toggle_animation|Toggle Script]] and set up toggle scripts configuration+  * in this container: create a shortcut to the script
   * one click on the shortcut will enable the animation, clicking again will disable the animation. ​   * 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!   * BE SURE TO DISABLE THE ANIMATION BEFORE YOU EDIT, MOVE OR ADD ITEMS!
Line 20: Line 24:
   * this will break any other script, which uses item or container tags, and will be broken by them      * this will break any other script, which uses item or container tags, and will be broken by them   
   * at some point it may flicker ​   * at some point it may flicker ​
-  * with many items it won't run smooth 
   * don't use dual position, this will do weird stuff   * 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// //please report all bugs in the g+ community//
  
-====== ​Main Script code ====== +====== Script code ====== 
-<code>​var ​d=LL.getEvent().getContainer();​ +<sxh javascript;>​var ​e=LL.getEvent()
-var cont= JSON.parse(d.getTag()||"​null"​);​ +var d=e.getContainer();​ 
-if(cont==null || !cont.setup || d.getPositionScale()!=1)return+var cont= JSON.parse(d.getTag()||"​null"​);​  
-var dwidth=d.getWidth();​+var items=d.getItems(); 
 +var dwidth=d.getWidth(); ​
 var dheight=d.getHeight();​ 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.pin=pinned;​
 +if(i.getProperties().getBoolean("​i.onGrid"​)) data.onGrid=true; ​
 +else data.onGrid=false;​
 +i.getProperties().edit().setBoolean("​i.onGrid",​false).commit();​
 +i.setTag(JSON.stringify(data));​
 +if(pinned=="​X"​)
 +{
 +var ypages=cont.pages[Math.floor(data.posx/​dwidth)-minpagex][Math.floor(data.posy/​dheight)-minpagey];​
 +for(z=0;​z<​ypages.length;​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());​
 +}
 +
 +cont.setup=true;​
 +Android.makeNewToast("​Animation enabled",​true).show();​
 +
 +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 dposx=d.getPositionX();​
 var dposy=d.getPositionY();​ var dposy=d.getPositionY();​
Line 39: Line 123:
 var pageposy=currenty*dheight;​ var pageposy=currenty*dheight;​
 var percenty=(dposy-pageposy)/​dheight;​ var percenty=(dposy-pageposy)/​dheight;​
-var items=d.getItems();​ 
-var l=items.getLength();​ 
 var maxpagex=Math.floor( (cont.maxx-dwidth)/​dwidth);​ var maxpagex=Math.floor( (cont.maxx-dwidth)/​dwidth);​
 var maxpagey=Math.floor( (cont.maxy-dheight)/​dheight);​ 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) if(((percentx>​0.005 && percentx<​99.995) ||(percenty>​0.005 && percenty<​99.995)) && dposx>​cont.minx-dwidth && dposy>​cont.miny-dheight)
Line 55: Line 139:
 if(dposy<​cont.miny&&​scrollLimit) if(dposy<​cont.miny&&​scrollLimit)
 cont.statey=true;​ cont.statey=true;​
-for(i=0;i<l;i++)+var items=(cont.pages[(cont.statex?​maxpagex:​currentx)-minpagex]||[])[(cont.statey?​maxpagey:​currenty)-minpagey]; 
 +if(items!=null)
 { {
-item=items.getAt(i); +for(z=0;z<items.length;z++) 
-var pinned=item.getProperties() .getString("​i.pinMode"​);+{ 
 +var item=LL.getItemById(items[z]);
 var data=JSON.parse(item.getTag());​ var data=JSON.parse(item.getTag());​
-var newposx=data.posx; +item.setScale(data.pin=="​X"?​1:​1-(data.rot?​percenty:​percentx),​data.pin=="​Y"?​1:​1-(data.rot?​percentx:​percenty))
-var newposy=data.posy+item.setPosition(data.pin=="​X"?​data.posx:​dposx+((data.posx%dwidth+dwidth)%dwidth)*(1-percentx),​data.pin=="​Y"?​data.posy:​dposy+((data.posy%dheight+dheight)%dheight)*(1-percenty)); 
-var newscalex=1+
-var newscaley=1; +} 
-var newvis=true+var items=(cont.pages[currentx+1-minpagex]||[])[(cont.statey?​maxpagey:​currenty)-minpagey]
-if(pinned=="​NONE"​|| pinned=="​Y"​)+if(items!=null)
 { {
-if((Math.floor(data.posx/​dwidth)==currentx || (cont.statex && Math.floor(data.posx/​dwidth)==maxpagex))&&​1-percentx>​0.005)+for(z=0;z<items.length;z++)
 { {
-newscalex=1-percentx;​ +var item=LL.getItemById(items[z]);​ 
-newposx=dposx+((data.posx%dwidth+dwidth)%dwidth)*(1-percentx);+var data=JSON.parse(item.getTag());​ 
 +item.setScale(data.pin=="​X"?​1:​data.rot?​1-percenty:percentx>​0.005?​percentx:​1,​data.pin=="​Y"?​1:​data.rot?​(percentx>​0.005?​percentx:​1):​1-percenty)
 +item.setPosition(data.pin=="​X"?​data.posx:​dposx+dwidth-(dwidth-(data.posx%dwidth+dwidth)%dwidth)*percentx,​data.pin=="​Y"?​data.posy:​dposy+((data.posy%dheight+dheight)%dheight)*(1-percenty));
 } }
-if(Math.floor(data.posx/​dwidth) ==currentx+1 ​&& percentx>​0.005)+
 +var items=(cont.pages[(cont.statex?​maxpagex:​currentx)-minpagex]||[])[currenty+1-minpagey];​ 
 +if(items!=null)
 { {
-newscalex=percentx;​ +for(z=0;​z<​items.length;​z++) 
-newposx=dposx+dwidth-(dwidth- ​((data.posx%dwidth+dwidth)%dwidth))*percentx;+
 +var item=LL.getItemById(items[z]);​ 
 +var data=JSON.parse(item.getTag());​ 
 +item.setScale(data.pin=="​X"?​1:​data.rot?​(percenty>​0.005?​percenty:​1):​1-percentx, data.pin=="​Y"?​1:​data.rot?​1-percentx:​percenty>​0.005?​percenty:​1)
 +item.setPosition(data.pin=="​X"?​data.posx:​dposx+((data.posx%dwidth+dwidth)%dwidth)*(1-percentx),​data.pin=="​Y"?​data.posy:​dposy+dheight-(dheight-(data.posy%dheight+dheight)%dheight)*percenty);
 } }
 } }
-if(pinned=="​NONE"​|| pinned=="​X"​)+var items=(cont.pages[currentx+1-minpagex]||[])[currenty+1-minpagey];​ 
 +if(items!=null)
 { {
-if((Math.floor(data.posy/​dheight)==currenty|| (cont.statey && Math.floor(data.posy/​dheight)==maxpagey))&&​1-percenty>​0.005)+for(z=0;z<items.length;z++)
 { {
-newscaley=1-percenty+var item=LL.getItemById(items[z])
-newposy=dposy+((data.posy%dheight+dheight)%dheight)*(1-percenty); } +var data=JSON.parse(item.getTag()); 
-if(Math.floor(data.posy/​dheight) ​==currenty+1&&percenty>​0.005) +item.setScale(data.pin=="​X"?​1:data.rot?(percenty>​0.005?percenty:1):​percentx>​0.005?​percentx:​1,​data.pin=="​Y"?​1:​data.rot?​(percentx>​0.005?​percentx:​1):​percenty>​0.005?​percenty:​1)
-+item.setPosition(data.pin=="​X"?​data.posx:​dposx+dwidth-(dwidth-(data.posx%dwidth+dwidth)%dwidth)*percentx,​data.pin=="​Y"?​data.posy:​dposy+dheight-(dheight-(data.posy%dheight+dheight)%dheight)*percenty);
-newscaley=percenty;​ +
-newposy=dposy+dheight-(dheight- ​((data.posy%dheight+dheight)%dheight))*percenty;+
 } }
-} item.setScale(newscalex,​newscaley);​ 
-item.setPosition(newposx,​newposy);​ 
 } }
 } }
Line 99: Line 190:
 cont.statex=false;​ cont.statex=false;​
 cont.statey=false;​ cont.statey=false;​
-for(i=0;​i<​l;i++)+for(i=0;​i<​items.length;i++)
 { {
 item=items.getAt(i);​ item=items.getAt(i);​
Line 107: Line 198:
 } }
 } }
-</code> +</sxh>
- +
script_animation_bulldoze.1401796813.txt.gz · Last modified: 2014/06/03 12:00 by lm13