public void LocateableAddedAlreadyExists()
        {
            var worldObserver = new Mock <IWorldObserver>();
            var view          = new Mock <INewNpcsInScopePlugIn>();
            var viewPlugIns   = new Mock <ICustomPlugInContainer <IViewPlugIn> >();

            viewPlugIns.Setup(v => v.GetPlugIn <INewNpcsInScopePlugIn>()).Returns(view.Object);
            worldObserver.Setup(o => o.ViewPlugIns).Returns(viewPlugIns.Object);
            var adapter   = new ObserverToWorldViewAdapter(worldObserver.Object, 12);
            var map       = new GameMap(new DataModel.Configuration.GameMapDefinition(), 10, 8, null);
            var nonPlayer = new NonPlayerCharacter(new DataModel.Configuration.MonsterSpawnArea(), new DataModel.Configuration.MonsterDefinition(), map)
            {
                Position = new Point(128, 128),
            };

            map.Add(nonPlayer);
            adapter.LocateableAdded(map, new BucketItemEventArgs <ILocateable>(nonPlayer));
            adapter.ObservingBuckets.Add(nonPlayer.NewBucket);
            nonPlayer.OldBucket = nonPlayer.NewBucket; // oldbucket would be set, if it got moved on the map

            adapter.LocateableAdded(map, new BucketItemEventArgs <ILocateable>(nonPlayer));
            view.Verify(v => v.NewNpcsInScope(It.Is <IEnumerable <NonPlayerCharacter> >(arg => arg.Contains(nonPlayer))), Times.Once);
        }
        public void LocateableAddedAlreadyExists()
        {
            var worldObserver = MockRepository.GenerateStub <IWorldObserver>();
            var view          = MockRepository.GenerateStrictMock <IWorldView>();

            worldObserver.Stub(o => o.WorldView).Return(view);
            var adapter   = new ObserverToWorldViewAdapter(worldObserver, 12);
            var map       = new GameMap(new DataModel.Configuration.GameMapDefinition(), 10, 8, null);
            var nonPlayer = new NonPlayerCharacter(new DataModel.Configuration.MonsterSpawnArea(), new DataModel.Configuration.MonsterDefinition(), map)
            {
                X = 128,
                Y = 128
            };

            map.Add(nonPlayer);
            view.Expect(v => v.NewNpcsInScope(null)).IgnoreArguments().Repeat.Once();
            adapter.LocateableAdded(map, new BucketItemEventArgs <ILocateable>(nonPlayer));
            adapter.ObservingBuckets.Add(nonPlayer.NewBucket);
            nonPlayer.OldBucket = nonPlayer.NewBucket; // oldbucket would be set, if it got moved on the map

            adapter.LocateableAdded(map, new BucketItemEventArgs <ILocateable>(nonPlayer));
            view.VerifyAllExpectations();
        }
示例#3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="MapController" /> class.
        /// </summary>
        /// <param name="jsRuntime">The js runtime.</param>
        /// <param name="mapIdentifier">The map identifier.</param>
        /// <param name="gameServer">The game server.</param>
        /// <param name="mapNumber">The map number.</param>
        public MapController(IJSRuntime jsRuntime, string mapIdentifier, IGameServer gameServer, int mapNumber)
        {
            this.jsRuntime = jsRuntime;

            this.identifier         = mapIdentifier;
            this.gameServer         = gameServer;
            this.mapNumber          = mapNumber;
            this.adapterToWorldView = new ObserverToWorldViewAdapter(this, byte.MaxValue);

            var viewPlugIns   = new CustomPlugInContainer <IViewPlugIn>();
            var worldAccessor = $"{mapIdentifier}.world";

            viewPlugIns.RegisterPlugIn <IObjectGotKilledPlugIn>(new ObjectGotKilledPlugIn(this.jsRuntime, worldAccessor, this.disposeCts.Token));
            viewPlugIns.RegisterPlugIn <IObjectMovedPlugIn>(new ObjectMovedPlugIn(this.jsRuntime, worldAccessor, this.disposeCts.Token));
            viewPlugIns.RegisterPlugIn <IShowAnimationPlugIn>(new ShowAnimationPlugIn(this.jsRuntime, worldAccessor, this.disposeCts.Token));
            viewPlugIns.RegisterPlugIn <IObjectsOutOfScopePlugIn>(new ObjectsOutOfScopePlugIn(this.jsRuntime, worldAccessor, this.disposeCts.Token, this.Objects, () => this.ObjectsChanged?.Invoke(this, EventArgs.Empty)));
            viewPlugIns.RegisterPlugIn <INewPlayersInScopePlugIn>(new NewPlayersInScopePlugIn(this.jsRuntime, worldAccessor, this.disposeCts.Token, this.Objects, () => this.ObjectsChanged?.Invoke(this, EventArgs.Empty)));
            viewPlugIns.RegisterPlugIn <INewNpcsInScopePlugIn>(new NewNpcsInScopePlugIn(this.jsRuntime, worldAccessor, this.disposeCts.Token, this.Objects, () => this.ObjectsChanged?.Invoke(this, EventArgs.Empty)));
            viewPlugIns.RegisterPlugIn <IShowSkillAnimationPlugIn>(new ShowSkillAnimationPlugIn(this.jsRuntime, worldAccessor, this.disposeCts.Token));
            viewPlugIns.RegisterPlugIn <IShowAreaSkillAnimationPlugIn>(new ShowAreaSkillAnimationPlugIn(this.jsRuntime, worldAccessor, this.disposeCts.Token));

            this.ViewPlugIns = viewPlugIns;
        }