From afc37ab45d7b6d9770cab55525516d2b7473cb16 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Sat, 13 May 2023 19:52:20 -0400 Subject: [PATCH] Show battle info for both in double battles --- ...pbinfo_enemy.png => pbinfo_enemy_mini.png} | Bin public/images/ui/pbinfo_player_mini.png | Bin 0 -> 4435 bytes src/battle-phases.ts | 5 +- src/battle-scene.ts | 3 +- src/pokemon.ts | 5 +- src/ui/battle-info.ts | 49 +++++++++++++++--- 6 files changed, 52 insertions(+), 10 deletions(-) rename public/images/ui/{pbinfo_enemy.png => pbinfo_enemy_mini.png} (100%) create mode 100644 public/images/ui/pbinfo_player_mini.png diff --git a/public/images/ui/pbinfo_enemy.png b/public/images/ui/pbinfo_enemy_mini.png similarity index 100% rename from public/images/ui/pbinfo_enemy.png rename to public/images/ui/pbinfo_enemy_mini.png diff --git a/public/images/ui/pbinfo_player_mini.png b/public/images/ui/pbinfo_player_mini.png new file mode 100644 index 0000000000000000000000000000000000000000..1ccaf4efd650ba08a25ca7ebad99c7b8f7fb032b GIT binary patch literal 4435 zcmeHLeNYtV8D9#D0-8pGAJo)k5fzfX-M!oU*!52NxP#;4kRHV7#T54T_F#qkV0YmT zqy&(pGBy}TZLL8wI@W1YLx?~}k}{D7)Pl9fB%1g^s3nrg#E)vyXbsYLj}Kv*nGQ3} zf85O8yYKTp&+mDk-}^kz+*I)lYLuD_9Z_Hl(&>FpBuk-cn zZCi;KZwz1hJCV2wZZB@Vkdc`6D}6K?S&c8G?$uZ~`(F#L2zw&7vG;y*->}%2zjdSj zol4?-VOZbuc=`*&M6Xf5;N@ydY-a3{_=0Hv3fGb0e~0(2zj>~r;M}oAeaFT7LmMlv z^xOWiI;)Kk<~o19q~;V;u;a+=*tFjd{M2CjW>b&!ow#o0Kyc@7n`bCw-C+m{s^?Qu za?(>$#sdOjH2q?y!Tf&W(w_X>Op|Tt8Ti^O2kB2urYAF_wig_1i?WsB9bbpe|us#@6kv&GVb<;Cn&WzPxt$3ncC#7T>n*p99C2-MVSG*&merhhDN3n_ct{ zcQ~>%{x|u1>fV|IM?Aj3$vH3V`fbnC`coGTRaKqa?>v1=e4(+$hA$b|wT(UM-q8J% zZq=*n_upOf_UYbZ8CBVO=G?4?WgX4OzdPA6*m6Q;ihcFK%7qQTvp)8e;Y{yKsd~%O zpQ-oXd9kT4VF*2IYwx1J9mFD{zTOjYk#9t5_nJSfzViOs zYxi;ot*4&}iaqtC&FA3N)wkE)yZYwFrhU?`w56ulRsWwSu?Wa z`1yAq+QRofSl;>R$4J_V0gbox>c_hc148KH>Nomc`pR6rFZt~`e|qf$?dP=zpDQT% z>y0;CcYGKMXFiX928I6egumg~MMMA9&n{nnuaF)dhVB}LOS|G9=7Gd3=RtyPuw>D! z$E9E#9y_P-ySyOtAV|N~?`7CxPJ-=RA@4RIx88jZfq91kc~)(~E#4Hah&NXXTyAA{ z9$Q(=QVwM8nlQbe1^_NjVqm|k#4XZ(0}{Zc!MiNR5ICSB6&sKZmK-?6BXBUOAQd=j z^7G|NWK9^X7aUI7YD^u205bzpBuQQx!+buU!lzPrghGs6qjk~ zmYfL-nSw&z!RQ}!mW1j3oT5nw)nJ4Jgu_JA_bvRG)Nhb@!0mu@s5 zvVYp)VR;8V`pV&IN@;hZgp#6A5?A6V!|HS>skSS%I=eKImok~*gfwQFz!b?WR+PUF;QwKzKoVx7Q)tYk_i?@ESp04RoXP)e19 zLn+Qdprl4aqLi9cp{#~-D0Mhak&G$;o($U%Iw1f{76ATB+ zf@av!5JaY&a|HGYutt~IBF0_Ff&MX;u;X(6dy;{`wVad0aTK>ZwJ7OuGN?|&*in{J zYe=n<;Iwx2RCLkflzfc9B^3f50aqYF16;wY#*Qj}s=lv?lg|NAhT>{;5@iTB7Az)r zjPYpo*njb%4=7A(F~DwA23i;BgxEwY9OFxFIzQlN>>PeT4*+_`$+Y;Lp=*Y&X)!P@ z<(cf7p=(+UOiOttyZ&!C@la*%zKKYB_g-mgnd`gNA985F zu8O$Y)PnVQR^7k(d6vB@#>ktM2|M$9lQL{EajX!&#mql;^sUp)URd4u%7VDWn!$uf sTVG6Y%(2ZjN8-Nlmc@8jYFA4zG^gep@7dMY>p>7ux+&Y(oLo@%AFmZh2mk;8 literal 0 HcmV?d00001 diff --git a/src/battle-phases.ts b/src/battle-phases.ts index d9f92a6168c..de754cf96ce 100644 --- a/src/battle-phases.ts +++ b/src/battle-phases.ts @@ -210,8 +210,9 @@ export class EncounterPhase extends BattlePhase { Promise.all(loadEnemyAssets).then(() => { battle.enemyField.forEach((enemyPokemon, e) => { this.scene.field.add(enemyPokemon); - if (this.scene.getPlayerPokemon().visible) - this.scene.field.moveBelow(enemyPokemon, this.scene.getPlayerPokemon()); + const playerPokemon = this.scene.getPlayerPokemon(); + if (playerPokemon.visible) + this.scene.field.moveBelow(enemyPokemon, playerPokemon); enemyPokemon.tint(0, 0.5); if (battle.enemyField.length > 1) enemyPokemon.setFieldPosition(e ? FieldPosition.RIGHT : FieldPosition.LEFT); diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 7458cff259a..e4c9f9447cf 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -156,7 +156,8 @@ export default class BattleScene extends Phaser.Scene { this.loadAtlas('prompt', 'ui'); this.loadImage('cursor', 'ui'); this.loadImage('pbinfo_player', 'ui'); - this.loadImage('pbinfo_enemy', 'ui'); + this.loadImage('pbinfo_player_mini', 'ui'); + this.loadImage('pbinfo_enemy_mini', 'ui'); this.loadImage('overlay_lv', 'ui'); this.loadAtlas('numbers', 'ui'); this.loadAtlas('overlay_hp', 'ui'); diff --git a/src/pokemon.ts b/src/pokemon.ts index 725a2fb2cfa..f49ca00d380 100644 --- a/src/pokemon.ts +++ b/src/pokemon.ts @@ -149,7 +149,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.fieldPosition = FieldPosition.CENTER; - scene.fieldUI.addAt(this.battleInfo, 0); + scene.fieldUI.add(this.battleInfo); this.battleInfo.initInfo(this); @@ -300,6 +300,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.fieldPosition = fieldPosition; + this.battleInfo.setMini(fieldPosition !== FieldPosition.CENTER); + this.battleInfo.setOffset(fieldPosition === FieldPosition.RIGHT); + const newOffset = this.getFieldPositionOffset(); let relX = newOffset[0] - initialOffset[0]; diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts index 0e2b1bcfa5d..42a6ce056d8 100644 --- a/src/ui/battle-info.ts +++ b/src/ui/battle-info.ts @@ -4,10 +4,12 @@ import * as Utils from '../utils'; import { addTextObject, TextStyle } from './text'; import { getGenderSymbol, getGenderColor } from '../data/gender'; import { StatusEffect } from '../data/status-effect'; -import BattleScene, { maxExpLevel } from '../battle-scene'; +import { maxExpLevel } from '../battle-scene'; export default class BattleInfo extends Phaser.GameObjects.Container { private player: boolean; + private mini: boolean; + private offset: boolean; private lastName: string; private lastStatus: StatusEffect; private lastHp: integer; @@ -17,9 +19,10 @@ export default class BattleInfo extends Phaser.GameObjects.Container { private lastLevelExp: integer; private lastLevel: integer; + private box: Phaser.GameObjects.Sprite; private nameText: Phaser.GameObjects.Text; private genderText: Phaser.GameObjects.Text; - private ownedIcon: Phaser.GameObjects.Image; + private ownedIcon: Phaser.GameObjects.Sprite; private statusIndicator: Phaser.GameObjects.Sprite; private levelContainer: Phaser.GameObjects.Container; private hpBar: Phaser.GameObjects.Image; @@ -30,6 +33,8 @@ export default class BattleInfo extends Phaser.GameObjects.Container { constructor(scene: Phaser.Scene, x: number, y: number, player: boolean) { super(scene, x, y); this.player = player; + this.mini = !player; + this.offset = false; this.lastName = null; this.lastStatus = StatusEffect.NONE; this.lastHp = -1; @@ -42,9 +47,9 @@ export default class BattleInfo extends Phaser.GameObjects.Container { // Initially invisible and shown via Pokemon.showInfo this.setVisible(false); - const box = this.scene.add.image(0, 0, `pbinfo_${player ? 'player' : 'enemy'}`); - box.setOrigin(1, 0.5); - this.add(box); + this.box = this.scene.add.sprite(0, 0, this.getTextureName()); + this.box.setOrigin(1, 0.5); + this.add(this.box); this.nameText = addTextObject(this.scene, player ? -115 : -124, player ? -15.2 : -11.2, '', TextStyle.BATTLE_INFO); this.nameText.setOrigin(0, 0); @@ -56,7 +61,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.add(this.genderText); if (!this.player) { - this.ownedIcon = this.scene.add.image(0, 0, 'icon_owned'); + this.ownedIcon = this.scene.add.sprite(0, 0, 'icon_owned'); this.ownedIcon.setVisible(false); this.ownedIcon.setOrigin(0, 0); this.ownedIcon.setPositionRelative(this.nameText, 0, 11.5); @@ -131,6 +136,36 @@ export default class BattleInfo extends Phaser.GameObjects.Container { } } + getTextureName(): string { + return `pbinfo_${this.player ? 'player' : 'enemy'}${this.mini ? '_mini' : ''}`; + } + + setMini(mini: boolean): void { + if (this.mini === mini) + return; + + this.mini = mini; + + this.box.setTexture(this.getTextureName()); + + if (this.player) { + this.y -= 12 * (mini ? 1 : -1); + } + + const toggledElements = [ this.hpNumbersContainer, this.expBar ]; + toggledElements.forEach(el => el.setVisible(!mini)); + } + + setOffset(offset: boolean): void { + if (this.offset === offset) + return; + + this.offset = offset; + + this.x += 10 * (offset === this.player ? 1 : -1); + this.y += 27 * (offset ? 1 : -1); + } + updateInfo(pokemon: Pokemon, instant?: boolean): Promise { return new Promise(resolve => { if (!this.scene) { @@ -290,4 +325,6 @@ export class EnemyBattleInfo extends BattleInfo { constructor(scene: Phaser.Scene) { super(scene, 140, -141, false); } + + setMini(mini: boolean): void { } // Always mini } \ No newline at end of file