feat(RankTracker): add timestamp

main
spacemeowx2 2022-12-04 03:19:32 +08:00 committed by imspace
parent 31949ae3cb
commit 6b6d919a04
3 changed files with 20 additions and 3 deletions

View File

@ -60,6 +60,7 @@
"https://deno.land/x/msgpack@v1.4/utils/stream.ts": "1315e29af5c1a40d97bfa6f1c4f7f73d26067b912236f56851981f2f049500b8",
"https://deno.land/x/msgpack@v1.4/utils/typedArrays.ts": "bb819c2f28cf7f85ed50b2e57f108462715555cc61ce315e8134cf1eef2ae662",
"https://deno.land/x/msgpack@v1.4/utils/utf8.ts": "93183055a7a41986080eeb711e83d553e7c8b121642da4379a5adf253b7beefd",
"https://deno.land/x/murmurhash@v1.0.0/mod.ts": "13fd2c5534dfd22ffbfcd4255ea13e47a2f2b99e9c90a83dc43e814a0e278829",
"https://deno.land/x/progress@v1.2.8/deps.ts": "e0abdc972a0c152508b28ced5ae9c4be26a5773f0aa4a3caa72371c84d2e28a2",
"https://deno.land/x/progress@v1.2.8/mod.ts": "5ef7c7ff079d71effed5055666af81cc58a566bc98e2df8473526bd6457976c5",
"https://deno.land/x/progress@v1.2.8/multi.ts": "392553552243204539d83ee53cadda990db20b1b421520411318ff9bd0320646",

View File

@ -81,6 +81,7 @@ export const RANK_PARAMS: RankParam[] = [{
type Delta = {
beforeGameId: string;
gameId: string;
timestamp: number;
rankAfter?: string;
rankPoint: number;
isPromotion: boolean;
@ -91,7 +92,14 @@ type Delta = {
// TODO: auto rank up using rank params and delta.
function addRank(state: RankState, delta: Delta): RankState {
const { rank, rankPoint } = state;
const { gameId, rankAfter, isPromotion, isRankUp, isChallengeFirst } = delta;
const {
gameId,
timestamp,
rankAfter,
isPromotion,
isRankUp,
isChallengeFirst,
} = delta;
const rankIndex = RANK_PARAMS.findIndex((r) => r.rank === rank);
@ -104,6 +112,7 @@ function addRank(state: RankState, delta: Delta): RankState {
if (isChallengeFirst) {
return {
gameId,
timestamp,
rank,
rankPoint: rankPoint - rankParam.charge,
};
@ -112,6 +121,7 @@ function addRank(state: RankState, delta: Delta): RankState {
// S+50 is the highest rank
if (rankIndex === RANK_PARAMS.length - 1) {
return {
timestamp,
gameId,
rank,
rankPoint: Math.min(rankPoint + delta.rankPoint, rankParam.pointRange[1]),
@ -123,6 +133,7 @@ function addRank(state: RankState, delta: Delta): RankState {
return {
gameId,
timestamp,
rank: nextRankParam.rank,
rankPoint: nextRankParam.pointRange[0],
};
@ -130,6 +141,7 @@ function addRank(state: RankState, delta: Delta): RankState {
return {
gameId,
timestamp,
rank: rankAfter ?? rank,
rankPoint: rankPoint + delta.rankPoint,
};
@ -147,6 +159,7 @@ const battleTime = (id: string) => {
};
type FlattenItem = {
id: string;
gameId: string;
time: Date;
bankaraMatchChallenge: BankaraMatchChallenge | null;
@ -177,6 +190,7 @@ function generateDeltaList(
let delta: Delta = {
beforeGameId,
gameId: i.gameId,
timestamp: Math.floor(i.time.getTime() / 1000),
rankPoint: 0,
isPromotion: false,
isRankUp: false,
@ -230,6 +244,7 @@ function getRankState(i: FlattenItem): RankState {
}
return {
gameId: i.gameId,
timestamp: Math.floor(i.time.getTime() / 1000),
rank,
rankPoint: -1,
};
@ -287,6 +302,7 @@ export class RankTracker {
.flatMap(
({ historyDetails, bankaraMatchChallenge }) => {
return historyDetails.nodes.map((j, index) => ({
id: j.id,
time: battleTime(j.id),
gameId: gameId(j.id),
bankaraMatchChallenge,

View File

@ -8,9 +8,9 @@ export type LoginState = {
};
export type RankState = {
// generated by gameId(battle.id)
// TODO: If the gameId does not exist, the tracker will assume that the user has
// not played a bankara match. And it will start tracking from the first match
gameId: string;
// extract from battle.id
timestamp?: number;
// C-, B, A+, S, S+0, S+12
rank: string;
rankPoint: number;