Exemplo n.º 1
0
        public NextBubblesViewModel(
            BubbleView.Factory bubbleViewFactory,
            BoardView boardView,
            BoardViewModel boardViewModel,
            GameConfig.BoardSettings boardSettings)
        {
            _bubbleViewFactory = bubbleViewFactory;
            _boardView         = boardView;
            _boardViewModel    = boardViewModel;
            _boardSettings     = boardSettings;
            _nextBubbles       = new ReactiveCollection <BubbleViewModel>().AddTo(Disposer);
            _serialDisposable  = new SerialDisposable().AddTo(Disposer);

            FillNextBubbles();

            NextBubbles.ObserveAnyChange()
            .OncePerFrame()
            .Subscribe(_ => FillNextBubbles())
            .AddTo(Disposer);
        }
Exemplo n.º 2
0
        public BoardViewModel(GameConfig.BoardSettings boardSetting, BubbleView.Factory bubbleViewFactory, AudioService audioService)
        {
            _minBounds          = boardSetting.Min;
            _maxBounds          = boardSetting.Max;
            _maxSpawnExponent   = boardSetting.InitialMaxSpawnExponent + 2;
            _minNumberOfBubbles = boardSetting.MinNumberOfBubbles;
            _explosionExponent  = boardSetting.ExplosionExponent;
            _bubbleViewFactory  = bubbleViewFactory;
            _audioService       = audioService;

            _isInitialized               = new ReactiveProperty <bool>().AddTo(Disposer);
            _isMerging                   = new ReactiveProperty <bool>().AddTo(Disposer);
            _currentTopGridY             = new ReactiveProperty <int>().AddTo(Disposer);
            _bubbleViewModels            = new ReactiveDictionary <Vector2Int, BubbleViewModel>().AddTo(Disposer);
            _mergeSubscriptionDisposer   = new CompositeDisposable().AddTo(Disposer);
            _bubbleAddedSerialDisposable = new SerialDisposable().AddTo(Disposer);

            IsInitialized
            .IfTrue()
            .Subscribe(_ => UpdateConnectedToCeiling()).AddTo(Disposer);

            BubbleViewModels
            .ObserveAnyChange()
            .OncePerFrame()
            .Where(_ => IsInitialized.Value)
            .DelayFrame(1)
            .Subscribe(_ => OnBubblesCountChanged()).AddTo(Disposer);

            CurrentTopGridY
            .SkipLatestValueOnSubscribe()
            .Where(_ => IsInitialized.Value)
            .OncePerFrame()
            .Subscribe(OnCurrentTopYChanged).AddTo(Disposer);

            IsMerging
            .SkipLatestValueOnSubscribe()
            .IfFalse()
            .OncePerFrame()
            .Subscribe(_ => TriggerExplosions())
            .AddTo(Disposer);
        }