From 95217b2fdf289302ad80a4e1d28deb4fb8c93daa Mon Sep 17 00:00:00 2001 From: simon987 Date: Thu, 11 Apr 2019 18:27:48 -0400 Subject: [PATCH] Fix leaderboard stats methods --- .../simon987/server/user/UserStatsHelper.java | 37 +++++++++---------- .../simon987/server/web/LeaderBoardPage.java | 2 +- Server/src/main/resources/config.properties | 2 +- 3 files changed, 19 insertions(+), 22 deletions(-) diff --git a/Server/src/main/java/net/simon987/server/user/UserStatsHelper.java b/Server/src/main/java/net/simon987/server/user/UserStatsHelper.java index ede4ba9..3c8cca0 100644 --- a/Server/src/main/java/net/simon987/server/user/UserStatsHelper.java +++ b/Server/src/main/java/net/simon987/server/user/UserStatsHelper.java @@ -39,8 +39,9 @@ public class UserStatsHelper { for (Document dbUser : users.find().sort(orderBy).limit(n)) { User user = GameServer.INSTANCE.getGameUniverse().getUser((String) dbUser.get("username")); int val = 0; - if(user.getStats().getInt(statName) > 0) + if (user.getStats().getInt(statName) > 0) { val = user.getStats().getInt(statName); + } rows.add(new AbstractMap.SimpleEntry<>(user, val)); } @@ -48,27 +49,23 @@ public class UserStatsHelper { } /** - * Get top n players along with all their stat values, in descending order + * Get top n players along with all their stat values, in descending order of completed vaults * - * @param n Maximum number of players + * @param n Maximum number of players * @return Top n players, in User,value format, in descending order */ - public ArrayList>> getTopNAll(int n) { + public ArrayList>> getLeaderboardStats(int n) { - ArrayList>> rows = new ArrayList<>(); + ArrayList>> rows = new ArrayList<>(n); - ArrayList> vaults = new ArrayList<>(this.getTopNSetLength("completedVaults", n)); - ArrayList> deaths = new ArrayList<>(this.getTopN("death", n)); - ArrayList> time = new ArrayList<>(this.getTopN("executionTime", n)); - ArrayList> distance = new ArrayList<>(this.getTopN("walkDistance", n)); - - for (int i = 0; i < vaults.size() ; i++) { - User user = vaults.get(i).getKey(); - Map allStats = new HashMap(); - allStats.put("completedVaults", vaults.get(i).getValue().size()); - allStats.put("death", deaths.get(i).getValue()); - allStats.put("executionTime", time.get(i).getValue()); - allStats.put("walkDistance", distance.get(i).getValue()); + List users = getTopNSetSize("completedVaults", n); + + for (User user : users) { + Map allStats = new HashMap<>(); + allStats.put("completedVaults", user.getStats().getSet("completedVaults").size()); + allStats.put("death", user.getStats().getInt("death")); + allStats.put("executionTime", user.getStats().getInt("executionTime")); + allStats.put("walkDistance", user.getStats().getInt("walkDistance")); rows.add(new AbstractMap.SimpleEntry<>(user, allStats)); } @@ -82,9 +79,9 @@ public class UserStatsHelper { * @param n Maximum number of players * @return Top n players, in User,set format, in descending order */ - public ArrayList> getTopNSetLength(String statName, int n) { + private List getTopNSetSize(String statName, int n) { - ArrayList> rows = new ArrayList<>(); + ArrayList rows = new ArrayList<>(); List ifNullList = new ArrayList<>(2); ifNullList.add("$stats." + statName); @@ -100,7 +97,7 @@ public class UserStatsHelper { new Document("$limit", n)) )) { User user = GameServer.INSTANCE.getGameUniverse().getUser((String) document.get("username")); - rows.add(new AbstractMap.SimpleEntry<>(user, user.getStats().getSet(statName))); + rows.add(user); } return rows; diff --git a/Server/src/main/java/net/simon987/server/web/LeaderBoardPage.java b/Server/src/main/java/net/simon987/server/web/LeaderBoardPage.java index 2e4fbb1..66c5e89 100644 --- a/Server/src/main/java/net/simon987/server/web/LeaderBoardPage.java +++ b/Server/src/main/java/net/simon987/server/web/LeaderBoardPage.java @@ -16,7 +16,7 @@ public class LeaderBoardPage implements TemplateViewRoute { public ModelAndView handle(Request request, Response response) { Map model = new HashMap<>(2); model.put("session", request.session()); - model.put("stats", GameServer.INSTANCE.getUserStatsHelper().getTopNAll(25)); + model.put("stats", GameServer.INSTANCE.getUserStatsHelper().getLeaderboardStats(25)); return new ModelAndView(model, "leaderboard.vm"); } } \ No newline at end of file diff --git a/Server/src/main/resources/config.properties b/Server/src/main/resources/config.properties index 49a4cf7..7f85c34 100644 --- a/Server/src/main/resources/config.properties +++ b/Server/src/main/resources/config.properties @@ -12,7 +12,7 @@ server_name=MAR dev # ALLOW | BLOCK guest_policy=ALLOW # DEBUG -autologin=simon +#autologin=simon #Database mongo_dbname=mar_beta