Files
adventure/packages/shared/src/levels.ts
Zaine 194330fb47
Some checks failed
CI / test (push) Has been cancelled
initial
2026-06-26 09:21:14 +01:00

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 };
}