Пример #1
0
        }                                                           // 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();
            });
        }
Пример #2
0
        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;
        }