feat: rewrote jump to score for current season

This commit is contained in:
TrèsAbhi committed 2023-11-13 12:52:39 -06:00
1 parent cc193b99d6
commit 86e385c548
1 file changed
+29 -49
+29 -49
View File
@@ -375,86 +375,66 @@ export default function Page() {
if (season === 0) { if (season === 0) {
const playerEntries = Object.entries(players[region][season]); const playerEntries = Object.entries(players[region][season]);
let closest: BlitzkriegRatingsLeaderboardEntry | null = null; let closestPlayer: BlitzkriegRatingsLeaderboardEntry | null = null;
let closestScore: number | null = null; let closestScore: number | null = null;
let closestScoreDistance = Infinity; let closestScoreDistance = Infinity;
let closesIndex = -1; let closesIndex = -1;
playerEntries.forEach(([positionAsString, player]) => { playerEntries.forEach(([positionAsString, player], index) => {
const position = parseInt(positionAsString); const position = parseInt(positionAsString);
const distance = Math.abs( const distance = Math.abs(player.score - targetScore);
player.score - scoreInput.current!.valueAsNumber,
);
if (distance < closestScoreDistance) { if (distance < closestScoreDistance) {
closestScoreDistance = distance; closestScoreDistance = distance;
closestScore = player.score; closestScore = player.score;
closest = player; closestPlayer = player;
closesIndex = position; closesIndex = position;
} }
}); });
if (closest === null || closestScore === null) return; if (closestPlayer === null || closestScore === null) return;
if (closestScoreDistance === 0) { const loadingDirection = Math.sign(closestScore - targetScore);
setHighlightedPlayer({ let targetPlayer: RatingsPlayer;
type: 'id', let scoreAcquired = false;
id: (closest as BlitzkriegRatingsLeaderboardEntry).id, let seedingPlayer = closestPlayer as BlitzkriegRatingsLeaderboardEntry;
});
setPage(Math.floor(closesIndex / ROWS_PER_PAGE));
return;
}
// 1 going down and -1 going up
const loadingDirection = Math.sign(closesIndex - closestScore);
let seedingPlayer = (closest as BlitzkriegRatingsLeaderboardEntry).id;
let targetScoreAcquired = false;
let neighbors: RatingsPlayer[];
let targetPlayer: RatingsPlayer | undefined;
setLoadingProgress([0, closestScoreDistance]); setLoadingProgress([0, closestScoreDistance]);
while (!scoreAcquired) {
const neighbors = await cacheNeighbors(seedingPlayer.id, SEEDING_SIZE);
const seedingNeighbor = neighbors.at(loadingDirection === 1 ? -1 : 0)!;
seedingPlayer = {
id: seedingNeighbor.spa_id,
score: seedingNeighbor.score,
};
while (!targetScoreAcquired) { setLoadingProgress([
neighbors = await cacheNeighbors(seedingPlayer, SEEDING_SIZE); closestScoreDistance - Math.abs(seedingNeighbor.score - targetScore),
seedingPlayer = neighbors.at(loadingDirection === -1 ? 0 : -1)!.spa_id; closestScoreDistance,
]);
if (loadingDirection === 1) { if (loadingDirection === 1) {
targetScoreAcquired = targetScore >= neighbors.at(-1)!.score; scoreAcquired = seedingPlayer.score <= targetScore;
setLoadingProgress([
Math.abs(neighbors.at(-1)!.score - closestScore),
closestScoreDistance,
]);
} else { } else {
targetScoreAcquired = targetScore <= neighbors[0].score; scoreAcquired = seedingPlayer.score >= targetScore;
setLoadingProgress([
Math.abs(neighbors[0].score - closestScore),
closestScoreDistance,
]);
} }
console.log(neighbors.map((player) => player.score - targetScore)); if (scoreAcquired) {
if (targetScoreAcquired) {
neighbors.findLast;
if (loadingDirection === 1) { if (loadingDirection === 1) {
targetPlayer = neighbors.find( targetPlayer = neighbors.find(
(neighbor) => neighbor.score <= targetScore, (player) => player.score <= targetScore,
); )!;
} else { } else {
targetPlayer = neighbors.findLast( targetPlayer = neighbors.findLast(
(neighbor) => neighbor.score >= targetScore, (player) => player.score >= targetScore,
); )!;
} }
} }
} }
setPage(Math.floor(targetPlayer!.number / ROWS_PER_PAGE));
setHighlightedPlayer({ type: 'id', id: targetPlayer!.spa_id });
setLoadingProgress(null); setLoadingProgress(null);
setPage(Math.floor((targetPlayer!.number - 1) / ROWS_PER_PAGE));
setHighlightedPlayer({
type: 'id',
id: targetPlayer!.spa_id,
});
} else { } else {
let playerIndex = -1; let playerIndex = -1;