示例#1
0
        public void HandleFaktischerWertAttributChanged(object sender, FaktischerWertChangedEventArgs args)
        {
            var collection = (AttributeCollection)sender;

            if (collection == null)
            {
                throw new ArgumentException("Der Sender ist keine AttributCollection oder null");
            }

            if (args == null)
            {
                throw new ArgumentException("Das sendende Attribut konnte nicht erkannt werden: args == null");
            }

            ImagoAttribut attribut = (ImagoAttribut)args.Entitaet.Identifier;

            if (attribut == null)
            {
                throw new ArgumentException("Das sendende Attribut konnte nicht erkannt werden: Casting-Fehler");
            }

#if debug
            Console.WriteLine("Event " + this.GetType().Name + ". Der faktische Wert von " + attribut.Name + " wurde geändert.")
#endif

            var values = Attribute.GetFaktischeWerte();
            foreach (var item in FertigkeitsKategorien)
            {
                var attributReferenzen = new List <ImagoAttribut>(item.AttributReferenzen);

                if (attributReferenzen.Contains(attribut))
                {
                    item.BerechneNatuerlicherWert(values);
                }
            }

            Initiative.BerechneNatuerlicherWert(values);
            SchadensMod.BerechneNatuerlicherWert(values);
            EgoRegeneration.BerechneNatuerlicherWert(values);
            Lastgrenze.BerechneNatuerlicherWert(values);

            if (attribut == ImagoAttribut.Konstitution)
            {
                foreach (var teil in Koerper)
                {
                    teil.BerechneTrefferpunkte(values[ImagoAttribut.Konstitution]);
                }
            }
        }