package {
    
    /**
     * 
     * Auteur: Vincent Helwig
     * Date: 14.10.2008
     * Website: http://www.tsoin.com
     * Description: Papervision3D - Création d’un cube
     * 
     **/
    
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.events.MouseEvent;
    
    import net.hires.utils.Stats;
    
    import org.papervision3d.cameras.Camera3D;
    import org.papervision3d.materials.WireframeMaterial;
    import org.papervision3d.materials.utils.MaterialsList;
    import org.papervision3d.objects.primitives.Cube;
    import org.papervision3d.render.BasicRenderEngine;
    import org.papervision3d.scenes.Scene3D;
    import org.papervision3d.view.Viewport3D;
    
    [SWF(backgroundColor="#000000", frameRate="100", width="600", height="400")]

    public class Papervision_002 extends Sprite {
        
        private var scene:Scene3D;
        private var camera:Camera3D;
        private var viewport:Viewport3D;
        private var renderer:BasicRenderEngine;
        
        private var cube:Cube;
        
        public function Papervision_002() {
            addEventListener(Event.ADDED_TO_STAGE, init);
            var __stats:Stats = new Stats();
            __stats.width = 75;
            __stats.x = 525;
            addChild( __stats );
        }
        
        private function init(event:Event):void {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            
            setupScene();
            
            stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
            stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
        }
        
        private function setupScene():void {
            scene = new Scene3D();
            camera = new Camera3D();
            camera.x = 0;
            camera.y = 0
            camera.z = -300;
            camera.focus = 50;
            camera.zoom = 10;
            
            viewport = new Viewport3D(600, 400);
            addChild( viewport );
            
            renderer = new BasicRenderEngine();
            
            var ml:MaterialsList = new MaterialsList({all: new WireframeMaterial( 0x00FF00, 1 )});
            cube = new Cube(ml, 100, 100, 100, 3, 3, 3);
            scene.addChild( cube );
        }
        
        private function onEnterFrame(event:Event):void {
            renderer.renderScene(scene, camera, viewport);
        }
        
        private function onMouseMove(event:Event):void {
            cube.rotationX = ( stage.mouseY * 180 ) / stage.stageHeight - 90;
            cube.rotationY = ( stage.mouseX * 180 ) / stage.stageWidth - 90;
        }
        
    }
    
}