package {
    
    /**
     * 
     * Auteur: Vincent Helwig
     * Date: 25.09.2008
     * Website: http://www.tsoin.com
     * Description: Alternativa3D - Intégration du moteur
     * 
     **/
     
    import alternativa.engine3d.controllers.CameraController;
    import alternativa.engine3d.core.Camera3D;
    import alternativa.engine3d.core.Object3D;
    import alternativa.engine3d.core.Scene3D;
    import alternativa.engine3d.display.View;
    import alternativa.utils.FPS;
    
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    
    
    [SWF(backgroundColor="#000000", frameRate="100", width="600", height="400")]

    public class Alternativa3D_001 extends Sprite    {
        
        private var scene:Scene3D;
        private var view:View;
        private var camera:Camera3D;
        private var cameraController:CameraController;
        
        public function Alternativa3D_001()    {
            addEventListener(Event.ADDED_TO_STAGE, init);
        }

        public function init(e: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);
        }
        
        private function setupScene():void {
            
            scene = new Scene3D();
            scene.root = new Object3D();
            
            camera = new Camera3D();
            camera.x = 0;
            camera.y = 0;
            camera.z = -300;
            camera.zoom = 10;
            camera.fov = 1.5;
            scene.root.addChild(camera);
            
            view = new View();
            view.width = 600;
            view.height = 400;
            addChild(view);
            view.camera = camera;

            cameraController = new CameraController(stage);
            cameraController.camera = camera;
            
            FPS.init(stage);
        }
        
        private function onEnterFrame(e:Event):void {
            cameraController.processInput();
            scene.calculate();
        }
    }
}