Several suggestions come to mind.
I feel you may have gone a little inheritance happy. While inheritance is a great tool, sometimes all you need is a little more customization of a single object.
First, a component system seems to jump out as a good candidate. Then you'd just have a Spell
class (or perhaps something even more broad, but that's not necessary to explain the process), and components that you attach to it, like DamageComponent
or ClickableComponent
. When the spell is cast, the manager responsible for it would cycle through the components to determine how to interact with it.
If you're not too familiar with components, or feel like you'd like an approach in between a standard OO approach and this, you can give your Spell
members like m_pDamageComponent
and m_pClickableComponent
and have the value NULL
indicate that they aren't relevant, and use the object it's pointing to otherwise. Actually, if the behavior is simple and consistent, there's no reason it needs to be encapsulated. Those can just be booleans.
I can elaborate on any of these suggestions if necessary.