示例#1
0
    /// <summary>
    /// Corotina responsável por apresentar um novo pedido, atualizando o tempo decorrido.
    /// </summary>
    /// <param name="pedido">Pedido que será mostrado</param>
    /// <returns></returns>
    public IEnumerator MostrarPedido(Pedido pedido)
    {
        //Instancia o prefab do objeto e o adiciona no PainelPedido para mostrar o pedido ao jogador.
        var prefPedido = Instantiate(Resources.Load <GameObject>("Prefabs/Pedido"), MyCanvas.PainelPedido);

        prefPedido.GetComponentsInChildren <Text>()[0].text = "Pedido\n" + pedido.objetoNecessario.nome;

        //Iteração que atualizará o tempo decorrido de acordo com a necessidade.
        for (int i = 0; i <= pedido.tempoDeEspera; i++)
        {
            if (pedidosAndamento.Contains(pedido) && FaseController.IsFaseRodando())
            {
                prefPedido.GetComponentsInChildren <Text>()[1].text = pedido.tempoDecorrido + "/" + pedido.tempoDeEspera;
                pedido.tempoDecorrido = i;
                yield return(new WaitForSeconds(1f));
            }
            else
            {
                break;
            }
        }

        if (FaseController.IsFaseRodando())
        {
            //Quando chega ao fim do tempo do tempo decorrido, remove o pedido da lista de pedidos em andamento e o apaga do PainelPedidos.
            pedidosAndamento.Remove(pedido);
            MyCanvas.ApagarFilhoPainelPedido(pedido.objetoNecessario.nome);
        }
    }
示例#2
0
 /// <summary>
 /// Método FixedUpdate para verificação de cada quadro
 /// </summary>
 protected virtual void FixedUpdate()
 {
     if (FaseController.IsFaseRodando())
     {
         Mover();
     }
 }
示例#3
0
 /// <summary>
 /// Permite que o personagem que entrar dentro do Trigger do SphereCollider faça uma interação.
 /// </summary>
 /// <param name="other">Outro GameObject que estiver colidindo</param>
 protected virtual void OnTriggerEnter(Collider other)
 {
     if (other.GetComponent <Personagem>() != null && FaseController.IsFaseRodando())
     {
         Personagem = other.GetComponent <Personagem>();
         if (Input.GetKeyDown(Personagem.botaoInteracao))
         {
             OnInteragiu.Invoke(null);
         }
     }
 }
示例#4
0
 /// <summary>
 /// Sobrecarga do método de interação do Interavel. O motivo da sobrecarga é em função da necessidade de manter o botão apertado durante a interação.
 /// </summary>
 /// <param name="collider">Colisor de outro GameObject que estiver colidindo</param>
 protected override void OnTriggerStay(Collider collider)
 {
     if (collider.GetComponent <Personagem>() != null && FaseController.IsFaseRodando())
     {
         Personagem = collider.GetComponent <Personagem>();
         if (Input.GetKey(Personagem.botaoInteracao))
         {
             OnInteragiu.Invoke(null);
         }
     }
 }
示例#5
0
    /// <summary>
    /// Corotina que gera um novo pedido em um determinado periodo de tempo.
    /// </summary>
    /// <returns></returns>;
    public IEnumerator GeraPedido()
    {
        if (FaseController.IsFaseRodando())
        {
            //Instancia um pedido e o adiciona na lista de pedidos em andamento.
            Pedido p = InstanciaPedido();
            if (p != null)
            {
                pedidosAndamento.Add(p);

                StartCoroutine(MostrarPedido(p));

                //Espera os segundos determinados no Inspector.
                yield return(new WaitForSeconds(tempoNovoPedido));

                //Quando termina essa corotina, uma nova entra em execução para gerar outros pedidos.
                StartCoroutine(GeraPedido());
            }
        }
    }
示例#6
0
    /// <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;
    }