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 = [
|
const MAX_ROMAN_NUMBER = 49;
|
||||||
"0", // NULL
|
const romanLiteralsCache = ["0"];
|
||||||
"I",
|
|
||||||
"II",
|
|
||||||
"III",
|
|
||||||
"IV",
|
|
||||||
"V",
|
|
||||||
"VI",
|
|
||||||
"VII",
|
|
||||||
"VIII",
|
|
||||||
"IX",
|
|
||||||
"X",
|
|
||||||
"XI",
|
|
||||||
"XII",
|
|
||||||
"XIII",
|
|
||||||
"XIV",
|
|
||||||
"XV",
|
|
||||||
"XVI",
|
|
||||||
"XVII",
|
|
||||||
"XVIII",
|
|
||||||
"XIX",
|
|
||||||
"XX",
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -754,8 +733,52 @@ const romanLiterals = [
|
|||||||
*/
|
*/
|
||||||
export function getRomanNumber(number) {
|
export function getRomanNumber(number) {
|
||||||
number = Math.max(0, Math.round(number));
|
number = Math.max(0, Math.round(number));
|
||||||
if (number < romanLiterals.length) {
|
if (romanLiteralsCache[number]) {
|
||||||
return romanLiterals[number];
|
return romanLiteralsCache[number];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (number > MAX_ROMAN_NUMBER) {
|
||||||
return String(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