osu-api-extended
Version:
Advanced osu! api wrapper for v1 and v2, with extra stuff
209 lines (208 loc) • 6.67 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.calculate_mods = exports.ModsToName = void 0;
const enums_1 = require("../types/enums");
const handleErrors_1 = require("../utility/handleErrors");
// WHILE LOOP FASTER dot
const bitValues = [
'NF', 'EZ', 'TD', 'HD', 'HR', 'SD', 'DT', 'RX', 'HT', 'NC',
'FL', 'AT', 'SO', 'AP', 'PF', '4K', '5K', '6K', '7K', '8K',
'FI', 'RD', 'CN', 'TG', '9K', '10K', '1K', '3K', '2K', 'v2'
];
const ModsToName = (modsNumber, order) => {
let bit = 1;
if (order == true) {
const convertedParts = [];
while (bit <= modsNumber && bit <= (1 << 30)) {
if (modsNumber & bit) {
convertedParts.push(bitValues[Math.log2(bit)]);
}
;
bit <<= 1;
}
;
convertedParts.sort((a, b) => enums_1.ModsOrder[a.toLowerCase()] - enums_1.ModsOrder[b.toLowerCase()]);
const converted = convertedParts.join('');
return converted;
}
;
let convertedParts = '';
while (bit <= modsNumber && bit <= (1 << 30)) {
if (modsNumber & bit) {
convertedParts += bitValues[Math.log2(bit)];
}
bit <<= 1;
}
;
return convertedParts;
};
exports.ModsToName = ModsToName;
// SWITCH STATEMENT CREATED ON PURPOSE BECAUSE IT'S WAY FASTER
const calculate_mods = (ModsName, order) => {
if (ModsName == null) {
return (0, handleErrors_1.handleErrors)(`Specify mods name (HDDT or 72)`);
}
;
if (typeof ModsName == 'number') {
const name = (0, exports.ModsToName)(ModsName, order);
return {
number: ModsName,
name: name,
};
}
;
let mods_id = 0;
const convertedParts = [];
let ModsArray = [];
if (Array.isArray(ModsName)) {
ModsArray = ModsName.map(r => r.acronym.toLowerCase());
}
else {
ModsArray = ModsName.toLowerCase().match(/.{1,2}/g);
}
;
if (!Array.isArray(ModsArray)) {
return (0, handleErrors_1.handleErrors)(`Can't convert mods (${ModsName}) to array of mods`);
}
;
for (let i = 0; i < ModsArray.length; i++) {
const mod_name = ModsArray[i];
switch (mod_name) {
case 'nf':
mods_id += 1;
convertedParts.push('NF');
break;
case 'ez':
mods_id += 2;
convertedParts.push('EZ');
break;
case 'td':
mods_id += 4;
convertedParts.push('TD');
break;
case 'hd':
mods_id += 8;
convertedParts.push('HD');
break;
case 'hr':
mods_id += 16;
convertedParts.push('HR');
break;
case 'sd':
mods_id += 32;
convertedParts.push('SD');
break;
case 'dt':
mods_id += 64;
convertedParts.push('DT');
break;
case 'rx':
mods_id += 128;
convertedParts.push('RX');
break;
case 'ht':
mods_id += 256;
convertedParts.push('HT');
break;
case 'nc':
mods_id += 576;
convertedParts.push('NC');
break;
case 'fl':
mods_id += 1024;
convertedParts.push('FL');
break;
case 'at':
mods_id += 2048;
convertedParts.push('AT');
break;
case 'so':
mods_id += 4096;
convertedParts.push('SO');
break;
case 'ap':
mods_id += 8192;
convertedParts.push('AP');
break;
case 'pf':
mods_id += 16416;
convertedParts.push('PF');
break;
case '4k':
mods_id += 32768;
convertedParts.push('4K');
break;
case '5k':
mods_id += 65536;
convertedParts.push('5K');
break;
case '6k':
mods_id += 131072;
convertedParts.push('6K');
break;
case '7k':
mods_id += 262144;
convertedParts.push('7K');
break;
case '8k':
mods_id += 524288;
convertedParts.push('8K');
break;
case 'fi':
mods_id += 1048576;
convertedParts.push('FI');
break;
case 'rd':
mods_id += 2097152;
convertedParts.push('RD');
break;
case 'cn':
mods_id += 4194304;
convertedParts.push('CN');
break;
case 'target':
mods_id += 8388608;
convertedParts.push('TG');
break;
case '9k':
mods_id += 16777216;
convertedParts.push('9K');
break;
case 'keycoop':
mods_id += 33554432;
convertedParts.push('10K');
break;
case '1k':
mods_id += 67108864;
convertedParts.push('1K');
break;
case '3k':
mods_id += 134217728;
convertedParts.push('3K');
break;
case '2k':
mods_id += 268435456;
convertedParts.push('2K');
break;
case 'scorev2':
mods_id += 536870912;
convertedParts.push('v2');
break;
case 'mr':
mods_id += 1073741824;
convertedParts.push('MR');
break;
default:
convertedParts.push(mod_name.toUpperCase());
break;
}
;
}
;
convertedParts.sort((a, b) => enums_1.ModsOrder[a.toLowerCase()] - enums_1.ModsOrder[b.toLowerCase()]);
return {
number: mods_id,
name: convertedParts.join(''),
};
};
exports.calculate_mods = calculate_mods;
;