public Damage(int rawAmount, DamageModifierEnum savingModifier, DamageAffinityEnum typeAffinity, DamageTypeEnum type) { RawAmount = rawAmount; SavingModifer = savingModifier; TypeAffinity = typeAffinity; Type = type; }
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); }