flash on 2015-12-21

by mutantleg
♥0 | Line 148 | Modified 2015-12-21 08:14:44 | 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/OsTR
 */

package {
    import flash.display.TriangleCulling;
    import flash.geom.ColorTransform;
    import flash.geom.Matrix;
    import flash.geom.Point;
    import flash.display.BitmapData;
    import flash.display.Graphics;
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {

          vecGrid = new Vector.<int>(mw*mh,false);
          var num:int; var i:int;
          num=vecGrid.length;
          for(i=0;i<512;i+=1) { vecGrid[int(Math.random()*num)] = 1; }

            wallSkin = new BitmapData(16,16,false,0);
            wallSkin.perlinNoise(3,6,4,18, true,true,7,true);

            wallSkin2 = wallSkin.clone();        
            wallSkin2.colorTransform(wallSkin2.rect, new ColorTransform(0.5,0.5,0.5));

            wallSkin3 = wallSkin.clone();        
            wallSkin3.colorTransform(wallSkin3.rect, new ColorTransform(0.75,0.75,0.75));

            floorSkin = wallSkin.clone();
            floorSkin.colorTransform(floorSkin.rect, new ColorTransform(0.2,0.2,0.9));

            skin = wallSkin;

          stage.addEventListener(Event.ENTER_FRAME, onEnter);             
        }//ctor
        
        public var floorSkin:BitmapData;
        public var wallSkin:BitmapData;
        public var wallSkin2:BitmapData;
        public var wallSkin3:BitmapData;
        

        public var skin:BitmapData;

        
        public var mw:int =64;
        public var mh:int =64;
        public var vecGrid:Vector.<int>;
        public var cw:Number=32;
        public var ch:Number= 32;
        
        public var camx:Number = 0;
        public var camy:Number = 0;

        public var mat:Matrix = new Matrix();
        
        public function onEnter(e:Event):void
        {
   
           var mx:Number; var my:Number;
           var ax:int; var ay:int; var t:int;
           var wx:Number; var wy:Number;
           var i:int; var k:int; var yt:int;
 
           mx = stage.mouseX;
           my = stage.mouseY;

           camx = mx; camy=my;

           ax = camx / cw;   ay = camy / ch;

           graphics.clear();
           //graphics.lineStyle(2, 0);

            mat.tx =-camx; mat.ty =-camy;
            graphics.beginBitmapFill(floorSkin, mat, true, false);
             graphics.drawRect(0,0,465,465);
            graphics.endFill();

            
            var h:Number;
            var ni:int;
            var nk:int;
            ni=16;nk=16;
            h=32; h=8;
            
          for (i=-2;i<ni;i++)
          {
           if (i + ay >= mh) { break; }
           if (i + ay < 0) { continue; }
           yt = (i+ay) * mw;

           for (k=-2;k<nk;k++)
           {
             if (k + ax >= mw) { continue; }
             if (k + ax < 0) { continue; }
             t = vecGrid[k+ax+yt];
             if (t > 0)
             {
               wx =  (k + ax) * cw - camx;
               wy = (i + ay) * ch - camy;
      
               graphics.drawRect(wx,wy,cw,ch);
               drawRect(wx,wy,cw,ch,h);
               
               continue;
             }//endif
           }//nextk
          }//nexti 
          
          
          for (i=-2;i<ni;i++)
          {
           if (i + ay >= mh) { break; }
           if (i + ay < 0) { continue; }
           yt = (i+ay) * mw;

           for (k=-2;k<nk;k++)
           {
             if (k + ax >= mw) { continue; }
             if (k + ax < 0) { continue; }
             t = vecGrid[k+ax+yt];
             if (t > 0)
             {
               wx =  (k + ax) * cw - camx;
               wy = (i + ay) * ch - camy;
                 drawTop(wx,wy,cw,ch,h);
                 
               continue;
             }//endif
           }//nextk
          }//nexti 
  
           //graphics.drawCircle(16,16,16);       
  
        }//onenter
        
        
 
        public function drawTop(ax:Number,ay:Number, aw:Number,ah:Number, h:Number=16):void
        {
           skin=wallSkin;
 
           drawQuad(ax,ay, h,  ax+aw,ay,h,  ax,ay+ah,h, ax+aw,ay+ah,h);   
          
         // drawQuad(ax,ay, h,  ax+aw,ay,0,  ax,ay+ah,h, ax+aw,ay+ah,0);   
       
        }//top

 
        
        public function drawRect(ax:Number,ay:Number, aw:Number,ah:Number, h:Number=16):void
        {
          skin=wallSkin3;
          if (ax>235) { drawWall(ax,ay,ax,ay+ah,h);      }  
          if (ax<235) { drawWall(ax+aw,ay,ax+aw,ay+ah,h);  }
          skin=wallSkin2;

          if (ay >235) { drawWall(ax,ay,ax+aw,ay,h);       }     
          if (ay<235) { drawWall(ax,ay+ah,ax+aw,ay+ah,h); }
            
        }//drawrect
        
        
        public function drawWall(x0:Number,y0:Number, x1:Number,y1:Number, h:Number=16):void
        {
          drawQuad(x0,y0,0,  x1,y1,0,   x0,y0, h,  x1,y1, h); 
           
        }//drawwall
        

        public var vecFace:Vector.<int> = Vector.<int>([0,1,2, 2,1,3]);
        public var vecVert:Vector.<Number> = Vector.<Number>([0,0,  1,0,  0,1,  1,1]);
        public var vecUv:Vector.<Number> = Vector.<Number>([0,0,  1,0,  0,1,  1,1]);
    
        public function drawQuad(x0:Number, y0:Number, z0:Number,
         x1:Number,y1:Number,z1:Number, x2:Number,y2:Number,z2:Number,
         x3:Number,y3:Number,z3:Number):void
         {
          var ax:Number; var ay:Number;
          
          z0*=-0.01;  z1*=-0.01;  z2*=-0.01; z3*=-0.01;
          
          ax = 235-x0; ay = 235-y0;
          x0 = x0 + ax*z0;          
          y0 = y0 + ay*z0;
 
          ax = 235-x1; ay = 235-y1;
          x1 = x1 + ax*z1;
          y1 = y1 + ay*z1;
 
          ax = 235-x2; ay = 235-y2;
          x2 = x2 + ax*z2;
          y2 = y2 + ay*z2;
 
          ax = 235-x3; ay = 235-y3;
          x3 = x3 + ax*z3;
          y3 = y3 + ay*z3;
             
          vecVert[0] = x0;  vecVert[1] = y0; 
          vecVert[2] = x1;  vecVert[3] = y1;  
          vecVert[4] = x2;  vecVert[5] = y2; 
          vecVert[6] = x3;  vecVert[7] = y3; 
  
          graphics.beginBitmapFill(skin, null,false,false);
         // graphics.beginFill(0xFF000000, 1);
           graphics.drawTriangles(vecVert, vecFace ,vecUv);
          graphics.endFill();  
             
         }//drawquad 
        
        
        
    }//classend
}