flash on 2016-12-21

by mutantleg
♥0 | Line 136 | Modified 2016-12-21 23:32:24 | MIT License
play

ActionScript3 source code

/**
 * Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/865t
 */

package {
    import flash.events.MouseEvent;
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            
            vecAct = new Vector.<xAct>(0, false);
            var a:xAct; var i:int; var num:int;
            num=8;
            for (i=0;i<num;i+=1)
            {  a = new xAct();
               a.team=0xFF;
               a.cx = Math.random()*128;
               a.cy = Math.random()*128;           
              vecAct.push(a);   
            }//nexti
            for (i=0;i<num;i+=1)
            {  a = new xAct();
               a.team=0xFF0000;
               a.cx = 300+Math.random()*128;
               a.cy = 300+Math.random()*128;           
              vecAct.push(a);   
            }//nexti
            for (i=0;i<num;i+=1)
            {  a = new xAct();
               a.team=0xFF00;
               a.cx = 100+Math.random()*128;
               a.cy = 300+Math.random()*128;           
              vecAct.push(a);   
            }//nexti
            
            stage.addEventListener(MouseEvent.MOUSE_DOWN, onMdown);
            stage.addEventListener(MouseEvent.MOUSE_UP, onMup);
            stage.addEventListener(Event.ENTER_FRAME, onEnter);
        }//ctor
        
        public function onMdown(e:MouseEvent):void { mbutton = 1; }
        public function onMup(e:MouseEvent):void { mbutton = 0; }
        
        public var mbutton:int = 0;
        public var mhold:int = 0;

        public var vecAct:Vector.<xAct>;
        
        public var vecHold:Vector.<xAct> = new Vector.<xAct>(8, false);
        public var numHold:int = 0;
        
        public var gt:int = 0;
        
        public function getMag(ax:Number, ay:Number):Number
        { return Math.sqrt(ax*ax+ay*ay); }

       public function onEnter(e:Event):void
       {
         var mx:Number;
         var my:Number;
         
         if (mbutton > 0){mhold+=1;}else{mhold=0;}
         
         mx = stage.mouseX; my = stage.mouseY;  
           
         graphics.clear();
         graphics.lineStyle(2, 0);           

         var over:xAct;
         var a:xAct; var i:int; var num:int;
         over = null;
         num = vecAct.length;
         for (i=0;i<num;i+=1)
         {
           a = vecAct[i];
           if (a.active == false){continue;}
           graphics.beginFill(a.team, 0.5);
            graphics.drawCircle(a.cx, a.cy, 8);
           graphics.endFill();
           graphics.moveTo(a.cx, a.cy);
           graphics.lineTo(a.cx+Math.cos(a.ang)*8, a.cy+Math.sin(a.ang)*8);               
           
           if(a.target!=null)
           { graphics.moveTo(a.cx,a.cy); graphics.lineTo(a.target.cx, a.target.cy); }
           
           if (over == null && getMag(a.cx-mx, a.cy-my)<16)
           { over = a; graphics.drawCircle(a.cx, a.cy, 12);  }           
           
            a.combat();
           if (a!= over){ a.move(); }
           
           
           if (a.target == null && ( (i+gt)%32 == 0) )
           {
               // graphics.drawCircle(a.cx, a.cy,16); 
             a.target = checkTarg(a, 128);
           }
           
         }//nexti
         
         if (over != null && mhold == 1 && numHold < 8 )
         { mhold=3; a=over; a.active=false; vecHold[numHold] = a; numHold +=1;  }
         
         if (over == null && mhold == 1 && numHold > 0)
         { mhold = 3; numHold-=1; a =vecHold[numHold];  a.cx=mx; a.cy=my; a.active=true; a.target=null; }
         
         for(i=0;i<numHold;i+=1)
         { a = vecHold[i]; graphics.drawCircle(mx+16+i*8,my+8,4);  } 
         
         gt += 1;
         
       }//onenter

        public function checkTarg(m:xAct, mag:Number):xAct
        {
         var d:Number; var ret:xAct;  
         var a:xAct; var i:int; var num:int;
         num = vecAct.length;
         for (i=0;i<num;i+=1)
         {
           a = vecAct[i];
           if (a == m){continue;}   
           if (a.active == false) { continue; }
           if (a.team == m.team){continue;}
           d = getMag(a.cx-m.cx, a.cy-m.cy);
           if (d > mag){ continue; }
           mag = d; ret = a;  
         }//nexti
         return ret;            
        }//checktarg           
        
        
        
        
    }//classend
}

internal class xAct
{
  public var active:Boolean = true;
  public var cx:Number = 0;
  public var cy:Number = 0; 
  public var ang:Number = 0;  
  public var va:Number = 0.1;
  public var team:int = 0xFF;
  
  public var target:xAct = null;  
  
  public function getMag(ax:Number, ay:Number):Number
   { return Math.sqrt(ax*ax+ay*ay); }
  
  public function combat():void
  {
    if (target == null) { return; }  
    if (target.active == false) { target = null; return; }  
    
    
     ang = Math.atan2(target.cy-cy, target.cx-cx);
    if (getMag(cx-target.cx, cy-target.cy) < 32) { ang += 3.1415; }
      
  }//combat
  
  public function move():void
  {
    var vx:Number; var vy:Number;
    vx = Math.cos(ang);
    vy = Math.sin(ang);  
    if (vx>0&&cx+vx>435){ vx=-vx; }  
    if (vx<0&&cx+vx<0){ vx=-vx; }  
    if (vy>0&&cy+vy>435){ vy=-vy; }  
    if (vy<0&&cy+vy<0){ vy=-vy; }  
    ang = Math.atan2(vy, vx);  

    if (Math.random()<0.2){ va = Math.random()<0.5?-0.1:0.1; }
    ang+=va;

    cx+=vx;cy+=vy;      
      
  }//move   
      
}//xact