import { expect } from "vitest"; import { GameManagerHelper } from "./gameManagerHelper"; import type { ModifierTypeKeys } from "#app/modifier/modifier-type"; import { itemPoolChecks } from "#app/modifier/modifier-type"; export class ModifierHelper extends GameManagerHelper { /** * Adds a Modifier to the list of modifiers to check for. * * Note that all modifiers are updated during the start of `SelectModifierPhase`. * @param modifier The Modifier to add. * @returns `this` */ addCheck(modifier: ModifierTypeKeys): this { itemPoolChecks.set(modifier, undefined); return this; } /** * `get`s a value from the `itemPoolChecks` map. * * If the item is in the Modifier Pool, and the player can get it, will return `true`. * * If the item is *not* in the Modifier Pool, will return `false`. * * If a `SelectModifierPhase` has not occurred, and we do not know if the item is in the Modifier Pool or not, will return `undefined`. * @param modifier * @returns */ getCheck(modifier: ModifierTypeKeys): boolean | undefined { return itemPoolChecks.get(modifier); } /** * `expect`s a Modifier `toBeTruthy` (in the Modifier Pool) or `Falsy` (unobtainable on this floor). Use during a test. * * Note that if a `SelectModifierPhase` has not been run yet, these values will be `undefined`, and the check will fail. * @param modifier The modifier to check. * @param expectToBePreset Whether the Modifier should be in the Modifier Pool. Set to `false` to expect it to be absent instead. * @returns `this` */ testCheck(modifier: ModifierTypeKeys, expectToBePreset: boolean): this { if (expectToBePreset) { expect(itemPoolChecks.get(modifier)).toBeTruthy(); } expect(itemPoolChecks.get(modifier)).toBeFalsy(); return this; } /** Removes all modifier checks. @returns `this` */ clearChecks() { itemPoolChecks.clear(); return this; } private log(...params: any[]) { console.log("Modifiers:", ...params); } }