flash on 2015-7-21

by mutantleg
♥0 | Line 98 | Modified 2015-07-21 07:26: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/cC1p
 */

package {
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            
          tmap = new xTmap();
          tmap.initEmpty(32,24);  
          tmap.setRect2(0,0,32,24,1);
          tmap.setRect2(1,1, 30,22, 0);  
        
          worldw = tmap.mw * tmap.cw;
          worldh = tmap.mh * tmap.ch;
        
          var i:int;
          for (i=0;i<32; i++)
          {
            tmap.setRect2(Math.random()*30,Math.random()*20,4,1, 1);  
          }//nexti  
            
          stage.addEventListener(Event.ENTER_FRAME, onEnter);  
        }//ctor
        
        public var tmap:xTmap;    
        public var worldw:Number = 320;
        public var worldh:Number = 240;    
        public var camx:Number = 0;
        public var camy:Number = 0;
        public var wmx:Number = 0;
        public var wmy:Number = 0;
        
        
        public function onEnter(e:Event):void
        {
            var mx:Number; var my:Number;
            var kx:Number; var ky:Number;
            
            kx = worldw/460; ky = worldh/460;
            mx = stage.mouseX; my = stage.mouseY;
            camx = (kx * mx)-230; camy = (ky * my)-230;
            if (camx<0) {camx=0;} if (camx>worldw-465){camx=worldw-465;}
            if (camy<0) {camy=0;} if (camy>worldh-465){camy=worldh-465;}
        
            wmx = camx + mx; wmy = camy + my;
            
            graphics.clear();
            graphics.lineStyle(2, 0);
            
            tmap.drawGrid(graphics, camx, camy);            
            
            graphics.drawCircle(wmx-camx,wmy-camy,8);          
            
            var ax:Number; var ay:Number;
            ax = wmx; ay = getHeight(wmx, wmy);
            ay = Math.floor(ay/tmap.ch)*tmap.ch;
            graphics.drawCircle(ax-camx,ay-camy,8);
            
              
        }//onenter
        
        public function getHeight(ax:Number, ay:Number):Number
        {
          var i:int;
          for (i=0;i<64;i+=1)
          { if (tmap.getTile(ax/tmap.cw, ay/tmap.ch) > 0) { return ay;}  ay += 8;  }
          return -1;  
        }//geth
        
        
    }//classend
}
import flash.display.Graphics;

internal class xTmap
{   
    public var vecGrid:Vector.<int>;
    public var mw:int = 0;         public var mh:int = 0;
    public var cw:Number = 32;     public var ch:Number = 32;   
    public function initEmpty(aw:int, ah:int):void   
     { mw=aw; mh=ah; vecGrid = new Vector.<int>(aw*ah, false); }        
    public function setTile(ax:int, ay:int, t:int):void   
    { if (ax<0||ax>=mw||ay<0||ay>=mh) {return;} vecGrid[ay*mw+ax]=t; }    
    public function getTile(ax:int, ay:int):int   
     { if (ax<0||ax>=mw||ay<0||ay>=mh) {return -1;} return vecGrid[ay*mw+ax]; }
       
    public function drawGrid(g:Graphics, ax:Number, ay:Number, sw:Number=465, sh:Number=465):void
    { var sx:int;    var sy:int;    var ex:int;      var ey:int;
      var i:int;     var k:int;     var yt:int;      var t:int;    
      var dx:Number; var dy:Number;      
      sx = Math.floor(ax/cw);            sy = Math.floor(ay/ch);
      ex = sx + Math.ceil(sw/cw)+1;      ey = sy + Math.ceil(sh/ch)+1;    
      if (sy < 0) { sy = 0; }     if (sy >= mh) { return; }
      if (sx < 0) { sx = 0; }     if (sx >= mw) { return; }          
      if (ex < 0) { return; }     if (ex > mw) { ex = mw; }
      if (ey < 0) { return; }     if (ey > mh) { ey = mh; }     
       for ( i = sy; i < ey; i++)
       { yt = i * mw;
        for (k = sx; k < ex; k++)
         {  t = vecGrid[yt+k]; if (t <= 0) { continue; }
            dx = (k*cw)-ax;    dy = (i*ch)-ay;
            g.beginFill(0);  g.drawRect(dx, dy, 32,32); g.endFill();
         }//nextk
       }//nexti  
    }//drawgrid   
    
    public function setRect(ax:Number, ay:Number, aw:Number, ah:Number, t:int):void   
     { setRect2(ax/cw, ay/ch, aw/cw, ah/ch, t); }
   
    public function setRect2(ax:int, ay:int, aw:int, ah:int, t:int):void
      { var i:int;      var k:int;      var yt:int;
        var sx:int;      var sy:int;      var ex:int;      var ey:int;   
        if (ax+aw < 0) { return; }      if (ay+ah < 0) { return; }
        if (ax > mw) { return; }      if (ay > mh) { return; }
        sx = ax;      sy = ay;      ex = sx+aw;      ey = sy+ah;
        if (sx< 0) { sx = 0;}      if (sy<0) {  sy = 0;}
        if (ex > mw) { ex = mw;}   if (ey > mh) { ey = mh;}
        for (i = sy; i < ey; i++)
        { yt = i * mw; for (k = sx; k < ex; k++) {  vecGrid[yt+k] = t; } }
      }//setrect2
    
}//xtmap