28 lines
779 B
TypeScript
Executable File
28 lines
779 B
TypeScript
Executable File
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 };
|
|
}
|