Exemple #1
0
 public Ranking(PointSystem system, Club[] clubs)
 {
     _system = system;
     _entries = new RankingEntry[clubs.Length];
     for (int i = 0; i < clubs.Length; i++)
         _entries[i] = new RankingEntry(clubs[i], system.InitialPoints);
 }
        public async Task <IActionResult> SetRank(Uri uri, float rankValue, [FromServices] ApplicationDbContext db)
        {
            var rankedSite = await db.RankedSites.FirstOrDefaultAsync(x => x.Uri == uri);

            if (rankedSite == null)
            {
                rankedSite = new RankedSite
                {
                    Uri    = uri,
                    Ignore = false,
                };
                db.Add(rankedSite);
            }

            await db.SaveChangesAsync();

            var rank = await db.Rankings.FirstOrDefaultAsync(x => x.RankedSiteId == uri);

            if (rank == null)
            {
                rank = new RankingEntry
                {
                    RankedSiteId  = uri,
                    RankingUserId = this.User.Claims.First(x => x.Type == System.Security.Claims.ClaimTypes.NameIdentifier).Value,
                };
                db.Add(rank);
            }

            rank.Rank = rankValue;

            await db.SaveChangesAsync();

            return(Ok());
        }
Exemple #3
0
        internal static PlayerDetailsViewData ToPlayerDetailsViewData(this RankingEntry entry, string imagePath)
        {
            var localDetails = new Dictionary <Stage, IReadOnlyDictionary <Level, (int, int, long?, DateTime?)> >();

            foreach (var stage in entry.Game.GetStages())
            {
                localDetails.Add(stage, entry.Details.ContainsKey(stage) ? entry.Details[stage] : null);
            }

            return(new PlayerDetailsViewData
            {
                DetailsByStage = localDetails.Keys.Select(sk => localDetails[sk].ToPlayerStageDetailsItemData(sk, imagePath)).ToList(),
                EasyPoints = entry.LevelPoints[Level.Easy],
                EasyTime = new TimeSpan(0, 0, (int)entry.LevelCumuledTime[Level.Easy]),
                Game = entry.Game,
                HardPoints = entry.LevelPoints[Level.Hard],
                HardTime = new TimeSpan(0, 0, (int)entry.LevelCumuledTime[Level.Hard]),
                MediumPoints = entry.LevelPoints[Level.Medium],
                MediumTime = new TimeSpan(0, 0, (int)entry.LevelCumuledTime[Level.Medium]),
                OverallPoints = entry.Points,
                OverallRanking = entry.Rank,
                OverallTime = new TimeSpan(0, 0, (int)entry.CumuledTime),
                PlayerName = entry.Player.RealName
            });
        }
        private static RankingEntry FindRankingEntryToDelete(long rankingEntryId)
        {
            RankingEntry rankingEntry = RankingEntries.FirstOrDefault(r => r.RankingEntryId == rankingEntryId);

            if (rankingEntry == null)
            {
                throw new RankingEntryNotFoundException($"Contestant with id {rankingEntryId} in ranking not found!");
            }
            return(rankingEntry);
        }
        public static void AddRankingEntry(Contestant contestant, Route route)
        {
            RankingEntry rankingEntry = FindRankingEntryToUpdate(contestant.ContestantId);

            if (rankingEntry != null)
            {
                rankingEntry.PointsSum += route.Points;
                rankingEntry.ContestantRoutes.Add(route.RouteName);
            }
            else
            {
                rankingEntry = new RankingEntry(contestant, route);
                RankingEntries.Add(rankingEntry);
            }
        }
        private string StringifyEntryProperty(RankingEntry entry, string propertyName)
        {
            var propertyValue = entry.GetProperty(propertyName);

            switch (propertyValue)
            {
            case string str:
                return(str);

            case int integer:
                return(integer.ToString());

            case IRating rating:
                return(rating.HasValue ? rating.Value !.ToString() ! : "-");

            default:
                return(propertyName == "rank" ? "-" : string.Empty);
            }
        }
Exemple #7
0
    public void BuildList()
    {
        if (ranking == null)
        {
            ranking = FindObjectOfType <Ranking>();
        }

        foreach (Transform child in list.transform)
        {
            GameObject.Destroy(child.gameObject);
        }
        for (int i = 0; i < ranking.List.Count; i++)
        {
            if (i > MaxEntries)
            {
                break;
            }
            RankingEntry entry = Instantiate(entryPrefab, list.transform).GetComponent <RankingEntry>();
            entry.Initialize(ranking.List[i].Name, (i + 1).ToString(), ranking.List[i].Score.ToString());
        }
    }
        public async Task ExecuteAsync(NewRankingSnapshotEvent @event)
        {
            RankingSnapshot rankingSnapshot = await _repository.GetAsync(@event.Id);

            List <RankingEntry> ordered = rankingSnapshot.RankingEntries.OrderByDescending(entry => entry.Score).ToList();

            for (var i = 0; i < ordered.Count; i++)
            {
                RankingEntry entry = ordered[i];

                // This could be batched if we assume that every user is in the ranking.
                IEnumerable <Profile> profiles = await _userManagementClient.ApiUserGetAsync(entry.UserId);

                Profile profile = profiles.Single();

                entry.Rank             = i + 1;
                entry.UserFirstName    = profile.FirstName;
                entry.UserLastName     = profile.LastName;
                entry.UserNickname     = profile.Nickname;
                entry.UserGravatarHash = GravatarHashCreator.HashEmailForGravatar(profile.Email);
            }

            await _repository.UpdateAsync(@event.Id, snapshot => snapshot.RankingEntries = rankingSnapshot.RankingEntries);
        }
 /// <summary>
 /// Almacena la informacion del usuario local en el ranking
 /// </summary>
 /// <param name="_posUsuarioLanzador"></param>
 /// <param name="_posUsuarioPortero"></param>
 /// <param name="_posUsuarioMultiplayer"></param>
 public void SetInfoPosUsuario(RankingEntry _posUsuarioLanzador, RankingEntry _posUsuarioPortero, RankingEntry _posUsuarioMultiplayer)
 {
     m_posUsuarioLanzador    = _posUsuarioLanzador;
     m_posUsuarioPortero     = _posUsuarioPortero;
     m_posUsuarioMultiplayer = _posUsuarioMultiplayer;
 }
Exemple #10
0
    public IPromise <(int, List <RankingEntry>)> GetLevelRankings(string levelId, string chartType)
    {
        var entries = new List <RankingEntry>();
        var top10   = new List <RankingEntry>();

        if (IsAuthenticated)
        {
            return(RestClient.GetArray <RankingEntry>(new RequestHelper
            {
                Uri = $"{Context.ApiUrl}/levels/{levelId}/charts/{chartType}/records?limit=10",
                Headers = GetRequestHeaders(),
                EnableDebug = true
            })
                   .Then(data =>
            {
                top10 = data.ToList();
                // Add the first 3
                entries.AddRange(top10.GetRange(0, Math.Min(3, top10.Count)));

                return RestClient.GetArray <RankingEntry>(new RequestHelper
                {
                    Uri =
                        $"{Context.ApiUrl}/levels/{levelId}/charts/{chartType}/user_ranking?limit=6",
                    Headers = GetRequestHeaders(),
                    EnableDebug = true
                });
            })
                   .Then(data =>
            {
                var list = data.ToList();

                // Find user's position
                var userRank = -1;
                RankingEntry userEntry = null;
                for (var index = 0; index < data.Length; index++)
                {
                    var entry = data[index];
                    if (entry.owner.Uid == Context.Player.Id)
                    {
                        userRank = entry.rank;
                        userEntry = entry;
                        break;
                    }
                }

                if (userRank == -1 || userRank <= 10)
                {
                    // Just use top 10
                    entries = top10;
                }
                else
                {
                    // Add previous 6 and next 6, and remove accordingly
                    var append = new List <RankingEntry>();
                    append.AddRange(list);
                    append.RemoveRange(0, Math.Max(3, Math.Max(0, 10 - userRank)));
                    if (append.Count > 7)
                    {
                        append.RemoveRange(7, append.Count - 7);
                    }
                    entries.AddRange(append);
                }

                if (userEntry != null)
                {
                    // Replace local performance only if higher or equal score
                    var record = Context.Database.GetLevelRecord(levelId);
                    if (record == null || !record.BestPerformances.ContainsKey(chartType) ||
                        record.BestPerformances[chartType].Score < userEntry.score ||
                        (record.BestPerformances[chartType].Score == userEntry.score && record.BestPerformances[chartType].Accuracy < userEntry.accuracy))
                    {
                        if (record == null)
                        {
                            record = new LevelRecord
                            {
                                LevelId = levelId
                            }
                        }
                        ;

                        var newBest = new LevelRecord.Performance
                        {
                            Score = userEntry.score,
                            Accuracy = userEntry.accuracy
                        };
                        record.BestPerformances[chartType] = newBest;
                        Context.Database.SetLevelRecord(record);

                        if (Context.LevelManager.LoadedLocalLevels.ContainsKey(levelId))
                        {
                            Context.LevelManager.LoadedLocalLevels[levelId].Record = record;
                        }

                        OnLevelBestPerformanceUpdated.Invoke(levelId);
                        Debug.Log("Updating: " + levelId);
                    }
                }

                return (userRank, entries);
            }));
        }

        return(RestClient.GetArray <RankingEntry>(new RequestHelper
        {
            Uri = $"{Context.ApiUrl}/levels/{levelId}/charts/{chartType}/records",
            EnableDebug = true,
        }).Then(array => (-1, array.ToList())));
    }
        public static void DeleteRankingEntry(long rankingEntryId)
        {
            RankingEntry rankingEntry = FindRankingEntryToDelete(rankingEntryId);

            RankingEntries.Remove(rankingEntry);
        }
        public string FormatEntry(RankingEntry rankingEntry)
        {
            var values = ValueSelectors.Select(selector => selector(rankingEntry)).ToArray();

            return(string.Format(Format, values));
        }