forked from: forked from: Chapter 35 Example 14

by Akkii forked from forked from: Chapter 35 Example 14 (diff: 4)
♥0 | Line 53 | Modified 2016-11-23 14:55:41 | MIT License
play

ActionScript3 source code

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

// forked from Quasimondo's forked from: Chapter 35 Example 14
// forked from actionscriptbible's Chapter 35 Example 14
package {
  import flash.display.*;
  import flash.events.Event;
  import flash.net.*;
  import flash.utils.ByteArray;
  import flash.utils.getTimer;
  
  [SWF(backgroundColor="#000000")]
  public class ch35ex14 extends Sprite {
    protected var shaders:Vector.<Shader>;
    protected var shape:Shape;
    protected var shaderCount:int = 10;

    public function ch35ex14() {
      shaders =new Vector.<Shader>();

      shape = new Shape();
      shape.x = stage.stageWidth/2; shape.y = stage.stageHeight/2;
      addChild(shape);
      var loader:URLLoader = new URLLoader();
      loader.dataFormat = URLLoaderDataFormat.BINARY;
      //plasma shader courtesy the inimitable mrdoob (Ricardo Cabello)
      loader.load(new URLRequest(
        "http://actionscriptbible.com/files/mrdoob-plasma.pbj"));
      loader.addEventListener(Event.COMPLETE, onLoadComplete);
    }
    
    protected function onLoadComplete(event:Event):void {
      var loader:URLLoader = URLLoader(event.target);
     
     for ( var i:int = 0; i < shaderCount; i++)
     {
         var plasma:Shader = new Shader()
        plasma.byteCode = ByteArray(loader.data);
        shaders.push(plasma);
      }
      addEventListener(Event.ENTER_FRAME, onEnterFrame);
    }
    
    protected function onEnterFrame(event:Event):void {
      var t:int = getTimer();
      var w:Number = stage.stageWidth/2; 
      var h:Number = stage.stageHeight/2;
      
      
      shape.graphics.clear();
      shape.graphics.lineStyle(30, 0, 1, false, null, CapsStyle.NONE);
      for ( var i:int = 1; i <= shaderCount; i++ )
      {
          var d:ShaderData = shaders[i-1].data;
          d.center.value = [i+Math.sin(t*.002)*300+w, Math.cos(t*.0001)*300+h];
          d.wave.value = [Math.sin(i*t*.0001)*.06+0.01, Math.cos(i*t*.00005)*.05];
          d.offset.value = [Math.sin(i*t*.0004)*200, Math.cos(i*t*.00003)*200];
          d.color_offset.value = [Math.sin(i*t*.0002)*2, Math.sin(i*t*.000009)*2,
        Math.cos(i*t*.00005)*2];
          d.distort.value = [Math.sin(t*.0008)*.05];
          shape.graphics.lineShaderStyle(shaders[i-1]);
          shape.graphics.drawCircle(200,200,30+i*30);
        }
    }
  }
}