public static string GetFightCharacterDamageTakenTooltip(this FightCharacter fightCharacter, string title, int displayIndex, double?percentOfTotal, double?percentOfMax) => $@"{displayIndex}. {title} {fightCharacter.TotalDamageTaken:N0} total dmg {percentOfTotal.FormatPercent()} of fight's total dmg {percentOfMax.FormatPercent()} of fight's max dmg {fightCharacter.WeaponDamageTakenPM.Format()} ({fightCharacter.WeaponPercentOfTotalDamageTaken.FormatPercent()}) weapon dmg / min {fightCharacter.NanoDamageTakenPM.Format()} ({fightCharacter.NanoPercentOfTotalDamageTaken.FormatPercent()}) nano dmg / min {fightCharacter.IndirectDamageTakenPM.Format()} ({fightCharacter.IndirectPercentOfTotalDamageTaken.FormatPercent()}) indirect dmg / min {(!fightCharacter.HasCompleteAbsorbedDamageTakenStats ? "≥ " : "")}{fightCharacter.AbsorbedDamageTakenPM.Format()} ({fightCharacter.AbsorbedPercentOfTotalDamageTaken.FormatPercent()}) absorbed dmg / min {fightCharacter.TotalDamageTakenPM.Format()} total dmg / min {(!fightCharacter.HasCompleteMissStats ? "≤ " : "")}{fightCharacter.WeaponHitTakenChance.FormatPercent()} weapon hit chance {fightCharacter.CritTakenChance.FormatPercent()} crit chance {fightCharacter.GlanceTakenChance.FormatPercent()} glance chance" + (!fightCharacter.Fight.HasObservedBlockedHits ? null : $@" {(!fightCharacter.HasCompleteBlockedHitStats ? "≥ " : "")}{fightCharacter.BlockedHitTakenChance.FormatPercent()} blocked hit chance") + $@" {(!fightCharacter.HasCompleteMissStats ? "≤ " : "")}{fightCharacter.WeaponHitAttemptsTakenPM.Format()} weapon hit attempts / min {fightCharacter.WeaponHitsTakenPM.Format()} weapon hits / min {fightCharacter.RegularsTakenPM.Format()} regulars / min {fightCharacter.NormalsTakenPM.Format()} normals / min {fightCharacter.CritsTakenPM.Format()} crits / min {fightCharacter.GlancesTakenPM.Format()} glances / min" + (!fightCharacter.Fight.HasObservedBlockedHits ? null : $@" {(!fightCharacter.HasCompleteBlockedHitStats ? "≥ " : "")}{fightCharacter.BlockedHitsTakenPM.Format()} blocked hits / min") + $@" {fightCharacter.SpecialsTakenPM.Format()} specials / min {fightCharacter.NanoHitsTakenPM.Format()} nano hits / min {fightCharacter.IndirectHitsTakenPM.Format()} indirect hits / min {(!fightCharacter.HasCompleteAbsorbedDamageTakenStats ? "≥ " : "")}{fightCharacter.AbsorbedHitsTakenPM.Format()} absorbed hits / min {fightCharacter.TotalHitsTakenPM.Format()} total hits / min {fightCharacter.AverageWeaponDamageTaken.Format()} weapon dmg / hit {fightCharacter.AverageRegularDamageTaken.Format()} regular dmg / hit {fightCharacter.AverageNormalDamageTaken.Format()} normal dmg / hit {fightCharacter.AverageCritDamageTaken.Format()} crit dmg / hit {fightCharacter.AverageGlanceDamageTaken.Format()} glance dmg / hit {fightCharacter.AverageSpecialDamageTaken.Format()} special dmg / hit {fightCharacter.AverageNanoDamageTaken.Format()} nano dmg / hit {fightCharacter.AverageIndirectDamageTaken.Format()} indirect dmg / hit {fightCharacter.AverageAbsorbedDamageTaken.Format()} absorbed dmg / hit" + (!fightCharacter.HasSpecialsTaken ? null : $@" {fightCharacter.GetSpecialsTakenInfo()}") + (fightCharacter.TotalDamageTaken == 0 ? null : $@" {fightCharacter.GetDamageTypesTakenInfo()}");
public static string GetFightCharacterDamageTakenTooltip(this FightCharacter fightCharacter, string title, int displayIndex, double?percentOfTotal, double?percentOfMax) => $@"{displayIndex}. {title} {fightCharacter.TotalDamageTaken:N0} total dmg {percentOfTotal.FormatPercent()} of fight's total dmg {percentOfMax.FormatPercent()} of fight's max dmg {fightCharacter.WeaponDamageTakenPM.Format()} ({fightCharacter.WeaponPercentOfTotalDamageTaken.FormatPercent()}) weapon dmg / min {fightCharacter.NanoDamageTakenPM.Format()} ({fightCharacter.NanoPercentOfTotalDamageTaken.FormatPercent()}) nano dmg / min {fightCharacter.IndirectDamageTakenPM.Format()} ({fightCharacter.IndirectPercentOfTotalDamageTaken.FormatPercent()}) indirect dmg / min {fightCharacter.TotalDamageTakenPM.Format()} total dmg / min {(fightCharacter.HasIncompleteMissStats ? "≤ " : "")}{fightCharacter.WeaponHitTakenChance.FormatPercent()} weapon hit chance {fightCharacter.CritTakenChance.FormatPercent()} crit chance {fightCharacter.GlanceTakenChance.FormatPercent()} glance chance {(fightCharacter.HasIncompleteMissStats ? "≤ " : "")}{fightCharacter.WeaponHitAttemptsTakenPM.Format()} weapon hit attempts / min {fightCharacter.WeaponHitsTakenPM.Format()} weapon hits / min {fightCharacter.CritsTakenPM.Format()} crits / min {fightCharacter.GlancesTakenPM.Format()} glances / min {fightCharacter.NanoHitsTakenPM.Format()} nano hits / min {fightCharacter.IndirectHitsTakenPM.Format()} indirect hits / min {fightCharacter.TotalHitsTakenPM.Format()} total hits / min {fightCharacter.AverageWeaponDamageTaken.Format()} weapon dmg / hit {fightCharacter.AverageCritDamageTaken.Format()} crit dmg / hit {fightCharacter.AverageGlanceDamageTaken.Format()} glance dmg / hit {fightCharacter.AverageNanoDamageTaken.Format()} nano dmg / hit {fightCharacter.AverageIndirectDamageTaken.Format()} indirect dmg / hit" + (!fightCharacter.HasSpecialsTaken ? null : $@" {fightCharacter.GetSpecialsTakenInfo()}") + (fightCharacter.HitsAbsorbed == 0 ? null : $@" {fightCharacter.DamageAbsorbed:N0} dmg absorbed {fightCharacter.HitsAbsorbedPM.Format()} hits absorbed / min {fightCharacter.DamageAbsorbedPM.Format()} dmg absorbed / min {fightCharacter.AverageDamageAbsorbed.Format()} dmg absorbed / hit");