[Enhancement] Add go filter shortcut (#3345)

* update goFilter shortcut

* fix filter instruction position

* remove unnecessary new lines

* update requested changes. add other language entries too

* remove unnecessary case code

* open dropdown when pressing goFilter shortcut

* add missing entry for `fr`

* Update src/locales/fr/starter-select-ui-handler.ts

Co-authored-by: Lugiad' <adrien.grivel@hotmail.fr>

* Update src/locales/de/starter-select-ui-handler.ts

Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com>

* update instruction container position and text offset for more longer instruction label. decrease size of fr instruction font

* fixed de info font size

* Update src/locales/pt_BR/starter-select-ui-handler.ts

Co-authored-by: José Ricardo Fleury Oliveira <josefleury@discente.ufg.br>

* Update src/locales/ko/starter-select-ui-handler.ts

Co-authored-by: Enoch <enoch.jwsong@gmail.com>

* Update src/locales/zh_TW/starter-select-ui-handler.ts

Co-authored-by: mercurius-00 <80205689+mercurius-00@users.noreply.github.com>

* Update src/locales/zh_CN/starter-select-ui-handler.ts

Co-authored-by: mercurius-00 <80205689+mercurius-00@users.noreply.github.com>

* update font size, starterInfoXPos and starterInfoYOffset in zh. update starterInfoXPos in de

* Update src/locales/es/starter-select-ui-handler.ts

Co-authored-by: Asdar <asdargmng@gmail.com>

---------

Co-authored-by: Lugiad' <adrien.grivel@hotmail.fr>
Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com>
Co-authored-by: José Ricardo Fleury Oliveira <josefleury@discente.ufg.br>
Co-authored-by: Enoch <enoch.jwsong@gmail.com>
Co-authored-by: mercurius-00 <80205689+mercurius-00@users.noreply.github.com>
Co-authored-by: Asdar <asdargmng@gmail.com>
This commit is contained in:
Leo Kim 2024-08-09 04:34:20 +09:00 committed by GitHub
parent cff5a670b1
commit b54a255c15
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 96 additions and 7 deletions

View File

@ -41,6 +41,7 @@ export const starterSelectUiHandler: SimpleTranslationEntries = {
"cycleAbility": ": Fähigkeit",
"cycleNature": ": Wesen",
"cycleVariant": ": Seltenheit",
"goFilter": ": Zu den Filtern",
"enablePassive": "Passiv-Skill aktivieren",
"disablePassive": "Passiv-Skill deaktivieren",
"locked": "Gesperrt",

View File

@ -41,6 +41,7 @@ export const starterSelectUiHandler: SimpleTranslationEntries = {
"cycleAbility": ": Ability",
"cycleNature": ": Nature",
"cycleVariant": ": Variant",
"goFilter": ": Go to filters",
"enablePassive": "Enable Passive",
"disablePassive": "Disable Passive",
"locked": "Locked",

View File

@ -41,6 +41,7 @@ export const starterSelectUiHandler: SimpleTranslationEntries = {
"cycleAbility": ": Habilidad",
"cycleNature": ": Naturaleza",
"cycleVariant": ": Variante",
"goFilter": ": Ir a filtros",
"enablePassive": "Activar Pasiva",
"disablePassive": "Desactivar Pasiva",
"locked": "Bloqueado",

View File

@ -41,6 +41,7 @@ export const starterSelectUiHandler: SimpleTranslationEntries = {
"cycleAbility": ": Talent",
"cycleNature": ": Nature",
"cycleVariant": ": Variant",
"goFilter": ": Aller aux filtres",
"enablePassive": "Activer Passif",
"disablePassive": "Désactiver Passif",
"locked": "Verrouillé",

View File

@ -41,6 +41,7 @@ export const starterSelectUiHandler: SimpleTranslationEntries = {
"cycleAbility": ": Abilità",
"cycleNature": ": Natura",
"cycleVariant": ": Variante",
"goFilter": ": Go to filters",
"enablePassive": "Attiva passiva",
"disablePassive": "Disattiva passiva",
"locked": "Bloccato",

View File

@ -41,6 +41,7 @@ export const starterSelectUiHandler: SimpleTranslationEntries = {
"cycleAbility": ": 특성",
"cycleNature": ": 성격",
"cycleVariant": ": 색상",
"goFilter": ": 필터로 이동",
"enablePassive": "패시브 활성화",
"disablePassive": "패시브 비활성화",
"locked": "잠김",

View File

@ -41,6 +41,7 @@ export const starterSelectUiHandler: SimpleTranslationEntries = {
"cycleAbility": ": » Habilidade",
"cycleNature": ": » Natureza",
"cycleVariant": ": » Variante",
"goFilter": ": Ir para filtros",
"enablePassive": "Ativar Passiva",
"disablePassive": "Desativar Passiva",
"locked": "Bloqueada",

View File

@ -41,6 +41,7 @@ export const starterSelectUiHandler: SimpleTranslationEntries = {
"cycleAbility": ": 特性",
"cycleNature": ": 性格",
"cycleVariant": ": 变种",
"goFilter": ": 转到筛选",
"enablePassive": "启用被动",
"disablePassive": "禁用被动",
"locked": "未解锁",

View File

@ -42,6 +42,7 @@ export const starterSelectUiHandler: SimpleTranslationEntries = {
"cycleAbility": ": 特性",
"cycleNature": ": 性格",
"cycleVariant": ": 變種",
"goFilter": ": 轉到篩選",
"enablePassive": "啟用被動",
"disablePassive": "禁用被動",
"locked": "未解鎖",

View File

@ -79,7 +79,7 @@ export class UiInputs {
[Button.ACTION]: () => this.buttonAb(Button.ACTION),
[Button.CANCEL]: () => this.buttonAb(Button.CANCEL),
[Button.MENU]: () => this.buttonMenu(),
[Button.STATS]: () => this.buttonStats(true),
[Button.STATS]: () => this.buttonGoToFilter(Button.STATS),
[Button.CYCLE_SHINY]: () => this.buttonCycleOption(Button.CYCLE_SHINY),
[Button.CYCLE_FORM]: () => this.buttonCycleOption(Button.CYCLE_FORM),
[Button.CYCLE_GENDER]: () => this.buttonCycleOption(Button.CYCLE_GENDER),
@ -139,6 +139,17 @@ export class UiInputs {
p.toggleStats(pressed);
}
}
buttonGoToFilter(button: Button): void {
const whitelist = [StarterSelectUiHandler];
const uiHandler = this.scene.ui?.getHandler();
if (whitelist.some(handler => uiHandler instanceof handler)) {
this.scene.ui.processInput(button);
} else {
this.buttonStats(true);
}
}
buttonInfo(pressed: boolean = true): void {
if (this.scene.showMovesetFlyout ) {
for (const p of this.scene.getField().filter(p => p?.isActive(true))) {

View File

@ -70,8 +70,9 @@ const languageSettings: { [key: string]: LanguageSetting } = {
instructionTextSize: "38px",
},
"de":{
starterInfoTextSize: "56px",
starterInfoTextSize: "48px",
instructionTextSize: "35px",
starterInfoXPos: 33,
},
"es":{
starterInfoTextSize: "56px",
@ -79,7 +80,7 @@ const languageSettings: { [key: string]: LanguageSetting } = {
},
"fr":{
starterInfoTextSize: "54px",
instructionTextSize: "42px",
instructionTextSize: "35px",
},
"it":{
starterInfoTextSize: "56px",
@ -91,9 +92,10 @@ const languageSettings: { [key: string]: LanguageSetting } = {
starterInfoXPos: 33,
},
"zh":{
starterInfoTextSize: "40px",
instructionTextSize: "42px",
starterInfoYOffset: 2
starterInfoTextSize: "47px",
instructionTextSize: "38px",
starterInfoYOffset: 1,
starterInfoXPos: 24,
},
"pt":{
starterInfoTextSize: "48px",
@ -258,18 +260,21 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
private pokemonShinyIcon: Phaser.GameObjects.Sprite;
private instructionsContainer: Phaser.GameObjects.Container;
private filterInstructionsContainer: Phaser.GameObjects.Container;
private shinyIconElement: Phaser.GameObjects.Sprite;
private formIconElement: Phaser.GameObjects.Sprite;
private abilityIconElement: Phaser.GameObjects.Sprite;
private genderIconElement: Phaser.GameObjects.Sprite;
private natureIconElement: Phaser.GameObjects.Sprite;
private variantIconElement: Phaser.GameObjects.Sprite;
private goFilterIconElement: Phaser.GameObjects.Sprite;
private shinyLabel: Phaser.GameObjects.Text;
private formLabel: Phaser.GameObjects.Text;
private genderLabel: Phaser.GameObjects.Text;
private abilityLabel: Phaser.GameObjects.Text;
private natureLabel: Phaser.GameObjects.Text;
private variantLabel: Phaser.GameObjects.Text;
private goFilterLabel: Phaser.GameObjects.Text;
private starterSelectMessageBox: Phaser.GameObjects.NineSlice;
private starterSelectMessageBoxContainer: Phaser.GameObjects.Container;
@ -329,7 +334,9 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
//variables to keep track of the dynamically rendered list of instruction prompts for starter select
private instructionRowX = 0;
private instructionRowY = 0;
private instructionRowTextOffset = 12;
private instructionRowTextOffset = 9;
private filterInstructionRowX = 0;
private filterInstructionRowY = 0;
private starterSelectCallback: StarterSelectCallback | null;
@ -825,8 +832,19 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.variantLabel = addTextObject(this.scene, this.instructionRowX + this.instructionRowTextOffset, this.instructionRowY, i18next.t("starterSelectUiHandler:cycleVariant"), TextStyle.PARTY, { fontSize: instructionTextSize });
this.variantLabel.setName("text-variant-label");
this.goFilterIconElement = new Phaser.GameObjects.Sprite(this.scene, this.filterInstructionRowX, this.filterInstructionRowY, "keyboard", "C.png");
this.goFilterIconElement.setName("sprite-goFilter-icon-element");
this.goFilterIconElement.setScale(0.675);
this.goFilterIconElement.setOrigin(0.0, 0.0);
this.goFilterLabel = addTextObject(this.scene, this.filterInstructionRowX + this.instructionRowTextOffset, this.filterInstructionRowY, i18next.t("starterSelectUiHandler:goFilter"), TextStyle.PARTY, { fontSize: instructionTextSize });
this.goFilterLabel.setName("text-goFilter-label");
this.hideInstructions();
this.filterInstructionsContainer = this.scene.add.container(50, 5);
this.filterInstructionsContainer.setVisible(true);
this.starterSelectContainer.add(this.filterInstructionsContainer);
this.starterSelectMessageBoxContainer = this.scene.add.container(0, this.scene.game.canvas.height / 6);
this.starterSelectMessageBoxContainer.setVisible(false);
this.starterSelectContainer.add(this.starterSelectMessageBoxContainer);
@ -1175,6 +1193,16 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.tryExit();
success = true;
}
} else if (button === Button.STATS) {
// if stats button is pressed, go to filter directly
if (!this.filterMode) {
this.startCursorObj.setVisible(false);
this.starterIconsCursorObj.setVisible(false);
this.setSpecies(null);
this.filterBarCursor = 0;
this.setFilterMode(true);
this.filterBar.toggleDropDown(this.filterBarCursor);
}
} else if (this.startCursorObj.visible) { // this checks to see if the start button is selected
switch (button) {
case Button.ACTION:
@ -2026,6 +2054,9 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
case SettingKeyboard.Button_Cycle_Variant:
iconPath = "V.png";
break;
case SettingKeyboard.Button_Stats:
iconPath = "C.png";
break;
default:
break;
}
@ -2045,11 +2076,36 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
}
}
updateFilterButtonIcon(iconSetting, gamepadType, iconElement, controlLabel): void {
let iconPath;
// touch controls cannot be rebound as is, and are just emulating a keyboard event.
// Additionally, since keyboard controls can be rebound (and will be displayed when they are), we need to have special handling for the touch controls
if (gamepadType === "touch") {
gamepadType = "keyboard";
iconPath = "C.png";
} else {
iconPath = this.scene.inputController?.getIconForLatestInputRecorded(iconSetting);
}
iconElement.setTexture(gamepadType, iconPath);
iconElement.setPosition(this.filterInstructionRowX, this.filterInstructionRowY);
controlLabel.setPosition(this.filterInstructionRowX + this.instructionRowTextOffset, this.filterInstructionRowY);
iconElement.setVisible(true);
controlLabel.setVisible(true);
this.filterInstructionsContainer.add([iconElement, controlLabel]);
this.filterInstructionRowY += 8;
if (this.filterInstructionRowY >= 24) {
this.filterInstructionRowY = 0;
this.filterInstructionRowX += 50;
}
}
updateInstructions(): void {
this.instructionRowX = 0;
this.instructionRowY = 0;
this.filterInstructionRowX = 0;
this.filterInstructionRowY = 0;
this.hideInstructions();
this.instructionsContainer.removeAll();
this.filterInstructionsContainer.removeAll();
let gamepadType;
if (this.scene.inputMethod === "gamepad") {
gamepadType = this.scene.inputController.getConfig(this.scene.inputController.selectedDevice[Device.GAMEPAD]).padType;
@ -2057,6 +2113,10 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
gamepadType = this.scene.inputMethod;
}
if (!gamepadType) {
return;
}
if (this.speciesStarterDexEntry?.caughtAttr) {
if (this.canCycleShiny) {
this.updateButtonIcon(SettingKeyboard.Button_Cycle_Shiny, gamepadType, this.shinyIconElement, this.shinyLabel);
@ -2077,6 +2137,12 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.updateButtonIcon(SettingKeyboard.Button_Cycle_Variant, gamepadType, this.variantIconElement, this.variantLabel);
}
}
// if filter mode is inactivated and gamepadType is not undefined, update the button icons
if (!this.filterMode) {
this.updateFilterButtonIcon(SettingKeyboard.Button_Stats, gamepadType, this.goFilterIconElement, this.goFilterLabel);
}
}
getValueLimit(): integer {
@ -2398,6 +2464,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.setCursor(filterMode ? this.filterBarCursor : this.cursor);
if (filterMode) {
this.setSpecies(null);
this.updateInstructions();
}
return true;
@ -3260,6 +3327,8 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.natureLabel.setVisible(false);
this.variantIconElement.setVisible(false);
this.variantLabel.setVisible(false);
this.goFilterIconElement.setVisible(false);
this.goFilterLabel.setVisible(false);
}
clear(): void {