export interface RollOptions { maxCritSuccess: number; minCritFailure: number; useSlayingDice: boolean; slayingDiceRepetition: boolean; } export class DefaultRollOptions implements RollOptions { public maxCritSuccess = 1; public minCritFailure = 20; public useSlayingDice = false; public slayingDiceRepetition = false; mergeWith(other: Partial): RollOptions { return { ...this, ...other } as RollOptions; } } export class RollResult { constructor( public result: number, public status: RollResultStatus, public dice: Array, public active: boolean = true, public exploded: boolean = false, ) { if (this.status == RollResultStatus.CRITICAL_FAILURE) { this.failure = true; } else if (this.status == RollResultStatus.CRITICAL_SUCCESS) { this.success = true; } } public failure: boolean | void = undefined; public success: boolean | void = undefined; } export enum RollResultStatus { FAILURE = "FAILURE", SUCCESS = "SUCCESS", CRITICAL_FAILURE = "CRITICAL_FAILURE", CRITICAL_SUCCESS = "CRITICAL_SUCCESS", }