Example #1
0
 private IObservable <Unit> InstantiateEnemies(EnemiesDefinition enemiesDef)
 {
     return(Observable.Interval(TimeSpan.FromSeconds(enemiesDef.InstantiationInterval))
            .Take(enemiesDef.Count)
            .Do(_ =>
     {
         var def = configuration.GetEnemyByName(enemiesDef.EnemyName);
         GameProvider.GetGameView().InstantiateEnemy(def);
     })
            .AsSingleUnitObservable());
 }
Example #2
0
 private IObservable <long> Cycle(LevelDefinition levelDefinition, EnemiesDefinition currentEnemies)
 {
     return(Observable.Start(() => currentEnemies)
            .SelectMany(def =>
                        def.Delay.Equals(0)
                 ? InstantiateEnemies(def)
                 : Observable.Timer(TimeSpan.FromSeconds(def.Delay))
                        .SelectMany(_ => InstantiateEnemies(def)))
            .SelectMany(_ =>
                        levelDefinition.EnemiesList.Next(currentEnemies).SelectOrElse(next => Cycle(levelDefinition, next),
                                                                                      () =>
     {
         gamePlayEventObserver.OnNext(GamePlayEvent.LastRound());
         return Observable.Empty <long>();
     })));
 }