In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

flash on 2013-9-15

Get Adobe Flash player
by novic.one 15 Sep 2013
    Embed
/**
 * Copyright novic.one ( http://wonderfl.net/user/novic.one )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/ewAB
 */

package {
    import flash.geom.Point;
    import flash.utils.Dictionary;
    import flash.system.LoaderContext;
    import flash.net.URLRequest;
    import flash.display.*;
    import flash.events.*;
    import com.bit101.components.*;
    
    public class FlashTest extends Sprite {
        
        private var loader:Loader;
        
        private var properties:Object = {
            tlX : 0,
            tlY : 0,
            
            trX : 100,
            trY : 0,
            
            blX : 0,
            blY : 100,
            
            brX : 100,
            brY : 100
        };
        
        private var labelsMap:Dictionary = new Dictionary();
        private var slidersMap:Dictionary = new Dictionary();
        
        private var shapeContainer:Sprite;
        
        private var bmp:BitmapData;
        
        public function FlashTest() {
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
            
            addChild(shapeContainer = new Sprite());
            shapeContainer.x = 120;
            
            var vbox:VBox = new VBox(this);
            
            var props:Array = [];
            
            for (var pn:String in properties) {
                props.push(pn);
            }
            
            props.sort();

            
            for each (var propName:String in props) {
                var label:Label = new Label(vbox);
                label.text = propName;
                
                var slider:Slider = new Slider("horizontal", vbox, 0, 0, onSliderValueChanged);
                slider.minimum = 0;
                slider.maximum = 100;
                slider.value = properties[propName];
                
                slidersMap[slider] = propName;
                
                labelsMap[slider] = label;
            }

            
            loader = new Loader();
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
            loader.load(new URLRequest("http://upload.wikimedia.org/wikipedia/commons/thumb/e/eb/Znak_A-1.svg/110px-Znak_A-1.svg.png"), new LoaderContext(true));
        }
        
        private function onComplete(e:Event):void {
            bmp = Bitmap(loader.content).bitmapData;
            
            draw();
        }
        
        private function onSliderValueChanged(e:Event):void {
            var slider:Slider = e.target as Slider;
            properties[slidersMap[slider]] = slider.value;
            draw();
        }
        
        private function updateLabels():void {
            for (var s:* in slidersMap) {
                var slider:Slider = s;
                var label:Label = labelsMap[slider];
                var propName:String = slidersMap[slider];
                
                label.text = propName + " = " + (Math.round(slider.value * 100) / 100);
            }

        }

        
        private function draw():void {
            updateLabels();
            
            const S:int = 6;
            const tl:int = 0;
            const tr:int = S - 1;
            const bl:int = S * S - S;
            const br:int = S * S - 1;
            
            const step:Number = 1 / (S - 1);
            
            var points:Vector.<Point> = new Vector.<Point>(S*S);
            
            var uvt:Vector.<Number> = new Vector.<Number>(S*S);
            
            points[tl] = getPoint("tl");
            points[tr] = getPoint("tr");
            points[bl] = getPoint("bl");
            points[br] = getPoint("br");
            
            var i:int, j:int;
            var cs:Number;
            
            for (i = 1; i < S - 1; i++) {
                cs = 1 - i * step;
                points[tl + i] = Point.interpolate(points[tl], points[tr], cs);
                points[tr + i * S] = Point.interpolate(points[tr], points[br], cs);
                points[i * S] = Point.interpolate(points[tl], points[bl], cs);
                points[bl + i] = Point.interpolate(points[bl], points[br], cs);
            }
            
            for (i = 1; i < S - 1; i++) {
                var lineStart:Point = points[tl + S * i];
                var lineEnd:Point = points[tr + S * i];
                
                cs = 1;
                
                for (j = tl + S * i + 1; j < tr + S * i; j++) {
                    cs -= step;
                    points[j] = Point.interpolate(lineStart, lineEnd, cs);
                }

            }
            
            for (i = 0; i < S; i++) {
                for (j = 0; j < S; j++) {
                    var index:int = 2 * (i * S + j);
                    uvt[index] = step * j;
                    uvt[index + 1] = step * i;
                }

            }
            
            var indices:Vector.<int> = new Vector.<int>();
            
            for (i = 0; i < S * S - S; i += S) {
                for (j = i; j < i + S - 1; j++) {
                    indices.push(j, j + 1, j + S);
                    indices.push(j + S, j + 1, j + S + 1);
                }

            }
            
            
            var vertices:Vector.<Number> = new Vector.<Number>();
            for each (var pt:Point in points) {
                vertices.push(pt.x, pt.y);
            }


            
            shapeContainer.graphics.clear();
            shapeContainer.graphics.lineStyle(1);
            shapeContainer.graphics.beginBitmapFill(bmp);
            shapeContainer.graphics.drawTriangles(vertices, indices, uvt);
        }

        private function getPoint(name:String):Point {
            return new Point(properties[name + "X"], properties[name + "Y"]);
        }

        
    }
}