Agora vamos falar dos componentes responsaveis pelos dialogos do jogo e pela Action do Action RPG.Para dialogos eu pensei em 2 componentes: o Talk e o Listen. Um responsavel por falar e outro por ouvir. Quem ouve sao os jogadores, entao apenas eles terao esse componente. Ja o Talk estaria presente em qualquer entidade que tiver algo a falar. Vai ser nesse componente que vai ficar o texto a ser mostrado. O exemplo mais obvio e um NPC da cidade falando sobre o mal que assombra a cidade mas tem muitos outro tambem. Uma placa indicando a direcao do castelo precisa "falar" pois para o jogador o texto da placa aparece na forma de dialogo. Uma arvore tambem pode falar ou um bau trancado avisa que ele esta trancado.O componente Listen acessa o componente Talk da outra entidade, ativando o dialogo que e mostrado na tela.Para a luta vai existir um componente Fight. Ele vai ser responsavel pelo ataque e pelos testes de acerto. Aqui tambem ficarao propriedades relacionadas como precisao e esquiva e essas propriedades podem ser alteradas pelos componentes relacionados a os atributos como um componente de habilidades do personagem. Porem o Fight nao enxergara esses componentes e agira independente dos mesmos. Mais uma vez parei de programar devido a um problema que da vontade de comecar tudo de novo.E so agora realmente tive a vontade de comecar tudo de novo.Para recomecar eu tive que relembrar alguns conceitos bem importantes e relembrar cada problema que eu tive com a Action RPG Lib.Estava tudo indo muito bem quando eu lembrei de uma coisa que me encucou bastante.Maquina de estados. O jogo e uma maquina de estados e alguns objetos do jogo tambem sao maquinas de estados, certo?Mas o problema e que aquele aglomerado de IFs e ELSEs e CASEs da a impressao que tem algo errado no codigo.void Update(){ switch( myState ) { case DoingTheFirstThing: ... case DoingTheSecondThing: ... case DoingTheLastThing: ... }}Nao existiria uma maneira mais certa ou mais organizada de fazer isso?Update: O Vinicius Godoy deixou um otimo artigo que mostra uma otima solucao para Maquina de Estados.http://www.ai-junkie.com/architecture/state_driven/tut_state1.htmlhttp://sofiaia.wordpress.com/2008/07/11/maquina-de-estados/ Maquina de EstadosNo projeto, todo GameObject tem uma maquina de estados baseada nesse artigo aqui: http://www.ai-junkie.com/architecture/state_driven/tut_state1.htmlUm objeto como o player ou um monstro tem estados como Walk, Run, Idle, Attack e por ai vai, dependendo das funcionalidades que forem implementadas.O uso da Maquina de estados facilitou e organizou meu projeto. Uma das coisas que mais me agradou foram os 3 metodos de cada estado://this will execute when the state is enteredvirtual void Enter(Miner*)=0;//this is called by the miners update function each update-stepvirtual void Execute(Miner*)=0;//this will execute when the state is exitedvirtual void Exit(Miner*)=0;Inicializar variaveis, carregar informacoes e coisas do tipo vao no Enter.Um dos problemas que enfrentei no comeco do projeto foi a mudanca de sprite para cada tipo de acao do Character, principalmente em relacao aos sprites de ataque. Entao eu uso o Enter para carregar as informacoes de Area de Dano, Ataque e Colisao do Character para seu estado.Inteligencia Artificial BasicaPara o desenvolvimento da AI eu estou usando o