From e2c5a652d15c7d2d5701d007441a10da3f41608e Mon Sep 17 00:00:00 2001 From: dan63047 Date: Tue, 8 Aug 2023 22:30:24 +0300 Subject: [PATCH] More shit Feels like I'm skill issue --- lib/data_objects/tetrio.dart | 405 +++++++++++++++++++++++++++- lib/views/rank_averages_view.dart | 412 ++++++++++++++++++++++++++++- lib/views/tl_leaderboard_view.dart | 2 +- 3 files changed, 804 insertions(+), 15 deletions(-) diff --git a/lib/data_objects/tetrio.dart b/lib/data_objects/tetrio.dart index 89d2331..ef5adb2 100644 --- a/lib/data_objects/tetrio.dart +++ b/lib/data_objects/tetrio.dart @@ -893,7 +893,7 @@ class TetrioPlayersLeaderboard { TetrioPlayersLeaderboard(this.type, this.leaderboard); - List getAverageOfRank(String rank){ + List getAverageOfRank(String rank){ // TODO: that function is a mess, there must be a better way to do this if (rank.isNotEmpty && !rankCutoffs.keys.contains(rank)) throw Exception("Invalid rank"); List filtredLeaderboard = List.from(leaderboard); if (rank.isNotEmpty) { @@ -908,18 +908,65 @@ class TetrioPlayersLeaderboard { avgTR = 0, avgGlicko = 0, avgRD = 0, + avgAPP = 0, + avgVSAPM = 0, + avgDSS = 0, + avgDSP = 0, + avgAPPDSP = 0, + avgCheese = 0, + avgGBE = 0, + avgNyaAPP = 0, + avgArea = 0, + avgEstTR = 0, + avgEstAcc = 0, + avgOpener = 0, + avgPlonk = 0, + avgStride = 0, + avgInfDS = 0, lowestTR = 25000, lowestGlicko = double.infinity, + lowestRD = double.infinity, lowestWinrate = double.infinity, lowestAPM = double.infinity, lowestPPS = double.infinity, lowestVS = double.infinity, - highestTR = 0, - highestGlicko = 0, - highestWinrate = 0, - highestAPM = 0, - highestPPS = 0, - highestVS = 0; + lowestAPP = double.infinity, + lowestVSAPM = double.infinity, + lowestDSS = double.infinity, + lowestDSP = double.infinity, + lowestAPPDSP = double.infinity, + lowestCheese = double.infinity, + lowestGBE = double.infinity, + lowestNyaAPP = double.infinity, + lowestArea = double.infinity, + lowestEstTR = double.infinity, + lowestEstAcc = double.infinity, + lowestOpener = double.infinity, + lowestPlonk = double.infinity, + lowestStride = double.infinity, + lowestInfDS = double.infinity, + highestTR = double.negativeInfinity, + highestGlicko = double.negativeInfinity, + highestRD = double.negativeInfinity, + highestWinrate = double.negativeInfinity, + highestAPM = double.negativeInfinity, + highestPPS = double.negativeInfinity, + highestVS = double.negativeInfinity, + highestAPP = double.negativeInfinity, + highestVSAPM = double.negativeInfinity, + highestDSS = double.negativeInfinity, + highestDSP = double.negativeInfinity, + highestAPPDSP = double.negativeInfinity, + highestCheese = double.negativeInfinity, + highestGBE = double.negativeInfinity, + highestNyaAPP = double.negativeInfinity, + highestArea = double.negativeInfinity, + highestEstTR = double.negativeInfinity, + highestEstAcc = double.negativeInfinity, + highestOpener = double.negativeInfinity, + highestPlonk = double.negativeInfinity, + highestStride = double.negativeInfinity, + highestInfDS = double.negativeInfinity; int avgGamesPlayed = 0, avgGamesWon = 0, totalGamesPlayed = 0, @@ -930,20 +977,52 @@ class TetrioPlayersLeaderboard { highestGamesWon = 0; String lowestTRid = "", lowestTRnick = "", lowestGlickoID = "", lowestGlickoNick = "", + lowestRdID = "", lowestRdNick = "", lowestGamesPlayedID = "", lowestGamesPlayedNick = "", lowestGamesWonID = "", lowestGamesWonNick = "", lowestWinrateID = "", lowestWinrateNick = "", lowestAPMid = "", lowestAPMnick = "", lowestPPSid = "", lowestPPSnick = "", lowestVSid = "", lowestVSnick = "", + lowestAPPid = "", lowestAPPnick = "", + lowestVSAPMid = "", lowestVSAPMnick = "", + lowestDSSid = "", lowestDSSnick = "", + lowestDSPid = "", lowestDSPnick = "", + lowestAPPDSPid = "", lowestAPPDSPnick = "", + lowestCheeseID = "", lowestCheeseNick = "", + lowestGBEid = "", lowestGBEnick = "", + lowestNyaAPPid = "", lowestNyaAPPnick = "", + lowestAreaID = "", lowestAreaNick = "", + lowestEstTRid = "", lowestEstTRnick = "", + lowestEstAccID = "", lowestEstAccNick = "", + lowestOpenerID = "", lowestOpenerNick = "", + lowestPlonkID = "", lowestPlonkNick = "", + lowestStrideID = "", lowestStrideNick = "", + lowestInfDSid = "", lowestInfDSnick = "", highestTRid = "", highestTRnick = "", highestGlickoID = "", highestGlickoNick = "", + highestRdID = "", highestRdNick = "", highestGamesPlayedID = "", highestGamesPlayedNick = "", highestGamesWonID = "", highestGamesWonNick = "", highestWinrateID = "", highestWinrateNick = "", highestAPMid = "", highestAPMnick = "", highestPPSid = "", highestPPSnick = "", - highestVSid = "", highestVSnick = ""; + highestVSid = "", highestVSnick = "", + highestAPPid = "", highestAPPnick = "", + highestVSAPMid = "", highestVSAPMnick = "", + highestDSSid = "", highestDSSnick = "", + highestDSPid = "", highestDSPnick = "", + highestAPPDSPid = "", highestAPPDSPnick = "", + highestCheeseID = "", highestCheeseNick = "", + highestGBEid = "", highestGBEnick = "", + highestNyaAPPid = "", highestNyaAPPnick = "", + highestAreaID = "", highestAreaNick = "", + highestEstTRid = "", highestEstTRnick = "", + highestEstAccID = "", highestEstAccNick = "", + highestOpenerID = "", highestOpenerNick = "", + highestPlonkID = "", highestPlonkNick = "", + highestStrideID = "", highestStrideNick = "", + highestInfDSid = "", highestInfDSnick = ""; for (var entry in filtredLeaderboard){ avgAPM += entry.apm; avgPPS += entry.pps; @@ -951,6 +1030,21 @@ class TetrioPlayersLeaderboard { avgTR += entry.rating; avgGlicko += entry.glicko; avgRD += entry.rd; + avgAPP += entry.nerdStats.app; + avgVSAPM += entry.nerdStats.vsapm; + avgDSS += entry.nerdStats.dss; + avgDSP += entry.nerdStats.dsp; + avgAPPDSP += entry.nerdStats.appdsp; + avgCheese += entry.nerdStats.cheese; + avgGBE += entry.nerdStats.gbe; + avgNyaAPP += entry.nerdStats.nyaapp; + avgArea += entry.nerdStats.area; + avgEstTR += entry.estTr.esttr; + avgEstAcc += entry.esttracc; + avgOpener += entry.playstyle.opener; + avgPlonk += entry.playstyle.plonk; + avgStride += entry.playstyle.stride; + avgInfDS += entry.playstyle.infds; totalGamesPlayed += entry.gamesPlayed; totalGamesWon += entry.gamesWon; if (entry.rating < lowestTR){ @@ -963,6 +1057,11 @@ class TetrioPlayersLeaderboard { lowestGlickoID = entry.userId; lowestGlickoNick = entry.username; } + if (entry.rd < lowestRD){ + lowestRD = entry.rd; + lowestRdID = entry.userId; + lowestRdNick = entry.username; + } if (entry.gamesPlayed < lowestGamesPlayed){ lowestGamesPlayed = entry.gamesPlayed; lowestGamesPlayedID = entry.userId; @@ -993,6 +1092,81 @@ class TetrioPlayersLeaderboard { lowestVSid = entry.userId; lowestVSnick = entry.username; } + if (entry.nerdStats.app < lowestAPP){ + lowestAPP = entry.nerdStats.app; + lowestAPPid = entry.userId; + lowestAPPnick = entry.username; + } + if (entry.nerdStats.vsapm < lowestVSAPM){ + lowestVSAPM = entry.nerdStats.vsapm; + lowestVSAPMid = entry.userId; + lowestVSAPMnick = entry.username; + } + if (entry.nerdStats.dss < lowestDSS){ + lowestDSS = entry.nerdStats.dss; + lowestDSSid = entry.userId; + lowestDSSnick = entry.username; + } + if (entry.nerdStats.dsp < lowestDSP){ + lowestDSP = entry.nerdStats.dsp; + lowestDSPid = entry.userId; + lowestDSPnick = entry.username; + } + if (entry.nerdStats.appdsp < lowestAPPDSP){ + lowestAPPDSP = entry.nerdStats.appdsp; + lowestAPPDSPid = entry.userId; + lowestAPPDSPnick = entry.username; + } + if (entry.nerdStats.cheese < lowestCheese){ + lowestCheese = entry.nerdStats.cheese; + lowestCheeseID = entry.userId; + lowestCheeseNick = entry.username; + } + if (entry.nerdStats.gbe < lowestGBE){ + lowestGBE = entry.nerdStats.gbe; + lowestGBEid = entry.userId; + lowestGBEnick = entry.username; + } + if (entry.nerdStats.nyaapp < lowestNyaAPP){ + lowestNyaAPP = entry.nerdStats.nyaapp; + lowestNyaAPPid = entry.userId; + lowestNyaAPPnick = entry.username; + } + if (entry.nerdStats.area < lowestArea){ + lowestArea = entry.nerdStats.area; + lowestAreaID = entry.userId; + lowestAreaNick = entry.username; + } + if (entry.estTr.esttr < lowestEstTR){ + lowestEstTR = entry.estTr.esttr; + lowestEstTRid = entry.userId; + lowestEstTRnick = entry.username; + } + if (entry.esttracc < lowestEstAcc){ + lowestEstAcc = entry.esttracc; + lowestEstAccID = entry.userId; + lowestEstAccNick = entry.username; + } + if (entry.playstyle.opener < lowestOpener){ + lowestOpener = entry.playstyle.opener; + lowestOpenerID = entry.userId; + lowestOpenerNick = entry.username; + } + if (entry.playstyle.plonk < lowestPlonk){ + lowestPlonk = entry.playstyle.plonk; + lowestPlonkID = entry.userId; + lowestPlonkNick = entry.username; + } + if (entry.playstyle.stride < lowestStride){ + lowestStride = entry.playstyle.stride; + lowestStrideID = entry.userId; + lowestStrideNick = entry.username; + } + if (entry.playstyle.infds < lowestInfDS){ + lowestInfDS = entry.playstyle.infds; + lowestInfDSid = entry.userId; + lowestInfDSnick = entry.username; + } if (entry.rating > highestTR){ highestTR = entry.rating; highestTRid = entry.userId; @@ -1003,6 +1177,11 @@ class TetrioPlayersLeaderboard { highestGlickoID = entry.userId; highestGlickoNick = entry.username; } + if (entry.rd > highestRD){ + highestRD = entry.rd; + highestRdID = entry.userId; + highestRdNick = entry.username; + } if (entry.gamesPlayed > highestGamesPlayed){ highestGamesPlayed = entry.gamesPlayed; highestGamesPlayedID = entry.userId; @@ -1033,6 +1212,81 @@ class TetrioPlayersLeaderboard { highestVSid = entry.userId; highestVSnick = entry.username; } + if (entry.nerdStats.app > highestAPP){ + highestAPP = entry.nerdStats.app; + highestAPPid = entry.userId; + highestAPPnick = entry.username; + } + if (entry.nerdStats.vsapm > highestVSAPM){ + highestVSAPM = entry.nerdStats.vsapm; + highestVSAPMid = entry.userId; + highestVSAPMnick = entry.username; + } + if (entry.nerdStats.dss > highestDSS){ + highestDSS = entry.nerdStats.dss; + highestDSSid = entry.userId; + highestDSSnick = entry.username; + } + if (entry.nerdStats.dsp > highestDSP){ + highestDSP = entry.nerdStats.dsp; + highestDSPid = entry.userId; + highestDSPnick = entry.username; + } + if (entry.nerdStats.appdsp > highestAPPDSP){ + highestAPPDSP = entry.nerdStats.appdsp; + highestAPPDSPid = entry.userId; + highestAPPDSPnick = entry.username; + } + if (entry.nerdStats.cheese > highestCheese){ + highestCheese = entry.nerdStats.cheese; + highestCheeseID = entry.userId; + highestCheeseNick = entry.username; + } + if (entry.nerdStats.gbe > highestGBE){ + highestGBE = entry.nerdStats.gbe; + highestGBEid = entry.userId; + highestGBEnick = entry.username; + } + if (entry.nerdStats.nyaapp > highestNyaAPP){ + highestNyaAPP = entry.nerdStats.nyaapp; + highestNyaAPPid = entry.userId; + highestNyaAPPnick = entry.username; + } + if (entry.nerdStats.area > highestArea){ + highestArea = entry.nerdStats.area; + highestAreaID = entry.userId; + highestAreaNick = entry.username; + } + if (entry.estTr.esttr > highestEstTR){ + highestEstTR = entry.estTr.esttr; + highestEstTRid = entry.userId; + highestEstTRnick = entry.username; + } + if (entry.esttracc > highestEstAcc){ + highestEstAcc = entry.esttracc; + highestEstAccID = entry.userId; + highestEstAccNick = entry.username; + } + if (entry.playstyle.opener > highestOpener){ + highestOpener = entry.playstyle.opener; + highestOpenerID = entry.userId; + highestOpenerNick = entry.username; + } + if (entry.playstyle.plonk > highestPlonk){ + highestPlonk = entry.playstyle.plonk; + highestPlonkID = entry.userId; + highestPlonkNick = entry.username; + } + if (entry.playstyle.stride > highestStride){ + highestStride = entry.playstyle.stride; + highestStrideID = entry.userId; + highestStrideNick = entry.username; + } + if (entry.playstyle.infds > highestInfDS){ + highestInfDS = entry.playstyle.infds; + highestInfDSid = entry.userId; + highestInfDSnick = entry.username; + } } avgAPM /= filtredLeaderboard.length; avgPPS /= filtredLeaderboard.length; @@ -1040,6 +1294,21 @@ class TetrioPlayersLeaderboard { avgTR /= filtredLeaderboard.length; avgGlicko /= filtredLeaderboard.length; avgRD /= filtredLeaderboard.length; + avgAPP /= filtredLeaderboard.length; + avgVSAPM /= filtredLeaderboard.length; + avgDSS /= filtredLeaderboard.length; + avgDSP /= filtredLeaderboard.length; + avgAPPDSP /= leaderboard.length; + avgCheese /= filtredLeaderboard.length; + avgGBE /= filtredLeaderboard.length; + avgNyaAPP /= filtredLeaderboard.length; + avgArea /= filtredLeaderboard.length; + avgEstTR /= filtredLeaderboard.length; + avgEstAcc /= filtredLeaderboard.length; + avgOpener /= filtredLeaderboard.length; + avgPlonk /= filtredLeaderboard.length; + avgStride /= filtredLeaderboard.length; + avgInfDS /= filtredLeaderboard.length; avgGamesPlayed = (totalGamesPlayed / filtredLeaderboard.length).floor(); avgGamesWon = (totalGamesWon / filtredLeaderboard.length).floor(); return [TetraLeagueAlpha(timestamp: DateTime.now(), apm: avgAPM, pps: avgPPS, vs: avgVS, glicko: avgGlicko, rd: avgRD, gamesPlayed: avgGamesPlayed, gamesWon: avgGamesWon, bestRank: rank, decaying: false, rating: avgTR, rank: rank, percentileRank: rank, percentile: rankCutoffs[rank]!, standing: -1, standingLocal: -1, nextAt: -1, prevAt: -1), @@ -1053,6 +1322,9 @@ class TetrioPlayersLeaderboard { "lowestGlicko": lowestGlicko, "lowestGlickoID": lowestGlickoID, "lowestGlickoNick": lowestGlickoNick, + "lowestRD": lowestRD, + "lowestRdID": lowestRdID, + "lowestRdNick": lowestRdNick, "lowestGamesPlayed": lowestGamesPlayed, "lowestGamesPlayedID": lowestGamesPlayedID, "lowestGamesPlayedNick": lowestGamesPlayedNick, @@ -1071,12 +1343,60 @@ class TetrioPlayersLeaderboard { "lowestVS": lowestVS, "lowestVSid": lowestVSid, "lowestVSnick": lowestVSnick, + "lowestAPP": lowestAPP, + "lowestAPPid": lowestAPPid, + "lowestAPPnick": lowestAPPnick, + "lowestVSAPM": lowestVSAPM, + "lowestVSAPMid": lowestVSAPMid, + "lowestVSAPMnick": lowestVSAPMnick, + "lowestDSS": lowestDSS, + "lowestDSSid": lowestDSSid, + "lowestDSSnick": lowestDSSnick, + "lowestDSP": lowestDSP, + "lowestDSPid": lowestDSPid, + "lowestDSPnick": lowestDSPnick, + "lowestAPPDSP": lowestAPPDSP, + "lowestAPPDSPid": lowestAPPDSPid, + "lowestAPPDSPnick": lowestAPPDSPnick, + "lowestCheese": lowestCheese, + "lowestCheeseID": lowestCheeseID, + "lowestCheeseNick": lowestCheeseNick, + "lowestGBE": lowestGBE, + "lowestGBEid": lowestGBEid, + "lowestGBEnick": lowestGBEnick, + "lowestNyaAPP": lowestNyaAPP, + "lowestNyaAPPid": lowestNyaAPPid, + "lowestNyaAPPnick": lowestNyaAPPnick, + "lowestArea": lowestArea, + "lowestAreaID": lowestAreaID, + "lowestAreaNick": lowestAreaNick, + "lowestEstTR": lowestEstTR, + "lowestEstTRid": lowestEstTRid, + "lowestEstTRnick": lowestEstTRnick, + "lowestEstAcc": lowestEstAcc, + "lowestEstAccID": lowestEstAccID, + "lowestEstAccNick": lowestEstAccNick, + "lowestOpener": lowestOpener, + "lowestOpenerID": lowestOpenerID, + "lowestOpenerNick": lowestOpenerNick, + "lowestPlonk": lowestPlonk, + "lowestPlonkID": lowestPlonkID, + "lowestPlonkNick": lowestPlonkNick, + "lowestStride": lowestStride, + "lowestStrideID": lowestStrideID, + "lowestStrideNick": lowestStrideNick, + "lowestInfDS": lowestInfDS, + "lowestInfDSid": lowestInfDSid, + "lowestInfDSnick": lowestInfDSnick, "highestTR": highestTR, "highestTRid": highestTRid, "highestTRnick": highestTRnick, "highestGlicko": highestGlicko, "highestGlickoID": highestGlickoID, "highestGlickoNick": highestGlickoNick, + "highestRD": highestRD, + "highestRdID": highestRdID, + "highestRdNick": highestRdNick, "highestGamesPlayed": highestGamesPlayed, "highestGamesPlayedID": highestGamesPlayedID, "highestGamesPlayedNick": highestGamesPlayedNick, @@ -1095,6 +1415,66 @@ class TetrioPlayersLeaderboard { "highestVS": highestVS, "highestVSid": highestVSid, "highestVSnick": highestVSnick, + "highestAPP": highestAPP, + "highestAPPid": highestAPPid, + "highestAPPnick": highestAPPnick, + "highestVSAPM": highestVSAPM, + "highestVSAPMid": highestVSAPMid, + "highestVSAPMnick": highestVSAPMnick, + "highestDSS": highestDSS, + "highestDSSid": highestDSSid, + "highestDSSnick": highestDSSnick, + "highestDSP": highestDSP, + "highestDSPid": highestDSPid, + "highestDSPnick": highestDSPnick, + "highestAPPDSP": highestAPPDSP, + "highestAPPDSPid": highestAPPDSPid, + "highestAPPDSPnick": highestAPPDSPnick, + "highestCheese": highestCheese, + "highestCheeseID": highestCheeseID, + "highestCheeseNick": highestCheeseNick, + "highestGBE": highestGBE, + "highestGBEid": highestGBEid, + "highestGBEnick": highestGBEnick, + "highestNyaAPP": highestNyaAPP, + "highestNyaAPPid": highestNyaAPPid, + "highestNyaAPPnick": highestNyaAPPnick, + "highestArea": highestArea, + "highestAreaID": highestAreaID, + "highestAreaNick": highestAreaNick, + "highestEstTR": highestEstTR, + "highestEstTRid": highestEstTRid, + "highestEstTRnick": highestEstTRnick, + "highestEstAcc": highestEstAcc, + "highestEstAccID": highestEstAccID, + "highestEstAccNick": highestEstAccNick, + "highestOpener": highestOpener, + "highestOpenerID": highestOpenerID, + "highestOpenerNick": highestOpenerNick, + "highestPlonk": highestPlonk, + "highestPlonkID": highestPlonkID, + "highestPlonkNick": highestPlonkNick, + "highestStride": highestStride, + "highestStrideID": highestStrideID, + "highestStrideNick": highestStrideNick, + "highestInfDS": highestInfDS, + "highestInfDSid": highestInfDSid, + "highestInfDSnick": highestInfDSnick, + "avgAPP": avgAPP, + "avgVSAPM": avgVSAPM, + "avgDSS": avgDSS, + "avgDSP": avgDSP, + "avgAPPDSP": avgAPPDSP, + "avgCheese": avgCheese, + "avgGBE": avgGBE, + "avgNyaAPP": avgNyaAPP, + "avgArea": avgArea, + "avgEstTR": avgEstTR, + "avgEstAcc": avgEstAcc, + "avgOpener": avgOpener, + "avgPlonk": avgPlonk, + "avgStride": avgStride, + "avgInfDS": avgInfDS, "toEnterTR": rank.toLowerCase() != "z" ? leaderboard[(leaderboard.length * rankCutoffs[rank]!).floor()-1].rating : lowestTR, "entries": filtredLeaderboard }]; @@ -1155,6 +1535,9 @@ class TetrioPlayerFromLeaderboard { late double pps; late double vs; late bool decaying; + late NerdStats nerdStats; + late EstTr estTr; + late Playstyle playstyle; TetrioPlayerFromLeaderboard( this.userId, @@ -1178,8 +1561,7 @@ class TetrioPlayerFromLeaderboard { this.decaying); double get winrate => gamesWon / gamesPlayed; - get app => apm / (pps * 60); - get vsapm => vs / apm; + double get esttracc => estTr.esttr - rating; TetrioPlayerFromLeaderboard.fromJson(Map json, DateTime ts) { userId = json['_id']; @@ -1201,5 +1583,8 @@ class TetrioPlayerFromLeaderboard { pps = json['league']['pps'].toDouble(); vs = json['league']['vs'].toDouble(); decaying = json['league']['decaying']; + nerdStats = NerdStats(apm, pps, vs); + estTr = EstTr(apm, pps, vs, rd, nerdStats.app, nerdStats.dss, nerdStats.dsp, nerdStats.gbe); + playstyle = Playstyle(apm, pps, nerdStats.app, nerdStats.vsapm, nerdStats.dsp, nerdStats.gbe, estTr.srarea, estTr.statrank); } } diff --git a/lib/views/rank_averages_view.dart b/lib/views/rank_averages_view.dart index b30aa6b..af3f640 100644 --- a/lib/views/rank_averages_view.dart +++ b/lib/views/rank_averages_view.dart @@ -168,7 +168,7 @@ class RankState extends State with SingleTickerProviderStateMixin { fontFamily: "Eurostile Round Extended")), subtitle: Text( - "${f2.format(widget.rank[1]["entries"][index].apm)} APM, ${f2.format(widget.rank[1]["entries"][index].pps)} PPS, ${f2.format(widget.rank[1]["entries"][index].vs)} VS, ${f2.format(widget.rank[1]["entries"][index].app)} APP, ${f2.format(widget.rank[1]["entries"][index].vsapm)} VS/APM"), + "${f2.format(widget.rank[1]["entries"][index].apm)} APM, ${f2.format(widget.rank[1]["entries"][index].pps)} PPS, ${f2.format(widget.rank[1]["entries"][index].vs)} VS, ${f2.format(widget.rank[1]["entries"][index].nerdStats.app)} APP, ${f2.format(widget.rank[1]["entries"][index].nerdStats.vsapm)} VS/APM"), trailing: Row( mainAxisSize: MainAxisSize.min, children: [ @@ -222,6 +222,13 @@ class RankState extends State with SingleTickerProviderStateMixin { username: widget.rank[1]["lowestGlickoNick"], approximate: false, fractionDigits: 2), + _ListEntry( + value: widget.rank[1]["lowestRD"], + label: "Rating Deviation", + id: widget.rank[1]["lowestRdID"], + username: widget.rank[1]["lowestRdNick"], + approximate: false, + fractionDigits: 3), _ListEntry( value: widget.rank[1]["lowestGamesPlayed"], label: "Games Played", @@ -263,14 +270,298 @@ class RankState extends State with SingleTickerProviderStateMixin { id: widget.rank[1]["lowestVSid"], username: widget.rank[1]["lowestVSnick"], approximate: false, - fractionDigits: 2) + fractionDigits: 2), + _ListEntry( + value: widget.rank[1]["lowestAPP"], + label: t.statCellNum.app.replaceAll(RegExp(r'\n'), " "), + id: widget.rank[1]["lowestAPPid"], + username: widget.rank[1]["lowestAPPnick"], + approximate: false, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["lowestVSAPM"], + label: "VS / APM", + id: widget.rank[1]["lowestVSAPMid"], + username: widget.rank[1]["lowestVSAPMnick"], + approximate: false, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["lowestDSS"], + label: t.statCellNum.dss.replaceAll(RegExp(r'\n'), " "), + id: widget.rank[1]["lowestDSSid"], + username: widget.rank[1]["lowestDSSnick"], + approximate: false, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["lowestDSP"], + label: t.statCellNum.dsp.replaceAll(RegExp(r'\n'), " "), + id: widget.rank[1]["lowestDSPid"], + username: widget.rank[1]["lowestDSPnick"], + approximate: false, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["lowestAPPDSP"], + label: t.statCellNum.dsp.replaceAll(RegExp(r'\n'), " "), + id: widget.rank[1]["lowestAPPDSPid"], + username: widget.rank[1]["lowestAPPDSPnick"], + approximate: false, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["lowestCheese"], + label: t.statCellNum.cheese.replaceAll(RegExp(r'\n'), " "), + id: widget.rank[1]["lowestCheeseID"], + username: widget.rank[1]["lowestCheeseNick"], + approximate: false, + fractionDigits: 2), + _ListEntry( + value: widget.rank[1]["lowestGBE"], + label: t.statCellNum.gbe.replaceAll(RegExp(r'\n'), " "), + id: widget.rank[1]["lowestGBEid"], + username: widget.rank[1]["lowestGBEnick"], + approximate: false, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["lowestNyaAPP"], + label: t.statCellNum.nyaapp.replaceAll(RegExp(r'\n'), " "), + id: widget.rank[1]["lowestNyaAPPid"], + username: widget.rank[1]["lowestNyaAPPnick"], + approximate: false, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["lowestArea"], + label: t.statCellNum.area.replaceAll(RegExp(r'\n'), " "), + id: widget.rank[1]["lowestAreaID"], + username: widget.rank[1]["lowestAreaNick"], + approximate: false, + fractionDigits: 1), + _ListEntry( + value: widget.rank[1]["lowestEstTR"], + label: t.statCellNum.estOfTR.replaceAll(RegExp(r'\n'), " "), + id: widget.rank[1]["lowestEstTRid"], + username: widget.rank[1]["lowestEstTRnick"], + approximate: false, + fractionDigits: 2), + _ListEntry( + value: widget.rank[1]["lowestEstAcc"], + label: t.statCellNum.accOfEst.replaceAll(RegExp(r'\n'), " "), + id: widget.rank[1]["lowestEstAccID"], + username: widget.rank[1]["lowestEstAccNick"], + approximate: false, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["lowestOpener"], + label: "Opener", + id: widget.rank[1]["lowestOpenerID"], + username: widget.rank[1]["lowestOpenerNick"], + approximate: false, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["lowestPlonk"], + label: "Plonk", + id: widget.rank[1]["lowestPlonkID"], + username: widget.rank[1]["lowestPlonkNick"], + approximate: false, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["lowestStride"], + label: "Stride", + id: widget.rank[1]["lowestStrideID"], + username: widget.rank[1]["lowestStrideNick"], + approximate: false, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["lowestInfDS"], + label: "InfDS", + id: widget.rank[1]["lowestInfDSid"], + username: widget.rank[1]["lowestInfDSnick"], + approximate: false, + fractionDigits: 3) ], ), ), ], ), Column( - children: [], + children: [ + Text("Average Values", + style: TextStyle( + fontFamily: "Eurostile Round Extended", + fontSize: bigScreen ? 42 : 28)), + Expanded( + child: ListView( + children: [ + _ListEntry( + value: widget.rank[0].rating, + label: "Tetra Rating", + id: "", + username: "", + approximate: true, + fractionDigits: 2), + _ListEntry( + value: widget.rank[0].glicko, + label: "Glicko", + id: "", + username: "", + approximate: true, + fractionDigits: 2), + _ListEntry( + value: widget.rank[0].rd, + label: "Rating Deviation", + id: "", + username: "", + approximate: true, + fractionDigits: 3), + _ListEntry( + value: widget.rank[0].gamesPlayed, + label: "Games Played", + id: "", + username: "", + approximate: true, + fractionDigits: 0), + _ListEntry( + value: widget.rank[0].gamesWon, + label: "Games Won", + id: "", + username: "", + approximate: true, + fractionDigits: 0), + _ListEntry( + value: widget.rank[0].winrate*100, + label: "Winrate", + id: "", + username: "", + approximate: true, + fractionDigits: 2), + _ListEntry( + value: widget.rank[0].apm, + label: "Attack per Minute", + id: "", + username: "", + approximate: true, + fractionDigits: 2), + _ListEntry( + value: widget.rank[0].pps, + label: "Pieces per Second", + id: "", + username: "", + approximate: true, + fractionDigits: 2), + _ListEntry( + value: widget.rank[0].vs, + label: "Versus Score", + id: "", + username: "", + approximate: true, + fractionDigits: 2), + _ListEntry( + value: widget.rank[1]["avgAPP"], + label: "Attack Per Piece", + id: "", + username: "", + approximate: true, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["avgAPP"], + label: "VS / APM", + id: "", + username: "", + approximate: true, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["avgDSS"], + label: t.statCellNum.dss.replaceAll(RegExp(r'\n'), " "), + id: "", + username: "", + approximate: true, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["avgDSP"], + label: t.statCellNum.dsp.replaceAll(RegExp(r'\n'), " "), + id: "", + username: "", + approximate: true, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["avgAPPDSP"], + label: t.statCellNum.dsp.replaceAll(RegExp(r'\n'), " "), + id: "", + username: "", + approximate: true, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["avgCheese"], + label: t.statCellNum.cheese.replaceAll(RegExp(r'\n'), " "), + id: "", + username: "", + approximate: true, + fractionDigits: 2), + _ListEntry( + value: widget.rank[1]["avgGBE"], + label: t.statCellNum.gbe.replaceAll(RegExp(r'\n'), " "), + id: "", + username: "", + approximate: true, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["avgNyaAPP"], + label: t.statCellNum.nyaapp.replaceAll(RegExp(r'\n'), " "), + id: "", + username: "", + approximate: true, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["avgArea"], + label: t.statCellNum.area.replaceAll(RegExp(r'\n'), " "), + id: "", + username: "", + approximate: true, + fractionDigits: 1), + _ListEntry( + value: widget.rank[1]["avgEstTR"], + label: t.statCellNum.estOfTR.replaceAll(RegExp(r'\n'), " "), + id: "", + username: "", + approximate: true, + fractionDigits: 2), + _ListEntry( + value: widget.rank[1]["avgEstAcc"], + label: t.statCellNum.accOfEst.replaceAll(RegExp(r'\n'), " "), + id: "", + username: "", + approximate: true, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["avgOpener"], + label: "Opener", + id: "", + username: "", + approximate: true, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["avgPlonk"], + label: "Plonk", + id: "", + username: "", + approximate: true, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["avgStride"], + label: "Stride", + id: "", + username: "", + approximate: true, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["avgInfDS"], + label: "InfDS", + id: "", + username: "", + approximate: true, + fractionDigits: 3), + ] + ) + ) + ], ), Column( children: [ @@ -295,6 +586,13 @@ class RankState extends State with SingleTickerProviderStateMixin { username: widget.rank[1]["highestGlickoNick"], approximate: false, fractionDigits: 2), + _ListEntry( + value: widget.rank[1]["highestRD"], + label: "Rating Deviation", + id: widget.rank[1]["highestRdID"], + username: widget.rank[1]["highestRdNick"], + approximate: false, + fractionDigits: 3), _ListEntry( value: widget.rank[1]["highestGamesPlayed"], label: "Games Played", @@ -337,7 +635,112 @@ class RankState extends State with SingleTickerProviderStateMixin { id: widget.rank[1]["highestVSid"], username: widget.rank[1]["highestVSnick"], approximate: false, - fractionDigits: 2) + fractionDigits: 2), + _ListEntry( + value: widget.rank[1]["highestAPP"], + label: t.statCellNum.app.replaceAll(RegExp(r'\n'), " "), + id: widget.rank[1]["highestAPPid"], + username: widget.rank[1]["highestAPPnick"], + approximate: false, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["highestVSAPM"], + label: "VS / APM", + id: widget.rank[1]["highestVSAPMid"], + username: widget.rank[1]["highestVSAPMnick"], + approximate: false, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["highestDSS"], + label: t.statCellNum.dss.replaceAll(RegExp(r'\n'), " "), + id: widget.rank[1]["highestDSSid"], + username: widget.rank[1]["highestDSSnick"], + approximate: false, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["highestDSP"], + label: t.statCellNum.dsp.replaceAll(RegExp(r'\n'), " "), + id: widget.rank[1]["highestDSPid"], + username: widget.rank[1]["highestDSPnick"], + approximate: false, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["highestAPPDSP"], + label: t.statCellNum.dsp.replaceAll(RegExp(r'\n'), " "), + id: widget.rank[1]["highestAPPDSPid"], + username: widget.rank[1]["highestAPPDSPnick"], + approximate: false, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["highestCheese"], + label: t.statCellNum.cheese.replaceAll(RegExp(r'\n'), " "), + id: widget.rank[1]["highestCheeseID"], + username: widget.rank[1]["highestCheeseNick"], + approximate: false, + fractionDigits: 2), + _ListEntry( + value: widget.rank[1]["highestGBE"], + label: t.statCellNum.gbe.replaceAll(RegExp(r'\n'), " "), + id: widget.rank[1]["highestGBEid"], + username: widget.rank[1]["highestGBEnick"], + approximate: false, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["highestNyaAPP"], + label: t.statCellNum.nyaapp.replaceAll(RegExp(r'\n'), " "), + id: widget.rank[1]["highestNyaAPPid"], + username: widget.rank[1]["highestNyaAPPnick"], + approximate: false, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["highestArea"], + label: t.statCellNum.area.replaceAll(RegExp(r'\n'), " "), + id: widget.rank[1]["highestAreaID"], + username: widget.rank[1]["highestAreaNick"], + approximate: false, + fractionDigits: 1), + _ListEntry( + value: widget.rank[1]["highestEstTR"], + label: t.statCellNum.estOfTR.replaceAll(RegExp(r'\n'), " "), + id: widget.rank[1]["highestEstTRid"], + username: widget.rank[1]["highestEstTRnick"], + approximate: false, + fractionDigits: 2), + _ListEntry( + value: widget.rank[1]["highestEstAcc"], + label: t.statCellNum.accOfEst.replaceAll(RegExp(r'\n'), " "), + id: widget.rank[1]["highestEstAccID"], + username: widget.rank[1]["highestEstAccNick"], + approximate: false, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["highestOpener"], + label: "Opener", + id: widget.rank[1]["highestOpenerID"], + username: widget.rank[1]["highestOpenerNick"], + approximate: false, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["highestPlonk"], + label: "Plonk", + id: widget.rank[1]["highestPlonkID"], + username: widget.rank[1]["highestPlonkNick"], + approximate: false, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["highestStride"], + label: "Stride", + id: widget.rank[1]["highestStrideID"], + username: widget.rank[1]["highestStrideNick"], + approximate: false, + fractionDigits: 3), + _ListEntry( + value: widget.rank[1]["highestInfDS"], + label: "InfDS", + id: widget.rank[1]["highestInfDSid"], + username: widget.rank[1]["highestInfDSnick"], + approximate: false, + fractionDigits: 3), ], ), ) @@ -374,6 +777,7 @@ class _ListEntry extends StatelessWidget { return ListTile( title: Text(label), trailing: Column( + crossAxisAlignment: CrossAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.center, children: [ Text(f.format(value), diff --git a/lib/views/tl_leaderboard_view.dart b/lib/views/tl_leaderboard_view.dart index 61b7b9e..5c2aa46 100644 --- a/lib/views/tl_leaderboard_view.dart +++ b/lib/views/tl_leaderboard_view.dart @@ -83,7 +83,7 @@ class TLLeaderboardState extends State { leading: Text((index+1).toString(), style: bigScreen ? const TextStyle(fontFamily: "Eurostile Round Extended", fontSize: 28) : null), title: Text(allPlayers[index].username, style: const TextStyle(fontFamily: "Eurostile Round Extended")), subtitle: Text( - "${f2.format(allPlayers[index].apm)} APM, ${f2.format(allPlayers[index].pps)} PPS, ${f2.format(allPlayers[index].vs)} VS, ${f2.format(allPlayers[index].app)} APP, ${f2.format(allPlayers[index].vsapm)} VS/APM"), + "${f2.format(allPlayers[index].apm)} APM, ${f2.format(allPlayers[index].pps)} PPS, ${f2.format(allPlayers[index].vs)} VS, ${f2.format(allPlayers[index].nerdStats.app)} APP, ${f2.format(allPlayers[index].nerdStats.vsapm)} VS/APM"), trailing: Row( mainAxisSize: MainAxisSize.min, children: [