Exemple #1
0
        private void disparoEnemigo()
        {
            //Generar aleatorio para disparo
            Random      random         = new Random();
            int         numeroGenerado = 0;
            NaveEnemiga naveEnemiga    = new NaveEnemiga();

            //Conseguir la posicion de la nave que va a disparar
            do
            {
                numeroGenerado = random.Next(0, 59);
            } while (listaEnemigos.ElementAt(numeroGenerado).puedeDisparar == false);

            naveEnemiga = listaEnemigos.ElementAt(numeroGenerado);

            Disparo disparo      = new Disparo(naveEnemiga.posY + 37, naveEnemiga.posX + 19, 5, 10, new Uri("ms-appx:///Assets/Images/MisilEnemigoPro.png"));
            Image   playerBullet = new Image();

            playerBullet.Source = new BitmapImage(disparo.imagen);
            playerBullet.Height = 20;
            playerBullet.Width  = 10;
            Canvas.SetTop(playerBullet, disparo.dirY);
            Canvas.SetLeft(playerBullet, disparo.dirX);
            this.canvas.Children.Add(playerBullet);
            moveBulletEnemigo(disparo.velocidad, playerBullet);
        }
Exemple #2
0
        public void move()
        {
            Image       imagenNave  = new Image();
            NaveEnemiga naveEnemiga = new NaveEnemiga();
            //var childs = this.canvas.Children;
            int moveX     = 5;
            int direccion = 0;//1 derecha, 2 Izquierda

            for (int i = 0; i < listaImagenesNavesEnemigas.Count; i++)
            {
                //Todas las naves no llegan hasta el final

                //Comprobar posX para ir a la izq o dcha
                naveEnemiga = listaEnemigos.ElementAt(i);
                imagenNave  = listaImagenesNavesEnemigas.ElementAt(i);

                if ((naveEnemiga.posX + (37 + moveX)) >= 1350)//Borde derecho
                {
                    naveEnemiga.dirX = 2;
                    aumentaPosY(i, imagenNave, naveEnemiga);
                    //Canvas.SetTop(imagenNave, naveEnemiga.posY);
                }
                else if ((naveEnemiga.posX - moveX) <= 0)//Borde izquierdo
                {
                    naveEnemiga.dirX = 1;
                    aumentaPosY(i, imagenNave, naveEnemiga);
                    //Canvas.SetTop(imagenNave, naveEnemiga.posY);
                }

                imagenNave = listaImagenesNavesEnemigas.ElementAt(i);
                if (naveEnemiga.dirX == 1)//Borde derecho
                {
                    //moveX = 2;
                    naveEnemiga.posX = naveEnemiga.posX + moveX;
                    Canvas.SetLeft(imagenNave, naveEnemiga.posX);
                }
                else if (naveEnemiga.dirX == 2)//Borde izquierdo
                {
                    naveEnemiga.posX = naveEnemiga.posX - moveX;
                    Canvas.SetLeft(imagenNave, naveEnemiga.posX);
                }
                listaEnemigos.ElementAt(i).dirX = naveEnemiga.dirX;
                listaEnemigos.ElementAt(i).posX = naveEnemiga.posX;
            }
        }
Exemple #3
0
 public void aumentaPosY(int posicionNave, Image imagenNave, NaveEnemiga naveEnemiga)
 {
     listaEnemigos.ElementAt(posicionNave).posY = listaEnemigos.ElementAt(posicionNave).posY + 10;
     Canvas.SetTop(imagenNave, naveEnemiga.posY);
 }
Exemple #4
0
        private void cargaNaves()
        {
            NaveEnemiga nave       = null;
            Image       imagenNave = null;
            int         posX       = 20;
            int         posY       = 50;

            for (int i = 0; i < 60; i++)
            {
                nave = new NaveEnemiga();
                nave.puedeSerGolpeado = true;
                imagenNave            = new Image();
                if (i == 0 || i == 12 || i == 24 || i == 36 || i == 48)
                {
                    nave.posX = 20;
                }
                else
                {
                    nave.posX = posX + 70;
                }

                //Fila 1
                if (i >= 0 && i <= 11)
                {
                    nave.posY   = posY - 30;
                    nave.imagen = new Uri("ms-appx:///Assets/Images/Alien2.gif");
                    nave.valor  = 40 * dificultad;
                }//Fila 2
                else if (i >= 12 && i <= 23)
                {
                    nave.posY   = posY * 2 - 10;
                    nave.imagen = new Uri("ms-appx:///Assets/Images/Alien1.gif");
                    nave.valor  = 30 * dificultad;
                }//Fila 3
                else if (i >= 24 && i <= 35)
                {
                    nave.posY   = posY * 3 - 10;
                    nave.imagen = new Uri("ms-appx:///Assets/Images/Alien1.gif");
                    nave.valor  = 30 * dificultad;
                }//Fila 4
                else if (i >= 36 && i <= 47)
                {
                    nave.posY   = posY * 4 + 10;
                    nave.imagen = new Uri("ms-appx:///Assets/Images/Alien3.gif");
                    nave.valor  = 20 * dificultad;
                }
                else //Fila 5
                {
                    nave.posY          = posY * 5 + 30;
                    nave.imagen        = new Uri("ms-appx:///Assets/Images/Alien3.gif");
                    nave.valor         = 20 * dificultad;
                    nave.puedeDisparar = true;
                }

                nave.estado = true;

                //Actualizamos valor de posX
                posX = nave.posX;

                imagenNave.Source = new BitmapImage(nave.imagen);
                imagenNave.Height = 37;
                imagenNave.Width  = 37;
                this.canvas.Children.Add(imagenNave);
                Canvas.SetTop(imagenNave, nave.posY);
                Canvas.SetLeft(imagenNave, nave.posX);

                nave.dirX = 1;
                listaEnemigos.Add(nave);
                listaImagenesNavesEnemigas.Add(imagenNave);
            }
        }
Exemple #5
0
        /// <summary>
        ///     Se llama en cada frame.
        ///     Se debe escribir toda la lógica de computo del modelo, así como también verificar entradas del usuario y reacciones
        ///     ante ellas.
        /// </summary>
        public override void Update()
        {
            PreUpdate();

            //Coidigo Ejemplo de como capturar teclas

            /*//Capturar Input teclado
             * if (base.Input.keyPressed(Key.F))
             * {
             *  BoundingBox = !BoundingBox;
             * }*/
            if (Input.keyPressed(Key.C))
            {
                desfase.X -= 5;
            }
            if (Input.keyPressed(Key.V))
            {
                desfase.X += 5;
            }
            if (Input.keyPressed(Key.B))
            {
                desfase.Y -= 5;
            }
            if (Input.keyPressed(Key.N))
            {
                desfase.Y += 5;
            }
            if (Input.keyPressed(Key.H))
            {
                desfase.Z -= 5;
            }
            if (Input.keyPressed(Key.J))
            {
                desfase.Z += 5;
            }
            if (Input.keyPressed(Key.G))
            {
                if (dibujarGlow)
                {
                    dibujarGlow = false;
                }
                else
                {
                    dibujarGlow = true;
                }
            }

            if (Input.keyPressed(Key.M))
            {
                if (dibujarShadowMap)
                {
                    dibujarShadowMap = false;
                }
                else
                {
                    dibujarShadowMap = true;
                }
            }

            if (Input.keyPressed(Key.L))
            {
                if (dibujarLuces)
                {
                    dibujarLuces = false;
                }
                else
                {
                    dibujarLuces = true;
                }
            }


            if (Input.keyPressed(Key.E))
            {
                if (spawnaearEnemigos)
                {
                    spawnaearEnemigos = false;
                }
                else
                {
                    spawnaearEnemigos = true;
                }
            }

            if (Input.keyPressed(Key.T))
            {
                if (habilitarDisparosTorres)
                {
                    habilitarDisparosTorres = false;
                }
                else
                {
                    habilitarDisparosTorres = true;
                }
            }



            if (menu.estaEnMenu)
            {
                menu.Update(ElapsedTime);
                if (playerAmbiente.FileName != pathSonidoMenu)
                {
                    playerAmbiente.closeFile();
                    playerAmbiente.FileName = pathSonidoMenu;
                    playerAmbiente.play(true);
                }
                PostUpdate();
                return;
            }
            else
            {
                hud.Update(navePrincipal);
            }

            var movimientoNave = TGCVector3.Empty;

            if (!menu.estaEnMenu)
            {
                if (playerAmbiente.FileName != pathSonidoAmbiente)
                {
                    playerAmbiente.closeFile();
                    playerAmbiente.FileName = pathSonidoAmbiente;
                    playerAmbiente.play(true);
                }
                //Movernos de izquierda a derecha, sobre el eje X.
                if (Input.keyDown(Key.Left) || Input.keyDown(Key.A))
                {
                    movimientoNave.X = 1;
                }
                else if (Input.keyDown(Key.Right) || Input.keyDown(Key.D))
                {
                    movimientoNave.X = -1;
                }

                //Movimiento para elevarse con E y Control para bajar , todo sobre el eje Y.
                if (Input.keyDown(Key.W) || Input.keyDown(Key.UpArrow))
                {
                    movimientoNave.Y = 1;
                }
                else if (Input.keyDown(Key.S) || Input.keyDown(Key.DownArrow))
                {
                    movimientoNave.Y = -1;
                }

                //boost de velocidad con shift
                if (Input.keyDown(Key.LeftShift))
                {
                    navePrincipal.DoSpeedBoost();
                    if (navePrincipal.shouldSpeedBoost)
                    {
                        navePrincipal.GastarFuel(1.5f, hud);
                        if (movimientoZ > movimientoMaximoZ)
                        {
                            movimientoZ -= factorMovimientoZ * 3;
                        }
                        movimientoNave.Z = movimientoZ;
                        cant_pasadas     = 3;
                    }
                    else
                    {
                        movimientoNave.Z = movimientoBaseZ;
                    }
                }
                else
                {
                    cant_pasadas = 2;
                }



                if (movimientoZ < movimientoBaseZ)
                {
                    movimientoZ += factorMovimientoZ;
                }
                movimientoNave.Z = movimientoZ;

                //Activar rotaciones especiales
                if (Input.keyDown(Key.Space))
                {
                    this.navePrincipal.DoBarrelRoll();
                }

                if (Input.keyDown(Key.Z))
                {
                    this.navePrincipal.DoLeft90Spin();
                }

                if (Input.keyDown(Key.X))
                {
                    this.navePrincipal.DoRight90Spin();
                }

                //Disparar
                if (Input.buttonPressed(TgcD3dInput.MouseButtons.BUTTON_LEFT))
                {
                    if (navePrincipal.Disparar(new TGCVector3((((D3DDevice.Instance.Width / 2) - Input.Xpos) * 10) + navePrincipal.MovementVector.X, navePrincipal.MovementVector.Y, navePrincipal.MovementVector.Z - 5000), pathSonidoDisparo, DirectSound.DsDevice))
                    {
                        //Aca va la posicion del disparo creo
                    }
                }
                if (Input.keyDown(Key.F))
                {
                    if (navePrincipal.Disparar(pathSonidoDisparo, DirectSound.DsDevice))
                    {
                    }
                }
                if (habilitarDisparosTorres)
                {
                    var torretasEnRango = currentScene.TorresEnRango(navePrincipal.GetPosition());
                    torretasEnRango.ForEach(torre => { torre.Disparar(navePrincipal.GetPosition(), pathSonidoDisparo, DirectSound.DsDevice); torre.Update(ElapsedTime); });
                }
            }
            NaveEnemiga.resetearPosiciones();

            if (!TgcCollisionUtils.testObbAABB(this.navePrincipal.OOB, currentScene.Scene.BoundingBox))
            {
                int nextSceneIndex = escenarios.FindIndex(es => es.Equals(currentScene)) + 1;

                if (nextSceneIndex == escenarios.Count)
                {
                    nextSceneIndex = 0;
                }

                currentScene.MoveScene(escenarios.Count);
                currentScene.MovementVector = currentScene.GetOffsetVectorMoved();
                currentScene.UpdateBoundingBox();
                currentScene = escenarios[nextSceneIndex];

                NaveEnemiga.resetearPosiciones();

                // enemigosAlMismoTiempo pueden modificarse para aumentar o disminuir la dificultad, tambien para el modo god
                if (spawnaearEnemigos)
                {
                    if (enemigos.FindAll(enemigo => enemigo.EstaViva() && enemigo.EnemigoEstaAdelante()).Count == 0)
                    {
                        enemigos.FindAll(enemigo => !enemigo.EstaViva() || !enemigo.EnemigoEstaAdelante()).ForEach(nave => nave.Relocate());
                    }
                }
            }

            // No permitir que se salga de los limites, el salto que hace para volver es medio brusco, se podria atenuar.
            movimientoNave -= TGCVector3.Multiply(currentScene.CheckLimits(navePrincipal, movimientoNave), 10);

            //Actualiza la matrix de movimiento de la nave.

            this.navePrincipal.Move(movimientoNave * ElapsedTime);
            this.navePrincipal.Update(ElapsedTime);
            if (spawnaearEnemigos)
            {
                enemigos.FindAll(enemigo => enemigo.EstaViva() && enemigo.EnemigoEstaAdelante()).ForEach(enemigo =>
                {
                    enemigo.Perseguir(ElapsedTime, pathSonidoDisparo, DirectSound.DsDevice);
                    enemigo.Update(ElapsedTime);
                }

                                                                                                         );
            }
            var naves = enemigos.FindAll(enemigo => enemigo.EstaViva() && enemigo.EnemigoEstaAdelante() && spawnaearEnemigos).Select(e => (NaveEspacial)e).ToList();

            naves.Add(navePrincipal);
            naves.ForEach(naveActual =>
            {
                //Colision de todas las naves contra el escenario.
                if (currentScene.CheckCollision(naveActual))
                {
                    naveActual.Morir();
                }

                naves.FindAll(n => n != naveActual).ForEach(otraNave =>
                {
                    //Colision fisica entre naves.
                    if (TgcCollisionUtils.testObbObb(naveActual.OOB, otraNave.OOB))
                    {
                        naveActual.Morir();
                        otraNave.Morir();
                    }

                    //Colision de disparos
                    if (naveActual.CheckIfMyShotsCollided(otraNave))
                    {
                        otraNave.Daniar(naveActual.ArmaPrincipal.Danio);
                    }
                });
                currentScene.TorresEnRango(navePrincipal.GetPosition()).ForEach(torre =>
                {
                    if (torre.CheckIfMyShotsCollided(naveActual))
                    {
                        naveActual.Daniar(torre.arma.Danio);
                    }
                });
            });

            if (!navePrincipal.EstaViva())
            {
                this.navePrincipal.MoveTo(new TGCVector3(1200f, -1100f, 4000f) + currentScene.GetOffsetVectorMoved());
                this.skyBox.Center = new TGCVector3(0, 0, -2300f) + currentScene.GetOffsetVectorMoved();
                this.navePrincipal.Revivir();
                this.sol.Position    = new TGCVector3(0, 5000f, 4000f) + currentScene.GetOffsetVectorMoved();
                this.menu.estaEnMenu = true;
            }


            this.skyBox.Center += movimientoNave * ElapsedTime * 1000;
            this.sol.Move(new TGCVector3(0, 0, movimientoNave.Z) * ElapsedTime * 1000);
            estrellasS.ForEach(e =>
            {
                e.Position += new TGCVector3(0, 0, movimientoNave.Z) * ElapsedTime * 1000;
            });

            (this.Camara as CamaraStarWars).Target = this.navePrincipal.GetPosition();

            PostUpdate();
        }