Example #1
0
    public override void Interactuar(Vector2 posicionPersonaje)
    {
        Vector2 direccionPersonaje = Herramientas.ObtenerDireccion(transform.position, posicionPersonaje);

        MirarPersonaje(direccionPersonaje);
        MostrarDialogo();
    }
Example #2
0
    private void NPCDetectaJugador(EventoBase mensaje)
    {
        EventoPersonajeMirarDireccion e = (EventoPersonajeMirarDireccion)mensaje;

        siguienteDireccion = Herramientas.ObtenerDireccion(contenedorTransform.position, e.PosicionObjetivo);
        AsignarAnimacion();
        DetenerAnimacion();
    }
    private IEnumerator MostrarPantallaDeCarga(EventoTeletransportarse e)
    {
        estaTeletransportandose = true;
        yield return(StartCoroutine(CorrutinasComunes.AlfaDeCeroAUno(UIControlador.Instancia.Teletransportador.pantallaDeCarga)));

        Personaje.TeletransportarPersonaje.CambiarPosicion(e.Destino, Herramientas.ObtenerDireccion(e.DireccionMirar));
        yield return(new WaitForSeconds(0.3f));

        yield return(StartCoroutine(CorrutinasComunes.AlfaDeUnoACero(UIControlador.Instancia.Teletransportador.pantallaDeCarga)));

        estaTeletransportandose = false;
    }
Example #4
0
    private void TeletranportarCentroPokemon(EventoBase mensaje)
    {
        if (ultimaZonaVisitada == 0)
        {
            ultimaZonaVisitada = gameObject.GetInstanceID();
        }

        if (ultimaZonaVisitada == gameObject.GetInstanceID())
        {
            Vector2 direccion = Herramientas.ObtenerDireccion(centroPokemon.transform.position, centroPokemon.npc.transform.position);
            Personaje.TeletransportarPersonaje.CambiarPosicion(centroPokemon.transform.position, direccion);
            centroPokemon.npc.MostrarDialogo();
            ControladorDatos.Instancia.Datos.CentroPokemon();
        }
    }
 private void OnDrawGizmos()
 {
     if (destino != null && destino.destino != null)
     {
         Gizmos.DrawWireCube(transform.position, new Vector3(0.16f, 0.16f, 0));
         Gizmos.DrawLine(transform.position, destino.transform.position);
         if (direccionMirar != Direccion.PorDefecto)
         {
             direccionRayo = (Vector2)transform.position + (Ajustes.Instancia.tamanioCasilla * Herramientas.ObtenerDireccion(direccionMirar));
             Gizmos.DrawWireSphere(direccionRayo, 0.04f);
         }
     }
 }
Example #6
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();
        }
    }