public void SetEquipment_SetSingleEquipment_HasActs() { // ARRANGE var slotSchemes = new[] { new PersonSlotSubScheme { Types = EquipmentSlotTypes.Hand } }; var personScheme = new PersonScheme { Slots = slotSchemes }; var defaultActScheme = new TacticalActScheme { Stats = new TacticalActStatsSubScheme { Efficient = new Range <float>(1, 1) }, Dependency = new[] { new TacticalActDependencySubScheme(CombatStatType.Melee, 1) } }; var person = new HumanPerson(personScheme, defaultActScheme, null); var propScheme = new PropScheme { Equip = new TestPropEquipSubScheme { SlotTypes = new[] { EquipmentSlotTypes.Hand } } }; var tacticalActScheme = new TacticalActScheme { Stats = new TacticalActStatsSubScheme { Efficient = new Range <float>(1, 1), }, Dependency = new[] { new TacticalActDependencySubScheme(CombatStatType.Undefined, 1) } }; var equipment = new Equipment(propScheme, new[] { tacticalActScheme }); const int expectedSlotIndex = 0; // ACT person.EquipmentCarrier.SetEquipment(equipment, expectedSlotIndex); // ARRANGE person.TacticalActCarrier.Acts[0].Stats.Should().Be(tacticalActScheme.Stats); }
public void SetEquipment_SetSingleEquipment_HasActs() { // ARRANGE var slotSchemes = new[] { new PersonSlotSubScheme { Types = EquipmentSlotTypes.Hand } }; var personScheme = new PersonScheme { Slots = slotSchemes }; var defaultActScheme = new TestTacticalActScheme { Stats = new TestTacticalActStatsSubScheme() }; var evolutionDataMock = new Mock <IEvolutionData>(); var evolutionData = evolutionDataMock.Object; var survivalRandomSourceMock = new Mock <ISurvivalRandomSource>(); var survivalRandomSource = survivalRandomSourceMock.Object; var person = new HumanPerson(personScheme, defaultActScheme, evolutionData, survivalRandomSource); var propScheme = new TestPropScheme { Equip = new TestPropEquipSubScheme { SlotTypes = new[] { EquipmentSlotTypes.Hand } } }; var tacticalActScheme = new TestTacticalActScheme { Stats = new TestTacticalActStatsSubScheme() }; var equipment = new Equipment(propScheme, new[] { tacticalActScheme }); const int expectedSlotIndex = 0; // ACT person.EquipmentCarrier[expectedSlotIndex] = equipment; // ARRANGE person.TacticalActCarrier.Acts[0].Stats.Should().Be(tacticalActScheme.Stats); }
private ActorViewModel CreateHumanActorVm([NotNull] IPlayer player, [NotNull] PersonScheme personScheme, [NotNull] IActorManager actorManager, [NotNull] IMapNode startNode, [NotNull] IEnumerable <MapNodeVM> nodeVMs) { if (_personManager.Person == null) { var inventory = new Inventory(); var evolutionData = new EvolutionData(_schemeService); //evolutionData.PerkLeveledUp += (sender, args) => Debug.Log("LevelUp"); var defaultActScheme = _schemeService.GetScheme <TacticalActScheme>(personScheme.DefaultAct); var person = new HumanPerson(personScheme, defaultActScheme, evolutionData, inventory); _personManager.Person = person; AddEquipmentToActor(inventory, "battle-axe"); AddEquipmentToActor(inventory, "short-sword"); AddEquipmentToActor(inventory, "steel-helmet"); AddEquipmentToActor(inventory, "steel-armor"); AddEquipmentToActor(inventory, "pistol"); } var actor = new Actor(_personManager.Person, player, startNode, _personManager.ActorState); _personManager.ActorState = actor.State; actorManager.Add(actor); var actorVm = Instantiate(ActorPrefab, transform); var actorGraphic = Instantiate(HumanoidGraphicPrefab, actorVm.transform); actorGraphic.transform.position = new Vector3(0, 0.2f, 0); actorVm.GraphicRoot = actorGraphic; var graphicController = actorVm.gameObject.AddComponent <HumanActorGraphicController>(); graphicController.Actor = actor; graphicController.Graphic = actorGraphic; var actorNodeVm = nodeVMs.Single(x => x.Node == actor.Node); var actorPosition = actorNodeVm.transform.position + new Vector3(0, 0, -1); actorVm.transform.position = actorPosition; actorVm.Actor = actor; actorVm.Actor.OpenedContainer += PlayerActorOnOpenedContainer; actorVm.Actor.UsedAct += ActorOnUsedAct; return(actorVm); }
private IActor CreateHumanActor([NotNull] IPlayer player, [NotNull] PersonScheme personScheme, [NotNull] IMapNode startNode) { var schemeService = Container.GetInstance <ISchemeService>(); var evolutionData = new EvolutionData(schemeService); var inventory = new Inventory(); var defaultActScheme = schemeService.GetScheme <TacticalActScheme>(personScheme.DefaultAct); var person = new HumanPerson(personScheme, defaultActScheme, evolutionData, inventory); var actor = new Actor(person, player, startNode); return(actor); }
public HumanPerson(PersonScheme scheme, TacticalActScheme defaultActScheme, IEvolutionData evolutionData) { Scheme = scheme ?? throw new ArgumentNullException(nameof(scheme)); _defaultActScheme = defaultActScheme ?? throw new ArgumentNullException(nameof(defaultActScheme)); Name = scheme.Sid; Effects = new EffectCollection(); Effects.Added += Effects_CollectionChanged; Effects.Removed += Effects_CollectionChanged; Effects.Changed += Effects_CollectionChanged; EquipmentCarrier = new EquipmentCarrier(Scheme.Slots); EquipmentCarrier.EquipmentChanged += EquipmentCarrier_EquipmentChanged; TacticalActCarrier = new TacticalActCarrier(); EvolutionData = evolutionData; if (EvolutionData != null) { EvolutionData.PerkLeveledUp += EvolutionData_PerkLeveledUp; } CombatStats = new CombatStats(); ClearCombatStats((CombatStats)CombatStats); if (EvolutionData != null) { CalcCombatStats(CombatStats, EvolutionData, Effects); } TacticalActCarrier.Acts = CalcActs(EquipmentCarrier.Equipments, CombatStats); Survival = new SurvivalData(); Survival.StatCrossKeyValue += Survival_StatCrossKeyValue; }
public HumanPerson(PersonScheme scheme, TacticalActScheme defaultScheme, IEvolutionData evolutionData, Inventory inventory) : this(scheme, defaultScheme, evolutionData) { Inventory = inventory; }
public void HumanPerson_PerkLeveledUp_StatsRecalculated() { // ARRANGE var slotSchemes = new[] { new PersonSlotSubScheme { Types = EquipmentSlotTypes.Hand } }; var personScheme = new PersonScheme { Slots = slotSchemes }; var defaultActScheme = new TacticalActScheme { Stats = new TacticalActStatsSubScheme { Efficient = new Range <float>(1, 1) }, Dependency = new[] { new TacticalActDependencySubScheme(CombatStatType.Melee, 1) } }; var perkMock = new Mock <IPerk>(); perkMock.SetupGet(x => x.CurrentLevel).Returns(new PerkLevel(0, 0)); perkMock.SetupGet(x => x.Scheme).Returns(new PerkScheme { Levels = new[] { new PerkLevelSubScheme { Rules = new [] { new PerkRuleSubScheme { Type = PersonRuleType.Ballistic, Level = PersonRuleLevel.Normal } } } } }); var perk = perkMock.Object; var evolutionDataMock = new Mock <IEvolutionData>(); evolutionDataMock.SetupGet(x => x.Perks) .Returns(new[] { perk }); var evolutionData = evolutionDataMock.Object; // ACT var person = new HumanPerson(personScheme, defaultActScheme, evolutionData); // ASSERT var testedStat = person.CombatStats.Stats.Single(x => x.Stat == CombatStatType.Ballistic); testedStat.Value.Should().Be(11); }
public void HumanPerson_PerkLeveledUp_StatsRecalculated() { // ARRANGE var slotSchemes = new[] { new PersonSlotSubScheme { Types = EquipmentSlotTypes.Hand } }; var personScheme = new PersonScheme { Slots = slotSchemes }; var defaultActScheme = new TestTacticalActScheme { Stats = new TestTacticalActStatsSubScheme() }; var perkMock = new Mock <IPerk>(); perkMock.SetupGet(x => x.CurrentLevel).Returns(new PerkLevel(0, 0)); perkMock.SetupGet(x => x.Scheme).Returns(new PerkScheme { Levels = new[] { new PerkLevelSubScheme { Rules = new [] { new PerkRuleSubScheme { Type = PersonRuleType.Ballistic, Level = PersonRuleLevel.Lesser } } } } }); var perk = perkMock.Object; var stats = new[] { new SkillStatItem { Stat = SkillStatType.Ballistic, Value = 10 } }; var evolutionDataMock = new Mock <IEvolutionData>(); evolutionDataMock.SetupGet(x => x.Perks).Returns(new[] { perk }); evolutionDataMock.SetupGet(x => x.Stats).Returns(stats); var evolutionData = evolutionDataMock.Object; var survivalRandomSourceMock = new Mock <ISurvivalRandomSource>(); var survivalRandomSource = survivalRandomSourceMock.Object; // ACT var person = new HumanPerson(personScheme, defaultActScheme, evolutionData, survivalRandomSource); // ASSERT var testedStat = person.EvolutionData.Stats.Single(x => x.Stat == SkillStatType.Ballistic); testedStat.Value.Should().Be(11); }
public void HumanPerson_SwordSkillsPerk_DamageOfActIsIncreased() { // ARRANGE var slotSchemes = new[] { new PersonSlotSubScheme { Types = EquipmentSlotTypes.Hand } }; var personScheme = new PersonScheme { Hp = 10, Slots = slotSchemes }; var defaultActScheme = new TestTacticalActScheme { Stats = new TestTacticalActStatsSubScheme() }; var perkMock = new Mock <IPerk>(); perkMock.SetupGet(x => x.CurrentLevel).Returns(new PerkLevel(0, 0)); perkMock.SetupGet(x => x.Scheme).Returns(new PerkScheme { Levels = new[] { new PerkLevelSubScheme { Rules = new [] { new PerkRuleSubScheme { Type = PersonRuleType.Damage, Level = PersonRuleLevel.Absolute, Params = "{\"WeaponTags\":[\"sword\"]}" } } } } }); var perk = perkMock.Object; var stats = new SkillStatItem[0]; var evolutionDataMock = new Mock <IEvolutionData>(); evolutionDataMock.SetupGet(x => x.Perks).Returns(new[] { perk }); evolutionDataMock.SetupGet(x => x.Stats).Returns(stats); var evolutionData = evolutionDataMock.Object; var survivalRandomSourceMock = new Mock <ISurvivalRandomSource>(); var survivalRandomSource = survivalRandomSourceMock.Object; var swordScheme = new TestPropScheme { Tags = new[] { "sword" }, Equip = new TestPropEquipSubScheme { SlotTypes = new[] { EquipmentSlotTypes.Hand } } }; var swordAct = new TestTacticalActScheme { Stats = new TestTacticalActStatsSubScheme { Effect = TacticalActEffectType.Damage, Efficient = new Roll(1, 1) } }; var equipment = new Equipment(swordScheme, new ITacticalActScheme[] { swordAct }); // ACT var person = new HumanPerson(personScheme, defaultActScheme, evolutionData, survivalRandomSource); person.EquipmentCarrier[0] = equipment; // ASSERT var testedAct = person.TacticalActCarrier.Acts[0]; testedAct.Efficient.Modifiers.ResultBuff.Should().Be(10); }