Exemple #1
0
        public void NotifyGameOver(bool isDraw, List<Player> winners)
        {
            Application.Current.Dispatcher.Invoke((ThreadStart)delegate()
            {
                Uri uri = GameSoundLocator.GetSystemSound("GameOver");
                GameSoundPlayer.PlaySoundEffect(uri);
                GameSoundPlayer.PlayBackgroundMusic(null);
                List<Player> drawers;
                List<Player> losers;
                if (isDraw)
                {
                    Trace.Assert(winners.Count == 0);
                    drawers = Game.CurrentGame.Players;
                    losers = new List<Player>();
                }
                else
                {
                    drawers = new List<Player>();
                    losers = new List<Player>(Game.CurrentGame.Players.Except(winners));
                }
                bool delayWindow = true;
                if (winners.Contains(GameModel.MainPlayerModel.Player))
                {
                    PlayAnimation(new WinAnimation());
                }
                else if (losers.Contains(GameModel.MainPlayerModel.Player))
                {
                    PlayAnimation(new LoseAnimation());
                }
                else delayWindow = false;
                LobbyViewModel.Instance.OnChat -= chatEventHandler;

                ObservableCollection<GameResultViewModel> model = new ObservableCollection<GameResultViewModel>();
                foreach (Player player in winners.Concat(losers).Concat(drawers))
                {
                    var m = new GameResultViewModel();
                    m.Player = player;
                    if (winners.Contains(player))
                    {
                        m.Result = GameResult.Win;
                        // @todo : fix this.
                        m.GainedExperience = "+15";
                        m.GainedTechPoints = "+0";
                    }
                    else if (losers.Contains(player))
                    {
                        m.Result = GameResult.Lose;
                        // @todo : fix this.
                        m.GainedExperience = "-3";
                        m.GainedTechPoints = "+0";
                    }
                    else if (drawers.Contains(player))
                    {
                        m.Result = GameResult.Draw;
                        // @todo : fix this.
                        m.GainedExperience = "+3";
                        m.GainedTechPoints = "+0";
                    }
                    model.Add(m);
                }
                gameResultBox.DataContext = model;
                gameResultWindow.Content = gameResultBox;
                gameResultWindow.Closed += (o, e) =>
                {
                    var handler = OnGameCompleted;
                    if (handler != null)
                    {
                        handler(this, new EventArgs());
                    }
                };

                if (delayWindow)
                {
                    DispatcherTimer timer = new DispatcherTimer();
                    timer.Tick += (o, e) =>
                    {
                        gameResultWindow.Show();
                        timer.Stop();
                    };
                    timer.Interval = TimeSpan.FromSeconds(2);
                    timer.Start();
                }
                else
                {
                    gameResultWindow.Show();
                }
            });
        }
Exemple #2
0
 public void NotifyGameOver(bool isDraw, List<Player> winners)
 {
     Application.Current.Dispatcher.Invoke((ThreadStart)delegate()
     {
         List<Player> drawers;
         List<Player> losers;
         if (isDraw)
         {
             Trace.Assert(winners.Count == 0);
             drawers = Game.CurrentGame.Players;
             losers = new List<Player>();
         }
         else
         {
             drawers = new List<Player>();
             losers = new List<Player>(Game.CurrentGame.Players.Except(winners));
         }
         ObservableCollection<GameResultViewModel> model = new ObservableCollection<GameResultViewModel>();
         foreach (Player player in winners.Concat(losers).Concat(drawers))
         {
             var m = new GameResultViewModel();
             m.Player = player;
             if (winners.Contains(player))
             {
                 m.Result = GameResult.Win;
                 // @todo : fix this.
                 m.GainedExperience = "+15";
                 m.GainedTechPoints = "+0";
             }
             else if (losers.Contains(player))
             {
                 m.Result = GameResult.Lose;
                 // @todo : fix this.
                 m.GainedExperience = "-3";
                 m.GainedTechPoints = "+0";
             }
             else if (drawers.Contains(player))
             {
                 m.Result = GameResult.Draw;
                 // @todo : fix this.
                 m.GainedExperience = "+3";
                 m.GainedTechPoints = "+0";
             }
             model.Add(m);
         }
         gameResultBox.DataContext = model;
         gameResultWindow.Content = gameResultBox;
         gameResultWindow.Show();
         gameResultWindow.Closed += (o, e) =>
         {
             var handler = OnGameCompleted;
             if (handler != null)
             {
                 handler(this, new EventArgs());
             }
         };
     });
 }