atompuzzle(ex)

ac3.0 from hansune

역시나 정리되지않고 혼자보기도 부담스럽다.ㅎ

package {

 import flash.display.*;
 import flash.events.*;
 import flash.utils.setTimeout;
 import flash.utils.Timer;
 import flash.filters.BitmapFilter;
 import flash.filters.BitmapFilterQuality;
 import flash.filters.GlowFilter;
 import flash.geom.ColorTransform;

 public class atompuzzle extends MovieClip {

  private var i:int;

  private const stageW:Number = 1360;
  private const stageH:Number = 768;

  private var isOnline0:Array = new Array();
  private var isOnline1:Array = new Array();
  private var isOnline2:Array = new Array();
  private var isOnline3:Array = new Array();

  private var line0:Sprite = new Sprite();
  private var line1:Sprite = new Sprite();
  private var line2:Sprite = new Sprite();

  private var moleculeSprite:Sprite = new Sprite();
  private var lineSprite:Sprite = new Sprite();
  private var celSpriteUp:Sprite = new Sprite();
  private var celSpriteDn:Sprite = new Sprite();

  private var isMoleculeOk0:Boolean = false;
  private var isMoleculeOk1:Boolean = false;
  private var isMoleculeOk2:Boolean = false;
  private var isMoleculeOk3:Boolean = false;
 
  private var rOffset:Number = 0;
  private var tgRedOff:Number = 0;
  private var bOffset:Number = 0;
  private var tgBlueOff:Number = 0;
 
  public var puzzleReady:Boolean = false;
  public var puzzleOk:Boolean = false;

  public function atompuzzle():void {
   for (i=0; i<3; ++i) {
    this["c"+i].x = Math.random()*stageW/2 + stageW/4;
    this["c"+i].y = Math.random()*stageH/2 + stageH/4;
    this["c"+i].alpha = 0;
   
    celSpriteDn.addChild(this["c"+i]);
    lineSprite.addChild(this["line"+i]);
   }
   for (i=0; i<4; ++i) {
    this["molecule"+i].x = Math.random()*stageW/2 + stageW/4;
    this["molecule"+i].y = Math.random()*stageH/2 + stageH/4;
    this["molecule"+i].gotoAndStop(1);
    this["molecule"+i].alpha = 0;
    moleculeSprite.addChild(this["molecule"+i]);
   }
   // added child oder is important.
   this.addChild(lineSprite);
   this.addChild(moleculeSprite);
   this.addChild(celSpriteDn);
   this.addChild(celSpriteUp);

   this.atomBg.alpha = 0;

  }
  //////////////////////////////////////////////////////////////////////////////////////////////////////
  //////////////////////////////////////////////////////////////////////////////////////////////////////

  public function startPuzzle():void {
   for (i=0; i<3; ++i) {
    this["c" + i].addEventListener(Event.ENTER_FRAME,celView);
   }
   
   for (i=0; i<4; ++i) {
    this["molecule"+i].addEventListener(Event.ENTER_FRAME,rotateMolecule);
   }
   
   this.addEventListener(Event.ENTER_FRAME,drawLine);
   //this.addEventListener(Event.ENTER_FRAME,atomBgView);
   puzzleReady = true;
  }
  public function ADDlistener():void{
   for (i=0; i<3; ++i) {
    this["c" + i].addEventListener(MouseEvent.MOUSE_DOWN,dragC);
    this["c" + i].addEventListener(MouseEvent.MOUSE_UP,releaseC);
    this["c" + i].addEventListener(MouseEvent.MOUSE_OVER,overC);
    this["c" + i].addEventListener(MouseEvent.MOUSE_OUT,outC);
   }
   
  }
  private function atomBgView(e:Event):void{
   atomBg.alpha += 0.1;
   if(atomBg.alpha > 0.9){
    this.removeEventListener(Event.ENTER_FRAME,atomBgView);
    atomBg.alpha = 1.0;
   }
  }
  // 버튼 이벤트 종료..
  public function celEventDel():void {
   for (i=0; i<3; ++i) {
    this["c" + i].stopDrag();
    this["c" + i].removeEventListener(MouseEvent.MOUSE_DOWN,dragC);
    this["c" + i].removeEventListener(MouseEvent.MOUSE_UP,releaseC);
    this["c" + i].removeEventListener(MouseEvent.MOUSE_OVER,overC);
    this["c" + i].removeEventListener(MouseEvent.MOUSE_OUT,outC);
   }
   for (i=0; i<4; ++i) {
    this["molecule"+i].gotoAndStop(20);
   }
   
  }
  /// 분자 회전 중지... 장면전환할때 실행
  public function moleculeEventDel():void{
   for (i=0; i<4; ++i) {
    this["molecule"+i].removeEventListener(Event.ENTER_FRAME,rotateMolecule);
   }
  }
  private function dragC(e:MouseEvent):void {
   var s:Sprite = Sprite(e.currentTarget);
   s.startDrag();
   celSpriteDn.removeChild(s);
   celSpriteUp.addChild(s);
  }
  private function releaseC(e:MouseEvent):void {
   var s:Sprite = Sprite(e.currentTarget);
   s.stopDrag();
   celSpriteUp.removeChild(s);
   celSpriteDn.addChild(s);

  }
  private function overC(e:MouseEvent):void {
   e.currentTarget.scaleX = 1.2;
   e.currentTarget.scaleY = 1.2;
  }
  private function outC(e:MouseEvent):void {
   e.currentTarget.scaleX = 1.0;
   e.currentTarget.scaleY = 1.0;
  }
  private function rotateMolecule(e:Event):void{
   if(e.currentTarget.alpha < 1){
    e.currentTarget.alpha += 0.1;
   } else {
    e.currentTarget.alpha = 1.0;
   }
   
   e.currentTarget.rotation ++;
   e.currentTarget.rotation  = e.currentTarget.rotation %360;
  }
  private function celView(e:Event):void{
   e.currentTarget.alpha += 0.05;
   if(e.currentTarget.alpha >0.9){
    e.currentTarget.removeEventListener(Event.ENTER_FRAME,celView);
    e.currentTarget.alpha = 1.0;
   }
  }
 
  //////////////////////////////////////////////////////////////////////////////////////////////////////
  //////////////////////////////////////////////////////////////////////////////////////////////////////
  //////////////////////////////////////////////////////////////////////////////////////////////////////
  private function drawLine(e:Event):void {

   lineChk0();
   lineChk1();
   lineChk2();


   if (isOnline0[0] || isOnline0[1] || isOnline0[2]) {
    if(!molecule0.chk){
     molecule0.gotoAndPlay(20);
    }
    isMoleculeOk0 = true;
   } else {
    if(molecule0.chk){
     molecule0.gotoAndPlay(1);
    }
    isMoleculeOk0 = false;
   }
   //
   if (isOnline1[0] || isOnline1[1] || isOnline1[2]) {
    if(!molecule1.chk){
     molecule1.gotoAndPlay(20);
    }
    isMoleculeOk1 = true;
   } else {
    if(molecule1.chk){
     molecule1.gotoAndPlay(1);
    }
    isMoleculeOk1 = false;
   }
   //
   if (isOnline2[0] || isOnline2[1] || isOnline2[2]) {
    if(!molecule2.chk){
     molecule2.gotoAndPlay(20);
    }
    isMoleculeOk2 = true;
   } else {
    if(molecule2.chk){
     molecule2.gotoAndPlay(1);
    }
    isMoleculeOk2 = false;
   }
   //
   if (isOnline3[0] || isOnline3[1] || isOnline3[2]) {
    if(!molecule3.chk){
     molecule3.gotoAndPlay(20);
    }
    isMoleculeOk3 = true;
   } else {
    if(molecule3.chk){
     molecule3.gotoAndPlay(1);
    }
    isMoleculeOk3 = false;
   }

   if (isMoleculeOk0 && isMoleculeOk1 && isMoleculeOk2 && isMoleculeOk3) {
    trace("All onlineOk");
    puzzleOk = true;
    this.removeEventListener(Event.ENTER_FRAME,drawLine);
    celEventDel();
   }
  }

  private function lineChk0():void {
   
   var atan:Number = Math.atan2(c1.y - c0.y,c1.x - c0.x);
   var distance:Number = Math.sqrt((c1.y - c0.y)*(c1.y - c0.y)+(c1.x - c0.x)*(c1.x - c0.x));
   var span:int = 8;
   var sx:int = c0.x;
   var sy:int = c0.y;
   var area:Number = 20;
   
   //draw dot-line...
   line0.graphics.clear();
   line0.graphics.beginFill(0xffffff);
   for (i = 0; i<distance; i += span) {
   
    line0.graphics.drawCircle(sx+Math.cos(atan)*i,sy+Math.sin(atan)*i, 2);
   }
   line0.graphics.endFill();
   //
   
   
   for (i = 0; i<distance; i += span) {
    if (Math.abs(molecule0.x - (sx+Math.cos(atan)*i)) < area && Math.abs(molecule0.y - (sy+Math.sin(atan)*i)) < area) {
     isOnline0[0] = true;
     break;
    } else {
     isOnline0[0] = false;
    }
   }
   for (i = 0; i<distance; i += span) {
    if (Math.abs(molecule1.x - (sx+Math.cos(atan)*i)) < area && Math.abs(molecule1.y - (sy+Math.sin(atan)*i)) < area) {
     isOnline1[0] = true;
     break;
    } else {
     isOnline1[0] = false;
    }
   }
   for (i = 0; i<distance; i += span) {
    if (Math.abs(molecule2.x - (sx+Math.cos(atan)*i)) < area && Math.abs(molecule2.y - (sy+Math.sin(atan)*i)) < area) {
     isOnline2[0] = true;
     break;
    } else {
     isOnline2[0] = false;
    }
   }
   for (i = 0; i<distance; i += span) {
    if (Math.abs(molecule3.x - (sx+Math.cos(atan)*i)) < area && Math.abs(molecule3.y - (sy+Math.sin(atan)*i)) < area) {
     isOnline3[0] = true;
     break;
    } else {
     isOnline3[0] = false;
    }
   }
   
  }
 
  private function lineChk1():void {
   
   var atan:Number = Math.atan2(c2.y - c1.y,c2.x - c1.x);
   var distance:Number = Math.sqrt((c2.y - c1.y)*(c2.y - c1.y)+(c2.x - c1.x)*(c2.x - c1.x));
   var span:int = 8;
   var sx:int = c1.x;
   var sy:int = c1.y;
   var area:Number = 20;
   
   //draw dot-line...
   line1.graphics.clear();
   line1.graphics.beginFill(0xffffff);
   for (i = 0; i<distance; i += span) {
   
    line1.graphics.drawCircle(sx+Math.cos(atan)*i,sy+Math.sin(atan)*i, 2);
   }
   line1.graphics.endFill();
   //
   
   
   for (i = 0; i<distance; i += span) {
    if (Math.abs(molecule0.x - (sx+Math.cos(atan)*i)) < area && Math.abs(molecule0.y - (sy+Math.sin(atan)*i)) < area) {
     isOnline0[1] = true;
     break;
    } else {
     isOnline0[1] = false;
    }
   }
   for (i = 0; i<distance; i += span) {
    if (Math.abs(molecule1.x - (sx+Math.cos(atan)*i)) < area && Math.abs(molecule1.y - (sy+Math.sin(atan)*i)) < area) {
     isOnline1[1] = true;
     break;
    } else {
     isOnline1[1] = false;
    }
   }
   for (i = 0; i<distance; i += span) {
    if (Math.abs(molecule2.x - (sx+Math.cos(atan)*i)) < area && Math.abs(molecule2.y - (sy+Math.sin(atan)*i)) < area) {
     isOnline2[1] = true;
     break;
    } else {
     isOnline2[1] = false;
    }
   }
   for (i = 0; i<distance; i += span) {
    if (Math.abs(molecule3.x - (sx+Math.cos(atan)*i)) < area && Math.abs(molecule3.y - (sy+Math.sin(atan)*i)) < area) {
     isOnline3[1] = true;
     break;
    } else {
     isOnline3[1] = false;
    }
   }
   
  }
 
  private function lineChk2():void {
   
   var atan:Number = Math.atan2(c0.y - c2.y,c0.x - c2.x);
   var distance:Number = Math.sqrt((c0.y - c2.y)*(c0.y - c2.y)+(c0.x - c2.x)*(c0.x - c2.x));
   var span:int = 8;
   var sx:int = c2.x;
   var sy:int = c2.y;
   var area:Number = 20;
   
   //draw dot-line...
   line2.graphics.clear();
   line2.graphics.beginFill(0xffffff);
   for (i = 0; i<distance; i += span) {
   
    line2.graphics.drawCircle(sx+Math.cos(atan)*i,sy+Math.sin(atan)*i, 2);
   }
   line2.graphics.endFill();
   //
   
   
   for (i = 0; i<distance; i += span) {
    if (Math.abs(molecule0.x - (sx+Math.cos(atan)*i)) < area && Math.abs(molecule0.y - (sy+Math.sin(atan)*i)) < area) {
     isOnline0[2] = true;
     break;
    } else {
     isOnline0[2] = false;
    }
   }
   for (i = 0; i<distance; i += span) {
    if (Math.abs(molecule1.x - (sx+Math.cos(atan)*i)) < area && Math.abs(molecule1.y - (sy+Math.sin(atan)*i)) < area) {
     isOnline1[2] = true;
     break;
    } else {
     isOnline1[2] = false;
    }
   }
   for (i = 0; i<distance; i += span) {
    if (Math.abs(molecule2.x - (sx+Math.cos(atan)*i)) < area && Math.abs(molecule2.y - (sy+Math.sin(atan)*i)) < area) {
     isOnline2[2] = true;
     break;
    } else {
     isOnline2[2] = false;
    }
   }
   for (i = 0; i<distance; i += span) {
    if (Math.abs(molecule3.x - (sx+Math.cos(atan)*i)) < area && Math.abs(molecule3.y - (sy+Math.sin(atan)*i)) < area) {
     isOnline3[2] = true;
     break;
    } else {
     isOnline3[2] = false;
    }
   }
   
  }
 }
}