package {
    import away3d.containers.View3D;
    import away3d.core.render.Renderer;
    import away3d.materials.BitmapMaterial;
    import away3d.primitives.Cube;
    
    import flash.display.Bitmap;
    import flash.display.BlendMode;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.filters.GlowFilter;

    [SWF(width="465", height="400", frameRate="60", backgroundColor="#000000")]
    public class GlowBox extends Sprite
    {
        private var view:View3D;
        private var cubes:Array;
        
        [Embed (source="assets/yellow.png")]
        private var yellowMat:Class;
        [Embed (source="assets/red.png")]
        private var redMat:Class;
        [Embed (source="assets/blue.png")]
        private var blueMat:Class;
        [Embed (source="assets/green.png")]
        private var greenMat:Class;
        [Embed (source="assets/pink.png")]
        private var pinkMat:Class;
        
        public function GlowBox()
        {
            cubes = new Array();
            view = new View3D({x:232,y:200,renderer:Renderer.BASIC});
            addChild(view);
            
            makeCube(pinkMat, 80, 28);
            makeCube(greenMat, 120, 21);
            makeCube(blueMat, 160, 14);
            makeCube(redMat, 200, 7);
            makeCube(yellowMat, 240, 0);
            this.addEventListener(Event.ENTER_FRAME, refresh);
        }
        private function makeCube(material:Class, size:Number, rotation:Number):void
        {
            var myBitmap:Bitmap = new material() as Bitmap;
            var mat1:BitmapMaterial = new BitmapMaterial( myBitmap.bitmapData );
            var cube:Cube = new Cube({material:mat1,width:size,height:size,depth:size,rotationX:rotation,rotationY:rotation,bothsides:true,ownCanvas:true});
            view.scene.addChild(cube);
            cubes.push(cube);
            cube.blendMode = BlendMode.ADD; // setting blendmodes in the init seems broken, so I just set it here instead
        }
        
        private function refresh(e:Event):void
        {
            for(var i:Number = 0; i < cubes.length; i++){
                var cube:Cube = cubes[i] as Cube;
                cube.rotationX += (i+2)*0.1;
                cube.rotationY += (i+2)*0.05;
            }
            view.render();
        }
    }
}