segunda-feira, 22 de dezembro de 2014

Controle de Fluxo em Blueprints

Existem algumas Ações que são usadas para controlar o fluxo de execução das demais ações em um Blueprint. Já vimos algumas dessas Ações:
  • Branch: Determina o fluxo baseado em um condição;
  • For Loop: Repete um conjunto de ações por um número determinado de vezes.
  • Switch: Determina o fluxo baseado no valor da variável de entrada.
  • Flip Flop: Alterna entre dois fluxos de saída a cada execução.


Existem outras ações de controle de fluxo. Vamos começar analisando a "Sequence":


A "Sequence" pode ser usada para ajudar a organizar as Ações Blueprints. Ao ser acionada ela executada em ordem todas as Ações ligadas aos pinos de saída.

A Ação "Do Once" executa apenas uma vez as Ações ligadas ao pino de saída. Como exemplo vamos modificar o script criado no artigo "Usando Level Blueprints". Neste exemplo temos uma Trigger que gera uma explosão quando o jogador colide com ela. A trigger era destruída para que a explosão fosse gerada somente uma vez. Utilizando a ação "Do Once" não é necessário destruir a trigger para que a explosão ocorra somente uma vez. O script modificado ficou desta forma:

Clique para aumentar

Mesmo que o jogador gere novos eventos de colisão com a trigger, a ação "Do Once" não deixará mais passar o fluxo de execução. Para que a ação "Do Once" execute novamente as ações da saída, é preciso que o pino de entrada "Reset" seja acionado.

A ação "Do N" é semelhante a ação "Do Once", mas podemos informar o número de vezes que as ações da saída podem ser executadas. No exemplo abaixo, o jogador possui 3 Kits Médicos que é acionado ao pressionar a tecla "M". Após pressionar 3 vezes a tecla "M", a ação que restaura a variável "health" não será mais executada. Para recarregar os kits médicos, o jogador precisa colidir com um ator do tipo "BP_MedKitStore" que é responsável por restaurar os kits médicos do jogador. Ele faz isso usando o pino de entrada "Reset" da ação "Do N".

Clique para aumentar

A ação "Gate" pode estar aberta ou fechada. Se estiver aberta ela permite a execução das ações ligadas ao pino de saída. Os pinos de entrada "Open", "Close" e "Toggle" são usados para definir o estado atual do "Gate". Existe também a variável booleana "Start Closed" que determinada se o "Gate" deve iniciar a execução no estado "Fechado".

No exemplo abaixo temos um Ator chamado "HealthGenerator". Quando o jogador estiver colidindo com este ator, a sua saúde será restaurada lentamente a cada evento "Tick". Se o jogador se afastar do "HealthGenerator", o "Gate" será fechado e as ações que restauram a saúde deixaram de ser executadas. A ação "Min" é usada para que o valor da variável "Health" nunca seja maior que 100.

Clique para aumentar

A ação "Multigate" pode ser usada de várias formas. Pode ser adicionado vários pinos de saída e a cada execução o "Multigate" aciona apenas um desses pinos de saída em ordem ou aleatoriamente. O número de pinos de saída determinará o número de vezes que o Multigate executará. Contudo, existe a variável "Loop" que indica se o "Multigate" deve continuar a ser executado. 

No exemplo abaixo usamos um "Multigate" com saídas aleatórias e em loop. Quando o jogador colidir com um ator do tipo "RandomBonus" ele será beneficiado com um bonus aleatório que pode ser Health (saúde), Gold (ouro) ou Ammo (munição). Para manter o código simples a ação que representa um bonus exibe apenas uma mensagem na tela.

Clique para aumentar


Próximo: Mapeamento de Input em Blueprints
Anterior: Usando Timelines em Blueprints
Sumário