public void TestGroupIdSetWhenObjectAdded() { Mock <ICombatObject> combatObject = new Mock <ICombatObject>(); Mock <ITroopStub> troopStub = new Mock <ITroopStub>(); Mock <IDbManager> dbManager = new Mock <IDbManager>(); troopStub.SetupGet(p => p.City.Id).Returns(1); combatObject.SetupProperty(p => p.GroupId); CityDefensiveCombatGroup combatGroup = new CityDefensiveCombatGroup(1, 10, troopStub.Object, dbManager.Object); combatGroup.Add(combatObject.Object); combatObject.Object.GroupId.Should().Be(10); }
public Simulation(Group attack, Group defense) { Attacker = attack; Defender = defense; CurrentRound = 0; TurnIntervalInSecond = 0; battleManager = Ioc.Kernel.Get <IBattleManagerFactory>() .CreateBattleManager(new BattleLocation(BattleLocationType.City, Defender.City.Id), new BattleOwner(BattleOwnerType.City, Defender.City.Id), Defender.City); battleManager.BattleReport.Battle = battleManager; bv = new BattleViewer(battleManager); // Add local to battle using (Concurrency.Current.Lock(Defender.Local)) { Defender.Local.BeginUpdate(); Defender.Local.AddFormation(FormationType.InBattle); Defender.Local.Template.LoadStats(TroopBattleGroup.Local); var localGroup = new CityDefensiveCombatGroup(battleManager.BattleId, 1, Defender.Local, Ioc.Kernel.Get <IDbManager>()); var combatUnitFactory = Ioc.Kernel.Get <ICombatUnitFactory>(); foreach (var kvp in Defender.Local[FormationType.Normal]) { combatUnitFactory.CreateDefenseCombatUnit(battleManager, Defender.Local, FormationType.InBattle, kvp.Key, kvp.Value).ToList().ForEach(localGroup.Add); } foreach (IStructure structure in Defender.City) { localGroup.Add(combatUnitFactory.CreateStructureCombatUnit(battleManager, structure)); } battleManager.Add(localGroup, BattleManager.BattleSide.Defense, false); Ioc.Kernel.Get <CityBattleProcedure>().MoveUnitFormation(Defender.Local, FormationType.Normal, FormationType.InBattle); Defender.Local.EndUpdate(); } // Add attack stub to battle using (Concurrency.Current.Lock(Attacker.AttackStub)) { Attacker.AttackStub.BeginUpdate(); Attacker.AttackStub.Template.LoadStats(TroopBattleGroup.Attack); Attacker.AttackStub.EndUpdate(); var attackGroup = new CityDefensiveCombatGroup(battleManager.BattleId, 2, Attacker.AttackStub, Ioc.Kernel.Get <IDbManager>()); var combatUnitFactory = Ioc.Kernel.Get <ICombatUnitFactory>(); foreach (var kvp in Attacker.AttackStub[FormationType.Normal]) { combatUnitFactory.CreateAttackCombatUnit(battleManager, Attacker.TroopObject, FormationType.InBattle, kvp.Key, kvp.Value).ToList().ForEach(attackGroup.Add); } battleManager.Add(attackGroup, BattleManager.BattleSide.Attack, false); } }
public void RunDef(String filename) { using (sw = new StreamWriter(File.Open(filename, FileMode.Append, FileAccess.Write, FileShare.ReadWrite))) { sw.WriteLine("{0} - Lvl {1} - Cnt {2} - Defending", Ioc.Kernel.Get <UnitFactory>().GetName(type, lvl), lvl, count); sw.WriteLine( "name,type,lvl,count,DealtToAtker,RecvFromAtker,HitDealt,HitRecv,MaxDealt,MinDealt,MaxRecv,MinRecv,Self,Enemy"); foreach (var kvp in Ioc.Kernel.Get <UnitFactory>().GetList()) { if (sameLevelOnly && kvp.Value.Lvl != lvl) { continue; } ushort defCount; ushort atkCount; switch (unit) { case QuantityUnit.Single: defCount = atkCount = count; break; case QuantityUnit.GroupSize: defCount = (ushort) (Ioc.Kernel.Get <UnitFactory>().GetUnitStats(type, lvl).Battle.GroupSize *count); atkCount = (ushort) (Ioc.Kernel.Get <UnitFactory>() .GetUnitStats((ushort)(kvp.Key / 100), lvl) .Battle.GroupSize *count); break; default: throw new Exception(); } var defender = new Group(); var attacker = new Group(); defender.AddToLocal(type, lvl, defCount, FormationType.Normal); attacker.AddToAttack((ushort)(kvp.Key / 100), kvp.Value.Lvl, atkCount, FormationType.Normal); sw.Write("{0},{1},{2},{3},", kvp.Value.Name, kvp.Key / 100, kvp.Value.Lvl, atkCount); var battleManager = Ioc.Kernel.Get <IBattleManagerFactory>() .CreateBattleManager(new BattleLocation(BattleLocationType.City, defender.City.Id), new BattleOwner(BattleOwnerType.City, defender.City.Id), defender.City); battleManager.ExitBattle += BmExitBattle; battleManager.UnitKilled += BattleUnitKilled; using (Concurrency.Current.Lock(defender.Local)) { defender.Local.BeginUpdate(); defender.Local.AddFormation(FormationType.InBattle); defender.Local.Template.LoadStats(TroopBattleGroup.Local); var localGroup = new CityDefensiveCombatGroup(battleManager.BattleId, 1, defender.Local, Ioc.Kernel.Get <IDbManager>()); var combatUnitFactory = Ioc.Kernel.Get <ICombatUnitFactory>(); foreach (var unitKvp in defender.Local[FormationType.Normal]) { combatUnitFactory.CreateDefenseCombatUnit(battleManager, defender.Local, FormationType.InBattle, unitKvp.Key, unitKvp.Value).ToList().ForEach(localGroup.Add); } foreach (IStructure structure in defender.City) { localGroup.Add(combatUnitFactory.CreateStructureCombatUnit(battleManager, structure)); } battleManager.Add(localGroup, BattleManager.BattleSide.Defense, false); Ioc.Kernel.Get <CityBattleProcedure>().MoveUnitFormation(defender.Local, FormationType.Normal, FormationType.InBattle); defender.Local.EndUpdate(); } using (Concurrency.Current.Lock(attacker.AttackStub)) { attacker.AttackStub.BeginUpdate(); attacker.AttackStub.Template.LoadStats(TroopBattleGroup.Attack); attacker.AttackStub.EndUpdate(); var attackGroup = new CityDefensiveCombatGroup(battleManager.BattleId, 2, attacker.AttackStub, Ioc.Kernel.Get <IDbManager>()); var combatUnitFactory = Ioc.Kernel.Get <ICombatUnitFactory>(); foreach (var unitKvp in attacker.AttackStub[FormationType.Normal]) { combatUnitFactory.CreateAttackCombatUnit(battleManager, attacker.TroopObject, FormationType.InBattle, unitKvp.Key, unitKvp.Value).ToList().ForEach(attackGroup.Add); } battleManager.Add(attackGroup, BattleManager.BattleSide.Attack, false); } using (Concurrency.Current.Lock(attacker.AttackStub, defender.Local)) { while (battleManager.ExecuteTurn()) { } } battleManager.ExitBattle -= BmExitBattle; battleManager.UnitKilled -= BattleUnitKilled; } sw.WriteLine(); } }