コード例 #1
0
        public override PlayerAchievementViewModel Map(PlayerAchievement source)
        {
            var result = base.Map(source);

            var achievement = AchievementFactory.GetAchievementById(source.AchievementId);

            result.Achievement    = _achievementToAchievementViewModelMapper.Map(achievement);
            result.PlayerProgress = achievement.IsAwardedForThisPlayer(result.PlayerId).PlayerProgress;

            switch (achievement.Group)
            {
            case AchievementGroup.Game:
                result.RelatedGameDefinitions =
                    _gameDefinitionRetriever.GetGameDefinitionSummaries(source.RelatedEntities)
                    .Select(g => _gameDefinitionSummaryToGameDefinitionSummaryListViewModelMapper.Map(g))
                    .ToList();
                break;

            case AchievementGroup.Player:
                result.RelatedPlayers =
                    _playerRetriever.GetPlayers(source.RelatedEntities)
                    .Select(g => _playerToPlayerListSummaryViewModelMapper.Map(g))
                    .ToList();
                break;

            case AchievementGroup.PlayedGame:
                result.RelatedPlayedGames =
                    _playedGameRetriever.GetPlayedGamesQuickStats(source.RelatedEntities)
                    .Select(g => _playedGameQuickStatsToPlayedGameQuickStatsViewModelMapper.Map(g))
                    .ToList();
                break;
            }

            return(result);
        }
コード例 #2
0
        private Dictionary <Category, IEnumerable <Achievement> > createAchievements()
        {
            IEnumerable <Type> factoryTypes = getAchievementFactoryTypes();
            Dictionary <Category, IEnumerable <Achievement> > achievements = new Dictionary <Category, IEnumerable <Achievement> >();

            foreach (Type type in factoryTypes)
            {
                try {
                    AchievementFactory factory  = (AchievementFactory)type.GetConstructor(Type.EmptyTypes).Invoke(null);
                    Category           category = factory.getCategory();
                    List <Achievement> categoryAchievements;
                    if (achievements.ContainsKey(category))
                    {
                        categoryAchievements = (List <Achievement>)achievements[category];
                    }
                    else
                    {
                        categoryAchievements = new List <Achievement>();
                        achievements.Add(category, categoryAchievements);
                    }
                    IEnumerable <Achievement> factoryAchievements = factory.getAchievements();
                    categoryAchievements.AddRange(factoryAchievements);
                } catch (Exception e) {
                    Debug.LogException(e);
                }
            }
            Debug.Log("number of achievements: " + achievements.getValuesCount() + " in " + achievements.Keys.Count() + " categories");
            return(achievements);
        }
コード例 #3
0
        public bool Handle(PlayedGameCreatedEvent @event)
        {
            bool noExceptions = true;

            //--this is a weak solution to duplicate key exceptions getting logged when multiple games are recorded in quick succession. A better solution
            //  would be to only lock at the playerId level instead of locking across the board
            lock (GlobalLockObject)
            {
                var players =
                    DataContext.GetQueryable <PlayerGameResult>().Where(p => p.PlayedGameId == @event.TriggerEntityId)
                    .Select(p => p.Player)
                    .Include(p => p.PlayerAchievements);

                foreach (var player in players.ToList())
                {
                    foreach (var achievement in AchievementFactory.GetAchievements())
                    {
                        try
                        {
                            ProcessAchievement(player, achievement);
                        }
                        catch (Exception ex)
                        {
                            _rollbarClient.SendException(ex);
                            noExceptions = false;
                        }
                    }
                }
            }

            return(noExceptions);
        }
コード例 #4
0
        public bool ProcessAchievements(int playedGameId)
        {
            bool noExceptions = true;

            var players =
                _dataContext.GetQueryable <PlayerGameResult>().Where(p => p.PlayedGameId == playedGameId)
                .Select(p => p.Player)
                .Include(p => p.PlayerAchievements);

            foreach (var player in players.ToList())
            {
                foreach (var achievement in AchievementFactory.GetAchievements())
                {
                    try
                    {
                        ProcessAchievementForPlayer(player, achievement);
                    }
                    catch (Exception ex)
                    {
                        _rollbarClient.SendException(ex);
                        ex.ToExceptionless();
                        noExceptions = false;
                    }
                }
            }

            return(noExceptions);
        }
コード例 #5
0
        public override PlayerAchievementWinnerViewModel Map(PlayerAchievement source)
        {
            var model = base.Map(source);

            model.Achievement =
                _achievementSummaryViewModelMapper.Map(AchievementFactory.GetAchievementById(source.AchievementId));

            return(model);
        }
コード例 #6
0
        public override PlayerAchievementSummaryViewModel Map(PlayerAchievement source)
        {
            var result = base.Map(source);

            var achievement = AchievementFactory.GetAchievementById(source.AchievementId);

            result.Achievement = _achievementToAchievementViewModelMapper.Map(achievement);
            return(result);
        }
コード例 #7
0
        public virtual ActionResult Index(ApplicationUser currentUser)
        {
            var achievements = AchievementFactory.GetAchievements();
            var model        = new AchievementListViewModel
            {
                CurrentUserId = currentUser?.Id,
                Achievements  = achievements.Select(a => _mapperFactory.GetMapper <IAchievement, AchievementViewModel>().Map(a)).OrderByDescending(a => a.Winners.Count).ThenBy(a => a.Name).ToList()
            };

            return(View(MVC.Achievement.Views.Index, model));
        }
コード例 #8
0
        public override IEnumerable <PlayerAchievementWinnerViewModel> Map(IEnumerable <PlayerAchievement> source)
        {
            var model = base.Map(source);

            foreach (var viewmodel in model)
            {
                viewmodel.Achievement = _achievementSummaryViewModelMapper.Map(AchievementFactory.GetAchievementById(viewmodel.AchievementId));
            }



            return(model);
        }
コード例 #9
0
 public IAchievement GetAchievement(AchievementId achievementId)
 {
     return(AchievementFactory.GetAchievementById(achievementId));
 }
コード例 #10
0
 internal virtual List <IAchievement> GetAllAchievements()
 {
     return(AchievementFactory.GetAchievements());
 }