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(); }
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; }
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); }); }