parent
518f2db7ea
commit
e2c5a652d1
|
@ -893,7 +893,7 @@ class TetrioPlayersLeaderboard {
|
|||
|
||||
TetrioPlayersLeaderboard(this.type, this.leaderboard);
|
||||
|
||||
List<dynamic> getAverageOfRank(String rank){
|
||||
List<dynamic> 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<TetrioPlayerFromLeaderboard> 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<String, dynamic> 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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -168,7 +168,7 @@ class RankState extends State<RankView> 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<RankView> 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<RankView> 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<RankView> 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<RankView> 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),
|
||||
|
|
|
@ -83,7 +83,7 @@ class TLLeaderboardState extends State<TLLeaderboardView> {
|
|||
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: [
|
||||
|
|
Loading…
Reference in New Issue