public async Task<GameResult> LoadGameResult(Guid gameId, string playerName) { var gameResult = await _contestDao.FindGameResult(gameId); this.Shots = GenerateShots(gameResult, playerName); this.CurrentShotNumber = gameResult == null ? 1 : gameResult.Scores.Where(x => x.PlayerName.Equals(playerName)).Count() + 1; this.PlayerTotalScore = gameResult == null ? 0 : gameResult.TotalScore; if (_startGameOnLoading) { await StartGame(this.CurrentGame); List<Events.Live.Shot> eventShots = new List<Events.Live.Shot>(); foreach (var shot in gameResult.Scores) eventShots.Add(new Events.Live.Shot() { PlayerName = shot.PlayerName, ShotNumber = shot.ShotNumber, Score = shot.Points }); var @event = new GameStarted { GameId = gameId, PlayerName = this.CurrentGame.PlayerName, TeamName = this.CurrentGame.TeamName, Shots = eventShots }; _liveBus.Publish(@event); _startGameOnLoading = false; } this.ShotNumberToEdit = 0; // Reset edit mode return gameResult; }
private void OnGameStarted(GameStarted e) { this.CurrentGameId = e.GameId; this.CurrentPlayerName = e.PlayerName; this.CurrentTeamName = e.TeamName; _scores.Clear(); if (e.Shots != null) { foreach (var shot in e.Shots.Where(x => e.PlayerName.Equals(x.PlayerName))) { _scores.Add(shot.ShotNumber, shot.Score); } } this.OnPropertyChanged("Scores"); this.OnPropertyChanged("PlayerTotalScore"); if (e.Shots != null) _totalTeamScoreWithoutPlayer = e.Shots.Where(x => !e.PlayerName.Equals(x.PlayerName)).Sum(x => x.Score); else _totalTeamScoreWithoutPlayer = 0; this.OnPropertyChanged("TeamTotalScore"); this.OnPropertyChanged("IsTeamGame"); this.Items = new ObservableCollection<LeaderboardItem>(); this.Leaderboard = new NotifyTaskCompletion<Leaderboard>(this.GetLeaderboard()); this.OnPropertyChanged("Leaderboard"); for (int i = 1; i <= 9; i++) this.RaiseScoreChanged(i); }