internal static List <string> ReaktionAusgabe(this Reaktion reaktion, KampfAktionsTyp typ, GegnerBase gegner)
        {
            List <string> ausgabe;

            switch (typ)
            {
            case KampfAktionsTyp.SpielerAngriff:
            case KampfAktionsTyp.SpielerMagie:
                ausgabe = AusgabeSpielerAktion(reaktion);
                break;

            case KampfAktionsTyp.GegnerAngriff:
                ausgabe = AusgabeGegnerAktion(reaktion, gegner);
                break;

            case KampfAktionsTyp.SpielerItem:
                ausgabe = AusgabeSpielerItem(reaktion, gegner);
                break;

            default:
                ausgabe = new List <string>();
                break;
            }

            return(ausgabe);
        }
 private static List <string> GetReaktionTexte(Reaktion reaktion, BaseObject sprecher = null)
 {
     if (reaktion.Texte != null)
     {
         return(GetTextFuerSprecher(sprecher?.Name, reaktion.Texte));
     }
     else
     {
         return(new List <string>());
     }
 }
        private static List <string> AusgabeSpielerItem(Reaktion reaktion, GegnerBase gegner)
        {
            List <string> ausgabe = GetReaktionTexte(reaktion, gegner);

            if (reaktion.Schaden != 0)
            {
                ausgabe.Add($"{gegner.Name} hat {reaktion.Schaden} Schaden erhalten.");
            }

            return(ausgabe);
        }
        private static List <string> AusgabeSpielerAktion(Reaktion reaktion)
        {
            List <string> ausgabe = new()
            {
                $"{reaktion.Ziel.Name} hat {reaktion.Schaden} Schaden erhalten."
            };

            if (reaktion.Texte == null)
            {
                ausgabe.AddRange(GetReaktionTexte(reaktion, reaktion.Ziel));
            }

            return(ausgabe);
        }
        private static List <string> AusgabeGegnerAktion(Reaktion reaktion, GegnerBase gegner)
        {
            List <string> ausgabe = new()
            {
                $"{gegner.Name} greift dich an...",
                $"Du hast {reaktion.Schaden} Schaden erhalten.\r\n"
            };

            if (reaktion.Ziel != null && reaktion.Ziel.Lebenspunkte <= 0)
            {
                ausgabe.Add("Du wurdest besiegt!");
            }

            return(ausgabe);
        }
    }
        private Reaktion ItemBenutzen()
        {
            Reaktion reaktion = Gegner.GetReaktionAufItem(Item);

            if (reaktion is null)
            {
                reaktion = new Reaktion($"{Item.Name} hat keine Wirkung auf {Gegner.Name}");
            }
            else
            {
                Gegner.Lebenspunkte -= reaktion.Schaden;
            }

            Item = null;

            return(reaktion);
        }
        /// <summary>
        /// Führt eine Aktion des entsprechenden <see cref="KampfAktionsTyp"/>s aus.
        /// </summary>
        /// <param name="typ">Der Typ der Aktion.</param>
        public void AktionAusführen(KampfAktionsTyp typ)
        {
            Reaktion reaktion = null;

            switch (typ)
            {
            case KampfAktionsTyp.SpielerAngriff:
                reaktion = SchadenAusteilenAngriff();
                break;

            case KampfAktionsTyp.SpielerMagie:
                reaktion = SchadenAusteilenMagie();
                break;

            case KampfAktionsTyp.SpielerItem:
                reaktion = ItemBenutzen();
                break;

            case KampfAktionsTyp.GegnerAngriff:
                reaktion = SchadenErhalten();
                break;

            case KampfAktionsTyp.GegnerSpezial:
                reaktion = SpezialAktionAusführen();
                break;
            }

            Ausgabe.AddRange(reaktion.ReaktionAusgabe(typ, Gegner));
            if (reaktion != null && Spieler.Lebenspunkte > 0 && Gegner.Lebenspunkte > 0)
            {
                Aktion();
            }
            else
            {
                if (Gegner.Lebenspunkte <= 0)
                {
                    Ausgabe.Add(Gegner.TodesText);
                }

                SchreibeAusgabe();
                IstZuende = true;
            }
        }