private void CountTargetActorAttack(IActor actor, IActor targetActor, ITacticalAct tacticalAct) { if (actor.Person is MonsterPerson) { // Монстры не могут прокачиваться. return; } if (actor.Person == null) { // Это может происходить в тестах, // если в моках не определили персонажа. //TODO Поискать решение, как всегда быть уверенным, что персонаж указан в боевых условиях, и может быть null в тестах. //TODO Эта же проверка нужна в CountActorDefeat (учёт убиства актёра). return; } var evolutionData = actor.Person.EvolutionData; //TODO Такую же проверку добавить в CountActorDefeat (учёт убиства актёра). if (evolutionData == null) { return; } var progress = new AttackActorJobProgress(targetActor, tacticalAct); _perkResolver.ApplyProgress(progress, evolutionData); }
public int ApplyToJobs_PositiveJobsForWeaponUsage_ProgressIncreased(string[] equipmentTags, string[] jobWeaponTags, int currentJobProgress) { // ARRANGE var actor = Mock.Of <IActor>(); var act = Mock.Of <ITacticalAct>(a => a.Equipment == new Equipment(new TestPropScheme { Equip = Mock.Of <IPropEquipSubScheme>(), Tags = equipmentTags })); var progress = new AttackActorJobProgress(actor, act); var jobs = new IJob[] { Mock.Of <IJob>(job => job.Scheme == Mock.Of <IJobSubScheme>( scheme => scheme.Type == JobType.AttacksActor && scheme.Data == new[] { // anonymus object like AttackActorJobData // because there is no interface to make test object with setter JsonConvert.SerializeObject(new { WeaponTags = jobWeaponTags }) } ) && job.Progress == currentJobProgress) }; // ACT var factModifiedJobs = progress.ApplyToJobs(jobs); // ASSERT return(factModifiedJobs[0].Progress); }