Estou procurando uma solução para o comportamento "Opções do botão direito".
Basicamente, todo e qualquer item de um jogo, quando clicado com o botão direito, pode exibir um conjunto de opções com base em qualquer objeto que seja.
Clique com o botão direito do mouse em exemplos para diferentes cenários :
Inventário: o capacete mostra as opções (Equipar, Usar, Soltar, Descrição)
Banco: capacete mostra opções (Take 1, Take X, Take All, Description)
Andar: capacete mostra opções (pegar, andar aqui, descrição)
Obviamente, cada opção de alguma forma aponta para um determinado método que faz o que diz. Isso faz parte do problema que estou tentando descobrir. Com tantas opções de potência para um único item, como eu teria minhas aulas projetadas de forma a não serem extremamente confusas?
- Pensei em herança, mas isso poderia ser muito longo e a cadeia poderia ser enorme.
- Pensei em usar interfaces, mas isso provavelmente me restringiria um pouco, já que eu não seria capaz de carregar dados de itens de um arquivo Xml e colocá-los em uma classe "Item" genérica.
Estou baseando meu resultado final desejado em um jogo chamado Runescape. Cada objeto pode ser clicado com o botão direito do jogo e, dependendo do que é e de onde está (inventário, piso, banco etc.) exibe um conjunto diferente de opções disponíveis para o jogador interagir.
Como eu iria conseguir isso? Que abordagem devo levar para antes de tudo, decidir quais opções DEVEM ser exibidas e, uma vez clicadas, como chamar o método correspondente.
Estou usando C # e Unity3D, mas os exemplos fornecidos não precisam estar relacionados a nenhum deles, pois estou atrás de um padrão em oposição ao código real.
Qualquer ajuda é muito apreciada e, se eu não tiver sido claro na minha pergunta ou nos resultados desejados, por favor, poste um comentário e eu o tratarei o mais rápido possível.
Aqui está o que eu tentei até agora:
- Na verdade, eu consegui implementar uma classe "Item" genérica que contém todos os valores para diferentes tipos de itens (ataque extra, defesa extra, custo etc ...). Essas variáveis são preenchidas por dados de um arquivo Xml.
- Pensei em colocar todos os métodos de interação possíveis dentro da classe Item, mas acho que essa é uma forma inacreditavelmente bagunçada e ruim. Eu provavelmente adotei a abordagem errada para implementar esse tipo de sistema usando apenas a classe e não subclassificando itens diferentes, mas é a única maneira de carregar os dados de um Xml e armazená-los na classe.
- A razão pela qual escolhi carregar todos os meus itens de um arquivo Xml é porque este jogo tem a possibilidade de mais de 40.000 itens. Se minha matemática estiver correta, uma classe para cada item é muitas.