Add Local leaderboard, CSS optimiztion
This commit is contained in:
@@ -353,7 +353,7 @@ void setupBackendRoutes(AsyncWebServer &server) {
|
||||
// Andere Logik wie in getBestLocs
|
||||
});
|
||||
|
||||
// Lokales Leaderboard API
|
||||
// Lokales Leaderboard API (für Hauptseite - 6 Einträge)
|
||||
server.on("/api/leaderboard", HTTP_GET, [](AsyncWebServerRequest *request) {
|
||||
// Sortiere nach Zeit (beste zuerst)
|
||||
std::sort(localTimes.begin(), localTimes.end(),
|
||||
@@ -364,10 +364,10 @@ void setupBackendRoutes(AsyncWebServer &server) {
|
||||
DynamicJsonDocument doc(2048);
|
||||
JsonArray leaderboard = doc.createNestedArray("leaderboard");
|
||||
|
||||
// Nimm die besten 5
|
||||
// Nimm die besten 6
|
||||
int count = 0;
|
||||
for (const auto &time : localTimes) {
|
||||
if (count >= 5)
|
||||
if (count >= 6)
|
||||
break;
|
||||
|
||||
JsonObject entry = leaderboard.createNestedObject();
|
||||
@@ -403,6 +403,58 @@ void setupBackendRoutes(AsyncWebServer &server) {
|
||||
request->send(200, "application/json", result);
|
||||
});
|
||||
|
||||
// Erweiterte Leaderboard API (für Leaderboard-Seite - 10 Einträge)
|
||||
server.on(
|
||||
"/api/leaderboard-full", HTTP_GET, [](AsyncWebServerRequest *request) {
|
||||
// Sortiere nach Zeit (beste zuerst)
|
||||
std::sort(localTimes.begin(), localTimes.end(),
|
||||
[](const LocalTime &a, const LocalTime &b) {
|
||||
return a.timeMs < b.timeMs;
|
||||
});
|
||||
|
||||
DynamicJsonDocument doc(2048);
|
||||
JsonArray leaderboard = doc.createNestedArray("leaderboard");
|
||||
|
||||
// Nimm die besten 10
|
||||
int count = 0;
|
||||
for (const auto &time : localTimes) {
|
||||
if (count >= 10)
|
||||
break;
|
||||
|
||||
JsonObject entry = leaderboard.createNestedObject();
|
||||
entry["rank"] = count + 1;
|
||||
entry["name"] = time.name;
|
||||
entry["uid"] = time.uid;
|
||||
entry["time"] = time.timeMs / 1000.0;
|
||||
|
||||
// Format time inline
|
||||
float seconds = time.timeMs / 1000.0;
|
||||
int totalSeconds = (int)seconds;
|
||||
int minutes = totalSeconds / 60;
|
||||
int remainingSeconds = totalSeconds % 60;
|
||||
int milliseconds = (int)((seconds - totalSeconds) * 100);
|
||||
|
||||
String timeFormatted;
|
||||
if (minutes > 0) {
|
||||
timeFormatted =
|
||||
String(minutes) + ":" + (remainingSeconds < 10 ? "0" : "") +
|
||||
String(remainingSeconds) + "." +
|
||||
(milliseconds < 10 ? "0" : "") + String(milliseconds);
|
||||
} else {
|
||||
timeFormatted = String(remainingSeconds) + "." +
|
||||
(milliseconds < 10 ? "0" : "") +
|
||||
String(milliseconds);
|
||||
}
|
||||
|
||||
entry["timeFormatted"] = timeFormatted;
|
||||
count++;
|
||||
}
|
||||
|
||||
String result;
|
||||
serializeJson(doc, result);
|
||||
request->send(200, "application/json", result);
|
||||
});
|
||||
|
||||
// Add more routes as needed
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user