public Form1()
 {
     InitializeComponent();
     Init();
     try
     {
         ToolStripMenuItem tsmiMagic = new ToolStripMenuItem("Magic");
         foreach (BasicSpell spell in m_lstSpells)
         {
             ToolStripMenuItem tsmiSpell = spell.ToToolStripMenuItem();
             if (spell.CanHitAllEnemies)
             {
                 ToolStripItem tsiAll = tsmiSpell.DropDownItems.Add("All");
                 tsiAll.Click += (sender, arguments) => m_lstTargets.ForEach((target) => TryCastSpell(spell, target));
             }
             else
             {
             }            // This spell can not hit all enemies
             for (int i = 0; i < m_lstTargets.Count; i++)
             {
                 BasicTarget   target    = m_lstTargets[i];
                 ToolStripItem tsiTarget = tsmiSpell.DropDownItems.Add($"Target {i}: {target.Name}");
                 tsiTarget.Image  = target.StatusImage;
                 tsiTarget.Click += (sender, arguments) => TryCastSpell(spell, target);
             }
             tsmiMagic.DropDownItems.Add(tsmiSpell);
         }
         m_tsCombatOptions.Items.Add(tsmiMagic);
     }
     catch (Exception ex)
     {
         MessageBox.Show($"{ex}");
     }
 }
 private void TryCastSpell(BasicSpell spell, BasicTarget target)
 {
     if (!spell.Cast(target))
     {
         MessageBox.Show($"You can not cast this spell with your current mana!");
     }
 }
 public override bool Cast(BasicTarget target)
 {
     // TODO: Check if castable (maybe add caster as parameter)
     target.HP -= 500;
     return(true);
 }
 public abstract bool Cast(BasicTarget target);