package {
import flash.display.Stage;
import flash.display.StageScaleMode;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.BitmapDataChannel;
import flash.display.Sprite;
import flash.filters.BitmapFilter;
import flash.filters.DisplacementMapFilter;
import flash.filters.DisplacementMapFilterMode;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.text.TextFormatAlign;
import flash.filters.GlowFilter;
import flash.filters.BlurFilter;
import flash.geom.Rectangle;
import flash.events.Event;
import net.sakri.component.HorizontalBitmapScroller;
import net.sakri.graphics.WaveGraphic;
import net.sakri.component.Reflection;
import com.adobe.viewsource.ViewSource;
[SWF(width="800", height="600", backgroundColor="#000000")]
public class DisplacementMapFilterTest extends Sprite{
public static const APP_WIDTH:uint=800;
public static const APP_HEIGHT:uint=600;
[Embed(source="assets/ArialBlackFont.swf", fontName="Arial Black")]
public static var ArialBlack:Class;
private var _holder:Sprite;
private var label_text:String = "Look Mommie,\n I can displacementMapFilter!!11";
private var _reflection:Reflection;
private var bitmap_scroller:HorizontalBitmapScroller;
public function DisplacementMapFilterTest(){
ViewSource.addMenuItem(this, "srcview/index.html");
stage.scaleMode=StageScaleMode.NO_SCALE;
stage.frameRate=31;
init();
}
private function init():void{
_holder=new Sprite();
addChild(_holder);
bitmap_scroller=createWaveBDScroller();
bitmap_scroller.scroll_speed=10;
var label:TextField=createLabel();
_holder.addChild(label);
createReflection();
addEventListener(Event.ENTER_FRAME,moveWave);
}
public function moveWave(e:Event=null):void{
bitmap_scroller.scroll();
_holder.filters =[getBitmapFilter()];
_reflection.render(null,APP_WIDTH,APP_HEIGHT/2);
}
private function getBitmapFilter():BitmapFilter {
var mapBitmap:BitmapData = new BitmapData(APP_WIDTH,APP_HEIGHT/2);
mapBitmap.draw(bitmap_scroller,null,null,null,null,true);
var mapPoint:Point = new Point(0, 0);
var channels:uint = BitmapDataChannel.RED;
var componentX:uint = channels;
var componentY:uint = channels;
var scaleX:Number = 1;
var scaleY:Number = -30;
var mode:String = DisplacementMapFilterMode.CLAMP;
var color:uint = 0;
var alpha:Number = 0;
return new DisplacementMapFilter(mapBitmap,
mapPoint,
componentX,
componentY,
scaleX,
scaleY,
mode,
color,
alpha);
}
private function createWaveBDScroller():HorizontalBitmapScroller{
var _wave_graphic:WaveGraphic=new WaveGraphic();
_wave_graphic.wave_peaks=4;
_wave_graphic.wave_center_height=.3;
_wave_graphic.top_color=0xFF0000;
_wave_graphic.bottom_color=0x0000FF;
_wave_graphic.init(APP_WIDTH,APP_HEIGHT/2);
var blur:BlurFilter=new BlurFilter(0,100);
_wave_graphic.filters=[blur];
var _wave_bd:BitmapData=new BitmapData(APP_WIDTH,APP_HEIGHT/2);
_wave_bd.draw(_wave_graphic, new Matrix());
return new HorizontalBitmapScroller(_wave_bd);
}
private function createLabel():TextField{
var tf:TextField = new TextField();
tf.multiline=true;
var tformat:TextFormat=new TextFormat();
tf.selectable=false;
tf.embedFonts=true;
tformat.font="Arial Black";
tformat.color=0xD3E2B7;
tformat.bold=true;
tformat.size="46";
tformat.bold=true;
tformat.align=TextFormatAlign.CENTER;
tf.text = label_text;
tf.setTextFormat(tformat);
tf.y = 100;
tf.width = APP_WIDTH;
tf.height=200;
tf.filters=[new GlowFilter(0xA4BE05,.8,10,10,2)];
return tf;
}
private function createReflection():void{
_reflection=new Reflection();
_reflection.init(_holder);
_reflection.y=APP_HEIGHT/2-240;
addChild(_reflection);
}
}
}