diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 98736b8020a..bdf63cfbf96 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -3316,9 +3316,23 @@ export default class BattleScene extends SceneBase { }); } - hasModifier(modifier: PersistentModifier, enemy = false): boolean { - const modifiers = !enemy ? this.modifiers : this.enemyModifiers; - return modifiers.indexOf(modifier) > -1; + /** + * Check whether a given predicate function returns `true` for any of a given side's modifiers. + * @param predicate - The {@linkcode ModifierPredicate} to check against. + * THe predicate function will be called once for each of the given side's modifiers until it returns `true`, + * or the end of the array. + * @param enemy - Whether to search the enemy (`true`) or player (`false`) side of the field; default `false` + */ + hasModifier(modifier: ModifierPredicate, enemy?: boolean): boolean; + /** + * Check whether a given PersistentModifier exists on the given side of the field. + * @param modifier - The {@linkcode PersistentModifier} to check against. + * @param enemy - Whether to search the enemy (`true`) or player (`false`) side of the field; default `false` + */ + hasModifier(modifier: PersistentModifier, enemy?: boolean): boolean; + hasModifier(modifier: ModifierPredicate | PersistentModifier, enemy = false): boolean { + const modifiers = enemy ? this.enemyModifiers : this.modifiers; + return typeof modifier === "function" ? modifiers.some(modifier) : modifiers.indexOf(modifier) > -1; } /** @@ -3358,24 +3372,26 @@ export default class BattleScene extends SceneBase { /** * Get all of the modifiers that pass the `modifierFilter` function - * @param modifierFilter The function used to filter a target's modifiers - * @param isPlayer Whether to search the player (`true`) or the enemy (`false`); Defaults to `true` - * @returns the list of all modifiers that passed the `modifierFilter` function + * @param modifierFilter - The function used to filter a target's modifiers + * @param isPlayer - Whether to search the player (`true`) or the enemy (`false`) party; default `true`. + * @returns - An array containing all modifiers that passed the `modifierFilter` function. */ + findModifiers(modifierFilter: ModifierPredicate, isPlayer?: boolean): PersistentModifier[]; + findModifiers(modifierFilter: ModifierIdentityPredicate, isPlayer?: boolean): T[]; findModifiers(modifierFilter: ModifierPredicate, isPlayer = true): PersistentModifier[] { return (isPlayer ? this.modifiers : this.enemyModifiers).filter(modifierFilter); } + findModifier(modifierFilter: ModifierPredicate, player?: boolean): PersistentModifier | undefined; findModifier( modifierFilter: ModifierIdentityPredicate, player?: boolean, ): T | undefined; - findModifier(modifierFilter: ModifierPredicate, player?: boolean): PersistentModifier | undefined; /** - * Find the first modifier that pass the `modifierFilter` function - * @param modifierFilter The function used to filter a target's modifiers - * @param player Whether to search the player (`true`) or the enemy (`false`); Defaults to `true` - * @returns the first modifier that passed the `modifierFilter` function; `undefined` if none passed + * Get the first modifier that passes the `modifierFilter` function. + * @param modifierFilter - The function used to filter a target's modifiers. + * @param isPlayer - Whether to search the player (`true`) or the enemy (`false`) party; default `true`. + * @returns - The first modifier that passed the `modifierFilter` function, or `undefined` if none are found. */ findModifier(modifierFilter: ModifierPredicate, player = true): PersistentModifier | undefined { return (player ? this.modifiers : this.enemyModifiers).find(modifierFilter); diff --git a/src/data/pokemon-forms.ts b/src/data/pokemon-forms.ts index 1098ddc4eeb..4e7dca4d08d 100644 --- a/src/data/pokemon-forms.ts +++ b/src/data/pokemon-forms.ts @@ -281,7 +281,7 @@ export class SpeciesFormChangeItemTrigger extends SpeciesFormChangeTrigger { } canChange(pokemon: Pokemon): boolean { - return !!globalScene.findModifier( + return globalScene.hasModifier( m => m instanceof PokemonFormChangeItemModifier && m.pokemonId === pokemon.id && diff --git a/src/phases/berry-phase.ts b/src/phases/berry-phase.ts index 989f19c944f..379b1522cbb 100644 --- a/src/phases/berry-phase.ts +++ b/src/phases/berry-phase.ts @@ -36,7 +36,7 @@ export class BerryPhase extends FieldPhase { * @param pokemon - The {@linkcode Pokemon} to check */ eatBerries(pokemon: Pokemon): void { - const hasUsableBerry = !!globalScene.findModifier( + const hasUsableBerry = globalScene.hasModifier( m => m instanceof BerryModifier && m.shouldApply(pokemon), pokemon.isPlayer(), ); diff --git a/src/ui/modifier-select-ui-handler.ts b/src/ui/modifier-select-ui-handler.ts index 7f5bf997f88..2e4ce50fae7 100644 --- a/src/ui/modifier-select-ui-handler.ts +++ b/src/ui/modifier-select-ui-handler.ts @@ -183,8 +183,8 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { this.player = args[0]; const partyHasHeldItem = - this.player && !!globalScene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.isTransferable).length; - const canLockRarities = !!globalScene.findModifier(m => m instanceof LockModifierTiersModifier); + this.player && globalScene.hasModifier(m => m instanceof PokemonHeldItemModifier && m.isTransferable); + const canLockRarities = globalScene.hasModifier(m => m instanceof LockModifierTiersModifier); this.transferButtonContainer.setVisible(false); this.transferButtonContainer.setAlpha(0);