public static ISiegeEventSide GetConstructionSiegeEventSide(SiegeEvent.SiegeEngineConstructionProgress construction) { if (construction?.SiegeEngine == null) { return(null); } var siegeEvent = GetHeroSiegeEvent(); if (siegeEvent == null) { return(null); } var attackerSide = siegeEvent.GetSiegeEventSide(BattleSideEnum.Attacker); if (attackerSide.SiegeEngines.DeployedSiegeEngines.Contains(construction)) { return(attackerSide); } var defenderSide = siegeEvent.GetSiegeEventSide(BattleSideEnum.Defender); return(defenderSide); }
private static SiegeEngineConstructionData CreateEmptyData(SiegeEvent.SiegeEngineConstructionProgress construction) { var data = new SiegeEngineConstructionData { MaxHitPoints = construction.SiegeEngine.MaxHitPoints }; Links.Add(construction, data); return(data); }
public static void TooltipPostfix(ref List <TooltipProperty> __result, SiegeEvent.SiegeEngineConstructionProgress engineInProgress = null) { var siegeEventSide = SiegeTooltipHelper.GetConstructionSiegeEventSide(engineInProgress); if (siegeEventSide == null) { return; } CalculateBonusFlatHpAndRateFromPerk(engineInProgress, siegeEventSide, out var bonusFlatHp, out var bonusHpRate); SiegeTooltipHelper.AddPerkTooltip(__result, ActivePatch._perk, bonusHpRate); SiegeTooltipHelper.UpdateMaxHpTooltip(__result, bonusFlatHp); }
public static void TooltipPostfix(ref List <TooltipProperty> __result, SiegeEvent.SiegeEngineConstructionProgress engineInProgress = null) { var siegeEventSide = SiegeTooltipHelper.GetConstructionSiegeEventSide(engineInProgress); if (siegeEventSide == null) { return; } CalculateBonusDamageAndRates(engineInProgress.SiegeEngine, siegeEventSide, out var bonusRateOnly, out var bonusDamageOnly); SiegeTooltipHelper.AddPerkTooltip(__result, ActivePatch._perk, bonusRateOnly); SiegeTooltipHelper.UpdateRangedDamageTooltip(__result, bonusDamageOnly); }
private static void CalculateBonusFlatHpAndRateFromPerk(SiegeEvent.SiegeEngineConstructionProgress justDeployedEngine, ISiegeEventSide sideSiegeEvent, out float bonusFlatHp, out float bonusHpRate) { var perk = ActivePatch._perk; var partyMemberHealth = new ExplainedNumber(justDeployedEngine.SiegeEngine.MaxHitPoints); var partyMemberRate = new ExplainedNumber(100); foreach (var siegeParty in sideSiegeEvent.SiegeParties.Where(x => x.MobileParty != null)) { PerkHelper.AddPerkBonusForParty(perk, siegeParty.MobileParty, ref partyMemberHealth); PerkHelper.AddPerkBonusForParty(perk, siegeParty.MobileParty, ref partyMemberRate); } bonusFlatHp = partyMemberHealth.ResultNumber - partyMemberHealth.BaseNumber; bonusHpRate = partyMemberRate.ResultNumber - partyMemberRate.BaseNumber; }
private static void ApplyPerkToSiegeEngine(SiegeEvent.SiegeEngineConstructionProgress justDeployedEngine, ISiegeEventSide sideSiegeEvent) { CalculateBonusFlatHpAndRateFromPerk(justDeployedEngine, sideSiegeEvent, out var bonusFlatHp, out _); justDeployedEngine.SetHitpoints(justDeployedEngine.Hitpoints + bonusFlatHp); SiegeEngineConstructionExtraDataManager.SetMaxHitPoints(justDeployedEngine, justDeployedEngine.Hitpoints); }
// ReSharper disable once RedundantAssignment public static void MaxHitPointsPostfix(ref float __result, ref SiegeEvent.SiegeEngineConstructionProgress __instance) => __result = SiegeEngineConstructionExtraDataManager.GetMaxHitPoints(__instance);
public static void Prefix(ISiegeEventSide siegeEventSide, SiegeEngineType attackerEngineType, SiegeEvent.SiegeEngineConstructionProgress damagedEngine) { CalculateBonusDamageAndRates(attackerEngineType, siegeEventSide, out _, out var bonusDamageOnly); damagedEngine.SetHitpoints(damagedEngine.Hitpoints - bonusDamageOnly); }
public static void SetMaxHitPoints(SiegeEvent.SiegeEngineConstructionProgress construction, float maxHp) => GetDataOrCreate(construction).MaxHitPoints = maxHp;
private static SiegeEngineConstructionData GetDataOrCreate(SiegeEvent.SiegeEngineConstructionProgress construction) { Links.TryGetValue(construction, out var data); return(data ?? CreateEmptyData(construction)); }
public static float GetMaxHitPoints(SiegeEvent.SiegeEngineConstructionProgress construction) => GetDataOrCreate(construction).MaxHitPoints;
public static void BombardPrefix(ISiegeEventSide siegeEventSide, SiegeEngineType attackerEngineType, SiegeEvent.SiegeEngineConstructionProgress damagedEngine) { if (!IsCatapult(attackerEngineType)) { return; } CalculateBonusDamageAndRates(attackerEngineType, siegeEventSide, out _, out var bonusDamage); damagedEngine.SetHitpoints(damagedEngine.Hitpoints - bonusDamage); }