/**
* Copyright tjoen ( http://wonderfl.net/user/tjoen )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/iQYl
*/
// forked from Reach.Sammy's flash on 2011-4-10
package
{
/**
CUBIC SPECTRUM. generate camera path is uncomplete,
beside that the code works fine. Free to use.
*/
import flash.display.*;
import flash.filters.*;
import flash.geom.*;
import flash.events.*;
import flash.media.*;
import flash.utils.*;
import flash.net.*;
import org.papervision3d.materials.ColorMaterial;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.objects.primitives.Cube;
import org.papervision3d.view.BasicView;
import gs.TweenLite;
import caurina.transitions.Tweener;
[SWF(width = '456', height = '456', backgroundColor = '#000000', frameRate = '30')]
public class CubeSpectrum extends BasicView
{
private var ba:ByteArray;
private var timer:Timer;
private var it:Number = 0;
private var cubes:Array;
private var container:DisplayObject3D;
private var pivot:Sprite;
private static const WAVE_RADIUS:uint = 100;
private static const WAVE_COLORS:Array = [0x710630, 0xFB0165, 0xff652d];
private var easeOut:Number = 0.5;
private var reachX:Number = 0.7;
private var reachY:Number = 0.7;
public function CubeSpectrum()
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(event:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
stage.quality = StageQuality.MEDIUM;
var spacing:uint = 350;
var dim:uint = 7;
var c:uint = (dim * spacing * 0.5);
var snd:Sound = new Sound();
camera.x = 200;
camera.y = 50;
camera.z = 50;
camera.zoom = 7;
camera.focus = 60;
camera.sort = false;
pivot = new Sprite();
pivot.x = 360;
pivot.y = 345;
container = new DisplayObject3D();
scene.addChild(container);
snd.load(new URLRequest("http://mutast.heteml.jp/works/music/music.mp3"));
snd.play(0, int.MAX_VALUE);
trace("$oundtrack Start");
ba = new ByteArray();
cubes = new Array();
for(var i:uint = 0; i < dim; i ++)
{
for(var j:uint = 0; j < dim; j ++)
{
for(var k:uint = 0; k < dim; k ++)
{
var size:uint = Math.random() * 20 + 40;
var cube:Cube = new Cube(new MaterialsList({all:new ColorMaterial(0xFF0032)}), size, size, size, 1, 1, 1);
//var cube:Cube = new Cube(new MaterialsList({all:new ColorMaterial(0xFF0032 * Math.random())}), size, size, size, 1, 1, 1);
//container.filters = [new GradientGlowFilter(0, 0, WAVE_COLORS, [0, 1], [0, 300, 285], 18, 18, 1, BitmapFilterQuality.MEDIUM, BitmapFilterType.FULL)];
container.addChild(cube);
/**
cube.x = Math.random() * 2000 - 1000;
cube.y = Math.random() * 2000 - 1000;
cube.z = Math.random() * 2000 - 1000;
*/
cube.x = i * spacing - c;
cube.y = j * spacing - c;
cube.z = k * spacing - c;
cube.useOwnContainer = true;
cube.alpha = 0.8;
cube.blendMode = BlendMode.ADD;
/*
cube.rotationY = Math.random() * 360;
cube.scale = Math.random() * 3;
*/
cubes.push(cube);
}
}
}
//generateCameraPath();
startRendering();
timer = new Timer(100);
timer.addEventListener(TimerEvent.TIMER, tick);
timer.start();
}
private function tick(e:TimerEvent):void
{
var temp:Array = new Array();
SoundMixer.computeSpectrum(ba, true, 0);
for(var j:int = Math.random(); j < 256; j += Math.floor(256 / cubes.length))
{
temp.push((ba.readFloat() * 1.5) + 1);
}
for(var i:uint = 0; i < cubes.length; i++ )
{
TweenLite.to(cubes[i], 0.3, {scaleY:temp[i], scaleZ:temp[i], scaleX:temp[i]});
cubes[i].alpha = temp[i] - 0.9;
cubes.rotationY ++;
}
}
private function generateCameraPath():void
{
var bz:Array = new Array();
var bzT:Array = new Array();
for (var i:Number = 0; i < 100; i++)
{
bz.push({x:Math.random() * stage.stageWidth * 2 - stage.stageHeight * 2, y:Math.random() *stage.stageWidth * 2 - stage.stageHeight * 2, z:Math.random() * stage.stageWidth * 2 - stage.stageHeight * 2});
bzT.push({x:Math.random() * stage.stageWidth * 2 - stage.stageHeight * 2, y:Math.random() * 200-100, z:Math.random() * stage.stageWidth * 2 - stage.stageHeight * 2});
}
Tweener.addTween(camera, {x:200, y:200, z:0, Bezier:bz, time:1000,transition:"linear"});
Tweener.addTween(camera.target, {x:0, y:0, z:0, Bezier:bzT, time:1000, transition:"linear"});
Tweener.addTween(container, {time:1000, onComplete:function():void{ generateCameraPath()}});
}
override protected function onRenderTick(event:Event = null):void
{
container.yaw(1);
container.pitch(1);
this.camera.x += (( - pivot.mouseX * 5) - this.camera.x) / 35;
this.camera.y += (( - pivot.mouseY * 5) - this.camera.y) / 35;
super.onRenderTick();
}
// scene.renderCamera(camera);
}
}