Filtering moves and abilities correctly

This commit is contained in:
Wlowscha 2024-12-30 12:53:05 +01:00
parent 3009de74cb
commit 0167dc7052
No known key found for this signature in database
GPG Key ID: 3C8F1AD330565D04
4 changed files with 65 additions and 12 deletions

View File

@ -68433,6 +68433,30 @@ export const tmSpecies: TmSpecies = {
],
};
interface SpeciesTmMoves {
[key: number]: Array<Moves>
}
function flipTmSpecies(tmSpecies: TmSpecies): SpeciesTmMoves {
const flipped: SpeciesTmMoves = {};
for (const move in tmSpecies) {
const speciesList = tmSpecies[move]; // Convert the move key back to a number
for (const species of speciesList) {
if (!flipped[species]) {
flipped[species] = [];
}
flipped[species].push(move);
}
}
return flipped;
}
export const speciesTmMoves: SpeciesTmMoves = flipTmSpecies(tmSpecies);
interface TmPoolTiers {
[key: integer]: ModifierTier
}

View File

@ -278,7 +278,6 @@ export class FilterText extends Phaser.GameObjects.Container {
}
getValue(row: number): string {
console.log("Getting value", this.selections[row].getWrappedText()[0]);
return this.selections[row].getWrappedText()[0];
}

View File

@ -6,12 +6,16 @@ import { OptionSelectItem } from "./abstact-option-select-ui-handler";
import { isNullOrUndefined } from "#app/utils";
import { Mode } from "./ui";
import { FilterTextRow } from "./filter-text";
import { allAbilities } from "#app/data/ability";
import { allMoves } from "#app/data/move";
export default class PokedexScanUiHandler extends FormModalUiHandler {
keys: string[];
reducedKeys: string[];
parallelKeys: string[];
moveKeys: string[];
abilityKeys: string[];
constructor(scene, mode) {
super(scene, mode);
@ -39,6 +43,10 @@ export default class PokedexScanUiHandler extends FormModalUiHandler {
const keysInArrays = flattenKeys(i18next.getDataByLanguage(String(i18next.resolvedLanguage))).filter((t) => t.length > 0); // Array of arrays
const keys = keysInArrays.flat(Infinity).map(String); // One array of string
this.moveKeys = allMoves.map(a => a.name);
this.abilityKeys = allAbilities.map(a => a.name);
this.keys = keys;
}
@ -77,22 +85,18 @@ export default class PokedexScanUiHandler extends FormModalUiHandler {
switch (row) {
case FilterTextRow.NAME: {
const startString = "pokemon:";
const endString = "";
this.reducedKeys = this.keys.filter(str => str.startsWith(startString) && str.endsWith(endString));
// TODO: nameKeys
this.reducedKeys = this.keys.filter(str => str.startsWith(startString));
break;
}
case FilterTextRow.MOVE_1:
case FilterTextRow.MOVE_2: {
const startString = "move:";
const endString = ".name";
this.reducedKeys = this.keys.filter(str => str.startsWith(startString) && str.endsWith(endString));
this.reducedKeys = this.moveKeys;
break;
}
case FilterTextRow.ABILITY_1:
case FilterTextRow.ABILITY_2: {
const startString = "ability:";
const endString = ".name";
this.reducedKeys = this.keys.filter(str => str.startsWith(startString) && str.endsWith(endString));
this.reducedKeys = this.abilityKeys;
break;
}
default: {

View File

@ -37,6 +37,10 @@ import { addWindow, WindowVariant } from "./ui-theme";
import * as Utils from "../utils";
import { OptionSelectConfig } from "./abstact-option-select-ui-handler";
import { FilterText, FilterTextRow } from "./filter-text";
import { allAbilities } from "#app/data/ability";
import { starterPassiveAbilities } from "#app/data/balance/passives";
import { allMoves } from "#app/data/move";
import { speciesTmMoves } from "#app/data/balance/tms";
export interface Starter {
@ -1358,8 +1362,30 @@ export default class PokedexUiHandler extends MessageUiHandler {
const isStarterProgressable = speciesEggMoves.hasOwnProperty(container.species.speciesId);
// Name filter
console.log(container.species.name);
const fitsName = [ container.species.name, this.filterText.defaultText ].includes(this.filterText.getValue(FilterTextRow.NAME));
const selectedName = this.filterText.getValue(FilterTextRow.NAME);
const fitsName = container.species.name === selectedName || selectedName === this.filterText.defaultText;
// Move filter
const levelMoves = pokemonSpeciesLevelMoves[container.species.speciesId].map(m => allMoves[m[1]].name);
const eggMoves = speciesEggMoves[container.species.speciesId]?.map(m => allMoves[m].name) ?? [];
const tmMoves = speciesTmMoves[container.species.speciesId]?.map(m => allMoves[m].name) ?? [];
const selectedMove1 = this.filterText.getValue(FilterTextRow.MOVE_1);
const selectedMove2 = this.filterText.getValue(FilterTextRow.MOVE_2);
const fitsMove1 = levelMoves.includes(selectedMove1) || eggMoves.includes(selectedMove1) || tmMoves.includes(selectedMove1) || selectedMove1 === this.filterText.defaultText;
const fitsMove2 = levelMoves.includes(selectedMove2) || eggMoves.includes(selectedMove2) || tmMoves.includes(selectedMove2) || selectedMove2 === this.filterText.defaultText;
// Ability filter
// allAbilities already contains the localized names of the abilities
const abilities = [ container.species.ability1, container.species.ability2, container.species.abilityHidden ].map(a => allAbilities[a].name);
// console.log(abilities);
const selectedAbility1 = this.filterText.getValue(FilterTextRow.ABILITY_1);
const fitsAbility1 = abilities.includes(selectedAbility1) || selectedAbility1 === this.filterText.defaultText;
const passive = starterPassiveAbilities[container.species.speciesId] ?? 0;
const selectedAbility2 = this.filterText.getValue(FilterTextRow.ABILITY_2);
const fitsAbility2 = allAbilities[passive].name === selectedAbility2 || selectedAbility2 === this.filterText.defaultText;
// Gen filter
const fitsGen = this.filterBar.getVals(DropDownColumn.GEN).includes(container.species.generation);
@ -1482,7 +1508,7 @@ export default class PokedexUiHandler extends MessageUiHandler {
}
});
if (fitsName && fitsGen && fitsType && fitsCaught && fitsPassive && fitsCostReduction && fitsFavorite && fitsWin && fitsHA && fitsEgg && fitsPokerus) {
if (fitsName && fitsAbility1 && fitsAbility2 && fitsMove1 && fitsMove2 && fitsGen && fitsType && fitsCaught && fitsPassive && fitsCostReduction && fitsFavorite && fitsWin && fitsHA && fitsEgg && fitsPokerus) {
this.filteredStarterContainers.push(container);
}
});