/// <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; }