Bookclick.as

From Organic Design wiki
Revision as of 20:58, 8 December 2006 by Jack (talk | contribs)

// Code for [[SWF e-book]] is liscenced under [[[[1]]]] margin = 50;

// This initialises the book page lines createEmptyMovieClip("book",1);

function topRight() {

   w = (width-margin*2)/2;
   h = height-margin*2;
   ox = margin+w;
   oy = margin;
   // Set mouse co-ords at top right edge
   
   x = width;
   y = oy;
   // One iteration per pixel width
   for (i=0; i<600; i++) {
   // constrain mouse to radius W
   a = Math.atan2(y,x);
   r = Math.sqrt(x*x+y*y);
   if (r>w) r=w;
   x = Math.cos(a)*r;
   y = Math.sin(a)*r;


   // Calculate point Z and dy,dx of line C
   dx = w-x;
   dy = y;
   Zx = x+dx/2;
   Zy = y-dy/2;
   // Calculate line D
   Px = Zx-Zy*dy/dx;
   Py = 0;
   Qx = w;
   if (dy*dy<1) { a = 0; Qx = x; Qy = Ry = h; Rx = (x+w)/2; }
   else {
       Qy = Zy+(w-Zx)*dx/dy;
       if (Qy>h || Qy<0) {
           a = Math.atan2(Qy-y,Qx-x);
           if (Qy<0) a += Math.PI;
           Qx = x+Math.cos(a)*h;
           Qy = y+Math.sin(a)*h;
           Rx = Qx+(Qy-h)/(y-Py)*(Px-x);
           Ry = h;
           }
       else { Rx = Qx; Ry = Qy; }
       if (Qy==0) Rx = w-Qx;
       if (Rx<0) return;
       }
   // Draw page
   clear();
   lineStyle(3,0);
   moveTo(ox,oy);
   lineTo(ox,oy+h);
   moveTo(ox-w,oy);
   lineTo(ox+Px,oy+Py);
   lineTo(ox+Rx,oy+Ry);
   lineTo(ox+Rx,oy+h);
   lineTo(ox-w,oy+h);
   lineTo(ox-w,oy);
   // Draw fold
   beginFill(0xdddddd,100);
   moveTo(ox+x,oy+y);
   lineTo(ox+Px,oy+Py);
   lineTo(ox+Rx,oy+Ry);
   lineTo(ox+Qx,oy+Qy);
   lineTo(ox+x,oy+y);
   endFill();
   // Decrement x by one pixel
   x = x-1;
   }
   }

var mouseListener = new Object();

mouseListener.onMouseMove = topRight;

Mouse.addListener(mouseListener);