Example #1
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();
        }
Example #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();
        }
Example #3
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);
        }
Example #4
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);
        }
Example #5
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>());
        }
Example #6
0
        public Region(byte[] map, DefaultMultiObjectLock.Factory lockerFactory, IRegionLocator regionLocator, IRegionObjectListFactory regionObjectListFactory)
        {
            this.map           = map;
            this.lockerFactory = lockerFactory;
            this.regionLocator = regionLocator;

            tileObjects    = regionObjectListFactory.CreateRegionObjectList();
            primaryObjects = regionObjectListFactory.CreateRegionObjectList();
        }
Example #7
0
 public CityChannel(Util.IChannel channel, Procedure procedure, Formula formula, IRegionManager regionManager, IRegionLocator regionLocator, IBattleFormulas battleFormulas)
 {
     this.channel        = channel;
     this.procedure      = procedure;
     this.formula        = formula;
     this.regionManager  = regionManager;
     this.regionLocator  = regionLocator;
     this.battleFormulas = battleFormulas;
 }
Example #8
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;
 }
Example #9
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;
        }
Example #10
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();
        }
Example #11
0
        public void Add_ShouldAddObjectToPrimaryRegion(
            ISimpleGameObject simpleGameObject,
            [Frozen] IRegionLocator regionLocator,
            IRegion region0,
            IRegion region1,
            RegionManager regionManager)
        {
            simpleGameObject.PrimaryPosition.Returns(new Position(1, 2));
            regionLocator.GetRegionIndex(simpleGameObject.PrimaryPosition.X, simpleGameObject.PrimaryPosition.Y).Returns <ushort>(1);

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

            regionManager.Add(simpleGameObject);

            region0.DidNotReceive().Add(simpleGameObject);
            region1.Received(1).Add(simpleGameObject);
        }
Example #12
0
        public void LockRegions_WhenCalledWithMultipleRegions_ShouldLockRegionInProperOrder(
            [Frozen] ITileLocator tileLocator,
            IRegion region1,
            IRegion region2,
            IRegion region3,
            IRegion region4,
            [Frozen] IRegionLocator regionLocator,
            RegionManager regionManager)
        {
            var lockedRegions = new List <IRegion>();

            region1.When(p => p.EnterWriteLock()).Do(x => lockedRegions.Add(region1));
            region2.When(p => p.EnterWriteLock()).Do(x => lockedRegions.Add(region2));
            region3.When(p => p.EnterWriteLock()).Do(x => lockedRegions.Add(region3));
            region4.When(p => p.EnterWriteLock()).Do(x => lockedRegions.Add(region4));

            regionManager.AddRegion(region1);
            regionManager.AddRegion(region2);
            regionManager.AddRegion(region3);
            regionManager.AddRegion(region4);

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

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

            var result = regionManager.LockMultitileRegions(10, 20, 3);

            lockedRegions.Should().Equal(region1, region2, region3);
            result.Should().Equal(new ushort[] { 0, 1, 2 });
        }
Example #13
0
        public void Remove_RemovesObjectFromAllTiles(
            ISimpleGameObject simpleGameObject,
            [Frozen] IRegionLocator regionLocator,
            IRegion region0,
            IRegion region1,
            IRegion region2,
            [Frozen] ITileLocator tileLocator,
            RegionManager regionManager)
        {
            simpleGameObject.InWorld.Returns(true);
            simpleGameObject.PrimaryPosition.Returns(new Position(1, 2));
            simpleGameObject.Size.Returns <byte>(10);
            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(1, 2, 10).Returns(new[]
            {
                new Position(1, 1),
                new Position(1, 2),
                new Position(2, 1),
            });

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

            regionManager.Remove(simpleGameObject);

            region0.Received(1).Remove(simpleGameObject, 1, 2);
            region0.Received(1).RemoveObjectFromTile(simpleGameObject, 1, 1);
            region0.Received(1).RemoveObjectFromTile(simpleGameObject, 1, 2);
            region1.Received(1).RemoveObjectFromTile(simpleGameObject, 2, 1);
            region2.DidNotReceive().RemoveObjectFromTile(Arg.Any <ISimpleGameObject>(), Arg.Any <uint>(), Arg.Any <uint>());
        }
Example #14
0
 public RegionObjectList(IRegionLocator regionLocator)
 {
     this.regionLocator = regionLocator;
 }