domingo, 13 de abril de 2014

[3 - Itens dos Eventos de Estado]

Quando começamos a desenvolver o jogo, pensamos em criar uma classe genérica para todos os personagens - jogador, inimigos, chefes. Para isso resolvemos criar a classe Character que é uma espécie de controlador, que define qual ação o personagem deve executar. Porém se colocássemos todas essas ações dentro da classe em si, ficaria difícil obter um novo comportamento e a classe ficaria gigante, para facilitar deixamos todos os comportamentos (Andar, atacar por exemplo) em classes separadas.
No C# existe um recurso (muito bonito e complicado de aprender no início) chamado event, que é uma espécie de "apontador de métodos".
Métodos de classes externas "assinam" esse evento e toda vez que o evento for chamado, automaticamente é chamado todos os métodos assinados do evento em questão.
Com isso, o controlador (Character) apenas "chama" esses eventos, e não é responsável pela implementação dos comportamentos, as classes que assinarem esses eventos ficam responsáveis pela implementação e execução, deixando o controlador independente das ações e mais fácil adicionar qualquer novo comportamento para o personagem.

Diagrama de Classe do Character e de seus comportamentos.

No jogo, haverá 3 tipos de inimigos (serão descritos em outra postagem) com comportamentos distintos, todos os inimigos serão gerenciados por uma IAManager, que irá validar suas ações, para que todos não ataquem ao mesmo tempo, por exemplo.
Montamos uma sequência de comportamentos genéricos, que servem para a maioria dos inimigos, segue a descrição de cada estado:

  • EnemyWaiting: Aqui os inimigos apenas fazem a animação de espera, e o estado será trocado para EnemyApproaching quando o alvo estiver em sua área de alcance.
  • EnemyApproaching: O inimigo irá se aproximar do alvo em questão, apenas se permanecer em sua área de alcance, e quando chegar perto suficiente para executar um ataque seu estado é trocado para EnemyAttacking.
  • EnemyAttacking: O inimigo executa seu ataque, removendo uma quantidade de Saúde do alvo. Acabando a animação, o inimigo passa para o estado de EnemyAttackWait.
  • EnemyAttackWait: Diferentemente do estado EnemyWaiting, este estado é ativado após o ataque do inimigo, e espera um intervalo de tempo para verificar se poderá atacar novamente, se recebeu ataque ou se o alvo saiu de seu alcance, podendo assim passar para 3 diferentes estados.
  • EnemyTakeDamage: Estado sentinela que pode ser ativado quando recebe ataque de outro personagem, estando em qualquer outro estado que não possua o atributo de invulnerabilidade.
  • EnemyDying: Se a vida do inimigo, for menor ou igual a zero, o estado muda para EnemyDying, executando a respectiva animação, e depois será destruído da cena.
Diagrama de Transição de Estados para o Inimigo Genérico.

Após toda essa descrição teórica de como estamos implementando os personagens no jogo você deve estar pensando:
- MEU DEUS QUE POST MAIS CHATO NÃO TEM NADA DE INTERESSANTE AQUI!!
Calma, para deixar o post mais leve, bonito e agradável vamos atualizar aquela imagem com os itens de cenário da postagem anterior.



Nenhum comentário:

Postar um comentário