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