flash on 2015-7-8

by mutantleg
♥0 | Line 101 | Modified 2015-07-08 21:00:49 | 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/gZFI
 */

package {
    import flash.text.TextField;
    import flash.utils.Dictionary;
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {

          deb = new TextField(); deb.width=320;deb.height=240;deb.mouseEnabled=false;
          addChild(deb);            
            
          stage.addEventListener(Event.ENTER_FRAME, onEnter);  
        }//ctor

        public var deb:TextField;
 
        public function onEnter(e:Event):void
        {
            graphics.clear();
            graphics.lineStyle(2, 0);
            
            updateVec(vecAct);
            updateVec(vecAct2);
    
            graphics.lineStyle(2, 0xff0000);
            renderVec(vecAct);
            graphics.lineStyle(2, 0xff);
            renderVec(vecAct2);        
            
            var a:xActor;
            a = new xShip();
             a.cx=Math.random()*465;   a.vx=Math.random()*2-1;
             a.team = Math.random()*2;
            if (a.team == 0)  { a.cy = 32; a.vy=1; } else { a.cy=430; a.vy=-1; }      
           addActor(a, a.team==0?vecAct:vecAct2); 
              
              deb.text = ""+vecAct.length+"\n"+vecAct2.length;
              
        }//onenter    
        
       public function renderVec(vec:Vector.<xActor>):void
       {  var i:int; var num:int; var a:xActor;   num = vec.length;
          for (i = 0; i < num; i++) { a = vec[i]; if (a.dead) { continue; } if (!(a.visible)) { continue; }
          graphics.drawRect(a.cx-a.xrad,a.cy-a.yrad,a.xrad*2,a.yrad*2); }
       }//rendervec     
          
        public var vecAct:Vector.<xActor> = new Vector.<xActor>(0, false);
        public var vecAct2:Vector.<xActor> = new Vector.<xActor>(0, false);
     
        public var dictAct:Dictionary = new Dictionary();   public var curId:int = 1;
        public function addActor(a:xActor, vec:Vector.<xActor>):void
        { a.id = curId; curId += 1;   vec.push(a);   dictAct[a.id] = a;      a.game = this;      a.init();  }    
        public function getActor(id:int):xActor { return dictAct[id]; }             
        public function updateVec(vec:Vector.<xActor>):void
        { var bRemDead:Boolean; bRemDead = false;
          var i:int; var num:int; var a:xActor;   num = vec.length;
          for (i = 0; i < num; i++) { a = vec[i]; if (a.dead) {  bRemDead = true; continue; }
           if (a.asleep) { continue; } a.update();  }//nexti      
          if (bRemDead == false) { return; }      
          var k:int;  num = vec.length;
          for (i = 0; i < num; i++) { a = vec[i]; if (a.dead == false) { continue; }
            for (k = i; k < num-1; k++){ vec[k] = vec[k + 1]; }
            i -= 1;   a.remove();   vec.pop(); num = vec.length;
            delete dictAct[a.id]; }//nexti
        }//update   
            
        public function checkCol(b:xActor, vec:Vector.<xActor>):xActor
        {
          var i:int; var num:int; var a:xActor;   num = vec.length;
          for (i = 0; i < num; i++) 
          {
            a = vec[i];  
            if (a.dead) {continue;} if (a==b) {continue;}
            if (b.cx + b.xrad < a.cx - a.xrad) { continue; }  if (b.cx - b.xrad > a.cx + a.xrad) { continue; }   
            if (b.cy + b.yrad < a.cy - a.yrad) { continue; }  if (b.cy - b.yrad > a.cy + a.yrad) { continue; }        
            return a;
          }//nexti
          return null;
        }//checkcol           
            
   }//classend
}


internal class xActor
{
  public var game:FlashTest = null;
  public var cx:Number = 0;  public var cy:Number = 0;
  public var vx:Number = 0;  public var vy:Number = 0;  
  public var xrad:Number = 8;  public var yrad:Number = 8;  
  public var id:int = 0; 
  public var dead:Boolean = false;  public var asleep:Boolean = false;
  public var visible:Boolean = true;
  public var team:int = 0;  public var ownerid:int = 0;  
  public function init():void {}  public function update():void {} 
  public function remove():void {}  
}//xactor

internal class xShip extends xActor
{
  override public function update():void
  {
     if (team ==0)
     {
       var a:xActor;
       a = game.checkCol(this, game.vecAct2);
       if (a!=null) { dead=true; a.dead=true; }
     }//endif
      
    cx+=vx; cy+=vy;   
    if (cx<-32||cx>=512||cy<-32||cy>=512) 
    {
      var ta:Number;
      ta = Math.atan2(230-cy,230-cx);
       vx =Math.cos(ta); vy = Math.sin(ta);
      return;
    }//endif
  }//update
    
}//xship