Estoy buscando una solución para el comportamiento de "Opciones de clic derecho".
Básicamente, cualquier elemento de un juego, cuando se hace clic con el botón derecho, puede mostrar un conjunto de opciones en función del objeto que sea.
Ejemplos de clic derecho para diferentes escenarios :
Inventario: el casco muestra opciones (equipar, usar, soltar, descripción)
Banco: el casco muestra opciones (Take 1, Take X, Take All, Descripción)
Piso: el casco muestra opciones (tomar, caminar aquí, descripción)
Obviamente, cada opción apunta de alguna manera a un cierto método que hace lo que dice. Esto es parte del problema que estoy tratando de resolver. Con tantas opciones de potencia para un solo elemento, ¿cómo diseñaría mis clases de tal manera que no sean extremadamente desordenadas?
- He pensado en la herencia, pero eso podría ser muy largo y la cadena podría ser enorme.
- He pensado en usar interfaces, pero esto probablemente me restringiría un poco, ya que no podría cargar datos de elementos de un archivo Xml y colocarlos en una clase genérica de "Elementos".
Estoy basando mi resultado final deseado en un juego llamado Runescape. Se puede hacer clic derecho en cada objeto en el juego y, según lo que sea y dónde esté (inventario, piso, banco, etc.) muestra un conjunto diferente de opciones disponibles para que el jugador interactúe.
¿Cómo haría para lograr esto? En primer lugar, qué enfoque debo tomar, decidir qué opciones DEBERÍAN mostrarse y, una vez que se haga clic, cómo llamar al método correspondiente.
Estoy usando C # y Unity3D, pero cualquier ejemplo proporcionado no tiene que estar relacionado con ninguno de ellos, ya que busco un patrón en lugar del código real.
Cualquier ayuda es muy apreciada y si no he sido claro en mi pregunta o en los resultados deseados, publique un comentario y lo atenderé lo antes posible.
Esto es lo que he intentado hasta ahora:
- De hecho, he logrado implementar una clase genérica de "Objeto" que contiene todos los valores para diferentes tipos de artículos (ataque adicional, defensa adicional, costo, etc.). Estas variables se rellenan con datos de un archivo Xml.
- He pensado en colocar todos los métodos de interacción posibles dentro de la clase Item, pero creo que esta es una forma increíblemente desordenada y pobre. Probablemente he tomado el enfoque equivocado para implementar este tipo de sistema al usar solo una clase y no subclasificar a diferentes elementos, pero es la única forma en que puedo cargar los datos de un Xml y almacenarlos en la clase.
- La razón por la que elegí cargar todos mis artículos desde un archivo Xml se debe a que este juego tiene la posibilidad de más de 40,000 artículos. Si mis cálculos son correctos, una clase para cada artículo es muchas clases.