Exemple #1
0
        public MenuInicio()
        {
            //Crear Sprite
            sprite = new TgcSprite();
            sprite.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "menu\\inicio.jpg");

            //Ubicarlo centrado en la pantalla
            Size screenSize = GuiController.Instance.Panel3d.Size;
            Size textureSize = sprite.Texture.Size;
            sprite.Position = new Vector2(0, 0);
            sprite.Scaling = new Vector2((float)screenSize.Width / textureSize.Width, (float)screenSize.Height / textureSize.Height + 0.01f);

            //Crear Text
            menuLineas = new TgcText2d[] { new TgcText2d(), new TgcText2d(), new TgcText2d(), new TgcText2d() };

            //Cargar Textos
            menuLineas[0].Text = "(I) Iniciar";
            menuLineas[0].Position = new Point(inicialX, inicialY - distEntreLineas);
            menuLineas[0].changeFont(new System.Drawing.Font("TimesNewRoman", 23, FontStyle.Bold | FontStyle.Bold));

            menuLineas[1].Text = "(C) Creditos";
            menuLineas[1].Position = new Point(inicialX, inicialY);
            menuLineas[1].changeFont(new System.Drawing.Font("TimesNewRoman", 23, FontStyle.Bold | FontStyle.Bold));

            menuLineas[2].Text = "(A) Ayuda";
            menuLineas[2].Position = new Point(inicialX, inicialY + distEntreLineas);
            menuLineas[2].changeFont(new System.Drawing.Font("TimesNewRoman", 23, FontStyle.Bold | FontStyle.Bold));

            //Inicializa el d3dInput
            input = GuiController.Instance.D3dInput;
        }
        public PantallaInicio()
        {
            //Alto y ancho total de la pantalla
            float screenHeigth = Globales.getInstance().getAltoPantalla();
            float screenWidth = Globales.getInstance().getAnchoPantalla();
             //Coeficientes para la posicion relativa de las fotos de Mario y Luigi
            float xrelatMario = 0.1112f;
            float yrelatAmbos = 0.38f;
            float xrelatLuigi = 0.5631f;
            //Coeficientes absolutos para el escalado de Mario y Luigi
            float xrelat = 0.266f;
            float yrelat = 0.5f;
            //Coeficientes que regulan el tamaño especifico de cada imagen.
            float relatMarioX = xrelat * screenWidth / 480; //Los denominadores son los tamaños de alto y ancho de la imagen.
            float relatMarioY = yrelat * screenHeigth / 480;
            float relatRecux = 0.2904f * screenWidth / 500;
            float relatRecuy = 0.5510f * screenHeigth / 500;
            float relatMKx = 0.18f * screenWidth / 500;
            float relatMKy = 0.25f * screenHeigth / 500;
            float relatInicx = 0.2f * screenWidth / 500;
            float relatInicy = 0.5f * screenHeigth / 500;

            //Se cargan las imágenes que necesita la pantalla, el coso que carga los meshes y el que uso para captar el teclado.
            mario = new Imagen(GuiController.Instance.AlumnoEjemplosMediaDir + "LosBorbotones\\personajes\\mario.jpg");
            mario.setPosicion(new Vector2(xrelatMario * screenWidth, yrelatAmbos * screenHeigth));
            mario.setEscala(new Vector2(relatMarioX, relatMarioY));

            luigi = new Imagen(GuiController.Instance.AlumnoEjemplosMediaDir + "LosBorbotones\\personajes\\luigi.jpg");
            luigi.setPosicion(new Vector2(xrelatLuigi * screenWidth, yrelatAmbos * screenHeigth));//500,180
            luigi.setEscala(new Vector2(relatMarioX, relatMarioY));

            recuadro = new Imagen(GuiController.Instance.AlumnoEjemplosMediaDir + "LosBorbotones\\otros\\recuadro.png");
            recuadro.setPosicion(0.95f*mario.getPosition());
            recuadro.setEscala(new Vector2(relatRecux,relatRecuy));

            //MARIO KART
            marioKart = new Imagen(GuiController.Instance.AlumnoEjemplosMediaDir + "LosBorbotones\\frases\\D.png");
            marioKart.setPosicion(new Vector2(0.1345f*screenWidth, 0.05f*screenWidth));
            marioKart.setEscala(new Vector2(relatMKx,relatMKy));

            //"PRESIONE LA J PARA EMPEZAR A JUGAR"
            iniciar = new Imagen(GuiController.Instance.AlumnoEjemplosMediaDir + "LosBorbotones\\frases\\P.png");
            iniciar.setPosicion(new Vector2(0.9f*marioKart.getPosition().X, 1.045f*marioKart.getPosition().Y ));
            iniciar.setEscala(new Vector2(relatInicx, relatInicy));

            //MENSAJE CONSOLA
            GuiController.Instance.Logger.log(" [WASD] Controles Vehículo "
                + Environment.NewLine + " [M] Música On/Off"
                + Environment.NewLine + " [R] Reset posición"
                + Environment.NewLine + " [B] Debug Mode (muestra OBBs y otros datos útiles)"
                + Environment.NewLine + " [I] Degreelessness Mode (modo Dios)"
                + Environment.NewLine + " [Q] Volver al menú principal");

            entrada = GuiController.Instance.D3dInput;
        }
        public PantallaGameOver()
        {
            gameOver = new Imagen(GuiController.Instance.AlumnoEjemplosMediaDir + "LosBorbotones\\GO.png");
            gameOver.setPosicion(new Vector2(150, 150));
            gameOver.setEscala(new Vector2(0.3f, 0.3f));

            this.entrada = GuiController.Instance.D3dInput;
               /* mensaje = new TgcText2d();
            mensaje.Text = "GAME OVER. Presione Q para volver a empezar";
            mensaje.Color = Color.DarkRed;
            mensaje.Align = TgcText2d.TextAlign.CENTER;
            mensaje.Position = new Point(200, 200);
            mensaje.Size = new Size(600, 50);
            mensaje.changeFont(new System.Drawing.Font("TimesNewRoman", 25, FontStyle.Bold));*/
        }
        public PantallaFinalizacion(int ganadorOPerdedor)
        {
            this.entrada = GuiController.Instance.D3dInput;
            float screenHeigth = Globales.getInstance().getAltoPantalla();
            float screenWidth = Globales.getInstance().getAnchoPantalla();

            float cx = 0.5f * screenWidth / 1500;
            float cy = 0.4f* screenHeigth / 500;
            float cvx = 0.65f * screenWidth / 1500;
            float cvy = 0.5f * screenHeigth / 500;

            if (ganadorOPerdedor == 0)
            {
                gameOver = new Imagen(GuiController.Instance.AlumnoEjemplosMediaDir + "LosBorbotones\\frases\\GO.png");
                gameOver.setPosicion(new Vector2(0.15f * screenWidth, 0.2f* screenHeigth));
                gameOver.setEscala(new Vector2(cx, cy));

                bandera=false;

                /*mensaje.Text = "GAME OVER. Presione Q para volver a intentar";
                mensaje.Color = Color.DarkRed;*/
            }
            else
            {
                ganaste = new Imagen(GuiController.Instance.AlumnoEjemplosMediaDir + "LosBorbotones\\frases\\ganaste.png");
                //ganaste.setEscala(new Vector2(cx, cy));
                ganaste.setEscalarMaximo();
                ganaste.setCentrarAncho(0.2f * screenHeigth);

                bandera=true;
                /*mensaje.Text = "Ganaste! Presione Q para volver a jugar";
                mensaje.Color = Color.Green;*/

             }
            volverAEmpezar = new Imagen(GuiController.Instance.AlumnoEjemplosMediaDir + "LosBorbotones\\frases\\Q.png");

            volverAEmpezar.setPosicion(new Vector2(0.1f * screenWidth , 0.35f * screenHeigth));
            volverAEmpezar.setEscala(new Vector2(cvx, cvy));
        }
Exemple #5
0
        public MenuCreditos()
        {
            //Crear Sprite
            sprite = new TgcSprite();
            sprite.Texture = TgcTexture.createTexture(GuiController.Instance.AlumnoEjemplosMediaDir + "menu\\creditos.jpg");

            //Ubicarlo centrado en la pantalla
            Size screenSize = GuiController.Instance.Panel3d.Size;
            Size textureSize = sprite.Texture.Size;
            sprite.Position = new Vector2(0, 0);
            sprite.Scaling = new Vector2((float)screenSize.Width / textureSize.Width, (float)screenSize.Height / textureSize.Height + 0.01f);

            //Crear Text
            menuLineas = new TgcText2d[] { new TgcText2d(), new TgcText2d(), new TgcText2d() };

            //Cargar Textos
            menuLineas[0].Text = "DESARROLLADO POR";
            menuLineas[0].Position = new Point(0, posCreditos - (2 * distEntreLineas));
            menuLineas[0].changeFont(new System.Drawing.Font("TimesNewRoman", 23, FontStyle.Bold | FontStyle.Bold));

            menuLineas[1].Text = "DI PRINZIO AGUSTIN";
            menuLineas[1].Position = new Point(0, posCreditos - (distEntreLineas));
            menuLineas[1].changeFont(new System.Drawing.Font("TimesNewRoman", 23, FontStyle.Bold | FontStyle.Bold));

            menuLineas[2].Text = "VARELA FRANCO";
            menuLineas[2].Position = new Point(0, posCreditos);
            menuLineas[2].changeFont(new System.Drawing.Font("TimesNewRoman", 23, FontStyle.Bold | FontStyle.Bold));

            foreach (TgcText2d linea in menuLineas)
            {
                linea.Color = Color.Blue;
            }

            //Inicializa el d3dInput
            input = GuiController.Instance.D3dInput;
        }
        /// <summary>
        /// Obtiene la direccion a moverse por la camara en base a la entrada de teclado
        /// </summary>
        private Vector3 getMovementDirection(TgcD3dInput d3dInput)
        {
            Vector3 direction = new Vector3(0.0f, 0.0f, 0.0f);

            //Forward
            if (d3dInput.keyDown(Key.W))
            {
                if (!moveForwardsPressed)
                {
                    moveForwardsPressed = true;
                    currentVelocity = new Vector3(currentVelocity.X, currentVelocity.Y, 0.0f);
                }

                direction.Z += 1.0f;
            }
            else
            {
                moveForwardsPressed = false;
            }

            //Backward
            if (d3dInput.keyDown(Key.S))
            {
                if (!moveBackwardsPressed)
                {
                    moveBackwardsPressed = true;
                    currentVelocity = new Vector3(currentVelocity.X, currentVelocity.Y, 0.0f);
                }

                direction.Z -= 1.0f;
            }
            else
            {
                moveBackwardsPressed = false;
            }

            //Strafe right
            if (d3dInput.keyDown(Key.D))
            {
                if (!moveRightPressed)
                {
                    moveRightPressed = true;
                    currentVelocity = new Vector3(0.0f, currentVelocity.Y, currentVelocity.Z);
                }

                direction.X += 1.0f;
            }
            else
            {
                moveRightPressed = false;
            }

            //Strafe left
            if (d3dInput.keyDown(Key.A))
            {
                if (!moveLeftPressed)
                {
                    moveLeftPressed = true;
                    currentVelocity = new Vector3(0.0f, currentVelocity.Y, currentVelocity.Z);
                }

                direction.X -= 1.0f;
            }
            else
            {
                moveLeftPressed = false;
            }

            //Jump
            if (d3dInput.keyDown(Key.Space))
            {
                if (!moveUpPressed)
                {
                    moveUpPressed = true;
                    currentVelocity = new Vector3(currentVelocity.X, 0.0f, currentVelocity.Z);
                }

                direction.Y += 1.0f;
            }
            else
            {
                moveUpPressed = false;
            }

            //Crouch
            if (d3dInput.keyDown(Key.LeftControl))
            {
                if (!moveDownPressed)
                {
                    moveDownPressed = true;
                    currentVelocity = new Vector3(currentVelocity.X, 0.0f, currentVelocity.Z);
                }

                direction.Y -= 1.0f;
            }
            else
            {
                moveDownPressed = false;
            }

            return direction;
        }
        public PantallaJuego(Auto autito)
        {
            /*En PantallaInicio le paso a Pantalla juego con qué auto jugar. Acá lo asigno a la pantalla, cargo el coso
            que capta el teclado, creo el Nivel1 y lo pongo en la lista de renderizables, para que sepa con qué
            escenario cargarse */

            this.auto = autito;
            auto.mesh.move(new Vector3(0, 0, -3100));
            auto.mesh.rotateY(-1.57f);

            this.entrada = GuiController.Instance.D3dInput;
            this.nivel = EjemploAlumno.getInstance().getNiveles(0);

            //Barrita de vida
            vida = new Imagen(GuiController.Instance.AlumnoEjemplosMediaDir + "LosBorbotones\\vidaPersonaje\\vida.jpg");
            barra = new Imagen(GuiController.Instance.AlumnoEjemplosMediaDir + "LosBorbotones\\vidaPersonaje\\fondobarra.png");
            barra2 = new Imagen(GuiController.Instance.AlumnoEjemplosMediaDir + "LosBorbotones\\vidaPersonaje\\fondobarra2.png");

            vida.setEscala(escalaInicial);
            barra.setEscala(new Vector2(6.81f, 1f));
            barra2.setEscala(new Vector2(6.81f, 1f));
            Vector2 posicionbarra = new Vector2(10, 5);

            vida.setPosicion(new Vector2(155f, 9.3f));

            //CUENTA REGRESIVA
            uno = new Imagen(GuiController.Instance.AlumnoEjemplosMediaDir + "LosBorbotones\\cuentaRegresiva\\1.png");
            uno.setCentrarYEscalar();
            dos = new Imagen(GuiController.Instance.AlumnoEjemplosMediaDir + "LosBorbotones\\cuentaRegresiva\\2.png");
            dos.setCentrarYEscalar();
            tres = new Imagen(GuiController.Instance.AlumnoEjemplosMediaDir + "LosBorbotones\\cuentaRegresiva\\3.png");
            tres.setCentrarYEscalar();

            //Instrucción de misión del juego
            misionMario = new Imagen(GuiController.Instance.AlumnoEjemplosMediaDir + "LosBorbotones\\Mision\\m_mario.png");
            misionMario.setCentrarYEscalar();
            misionLuigi = new Imagen(GuiController.Instance.AlumnoEjemplosMediaDir + "LosBorbotones\\Mision\\m_luigi.png");
            misionLuigi.setCentrarYEscalar();

            // CAMARA TERCERA PERSONA
            GuiController.Instance.ThirdPersonCamera.Enable = true;
            GuiController.Instance.ThirdPersonCamera.resetValues();
            Vector2 vectorCam = (Vector2)GuiController.Instance.Modifiers["AlturaCamara"];
            GuiController.Instance.ThirdPersonCamera.setCamera(auto.mesh.Position, vectorCam.X, vectorCam.Y);
            GuiController.Instance.ThirdPersonCamera.rotateY(auto.mesh.Rotation.Y);

            //CARGAR MÚSICA.
            Musica track = new Musica("ramones.mp3");
            this.musica = track;
            musica.playMusica();
            musica.setVolume(35);

            Shared.debugMode = false;

            //Puntos de juego
            puntos = new TgcText2d();
            puntos.Text = "0";
            puntos.Color = Color.DarkRed;
            puntos.Align = TgcText2d.TextAlign.RIGHT;
            puntos.Position = new Point(30, 30);
            puntos.Size = new Size(100, 50);
            puntos.changeFont(new System.Drawing.Font("TimesNewRoman", 25, FontStyle.Bold));

            //Reloxxxx
            this.horaInicio = DateTime.Now;
            this.tiempoRestante = new TgcText2d();
            this.tiempoRestante.Text = "65";
            this.tiempoRestante.Color = Color.Green;
            this.tiempoRestante.Align = TgcText2d.TextAlign.RIGHT;
            this.tiempoRestante.Position = new Point(300, 30);
            this.tiempoRestante.Size = new Size(100, 50);
            this.tiempoRestante.changeFont(new System.Drawing.Font("TimesNewRoman", 25, FontStyle.Bold));
            this.comienzoNivel = true;

            //FLECHA NORMAL colision
            collisionNormalArrow = new TgcArrow();
            collisionNormalArrow.BodyColor = Color.Blue;
            collisionNormalArrow.HeadColor = Color.Yellow;
            collisionNormalArrow.Thickness = 1.4f;
            collisionNormalArrow.HeadSize = new Vector2(10, 20);

            //FLECHA debug (la usamos para conocer posiciones donde querramos posicionar meshes)
            debugArrow = new TgcArrow();
            debugArrow.BodyColor = Color.Purple;
            debugArrow.HeadColor = Color.Yellow;
            debugArrow.Thickness = 3f;
            debugArrow.HeadSize = new Vector2(10, 20);
            debugArrow.PStart = new Vector3(0, 400f, 0);
            debugArrow.PEnd = new Vector3(0, 10f, 0);
            debugArrow.updateValues();

            //USER VARS
            GuiController.Instance.UserVars.addVar("DistMinima");
            GuiController.Instance.UserVars.addVar("Velocidad");
            GuiController.Instance.UserVars.addVar("Vida");
            GuiController.Instance.UserVars.addVar("AngCol");
            GuiController.Instance.UserVars.addVar("AngRot");
            GuiController.Instance.UserVars.addVar("NormalObstaculoX");
            GuiController.Instance.UserVars.addVar("NormalObstaculoZ");
        }
        /// <summary>
        /// Crea todos los modulos necesarios de la aplicacion
        /// </summary>
        internal void initGraphics(MainForm mainForm, Control panel3d)
        {
            this.mainForm = mainForm;
            this.panel3d = panel3d;
            this.fullScreenPanel = new FullScreenPanel();
            panel3d.Focus();

            //Iniciar graficos
            this.tgcD3dDevice = new TgcD3dDevice(panel3d);
            this.texturesManager = new TgcTexture.Manager();
            this.tgcD3dDevice.OnResetDevice(tgcD3dDevice.D3dDevice, null);

            //Iniciar otras herramientas
            this.texturesPool = new TgcTexture.Pool();
            this.logger = new Logger(mainForm.LogConsole);
            this.text3d = new TgcDrawText(tgcD3dDevice.D3dDevice);
            this.tgcD3dInput = new TgcD3dInput(mainForm, panel3d);
            this.fpsCamera = new TgcFpsCamera();
            this.rotCamera = new TgcRotationalCamera();
            this.thirdPersonCamera = new TgcThirdPersonCamera();
            this.axisLines = new TgcAxisLines(tgcD3dDevice.D3dDevice);
            this.userVars = new TgcUserVars(mainForm.getDataGridUserVars());
            this.modifiers = new TgcModifiers(mainForm.getModifiersPanel());
            this.elapsedTime = -1;
            this.frustum = new TgcFrustum();
            this.mp3Player = new TgcMp3Player();
            this.directSound = new TgcDirectSound();
            this.fog = new TgcFog();
            this.currentCamera = this.rotCamera;
            this.customRenderEnabled = false;
            this.drawer2D = new TgcDrawer2D();
            this.shaders = new TgcShaders();

            //toogles
            this.rotCamera.Enable = true;
            this.fpsCamera.Enable = false;
            this.thirdPersonCamera.Enable = false;
            this.fpsCounterEnable = true;
            this.axisLines.Enable = true;

            //Cargar algoritmos
            exampleLoader = new ExampleLoader();
            examplesDir = System.Environment.CurrentDirectory + "\\" + ExampleLoader.EXAMPLES_DIR + "\\";
            examplesMediaDir = examplesDir + "Media" + "\\";
            alumnoEjemplosDir = System.Environment.CurrentDirectory + "\\" + "AlumnoEjemplos" + "\\";
            alumnoEjemplosMediaDir = alumnoEjemplosDir + "AlumnoMedia" + "\\";
            exampleLoader.loadExamplesInGui(mainForm.TreeViewExamples, new string[] { examplesDir, alumnoEjemplosDir });

            //Cargar shaders del framework
            this.shaders.loadCommonShaders();

            //Cargar ejemplo default
            TgcExample defaultExample = exampleLoader.getExampleByName(mainForm.Config.defaultExampleName, mainForm.Config.defaultExampleCategory);
            executeExample(defaultExample);
        }
        private void jugar(TgcD3dInput input, float t)
        {
            camaraQ3.LockCam = true;
            camaraQ3.updateCamera();

            // Cargar variables de shader, por ejemplo el tiempo transcurrido.
            effect.SetValue("time", time);

            //El personaje es una caja, uso su bounding box para detectar colisiones
            personaje.Position = camaraQ3.getPosition();
            personaje.move(new Vector3(0f, -30f, 0f));
            //personaje.render();
            //personaje.BoundingBox.render();

            foreach (TgcBoundingBox item in obtenerListaZona(ultimaPosCamara))
            {
                if (TgcCollisionUtils.testAABBAABB(personaje.BoundingBox, item))
                {
                    camaraQ3.setPosition(ultimaPosCamara);
                    //camaraQ3.setCamera(ultimaPosCamara, camaraQ3.getLookAt() + ultimaPosCamara);
                }
            }

            if (GuiController.Instance.D3dInput.keyDown(Microsoft.DirectX.DirectInput.Key.C))
            {
                velocidadEnemigos = velocidadEnemigos + 0.4f;
                if (velocidadEnemigos >= 0f)
                {
                    velocidadEnemigos = 0f;
                }
            }
            if (GuiController.Instance.D3dInput.keyDown(Microsoft.DirectX.DirectInput.Key.V))
            {
                velocidadEnemigos = velocidadEnemigos - 0.4f;
            }

            ajustarZoom();
            ajustarVelocidad();

            renderizarBarriles(t);
            renderizarPiedras();

            //Renderizar suelo y skybox
            piso.render();
            //terreno.render();
            skyBox.render();

            //Emitir un disparo
            if (input.buttonPressed(TgcD3dInput.MouseButtons.BUTTON_LEFT))
            {
                posicionRayBala = camaraQ3.getPosition();
                unaBala.velocidadVectorial = camaraQ3.getLookAt() - camaraQ3.getPosition();
                unaBala.ray = new TgcRay(posicionRayBala, unaBala.velocidadVectorial);
                huboDisparo = true;
                disparo.SoundBuffer.SetCurrentPosition(0);
                disparo.play(false);
            }
            //Reviso si colisiono contra un barril si hubo disparo
            if (huboDisparo)
            {
                foreach (Barril b in barriles)
                {
                    if (!b.fueDisparado && TgcCollisionUtils.intersectRayAABB(unaBala.ray, b.mesh.BoundingBox, out col))
                    {

                        boundingBarril = new TgcBoundingSphere(b.mesh.BoundingBox.calculateBoxCenter(), 400f);
                        disparoBarril = true;
                        barrilDisparado = b;
                        b.fueDisparado = true;
                        if (barriles.TrueForAll(fueDisparado))
                        {
                            reproducirSorpresa = true;
                        }
                        explosion.SoundBuffer.SetCurrentPosition(0);
                        explosion.play(false);
                        huboDisparo = false;
                        break;
                    }
                }
                if (barrilDisparado!=null)
                {
                    //barriles.Remove(barrilDisparado);
                    barrilDisparado = null;
                }
            }

            //Se dibuja siempre al principio, habria que hacer instancias y dibujarlas cada vez que se disparo a un barril en esa posicion

            //Renderizar original e instancias (no dibujo original, solo instancias)
            foreach (Enemigo enemigo in instanciasEnemigos)
            {
                enemigo.meshEnemigo.animateAndRender();
                if (enemigo.estaVivo)
                {
                    rotarMesh(enemigo.meshEnemigo);
                    enemigo.meshEnemigo.moveOrientedY(velocidadEnemigos);
                    enemigo.ultimaPosicion = enemigo.meshEnemigo.Position;
                    foreach (Barril item in barriles)
                    {
                        if (TgcCollisionUtils.testAABBAABB(enemigo.meshEnemigo.BoundingBox, item.mesh.BoundingBox))
                        {
                            enemigo.meshEnemigo.rotateY(FastMath.PI_HALF);
                            enemigo.meshEnemigo.moveOrientedY(velocidadEnemigos);
                        }
                    }
                    foreach (TgcBoundingBox bb in obtenerListaZona(enemigo.meshEnemigo.Position))
                    {
                        if (TgcCollisionUtils.testAABBAABB(enemigo.meshEnemigo.BoundingBox, bb))
                        {
                            enemigo.meshEnemigo.rotateY(FastMath.PI_HALF);
                            enemigo.meshEnemigo.moveOrientedY(velocidadEnemigos);
                        }
                    }

                    //enemigo colisiona contra personaje
                    if(TgcCollisionUtils.classifyBoxBox(enemigo.meshEnemigo.BoundingBox,personaje.BoundingBox) != TgcCollisionUtils.BoxBoxResult.Afuera)
                    {
                        //golpe.SoundBuffer.SetCurrentPosition(0);
                        golpe.play(false);
                        enemigo.meshEnemigo.moveOrientedY(-velocidadEnemigos*5);
                        camaraQ3.setPosition(ultimaPosCamara);
                        numVida -= 20f * t;
                        barraVida.Scaling = new Vector2(0.3f*0.01f * numVida, 0.3f);
                        //Muerte del personaje
                        if (numVida<=0)
                        {
                            camaraQ3.LockCam = false;
                            muerte.SoundBuffer.SetCurrentPosition(0);
                            muerte.play(false);
                            player.stop();
                            //player.closeFile();
                            estadoJuego = estado.muerto;
                        }
                    }

                    if (huboDisparo || disparoBarril)
                    {
                        if (disparoBarril)
                        {
                            if (TgcCollisionUtils.testSphereAABB(boundingBarril,enemigo.meshEnemigo.BoundingBox))
                            {
                                matarEnemigo(enemigo);
                            }
                        }
                        if (TgcCollisionUtils.intersectRayAABB(unaBala.ray, enemigo.meshEnemigo.BoundingBox, out col))
                        {
                            Vector3 p = enemigo.meshEnemigo.BoundingBox.calculateBoxCenter();
                            p.Y = 0f;
                            TgcBoundingBox cuerpoChico = enemigo.meshEnemigo.BoundingBox.clone();
                            cuerpoChico.scaleTranslate(p, new Vector3(1.8f, 3.2f, 1.8f));
                            //se evalua si la bala dio contra el enemigo
                            if (TgcCollisionUtils.intersectRayAABB(unaBala.ray, cuerpoChico, out col))
                            {
                                TgcBoundingBox head = enemigo.meshEnemigo.BoundingBox.clone();
                                head.scaleTranslate(enemigo.meshEnemigo.BoundingBox.calculateBoxCenter() + new Vector3(0.0f, 60f, 5.0f), new Vector3(0.5f, 0.5f, 0.5f));
                                //se evalua si fue un headshot
                                if (TgcCollisionUtils.intersectRayAABB(unaBala.ray, head, out col))
                                {
                                    headshot.SoundBuffer.SetCurrentPosition(0);
                                    headshot.play(false);
                                    puntaje += 20; //el headshot me da 20 puntos mas que un disparo normal
                                }
                                matarEnemigo(enemigo);
                                huboDisparo = false;
                            }
                        }

                    }
                }
                else
                {
                    enemigo.tiempo += t;
                    enemigo.efecto.SetValue("time", enemigo.tiempo);
                }

            }
            huboDisparo = false;
            disparoBarril = false;

            if (instanciasEnemigos.TrueForAll(estaMuerto))
            {
                if (puntaje > Int32.Parse(System.IO.File.ReadAllText(alumnoMediaFolder + "\\record.txt")))
                {
                    textoPuntajeFinal.Text = "Nuevo Record! Tu puntaje fue: " + puntaje.ToString();
                    System.IO.File.WriteAllText(alumnoMediaFolder + "\\record.txt", puntaje.ToString());
                    //textoPuntajeRecord.Text = "Tu puntaje record es: " + puntaje.ToString();
                }
                else
                {
                    textoPuntajeFinal.Text = "Tu puntaje fue: " + puntaje.ToString();
                }
                player.stop();
                camaraQ3.LockCam = false;
                ganador.SoundBuffer.SetCurrentPosition(0);
                ganador.play(false);
                player.stop();
                estadoJuego = estado.ganador;

            }

            //enemigoEffect.SetValue("time", time);

            //Renderizar instancias
            //renderizarTodosLosArboles();
            //renderizarPasto();
            qt.render(GuiController.Instance.Frustum, false);
            ultimaPosCamara = camaraQ3.getPosition();

            //DIBUJOS 2D
            renderSprites(input);
        }
        private void cartelMuerte(TgcD3dInput input)
        {
            GuiController.Instance.Drawer2D.beginDrawSprite();
            fondoMenu.render();

            if ( GuiController.Instance.D3dInput.keyDown(Microsoft.DirectX.DirectInput.Key.M))
            {
                estadoJuego = estado.menu;
            }
            GuiController.Instance.Drawer2D.endDrawSprite();
            textoPerdiste.render();
            player.stop();
        }
        private void cartelGanador(TgcD3dInput input)
        {
            GuiController.Instance.Drawer2D.beginDrawSprite();
            fondoMenu.render();

            if ( GuiController.Instance.D3dInput.keyDown(Microsoft.DirectX.DirectInput.Key.M))
            {
                puntajeRecord = Int32.Parse(System.IO.File.ReadAllText(alumnoMediaFolder + "\\record.txt"));
                textoPuntajeRecord.Text = "Tu puntaje record es: " + puntajeRecord.ToString();
                estadoJuego = estado.menu;
            }
            GuiController.Instance.Drawer2D.endDrawSprite();
            textoPuntajeFinal.render();
            textoGanaste.render();
            player.stop();
        }
        private void renderSprites(TgcD3dInput input)
        {
            //Iniciar dibujado de todos los Sprites de la escena
            GuiController.Instance.Drawer2D.beginDrawSprite();

            //Dibujar sprite (si hubiese mas, deberian ir todos aquí)
            barraVida.render();
            vida.Text = FastMath.Ceiling(numVida).ToString();
            vida.render();

            if (miraActivada)
            {
                mira_zoom.render();
            }
            else
            {
                mira.render();
                arma.render();
            }
            //DISPARO
            if (input.buttonPressed(TgcD3dInput.MouseButtons.BUTTON_LEFT) && !miraActivada)
            {
                arma.Position = posicionArmaDisparo;
                arma.render();
                arma.Position = posicionArmaOriginal;
                cantF = 16;
            }

            if (cantF > 0)
            {
                fuegoArma.updateAndRender();
                cantF--;
            }

            textoPuntaje.Text = "Puntos: " + puntaje;
            textoPuntaje.render();

            //Finalizar el dibujado de Sprites
            GuiController.Instance.Drawer2D.endDrawSprite();
        }
        private void menu(TgcD3dInput input)
        {
            camaraQ3.LockCam = true;
            GuiController.Instance.Drawer2D.beginDrawSprite();

            //Dibujo menu
            fondoMenu.render();
            titulo.render();
            botonJugar.render();
            botonInstrucciones.render();
            botonCreditos.render();

            //Hago click para empezar a jugar
            if (GuiController.Instance.D3dInput.keyDown(Microsoft.DirectX.DirectInput.Key.J))
            {
                if (!primeraVez)
                {
                    barraVida.Scaling = new Vector2(0.3f, 0.3f);
                    velocidadEnemigos = -5f;
                    instanciasEnemigos.Clear();
                    instanciasEnemigos = new List<Enemigo>();
                    barriles.Clear();
                    //loader.loadAnimationFromFile(originalEnemigo, mediaPath + "\\Animations\\Walk-TgcSkeletalAnim.xml");
                    inicializarEnemigos(4, 4, instanciasEnemigos, 3.4f, 200.0f);
                    inicializarBarriles();
                }
                primeraVez = false;
                player.closeFile();
                player.play(true);
                puntaje = 0;
                numVida = 100;
                estadoJuego = estado.jugar;
            }
            if (GuiController.Instance.D3dInput.keyDown(Microsoft.DirectX.DirectInput.Key.I))
            {
                estadoJuego = estado.instrucciones;
            }
            if (GuiController.Instance.D3dInput.keyDown(Microsoft.DirectX.DirectInput.Key.C))
            {
                estadoJuego = estado.creditos;
            }
            GuiController.Instance.Drawer2D.endDrawSprite();
            textoPuntajeRecord.render();
        }