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: yonatan challenge for people with nothing better to do

music : wumm.fr
/**
 * Copyright bongiovi015 ( http://wonderfl.net/user/bongiovi015 )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/n3Oq
 */

// forked from yonatan's yonatan challenge for people with nothing better to do
package
{
    import flash.display.BitmapData;
    import flash.display.GradientType;
    import flash.display.Graphics;
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.TimerEvent;
    import flash.filters.GlowFilter;
    import flash.geom.Matrix;
    import flash.geom.Point;
    import flash.geom.Rectangle;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.media.SoundLoaderContext;
    import flash.media.SoundMixer;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.utils.ByteArray;
    import flash.utils.Timer;
    
    public class Pratice0607 extends Sprite
    {
        public static const NAMESPACE_KULER : String = "http://kuler.adobe.com/kuler/API/rss/";
        private static const APIKEY    : String = "4A297340291400B78BF1DFFE0E8E1678";
        
        public var kuler : Namespace = new Namespace(NAMESPACE_KULER);
        private var __loader : URLLoader;

        
        private var __sound    : Sound = new Sound;
        private var __channel: SoundChannel = new SoundChannel;
        private var __canvas : Shape = new Shape;
        private var __bytes : ByteArray = new ByteArray;
        private var __timer : Timer = new Timer(2000);
        
        public var p0 : Point;
        public var p1 : Point;
        public var p2 : Point;
        public var p3 : Point;
        
        public var fx : EffectContainer;
        public var src : SunIcon = new SunIcon;
        public var lightScale : Number = 1.5;
        public var lightIntensity : Number = 2;
        public var colors : Array = [0xFFFFFF];
        public var angle : Number = 0;
        
        public function Pratice0607()
        {
            var mtx:Matrix = new Matrix;
            mtx.createGradientBox(465, 465);
            graphics.beginGradientFill(GradientType.RADIAL, [0x222222, 0x060606], [1, 1], [0, 255], mtx);
            graphics.drawRect(0, 0, 465, 465);
            graphics.endFill();
            
            p0 = new Point(350, 0);
            p1 = new Point(450, 20);
            p2 = new Point(20, 360);
            p3 = new Point(200, 440);
            
            __loader = new URLLoader();
            __loader.addEventListener(Event.COMPLETE, __onGetColor);
            __timer.addEventListener(TimerEvent.TIMER, getColor);
            __timer.start();
            
            fx = new EffectContainer(465, 465, __canvas);
            fx.scale = 1.5;
            addChild(fx);
            __sound = new Sound();
            var context:SoundLoaderContext = new SoundLoaderContext(10, true);
            var s:String = "http://www.bongiovi.tw/wonderfl/wumm.mp3";
            __sound.load(new URLRequest(s), context);
            __channel = new SoundChannel;
            __channel = __sound.play(0, 5);
            
            addChild(src);
            addEventListener(Event.ENTER_FRAME, __loop);
            getColor();
        }
        
        
        private function __loop(e:Event) : void {
            angle += .02;
            const R : Number = 200;
            var p:Point = Point.polar(R, angle);
            p.y *= .5;
            p = p.add(new Point(stage.stageWidth*.5, stage.stageHeight*.5));
            src.x = p.x;
            src.y = p.y;
            
            SoundMixer.computeSpectrum(__bytes, true);
            __canvas.graphics.clear();
            var i : int, j : int;
            var value:Number;
            var count:Number = 0;
            for ( j = 0; j < 2; j++) {
                for ( i = 0; i < 256; i++) {
                    value = __bytes.readFloat();
                    if(value > .5)  __drawNote(i, value, j == 0);
                    count += value;
                }
            }
            
            const OFFSET : Number = .5;
            
            count /= 512;
            if( count > .2 ) lightScale += count*OFFSET;
            if( count > .2 ) lightIntensity += count*OFFSET;
            lightScale = lightScale < 1.5 ? 1.5 : lightScale - 0.2;
            lightIntensity = lightIntensity < 3 ? 3 : lightIntensity - 0.2;
            if(lightIntensity > 8) lightIntensity = 8;
            fx.scale = lightScale;
            fx.intensity = lightIntensity;
            fx.srcX = src.x;
            fx.srcY = src.y;
            fx.render();
        }
        
        
        private function __drawNote(index:int, a:Number, isLeft:Boolean) : void {
            var pp0:Point, pp1:Point, pp2:Point, pp3:Point;
            
            if(isLeft) {
                pp0 = p0;
                pp1 = Point.interpolate(p0, p1, .5);
                pp2 = p2;
                pp3 = Point.interpolate(p2, p3, .5);
            } else {
                pp0 = Point.interpolate(p0, p1, .5);
                pp1 = p1;
                pp2 = Point.interpolate(p2, p3, .5);
                pp3 = p3;
            }
            
            var pTopLeft:Point = Point.interpolate(pp0, pp2, index / 256);
            var pTopRight:Point = Point.interpolate(pp1, pp3, index / 256);
            var pBottomLeft:Point = Point.interpolate(pp0, pp2, (index+1 )/ 256);
            var pBottomRight:Point = Point.interpolate(pp1, pp3, (index+1) / 256);
            
            var g:Graphics = __canvas.graphics;
            trace(getRandomColorFrom(colors).toString(16) + ":" + colors );
            g.beginFill( getRandomColorFrom(colors), a);
            g.moveTo(pTopLeft.x, pTopLeft.y);
            g.lineTo(pTopRight.x, pTopRight.y);
            g.lineTo(pBottomRight.x, pBottomRight.y);
            g.lineTo(pBottomLeft.x, pBottomLeft.y);
            g.lineTo(pTopLeft.x, pTopLeft.y);
            g.endFill();
        }
        
        
        public function getColor(e:Event=null) : void {
            __loader.load(new URLRequest("http://kuler-api.adobe.com/rss/get.cfm?listType=rating&startIndex=0&itemsPerPage=20&key=" + APIKEY ));
        }
        
        
        private function __onGetColor(e:Event) : void {
            var xml:XML = XML(__loader.data);
            colors = [];
            var list:XMLList = new XMLList(xml.channel.item);
            var index : int = int(Math.random() * list.length());
            var theme:XML = list[index];
            var swatchList:XMLList = new XMLList(theme.kuler::themeItem.kuler::themeSwatches.kuler::swatch);
            var i : int = 0;
            var sColor:String;
            var color:uint
            for(i=0; i<swatchList.length(); i++) {
                sColor = swatchList[i].kuler::swatchHexColor;
                color = parseInt("0x"+sColor);
                colors.push(color);
            }
            trace("On Color:" + colors);
        }
        
        
        public static function getRandomColorFrom(ary:Array) : uint {    return ary[int(Math.random() * ary.length)];    }
    }
}







import flash.display.*;
import flash.events.*;
import flash.filters.*;
import flash.geom.*;

/**
 * The EffectContainer class creates a volumetric light effect (also known as crepuscular or "god" rays).
 * This is done in 2D with some bitmap processing of an emission object, and optionally an occlusion object.
 */
class EffectContainer extends Sprite {
    /**
     * When true a blur filter is applied to the final effect bitmap (can help when colorIntegrity == true).
     */
    public var blur:Boolean = false;
    /**
     * Selects rendering method; when set to true colors won't be distorted and performance will be
     * a little worse. Also, this might make the final output appear grainier.
     */
    public var colorIntegrity:Boolean = false;
    /**
     * Light intensity.
     */
    public var intensity:Number = 4;
    /**
     * Number of passes applied to buffer. Lower numbers mean lower quality but better performance,
     * anything above 8 is probably overkill.
     */
    public var passes:uint = 6;
    /**
     * Set this to one of the StageQuality constants to use this quality level when drawing bitmaps, or to
     * null to use the current stage quality. Mileage may vary on different platforms and player versions.
     * I think it should only be used when stage.quality is LOW (set this to BEST to get reasonable results).
     */
    public var rasterQuality:String = null;
    /**
     * Final scale of emission. Should always be more than 1.
     */
    public var scale:Number = 2;
    /**
     * Smooth scaling of the effect's final output bitmap.
     */
    public var smoothing:Boolean = true;
    /**
     * Light source x.
     * @default viewport center (set in constructor).
     */
    public var srcX:Number;
    /**
     * Light source y.
     * @default viewport center (set in constructor).
     */
    public var srcY:Number;
    
    protected var _blurFilter:BlurFilter = new BlurFilter(2, 2);
    protected var _emission:DisplayObject;
    protected var _occlusion:DisplayObject;
    protected var _ct:ColorTransform = new ColorTransform;
    protected var _halve:ColorTransform = new ColorTransform(0.5, 0.5, 0.5);
    protected var _occlusionLoResBmd:BitmapData;
    protected var _occlusionLoResBmp:Bitmap;
    protected var _baseBmd:BitmapData;
    protected var _bufferBmd:BitmapData;
    protected var _lightBmp:Bitmap = new Bitmap;
    protected var _bufferSize:uint = 0x8000;
    protected var _bufferWidth:uint;
    protected var _bufferHeight:uint;
    protected var _viewportWidth:uint;
    protected var _viewportHeight:uint;
    protected var _mtx:Matrix = new Matrix;
    
    /**
     * Creates a new effect container.
     *
     * @param width Viewport width in pixels.
     * @param height Viewport height in pixels.
     * @param emission A DisplayObject to which the effect will be applied. This object will be
     * added as a child of the container. When applying the effect the object's filters and color
     * matrix is ignored, if you want to use filters or a color matrix put your content in another
     * object and addChild it to this one instead.
     * @param occlusion An optional occlusion object, handled the same way as the emission object.
     */
    public function EffectContainer(width:uint, height:uint, emission:DisplayObject, occlusion:DisplayObject = null) {
        if(!emission) throw(new Error("emission DisplayObject must not be null."));
        addChild(_emission = emission);
        if(occlusion) addChild(_occlusion = occlusion);
        setViewportSize(width, height);
        _lightBmp.blendMode = BlendMode.ADD;
        addChild(_lightBmp);
        srcX = width / 2;
        srcY = height / 2;
    }
    
    /**
     * Sets the container's size. This method recreates internal buffers (slow), do not call this on
     * every frame.
     *
     * @param width Viewport width in pixels
     * @param height Viewport height in pixels
     */
    public function setViewportSize(width:uint, height:uint):void {
        _viewportWidth = width;
        _viewportHeight = height;
        scrollRect = new Rectangle(0, 0, width, height);
        _updateBuffers();
    }
    
    /**
     * Sets the approximate size (in pixels) of the effect's internal buffers. Smaller number means lower
     * quality and better performance. This method recreates internal buffers (slow), do not call this on
     * every frame.
     *
     * @param size Buffer size in pixels
     */
    public function setBufferSize(size:uint):void {
        _bufferSize = size;
        _updateBuffers();
    }
    
    protected function _updateBuffers():void {
        var aspect:Number = _viewportWidth / _viewportHeight;
        _bufferHeight = Math.max(1, Math.sqrt(_bufferSize / aspect));
        _bufferWidth  = Math.max(1, _bufferHeight * aspect);
        dispose();
        _baseBmd           = new BitmapData(_bufferWidth, _bufferHeight, false, 0);
        _bufferBmd         = new BitmapData(_bufferWidth, _bufferHeight, false, 0);
        _occlusionLoResBmd = new BitmapData(_bufferWidth, _bufferHeight, true, 0);
        _occlusionLoResBmp = new Bitmap(_occlusionLoResBmd);
    }
    
    /**
     * Render a single frame.
     *
     * @param e In case you want to make this an event listener.
     */
    public function render(e:Event = null):void {
        var savedQuality:String = stage.quality;
        if(rasterQuality) stage.quality = rasterQuality;
        var mul:Number = colorIntegrity ? intensity : intensity/(1<<passes);
        _ct.redMultiplier = _ct.greenMultiplier = _ct.blueMultiplier = mul;
        _drawLoResEmission();
        if(_occlusion) _eraseLoResOcclusion();
        if(rasterQuality) stage.quality = savedQuality;
        var s:Number = 1 + (scale-1) / (1 << passes);
        var tx:Number = srcX/_viewportWidth*_bufferWidth;
        var ty:Number = srcY/_viewportHeight*_bufferHeight;
        _mtx.identity();
        _mtx.translate(-tx, -ty);
        _mtx.scale(s, s);
        _mtx.translate(tx, ty);
        _lightBmp.bitmapData = _applyEffect(_baseBmd, _bufferBmd, _mtx, passes);
        _lightBmp.width = _viewportWidth;
        _lightBmp.height = _viewportHeight;
        _lightBmp.smoothing = smoothing;
    }
    
    /**
     * Draws a scaled-down emission on _baseBmd.
     */
    protected function _drawLoResEmission():void {
        _copyMatrix(_emission.transform.matrix, _mtx);
        _mtx.scale(_bufferWidth / _viewportWidth, _bufferHeight / _viewportHeight);
        _baseBmd.fillRect(_baseBmd.rect, 0);
        _baseBmd.draw(_emission, _mtx, colorIntegrity ? null : _ct);
    }
    
    /**
     * Draws a scaled-down occlusion on _occlusionLoResBmd and erases it from _baseBmd.
     */
    protected function _eraseLoResOcclusion():void {
        _occlusionLoResBmd.fillRect(_occlusionLoResBmd.rect, 0);
        _copyMatrix(_occlusion.transform.matrix, _mtx);
        _mtx.scale(_bufferWidth / _viewportWidth, _bufferHeight / _viewportHeight);
        _occlusionLoResBmd.draw(_occlusion, _mtx);
        _baseBmd.draw(_occlusionLoResBmp, null, null, BlendMode.ERASE);
    }
    
    /**
     * Render the effect on every frame until stopRendering is called.
     */
    public function startRendering():void {
        addEventListener(Event.ENTER_FRAME, render);
    }
    
    /**
     * Stop rendering on every frame.
     */
    public function stopRendering():void {
        removeEventListener(Event.ENTER_FRAME, render);
    }
    
    /**
     * Low-level workhorse, applies the lighting effect to a bitmap. This function modifies the src and buffer
     * bitmaps and it's mtx argument.
     *
     * @param src The BitmapData to apply the effect on.
     * @param buffer Another BitmapData object for temporary storage. Must be the same size as src.
     * @param mtx Effect matrix.
     * @param passes Number of passes to make.
     * @return A processed BitmapData object (supllied in either src or buffer) with final effect output.
     */
    protected function _applyEffect(src:BitmapData, buffer:BitmapData, mtx:Matrix, passes:uint):BitmapData {
        var tmp:BitmapData;
        while(passes--) {
            if(colorIntegrity) src.colorTransform(src.rect, _halve);
            buffer.copyPixels(src, src.rect, src.rect.topLeft);
            buffer.draw(src, mtx, null, BlendMode.ADD, null, true);
            mtx.concat(mtx);
            tmp = src; src = buffer; buffer = tmp;
        }
        if(colorIntegrity) src.colorTransform(src.rect, _ct);
        if(blur) src.applyFilter(src, src.rect, src.rect.topLeft, _blurFilter);
        return src;
    }
    
    /**
     * Dispose of all intermediate buffers. After calling this the EffectContainer object will be unusable.
     */
    public function dispose():void {
        if(_baseBmd) _baseBmd.dispose();
        if(_occlusionLoResBmd) _occlusionLoResBmd.dispose();
        if(_bufferBmd) _bufferBmd.dispose();
        _baseBmd = _occlusionLoResBmd = _bufferBmd = _lightBmp.bitmapData = null;
    }
    
    protected function _copyMatrix(src:Matrix, dst:Matrix):void {
        dst.a = src.a;
        dst.b = src.b;
        dst.c = src.c;
        dst.d = src.d;
        dst.tx = src.tx;
        dst.ty = src.ty;
    }
}

import flash.display.*;
import flash.events.*;
import flash.geom.*;

/**
 * VolumetricPointLight creates a simple effect container with a gradient emission pattern.
 * The gradient's center is automatically moved to the (srcX, srcY) coordinates
 * and it's radius is adjusted to the length of the viewport's diagonal, so if you
 * set srcX and srcY to the viewport's center then only half of the gradient colors
 * will be used.
 *
 * <p>This should also perform a little better than EffectContainer.</p>
 */
class VolumetricPointLight extends EffectContainer {
    protected var _colors:Array;
    protected var _alphas:Array;
    protected var _ratios:Array;
    protected var _gradient:Shape = new Shape;
    protected var _gradientMtx:Matrix = new Matrix;
    protected var _gradientBmp:Bitmap = new Bitmap;
    protected var _lastSrcX:Number;
    protected var _lastSrcY:Number;
    protected var _lastIntensity:Number;
    protected var _lastColorIntegrity:Boolean = false;
    protected var _gradientLoResBmd:BitmapData;
    protected var _gradientLoResDirty:Boolean = true;
    
    /**
     * Creates a new effect container, with an emission created from the supplied color or gradient.
     * The constructor lets you use a shortcut syntax for creating simple single-color gradients.
     * @example The shortcut syntax:
     * <listing>new VolumetricPointLight(800, 600, occlusion, 0xc08040);</listing>
     * @example is equivalent to:
     * <listing>new VolumetricPointLight(800, 600, occlusion, [0xc08040, 0], [1, 1], [0, 255]);</listing>
     *
     * @param width Viewport width in pixels.
     * @param height Viewport height in pixels.
     * @param occlusion An occlusion object, will be overlayed above the lighting gradient and under the light effect bitmap.
     * @param colorOrGradient Either a gradient colors array, or a uint color value.
     * @param alphas Will only be used if colorOrGradient is an array. This will be passed to beginGradientFill.
     *               If not provided alphas will all be 1.
     * @param ratios Will only be used if colorOrGradient is an array. This will be passed to
     *               beginGradientFill. If colorOrGradient is an Array and ratios aren't provided default
     *               ones will be created automatically.
     */
    public function VolumetricPointLight(width:uint, height:uint, occlusion:DisplayObject, colorOrGradient:*, alphas:Array = null, ratios:Array = null) {
        if(colorOrGradient is Array) {
            _colors = colorOrGradient.concat();
            if(!ratios)    _ratios = colorOrGradient.map(function(item:*, i:int, arr:Array):int { return 0x100*i/(colorOrGradient.length+i-1) });
            if(!alphas) _alphas = _colors.map(function(..._):Number { return 1 });
        } else {
            _colors = [colorOrGradient, 0];
            _ratios = [0, 255];
        }
        super(width, height, _gradientBmp, occlusion);
        if(!occlusion) throw(new Error("An occlusion DisplayObject must be provided."));
        if(!(colorOrGradient is Array || colorOrGradient is uint)) throw(new Error("colorOrGradient must be either an Array or a uint."));
    }
    
    protected function _drawGradient():void {
        var size:Number = 2 * Math.sqrt(_viewportWidth*_viewportWidth + _viewportHeight*_viewportHeight);
        _gradientMtx.createGradientBox(size, size, 0, -size/2 + srcX, -size/2 + srcY);
        _gradient.graphics.clear();
        _gradient.graphics.beginGradientFill(GradientType.RADIAL, _colors, _alphas, _ratios, _gradientMtx);
        _gradient.graphics.drawRect(0, 0, _viewportWidth, _viewportHeight);
        _gradient.graphics.endFill();
        if(_gradientBmp.bitmapData) _gradientBmp.bitmapData.dispose();
        _gradientBmp.bitmapData = new BitmapData(_viewportWidth, _viewportHeight, true, 0);
        _gradientBmp.bitmapData.draw(_gradient);
    }
    
    /**
     * Updates the lo-res gradient bitmap if neccesary and copies it to _baseBmd.
     */
    override protected function _drawLoResEmission():void {
        if(_gradientLoResDirty) {
            super._drawLoResEmission();
            _gradientLoResBmd.copyPixels(_baseBmd, _baseBmd.rect, _baseBmd.rect.topLeft);
            _gradientLoResDirty = false;
        } else {
            _baseBmd.copyPixels(_gradientLoResBmd, _baseBmd.rect, _baseBmd.rect.topLeft);
        }
    }
    
    /** @inheritDoc */
    override protected function _updateBuffers():void {
        super._updateBuffers();
        _gradientLoResBmd = new BitmapData(_bufferWidth, _bufferHeight, false, 0);
        _gradientLoResDirty = true;
    }
    
    /** @inheritDoc */
    override public function setViewportSize(width:uint, height:uint):void {
        super.setViewportSize(width, height);
        _drawGradient();
        _gradientLoResDirty = true;
    }
    
    /** @inheritDoc */
    override public function render(e:Event = null):void {
        var srcChanged:Boolean = _lastSrcX != srcX || _lastSrcY != srcY;
        if(srcChanged) _drawGradient();
        _gradientLoResDirty ||= srcChanged;
        _gradientLoResDirty ||= (!colorIntegrity && (_lastIntensity != intensity));
        _gradientLoResDirty ||= (_lastColorIntegrity != colorIntegrity);
        _lastSrcX = srcX;
        _lastSrcY = srcY;
        _lastIntensity = intensity;
        _lastColorIntegrity = colorIntegrity;
        super.render(e);
    }
}


import flash.display.*;
import flash.filters.*;

class SunIcon extends Sprite {
    public function SunIcon() {
        buttonMode = true;
        graphics.beginFill(0, 0);
        graphics.drawCircle(0, 0, 14);
        graphics.endFill();
        graphics.lineStyle(1, 0xffc040);
        graphics.drawCircle(0, 0, 4);
        filters = [new GlowFilter(0, 1, 8, 8, 6)];
        for(var i:int = 0; i < 10; i++) {
            var sin:Number = Math.sin(Math.PI*2*i/10);
            var cos:Number = Math.cos(Math.PI*2*i/10);
            graphics.moveTo(sin*7, cos*7);
            graphics.lineTo(sin*12, cos*12);
        }
    }
}