terça-feira, 29 de julho de 2014

GameHUD: Função


Podemos criar novas Funções em Blueprints. Assim como as Macros, as funções permitem que um conjunto de ações que são executados em várias partes do Blueprint seja reunida em um único local para facilitar a organização e manutenção do script. Uma vantagem das Funções em relação as Macros é que elas podem ser chamadas a partir de outros Blueprints. Em relação a Eventos Customizados, as funções tem a vantagem de poder ter valores de retorno.

Como exemplo, vamos criar uma função chamada "StatueCollected" (estátua coletada) no Blueprint do GameHUD. Esta função será chamada pelo Blueprint "Statue" quando o jogador pegar uma estátua. A função deve fazer as seguintes ações:
  • Adicionar à pontuação do jogador, os pontos obtidos ao coletar uma estátua que é calculado com a expressão "10 X Nível".
  • Adicionar 1 à variável "StatueCount" que armazena a quantidade de estátuas que foram coletadas.
  • Testar se o valor da variável "StatueCount" é múltiplo de 5. Se for verdadeiro faça as ações abaixo:
    • Adicionar 15 à variável "Time" (tempo).
    • Adicionar 1 à variável "Level" (nível). Limitar o valor máximo do nível em 5.

A cada 5 estátuas coletadas o jogador aumenta um nível e ganha 15 segundos de tempo.

Para criar a função, abra o blueprint GameHUD e vá para o modo "Graph". Na aba "MyBlueprint" clique no botão "Function" conforme imagem abaixo.


Coloque "StatueCollected" como nome da função. Para editá-la dê um clique duplo no nome da função.

Vou mostrar separadamente as ações que fazem parte desta função. No final mostrarei uma imagem contendo a função completa. 

Conforme a lista que fizemos acima a primeira ação que deve ser feita é: 
  • Adicionar à pontuação do jogador, os pontos obtidos ao coletar uma estátua que é calculado com a expressão "10 X Nível".

Para calcular os novos pontos, será necessário usar operadores aritméticos e expressões. As variáveis que são utilizadas no cálculo foram criadas no artigo "GameHUD: Inicializando as variáveis com uma Macro".

A primeira parte da função ficará desta forma:


A imagem acima mostra que o novo valor da variável "Score" será obtido a partir do seu antigo valor somado ao resultado da operação "Level x 10".

A próxima ação a ser feita é:
  • Adicionar 1 à variável "StatueCount" que armazena a quantidade de estátuas que foram coletadas.

Esta ação é bem simples:


A próxima ação:
  • Testar se o valor da variável "StatueCount" é múltiplo de 5.

Para realizar este teste vamos precisar usar operadores relacionais e branch. Este teste usará também o operador "%" conhecido como Módulo. Este operador devolve como resultado o resto de uma divisão. Para encontrar este operador basta clicar com o botão direito no EventGraph e pesquisar por "%".

O Branch ficará desta forma:


A cada 5 estátuas coletadas o jogador aumenta de nível. Para verificar se a variável "StatueCount" é múltiplo de 5 basta usar a expressão "StatueCount % 5" e verificar se o resultado é igual a 0, ou seja, se não houve resto de divisão. Se o resultado da expressão for verdadeiro significa que o jogador aumentou de nível e então iremos executar as duas próximas ações. 

  • Adicionar 15 à variável "Time". 

Esta ação concede ao jogador mais 15 segundos de jogo:


  • Adicionar 1 à variável "Level". Limitar o valor máximo do nível em 5. 

Esta ação aumenta o nível do jogador. Foi usado o operador "MIN", que devolve como resultado o menor valor de entrada, para que o valor do nível nunca fosse maior que 5:


Com isso completamos a função "StatueCollected". A versão completa da função pode ser vista na imagem abaixo.



Próximo: GameHUD: Desenhando na tela
Anterior: GameHUD: Timer e Custom Event
Sumário