Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.shanimal.fx {
- import flash.display.BitmapData;
- import flash.display.BitmapDataChannel;
- import flash.events.TimerEvent;
- import flash.filters.DisplacementMapFilter;
- import flash.filters.DisplacementMapFilterMode;
- import flash.filters.GlowFilter;
- import flash.geom.Point;
- import flash.utils.Timer;
- import spark.components.Image;
- public class Wave {
- // private stuff
- private var _animating:Boolean = false;
- private var _dmFilter:DisplacementMapFilter;
- private var _originalBmpData:BitmapData;
- private var _originalFilters:Array;
- private var _target:*;
- private var _timer:Timer = new Timer(Math.floor(1000/32));
- // constructor
- public function Wave(){
- _timer.addEventListener(TimerEvent.TIMER,eof);
- _timer.start();
- }
- // public getters/setters
- /**
- * releases the prior target and assigns a new target. making this a good button component for a list of <s:Image flags
- *
- * usage:flex <fx:Script ...
- * <pre>
- * [Bindable] private var wave:Wave = new Wave();
- * private var _locale:String = "";
- *
- * [Bindable]
- * private function get locale():String {
- * return _locale;
- * }
- * private function set locale(s:String):void{
- * _locale = s;
- * var defaultChain:Array = ["es_MX",LocaleID.DEFAULT];
- * var flags:Object = {
- * "en_US":{target:flagEnglish,chain:["en_US"].concat(defaultChain)},
- * "de_DE":{target:flagDeutsch,chain:["de_DE"].concat(defaultChain)},
- * "pi_RT":{target:flagPirate,chain:["pi_RT","en_GB"].concat(defaultChain)}
- * }
- * resourceManager.localeChain = flags[s].chain;
- * wave.target = flags[s].target;
- * }
- * </pre>
- */
- [Bindable]
- public function get target():* {
- return _target;
- }
- public function set target(t:*):void{
- if(t == target) return;
- if(t.hasOwnProperty("bitmapData")){
- initTarget(t);
- }
- }
- //public methods
- public function play():void{
- _animating = true;
- }
- public function restore():void{
- if(_originalBmpData && target){
- (target as Image).bitmapData.draw(_originalBmpData);
- target.filters = _originalFilters
- }
- }
- public function stop():void{
- _animating = false;
- }
- // protected methods
- protected function applyEffect(t:Image):void{
- var mapBmd:BitmapData = t.bitmapData;
- mapBmd.perlinNoise(15,30,2,0,true,false,BitmapDataChannel.RED|BitmapDataChannel.BLUE,false,[new Point(-_timer.currentCount,_timer.currentCount/100),new Point(mapBmd.rect.width,mapBmd.rect.height)]);
- _dmFilter = _dmFilter || new flash.filters.DisplacementMapFilter(mapBmd, new Point(), BitmapDataChannel.RED, BitmapDataChannel.BLUE, -5, -5, DisplacementMapFilterMode.CLAMP);
- _dmFilter.mapBitmap = mapBmd;
- t.filters = [_dmFilter];
- }
- protected function eof(e:TimerEvent):void{
- if(_animating && target && target.bitmapData)
- applyEffect(target);
- }
- protected function initTarget(t:*):void{
- restore();
- _target = t;
- _originalBmpData = target.bitmapData.clone();
- _originalFilters = target.filters;
- play();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment