break rollUtils into multiple files
This commit is contained in:
parent
730c441645
commit
2b579eb4ac
|
@ -1,11 +1,9 @@
|
|||
import { closeLog, initLog } from '@Log4Deno';
|
||||
|
||||
import { DEBUG } from '~flags';
|
||||
|
||||
import { parseRoll } from 'artigen/parser.ts';
|
||||
import { loggingEnabled } from 'artigen/rollUtils.ts';
|
||||
import { loggingEnabled } from 'artigen/utils/logFlag.ts';
|
||||
|
||||
loggingEnabled && initLog('logs/worker', DEBUG);
|
||||
loggingEnabled && initLog('logs/worker', loggingEnabled);
|
||||
|
||||
// Alert rollQueue that this worker is ready
|
||||
self.postMessage('ready');
|
|
@ -4,13 +4,14 @@ import { log, LogTypes as LT } from '@Log4Deno';
|
|||
import config from '~config';
|
||||
import { DEVMODE } from '~flags';
|
||||
|
||||
import { loggingEnabled } from 'artigen/rollUtils.ts';
|
||||
import { SolvedRoll } from 'artigen/solver.d.ts';
|
||||
|
||||
import { removeWorker } from 'artigen/managers/countManager.ts';
|
||||
import { QueuedRoll } from 'artigen/managers/manager.d.ts';
|
||||
|
||||
import { loggingEnabled } from 'artigen/utils/logFlag.ts';
|
||||
import dbClient from 'db/client.ts';
|
||||
|
||||
import { queries } from 'db/common.ts';
|
||||
|
||||
import stdResp from 'endpoints/stdResponses.ts';
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
import { log, LogTypes as LT } from '@Log4Deno';
|
||||
|
||||
import { loggingEnabled } from 'artigen/rollUtils.ts';
|
||||
|
||||
import { QueuedRoll } from 'artigen/managers/manager.d.ts';
|
||||
|
||||
import { loggingEnabled } from 'artigen/utils/logFlag.ts';
|
||||
|
||||
export const onWorkerReady = (rollWorker: Worker, rollRequest: QueuedRoll) => {
|
||||
loggingEnabled && log(LT.LOG, `Sending roll to worker: ${rollRequest.rollCmd}, ${JSON.stringify(rollRequest.modifiers)}`);
|
||||
rollWorker.postMessage({
|
||||
|
|
|
@ -10,7 +10,7 @@ import { terminateWorker } from 'artigen/managers/handler/workerTerminate.ts';
|
|||
export const handleRollRequest = (rollRequest: QueuedRoll) => {
|
||||
// Handle setting up and calling the rollWorker
|
||||
addWorker();
|
||||
const rollWorker = new Worker(new URL('../rollWorker.ts', import.meta.url).href, { type: 'module' });
|
||||
const rollWorker = new Worker(new URL('./artigenWorker.ts', import.meta.url).href, { type: 'module' });
|
||||
const workerTimeout = setTimeout(() => terminateWorker(rollWorker, rollRequest), config.limits.workerTimeout);
|
||||
|
||||
// Handle events from the worker
|
||||
|
|
|
@ -3,10 +3,14 @@ import { log, LogTypes as LT } from '@Log4Deno';
|
|||
import config from '~config';
|
||||
|
||||
import { formatRoll } from 'artigen/rollFormatter.ts';
|
||||
import { compareTotalRolls, compareTotalRollsReverse, escapeCharacters, legalMathOperators, loggingEnabled } from 'artigen/rollUtils.ts';
|
||||
import { fullSolver } from 'artigen/solver.ts';
|
||||
import { CountDetails, ReturnData, SolvedRoll, SolvedStep } from 'artigen/solver.d.ts';
|
||||
|
||||
import { escapeCharacters } from 'artigen/utils/escape.ts';
|
||||
import { legalMathOperators } from 'artigen/utils/legalMath.ts';
|
||||
import { loggingEnabled } from 'artigen/utils/logFlag.ts';
|
||||
import { compareTotalRolls, compareTotalRollsReverse } from 'artigen/utils/sortFuncs.ts';
|
||||
|
||||
import { RollModifiers } from 'src/mod.d.ts';
|
||||
|
||||
// parseRoll(fullCmd, modifiers)
|
||||
|
@ -34,7 +38,7 @@ export const parseRoll = (fullCmd: string, modifiers: RollModifiers): SolvedRoll
|
|||
try {
|
||||
// Split the fullCmd by the command prefix to allow every roll/math op to be handled individually
|
||||
const sepRolls = fullCmd.split(config.prefix);
|
||||
// TODO: HERE for the [[ ]] nesting stuff
|
||||
// TODO(@burn-e99): HERE for the [[ ]] nesting stuff
|
||||
|
||||
const tempReturnData: ReturnData[] = [];
|
||||
const tempCountDetails: CountDetails[] = [
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
import { log, LogTypes as LT } from '@Log4Deno';
|
||||
|
||||
import { rollCounter } from 'artigen/counter.ts';
|
||||
import { rollCounter } from './utils/counter.ts';
|
||||
import { RollModifiers } from 'src/mod.d.ts';
|
||||
import { roll } from 'artigen/roller.ts';
|
||||
import { loggingEnabled } from 'artigen/rollUtils.ts';
|
||||
import { RollFormat } from 'artigen/solver.d.ts';
|
||||
|
||||
import { loggingEnabled } from 'artigen/utils/logFlag.ts';
|
||||
|
||||
// formatRoll(rollConf, modifiers) returns one SolvedStep
|
||||
// formatRoll handles creating and formatting the completed rolls into the SolvedStep format
|
||||
export const formatRoll = (rollConf: string, modifiers: RollModifiers): RollFormat => {
|
||||
|
|
|
@ -1,96 +0,0 @@
|
|||
import { log, LogTypes as LT } from '@Log4Deno';
|
||||
import { RollModifiers } from 'src/mod.d.ts';
|
||||
|
||||
import { DPercentConf, ReturnData, RollSet } from 'artigen/solver.d.ts';
|
||||
|
||||
type MathFunction = (arg: number) => number;
|
||||
export const loggingEnabled = false;
|
||||
export const legalMath: MathFunction[] = [];
|
||||
(Object.getOwnPropertyNames(Math) as (keyof Math)[]).forEach((propName) => {
|
||||
const mathProp = Math[propName];
|
||||
if (typeof mathProp === 'function' && mathProp.length === 1) {
|
||||
legalMath.push(mathProp as MathFunction);
|
||||
}
|
||||
});
|
||||
export const legalMathOperators = legalMath.map((oper) => oper.name);
|
||||
|
||||
// genRoll(size) returns number
|
||||
// genRoll rolls a die of size size and returns the result
|
||||
export const genRoll = (size: number, modifiers: RollModifiers, dPercent: DPercentConf): number => {
|
||||
let result;
|
||||
if (modifiers.maxRoll) {
|
||||
result = size;
|
||||
} else if (modifiers.minRoll) {
|
||||
result = 1;
|
||||
} else {
|
||||
// Math.random * size will return a decimal number between 0 and size (excluding size), so add 1 and floor the result to not get 0 as a result
|
||||
result = modifiers.nominalRoll ? size / 2 + 0.5 : Math.floor(Math.random() * size + 1);
|
||||
}
|
||||
return dPercent.on ? (result - 1) * dPercent.sizeAdjustment : result;
|
||||
};
|
||||
|
||||
// genFateRoll returns -1|0|1
|
||||
// genFateRoll turns a d6 into a fate die, with sides: -1, -1, 0, 0, 1, 1
|
||||
export const genFateRoll = (modifiers: RollModifiers): number => {
|
||||
if (modifiers.nominalRoll) {
|
||||
return 0;
|
||||
} else {
|
||||
const sides = [-1, -1, 0, 0, 1, 1];
|
||||
return sides[genRoll(6, modifiers, <DPercentConf> { on: false }) - 1];
|
||||
}
|
||||
};
|
||||
|
||||
// compareRolls(a, b) returns -1|0|1
|
||||
// compareRolls is used to order an array of RollSets by RollSet.roll
|
||||
export const compareRolls = (a: RollSet, b: RollSet): number => {
|
||||
if (a.roll < b.roll) {
|
||||
return -1;
|
||||
}
|
||||
if (a.roll > b.roll) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
};
|
||||
|
||||
const internalCompareTotalRolls = (a: ReturnData, b: ReturnData, dir: 1 | -1): number => {
|
||||
if (a.rollTotal < b.rollTotal) {
|
||||
return -1 * dir;
|
||||
}
|
||||
if (a.rollTotal > b.rollTotal) {
|
||||
return 1 * dir;
|
||||
}
|
||||
return 0;
|
||||
};
|
||||
|
||||
// compareTotalRolls(a, b) returns -1|0|1
|
||||
// compareTotalRolls is used to order an array of RollSets by RollSet.roll
|
||||
export const compareTotalRolls = (a: ReturnData, b: ReturnData): number => internalCompareTotalRolls(a, b, 1);
|
||||
|
||||
// compareTotalRollsReverse(a, b) returns 1|0|-1
|
||||
// compareTotalRollsReverse is used to order an array of RollSets by RollSet.roll reversed
|
||||
export const compareTotalRollsReverse = (a: ReturnData, b: ReturnData): number => internalCompareTotalRolls(a, b, -1);
|
||||
|
||||
// compareRolls(a, b) returns -1|0|1
|
||||
// compareRolls is used to order an array of RollSets by RollSet.origIdx
|
||||
export const compareOrigIdx = (a: RollSet, b: RollSet): number => {
|
||||
if (a.origIdx < b.origIdx) {
|
||||
return -1;
|
||||
}
|
||||
if (a.origIdx > b.origIdx) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
};
|
||||
|
||||
// escapeCharacters(str, esc) returns str
|
||||
// escapeCharacters escapes all characters listed in esc
|
||||
export const escapeCharacters = (str: string, esc: string): string => {
|
||||
// Loop thru each esc char one at a time
|
||||
for (const e of esc) {
|
||||
loggingEnabled && log(LT.LOG, `Escaping character ${e} | ${str}, ${esc}`);
|
||||
// Create a new regex to look for that char that needs replaced and escape it
|
||||
const tempRgx = new RegExp(`[${e}]`, 'g');
|
||||
str = str.replace(tempRgx, `\\${e}`);
|
||||
}
|
||||
return str;
|
||||
};
|
|
@ -2,9 +2,12 @@ import { log, LogTypes as LT } from '@Log4Deno';
|
|||
|
||||
import config from '~config';
|
||||
|
||||
import { compareOrigIdx, compareRolls, genFateRoll, genRoll, loggingEnabled } from 'artigen/rollUtils.ts';
|
||||
import { RollConf, RollSet, RollType } from 'artigen/solver.d.ts';
|
||||
|
||||
import { genFateRoll, genRoll } from 'artigen/utils/generateRoll.ts';
|
||||
import { loggingEnabled } from 'artigen/utils/logFlag.ts';
|
||||
import { compareOrigIdx, compareRolls } from 'artigen/utils/sortFuncs.ts';
|
||||
|
||||
import { RollModifiers } from 'src/mod.d.ts';
|
||||
|
||||
// Call with loopCountCheck(++loopCount);
|
||||
|
|
|
@ -6,7 +6,9 @@
|
|||
import { log, LogTypes as LT } from '@Log4Deno';
|
||||
|
||||
import { SolvedStep } from 'artigen/solver.d.ts';
|
||||
import { legalMath, legalMathOperators, loggingEnabled } from 'artigen/rollUtils.ts';
|
||||
|
||||
import { legalMath, legalMathOperators } from 'artigen/utils/legalMath.ts';
|
||||
import { loggingEnabled } from 'artigen/utils/logFlag.ts';
|
||||
|
||||
// fullSolver(conf, wrapDetails) returns one condensed SolvedStep
|
||||
// fullSolver is a function that recursively solves the full roll and math
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
import { log, LogTypes as LT } from '@Log4Deno';
|
||||
|
||||
import { loggingEnabled } from 'artigen/utils/logFlag.ts';
|
||||
|
||||
// escapeCharacters(str, esc) returns str
|
||||
// escapeCharacters escapes all characters listed in esc
|
||||
export const escapeCharacters = (str: string, esc: string): string => {
|
||||
// Loop thru each esc char one at a time
|
||||
for (const e of esc) {
|
||||
loggingEnabled && log(LT.LOG, `Escaping character ${e} | ${str}, ${esc}`);
|
||||
// Create a new regex to look for that char that needs replaced and escape it
|
||||
const tempRgx = new RegExp(`[${e}]`, 'g');
|
||||
str = str.replace(tempRgx, `\\${e}`);
|
||||
}
|
||||
return str;
|
||||
};
|
|
@ -0,0 +1,29 @@
|
|||
import { RollModifiers } from 'src/mod.d.ts';
|
||||
|
||||
import { DPercentConf } from 'artigen/solver.d.ts';
|
||||
|
||||
// genRoll(size) returns number
|
||||
// genRoll rolls a die of size size and returns the result
|
||||
export const genRoll = (size: number, modifiers: RollModifiers, dPercent: DPercentConf): number => {
|
||||
let result;
|
||||
if (modifiers.maxRoll) {
|
||||
result = size;
|
||||
} else if (modifiers.minRoll) {
|
||||
result = 1;
|
||||
} else {
|
||||
// Math.random * size will return a decimal number between 0 and size (excluding size), so add 1 and floor the result to not get 0 as a result
|
||||
result = modifiers.nominalRoll ? size / 2 + 0.5 : Math.floor(Math.random() * size + 1);
|
||||
}
|
||||
return dPercent.on ? (result - 1) * dPercent.sizeAdjustment : result;
|
||||
};
|
||||
|
||||
// genFateRoll returns -1|0|1
|
||||
// genFateRoll turns a d6 into a fate die, with sides: -1, -1, 0, 0, 1, 1
|
||||
export const genFateRoll = (modifiers: RollModifiers): number => {
|
||||
if (modifiers.nominalRoll) {
|
||||
return 0;
|
||||
} else {
|
||||
const sides = [-1, -1, 0, 0, 1, 1];
|
||||
return sides[genRoll(6, modifiers, <DPercentConf> { on: false }) - 1];
|
||||
}
|
||||
};
|
|
@ -0,0 +1,11 @@
|
|||
type MathFunction = (arg: number) => number;
|
||||
|
||||
export const legalMath: MathFunction[] = [];
|
||||
(Object.getOwnPropertyNames(Math) as (keyof Math)[]).forEach((propName) => {
|
||||
const mathProp = Math[propName];
|
||||
if (typeof mathProp === 'function' && mathProp.length === 1) {
|
||||
legalMath.push(mathProp as MathFunction);
|
||||
}
|
||||
});
|
||||
|
||||
export const legalMathOperators = legalMath.map((oper) => oper.name);
|
|
@ -0,0 +1 @@
|
|||
export const loggingEnabled = false;
|
|
@ -0,0 +1,43 @@
|
|||
import { ReturnData, RollSet } from 'src/artigen/solver.d.ts';
|
||||
|
||||
// compareRolls(a, b) returns -1|0|1
|
||||
// compareRolls is used to order an array of RollSets by RollSet.roll
|
||||
export const compareRolls = (a: RollSet, b: RollSet): number => {
|
||||
if (a.roll < b.roll) {
|
||||
return -1;
|
||||
}
|
||||
if (a.roll > b.roll) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
};
|
||||
|
||||
const internalCompareTotalRolls = (a: ReturnData, b: ReturnData, dir: 1 | -1): number => {
|
||||
if (a.rollTotal < b.rollTotal) {
|
||||
return -1 * dir;
|
||||
}
|
||||
if (a.rollTotal > b.rollTotal) {
|
||||
return 1 * dir;
|
||||
}
|
||||
return 0;
|
||||
};
|
||||
|
||||
// compareTotalRolls(a, b) returns -1|0|1
|
||||
// compareTotalRolls is used to order an array of RollSets by RollSet.roll
|
||||
export const compareTotalRolls = (a: ReturnData, b: ReturnData): number => internalCompareTotalRolls(a, b, 1);
|
||||
|
||||
// compareTotalRollsReverse(a, b) returns 1|0|-1
|
||||
// compareTotalRollsReverse is used to order an array of RollSets by RollSet.roll reversed
|
||||
export const compareTotalRollsReverse = (a: ReturnData, b: ReturnData): number => internalCompareTotalRolls(a, b, -1);
|
||||
|
||||
// compareRolls(a, b) returns -1|0|1
|
||||
// compareRolls is used to order an array of RollSets by RollSet.origIdx
|
||||
export const compareOrigIdx = (a: RollSet, b: RollSet): number => {
|
||||
if (a.origIdx < b.origIdx) {
|
||||
return -1;
|
||||
}
|
||||
if (a.origIdx > b.origIdx) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
};
|
|
@ -2,9 +2,10 @@ import { log, LogTypes as LT } from '@Log4Deno';
|
|||
|
||||
import config from '~config';
|
||||
|
||||
import { loggingEnabled } from 'artigen/rollUtils.ts';
|
||||
import { CountDetails, SolvedRoll } from 'artigen/solver.d.ts';
|
||||
|
||||
import { loggingEnabled } from 'artigen/utils/logFlag.ts';
|
||||
|
||||
import { RollModifiers } from 'src/mod.d.ts';
|
||||
|
||||
export const failColor = 0xe71212;
|
||||
|
|
Loading…
Reference in New Issue