Clases de hechizo y inheritance

Actualmente estoy desarrollando un juego pequeño, que incluye el hechizo. Mi estructura de class se ve así: enter image description here

AbstractSpell

enter image description here

AbstractDamageSpell

enter image description here

AbstractClickableSpell

enter image description here

AbstractClickableDamageSpell

enter image description here

"Hacer clic" significa que el usuario tiene que presionar una tecla seguida de un clic del mouse. Algunos hechizos no necesitan ese clic adicional del mouse (como Windwalk). Como puede ver, AbstractDamageSpell y AbstractClickableDamageSpell tienen las mismas properties y methods. ¿Hay una mejor manera de extender estas classs? ¿Algún consejo en general?

Varias sugerencias vienen a la mente.

Siento que has ido un poco feliz por la inheritance. Si bien la inheritance es una gran herramienta, a veces todo lo que necesita es un poco más de personalización de un solo object.

Primero, un sistema de componentes parece saltar como un buen candidato. Entonces solo tendrías una class Spell (o tal vez algo aún más amplio, pero eso no es necesario para explicar el process) y los componentes que adjuntas, como DamageComponent o ClickableComponent . Cuando se lanza el hechizo, el administrador responsable de él recorrerá los componentes para determinar cómo interactuar con él.

Si no está muy familiarizado con los componentes, o siente que le gustaría un acercamiento entre un enfoque OO estándar y esto, puede darles a sus miembros Spell como m_pDamageComponent y m_pClickableComponent y tener el valor NULL indicando que no son relevantes y usa el object al que apunta de lo contrario. En realidad, si el comportamiento es simple y consistente, no hay razón por la cual deba ser encapsulado. Esos solo pueden ser booleans.

Puedo elaborar sobre cualquiera de estas sugerencias si es necesario.