} // TODO move to model class public GameViewModel(Settings settings, GameState state, AudioPlaybackEngine audioPlaybackEngine, ActiveSceneContainer activeSceneContainer) { Random random = new Random(); var audioPlaybackEngine1 = audioPlaybackEngine; ScoreBoardTeam1 = new ScoreboardViewModel(state.Team1, HorizontalAlignment.Left); ScoreBoardTeam2 = new ScoreboardViewModel(state.Team2, HorizontalAlignment.Right); WordGameViewModel = new WordGameViewModel(state, audioPlaybackEngine); var bingoCardSettingsTeam1 = new BingoCardSettings(true, settings.ExcludedBallNumbersEven); var bingoCardSettingsTeam2 = new BingoCardSettings(false, settings.ExcludedBallNumbersOdd); Team1ViewModel = new TeamViewModel(0, ScoreBoardTeam1, ScoreBoardTeam2, WordGameViewModel, bingoCardSettingsTeam1, random, audioPlaybackEngine1, activeSceneContainer); Team2ViewModel = new TeamViewModel(1, ScoreBoardTeam1, ScoreBoardTeam2, WordGameViewModel, bingoCardSettingsTeam2, random, audioPlaybackEngine1, activeSceneContainer); CountDownStarted = ReactiveCommand.Create(() => new Unit()); this.WhenAnyValue(x => x.WordGameViewModel.BoardViewModel).Where(x => x != null).Subscribe(x => { WordGameStarted(); }); }
public AdminViewModel() { var correctSound = new CachedSound(@"Resources\Sounds\WordGame\correct.wav"); ; var setupViewModel = new SetupViewModel(); setupViewModel.Start.Subscribe(settings => { var audioPlaybackEngine = new AudioPlaybackEngine(settings.AudioDevice, correctSound.WaveFormat.SampleRate, correctSound.WaveFormat.Channels); ActiveSceneContainer activeSceneContainer = null; OBSWebsocket obsWebsocket = null; if (settings.ObsSettings != null) { obsWebsocket = new OBSWebsocket(); obsWebsocket.Connect(settings.ObsSettings.ObsAddress, settings.ObsSettings.ObsPassword); if (obsWebsocket.IsConnected) { activeSceneContainer = new ActiveSceneContainer(obsWebsocket); } } _state = new GameState(new TeamState(settings.StartingTeamIndex == 0), new TeamState(settings.StartingTeamIndex == 1)); GameViewModel = new GameViewModel(settings, _state, audioPlaybackEngine, activeSceneContainer); var inputViewModel = new InputViewModel(_state, new WordRepository(new FileSystem(), @"Resources\5letterwoorden.txt"), settings, GameViewModel.WordGameViewModel); inputViewModel.FocusTeam1.Subscribe(x => GameViewModel.FocusTeam(0)); inputViewModel.FocusTeam2.Subscribe(x => GameViewModel.FocusTeam(1)); inputViewModel.FocusBingoCard.Subscribe(x => GameViewModel.Team1ViewModel.FocusBingoCard()); inputViewModel.FocusBingoCard.Subscribe(x => GameViewModel.Team2ViewModel.FocusBingoCard()); inputViewModel.FocusWordGame.Subscribe(x => GameViewModel.Team1ViewModel.FocusWordGame()); inputViewModel.FocusWordGame.Subscribe(x => GameViewModel.Team2ViewModel.FocusWordGame()); // Bingo input SubscribeToBingoInput(inputViewModel); SelectedAdminViewModel = inputViewModel; var view = Locator.Current.GetService <IViewFor <GameViewModel> >(); var window = view as ReactiveWindow <GameViewModel>; window.ViewModel = GameViewModel; window.Show(); if (obsWebsocket != null && obsWebsocket.IsConnected) { window.WhenAnyValue(x => x.Width).Subscribe(x => { if (obsWebsocket.IsConnected) { obsWebsocket.SetSourceFilterSettings("bord team 1", "Crop", new JObject { { "right", (int)window.Width / 2 }, { "top", Math.Max(((int)window.Height * 0.084), 50) }, // The info panel, only for the candidates, has a ratio of 8.4 % and should not be shown. min width is 50 }); obsWebsocket.SetSourceFilterSettings("bord team 2", "Crop", new JObject { { "left", (int)window.Width / 2 }, { "top", Math.Max(((int)window.Height * 0.084), 50) }, // The info panel, only for the candidates, has a ratio of 8.4 % and should not be shown. min width is 50 }); } }); } }); SelectedAdminViewModel = setupViewModel; }