mirror of
https://github.com/tobspr/shapez.io.git
synced 2024-10-27 20:34:29 +00:00
Format all upgrade tiers as Roman numerals (#830)
* format all upgrade tiers as Roman numerals * show upgrade tiers 50+ as Arabic numerals
This commit is contained in:
parent
ca1af5a505
commit
f620706ed7
@ -723,29 +723,8 @@ export function startFileChoose(acceptedType = ".bin") {
|
||||
});
|
||||
}
|
||||
|
||||
const romanLiterals = [
|
||||
"0", // NULL
|
||||
"I",
|
||||
"II",
|
||||
"III",
|
||||
"IV",
|
||||
"V",
|
||||
"VI",
|
||||
"VII",
|
||||
"VIII",
|
||||
"IX",
|
||||
"X",
|
||||
"XI",
|
||||
"XII",
|
||||
"XIII",
|
||||
"XIV",
|
||||
"XV",
|
||||
"XVI",
|
||||
"XVII",
|
||||
"XVIII",
|
||||
"XIX",
|
||||
"XX",
|
||||
];
|
||||
const MAX_ROMAN_NUMBER = 49;
|
||||
const romanLiteralsCache = ["0"];
|
||||
|
||||
/**
|
||||
*
|
||||
@ -754,8 +733,52 @@ const romanLiterals = [
|
||||
*/
|
||||
export function getRomanNumber(number) {
|
||||
number = Math.max(0, Math.round(number));
|
||||
if (number < romanLiterals.length) {
|
||||
return romanLiterals[number];
|
||||
if (romanLiteralsCache[number]) {
|
||||
return romanLiteralsCache[number];
|
||||
}
|
||||
return String(number);
|
||||
|
||||
if (number > MAX_ROMAN_NUMBER) {
|
||||
return String(number);
|
||||
}
|
||||
|
||||
function formatDigit(digit, unit, quintuple, decuple) {
|
||||
switch (digit) {
|
||||
case 0:
|
||||
return "";
|
||||
case 1: // I
|
||||
return unit;
|
||||
case 2: // II
|
||||
return unit + unit;
|
||||
case 3: // III
|
||||
return unit + unit + unit;
|
||||
case 4: // IV
|
||||
return unit + quintuple;
|
||||
case 9: // IX
|
||||
return unit + decuple;
|
||||
default:
|
||||
// V, VI, VII, VIII
|
||||
return quintuple + formatDigit(digit - 5, unit, quintuple, decuple);
|
||||
}
|
||||
}
|
||||
|
||||
let thousands = Math.floor(number / 1000);
|
||||
let thousandsPart = "";
|
||||
while (thousands > 0) {
|
||||
thousandsPart += "M";
|
||||
thousands -= 1;
|
||||
}
|
||||
|
||||
const hundreds = Math.floor((number % 1000) / 100);
|
||||
const hundredsPart = formatDigit(hundreds, "C", "D", "M");
|
||||
|
||||
const tens = Math.floor((number % 100) / 10);
|
||||
const tensPart = formatDigit(tens, "X", "L", "C");
|
||||
|
||||
const units = number % 10;
|
||||
const unitsPart = formatDigit(units, "I", "V", "X");
|
||||
|
||||
const formatted = thousandsPart + hundredsPart + tensPart + unitsPart;
|
||||
|
||||
romanLiteralsCache[number] = formatted;
|
||||
return formatted;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user