public bool StartNextSeason() { if (CurrentSeason != null) { return(false); } Terminologies.Season previous = previousSeason.Season; Terminologies.Season next = Terminologies.GetNextSeason(previous); bool isNone = next != Terminologies.Season.None; if (isNone) { CurrentSeason = new DefaultSeason(next); startObserver.OnNext(CurrentSeason); } return(isNone); }
public SeasonSequencer(IObservable <IReadOnlyPlayer> onSeasonChangeable, ISeasonDeclarationProvider seasonDeclarationProvider, int seasonMaximamNumber) { CurrentSeason = new DefaultSeason(Terminologies.Season.Spring); onSeasonChangeable.Subscribe(_ => seasonDeclarationProvider.RequestValue().ContinueWith(OnDeclarated)); var startSubject = new Subject <ISeason>(); startObserver = startSubject; OnStart = startSubject.Take(seasonMaximamNumber); var endSubject = new Subject <ISeason>(); endObserver = endSubject; OnEnd = endSubject.Take(seasonMaximamNumber); var continueSubject = new Subject <ISeason>(); continueObserver = continueSubject; OnContinue = continueSubject.TakeUntil(OnEnd.Skip(seasonMaximamNumber - 1)); //終季の最後の一回と同時に購読停止 }