public Damage(int rawAmount, DamageModifierEnum savingModifier, DamageAffinityEnum typeAffinity, DamageTypeEnum type)
 {
     RawAmount     = rawAmount;
     SavingModifer = savingModifier;
     TypeAffinity  = typeAffinity;
     Type          = type;
 }
示例#2
0
        private void applyDamageAffinity(ref int rawAmount, DamageAffinityEnum affinity)
        {
            switch (affinity)
            {
            case DamageAffinityEnum.Weak:
                rawAmount *= 2;
                break;

            case DamageAffinityEnum.Neutral:
                break;

            case DamageAffinityEnum.Resistant:
                rawAmount /= 2;
                break;

            case DamageAffinityEnum.Immune:
                rawAmount = 0;
                break;
            }
        }
        /// <summary>
        ///     method called when a hit attack lands to compute the damage received
        /// </summary>
        /// <param name="damages"></param>
        // TODO Might need to rename this
        public static void TakeHitDamage(this PlayableEntity playableEntity, DamageResultList damages)
        {
            int i     = 1;
            int total = 0;

            console.AddEntry($"{playableEntity.DisplayName}", fontWeightProvider.Bold);
            console.AddEntry(" takes ");

            foreach (DamageResult dmg in damages.Elements)
            {
                int damage_value = 0;
                if (dmg.Damage.LastResult > 0)
                {
                    DamageAffinityEnum affinity = playableEntity.DamageAffinities.GetAffinity(dmg.DamageType).Affinity;

                    // damage resistance / weakness
                    switch (affinity)
                    {
                    case DamageAffinityEnum.Neutral:
                        damage_value = dmg.Damage.LastResult;
                        break;

                    case DamageAffinityEnum.Resistant:
                        damage_value = dmg.Damage.LastResult / 2;
                        break;

                    case DamageAffinityEnum.Immune:
                        damage_value = 0;
                        break;

                    case DamageAffinityEnum.Weak:
                        damage_value = dmg.Damage.LastResult * 2;
                        break;
                    }
                    if (dmg.LastSavingWasSuccesfull)
                    {
                        // Situational damage modifiers (such as a saving throw that could divide damge by 2)
                        switch (dmg.SituationalDamageModifier)
                        {
                        case DamageModifierEnum.Halved:
                            damage_value /= 2;
                            break;

                        case DamageModifierEnum.Canceled:
                            damage_value = 0;
                            break;

                        default:
                            break;
                        }
                        dmg.LastSavingWasSuccesfull = false;
                    }
                }

                if (i == damages.Elements.Count && i != 1)
                {
                    console.AddEntry("and ");
                }
                console.AddEntry($"{damage_value} {dmg.DamageType}", fontWeightProvider.Bold, fontColorProvider.GetColorByKey(dmg.DamageType.ToString()));
                console.AddEntry($"{(i == damages.Elements.Count ? " damage" : " damage, ")}");
                total += damage_value;
                i     += 1;
            }
            playableEntity.LooseHp(total);
        }