예제 #1
0
    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;
    }
예제 #2
0
    private IEnumerator CombateCorrutina(TipoDeCombate tipoCombate)
    {
        ControladorDatos.Instancia.ReproducirMusicaCombate();
        DatosCombate.CombateActivo = true;

        //*********************
        // TEXTO INICIAL DEL ENTRENADOR ANTES DEL COMBATE
        //*********************
        if (tipoCombate == TipoDeCombate.Entrenador)
        {
            yield return(StartCoroutine(UIControlador.Instancia.Dialogo.componentePrincipal.MostrarTextoCorrutina(entrenador.Conversacion.texto, false, false, Ajustes.Instancia.tiempoDeEsperaUltimaVentanaDialogoEnCombateSiNoSeLeeElTeclado)));
        }

        //*********************
        // TRANSICION A OSCURO
        //*********************
        yield return(StartCoroutine(CorrutinasComunes.AlfaDeCeroAUno(pantallaDeCarga)));

        //*********************
        // ESTABLECE VALORES POR DEFECTO
        //*********************
        //Rotamos la cámara para evitar problemas con otros sprites
        Camera.main.transform.rotation = Quaternion.Euler(Camera.main.transform.rotation.eulerAngles.x, Camera.main.transform.rotation.eulerAngles.y + 180, Camera.main.transform.rotation.eulerAngles.z);
        panelBarraSaludPokemonJugador.SetActive(false);
        panelBarraSaludPokemonEnemigo.SetActive(false);
        menuEleccionesCombate.SetActive(false);
        UIControlador.Instancia.Dialogo.ventanaDialogo.SetActive(false);
        UIControlador.Instancia.Dialogo.campoDeTexto.text = string.Empty;
        panelPrincipalUICombate.SetActive(true);

        //*********************
        // PREPARAR EQUIPOS DE POKEMON LUCHADORES
        //*********************
        DatosCombate = new DatosCombate();
        if (tipoCombate == TipoDeCombate.PokemonSalvaje)
        {
            DatosCombate.PrepararCombateContraPokemonSalvaje(pokemonSalvaje);
        }
        else
        {
            DatosCombate.PrepararCombateContraEntrenador(entrenador);
        }


        //*********************
        // ASIGNA LOS SPRITES RENDERER Y RELLENA LAS BARRAS DE VIDA
        //*********************
        spritesCombate.gameObject.SetActive(true);
        yield return(new WaitForSeconds(0.05f));

        RellenarInterfazConDatosDelPokemonActivo(DatosCombate.PokemonJugadorActivo(), barraSaludPokemonJugador, nombreYNivelPokemonJugador, textoSaludPokemonJugador);

        yield return(new WaitForSeconds(0.05f));

        RellenarInterfazConDatosDelPokemonActivo(DatosCombate.PokemonEnemigoActivo(), barraSaludPokemonEnemigo, nombreYNivelPokemonEnemigo, textoSaludPokemonEnemigo, false);


        //*********************
        //  TRANSICION A CLARO
        //*********************
        yield return(StartCoroutine(CorrutinasComunes.AlfaDeUnoACero(pantallaDeCarga)));

        ////*********************
        ////  MUESTRA MENSAJE DE ENTRENADOR O POKÉMON SALVaJE
        ////*********************
        if (tipoCombate == TipoDeCombate.PokemonSalvaje)
        {
            string texto = Ajustes.Instancia.textoPokemonSalvajeAparecio.Replace(Ajustes.Instancia.palabraParaReemplazarEnLosTexto1, DatosCombate.PokemonEnemigoActivo().Pokemon.DatosFijos.nombre);
            yield return(StartCoroutine(UIControlador.Instancia.Dialogo.componentePrincipal.MostrarTextoCorrutina(texto, true, false, Ajustes.Instancia.tiempoDeEsperaUltimaVentanaDialogoEnCombateSiNoSeLeeElTeclado)));

            while (spritesCombate.MostrarAnimacionCombate(AnimacionCombate.PokemonSalvajeAparece))
            {
                yield return(null);
            }
        }
        else
        {
            string texto = Ajustes.Instancia.textoEntrenadorTeDesafia.Replace(Ajustes.Instancia.palabraParaReemplazarEnLosTexto1, entrenador.NombreNPC);
            yield return(StartCoroutine(UIControlador.Instancia.Dialogo.componentePrincipal.MostrarTextoCorrutina(texto, false, false, Ajustes.Instancia.tiempoDeEsperaUltimaVentanaDialogoEnCombateSiNoSeLeeElTeclado)));

            texto = Ajustes.Instancia.textoEntrenadorEnviaPokemon
                    .Replace(Ajustes.Instancia.palabraParaReemplazarEnLosTexto1, entrenador.NombreNPC)
                    .Replace(Ajustes.Instancia.palabraParaReemplazarEnLosTexto2, DatosCombate.PokemonEnemigoActivo().Pokemon.DatosFijos.nombre);
            yield return(StartCoroutine(UIControlador.Instancia.Dialogo.componentePrincipal.MostrarTextoCorrutina(texto, false, false, Ajustes.Instancia.tiempoDeEsperaUltimaVentanaDialogoEnCombateSiNoSeLeeElTeclado)));

            while (spritesCombate.MostrarAnimacionCombate(AnimacionCombate.EntrenadorEnviaPokemon))
            {
                yield return(null);
            }
        }

        panelBarraSaludPokemonEnemigo.SetActive(true);
        yield return(new WaitForSeconds(1.5f));

        string texto2 = Ajustes.Instancia.textoJugadorEnviaPokemon.Replace(Ajustes.Instancia.palabraParaReemplazarEnLosTexto1, DatosCombate.PokemonJugadorActivo().Pokemon.DatosFijos.nombre);

        yield return(StartCoroutine(UIControlador.Instancia.Dialogo.componentePrincipal.MostrarTextoCorrutina(texto2, true, false, Ajustes.Instancia.tiempoDeEsperaUltimaVentanaDialogoEnCombateSiNoSeLeeElTeclado)));

        while (spritesCombate.MostrarAnimacionCombate(AnimacionCombate.JugadorEnviaPokemon))
        {
            yield return(null);
        }
        panelBarraSaludPokemonJugador.SetActive(true);
        yield return(new WaitForSeconds(1f));

        menuEleccionesCombate.SetActive(true);

        //*********************
        //  BUCLE HASTA FINAL DE COMBATE (ENEMIGOS DERROTADOS, JUGADOR DERROTADO O ESCAPE)
        //*********************
        IEnumerator turno1 = TurnoJugadorCorrutina();
        IEnumerator turno2 = TurnoOponenteCorrutina();

        while (DatosCombate.CombateActivo)
        {
            //*********************
            //  ESPERA ACCIÓN DEL JUGADOR
            //*********************
            UIControlador.Instancia.Dialogo.campoDeTexto.text = string.Empty;
            UIControlador.Instancia.Dialogo.ventanaDialogo.SetActive(false);
            menuEleccionesCombate.SetActive(true);
            while (proximaAccion == null)
            {
                yield return(null);
            }
            menuEleccionesCombate.SetActive(false);

            //*********************
            //  COMPROBAR EL TIPO DE ACCIÓN
            //*********************
            switch (proximaAccion.TipoAccion)
            {
            case TipoAccion.Atacar:
                if (DatosCombate.PokemonJugadorActivo().Pokemon.EstadisticaVelocidadCombate() >= DatosCombate.PokemonEnemigoActivo().Pokemon.EstadisticaVelocidadCombate())
                {
                    Debug.Log("Combate: el jugador ataca primero");
                    turno1 = TurnoJugadorCorrutina();
                    turno2 = TurnoOponenteCorrutina();
                }
                else
                {
                    Debug.Log("Combate: el enemigo ataca primero");
                    turno1 = TurnoOponenteCorrutina();
                    turno2 = TurnoJugadorCorrutina();
                }
                break;

            case TipoAccion.UsarItem:
            case TipoAccion.Escapar:
            case TipoAccion.CambiarPokemon:
                turno1 = TurnoJugadorCorrutina();
                turno2 = TurnoOponenteCorrutina();
                break;
            }
            yield return(StartCoroutine(turno1));

            yield return(StartCoroutine(turno2));

            yield return(StartCoroutine(ComprobarPokemonVivos()));

            proximaAccion = null;
        }

        //*********************
        //  FIN DEL COMBATE, COMPROBAR SI HA GANADO
        //*********************
        if (DatosCombate.CombateGanado)
        {
            if (tipoCombate == TipoDeCombate.Entrenador)
            {
                string texto = Ajustes.Instancia.textoEntrenadorVencido
                               .Replace(Ajustes.Instancia.palabraParaReemplazarEnLosTexto1, entrenador.NombreNPC)
                               .Replace(Ajustes.Instancia.palabraParaReemplazarEnLosTexto2, entrenador.Conversacion.monedasRecompensa.ToString());
                yield return(StartCoroutine(UIControlador.Instancia.Dialogo.componentePrincipal.MostrarTextoCorrutina(texto, false, false, Ajustes.Instancia.tiempoDeEsperaUltimaVentanaDialogoEnCombateSiNoSeLeeElTeclado)));
            }
        }
        else
        {
            ControladorDatos.Instancia.Datos.CombatePerdidoQuitarMitadMonedas();
            string texto = Ajustes.Instancia.textoCombatePerdido
                           .Replace(Ajustes.Instancia.palabraParaReemplazarEnLosTexto1, ControladorDatos.Instancia.Datos.Monedas.ToString());
            yield return(StartCoroutine(UIControlador.Instancia.Dialogo.componentePrincipal.MostrarTextoCorrutina(texto, false, false, Ajustes.Instancia.tiempoDeEsperaUltimaVentanaDialogoEnCombateSiNoSeLeeElTeclado)));
        }

        //*********************
        // TRANSICION A OSCURO
        //*********************
        yield return(StartCoroutine(CorrutinasComunes.AlfaDeCeroAUno(pantallaDeCarga)));

        //*********************
        // VALORES POR DEFECTO
        //*********************
        Camera.main.transform.rotation = Quaternion.Euler(Camera.main.transform.rotation.eulerAngles.x, Camera.main.transform.rotation.eulerAngles.y - 180, Camera.main.transform.rotation.eulerAngles.z);
        UIControlador.Instancia.Dialogo.ventanaDialogo.SetActive(false);
        UIControlador.Instancia.Dialogo.campoDeTexto.text = string.Empty;
        panelPrincipalUICombate.SetActive(false);
        spritesCombate.gameObject.SetActive(false);

        //*********************
        // SI HA PERDIDO LO ENVIAMOS AL CENTRO POKÉMON DEFINIDO EN LA ZONA
        //*********************
        if (!DatosCombate.CombateGanado)
        {
            ControladorEventos.Instancia.LanzarEvento(new EventoTeletransportarseCentroPokemon());
        }

        //*********************
        //  TRANSICION A CLARO
        //*********************
        yield return(StartCoroutine(CorrutinasComunes.AlfaDeUnoACero(pantallaDeCarga)));

        ControladorDatos.Instancia.QuitarMusicaCombate();


        //*********************
        // TEXTO TRAS COMBATIR Y GANAR CONTRA EL ENTRENADOR, SE EJECUTA EL MÉTODO MostrarMensajeConversacion PARA QUE COMPRUEBE SI LA CONVERSACIÓN DA LOGROS E ITEMS
        //*********************
        if (tipoCombate == TipoDeCombate.Entrenador && DatosCombate.CombateGanado)
        {
            EventoMostrarMensajeConversacion e = new EventoMostrarMensajeConversacion(entrenador.Conversacion);
            yield return(StartCoroutine(UIControlador.Instancia.Dialogo.componentePrincipal.MostrarMensajeConversacion(e, true)));

            if (e.Conversacion.curarEquipoPokemonDelJugador)
            {
                yield return(StartCoroutine(CorrutinasComunes.CurarEquipoPokemon()));
            }
        }

        //*********************
        // COMPROBAMOS SI ALGÚN POKÉMON HA EVOLUCIONADO
        //*********************
        if (DatosCombate.CombateGanado)
        {
            yield return(StartCoroutine(ComprobarSiAlgunPokemonDelEquipoHaEvolucionado()));
        }


        DatosCombate = null;
    }
예제 #3
0
    public IEnumerator ComprobarSiAlgunPokemonDelEquipoHaEvolucionado()
    {
        //Establecemos los valores y referencias
        PokemonModelo[] equipoPokemon = ControladorDatos.Instancia.Datos.ObtenerEquipoPokemon();

        //Recorremos cada pokémon del equipo...
        for (int i = 0; i < equipoPokemon.Length; i++)
        {
            //... Comprobación para evitar errores...
            if (equipoPokemon[i] != null)
            {
                //... Si el pokémon actual del equipo ha subido de nivel y está vivo...
                if (equipoPokemon[i].HaSubidoDeNivel && equipoPokemon[i].EstaVivo())
                {
                    //... Y tiene asignada una evolución y su nivel actual está por encima o es igual al nivel en el que evoluciona...
                    if (equipoPokemon[i].DatosFijos.evolucion != PokemonID.NINGUNO && equipoPokemon[i].DatosFijos.nivelEvolucion <= equipoPokemon[i].Nivel)
                    {
                        //... Mostramos un mensaje indicando que el pokémon va a evolucionar
                        string texto = Ajustes.Instancia.textoPokemonVaEvolucionar
                                       .Replace(Ajustes.Instancia.palabraParaReemplazarEnLosTexto1, equipoPokemon[i].DatosFijos.nombre);
                        yield return(StartCoroutine(UIControlador.Instancia.Dialogo.componentePrincipal.MostrarTextoCorrutina(texto, false)));

                        //... Oscurecemos la pantalla
                        yield return(StartCoroutine(CorrutinasComunes.AlfaDeCeroAUno(pantallaDeCarga)));

                        //... Rotamos la cámara para evitar que otros sprites del escenario se visualizen por encima
                        Camera.main.transform.rotation = Quaternion.Euler(Camera.main.transform.rotation.eulerAngles.x, Camera.main.transform.rotation.eulerAngles.y + 180, Camera.main.transform.rotation.eulerAngles.z);

                        //... Ponemos a false la subida de nivel para volver a comprobar la evolución la próxima vez que suba nivel
                        equipoPokemon[i].HaSubidoDeNivel = false;

                        //... Asignamos los sprites de los pokémon
                        UIControlador.Instancia.ventanaSpriteEvolucion.AsignarSprites(equipoPokemon[i].DatosFijos);

                        //... Aclaramos la pantalla
                        yield return(StartCoroutine(CorrutinasComunes.AlfaDeUnoACero(pantallaDeCarga)));

                        //... Reproducimos animación evolución
                        UIControlador.Instancia.ventanaSpriteEvolucion.ReproducirAnimacion();

                        //... Esperamos a que termine la animación
                        while (!UIControlador.Instancia.ventanaSpriteEvolucion.EvolucionFinalizada())
                        {
                            yield return(null);
                        }

                        //... Imprimimos mensaje indicando que ha evolucionado
                        texto = Ajustes.Instancia.textoPokemonHaEvolucionado
                                .Replace(Ajustes.Instancia.palabraParaReemplazarEnLosTexto1, equipoPokemon[i].DatosFijos.nombre)
                                .Replace(Ajustes.Instancia.palabraParaReemplazarEnLosTexto2, ControladorDatos.Instancia.ObtenerPokemon(equipoPokemon[i].DatosFijos.ID).nombre);
                        yield return(StartCoroutine(UIControlador.Instancia.Dialogo.componentePrincipal.MostrarTextoCorrutina(texto, true)));

                        //... Cambiamos el ID del pokémon por la de su evolución
                        equipoPokemon[i].Evolucionar();

                        //... Oscurecemos la pantalla
                        yield return(StartCoroutine(CorrutinasComunes.AlfaDeCeroAUno(pantallaDeCarga)));

                        //... Desactivamos la ventana de evolución
                        UIControlador.Instancia.ventanaSpriteEvolucion.gameObject.SetActive(false);

                        //... Restablecemos la rotación de la cámara
                        Camera.main.transform.rotation = Quaternion.Euler(Camera.main.transform.rotation.eulerAngles.x, Camera.main.transform.rotation.eulerAngles.y - 180, Camera.main.transform.rotation.eulerAngles.z);

                        //... Aclaramos la pantalla
                        yield return(StartCoroutine(CorrutinasComunes.AlfaDeUnoACero(pantallaDeCarga)));
                    }
                }
            }
            yield return(null);
        }
    }