flash on 2016-5-8

by mutantleg
♥0 | Line 216 | Modified 2016-05-08 00:51:23 | 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/Y9M8
 */

package {
    import flash.events.KeyboardEvent;
    import flash.events.MouseEvent;
    import flash.text.TextField;
    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); 
            
            vecAct = new Vector.<xAct>(0,false);
            vecBull = new Vector.<xAct>(0,false);
    
            var a:xAct;          
              a  =new xTemp();
              a.cx=230;a.cy=230;
              vecAct.push(a);
          
             a = new xMakeRoid();
             a.cx=230;a.cy=230;
             a.visible=false;
             vecBull.push(a);
          
             stage.addEventListener(MouseEvent.MOUSE_DOWN, onMdown);
              stage.addEventListener(MouseEvent.MOUSE_UP, onMup);
              stage.addEventListener(KeyboardEvent.KEY_DOWN, onKdown);
              stage.addEventListener(KeyboardEvent.KEY_UP, onKup);

            stage.addEventListener(Event.ENTER_FRAME, onEnter);            
        }//ctor
         
        public function onMdown(e:MouseEvent):void { mbutton = 1; }
        public function onMup(e:MouseEvent):void { mbutton  =0; }
        public function onKdown(e:KeyboardEvent):void { vecKey[e.keyCode] = true; }
        public function onKup(e:KeyboardEvent):void { vecKey[e.keyCode] = false; }    
    
        public function onEnter(e:Event):void
        {
            graphics.clear();
            graphics.lineStyle(2, 0);

              targx = stage.mouseX;
              targy = stage.mouseY;

            
            updateVec(vecAct); 
            updateVec(vecBull); 
            
            renderVec(vecAct);
            renderVec(vecBull);
  
            graphics.drawRect(0, 430, prhp*2, 32);
  
            deb.text = ""+gt+"\n"+vecAct.length+"\n"+vecBull.length;
            gt += 1;
        }//onenter
         
         public var deb:TextField; 

        
        public function renderVec(vec:Vector.<xAct>):void
        { var i:int; var num:int; var a:xAct;
           num = vec.length; for(i=0;i<num;i+=1)
           { a = vec[i]; if (a==null || a.hp <=0) { continue; }
            if(a.visible==false){continue;} a.render(graphics); }
        }//render
     
         public function updateVec(vec:Vector.<xAct>):void
          { var i:int; var num:int; var a:xAct; var k:int; 
             num = vec.length;  
             for (i = 0; i < num; i += 1)
             {a = vec[i];  if (a == null || a.dead) { continue; }  a.update(); }   
             num = vec.length;  
             for(i=0;i<num;i+=1)
             { a = vec[i];  if (a ==null || a.dead)
               { for (k=i;k<num-1;k+=1)  { vec[k]=vec[k+1]; }   
                 vec.pop(); num-=1; i-=1; continue; }  
             }//nexti
          }//update

    }//classend
    
}
import flash.display.Graphics;
import flash.ui.Keyboard;


  var gt:int = 0;
  var vecAct:Vector.<xAct>; 
  var vecBull:Vector.<xAct>;

  var targx:Number = 0;  var targy:Number = 0;
  var prx:Number =0; var pry:Number = 0;
  var prhp:int = 100;
   
  var mbutton:int = 0;
  var vecKey:Vector.<Boolean> = new Vector.<Boolean>(512,false);
  function isKeyDown(k:int):Boolean { return vecKey[k] == true; }


    function getMag(ax:Number, ay:Number):Number
      { return Math.sqrt(ax * ax + ay * ay); }     
    
    function isWall(ax:Number,ay:Number):Boolean
    {  return  (ax<0||ay<0||ax>465||ay>465); }


internal class xAct {
  public var cx:Number = 0;  public var cy:Number = 0;
  public var vx:Number = 0;  public var vy:Number = 0;
  public var rad:Number = 8; public var ang:Number = 0;
  public var hp:Number = 10; public var dead:Boolean = false;
  public var visible:Boolean=true;
  public var dmg:Number = 0;
  public var reload:int = 0;
  public var team:int = 0;
  
  public function gotHit(d:Number):void { hp-=d; if (hp<=0){kill();} }
  public function kill():void { if(dead){return;} dead=true; onKilled(); }
  public function onKilled():void {}

  public function render(g:Graphics):void
  { g.drawCircle(cx,cy,rad); }

  public function update():void {}
  
}//xactor


internal class xBull extends xAct
{
  override public function update():void 
  {
      hp-=1;if(hp<=0){dead=true;}
      
      var a:xAct; var i:int; var num:int;
      num = vecAct.length;
      for (i = 0; i < num; i += 1)
      {
        a = vecAct[i];
        if (a.team == team) { continue; }
        if ((cx + rad < a.cx - a.rad || cy + rad < a.cy - a.rad
        || cx - rad > a.cx + a.rad || cy - rad > a.cy + a.rad))
        { continue; }
        
        if (getMag(a.cx - cx, a.cy - cy) > (rad + a.rad)) { continue; } 
        
        a.gotHit(dmg); kill(); return;
      }//nexti
      
     cx+=vx;cy+=vy;  
  }//update
  
  
}//xbull


internal class xRoid extends xAct
{
  public function xRoid()
  { hp=10; dmg=1;  }

  override public function onKilled():void
  {
    if (rad<16){return;}
    var i:int; var a:xAct;
    for(i=0;i<3;i+=1)
    {
      a = new xRoid();
      a.cx=cx;a.cy=cy;
      a.ang = ang + i*(6.28/3);
      a.vx =Math.cos(a.ang)*4;
      a.vy =Math.cos(a.ang)*4;
      a.rad = rad*0.6;
      a.hp = a.rad*0.25 +1;
      vecAct.push(a);
    }//nexti  
  }//onkilled  
    
  override public function update():void 
  {
   
   var wallhit:int = 0;
    wallhit = 0;
   
    vx = Math.cos(ang)*4;
    vy = Math.sin(ang)*4;
   
    if (vx<0&&isWall(cx-rad,cy)){vx-=vx;wallhit=1;} 
    if (vx>0&&isWall(cx+rad,cy)){vx-=vx;wallhit=1;} 
    if (vy<0&&isWall(cx,cy-rad)){vy=-vy;wallhit=1;} 
    if (vy>0&&isWall(cx,cy+rad)){vy=-vy;wallhit=1;} 
    if (wallhit >0){ ang = Math.atan2(vy,vx); ang+=Math.random()*0.2-0.1; }
    
    cx+=vx;cy+=vy; 

  }//update    
    
}//xroid

internal class xMakeRoid extends xAct
{
    
  override public function update():void 
  {
    if (reload > gt) { return; }
    
    cx = Math.random()*465;
    cy = Math.random()*465;

    if (getMag(prx-cx, pry-cy)<128){return;}
    if (vecAct.length>5){return; }

    reload = gt+ 64;
    
    var a:xAct;
    a = new xRoid();
     a.cx=cx;a.cy=cy; a.team=team;
     a.rad=32;
     a.ang = Math.random()*6.28;
    vecAct.push(a);
    
  }//update   
}//xmakeroid



internal class xTemp extends xAct
{
  public function xTemp()
  { team = 1; rad=12; }
    
  override public function update():void 
  {
    var dx:Number; var dy:Number; dx = 0; dy = 0;
    var ms:Number; ms = 4;
    vx = 0; vy = 0;
    if (isKeyDown(Keyboard.W)) { vy += -ms; dy -= 1; }
    if (isKeyDown(Keyboard.S)) { vy +=  ms; dy += 1; }
    if (isKeyDown(Keyboard.A)) { vx += -ms; dx -= 1; }
    if (isKeyDown(Keyboard.D)) { vx += ms;  dx += 1; }

    cx+=vx; cy+=vy;      
    
    prx=cx; pry=cy;
    
    ang = Math.atan2(targy-cy,targx-cx);
    
    if (mbutton > 0)
    if (reload <gt)
    {
     reload =gt+8;   
     ms=8;
     var a:xAct;
     a = new xBull();
      a.cx=cx;a.cy=cy;
      a.vx = Math.cos(ang)*ms;
      a.vy=Math.sin(ang)*ms;
      a.team=team;
      a.hp=32;
      a.dmg=6;
     vecBull.push(a);
     
        
    }//endif


       var i:int; var num:int;
      num = vecAct.length;
      for (i = 0; i < num; i += 1)
      {
        a = vecAct[i];
        if (a==this){continue; }
        if (a.team == team) { continue; }
        if ((cx + rad < a.cx - a.rad || cy + rad < a.cy - a.rad
        || cx - rad > a.cx + a.rad || cy - rad > a.cy + a.rad))
        { continue; }
        
        if (getMag(a.cx - cx, a.cy - cy) > (rad + a.rad)) { continue; } 
        
        //gotHit(a.dmg); 
        prhp-=1;
      }//nexti

      
  }//xupdate
  
    
}//xship