mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-09-23 15:03:24 +02:00
Removed reward file that got in somehow
This commit is contained in:
parent
eb36c5524e
commit
bc5440bded
@ -1,196 +0,0 @@
|
|||||||
import type { RewardId } from "#enums/reward-id";
|
|
||||||
import type { RarityTier } from "#enums/reward-tier";
|
|
||||||
import type { PlayerPokemon } from "#field/pokemon";
|
|
||||||
import type { Exact } from "#types/type-helpers";
|
|
||||||
import type { PokemonMoveSelectFilter, PokemonSelectFilter } from "#ui/party-ui-handler";
|
|
||||||
import i18next from "i18next";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @module
|
|
||||||
* The term "Reward" refers to items the player can access in the post-battle screen (although
|
|
||||||
* they may be used in other places of the code as well).
|
|
||||||
|
|
||||||
* Examples include (but are not limited to):
|
|
||||||
* - Potions and other healing items
|
|
||||||
* - Held items and trainer items
|
|
||||||
* - Money items such as nugget and ancient relic
|
|
||||||
|
|
||||||
* Rewards have a basic structure with a name, description, and icon. These are used to display
|
|
||||||
* the reward in the reward select screen. All rewards have an .apply() method, which applies the
|
|
||||||
* effect, for example:
|
|
||||||
* - Apply healing to a pokemon
|
|
||||||
* - Assign a held item to a pokemon, or a trainer item to the player
|
|
||||||
* - Add money
|
|
||||||
|
|
||||||
* Some rewards, once clicked, simply have their effect---these are Rewards that add money, pokéball,
|
|
||||||
* vouchers, or global effect such as Sacred Ash.
|
|
||||||
* Most rewards require extra parameters. They are divided into subclasses depending on the parameters
|
|
||||||
* that they need, in particular:
|
|
||||||
* - PokemonReward requires to pass a Pokemon (to apply healing, assign item...)
|
|
||||||
* - PokemonMoveReward requires to pass a Pokemon and a move (for Elixir, or PP Up)
|
|
||||||
* Plus some edge cases for Memory Mushroom and DNA Splicers.
|
|
||||||
|
|
||||||
* The parameters to be passed are generated by the .applyReward() function in {@linkcode SelectRewardPhase}.
|
|
||||||
* This function takes care of opening the party screen and letting the player select a party pokemon,
|
|
||||||
* a move, etc. depending on what is required. Once the parameters are generated, instead of calling
|
|
||||||
* .apply() directly, we call the .applyReward() method in BattleScene, which also plays the sound.
|
|
||||||
* [This method could perhaps be removed].
|
|
||||||
|
|
||||||
* Rewards are assigned RewardId, and there are also RewardCategoryId. For example, TM is a RewardCategoryId,
|
|
||||||
* while CommonTM, RareTM etc are RewardIds. There is _not_ a RewardId for _each_ move. Similarly,
|
|
||||||
* some specific categories of held items are assigned their own RewardId, but they all fall under a single
|
|
||||||
* RewardCategoryId.
|
|
||||||
|
|
||||||
* rewardInitObj plays a similar role to allHeldItems, except instead of containing all possible reward
|
|
||||||
* instances, it instead contains functions that generate those rewards. Here, the keys used are strings
|
|
||||||
* rather than RewardId, the difference exists because here we want to distinguish unique held items
|
|
||||||
* for example. The entries of rewardInitObj are used in the RewardPool.
|
|
||||||
|
|
||||||
* There are some more derived classes, in particular:
|
|
||||||
* RewardGenerator, which creates Reward instances from a certain group (e.g. TMs, nature mints, or berries);
|
|
||||||
* and RewardOption, which is displayed during the select reward phase at the end of each encounter.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Type helper to exactly match objects and nothing else.
|
|
||||||
* @todo merge with `Exact` later on
|
|
||||||
*/
|
|
||||||
export type MatchExact<T> = T extends object ? Exact<T> : T;
|
|
||||||
|
|
||||||
export abstract class Reward {
|
|
||||||
// TODO: If all we care about for categorization is the reward's ID's _category_, why not do it there?
|
|
||||||
public id: RewardId;
|
|
||||||
public localeKey: string;
|
|
||||||
public iconImage: string;
|
|
||||||
public group: string; // TODO: Make a union type of all groups
|
|
||||||
public soundName: string;
|
|
||||||
public tier: RarityTier;
|
|
||||||
|
|
||||||
constructor(localeKey: string | null, iconImage: string | null, group?: string, soundName?: string) {
|
|
||||||
this.localeKey = localeKey!; // TODO: is this bang correct?
|
|
||||||
this.iconImage = iconImage!; // TODO: is this bang correct?
|
|
||||||
this.group = group!; // TODO: is this bang correct?
|
|
||||||
this.soundName = soundName ?? "se/restore";
|
|
||||||
}
|
|
||||||
|
|
||||||
get name(): string {
|
|
||||||
return i18next.t(`${this.localeKey}.name`);
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: These should be getters
|
|
||||||
get description(): string {
|
|
||||||
return i18next.t(`${this.localeKey}.description`);
|
|
||||||
}
|
|
||||||
|
|
||||||
get iconName(): string {
|
|
||||||
return this.iconImage;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Should this be abstract?
|
|
||||||
/**
|
|
||||||
* Check whether this reward should be applied.
|
|
||||||
*/
|
|
||||||
// TODO: This is erroring on stuff with `undefined`
|
|
||||||
shouldApply(_params: MatchExact<Parameters<this["apply"]>[0]>): boolean {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Apply this Reward's effects. */
|
|
||||||
// TODO: Remove `boolean` return from all superclasses' type signatures
|
|
||||||
abstract apply(_params?: unknown): void;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A {@linkcode RewardGenerator} represents a dynamic generator for a given type of reward.
|
|
||||||
* These can be customized by lieu of {@linkcode generateReward} to alter the generation result.
|
|
||||||
*/
|
|
||||||
export abstract class RewardGenerator {
|
|
||||||
/**
|
|
||||||
* Dynamically generate a new reward.
|
|
||||||
* @param pregenArgs - An optional argument taken by super classes to customize the reward generated.
|
|
||||||
* @returns The generated reward, or `null` if none are able to be produced
|
|
||||||
*/
|
|
||||||
// TODO: Remove null from signature in favor of adding a condition or similar (reduces bangs needed)
|
|
||||||
abstract generateReward(pregenArgs?: unknown): Reward | null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Rewards that are applied to individual Pokemon. */
|
|
||||||
export abstract class PokemonReward extends Reward {
|
|
||||||
public selectFilter: PokemonSelectFilter | undefined;
|
|
||||||
|
|
||||||
constructor(
|
|
||||||
localeKey: string,
|
|
||||||
iconImage: string,
|
|
||||||
selectFilter?: PokemonSelectFilter,
|
|
||||||
group?: string,
|
|
||||||
soundName?: string,
|
|
||||||
) {
|
|
||||||
super(localeKey, iconImage, group, soundName);
|
|
||||||
this.selectFilter = selectFilter;
|
|
||||||
}
|
|
||||||
|
|
||||||
abstract override apply(_params: PokemonRewardParams): void;
|
|
||||||
}
|
|
||||||
|
|
||||||
export abstract class PokemonMoveReward extends PokemonReward {
|
|
||||||
public moveSelectFilter: PokemonMoveSelectFilter | undefined;
|
|
||||||
|
|
||||||
constructor(
|
|
||||||
localeKey: string,
|
|
||||||
iconImage: string,
|
|
||||||
id: RewardId,
|
|
||||||
selectFilter?: PokemonSelectFilter,
|
|
||||||
moveSelectFilter?: PokemonMoveSelectFilter,
|
|
||||||
group?: string,
|
|
||||||
) {
|
|
||||||
super(localeKey, iconImage, selectFilter, group);
|
|
||||||
this.moveSelectFilter = moveSelectFilter;
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
apply(_params: PokemonMoveRewardParams): boolean {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface PokemonRewardParams {
|
|
||||||
pokemon: PlayerPokemon;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface PokemonMoveRewardParams {
|
|
||||||
pokemon: PlayerPokemon;
|
|
||||||
moveIndex: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface PokemonMoveRecallRewardParams {
|
|
||||||
pokemon: PlayerPokemon;
|
|
||||||
moveIndex: number;
|
|
||||||
cost?: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface PokemonFusionRewardParams {
|
|
||||||
pokemon: PlayerPokemon;
|
|
||||||
pokemon2: PlayerPokemon;
|
|
||||||
}
|
|
||||||
|
|
||||||
export class RewardOption {
|
|
||||||
public type: Reward;
|
|
||||||
public upgradeCount: number;
|
|
||||||
public tier: RarityTier;
|
|
||||||
public cost: number;
|
|
||||||
|
|
||||||
constructor(type: Reward, upgradeCount: number, tier: RarityTier, cost = 0) {
|
|
||||||
this.type = type;
|
|
||||||
this.upgradeCount = upgradeCount;
|
|
||||||
this.tier = tier;
|
|
||||||
this.cost = Math.min(Math.round(cost), Number.MAX_SAFE_INTEGER);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class EmptyReward extends Reward {
|
|
||||||
constructor() {
|
|
||||||
super("", "");
|
|
||||||
}
|
|
||||||
|
|
||||||
override apply(): void {}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user