27
packages/shared/src/levels.ts
Executable file
27
packages/shared/src/levels.ts
Executable file
@@ -0,0 +1,27 @@
|
||||
export function xpForLevel(level: number): number {
|
||||
if (level <= 1) return 0;
|
||||
return Math.floor(100 * Math.pow(level - 1, 1.6));
|
||||
}
|
||||
|
||||
export function levelFromXp(totalXp: number): number {
|
||||
let level = 1;
|
||||
while (xpForLevel(level + 1) <= totalXp && level < 150) {
|
||||
level++;
|
||||
}
|
||||
return level;
|
||||
}
|
||||
|
||||
export function xpProgressInLevel(totalXp: number): {
|
||||
level: number;
|
||||
current: number;
|
||||
needed: number;
|
||||
percent: number;
|
||||
} {
|
||||
const level = levelFromXp(totalXp);
|
||||
const currentLevelXp = xpForLevel(level);
|
||||
const nextLevelXp = xpForLevel(level + 1);
|
||||
const current = totalXp - currentLevelXp;
|
||||
const needed = nextLevelXp - currentLevelXp;
|
||||
const percent = needed > 0 ? Math.min(100, (current / needed) * 100) : 100;
|
||||
return { level, current, needed, percent };
|
||||
}
|
||||
Reference in New Issue
Block a user