public void EffectSerializationTest()
        {
            int damageAmount = 5;

            DamageEffect.DamageType typeOfDamage = DamageEffect.DamageType.Bludgeoning;
            Effect       damage1        = new DamageEffect(typeOfDamage, damageAmount);
            string       json           = JsonConvert.SerializeObject(damage1);
            Effect       returnedEffect = JsonConvert.DeserializeObject <Effect>(json);
            DamageEffect damage2        = returnedEffect as DamageEffect;

            Assert.AreEqual(damageAmount, damage2.StaticAmount);
            Assert.AreEqual(typeOfDamage, damage2.TypeOfDamage);
            Assert.AreEqual(Effect.EffectType.Damage, damage2.TypeOfEffect);
        }
        public void TakeDamage(DamageEffect.DamageType typeOfDamage, int amount)
        {
            if (typeOfDamage == DamageEffect.DamageType.Fire && HasTrait("Born of Flame"))
            {
                return;
            }

            Vitality.Value -= amount; //TODO: check for 0?

            //TODO: trait system?
            if (HasTrait("Fragile Chalice"))
            {
                Mana.Value -= 1;
            }

            if (Vitality.Value <= 0)
            {
                if (OnDeath != null)
                {
                    OnDeath(this, this);
                }
            }
        }