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

forked from: Gradient Arc

when current Arc's alpha<0 , remove it from displaylist to save memory and the runtime fps won't be slown down
/**
 * Copyright yolandablackeyes2 ( http://wonderfl.net/user/yolandablackeyes2 )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/ccWo
 */

// forked from bongiovi015's Gradient Arc
package {
    import caurina.transitions.Tweener;
    
    import flash.display.GradientType;
    import flash.display.Shader;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.geom.Matrix;
    import flash.net.URLLoader;
    import flash.net.URLLoaderDataFormat;
    import flash.net.URLRequest;
    import flash.utils.ByteArray;
    
    import frocessing.color.ColorHSL;
    
    [SWF(width=465, height=465, frameRate=30, backgroundColor=0x333333)]
    public class Arcs extends Sprite {
        public static const SHADER_URL : String = "http://www.bongiovi.tw/wonderfl/bmp3.pbj";
        private var W:int;
        private var H:int;
        private var MAX:int = 10;;
        private var loaderShader : URLLoader = new URLLoader;
        private var _shader:Shader;
        private var _curves:Array;
        
        public function Arcs() {
            W = stage.stageWidth;
            H = stage.stageHeight;
            _initBg();
            loaderShader.addEventListener(Event.COMPLETE, shaderLoaded);
            loaderShader.dataFormat = URLLoaderDataFormat.BINARY;
            loaderShader.load(new URLRequest(SHADER_URL));    
            
            _curves = [];
        }
        
        
        private function shaderLoaded(event:Event):void {
            _shader = new Shader(ByteArray(loaderShader.data));
            
            addEventListener(Event.ENTER_FRAME, _loop);
        }        
        
        
        private function _loop(event:Event):void {
            if(_curves.length < MAX && Math.random() > .9) addArc();
            
            for each ( var c:Arc in _curves) {
                c.render();
                if(c.alpha == 0) {
                    removeChild(c);/*remove unused c from displaylist for memory's sake */
                    _curves.splice(_curves.indexOf(c), 1);
                }
            }
        }        
        
        private function addArc():void {
            var c:Arc = new Arc(_shader);
            c.color = new ColorHSL(Math.random() * 360, .5, .5).value;
            c.radius = 30 + Math.random() * 100;
            c.radius = Math.floor(c.radius/10) * 10;
            c.range = 10;
            c.angle = Math.random() * Math.PI * 2;
            Tweener.addTween(c, {time:3, range:90 + Math.random() * 45, radius:c.radius + 20 + Math.random() * 20, transition:"easeOutCubic"});
            Tweener.addTween(c, {delay:2, time:2+Math.random(), alpha:0, transition:"easeOutCubic"});
            _curves.push(c);
            addChild(c);
            c.x = W/2;
            c.y = H/2;
        }        
        
        private function _initBg():void {
            var mtx:Matrix = new Matrix();
            mtx.createGradientBox(W, H);
            graphics.beginGradientFill(GradientType.RADIAL, [0x333333, 0x111111], [1, 1], [0, 255], mtx);
            graphics.drawRect(0, 0, W, H);
        }
        
        
        public static function getRandomElement(ary:Array) : * {    return ary[Math.floor(Math.random()*ary.length)];    }
        
    }
    
}




    import flash.display.Shader;
    import flash.display.Shape;
    import flash.filters.ShaderFilter;
    
    
    class Arc extends Shape {
        
        public var range:Number = 0;
        public var angle:Number = 0;
        public var radius:Number = 0;
        public var color:uint;
        private var _shader:Shader;
        private var _filter:ShaderFilter;
        private var _speed:Number;
        
        public function Arc(shader:Shader) {
            _shader = shader;
            _filter = new ShaderFilter(_shader);
            _speed = .01 + Math.random() * .02;
            if(Math.random() > .5) _speed = -_speed;
            var delay:Number = 3 + Math.random() * 3;
            var duration:Number = 3 + Math.random() * 3;
        }
        
        
        public function render() : void {
            graphics.clear();
            graphics.lineStyle(2, color, 1);
            graphics.drawCircle(0, 0, radius);
            
            _shader.data.center.value = [radius/2, radius/2];
            _shader.data.angle.value = [angle];
            _shader.data.range.value = [range];
            
            filters = [_filter];
            
            angle += _speed;
        }
        
    }
    
/*

<languageVersion : 1.0;>

kernel bmp2
<   namespace : "Your Namespace";
    vendor : "Your Vendor";
    version : 1;
>
{
    input image4 src;
    output pixel4 dst;
    
    parameter float2 center
    <
        minValue:float2(0.0, 0.0);
        maxValue:float2(2000.0, 2000.0);
        defaultValue:float2(300.0, 200.0);
    >;  
    
    
    parameter float angle
    <
        minValue:0.0;
        maxValue:10.0;
        defaultValue:0.0;
    >; 
    
    
    parameter float range
    <
        minValue:0.0;
        maxValue:360.0;
        defaultValue:90.0;
    >;   
    

    void
    evaluatePixel()
    {
        float2 pos = outCoord();
        float2 vCenter = float2(cos(angle), sin(angle));
        float2 vRelative = pos - center;
        float _x = length(vCenter);
        float _y = length(vRelative);
        float theta = acos( dot(vRelative, vCenter) / (_x * _y));
        float offset = clamp(theta/radians(range), 0.0, 1.0);
        dst = sampleNearest(src,pos);
        dst *= (1.0 - sin(offset*3.14*.5));
    }
}


*/