export interface RollOptions { maxCritSucc: number; minCritFail: number; useSlayingDice: boolean; slayingDiceRepetition: boolean; } export class DefaultRollOptions implements RollOptions { public maxCritSucc = 1; public minCritFail = 20; public useSlayingDice = false; public slayingDiceRepetition = false; mergeWith(other: Partial<RollOptions>): RollOptions { return { ...this, ...other } as RollOptions; } } export class RollResult { constructor(public value: number, public status: RollResultStatus, public dice: Array<number>) {} } export enum RollResultStatus { FAILURE, SUCCESS, CRITICAL_FAILURE, CRITICAL_SUCCESS, }