public void UseOn(IActor actor, IAttackTarget target, UsedTacticalActs usedActs) { foreach (var act in usedActs.Primary) { if (!act.Stats.Targets.HasFlag(TacticalActTargets.Self) && actor == target) { throw new ArgumentException("Актёр не может атаковать сам себя", nameof(target)); } UseAct(actor, target, act); } // Использование дополнительных действий. // Используются с некоторой вероятностью. foreach (var act in usedActs.Secondary) { var useSuccessRoll = GetUseSuccessRoll(); var useFactRoll = GetUseFactRoll(); if (useFactRoll < useSuccessRoll) { continue; } UseAct(actor, target, act); } }
public void UseOn(IActor actor, ActTargetInfo target, UsedTacticalActs usedActs, ISector sector) { if (actor is null) { throw new ArgumentNullException(nameof(actor)); } if (target is null) { throw new ArgumentNullException(nameof(target)); } if (usedActs is null) { throw new ArgumentNullException(nameof(usedActs)); } if (sector is null) { throw new ArgumentNullException(nameof(sector)); } Debug.Assert(SectorHasCurrentActor(sector, actor), "Current actor must be in sector"); Debug.Assert(SectorHasAttackTarget(sector, target.TargetObject), "Target must be in sector"); foreach (var act in usedActs.Primary) { if (!act.Stats.Targets.HasFlag(TacticalActTargets.Self) && actor == target) { throw new ArgumentException("Актёр не может атаковать сам себя", nameof(target)); } UseAct(actor, target, act, sector.Map); } // Использование дополнительных действий. // Используются с некоторой вероятностью. foreach (var act in usedActs.Secondary) { var useSuccessRoll = GetUseSuccessRoll(); var useFactRoll = GetUseFactRoll(); if (useFactRoll < useSuccessRoll) { continue; } UseAct(actor, target, act, sector.Map); } }