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)); //終季の最後の一回と同時に購読停止
        }