diff --git a/source/Features/OverrideStatTooltips/Helper/MechDefStatisticModifier.cs b/source/Features/OverrideStatTooltips/Helper/MechDefStatisticModifier.cs index 623ab40a..1cbf0100 100644 --- a/source/Features/OverrideStatTooltips/Helper/MechDefStatisticModifier.cs +++ b/source/Features/OverrideStatTooltips/Helper/MechDefStatisticModifier.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using BattleTech; using MechEngineer.Features.OrderedStatusEffects; @@ -9,6 +10,11 @@ namespace MechEngineer.Features.OverrideStatTooltips.Helper; internal static class MechDefStatisticModifier { + private static readonly Dictionary> filters = new Dictionary>(); + internal static void RegisterFilter(string name, Func filter) + { + filters[name] = filter; + } internal static T ModifyStatistic(StatisticAdapter stat, MechDef mechDef, bool acceptAllDamageLevels = false) where T : notnull { var effects = new List(); @@ -34,6 +40,13 @@ internal static T ModifyStatistic(StatisticAdapter stat, MechDef mechDef, { continue; } + bool can_be_applied = true; + foreach(var filter in filters) + { + if (filter.Value == null) { continue; } + if (filter.Value(mechDef, null, effectData) == false) { can_be_applied = false; break; } + } + if (can_be_applied == false) { continue; } effects.Add(effectData); } } @@ -46,11 +59,6 @@ internal static T ModifyStatistic(StatisticAdapter stat, MechDef mechDef, } internal static T ModifyWeaponStatistic(StatisticAdapter stat, MechDef mechDef, WeaponDef weaponDef) where T : notnull - { - return ModifyWeaponStatistic(stat, mechDef, weaponDef.WeaponSubType, weaponDef.Type, weaponDef.WeaponCategoryValue); - } - - private static T ModifyWeaponStatistic(StatisticAdapter stat, MechDef mechDef, WeaponSubType subType, WeaponType type, WeaponCategoryValue categoryValue) where T : notnull { var effects = new List(); foreach (var componentDef in mechDef.Inventory.Where(x => x.IsFunctionalORInstalling()).Select(x => x.Def)) @@ -75,10 +83,17 @@ private static T ModifyWeaponStatistic(StatisticAdapter stat, MechDef mech { continue; } - if (!IsStatusEffectAffectingWeapon(effectData.statisticData, subType, type, categoryValue)) + if (!IsStatusEffectAffectingWeapon(effectData.statisticData, weaponDef.WeaponSubType, weaponDef.Type, weaponDef.WeaponCategoryValue)) { continue; } + bool can_be_applied = true; + foreach (var filter in filters) + { + if (filter.Value == null) { continue; } + if (filter.Value(mechDef, weaponDef, effectData) == false) { can_be_applied = false; break; } + } + if (can_be_applied == false) { continue; } effects.Add(effectData); } }