// forked from Nao_u's 煙のアニメーション
// forked from Nao_u's forked from: Peak beta 1
// forked from shaktool's Peak beta 1
// forked from shaktool's Peak
// borrowed some code from psyark's BumpyPlanet:
// http://wonderfl.kayac.com/code/d79cd85845773958620f42cb3e6cb363c2020c73
package {
import flash.display.*;
import flash.events.*;
import flash.filters.*;
import flash.geom.*;
import flash.text.*;
import flash.utils.*;
[SWF(width=465, height=465, frameRate=24, backgroundColor=0x808080)]
public class Peak extends Sprite {
private var iSw:uint = 465;
private var iSh:uint = 465;
private var iCScl:uint = 2;
private var iCw:uint = iSw/iCScl;
private var iCh:uint = iSh/iCScl;
private var dSky:BitmapData;
private var dStage:BitmapData;
private var mStage:Bitmap;
private var dClouds:BitmapData;
private var mCloudsS:Sprite;
private var oCloudsSMtx:Matrix;
private var pNull:Point = new Point(0,0);
private var oNullMtx:Matrix = new Matrix;
private var oNullCTrns:ColorTransform = new ColorTransform;
private var aRemap: Array = new Array(256);
private var iOct:uint = 4;
private var aWind:Array = new Array;
public function Peak() {
init();
}
private function init():void {
var i:uint;
iSw = stage.stageWidth;
iSh = stage.stageHeight;
iCw = iSw/iCScl;
iCh = iSh/iCScl;
for (i=0;i<iOct;i++) aWind.push(new Point);
dClouds = new BitmapData(iCw,iCh,false,0);
oCloudsSMtx = new Matrix;
oCloudsSMtx.createGradientBox(iCw,iCh,.5*Math.PI);
mCloudsS = new Sprite();
mCloudsS.graphics.beginFill(0);
mCloudsS.graphics.beginGradientFill(GradientType.LINEAR,[0xFFFFFF,0],[1,1],[0,0xFF],oCloudsSMtx);
mCloudsS.graphics.drawRect(0,0,iCw,iCh);
var mSky:Sprite = new Sprite();
var mtxSky:Matrix = new Matrix;
mtxSky.createGradientBox(iSw,iSh,.5*Math.PI);
mSky.graphics.beginFill(0);
mSky.graphics.beginGradientFill(GradientType.LINEAR,[0x6AB5FB,0xDCDDDD],[1,1],[0,0xFF],mtxSky);
mSky.graphics.drawRect(0,0,iSw,iSh);
dSky = new BitmapData(iSw,iSh,false,0);
dSky.draw(mSky);
dStage = new BitmapData(iSw,iSh,false,0);
mStage = addChild(new Bitmap(dStage )) as Bitmap;
var c:uint = 0;
var f:Number = 0;
var fPrt:Number = .1;
var fLrg:Number = 2.3;
var fMlt:Number = 1/(1-fPrt);
var fMin:Number = 1-f;
var fMinThr:Number = 1/fMin;
for(i=0;i<255;i++) {
c = 0;
f = i/255;
var fSmooth:Number = Math.sin(.5*f*Math.PI);
if (f>fPrt) c = Math.max(0,Math.min(255,Math.ceil(255*fSmooth*fLrg*fMlt*(f-fPrt))));
aRemap[i] = c<<16|c<<8|c;
trace(i,c,aRemap[i].toString(16),Math.sin(.5*f*Math.PI));
}
stage.addEventListener(Event.ENTER_FRAME, run);
}
private function run(e:Event):void {
var fMsx:Number = 10*mouseX/iSw/iCScl;
var fMsy:Number = mouseY/iSh/iCScl;
for (var i:uint=0;i<aWind.length;i++) {
var pP:Point = aWind[i];
var fC:Number = 100*(1/(i+1))*(i%2==0?1:-1);
pP.x = fC*fMsx;
pP.y = fC*fMsy;
}
dClouds.perlinNoise(300/iCScl,100/iCScl, iOct, 0,false,false, iOct, !true, aWind);
dClouds.draw(mCloudsS,oNullMtx,oNullCTrns,BlendMode.MULTIPLY);
dClouds.paletteMap(dClouds, dClouds.rect, pNull, aRemap, aRemap, aRemap, null);
dStage.copyPixels(dSky,dSky.rect,pNull);
dStage.draw(dClouds,oNullMtx,oNullCTrns,BlendMode.ADD);
}
}
}