UNPKG

osumodcalculator

Version:

osu! calculator for converting values to DT & HT and other things

225 lines (224 loc) 6.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ModInts = void 0; exports.toInt = toInt; exports.intToAcronym = intToAcronym; exports.nameToAcronym = nameToAcronym; exports.acronymToName = acronymToName; exports.removeDupe = removeDupe; exports.order = order; exports.removeIncompatible = removeIncompatible; exports.fix = fix; exports.fromString = fromString; const _1 = require("."); /** * Mod acronyms as an enum */ var ModInts; (function (ModInts) { ModInts[ModInts["NM"] = 0] = "NM"; ModInts[ModInts["NF"] = 1] = "NF"; ModInts[ModInts["EZ"] = 2] = "EZ"; ModInts[ModInts["TD"] = 4] = "TD"; ModInts[ModInts["HD"] = 8] = "HD"; ModInts[ModInts["HR"] = 16] = "HR"; ModInts[ModInts["SD"] = 32] = "SD"; ModInts[ModInts["DT"] = 64] = "DT"; ModInts[ModInts["RL"] = 128] = "RL"; ModInts[ModInts["HT"] = 256] = "HT"; ModInts[ModInts["NC"] = 512] = "NC"; ModInts[ModInts["FL"] = 1024] = "FL"; ModInts[ModInts["AT"] = 2048] = "AT"; ModInts[ModInts["SO"] = 4096] = "SO"; ModInts[ModInts["AP"] = 8192] = "AP"; ModInts[ModInts["PF"] = 16384] = "PF"; ModInts[ModInts["4K"] = 32768] = "4K"; ModInts[ModInts["5K"] = 65536] = "5K"; ModInts[ModInts["6K"] = 131072] = "6K"; ModInts[ModInts["7K"] = 262144] = "7K"; ModInts[ModInts["8K"] = 524288] = "8K"; ModInts[ModInts["FI"] = 1048576] = "FI"; ModInts[ModInts["RD"] = 2097152] = "RD"; ModInts[ModInts["CN"] = 4194304] = "CN"; ModInts[ModInts["TP"] = 8388608] = "TP"; ModInts[ModInts["9K"] = 16777216] = "9K"; ModInts[ModInts["CP"] = 33554432] = "CP"; ModInts[ModInts["1K"] = 67108864] = "1K"; ModInts[ModInts["3K"] = 134217728] = "3K"; ModInts[ModInts["2K"] = 268435456] = "2K"; ModInts[ModInts["SV2"] = 536870912] = "SV2"; ModInts[ModInts["MR"] = 1073741824] = "MR"; })(ModInts || (exports.ModInts = ModInts = {})); /** * STABLE MODS ONLY * * Converts each mod to their enum value and adds them together * * @includeExample src/examples/mod.ts:4-5 */ function toInt(mods) { let modInt = 0; const map = _1.Mods.map(x => [x.acronym, x.enum]).filter(x => x[1] != -1); const searchmap = map.map(x => x[0]); for (const mod of mods) { if (searchmap.includes(mod)) { const idx = searchmap.indexOf(mod); const v = map[idx][1]; modInt += v; } } return modInt; } /** * STABLE MODS ONLY * * Converts an enum into the acronym of each mod * * @includeExample src/examples/mod.ts:8-9 */ function intToAcronym(modInt) { const mods = []; for (const mod of _1.Mods) { if (mod.enum != -1 && modInt & mod.enum) { mods.push(mod.acronym); } } removeIncompatible(mods); return mods; } /** * mod acronyms in order (subjective) */ function getOrderedMods() { return ['EZ', 'HD', 'FI', 'HT', 'DC', 'DT', 'NC', 'HR', 'FL', 'SD', 'PF', 'NF', 'AT', 'CN', 'RX', 'AP', 'TP', 'SO', 'TD', '1K', '2K', '3K', '4K', '5K', '6K', '7K', '8K', '9K', '10K', 'CO', 'RD', 'MR', 'SV2', 'BL', 'ST', 'DA', 'CL', 'AL', 'ST', 'TR', 'WG', 'SI', 'GR', 'DF', 'WU', 'WD', 'TR', 'BR', 'AD', 'MU', 'NS', 'MG', 'RP', 'AS', 'FF' ]; } /** * Converts mod names to their respective acronyms * * mods are NOT case sensitive * * @includeExample src/examples/mod.ts:12-13 */ function nameToAcronym(mods) { mods = mods.map(x => x.toLowerCase()); const acronyms = []; const map = _1.Mods.map(x => [x.name.toLowerCase(), x.acronym]); const searchmap = map.map(x => x[0]); for (const mod of mods) { if (searchmap.includes(mod)) { const index = searchmap.indexOf(mod); acronyms.push(map[index][1]); } } return acronyms; } /** * Converts mod acronyms to their respective names * * mods are NOT case sensitive * * @includeExample src/examples/mod.ts:16-17 */ function acronymToName(mods) { mods = mods.map(x => x.toUpperCase()); const fullnames = []; const map = _1.Mods.map(x => [x.acronym, x.name]); const searchmap = map.map(x => x[0]); for (const mod of mods) { if (searchmap.includes(mod)) { const index = searchmap.indexOf(mod); fullnames.push(map[index][1]); } } return fullnames; } /** * remove duplicate mods * * @includeExample src/examples/mod.ts:20-21 */ function removeDupe(mods) { const nodupe = []; for (const mod of mods) { if (!nodupe.includes(mod)) { nodupe.push(mod); } } return nodupe; } /** * orders mods * * @includeExample src/examples/mod.ts:24-25 */ function order(mods) { const nt = []; for (const om of getOrderedMods()) { for (const mod of mods) { if (om === mod) { nt.push(mod); } } } return nt; } /** * removes incompatible mods such as ez+hr and mods from other mods * * @includeExample src/examples/mod.ts:28-29 */ function removeIncompatible(mods, mode = 'osu') { const ignore = []; const map = _1.Mods.map(x => x.acronym); const fr = []; for (const mod of mods) { const idx = map.indexOf(mod); const checkMod = _1.Mods[idx]; if (!ignore.includes(mod) && (checkMod.restrictMode && checkMod.restrictMode.includes(mode) || !checkMod.restrictMode || checkMod.restrictMode.length == 0)) { for (const ig of checkMod.incompatible) { if (ig.startsWith('(')) { if ((!ig.includes('!' + mode) && ig.includes(mode)) || (ig.includes('!') && !ig.includes(mode))) { ignore.push(ig.split(')')[1]); } } else { ignore.push(ig); } } fr.push(mod); } } return fr; } /** * re-orders, removes duplicates, removes incompabitle * * @includeExample src/examples/mod.ts:32-34 */ function fix(mods, mode = 'osu') { const nodupe = removeDupe(mods); const inc = removeIncompatible(nodupe, mode); const nt = order(inc); return nt; } /** * convert string into mods * * make sure each mod is 2 characters * * @includeExample src/examples/mod.ts:37-38 */ function fromString(str) { const temp = str.replace(/(.{2})/g, "$1 ").split(' '); const map = _1.Mods.map(x => x.acronym); const output = []; temp.forEach(mod => { if (map.includes(mod)) { output.push(mod); } }); return output; }