Não para sistemas diferentes para cada tipo, isso reduz muito a divisão de responsabilidades.
Isto é o que estou fazendo no meu projeto pessoal atual:
Existem muitas maneiras de lidar com o estado, mas você provavelmente precisa de uma que faça sentido para os seres humanos, ou pelo menos uma ponte entre humano e código. Você precisa pensar no sistema de animação como um grande liquidificador em vez de um estado discreto; por exemplo, você passa do modo inativo para o lento, adicionando 50% de caminhada ao sistema e depois adiciona 100% de execução.
Externo ao sistema de animação, você pode usar seqüências de caracteres para tornar o trabalho com o sistema agradável e fácil para scripts e códigos. Internamente ao sistema, você cria um mapeamento entre essa sequência e os dados da animação , isso pode ser feito com um armazenamento de valores-chave como um mapa de hash (para evitar enumerações tornando os dados da animação no armazenamento) ou com uma sequência de caracteres para enum pesquisa se você gosta de trabalhar dessa maneira. É tudo uma questão de gosto nesse ponto. Eu prefiro o valor-chave, pois ele pode ser totalmente direcionado por dados de arquivos XML ou INI.
Para lidar com tipos diferentes, você pode, na camada do sistema, criar conjuntos de mapeamentos de animações para que o conjunto para "minion" e "run" para o "minion" sejam diferentes do conjunto para "run" e "female player" tipo.
Em resumo: o sistema de animação é genérico e você possui apenas um sistema; o mundo exterior precisa de uma interface amigável; o mundo interno precisa mapear estados genéricos para tipos de entidade.
E minha lista de coisas que quero fazer, mas ainda não se enquadram no meu design:
TODO : mapeando a velocidade do movimento para o tipo de animação automaticamente, em vez de o programa principal saber sobre "andar" versus "executar", o sistema de animação pode converter "mover na velocidade x" para a animação adequada.
TODO : animações divididas, como rastreamento de cabeça e tronco de forma transparente.
TODO : animações de reação (como levar um soco na cara) manipuladas pelo sistema e não pelo programa principal.
if
dentro do sistema de animação; Eu era cético em relação ao uso de dicionários de strings (em C ++), em termos de memória. Depois de ler hoje sobre as hashtables, acho sua resposta bastante simples. Com relação à parte do 'liquidificador': "adicionar 50% de caminhada" significa substituir algumas molduras pelas da 'caminhada' em 50% das vezes?