コード例 #1
0
ファイル: TeamViewModel.cs プロジェクト: JorisAlbers/slingo
        public TeamViewModel(int teamIndex, ScoreboardViewModel scoreboard1, ScoreboardViewModel scoreboard2,
                             WordGameViewModel wordGameViewModel, BingoCardSettings bingoCardSettings, Random random,
                             AudioPlaybackEngine audioPlaybackEngine, ActiveSceneContainer activeSceneContainer)
        {
            _teamIndex           = teamIndex;
            _bingoCardSettings   = bingoCardSettings;
            _random              = random;
            _audioPlaybackEngine = audioPlaybackEngine;
            Scoreboard1          = scoreboard1;
            Scoreboard2          = scoreboard2;
            WordGameViewModel    = wordGameViewModel;
            ActiveSceneContainer = activeSceneContainer;

            if (teamIndex == 0)
            {
                this.WhenAnyValue(x => x.ActiveSceneContainer.IsTeam1Active).ToPropertyEx(this, x => x.OnAir);
            }
            else
            {
                this.WhenAnyValue(x => x.ActiveSceneContainer.IsTeam2Active).ToPropertyEx(this, x => x.OnAir);
            }


            CreateNewBingoCard();
        }
コード例 #2
0
        public InputViewModel(GameState gameState, WordRepository wordRepository, Settings settings,
                              WordGameViewModel wordGameViewModel)
        {
            _wordRepository = wordRepository;
            _settings       = settings;
            _words          = _wordRepository.Deserialize(settings.WordSize);
            _random         = new Random();

            BingoSetupViewModel1 = new BingoSetupViewModel(gameState.Team1);
            BingoSetupViewModel2 = new BingoSetupViewModel(gameState.Team2);
            WordInputViewModel   = new WordInputViewModel(_words, settings, _random, wordGameViewModel);

            FocusTeam1     = ReactiveCommand.Create(() => Unit.Default);
            FocusTeam2     = ReactiveCommand.Create(() => Unit.Default);
            FocusBingoCard = ReactiveCommand.Create(() => Unit.Default);
            FocusWordGame  = ReactiveCommand.Create(() => Unit.Default);

            FocusTeam1.Subscribe(x =>
            {
                TeamWithFocus = 1;
                if (GameSectionWithFocus == GameSection.Bingo)
                {
                    SelectedViewModel = BingoSetupViewModel1;
                }
            });

            FocusTeam2.Subscribe(x =>
            {
                TeamWithFocus = 2;
                if (GameSectionWithFocus == GameSection.Bingo)
                {
                    SelectedViewModel = BingoSetupViewModel2;
                }
            });

            FocusBingoCard.Subscribe(x =>
            {
                GameSectionWithFocus = GameSection.Bingo;
                if (WordInputViewModel.StateInfo != null && WordInputViewModel.StateInfo.State == WordGameState.Won)
                {
                    WordInputViewModel.Clear();
                }

                if (TeamWithFocus == 1)
                {
                    SelectedViewModel = BingoSetupViewModel1;
                    return;
                }

                SelectedViewModel = BingoSetupViewModel2;
            });

            FocusWordGame.Subscribe(x =>
            {
                GameSectionWithFocus = GameSection.Word;
                SelectedViewModel    = WordInputViewModel;
            });

            SelectedViewModel = BingoSetupViewModel1;
        }
コード例 #3
0
        public WordInputViewModel(List <string> words, Settings settings, Random random, WordGameViewModel wordGameViewModel)
        {
            _words             = words;
            _settings          = settings;
            _random            = random;
            _wordGameViewModel = wordGameViewModel;

            CandidateWord = GetRandomWord();

            var gameIsOngoing = this.WhenAnyValue(x => x.StateInfo.State, (state) => state == WordGameState.Ongoing);

            var canAccept = this.WhenAnyValue(
                x => x.WordInputtedByUser, x => x.StateInfo.State, (word, state) =>
                !string.IsNullOrEmpty(word) &&
                state == WordGameState.Ongoing &&
                WordFormatter.Format(word).Length == settings.WordSize);


            Accept         = ReactiveCommand.Create(() => new Unit(), canAccept);
            Reject         = ReactiveCommand.Create(() => new Unit(), gameIsOngoing);
            TimeOut        = ReactiveCommand.Create(() => new Unit(), gameIsOngoing);
            AddRow         = ReactiveCommand.Create(() => new Unit(), this.WhenAnyValue(x => x.StateInfo.Flags, (switchTeamFlags) => (switchTeamFlags & SwitchTeamFlags.AddRow) == SwitchTeamFlags.AddRow));
            AddBonusLetter = ReactiveCommand.Create(() => new Unit(), this.WhenAnyValue(x => x.StateInfo.Flags, (switchTeamFlags) => (switchTeamFlags & SwitchTeamFlags.AddBonusLetter) == SwitchTeamFlags.AddBonusLetter));
            ClearRow       = ReactiveCommand.Create(() => new Unit(), this.WhenAnyValue(x => x.StateInfo.Flags, (flags) => (flags & SwitchTeamFlags.ClearRow) == SwitchTeamFlags.ClearRow));

            GenerateWord = ReactiveCommand.Create(() =>
            {
                CandidateWord = GetRandomWord();
                return(new Unit());
            });

            NewGame = ReactiveCommand.CreateFromTask(async() =>
            {
                var cancel    = CancelCountDownAndGetNewToken();
                CurrentWord   = CandidateWord;
                CandidateWord = GetRandomWord();
                await wordGameViewModel.StartWordGame(CurrentWord);
                StateInfo = new WordGameStateInfo(WordGameState.Ongoing);
                StartCountDown(cancel.Token);
                return(Unit.Default);
            });

            ShowWord = ReactiveCommand.Create(() => new Unit(),
                                              this.WhenAnyValue(x => x.StateInfo.State, (state) => state == WordGameState.Lost));

            this.WhenAnyValue(x => x.WordInputtedByUser)
            .Where(x => !string.IsNullOrWhiteSpace(x))
            .Subscribe(onNext => wordGameViewModel.SetWord(WordFormatter.Format(onNext)));

            this.Accept.Subscribe(async onNext =>
            {
                var cancel         = CancelCountDownAndGetNewToken();
                WordInputtedByUser = null;
                StateInfo          = await wordGameViewModel.AcceptWord();

                if (StateInfo.State == WordGameState.SwitchTeam && StateInfo.Flags == SwitchTeamFlags.Normal)
                {
                    StateInfo = new WordGameStateInfo(WordGameState.Ongoing);
                }

                if (StateInfo.State == WordGameState.Ongoing)
                {
                    StartCountDown(cancel.Token);
                }
            });
            this.Reject.Subscribe(async onNext =>
            {
                var cancel         = CancelCountDownAndGetNewToken();
                WordInputtedByUser = null;
                StateInfo          = await wordGameViewModel.RejectWord();
                if (StateInfo.State == WordGameState.Ongoing)
                {
                    StartCountDown(cancel.Token);
                }
            });
            this.TimeOut.Subscribe(async onNext =>
            {
                var cancel         = CancelCountDownAndGetNewToken();
                WordInputtedByUser = null;
                StateInfo          = await wordGameViewModel.TimeOut();
                StartCountDown(cancel.Token);
            });
            this.AddRow.Subscribe(async onNext =>
            {
                var cancel = CancelCountDownAndGetNewToken();
                await wordGameViewModel.AddRow();
                if (StateInfo.State == WordGameState.SwitchTeam)
                {
                    if ((StateInfo.Flags & SwitchTeamFlags.AddBonusLetter) != SwitchTeamFlags.AddBonusLetter)
                    {
                        StateInfo = new WordGameStateInfo(WordGameState.Ongoing);
                    }
                }

                StartCountDown(cancel.Token);
            });
            this.AddBonusLetter.Subscribe(async onNext =>
            {
                var cancel = CancelCountDownAndGetNewToken();
                await wordGameViewModel.AddBonusLetter();
                StateInfo = new WordGameStateInfo(WordGameState.Ongoing);
                StartCountDown(cancel.Token);
            });

            this.ClearRow.Subscribe(async x =>
            {
                await wordGameViewModel.ClearRow();
                if ((StateInfo.Flags & SwitchTeamFlags.AddBonusLetter) != SwitchTeamFlags.AddBonusLetter)
                {
                    StateInfo = new WordGameStateInfo(WordGameState.Ongoing);
                }
            });

            this.ShowWord.Subscribe(onNext =>
            {
                CancelCountDownAndGetNewToken();
                wordGameViewModel.ShowWord(CurrentWord);
            });
        }