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(); }
/// <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; }