forked from: forked from: Electricity Effect

by Etienne.Verhote
♥0 | Line 87 | Modified 2012-11-02 03:52:58 | MIT License
play

ActionScript3 source code

/**
 * Copyright Etienne.Verhote ( http://wonderfl.net/user/Etienne.Verhote )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/fO05
 */

// forked from cursedboy's forked from: Electricity Effect
// forked from milkmidi's Electricity Effect
package  {
    /**
     * ...
     * @author milkmidi
        http://milkmidi.blogspot.com
     */    
    import flash.display.Sprite;    
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.BlendMode;
    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.filters.DisplacementMapFilter;
    import flash.filters.GlowFilter;
    import flash.filters.DisplacementMapFilterMode;
    import flash.geom.*;
    import flash.utils.setTimeout;
    [SWF(width = "465", height = "465", frameRate = "30", backgroundColor = "#0")]
    public class Elect extends Sprite {            
        private const data:String = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA9xJREFUeNrEV0toE1EUvUkmxJpEUHQjaFuL9VM34ocWFNEqCrpo60oquHNhET8guBDcaEEXgrgRtwoi+Fsp6sZlKYpaSWljqzGmiqS22lKbzudd582beXlvZt70g+Klycz7nvvOPffmNYaI0NJ+uXNsEq/qFq4Eu80M2cf5o19eG0PaBPg6/7jb5+3J3rCQiMXOfu65/ijW3HapM72i/k7TpjpYlEqyCRzU28eGQNYmxOtH9iF0zAXm/XLb3Yo7MqPrMJQfgJHixw6NnnzrrlpIJjV421dkCzx/UWABibsp8qc3LvbxdUKbs+Iebl1jA6xpaIRiYfhaXDfJSk1LQN97GbzqRdVzMTgq88CjbDA/BJqm0dc659s0reC2UtzEmMofzkJgDELeq6eyLMt505yG7QBlWJyACDJAVXNV/xDU/fbDmJ4EYuqc/nhCg2RqifMuOaCbpnAKz1nBc1HRouKBuDMICEqDX9/zMDE6DE2Nq2HJ0jQXdMVMQFnPOnNMy3QdsAdM3WLqFlNFFJAkrqqiudq5nwg/vryDrqM74diRi5DNpKWo9r4ZgNNXXjIGTNcButzQDfcUwukxPBRsDhEEW2VoarwE3ec6oP3Q7iiZMgZMzoAdAsPWgEWkKbIT6FO4kHpQrQsHd6yKBvfSmQvf1YBhmHIKChpQggsh8VjoPNwamX5xLcVJlBgwbQeImAaiCFHUhIoNNn9DY50EODH5G+4/z/E9v5UnuNAtS9SAYdAa60tXFPzw0S3knVgtAwXnQxFu3euVwul9G27mRTAgxx+U4L5SKxjdk/1QBdQl1gHCBEEwWFIlMYKUCd54+VMPVKZG3bknpD2ymRoYyT3lh0+ll8Hy2u1yGtIB6g0h4aVYlRHenLs3z8O2zetDRbdxXT2Uck94u+d1P5zsfsHYcfE0SpFHRzBnfNQhSHU3nPjZDGUHnPgREjpJJgN9zCAsAD3wa6kxWknwR9DviAI4mcrMGTyZygYOq0kXh6C74EvKQFiOX3jAx149PC0tL30tQ1vXbWFJEEdzdE2IinzFDURIScVKaiPfyuwqF+WAKoeDk9H3iAZXaSfoAISJMEwDEcCoVvxsVzRNus4oNpsXQ8FyGClMpxCNj5XnkrpKIFU1oPXl5/joLA7Y1rpv/2zJO59ubovTGdiz94By/NmTRyEhmFMxgb9mGv4H0KAIfUCx2PwBcYEexm38QqVSAfTf7f8x+MxMhT4K8UQ8dnZwoN/rmBcoRpVx21I1WSV43sa07UyMblDbfKrdIniN/q82x1wMtZYta313wmnI5UthUwsUvNR74/EfAQYA2LBjPIifyRUAAAAASUVORK5CYII="
        private var logo_mc:Sprite;
        
        private var glow:GlowFilter = new GlowFilter(0x00ffff, 1, 1, 1, 100, 1, false, true);
        private var glow2:GlowFilter = new GlowFilter(0x00ffff, 0.6, 8, 8, 2, 1, false, false);
        private var glow3:GlowFilter = new GlowFilter(0x6666ff, 0.8, 10, 10, 3, 1, false, false);
        
        private var offset_y:Number = 2;
        private var offset_x:Number = 2;
        private var bounds:Object
        private var w:Number;
        private var h:Number;
        
        private var _sourceBmp        :BitmapData;
        private var _displaceBmp    :BitmapData;        
        private var _perlinNoiseBmp    :BitmapData;
            
        private var _offsetArray:Array = [new Point(), new Point()];
        private var _displacementFilter:DisplacementMapFilter;
        public function Elect() {
            
            logo_mc = new Sprite();
            logo_mc.addChild( Base64ImageLoader.load(data)  );            
            setTimeout( _timeout , 100 );            
        }        
        
        private function _timeout():void {
            logo_mc.x = (465 -logo_mc.width) >> 1;
            logo_mc.y = (465 -logo_mc.height) >> 1;
            addChild(logo_mc);
            bounds = logo_mc.getBounds(logo_mc);
            w = bounds.width + offset_x;
            h = bounds.height + offset_y;
            _sourceBmp = new BitmapData(w, h, true, 0);
            _displaceBmp = new BitmapData(w, h, true, 0);        
            _perlinNoiseBmp = new BitmapData(w, h);
            
            var bitmap:Bitmap = new Bitmap(_displaceBmp);
            bounds.x -= offset_x / 2;
            bounds.y -= offset_y / 2;
            _sourceBmp.draw(logo_mc, new Matrix(1, 0, 0, 1, bounds.x * -1, bounds.y * -1));
            
            this.addChild(bitmap)
            bitmap.x = logo_mc.x + bounds.x;
            bitmap.y = logo_mc.y + bounds.y;
            
            _displacementFilter = new DisplacementMapFilter(_perlinNoiseBmp, new Point(), 1, 1, 25, 25,DisplacementMapFilterMode.COLOR);
        
            logo_mc.filters = [glow2];
            bitmap.blendMode = BlendMode.SCREEN;
            bitmap.filters = [glow2, glow3];
            this.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
        }
        private function enterFrameHandler(e:Event):void {            
            _offsetArray[0].x -= 2;
            _offsetArray[1].x -= 1;
            _perlinNoiseBmp.perlinNoise(10, 20, 3, 64, true, true, 1, true, _offsetArray);
            _displaceBmp.applyFilter(_sourceBmp, _sourceBmp.rect,new Point(), glow);
            _displaceBmp.applyFilter(_displaceBmp, _sourceBmp.rect, new Point(), _displacementFilter);
        }
    }
    
}


import flash.display.Loader;
import flash.utils.ByteArray;
import mx.utils.Base64Decoder;
class Base64ImageLoader {    
    public static function load(pData:String):Loader {
        var _byteArray:ByteArray;
        var _base64Decoder:Base64Decoder = new Base64Decoder();
        var _loader:Loader;                
        _base64Decoder.decode(pData);        
        try {
            _byteArray = _base64Decoder.toByteArray();
            _byteArray.position = 0;
        } catch (e:Error) {
            return null;
        }
        
        _loader = new Loader();
        _loader.loadBytes(_byteArray);
        
        return _loader;
    }
}