flash on 2012-10-16

by mutantleg
♥0 | Line 168 | Modified 2012-10-16 23:56:46 | 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/bjpy
 */

package {
    import flash.text.TextField;
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        
        public var deb:TextField;
        
        public function FlashTest() {
        
            deb = new TextField();
            deb.x = 4;
            deb.y = 4;
            deb.width = 400;
            deb.height = 50;
            addChild(deb);
        
        
            vecTri.push(new Tri(new Vert(32,32, 0,0),
                       new Vert(128,32,0.5,0),
                        new Vert(32,128,0,0.5)));
                        
              vecTri.push(new Tri(new Vert(128,32, 0.5,0),
                       new Vert(128,128,0.5,0.5),
                        new Vert(32,128,0,0.5)));
                        
                vecTri.push(new Tri(new Vert(32+96,32, 0+0.5,0),
                       new Vert(128+96,32,0.5+0.5,0),
                        new Vert(32+96,128,0+0.5,0.5)));
                        
              vecTri.push(new Tri(new Vert(128+96,32, 0.5+0.5,0),
                       new Vert(128+96,128,0.5+0.5,0.5),
                        new Vert(32+96,128,0+0.5,0.5)));z
                      
              
              
                vecTri.push(new Tri(new Vert(32,32+96, 0+0.5,0+0.5),
                       new Vert(128,32+96,0.5+0.5,0+0.5),
                        new Vert(32,128+96,0+0.5,0.5+0.5)));
                        
              vecTri.push(new Tri(new Vert(128,32+96, 0.5+0.5,0+0.5),
                       new Vert(128,128+96,0.5+0.5,0.5+0.5),
                        new Vert(32,128+96,0+0.5,0.5+0.5)));
                        
                vecTri.push(new Tri(new Vert(32+96,32+96, 0+0.5,0+0.5),
                       new Vert(128+96,32+96,0.5+0.5,0+0.5),
                        new Vert(32+96,128+96,0+0.5,0.5+0.5)));
                        
              vecTri.push(new Tri(new Vert(128+96,32+96, 0.5+0.5,0+0.5),
                       new Vert(128+96,128+96,0.5+0.5,0.5+0.5),
                        new Vert(32+96,128+96,0+0.5,0.5+0.5)));
                     
                     
              vecVert = collectVert(vecTri);         
              vecMerge = mergeVert(vecVert);                   
                        
              deb.text = "vecVert: " + vecVert.length + " vecMerge: " + vecMerge.length;
                        
              replaceVert(vecTri, vecMerge);
              
             /*
                 //test
                 var v:Vert;
                 v = vecMerge[3];
                 v.y += 32;
                 v.x += 32;
             */
        
            stage.addEventListener(Event.ENTER_FRAME, onEnter);
        }//ctor
        
        public var vecTri:Array = new Array();
        public var vecVert:Array;
        public var vecMerge:Array;

        public function replaceVert(tvec:Array, vvec:Array):void
        {
            var i:int;
            var k:int;
            var num:int;
            var knum:int;
            var v:Vert;
            var t:Tri;
            
            num = tvec.length;
            knum = vvec.length;
            for (i = 0; i < num; i++)
            {
                t = tvec[i];
                
                for (k = 0; k < knum; k++)
                {
                    v = vvec[k];
                    if (t.v0.x == v.x && t.v0.y == v.y) { t.v0 = v; }
                    if (t.v1.x == v.x && t.v1.y == v.y) { t.v1 = v; }
                    if (t.v2.x == v.x && t.v2.y == v.y) { t.v2 = v; }
                    
                }//nextk
                
            }//nexti
            
        }//replace

        public function mergeVert(vec:Array):Array
        {
            var ret:Array;
            ret = new Array();
            
            var i:int;
            var k:int;
            var num:int;
            var v:Vert;
            var o:Vert;
            
            num = vec.length;
            
            for (i =0; i < num; i++)
            {
                v = vec[i];
                if (v.bTested) { continue; }
                v.bTested = true;
                ret.push(v);
                
                for (k = 0; k < num; k++)
                {
                    if (k == i) { continue; }
                    o = vec[k];
                    if (o == v) { continue; } 
                    
                    if (v.x == o.x && v.y == o.y)
                    {
                      o.bTested = true;     
                    }//endif
                    
                    
                 }//nextk
                
                
            }//nexti
            
            
            
            return ret;
        }//merge


        public function collectVert(vec:Array):Array
        {
            var ret:Array;
            ret = new Array();
            
            var i:int;
            var num:int;
            var t:Tri;
            
            num = vec.length;
            for (i =0; i < num; i++)
            {
                t = vec[i];
                ret.push(t.v0);
                ret.push(t.v1);
                ret.push(t.v2);
            }//nexti
            
            return ret;
        }//collectvert

        
        public function onEnter(e:Event):void
        {
            graphics.clear();
            graphics.lineStyle(2,0);
            
            var t:Tri;
            var i:int;
            var num:int;
            var v0:Vert;
            var v1:Vert;
            var v2:Vert;
            
            num = vecTri.length;
            
            for (i = 0; i < num; i++)
            {
                t = vecTri[i];
                v0 = t.v0;
                v1 = t.v1;
                v2 = t.v2;
                
                graphics.moveTo(v0.x, v0.y);
                graphics.lineTo(v1.x, v1.y);
                graphics.moveTo(v1.x, v1.y);
                graphics.lineTo(v2.x, v2.y);
                graphics.moveTo(v2.x, v2.y);
                graphics.lineTo(v0.x, v0.y);
                
                
            }//nexti
            
        }//enter
        
    }//classend
}
internal class Vert
{
    public var x:Number = 0;
    public var y:Number = 0;
    public var u:Number = 0;
    public var v:Number = 0;
    
    public var bTested:Boolean = false;
    
    public function Vert(x_:Number=0,y_:Number=0,u_:Number=0,v_:Number=0)
    {
        x = x_;
        y = y_;
        u = u_;
        v = v_;
    }//ctor
    
}//vert

internal class Tri
{
    public var v0:Vert;
    public var v1:Vert;
    public var v2:Vert;
    
    public function Tri(v0_:Vert, v1_:Vert, v2_:Vert)
    {
     v0 = v0_;
     v1 = v1_;
     v2 = v2_;   
    }
    
}//tri