Beispiel #1
0
        // <param name="elapsedTime">Tiempo en segundos transcurridos desde el último frame</param>
        public override void render(float elapsedTime)
        {
            Device d3dDevice = GuiController.Instance.D3dDevice;

            axisRotation += AXIS_ROTATION_SPEED * elapsedTime;
            float camaraY = (float)GuiController.Instance.Modifiers["camaraY"];
            float camaraZ = (float)GuiController.Instance.Modifiers["camaraZ"];

            camaraTerceraPersona.CambiarCamara(camaraY, camaraZ);
            //Obtener valor de UserVar (hay que castear)
            int valor = (int)GuiController.Instance.UserVars.getValue("variablePrueba");

            #region

            //Radio de la nave
            string filePath = (string)GuiController.Instance.Modifiers["MP3-File"];
            LoadMp3(filePath);

            TgcMp3Player        player       = GuiController.Instance.Mp3Player;
            TgcMp3Player.States currentState = player.getStatus();

            if (GuiController.Instance.D3dInput.keyPressed(Microsoft.DirectX.DirectInput.Key.Y))
            {
                if (currentState == TgcMp3Player.States.Open)
                {
                    //Reproducir MP3
                    player.play(true);
                }
                if (currentState == TgcMp3Player.States.Stopped)
                {
                    //Parar y reproducir MP3
                    player.closeFile();
                    player.play(true);
                }
            }
            else if (GuiController.Instance.D3dInput.keyPressed(Microsoft.DirectX.DirectInput.Key.O))
            {
                if (currentState == TgcMp3Player.States.Playing)
                {
                    //Parar el MP3
                    player.stop();
                }
            }

            #endregion

            //Cargamos el Render Targer al cual se va a dibujar la escena 3D. Antes nos guardamos el surface original
            //En vez de dibujar a la pantalla, dibujamos a un buffer auxiliar, nuestro Render Target.
            pOldRT = d3dDevice.GetRenderTarget(0);
            Surface pSurf = renderTarget2D.GetSurfaceLevel(0);
            d3dDevice.SetRenderTarget(0, pSurf);
            d3dDevice.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0);


            //Dibujamos la escena comun, pero en vez de a la pantalla al Render Target
            drawSceneToRenderTarget(d3dDevice, elapsedTime);

            //Liberar memoria de surface de Render Target
            pSurf.Dispose();

            //Si quisieramos ver que se dibujo, podemos guardar el resultado a una textura en un archivo para debugear su resultado (ojo, es lento)
            //TextureLoader.Save(GuiController.Instance.ExamplesMediaDir + "Shaders\\render_target.bmp", ImageFileFormat.Bmp, renderTarget2D);


            //Ahora volvemos a restaurar el Render Target original (osea dibujar a la pantalla)
            d3dDevice.SetRenderTarget(0, pOldRT);


            //Luego tomamos lo dibujado antes y lo combinamos con una textura con efecto de alarma
            drawPostProcess(d3dDevice);

            nave.Renderizar(elapsedTime, obstaculos);
            NaveEnemiga1.MoverHaciaObjetivo(elapsedTime, nave.Modelo.Position);
            NaveEnemiga1.Renderizar(elapsedTime, obstaculos);


            #region Detectar Colisiones

            ColisionNave(elapsedTime);
            ColisionDisparos(elapsedTime);

            #endregion

            sol.BoundingBox.transform(sol.Transform);
            sol.Transform = TransformarSol(elapsedTime);
            GuiController.Instance.ThirdPersonCamera.Target = nave.Modelo.Position;
            //Limpiamos todas las transformaciones con la Matrix identidad
            sol.render();
            d3dDevice.Transform.World = Matrix.Identity;
            Universo.renderAll();
        }