private static IPerson CreatePerson() { var tacticalActStatsScheme = new TestTacticalActStatsSubScheme(); var tacticalActMock = new Mock <ITacticalAct>(); tacticalActMock.SetupGet(x => x.Stats).Returns(tacticalActStatsScheme); var tacticalAct = tacticalActMock.Object; var tacticalCarrierMock = new Mock <ITacticalActCarrier>(); tacticalCarrierMock.SetupProperty(x => x.Acts, new[] { tacticalAct }); var tacticalCarrier = tacticalCarrierMock.Object; var survivalDataMock = new Mock <ISurvivalData>(); var survivalData = survivalDataMock.Object; var personMock = new Mock <IPerson>(); personMock.SetupGet(x => x.TacticalActCarrier).Returns(tacticalCarrier); personMock.SetupGet(x => x.Survival).Returns(survivalData); var person = personMock.Object; return(person); }
public void UseOn_ArmorSavePassed_ActEfficientDecrease() { // ARRANGE const OffenseType offenceType = OffenseType.Tactical; const int fakeToHitDiceRoll = 2; // успех в ToHit 2+ const int fakeArmorSaveDiceRoll = 6; // успех в ArmorSave 4+ при раных рангах const int fakeActEfficientRoll = 3; // эффективность пробрасывается D3, максимальный бросок const int expectedActEfficient = fakeActEfficientRoll - 1; // -1 даёт текущая броня var actUsageRandomSourceMock = new Mock <ITacticalActUsageRandomSource>(); actUsageRandomSourceMock.Setup(x => x.RollToHit()).Returns(fakeToHitDiceRoll); actUsageRandomSourceMock.Setup(x => x.RollArmorSave()).Returns(fakeArmorSaveDiceRoll); actUsageRandomSourceMock.Setup(x => x.RollEfficient(It.IsAny <Roll>())).Returns(fakeActEfficientRoll); var actUsageRandomSource = actUsageRandomSourceMock.Object; var actUsageService = new TacticalActUsageService( actUsageRandomSource, _perkResolver, _sectorManager); var actorMock = new Mock <IActor>(); actorMock.SetupGet(x => x.Node).Returns(new HexNode(0, 0)); var actor = actorMock.Object; var armors = new[] { new PersonArmorItem(ImpactType.Kinetic, PersonRuleLevel.Lesser, 10) }; var monsterMock = CreateMonsterMock(armors: armors); var monster = monsterMock.Object; // Настройка дествия var actScheme = new TestTacticalActStatsSubScheme { Offence = new TestTacticalActOffenceSubScheme { Type = offenceType, ApRank = 10, Impact = ImpactType.Kinetic } }; var actMock = new Mock <ITacticalAct>(); actMock.SetupGet(x => x.Stats).Returns(actScheme); var act = actMock.Object; // ACT var usedActs = new UsedTacticalActs(new[] { act }); actUsageService.UseOn(actor, monster, usedActs); // ASSERT actUsageRandomSourceMock.Verify(x => x.RollArmorSave(), Times.Once); monsterMock.Verify(x => x.TakeDamage(It.Is <int>(damage => damage == expectedActEfficient)), Times.Once); }
public void ProcessActUsage_HealSelfWithHalfHp_HpRestored() { // ARRANGE const int HEAL_EFFICIENT = 1; var actUsageRandomSourceMock = new Mock <ITacticalActUsageRandomSource>(); actUsageRandomSourceMock.Setup(x => x.RollEfficient(It.IsAny <Roll>())).Returns(HEAL_EFFICIENT); var actUsageRandomSource = actUsageRandomSourceMock.Object; var perkResolverMock = new Mock <IPerkResolver>(); var perkResolver = perkResolverMock.Object; var actUsageService = new ActorActUsageHandler(perkResolver, actUsageRandomSource); var survivalModuleMock = new Mock <ISurvivalModule>(); var survivalModule = survivalModuleMock.Object; var personMock = new Mock <IPerson>(); personMock.Setup(x => x.GetModule <ISurvivalModule>(It.IsAny <string>())).Returns(survivalModule); personMock.Setup(x => x.HasModule(It.Is <string>(x => x == nameof(ISurvivalModule)))).Returns(true); var person = personMock.Object; var actorMock = new Mock <IActor>(); actorMock.SetupGet(x => x.Node).Returns(new HexNode(0, 0)); actorMock.SetupGet(x => x.Person).Returns(person); actorMock.Setup(x => x.UseAct(It.IsAny <IGraphNode>(), It.IsAny <ICombatAct>())) .Raises <IGraphNode, ICombatAct>(x => x.UsedAct += null, (target1, act1) => new UsedActEventArgs(target1, act1)); var actor = actorMock.Object; var actStatScheme = new TestTacticalActStatsSubScheme { Effect = TacticalActEffectType.Heal, Efficient = new Roll(6, 1), Targets = TacticalActTargets.Self }; var tacticalActMock = new Mock <ICombatAct>(); tacticalActMock.SetupGet(x => x.Stats).Returns(actStatScheme); var tacticalAct = tacticalActMock.Object; var usedActs = new CombatActRoll(tacticalAct, 1); var map = Mock.Of <ISectorMap>(); // ACT actUsageService.ProcessActUsage(actor, actor, usedActs, map); // ASSERT survivalModuleMock.Verify(x => x.RestoreStat(It.Is <SurvivalStatType>(type => type == SurvivalStatType.Health), It.Is <int>(v => v == HEAL_EFFICIENT))); }
public void UseOn_ArmorSavePassed_ActEfficientDecrease() { // ARRANGE const OffenseType OFFENCETYPE = OffenseType.Tactical; const int FAKE_TOHIT_DICE_ROLL = 2; // успех в ToHit 2+ const int FAKE_ARMORSAVE_DICE_ROLL = 6; // успех в ArmorSave 4+ при раных рангах const int FAKE_ACTEFFICIENT_ROLL = 3; // эффективность пробрасывается D3, максимальный бросок const int EXPECTED_ACTEFFICIENT = FAKE_ACTEFFICIENT_ROLL - 1; // -1 даёт текущая броня var actUsageRandomSourceMock = new Mock <ITacticalActUsageRandomSource>(); actUsageRandomSourceMock.Setup(x => x.RollToHit(It.IsAny <Roll>())).Returns(FAKE_TOHIT_DICE_ROLL); actUsageRandomSourceMock.Setup(x => x.RollArmorSave()).Returns(FAKE_ARMORSAVE_DICE_ROLL); actUsageRandomSourceMock.Setup(x => x.RollEfficient(It.IsAny <Roll>())).Returns(FAKE_ACTEFFICIENT_ROLL); var actUsageRandomSource = actUsageRandomSourceMock.Object; var perkResolverMock = new Mock <IPerkResolver>(); var perkResolver = perkResolverMock.Object; var actUsageService = new ActorActUsageHandler(perkResolver, actUsageRandomSource); var actorMock = new Mock <IActor>(); actorMock.SetupGet(x => x.Node).Returns(new HexNode(0, 0)); var actor = actorMock.Object; var armors = new[] { new PersonArmorItem(ImpactType.Kinetic, PersonRuleLevel.Lesser, 10) }; var monsterMock = CreateMonsterMock(armors: armors); var monster = monsterMock.Object; // Настройка дествия var actScheme = new TestTacticalActStatsSubScheme { Offence = new TestTacticalActOffenceSubScheme { Type = OFFENCETYPE, ApRank = 10, Impact = ImpactType.Kinetic } }; var actMock = new Mock <ICombatAct>(); actMock.SetupGet(x => x.Stats).Returns(actScheme); var act = actMock.Object; var map = Mock.Of <ISectorMap>(); // ACT var usedActs = new CombatActRoll(act, FAKE_ACTEFFICIENT_ROLL); actUsageService.ProcessActUsage(actor, monster, usedActs, map); // ASSERT actUsageRandomSourceMock.Verify(x => x.RollArmorSave(), Times.Once); monsterMock.Verify(x => x.TakeDamage(It.Is <int>(damage => damage == EXPECTED_ACTEFFICIENT)), Times.Once); }
public void UseOn_HealSelfWithHalfHp_HpRestored() { // ARRANGE const int HEAL_EFFICIENT = 1; var actUsageRandomSourceMock = new Mock <ITacticalActUsageRandomSource>(); actUsageRandomSourceMock.Setup(x => x.RollEfficient(It.IsAny <Roll>())).Returns(HEAL_EFFICIENT); var actUsageRandomSource = actUsageRandomSourceMock.Object; var actUsageService = new TacticalActUsageService( actUsageRandomSource, _perkResolver, _sectorManager); var survivalDataMock = new Mock <ISurvivalData>(); var survivalData = survivalDataMock.Object; var personMock = new Mock <IPerson>(); personMock.Setup(x => x.Survival).Returns(survivalData); var person = personMock.Object; var actorMock = new Mock <IActor>(); actorMock.SetupGet(x => x.Node).Returns(new HexNode(0, 0)); actorMock.SetupGet(x => x.Person).Returns(person); actorMock.Setup(x => x.UseAct(It.IsAny <IAttackTarget>(), It.IsAny <ITacticalAct>())) .Raises <IAttackTarget, ITacticalAct>(x => x.UsedAct += null, (target1, act1) => new UsedActEventArgs(target1, act1)); var actor = actorMock.Object; var actStatScheme = new TestTacticalActStatsSubScheme { Effect = TacticalActEffectType.Heal, Efficient = new Roll(6, 1), Targets = TacticalActTargets.Self }; var tacticalActMock = new Mock <ITacticalAct>(); tacticalActMock.SetupGet(x => x.Stats).Returns(actStatScheme); var tacticalAct = tacticalActMock.Object; var usedActs = new UsedTacticalActs(new[] { tacticalAct }); // ACT actUsageService.UseOn(actor, actor, usedActs); // ASSERT survivalDataMock.Verify(x => x.RestoreStat(It.Is <SurvivalStatType>(type => type == SurvivalStatType.Health), It.Is <int>(v => v == HEAL_EFFICIENT))); }
public void UseOn_ActApGreaterRankThatArmorRank_IgnoreArmor() { // ARRANGE var offenceType = OffenseType.Tactical; var fakeToHitDiceRoll = 2; // успех в ToHit 2+ var actUsageRandomSourceMock = new Mock <ITacticalActUsageRandomSource>(); actUsageRandomSourceMock.Setup(x => x.RollToHit()).Returns(fakeToHitDiceRoll); actUsageRandomSourceMock.Setup(x => x.RollEfficient(It.IsAny <Roll>())).Returns(1); var actUsageRandomSource = actUsageRandomSourceMock.Object; var actUsageService = new TacticalActUsageService(actUsageRandomSource, _perkResolver, _sectorManager); var actorMock = new Mock <IActor>(); actorMock.SetupGet(x => x.Node).Returns(new HexNode(0, 0)); var actor = actorMock.Object; var armors = new[] { new PersonArmorItem(ImpactType.Kinetic, PersonRuleLevel.Normal, 10) }; var monsterMock = CreateMonsterMock(armors: armors); var monster = monsterMock.Object; // Настройка дествия var actScheme = new TestTacticalActStatsSubScheme { Offence = new TestTacticalActOffenceSubScheme { Type = offenceType, ApRank = 20, Impact = ImpactType.Kinetic } }; var actMock = new Mock <ITacticalAct>(); actMock.SetupGet(x => x.Stats).Returns(actScheme); var act = actMock.Object; // ACT var usedActs = new UsedTacticalActs(new[] { act }); actUsageService.UseOn(actor, monster, usedActs); // ASSERT monsterMock.Verify(x => x.TakeDamage(It.IsAny <int>()), Times.Once); actUsageRandomSourceMock.Verify(x => x.RollArmorSave(), Times.Never); }
public void UseOn_OffenceTypeVsDefenceType_Success() { // ARRANGE var offenceType = OffenseType.Tactical; var defenceType = DefenceType.TacticalDefence; var defenceLevel = PersonRuleLevel.Normal; var fakeToHitDiceRoll = 5; // 5+ - успех при нормальном уровне обороны var actUsageRandomSourceMock = new Mock <ITacticalActUsageRandomSource>(); actUsageRandomSourceMock.Setup(x => x.RollToHit()).Returns(fakeToHitDiceRoll); actUsageRandomSourceMock.Setup(x => x.RollEfficient(It.IsAny <Roll>())).Returns(1); var actUsageRandomSource = actUsageRandomSourceMock.Object; var actUsageService = new TacticalActUsageService(actUsageRandomSource, _perkResolver, _sectorManager); var actorMock = new Mock <IActor>(); actorMock.SetupGet(x => x.Node).Returns(new HexNode(0, 0)); var actor = actorMock.Object; var defences = new[] { new PersonDefenceItem(defenceType, defenceLevel) }; var monsterMock = CreateMonsterMock(defences); var monster = monsterMock.Object; // Настройка дествия var actScheme = new TestTacticalActStatsSubScheme { Offence = new TestTacticalActOffenceSubScheme { Type = offenceType } }; var actMock = new Mock <ITacticalAct>(); actMock.SetupGet(x => x.Stats).Returns(actScheme); var act = actMock.Object; // ACT var usedActs = new UsedTacticalActs(new[] { act }); actUsageService.UseOn(actor, monster, usedActs); // ASSERT monsterMock.Verify(x => x.TakeDamage(It.IsAny <int>()), Times.Once); }
private static ITacticalAct CreateSimpleAct() { var actMock = new Mock <ITacticalAct>(); var actStatScheme = new TestTacticalActStatsSubScheme { Range = new Range <int>(1, 2) }; actMock.SetupGet(x => x.Stats).Returns(actStatScheme); var act = actMock.Object; return(act); }
private static ITacticalAct CreateActWithResolvedCooldown() { var actMock = new Mock <ITacticalAct>(); var actStatScheme = new TestTacticalActStatsSubScheme { Range = new Range <int>(1, 2) }; actMock.SetupGet(x => x.Stats).Returns(actStatScheme); actMock.SetupGet(x => x.CurrentCooldown).Returns(0); var act = actMock.Object; return(act); }
public async Task SetUpAsync() { var actUsageRandomSourceMock = new Mock <ITacticalActUsageRandomSource>(); actUsageRandomSourceMock.Setup(x => x.RollToHit(It.IsAny <Roll>())).Returns(6); actUsageRandomSourceMock.Setup(x => x.RollEfficient(It.IsAny <Roll>())).Returns(1); _actUsageRandomSource = actUsageRandomSourceMock.Object; _perkResolverMock = new Mock <IPerkResolver>(); _perkResolver = _perkResolverMock.Object; var personMock = new Mock <IPerson>(); _person = personMock.Object; var evolutionDataMock = new Mock <IEvolutionData>(); var evolutionData = evolutionDataMock.Object; personMock.SetupGet(x => x.EvolutionData).Returns(evolutionData); var actScheme = new TestTacticalActStatsSubScheme { Offence = new TestTacticalActOffenceSubScheme { Type = OffenseType.Tactical, Impact = ImpactType.Kinetic, ApRank = 10 } }; var actMock = new Mock <ITacticalAct>(); actMock.SetupGet(x => x.Stats).Returns(actScheme); _act = actMock.Object; var sectorManagerMock = new Mock <ISectorManager>(); var sectorManager = sectorManagerMock.Object; var map = await SquareMapFactory.CreateAsync(3); var sectorMock = new Mock <ISector>(); sectorMock.SetupGet(x => x.Map).Returns(map); var sector = sectorMock.Object; sectorManagerMock.SetupGet(x => x.CurrentSector).Returns(sector); _sectorManager = sectorManager; }
private static ITacticalAct CreateTestAct() { var actScheme = new TestTacticalActStatsSubScheme { Offence = new TestTacticalActOffenceSubScheme { Type = OffenseType.Tactical, Impact = ImpactType.Kinetic, ApRank = 10 } }; var actMock = new Mock <ITacticalAct>(); actMock.SetupGet(x => x.Stats).Returns(actScheme); var act = actMock.Object; return(act); }
public async Task SetUpAsync() { var actUsageRandomSourceMock = new Mock <ITacticalActUsageRandomSource>(); actUsageRandomSourceMock.Setup(x => x.RollToHit(It.IsAny <Roll>())).Returns(6); actUsageRandomSourceMock.Setup(x => x.RollEfficient(It.IsAny <Roll>())).Returns(1); _actUsageRandomSource = actUsageRandomSourceMock.Object; var personMock = new Mock <IPerson>(); _person = personMock.Object; var evolutionModuleMock = new Mock <IEvolutionModule>(); var evolutionModule = evolutionModuleMock.Object; personMock.Setup(x => x.GetModule <IEvolutionModule>(It.IsAny <string>())).Returns(evolutionModule); var actScheme = new TestTacticalActStatsSubScheme { Offence = new TestTacticalActOffenceSubScheme { Type = OffenseType.Tactical, Impact = ImpactType.Kinetic, ApRank = 10 } }; var actMock = new Mock <ITacticalAct>(); actMock.SetupGet(x => x.Stats).Returns(actScheme); _act = actMock.Object; var map = await SquareMapFactory.CreateAsync(3).ConfigureAwait(false); var sectorMock = new Mock <ISector>(); sectorMock.SetupGet(x => x.Map).Returns(map); _sector = sectorMock.Object; }
public async System.Threading.Tasks.Task SetUpAsync() { Container = new ServiceContainer(); var testMap = await SquareMapFactory.CreateAsync(10); var sectorMock = new Mock <ISector>(); sectorMock.SetupGet(x => x.Map).Returns(testMap); var sector = sectorMock.Object; var sectorManagerMock = new Mock <ISectorManager>(); sectorManagerMock.SetupGet(x => x.CurrentSector).Returns(sector); var sectorManager = sectorManagerMock.Object; var actMock = new Mock <ITacticalAct>(); var actStatScheme = new TestTacticalActStatsSubScheme { Range = new Range <int>(1, 2) }; actMock.SetupGet(x => x.Stats).Returns(actStatScheme); var act = actMock.Object; var actCarrierMock = new Mock <ITacticalActCarrier>(); actCarrierMock.SetupGet(x => x.Acts) .Returns(new[] { act }); var actCarrier = actCarrierMock.Object; var equipmentCarrierMock = new Mock <IEquipmentCarrier>(); equipmentCarrierMock.SetupGet(x => x.Slots).Returns(new[] { new PersonSlotSubScheme { Types = EquipmentSlotTypes.Hand } }); var equipmentCarrier = equipmentCarrierMock.Object; var personMock = new Mock <IPerson>(); personMock.SetupGet(x => x.TacticalActCarrier).Returns(actCarrier); personMock.SetupGet(x => x.EquipmentCarrier).Returns(equipmentCarrier); var person = personMock.Object; var actorMock = new Mock <IActor>(); var actorNode = testMap.Nodes.OfType <HexNode>().SelectBy(0, 0); actorMock.SetupGet(x => x.Node).Returns(actorNode); actorMock.SetupGet(x => x.Person).Returns(person); var actor = actorMock.Object; var actorVmMock = new Mock <IActorViewModel>(); actorVmMock.SetupProperty(x => x.Actor, actor); var actorVm = actorVmMock.Object; var humanTaskSourceMock = new Mock <IHumanActorTaskSource>(); var humanTaskSource = humanTaskSourceMock.Object; var playerStateMock = new Mock <ISectorUiState>(); playerStateMock.SetupProperty(x => x.ActiveActor, actorVm); playerStateMock.SetupProperty(x => x.TaskSource, humanTaskSource); var playerState = playerStateMock.Object; var gameLoopMock = new Mock <IGameLoop>(); var gameLoop = gameLoopMock.Object; var usageServiceMock = new Mock <ITacticalActUsageService>(); var usageService = usageServiceMock.Object; Container.Register(factory => sectorManager, new PerContainerLifetime()); Container.Register(factory => humanTaskSourceMock, new PerContainerLifetime()); Container.Register(factory => playerState, new PerContainerLifetime()); Container.Register(factory => gameLoop, new PerContainerLifetime()); Container.Register(factory => usageService, new PerContainerLifetime()); RegisterSpecificServices(testMap, playerStateMock); }
public void UseOn_DecreaseBullets_BulletRemovedFromInventory() { // ARRANGE var handlerSelector = CreateEmptyHandlerSelector(); var actUsageService = new TacticalActUsageService( _actUsageRandomSource, handlerSelector); var personMock = new Mock <IPerson>(); var person = personMock.Object; var actorMock = new Mock <IActor>(); actorMock.SetupGet(x => x.Node).Returns(new HexNode(0, 0)); actorMock.SetupGet(x => x.Person).Returns(person); var actor = actorMock.Object; var monsterMock = CreateOnHitMonsterMock(); var monster = monsterMock.Object; var actStatsSubScheme = new TestTacticalActStatsSubScheme { Offence = new TestTacticalActOffenceSubScheme { Type = OffenseType.Tactical, Impact = ImpactType.Kinetic, ApRank = 10 } }; var actConstrainsSubScheme = new TestTacticalActConstrainsSubScheme { PropResourceType = "7-62", PropResourceCount = 1 }; var inventory = new InventoryModule(); var bulletScheme = new TestPropScheme { Sid = "bullet-7-62", Bullet = new TestPropBulletSubScheme { Caliber = "7-62" } }; inventory.Add(new Resource(bulletScheme, 10)); personMock.Setup(x => x.GetModule <IInventoryModule>(It.IsAny <string>())).Returns(inventory); var actMock = new Mock <ITacticalAct>(); actMock.SetupGet(x => x.Stats).Returns(actStatsSubScheme); actMock.SetupGet(x => x.Constrains).Returns(actConstrainsSubScheme); var shootAct = actMock.Object; var actTargetInfo = new ActTargetInfo(monster, monster.Node); var usedActs = new UsedTacticalActs(new[] { shootAct }); // ACT actUsageService.UseOn(actor, actTargetInfo, usedActs, _sector); // ASSERT var bullets = inventory.CalcActualItems().Single(x => x.Scheme.Sid == "bullet-7-62") as Resource; bullets.Count.Should().Be(9); }