コード例 #1
0
        public AttackCombatUnit(uint id,
                                uint battleId,
                                ITroopObject troopObject,
                                FormationType formation,
                                ushort type,
                                byte lvl,
                                ushort count,
                                UnitFactory unitFactory,
                                IBattleFormulas battleFormulas,
                                Formula formula,
                                ITileLocator tileLocator,
                                IDbManager dbManager)
            : base(id, battleId, battleFormulas, dbManager)
        {
            this.troopObject = troopObject;
            this.formation   = formation;
            this.type        = type;
            this.count       = count;
            this.formula     = formula;
            this.tileLocator = tileLocator;
            this.lvl         = lvl;

            stats          = troopObject.Stub.Template[type];
            LeftOverHp     = stats.MaxHp;
            eachUnitUpkeep = unitFactory.GetUnitStats(type, lvl).Upkeep;
        }
コード例 #2
0
        public void Remove_ProperlyLocksRegions(
            ISimpleGameObject simpleGameObject,
            [Frozen] IRegionLocator regionLocator,
            IRegion region0,
            IRegion region1,
            IRegion region2,
            [Frozen] ITileLocator tileLocator,
            RegionManager regionManager)
        {
            simpleGameObject.InWorld.Returns(true);
            regionLocator.GetRegionIndex(0, 0).ReturnsForAnyArgs <ushort>(2);

            regionLocator.GetRegionIndex(1, 1).Returns <ushort>(0);
            regionLocator.GetRegionIndex(1, 2).Returns <ushort>(0);
            regionLocator.GetRegionIndex(2, 1).Returns <ushort>(1);

            tileLocator.ForeachMultitile(0, 0, 0).ReturnsForAnyArgs(new[]
            {
                new Position(1, 1),
                new Position(2, 1),
            });

            regionManager.AddRegion(region0);
            regionManager.AddRegion(region1);
            regionManager.AddRegion(region2);

            regionManager.Remove(simpleGameObject);

            region0.Received(1).EnterWriteLock();
            region1.Received(1).EnterWriteLock();
            region0.Received(1).ExitWriteLock();
            region1.Received(1).ExitWriteLock();
            region2.DidNotReceive().EnterWriteLock();
        }
コード例 #3
0
        public void Add_WhenSomeTilesAreInInvalidRegion_ShouldIgnoreRegions(
            ISimpleGameObject simpleGameObject,
            [Frozen] IRegionLocator regionLocator,
            IRegion region0,
            [Frozen] ITileLocator tileLocator,
            RegionManager regionManager)
        {
            simpleGameObject.PrimaryPosition.Returns(new Position(1, 1));
            regionLocator.GetRegionIndex(0, 0).ReturnsForAnyArgs <ushort>(2);

            regionLocator.GetRegionIndex(1, 1).Returns <ushort>(0);
            regionLocator.GetRegionIndex(2, 1).Returns <ushort>(1);

            tileLocator.ForeachMultitile(simpleGameObject).Returns(new[]
            {
                new Position(1, 1),
                new Position(2, 1),
            });

            regionManager.AddRegion(region0);

            regionManager.Add(simpleGameObject);

            region0.Received(1).AddObjectToTile(simpleGameObject, 1, 1);
        }
コード例 #4
0
        public void ObjectUpdateEvent_LocksBothPreviousAndCurrentRegions(
            ISimpleGameObject simpleGameObject,
            [Frozen] IRegionLocator regionLocator,
            IRegion region0,
            IRegion region1,
            [Frozen] ITileLocator tileLocator,
            RegionManager regionManager)
        {
            simpleGameObject.InWorld.Returns(true);
            simpleGameObject.Size.Returns <byte>(11);
            simpleGameObject.PrimaryPosition.Returns(new Position(1, 2));

            regionManager.AddRegion(region0);
            regionManager.AddRegion(region1);

            regionLocator.GetRegionIndex(1, 9).Returns <ushort>(0);
            regionLocator.GetRegionIndex(2, 9).Returns <ushort>(1);

            tileLocator.ForeachMultitile(1, 2, 11).Returns(new[]
            {
                new Position(1, 9)
            });

            tileLocator.ForeachMultitile(2, 3, 11).Returns(new[]
            {
                new Position(2, 9)
            });

            regionManager.UpdateObject(simpleGameObject, 2, 3);

            region0.Received(1).EnterWriteLock();
            region1.Received(1).EnterWriteLock();
            region0.Received(1).ExitWriteLock();
            region1.Received(1).ExitWriteLock();
        }
コード例 #5
0
        public void Remove_WhenATileIsInInvalidRegion_RemovesFromAllOtherTilesAndIgnoresInvalidTile(
            ISimpleGameObject simpleGameObject,
            [Frozen] IRegionLocator regionLocator,
            IRegion region0,
            [Frozen] ITileLocator tileLocator,
            RegionManager regionManager)
        {
            simpleGameObject.InWorld.Returns(true);
            simpleGameObject.PrimaryPosition.Returns(new Position(1, 2));

            regionLocator.GetRegionIndex(1, 1).Returns <ushort>(0);
            regionLocator.GetRegionIndex(2, 1).Returns <ushort>(1);

            tileLocator.ForeachMultitile(0, 0, 0).ReturnsForAnyArgs(new[]
            {
                new Position(1, 1),
                new Position(2, 1),
            });

            regionManager.AddRegion(region0);

            regionManager.Remove(simpleGameObject);

            region0.Received(1).Remove(simpleGameObject, 1, 2);
            region0.Received(1).RemoveObjectFromTile(simpleGameObject, 1, 1);
        }
コード例 #6
0
 public StrongholdConfigurator(NameGenerator nameGenerator, MapFactory mapFactory, ITileLocator tileLocator, IRegionManager regionManager)
 {
     this.nameGenerator = nameGenerator;
     this.mapFactory    = mapFactory;
     this.tileLocator   = tileLocator;
     this.regionManager = regionManager;
 }
コード例 #7
0
 public CombatStructure(uint id,
                        uint battleId,
                        IStructure structure,
                        BattleStats stats,
                        decimal hp,
                        ushort type,
                        byte lvl,
                        string theme,
                        Formula formula,
                        IActionFactory actionFactory,
                        IBattleFormulas battleFormulas,
                        ITileLocator tileLocator,
                        IRegionManager regionManager,
                        IDbManager dbManager)
     : base(id, battleId, battleFormulas, dbManager)
 {
     Structure          = structure;
     this.formula       = formula;
     this.actionFactory = actionFactory;
     this.tileLocator   = tileLocator;
     this.regionManager = regionManager;
     this.stats         = stats;
     this.hp            = hp;
     this.type          = type;
     this.lvl           = lvl;
     this.Theme         = theme;
 }
コード例 #8
0
        public StrongholdManager(IStrongholdConfigurator strongholdConfigurator,
                                 IStrongholdFactory strongholdFactory,
                                 IRegionManager regionManager,
                                 Chat chat,
                                 IDbManager dbManager,
                                 ISimpleStubGeneratorFactory simpleStubGeneratorFactory,
                                 Formula formula,
                                 ICityManager cityManager,
                                 IActionFactory actionFactory,
                                 ITileLocator tileLocator,
                                 ITroopObjectInitializerFactory troopInitializerFactory)
        {
            idGenerator = new LargeIdGenerator(Config.stronghold_id_max, Config.stronghold_id_min);
            strongholds = new ConcurrentDictionary <uint, IStronghold>();

            this.strongholdConfigurator = strongholdConfigurator;
            this.strongholdFactory      = strongholdFactory;
            this.regionManager          = regionManager;
            this.chat                    = chat;
            this.dbManager               = dbManager;
            this.formula                 = formula;
            this.actionFactory           = actionFactory;
            this.tileLocator             = tileLocator;
            this.troopInitializerFactory = troopInitializerFactory;

            cityManager.CityAdded += CityManagerCityAdded;
            simpleStubGenerator    = simpleStubGeneratorFactory.CreateSimpleStubGenerator(formula.StrongholdUnitRatio(), formula.StrongholdUnitType());
        }
コード例 #9
0
 public Tribe(IPlayer owner,
              string name,
              Procedure procedure,
              IDbManager dbManager,
              Formula formula,
              IAssignmentFactory assignmentFactory,
              ICityManager cityManager,
              IStrongholdManager strongholdManager,
              ITileLocator tileLocator,
              IChannel channel)
     : this(
         owner : owner,
         name : name,
         desc : string.Empty,
         level : 1,
         victoryPoints : 0,
         attackPoints : 0,
         defensePoints : 0,
         resource : new Resource(),
         created : SystemClock.Now,
         procedure : procedure,
         dbManager : dbManager,
         formula : formula,
         assignmentFactory : assignmentFactory,
         cityManager : cityManager,
         strongholdManager : strongholdManager,
         tileLocator : tileLocator,
         channel : channel)
 {
 }
コード例 #10
0
        public void Add_ShouldAddObjectToAllTiles(
            ISimpleGameObject simpleGameObject,
            [Frozen] IRegionLocator regionLocator,
            IRegion region0,
            IRegion region1,
            IRegion region2,
            [Frozen] ITileLocator tileLocator,
            RegionManager regionManager)
        {
            simpleGameObject.PrimaryPosition.Returns(new Position(1, 2));
            regionLocator.GetRegionIndex(0, 0).ReturnsForAnyArgs <ushort>(2);

            regionLocator.GetRegionIndex(1, 1).Returns <ushort>(0);
            regionLocator.GetRegionIndex(1, 2).Returns <ushort>(0);
            regionLocator.GetRegionIndex(2, 1).Returns <ushort>(1);

            tileLocator.ForeachMultitile(simpleGameObject).Returns(new[]
            {
                new Position(1, 1),
                new Position(1, 2),
                new Position(2, 1),
            });

            regionManager.AddRegion(region0);
            regionManager.AddRegion(region1);
            regionManager.AddRegion(region2);

            regionManager.Add(simpleGameObject);

            region0.Received(1).AddObjectToTile(simpleGameObject, 1, 1);
            region0.Received(1).AddObjectToTile(simpleGameObject, 1, 2);
            region1.Received(1).AddObjectToTile(simpleGameObject, 2, 1);
            region2.DidNotReceive().AddObjectToTile(Arg.Any <ISimpleGameObject>(), Arg.Any <uint>(), Arg.Any <uint>());
        }
コード例 #11
0
        public CombatList(IDbManager manager, ITileLocator tileLocator, IBattleFormulas battleFormulas)
            : base(manager)
        {
            this.tileLocator    = tileLocator;
            this.battleFormulas = battleFormulas;

            ItemAdded += ObjectAdded;
        }
コード例 #12
0
 public ResourceSendActiveAction(ITileLocator tileLocator,
                                 IWorld world,
                                 Formula formula,
                                 ILocker locker)
 {
     this.tileLocator = tileLocator;
     this.world       = world;
     this.formula     = formula;
     this.locker      = locker;
 }
コード例 #13
0
 public TroopMovePassiveAction(Formula formula,
                               ITileLocator tileLocator,
                               IGameObjectLocator world,
                               ILocker locker)
 {
     this.formula     = formula;
     this.tileLocator = tileLocator;
     this.world       = world;
     this.locker      = locker;
 }
コード例 #14
0
        public StructureBuildActiveActionExecuteBuilder(IFixture fixture)
        {
            this.fixture = fixture;

            requirementCsvFactory = fixture.Freeze <IRequirementCsvFactory>();
            requirementCsvFactory
            .GetLayoutRequirement(Arg.Any <ushort>(), Arg.Any <byte>())
            .Validate(Arg.Any <IStructure>(), Arg.Any <ushort>(), Arg.Any <uint>(), Arg.Any <uint>(), Arg.Any <byte>())
            .Returns(true);

            structureBaseStats = fixture.Freeze <IStructureBaseStats>();
            structureBaseStats.Size.Returns <byte>(0);
            var structureCost = new Resource(1234, 8446, 1343, 1234, 1246);

            structureBaseStats.Cost.Returns(structureCost);

            var structure = fixture.Freeze <IStructure>();

            structure.Stats.Base.Returns(structureBaseStats);

            objectTypeFactory = fixture.Freeze <IObjectTypeFactory>();
            objectTypeFactory.IsObjectType("NoRoadRequired", Arg.Any <ushort>()).Returns(true);

            city = fixture.Create <ICity>();
            city.PrimaryPosition.Returns(new Position(99, 98));
            city.Radius.Returns <byte>(5);
            city.Resource.HasEnough(structureBaseStats.Cost).Returns(true);
            city.CreateStructure(Arg.Any <ushort>(), Arg.Any <byte>(), Arg.Any <uint>(), Arg.Any <uint>()).Returns(structure);

            roadPathFinder = fixture.Freeze <IRoadPathFinder>();
            roadPathFinder.CanBuild(Arg.Any <Position>(), Arg.Any <byte>(), city, Arg.Any <bool>()).Returns(Error.Ok);

            tileLocator = fixture.Freeze <ITileLocator>();
            tileLocator.TileDistance(new Position(99, 98), 1, Arg.Any <Position>(), 1).Returns(1);

            world = fixture.Freeze <IWorld>();
            ICity outCity;

            world.TryGetObjects(Arg.Any <uint>(), out outCity).Returns(x =>
            {
                x[1] = city;
                return(true);
            });
            world.Regions.GetObjectsInTile(Arg.Any <uint>(), Arg.Any <uint>()).Returns(new List <ISimpleGameObject>());
            world.Regions.IsValidXandY(0, 0).ReturnsForAnyArgs(true);
            world.Regions.Add(structure).Returns(true);

            structureCsvFactory = fixture.Freeze <IStructureCsvFactory>();
            structureCsvFactory.GetBaseStats(0, 0).ReturnsForAnyArgs(structureBaseStats);

            formula = Substitute.For <Formula>();
            formula.CityMaxConcurrentBuildActions(0, 0, null, null).ReturnsForAnyArgs(Error.Ok);
            formula.StructureCost(null, null).ReturnsForAnyArgs(structureCost);
            fixture.Register(() => formula);
        }
コード例 #15
0
 public RegionManager(IMiniMapRegionManagerFactory miniMapRegionManagerFactory,
                      IRegionFactory regionFactory,
                      ITileLocator tileLocator,
                      IChannel channel,
                      IRegionLocator regionLocator)
 {
     this.miniMapRegionManagerFactory = miniMapRegionManagerFactory;
     this.regionFactory = regionFactory;
     this.tileLocator   = tileLocator;
     this.channel       = channel;
     this.regionLocator = regionLocator;
 }
コード例 #16
0
        public void Execute_WhenAStructureTileIsNotValid_ReturnsError(
            [Frozen] IWorld world,
            [Frozen] ITileLocator tileLocator,
            Fixture fixture)
        {
            var action = new StructureBuildActiveActionExecuteBuilder(fixture).Build();

            world.Regions.IsValidXandY(1, 1).Returns(true);
            world.Regions.IsValidXandY(1, 2).Returns(false);
            tileLocator.ForeachMultitile(0, 0, 0).ReturnsForAnyArgs(new[] { new Position(1, 1), new Position(1, 2) });

            action.Execute().Should().Be(Error.ActionInvalid);
        }
コード例 #17
0
 public BarbarianTribeManager(IDbManager dbManager,
                              IBarbarianTribeFactory barbarianTribeFactory,
                              IBarbarianTribeConfigurator barbarianTribeConfigurator,
                              IRegionManager regionManager,
                              DefaultMultiObjectLock.Factory multiObjectLockFactory,
                              ITileLocator tileLocator)
 {
     this.dbManager                  = dbManager;
     this.barbarianTribeFactory      = barbarianTribeFactory;
     this.barbarianTribeConfigurator = barbarianTribeConfigurator;
     this.regionManager              = regionManager;
     this.multiObjectLockFactory     = multiObjectLockFactory;
     this.tileLocator                = tileLocator;
 }
コード例 #18
0
 public RegionCommandsModule(ITileLocator tileLocator,
                             IWorld world,
                             IObjectTypeFactory objectTypeFactory,
                             IRoadPathFinder roadPathFinder,
                             ILocker locker,
                             Util.IChannel channel)
 {
     this.tileLocator       = tileLocator;
     this.world             = world;
     this.objectTypeFactory = objectTypeFactory;
     this.roadPathFinder    = roadPathFinder;
     this.locker            = locker;
     this.channel           = channel;
 }
コード例 #19
0
 public ResourceSendActiveAction(uint cityId,
                                 uint structureId,
                                 uint targetCityId,
                                 Resource resource,
                                 ITileLocator tileLocator,
                                 IWorld world,
                                 Formula formula,
                                 ILocker locker)
     : this(tileLocator, world, formula, locker)
 {
     this.cityId       = cityId;
     this.structureId  = structureId;
     this.targetCityId = targetCityId;
     this.resource     = new Resource(resource);
 }
コード例 #20
0
        public RoadManager(IRegionManager regionManager,
                           IObjectTypeFactory objectTypeFactory,
                           IChannel channel,
                           IRegionLocator regionLocator,
                           ITileLocator tileLocator)
        {
            this.regionManager     = regionManager;
            this.objectTypeFactory = objectTypeFactory;
            this.channel           = channel;
            this.regionLocator     = regionLocator;
            this.tileLocator       = tileLocator;

            regionManager.ObjectAdded   += RegionManagerOnObjectAdded;
            regionManager.ObjectRemoved += RegionManagerOnObjectRemoved;
        }
コード例 #21
0
 public StrongholdCommandLineModule(ITribeManager tribeManager,
                                    IWorld world,
                                    ILocker locker,
                                    IStrongholdManager strongholdManager,
                                    MapFactory mapFactory,
                                    Formula formula,
                                    ITileLocator tileLocator)
 {
     this.tribeManager      = tribeManager;
     this.world             = world;
     this.locker            = locker;
     this.strongholdManager = strongholdManager;
     this.mapFactory        = mapFactory;
     this.formula           = formula;
     this.tileLocator       = tileLocator;
 }
コード例 #22
0
 public CityBattleProcedure(ITileLocator tileLocator,
                            IBattleManagerFactory battleManagerFactory,
                            IActionFactory actionFactory,
                            IObjectTypeFactory objectTypeFactory,
                            BattleProcedure battleProcedure,
                            ICombatGroupFactory combatGroupFactory,
                            ICombatUnitFactory combatUnitFactory)
 {
     this.tileLocator          = tileLocator;
     this.battleManagerFactory = battleManagerFactory;
     this.actionFactory        = actionFactory;
     this.objectTypeFactory    = objectTypeFactory;
     this.battleProcedure      = battleProcedure;
     this.combatGroupFactory   = combatGroupFactory;
     this.combatUnitFactory    = combatUnitFactory;
 }
コード例 #23
0
 public StrongholdActivationChecker(IStrongholdManager strongholdManager,
                                    IStrongholdActivationCondition strongholdActivationCondition,
                                    IScheduler scheduler,
                                    ILocker locker,
                                    ITileLocator tileLocator,
                                    ISystemVariableManager systemVariableManager,
                                    IDbManager dbManager)
 {
     this.strongholdManager             = strongholdManager;
     this.strongholdActivationCondition = strongholdActivationCondition;
     this.scheduler             = scheduler;
     this.locker                = locker;
     this.tileLocator           = tileLocator;
     this.systemVariableManager = systemVariableManager;
     this.dbManager             = dbManager;
 }
コード例 #24
0
 public ForestCampBuildActiveAction(Formula formula,
                                    IWorld world,
                                    IObjectTypeFactory objectTypeFactory,
                                    IStructureCsvFactory structureCsvFactory,
                                    IForestManager forestManager,
                                    ILocker locker,
                                    ITileLocator tileLocator,
                                    CallbackProcedure callbackProcedure)
 {
     this.formula             = formula;
     this.world               = world;
     this.objectTypeFactory   = objectTypeFactory;
     this.structureCsvFactory = structureCsvFactory;
     this.forestManager       = forestManager;
     this.locker              = locker;
     this.tileLocator         = tileLocator;
     this.callbackProcedure   = callbackProcedure;
 }
コード例 #25
0
 public TroopMovePassiveAction(uint cityId,
                               uint troopObjectId,
                               uint x,
                               uint y,
                               bool isReturningHome,
                               bool isAttacking,
                               Formula formula,
                               ITileLocator tileLocator,
                               IGameObjectLocator world,
                               ILocker locker) : this(formula, tileLocator, world, locker)
 {
     this.cityId          = cityId;
     this.troopObjectId   = troopObjectId;
     this.x               = x;
     this.y               = y;
     this.isReturningHome = isReturningHome;
     this.isAttacking     = isAttacking;
 }
コード例 #26
0
        public void Execute_WhenAllStructureTilesAreValid_ReturnsOk(
            [Frozen] IWorld world,
            [Frozen] ITileLocator tileLocator,
            [Frozen] IStructureBaseStats structureBaseStats,
            Fixture fixture)
        {
            var action = new StructureBuildActiveActionExecuteBuilder(fixture).Build();

            structureBaseStats.Size.Returns <byte>(11);

            tileLocator.ForeachMultitile(action.X, action.Y, 11).Returns(new[] { new Position(1, 1), new Position(1, 2) });

            world.Regions.IsValidXandY(Arg.Any <uint>(), Arg.Any <uint>()).Returns(false);
            world.Regions.IsValidXandY(1, 1).Returns(true);
            world.Regions.IsValidXandY(1, 2).Returns(true);

            action.Execute().Should().Be(Error.Ok);
        }
コード例 #27
0
 public CityTileNextToFriendLocationStrategy(int distance,
                                             IPlayer player,
                                             MapFactory mapFactory,
                                             ITileLocator tileLocator,
                                             Random random,
                                             Formula formula,
                                             IForestManager forestManager,
                                             IWorld world)
 {
     this.distance      = distance;
     this.player        = player;
     this.mapFactory    = mapFactory;
     this.tileLocator   = tileLocator;
     this.random        = random;
     this.formula       = formula;
     this.forestManager = forestManager;
     this.world         = world;
 }
コード例 #28
0
        public void LockRegions_WhenCalledWithInvalidPosition_IgnoresInvalidRegion(
            [Frozen] ITileLocator tileLocator,
            [Frozen] IRegionLocator regionLocator,
            RegionManager regionManager)
        {
            var lockedRegions = new List <IRegion>();

            regionLocator.GetRegionIndex(0, 0).ReturnsForAnyArgs <ushort>(0);

            tileLocator.ForeachMultitile(10, 20, 3).Returns(new[]
            {
                new Position(1, 1),
            });

            regionManager.LockMultitileRegions(10, 20, 3);

            lockedRegions.Should().BeEmpty();
        }
コード例 #29
0
        public void Callback_WhenInactiveStrongholdsHaveSameScore_ShouldActivateClosestToCenter(
            [Frozen] ISystemVariableManager systemVariableManager,
            [Frozen] IStrongholdActivationCondition activationCondition,
            [Frozen] IStrongholdManager strongholdManager,
            [Frozen] ITileLocator tileLocator,
            IStronghold sh1,
            IStronghold sh2,
            IFixture fixture)
        {
            sh1.StrongholdState.Returns(StrongholdState.Inactive);
            sh1.PrimaryPosition.Returns(new Position(10, 20));

            sh2.StrongholdState.Returns(StrongholdState.Inactive);
            sh2.PrimaryPosition.Returns(new Position(30, 40));

            activationCondition.Score(null).ReturnsForAnyArgs(0);

            tileLocator.TileDistance(sh1.PrimaryPosition, 1, Arg.Any <Position>(), 1)
            .Returns(10);

            tileLocator.TileDistance(sh2.PrimaryPosition, 1, Arg.Any <Position>(), 1)
            .Returns(5);

            var lastCheckTime = Substitute.For <SystemVariable>();

            lastCheckTime.Value.Returns(SystemClock.Now.AddHours(-8));
            systemVariableManager["Stronghold.neutral_check"].Returns(lastCheckTime);

            var locker = new LockerStub();

            fixture.Register <ILocker>(() => locker);

            strongholdManager.GetEnumerator().Returns(_ => new List <IStronghold> {
                sh1, sh2
            }.GetEnumerator());

            var checker = fixture.Create <StrongholdActivationChecker>();

            checker.Callback(null);

            strongholdManager.Received().Activate(sh2);
            strongholdManager.DidNotReceive().Activate(sh1);
        }
コード例 #30
0
 /// <summary>
 ///     DB loader constructor
 /// </summary>
 public AttackCombatUnit(uint id,
                         uint battleId,
                         ITroopObject troopObject,
                         FormationType formation,
                         ushort type,
                         byte lvl,
                         ushort count,
                         decimal leftOverHp,
                         Resource loot,
                         UnitFactory unitFactory,
                         IBattleFormulas battleFormulas,
                         Formula formula,
                         ITileLocator tileLocator,
                         IDbManager dbManager)
     : this(id, battleId, troopObject, formation, type, lvl, count, unitFactory, battleFormulas, formula, tileLocator, dbManager)
 {
     LeftOverHp = leftOverHp;
     this.loot  = loot;
 }