E-book comb.as

From Organic Design wiki
Revision as of 08:16, 21 December 2006 by Jack (talk | contribs) (bloody mess, only half of it, and there is a problem clicking twice)

// Code for SWF e-book is liscenced under LGPL margin = 50; w = (Stage.width-margin*2)/2; h = Stage.height-margin*2; i = 0; speed = 8;

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

createEmptyMovieClip("right_next",2);

right_next.createTextField('content',0,0,0,50,50); with (right_next.content) {

   autosize = 'left';
   selectable = false;
   _quality = 'BEST';
   border = false;
   multiline = true;
   wordWrap = false;
   html = true;
   embedFonts = true;
   htmlText = 'Hello right world!';
   }

// Draws page lines and fold line based on mouse position

function topRight(i,j,k) {


   // Get mouse coords relative to book middle
   y= 60;
   if (i) {

if (j == 1) {

       x = i-ox;

ox = margin+w; oy = margin;

   //    if (y <-5) y = -5;
  if (x <= -255) y = 0;

//if (x >= 400) y =0;

//    if (y >60) y = 60;
if (y<60) y = 0;
  
  
   // 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(1,0);
   moveTo(ox,oy);
   lineTo(ox,oy+h);

lineTo(ox+w,oy+h); lineTo(ox+w,oy); lineTo(ox,oy);

   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(0xeeeeee,100);
   moveTo(ox+x,oy+y);
   lineTo(ox+Px,oy);
   lineTo(ox+Rx,oy+Ry);
   lineTo(ox+Qx,oy+Qy);
   lineTo(ox+x,oy+y);
   endFill();
   // orient right_next page
   _root.right_next._x = x;
   _root.right_next._y = y;
   _root.right_next._rotation = a*57.29578;

if (x < -254) return;

   }

if (j == -1) {

//       if (y <-5) y = 0;
//  if (y <= 10) y = 0;

//if (x >= 400) y =0;

 //   if (y >60) y = 60;
 ox = margin+w;
   oy = margin;
   // Get mouse coords relative to book middle, reverse ox
   x = ox-i;
  if (x <= -255) y = 0;
//   if (y<60) y = 0;
   // 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(1,0);
   moveTo(ox,oy);
   lineTo(ox,oy+h);

lineTo(ox-w,oy+h); lineTo(ox-w,oy); lineTo(ox,oy);

   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();
   // orient right_next page
   _root.left_next._x = ox-x;
   _root.left_next._y = oy+y;
   _root.left_next._rotation = -a*57.29578;

if (x < -254) return; }

trace(x); trace(y); /*trace(Px); trace (Py); trace (Rx); trace(Ry); trace(Qx); trace(Qy);*/ trace(i); } } function reduce() {

   if (i) topRight (i-=speed,j,k);

}

var coords = new Object();

var mouseListener = new Object();

//mouseListener.onMouseMove = function(){


// book.onMouseMove = topRight();

//};

mouseListener.onMouseUp = function(){ coords.across = 0; coords.down = 0;

  if (_xmouse >=305) {

coords.across = 1; i=Stage.width-margin;

  }
  if (_xmouse < 305) {

coords.across = -1; i=margin; speed = -speed;

  }

// if (_ymouse <= 150) coords.down = -1;

//  if (_ymouse > 150 && _ymouse <= 250) coords.down = 0;
//  if (_ymouse > 250) coords.down = 1;
j = coords.across;
k = coords.down;
     			   

};

Mouse.addListener(mouseListener);