コード例 #1
0
ファイル: Manipulador.cs プロジェクト: neanderlink2/DEUSVULT
    /// <summary>
    /// Corotina responsável pelo efeito de manipulação de objetos. Apenas uma corotina Manipular pode ser executada por vez.
    /// </summary>
    /// <returns></returns>
    public IEnumerator Manipular()
    {
        //Adiciona o estado EmManipulação para o objeto e mostra a BarraFornalha como uma barra de progresso.
        Debug.Log("Manipulando...");
        objeto.estadoObj = objeto.estadoObj != EstadoObjeto.PassouDoPonto ? EstadoObjeto.EmManipulacao : EstadoObjeto.PassouDoPonto;
        MyCanvas.BarraFornalha.gameObject.SetActive(true);
        MyCanvas.BarraFornalha.maxValue = objeto.tempoParaFicarPronto;

        //Loop para manipular um objeto, usando o campo 'tempoParaFicarPronto' como condição para finalização.
        for (float i = objeto.tempoDecorrido; objeto != null && i <= objeto.tempoParaFicarPronto; i += 0.01f)
        {
            //Verifica se o manipulador esteja ativado. Caso ele tenha sido desativado em algum momento, para a iteração.
            if (!isManipulando || !FaseController.IsFaseRodando())
            {
                break;
            }

            //Seta o tempo decorrida da manipulação, assim como o valor da fornalha.
            objeto.tempoDecorrido        = i;
            MyCanvas.BarraFornalha.value = i;

            //Espera por 0.01 segundos antes de ir para a próxima iteração.
            yield return(new WaitForSeconds(0.01f));
        }

        //Verifica se existe um objeto no Manipulador.
        if (objeto != null && FaseController.IsFaseRodando() && objeto.estadoObj != EstadoObjeto.PassouDoPonto)
        {
            if (TutorialController.isEsperandoManipular)
            {
                TutorialController.MostrarManipulouObjeto();
            }

            //Se tiver, verifica se ele pode ser Aperfeiçoavel.
            if (objeto is ObjetoAperfeicoavel && objeto.estadoObj != EstadoObjeto.Pronto)
            {
                //Caso possa aperfeiçoar, adicionar o estado PreparadoParaAperfeicoar.
                objeto.estadoObj = EstadoObjeto.PreparadoParaAperfeicoar;
            }
            else
            {
                //Caso não possa aperfeiçoar, deixe o objeto como Pronto.
                objeto.estadoObj = EstadoObjeto.Pronto;
            }
        }

        bool passouPonto = false;

        if (objeto != null && objeto.estadoObj != EstadoObjeto.PassouDoPonto)
        {
            //Cria uma variável que verifica se o objeto passou do ponto, e espera um tempo para verificar se o objeto realmente passará do ponto.
            passouPonto = true;
            for (float i = 0; i < tempoPassarPonto; i += 0.01f)
            {
                if (!isManipulando || !FaseController.IsFaseRodando() || objeto != null)
                {
                    passouPonto = false;
                    break;
                }

                MyCanvas.BarraFornalha.value = objeto.tempoParaFicarPronto;
                MyCanvas.BarraFornalha.GetComponent <Animator>().SetBool("IsPassandoPonto", true);

                yield return(new WaitForSeconds(0.01f));
            }
        }

        //Verifica se existe um objeto no Manipulador e o coloca como Passado do Ponto.
        if (objeto != null && FaseController.IsFaseRodando() && passouPonto)
        {
            if (Camera.main.GetComponent <TutorialController>() != null)
            {
                TutorialController.MostrarObjetoPassouPonto();
            }
            objeto.estadoObj = EstadoObjeto.PassouDoPonto;
        }

        if (objeto != null && objeto.estadoObj == EstadoObjeto.PassouDoPonto)
        {
            MyCanvas.BarraFornalha.GetComponent <Animator>().SetTrigger("PassouPonto");
        }

        MyCanvas.BarraFornalha.GetComponent <Animator>().SetBool("IsPassandoPonto", false);

        //Avisa que o Manipulador não está mais em uso.
        isManipulando = false;
    }