Ejemplo n.º 1
0
    public static IEnumerator SeguirObjeto(IMovible perseguidor, IMovible objetivo)
    {
        Vector2 siguienteDireccion         = objetivo.SiguienteDireccion();
        Vector2 siguientePosicion          = perseguidor.Transform().position;
        bool    posicionObjetivoRecuperada = false;

        perseguidor.Transform().gameObject.GetComponent <Collider2D>().enabled = false;

        while (perseguidor.Transform().gameObject.activeSelf&& objetivo.Transform().gameObject.activeSelf)
        {
            if (!objetivo.EstaCercaDeLaSiguienteCasilla())
            {
                if (!posicionObjetivoRecuperada)
                {
                    posicionObjetivoRecuperada = true;
                    //... Invertimos la dirección para calcular la casilla que hay detrás del objetivo
                    siguienteDireccion = objetivo.SiguienteDireccion() * -1;
                    siguientePosicion  = objetivo.SiguientePosicion() + (Ajustes.Instancia.tamanioCasilla * siguienteDireccion);

                    if (Vector2.Distance(siguientePosicion, perseguidor.Transform().position) > Ajustes.Instancia.tamanioCasilla * 3)
                    {
                        perseguidor.Transform().position = siguientePosicion;
                    }
                }
            }
            else
            {
                posicionObjetivoRecuperada = false;
            }

            //... Como invertimos la dirección para calcular la casilla detrás del objetivo, la volvemos a invertir para asignar la dirección en la que el perseguidor tendrá que mirar
            perseguidor.MoverExternamente(siguientePosicion, siguienteDireccion * -1, true);
            yield return(null);
        }
    }
Ejemplo n.º 2
0
    private void OnEnable()
    {
        PosicionInicial = transform.position;
        if (npc == null)
        {
            npc = GetComponent <NPC>();
        }
        if (spriteRenderer == null)
        {
            spriteRenderer = GetComponent <SpriteRenderer>();
        }

        ComprobarDireccionInicial();
        ComprobarTipoMovimientoActual();

        if (tipoMovimientoActual == TipoMovimientoNPC.NINGUNO || !npc.TieneDialogoPendiente())
        {
            enabled = false;
        }

        else if (tipoMovimientoActual != TipoMovimientoNPC.QuietoObservandoAreaDeDeteccion)
        {
            ControladorEventos.Instancia.LanzarEvento(new EventoAniadirNPCAlControlador(this));
        }

        siguientePosicion = transform.position;
        MoverNPC          = this;
    }
Ejemplo n.º 3
0
 public override void Cargar(IMovible movil)
 {
     base.Cargar(movil);
     Proyectil unProyectil = new Proyectil(this.PosicionDeTiro.Clonar());
     unProyectil.Movimiento.Direccion = movil.Movimiento.Direccion;
     unProyectil.Alcance = ALCANCELANZAMIENTO;
     this.carga = unProyectil;
 }
Ejemplo n.º 4
0
 public void BombitaConVelocidadNormalCambiaDePosicionEnUnaUnidadDentroDelMapaAlMoversePorPasillo()
 {
     this.movil = new Bombita(new Punto(0, 0));
     Punto posOriginal = this.movil.Posicion.Clonar();
     this.unMapa.AgregarPersonaje(this.movil);
     this.movil.Movimiento.CambiarADerecha();
     this.movil.Mover();
     Punto pos = new Punto(1, 0);
     Assert.IsTrue(pos.Equals(this.movil.Posicion));
 }
Ejemplo n.º 5
0
 public virtual void Cargar(IMovible movil)
 {
     this.PosicionDeTiro = movil.Posicion.Clonar();
 }
Ejemplo n.º 6
0
 public virtual bool TransitablePor(IMovible movil)
 {
     return movil.AtraviesaObstaculos();
 }
Ejemplo n.º 7
0
 public override bool TransitablePor(IMovible movil)
 {
     return true;
 }
Ejemplo n.º 8
0
    public static IEnumerator MoverHastaPosicion(IMovible objeto, Vector2 destino, Action ejecutarAlFinalizar = null)
    {
        //Esperamos a que el personaje quede quieto para saber su dirección
        while (!Personaje.BloquearMovimiento && !Personaje.PuedeMoverse)
        {
            yield return(null);
        }

        //destino = AjustarPosicionAlTilemap(destino);
        Vector2 direccion        = Herramientas.ObtenerDireccion(objeto.Transform().position, destino);
        bool    destinoAlcanzado = false;
        bool    finTramo         = false;
        Vector2 direccionRayo;
        Vector2 tramoActual;
        Vector2 siguienteCasilla;
        Vector2 distancia;
        int     tramosTotales = 0;


        //Mientras no alcance el destino...
        while (!destinoAlcanzado && tramosTotales < 10)
        {
            tramosTotales++;
            //... Calculamos la distancia entre el destino y la posición actual
            distancia = destino - (Vector2)objeto.Transform().position;
            //... Si la distancia horizontal es mayor que la vertical o hay un obstáculo en vertical, se moverá en horizontal hacia el destino...
            if (Mathf.Abs(distancia.x) > Mathf.Abs(distancia.y) || objeto.DetectarColisionesEnfrente(new Vector2(0, direccion.y)) == TipoColision.ObjetoColision)
            {
                //... La dirección del rayo será horizontal para comprobar colisiones en la dirección que se mueve
                direccionRayo = new Vector2(direccion.x, 0);
                //... El nuevo tramo será la posición horizontal del destino y la posición vertical actual del objeto
                tramoActual = new Vector2(destino.x, objeto.Transform().position.y);
            }
            //... Si la posición vertical es mayor o no hay obstáculos verticales...
            else
            {
                //... La dirección del rayo será vertical para comprobar colisiones en la dirección que se mueve
                direccionRayo = new Vector2(0, direccion.y);
                //... El nuevo tramo será la posición vertical del destino y la posición horizontal actual del objeto
                tramoActual = new Vector2(objeto.Transform().position.x, destino.y);
            }

            //... Si el jugador está justo enfrente del objeto ha llegado a su destino
            if (objeto.DetectarColisionesEnfrente(direccionRayo) == TipoColision.Personaje)
            {
                objeto.MoverExternamente(objeto.Transform().position, direccionRayo);
                finTramo         = true;
                destinoAlcanzado = true;
            }

            //... Mientras no haya chocado con algún obstáculo en el tramo y no haya llegado al final de este...
            while (!finTramo && Vector2.Distance(objeto.Transform().position, tramoActual) > Ajustes.Instancia.QuintaParteTamanioCasilla)
            {
                //... Calculamos la siguiente casilla a la que se tiene que mover en el tilemap
                siguienteCasilla = new Vector2(objeto.Transform().position.x + (direccionRayo.x * Ajustes.Instancia.tamanioCasilla), objeto.Transform().position.y + (direccionRayo.y * Ajustes.Instancia.tamanioCasilla));
                //... Comprobamos si hay algún colisionador antes de moverlo y de qué tipo es
                TipoColision colisionRayo = objeto.DetectarColisionesEnfrente(direccionRayo);
                //... Si delante no hay ningún colisionador...
                if (colisionRayo == TipoColision.NINGUNO)
                {
                    //... Mientras el objeto no haya llegado a la siguiente casilla lo mueve
                    while (!objeto.MoverExternamente(siguienteCasilla, direccionRayo))
                    {
                        yield return(null);
                    }
                }
                //... Si ha colisionado con un objeto normal, finalizamos el tramo
                else if (colisionRayo == TipoColision.ObjetoColision)
                {
                    finTramo = true;
                }
                //... Si ha colisionado con el personaje, ha llegado a su destino antes de tiempo
                else if (colisionRayo == TipoColision.Personaje)
                {
                    finTramo         = true;
                    destinoAlcanzado = true;
                }

                yield return(null);
            }
            finTramo = false;
            yield return(null);
        }

        //Paramos la animación actual
        objeto.DetenerAnimacion();

        if (ejecutarAlFinalizar != null)
        {
            ejecutarAlFinalizar();
        }
    }
Ejemplo n.º 9
0
 public void Transitar(IMovible movil)
 {
     this.transitandoEnCasilla.Add(movil);
     if ((this.ArticuloContenido != null) && (!this.ArticuloContenido.EstaOculto) && (this.ArticuloContenido.EstaActivo))
     {
         movil.ReaccionarConArticulo(this.ArticuloContenido);
     }
 }
Ejemplo n.º 10
0
 public void PosicionDeLaDerechaTienePasilloBombitaPuedeMoverseHaciaLaDerecha()
 {
     //ver mapa en el FixtureSetup
     this.pos = new Punto(0, 0);
     movil = new Bombita(this.pos);
     this.unaCasilla = unMapa.ObtenerCasilla(this.pos);
     this.unaCasilla.Transitar(movil);
     //Assert.IsTrue(unMapa.PermitidoMoverHaciaArribaA(movil)); TODO: eliminar codigo comentado
     movil.Movimiento.Direccion = Tablero.DERECHA;
     Assert.IsTrue(unMapa.PermitidoAvanzar(movil));
 }
Ejemplo n.º 11
0
        public void PosicionDeLaDerechaEsUnObstaculoBombitaNoPuedeMoverseHaciaLaDerecha()
        {
            //ver mapa en el FixtureSetup
            this.pos = new Punto(2, 1);
            movil = new Bombita(this.pos);

            this.unaCasilla = unMapa.ObtenerCasilla(this.pos);
            this.unaCasilla.Transitar(movil);
            movil.Movimiento.Direccion = Tablero.DERECHA;
            Assert.IsFalse(unMapa.PermitidoAvanzar(movil));
            //Assert.IsFalse(unMapa.PermitidoMoverHaciaDerechaA(movil));
        }
Ejemplo n.º 12
0
 public void PosicionDeArribaTienePasilloBombitaPuedeMoverseHaciaArriba()
 {
     //ver mapa en el FixtureSetup
     this.pos = new Punto(0, 0);
     movil = new Bombita(this.pos);
     this.unaCasilla = unMapa.ObtenerCasilla(this.pos);
     this.unaCasilla.Transitar(movil);
     movil.Movimiento.Direccion = Tablero.ARRIBA;
     Assert.IsTrue(unMapa.PermitidoAvanzar(movil));
 }
Ejemplo n.º 13
0
        public void PosicionDeArribaNoExisteBombitaNoPuedeMoverseHaciaArriba()
        {
            this.pos = new Punto(3, 4);
            movil = new Bombita(this.pos);

            this.unaCasilla = unMapa.ObtenerCasilla(this.pos);
            this.unaCasilla.Transitar(movil);
            movil.Movimiento.Direccion = Tablero.ARRIBA;
            Assert.IsFalse(unMapa.PermitidoAvanzar(movil));
            //Assert.IsFalse(unMapa.PermitidoMoverHaciaArribaA(movil));
        }
Ejemplo n.º 14
0
 public void PosicionDeAbajoTienePasilloBombitaPuedeMoverseHaciaAbajo()
 {
     //ver mapa en el FixtureSetup
     this.pos = new Punto(2, 3);
     movil = new Bombita(this.pos);
     this.unaCasilla = unMapa.ObtenerCasilla(this.pos);
     this.unaCasilla.Transitar(movil);
     //Assert.IsTrue(unMapa.PermitidoMoverHaciaAbajoA(movil));
     movil.Movimiento.Direccion = Tablero.ABAJO;
     Assert.IsTrue(unMapa.PermitidoAvanzar(movil));
 }
Ejemplo n.º 15
0
        public void PosicionDeAbajoEsUnObstaculoUnoDeLosLopezReggaeAladoPuedeMoverseHaciaAbajo()
        {
            //ver mapa en el FixtureSetup
            this.pos = new Punto(1, 2);
            movil = new LosLopezReggaeAlado(this.pos);

            this.unaCasilla = unMapa.ObtenerCasilla(this.pos);
            this.unaCasilla.Transitar(movil);
            movil.Movimiento.Direccion = Tablero.ABAJO;
            Assert.IsTrue(unMapa.PermitidoAvanzar(movil));
            //Assert.IsTrue(unMapa.PermitidoMoverHaciaAbajoA(movil));
        }
Ejemplo n.º 16
0
 public bool PermiteTransitarUn(IMovible movil)
 {
     return this.Estado.TransitablePor(movil);
 }
Ejemplo n.º 17
0
 public bool TransitaEnCasillaUn(IMovible movil)
 {
     foreach (IMovible i in transitandoEnCasilla)
     {
         if (i.Nombre == movil.Nombre)
             return true;
     }
     return false;
 }
Ejemplo n.º 18
0
        public void PosicionDeLaIzquierdaEsUnObstaculoUnoDeLosLopezReggaeAladoPuedeMoverseHaciaLaIzquierda()
        {
            //ver mapa en el FixtureSetup
            this.pos = new Punto(2, 3);
            movil = new LosLopezReggaeAlado(this.pos);

            this.unaCasilla = unMapa.ObtenerCasilla(this.pos);
            this.unaCasilla.Transitar(movil);
            movil.Movimiento.Direccion = Tablero.IZQUIERDA;
            Assert.IsTrue(unMapa.PermitidoAvanzar(movil));
            //Assert.IsTrue(unMapa.PermitidoMoverHaciaIzquierdaA(movil));
        }
Ejemplo n.º 19
0
 public void Dejar(IMovible movil)
 {
     this.transitandoEnCasilla.Remove(movil);
 }
Ejemplo n.º 20
0
        public void PosicionDeLaIzquierdaNoExisteBombitaNoPuedeMoverseHaciaLaIzquierda()
        {
            this.pos = new Punto(0, 4);
            movil = new Bombita(this.pos);

            this.unaCasilla = unMapa.ObtenerCasilla(this.pos);
            this.unaCasilla.Transitar(movil);
            movil.Movimiento.Direccion = Tablero.IZQUIERDA;
            Assert.IsFalse(unMapa.PermitidoAvanzar(movil));
            //Assert.IsFalse(unMapa.PermitidoMoverHaciaIzquierdaA(movil));
        }
Ejemplo n.º 21
0
 public void ObjetoContundenteDestruido(IMovible obj)
 {
     this.objetosContundentes.Remove(obj);
 }
Ejemplo n.º 22
0
 public void PosicionDeLaIzquierdaTienePasilloBombitaPuedeMoverseHaciaLaIzquierda()
 {
     //ver mapa en el FixtureSetup
     this.pos = new Punto(3, 0);
     movil = new Bombita(this.pos);
     this.unaCasilla = unMapa.ObtenerCasilla(this.pos);
     this.unaCasilla.Transitar(movil);
        // Assert.IsTrue(unMapa.PermitidoMoverHaciaIzquierdaA(movil));
     movil.Movimiento.Direccion = Tablero.IZQUIERDA;
     Assert.IsTrue(unMapa.PermitidoAvanzar(movil));
 }