Пример #1
0
        //we cannot use replay subject here - it kills our test
        public MapGetService(IMapConfigRepository mapConfigRepository,
                             IBoardItemsGetRepository <Tile> tilesRepository,
                             IBoardItemsGetRepository <Unit> unitsRepository,
                             IBoardItemsGetRepository <Construct> constructsRepository,
                             IBoardItemsGetRepository <Stronghold> strongholdsRepository)
        {
            _mapSingle  = Observable.Throw <Map>(new InvalidOperationException($"Value is not set yet for {GetType().Name}"));
            _mapSubject = new ReplaySubject <Map>(1);

            var groupedItemsObservableStream = CreateGroupedItemsObservableStream(
                tilesRepository,
                unitsRepository,
                constructsRepository,
                strongholdsRepository
                );

            _disposable = mapConfigRepository.GetObservableStream()
                          .CombineLatest(
                groupedItemsObservableStream,
                (config, itemGroup) => (config, itemGroup.tiles, itemGroup.units, itemGroup.constructs, itemGroup.strongholds)
                )
                          .SubscribeOn(NoobSchedulers.ThreadPool)
                          .ObserveOn(NoobSchedulers.MainThread)
                          .Where(tuple => tuple.config != null)
                          .Subscribe(
                tuple =>
            {
                var(config, tiles, units, constructs, strongholds) = tuple;
                var map = new Map(tiles, units, constructs, strongholds, config);

                _mapSubject.OnNext(map);
                _mapSingle = Observable.Return(map);
            }
                );
        }
Пример #2
0
 public LoadBoardItemsHolderService(ITilesPositionService tilesPositionService,
                                    IBoardItemsGetRepository <TBoardItem> boardItemsRepository,
                                    IGameObjectAndComponentFactory <THolder> holderFactory,
                                    ICoordinateService coordinateService)
 {
     _tilesPositionService       = tilesPositionService;
     _boardItemsRepository       = boardItemsRepository;
     _holderFactory              = holderFactory;
     _coordinateService          = coordinateService;
     _finishedLoadingEventStream = new ReplaySubject <Unit>(1);
 }
Пример #3
0
 CreateGroupedItemsObservableStream(
     IBoardItemsGetRepository <Tile> tilesRepository,
     IBoardItemsGetRepository <Unit> unitsRepository,
     IBoardItemsGetRepository <Construct> constructsRepository,
     IBoardItemsGetRepository <Stronghold> strongholdsRepository
     )
 {
     return(tilesRepository.GetObservableStream().ZipLatest(
                unitsRepository.GetObservableStream(),
                constructsRepository.GetObservableStream(),
                strongholdsRepository.GetObservableStream(),
                (tiles, units, constructs, strongholds) => (tiles, units, constructs, strongholds)
                ));
 }