Implement Double Battles (#1)
* Add WiP logic for double battles * Minor changes for double battles * More fixes for double battles * Show battle info for both in double battles * Improvements to double battles * Add double battle version of party UI * Fix some issues with double battles * Updates to double battles * More work on double battles for stability * Fix issues with ability bar and evolution screen * Add chance for double battles
This commit is contained in:
1 parent
e2d6890072
commit
b9f7ba173d
31 files changed
+1583
-702
No files matched your search
+48
-7
@@ -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);
|
||||
@@ -115,10 +120,11 @@ export default class BattleInfo extends Phaser.GameObjects.Container {
|
||||
}
|
||||
|
||||
this.hpBar.setScale(pokemon.getHpRatio(), 1);
|
||||
this.lastHpFrame = this.hpBar.scaleX > 0.5 ? 'high' : this.hpBar.scaleX > 0.25 ? 'medium' : 'low';
|
||||
this.hpBar.setFrame(this.lastHpFrame);
|
||||
if (this.player)
|
||||
this.setHpNumbers(pokemon.hp, pokemon.getMaxHp());
|
||||
this.lastHp = pokemon.hp;
|
||||
this.lastHpFrame = this.hpBar.scaleX > 0.5 ? 'high' : this.hpBar.scaleX > 0.25 ? 'medium' : 'low';
|
||||
this.lastMaxHp = pokemon.getMaxHp();
|
||||
|
||||
this.setLevel(pokemon.level);
|
||||
@@ -131,6 +137,39 @@ 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 offsetElements = [ this.nameText, this.genderText, this.statusIndicator, this.levelContainer ];
|
||||
offsetElements.forEach(el => el.y += 1.5 * (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<void> {
|
||||
return new Promise(resolve => {
|
||||
if (!this.scene) {
|
||||
@@ -290,4 +329,6 @@ export class EnemyBattleInfo extends BattleInfo {
|
||||
constructor(scene: Phaser.Scene) {
|
||||
super(scene, 140, -141, false);
|
||||
}
|
||||
|
||||
setMini(mini: boolean): void { } // Always mini
|
||||
}
|
||||
Reference in new issue
Block a user