export const growth = Math.pow(Math.PI / Math.E, 1.618) * Math.E * .75 export function xpRange(level, multiplier = global.multiplier || 1) { if (level < 0) throw new TypeError('level cannot be negative value') level = Math.floor(level) let min = level === 0 ? 0 : Math.round(Math.pow(level, growth) * multiplier) + 1 let max = Math.round(Math.pow(++level, growth) * multiplier) return { min, max, xp: max - min } } export function findLevel(xp, multiplier = global.multiplier || 1) { if (xp === Infinity) return Infinity if (isNaN(xp)) return NaN if (xp <= 0) return -1 let level = 0 do level++ while (xpRange(level, multiplier).min <= xp) return --level } export function canLevelUp(level, xp, multiplier = global.multiplier || 1) { if (level < 0) return false if (xp === Infinity) return true if (isNaN(xp)) return false if (xp <= 0) return false return level < findLevel(xp, multiplier) }