Add stats screen to summary
This commit is contained in:
parent
4e6164943c
commit
db5db61272
Binary file not shown.
After Width: | Height: | Size: 1.5 KiB |
Binary file not shown.
After Width: | Height: | Size: 89 B |
|
@ -176,6 +176,8 @@ export default class BattleScene extends Phaser.Scene {
|
||||||
this.loadImage('summary_bg', 'ui');
|
this.loadImage('summary_bg', 'ui');
|
||||||
this.loadImage('summary_overlay_shiny', 'ui');
|
this.loadImage('summary_overlay_shiny', 'ui');
|
||||||
this.loadImage('summary_profile', 'ui');
|
this.loadImage('summary_profile', 'ui');
|
||||||
|
this.loadImage('summary_stats', 'ui');
|
||||||
|
this.loadImage('summary_stats_overlay_exp', 'ui');
|
||||||
this.loadImage('summary_moves', 'ui');
|
this.loadImage('summary_moves', 'ui');
|
||||||
this.loadImage('summary_moves_effect', 'ui');
|
this.loadImage('summary_moves_effect', 'ui');
|
||||||
this.loadImage('summary_moves_overlay_row', 'ui');
|
this.loadImage('summary_moves_overlay_row', 'ui');
|
||||||
|
|
|
@ -15,7 +15,7 @@ import { initMoveAnim, loadMoveAnimAssets } from './data/battle-anims';
|
||||||
import { Status, StatusEffect } from './data/status-effect';
|
import { Status, StatusEffect } from './data/status-effect';
|
||||||
import { tmSpecies } from './data/tms';
|
import { tmSpecies } from './data/tms';
|
||||||
import { pokemonEvolutions, pokemonPrevolutions, SpeciesEvolution, SpeciesEvolutionCondition } from './data/pokemon-evolutions';
|
import { pokemonEvolutions, pokemonPrevolutions, SpeciesEvolution, SpeciesEvolutionCondition } from './data/pokemon-evolutions';
|
||||||
import { DamagePhase, FaintPhase, MessagePhase } from './battle-phases';
|
import { DamagePhase, FaintPhase } from './battle-phases';
|
||||||
import { BattleStat } from './data/battle-stat';
|
import { BattleStat } from './data/battle-stat';
|
||||||
import { BattlerTag, BattlerTagLapseType, BattlerTagType, getBattlerTag } from './data/battler-tag';
|
import { BattlerTag, BattlerTagLapseType, BattlerTagType, getBattlerTag } from './data/battler-tag';
|
||||||
import { Species } from './data/species';
|
import { Species } from './data/species';
|
||||||
|
|
|
@ -8,9 +8,13 @@ import { TextStyle, addTextObject } from "./text";
|
||||||
import Move, { MoveCategory } from "../data/move";
|
import Move, { MoveCategory } from "../data/move";
|
||||||
import { getPokeballAtlasKey } from "../data/pokeball";
|
import { getPokeballAtlasKey } from "../data/pokeball";
|
||||||
import { getGenderColor, getGenderSymbol } from "../data/gender";
|
import { getGenderColor, getGenderSymbol } from "../data/gender";
|
||||||
|
import { getLevelTotalExp } from "../data/exp";
|
||||||
|
import { BlendModes } from "phaser";
|
||||||
|
import { Stat, getStatName } from "../data/pokemon-stat";
|
||||||
|
|
||||||
enum Page {
|
enum Page {
|
||||||
PROFILE,
|
PROFILE,
|
||||||
|
STATS,
|
||||||
MOVES
|
MOVES
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -385,14 +389,75 @@ export default class SummaryUiHandler extends UiHandler {
|
||||||
page = this.cursor;
|
page = this.cursor;
|
||||||
|
|
||||||
if (pageContainer.getAll().length > 1) {
|
if (pageContainer.getAll().length > 1) {
|
||||||
if (this.movesContainer)
|
pageContainer.each((o: Phaser.GameObjects.GameObject) => {
|
||||||
this.movesContainer.removeAll(true);
|
if (o instanceof Phaser.GameObjects.Container)
|
||||||
|
o.removeAll(true);
|
||||||
|
});
|
||||||
pageContainer.removeBetween(1, undefined, true);
|
pageContainer.removeBetween(1, undefined, true);
|
||||||
}
|
}
|
||||||
const pageBg = (pageContainer.getAt(0) as Phaser.GameObjects.Sprite);
|
const pageBg = (pageContainer.getAt(0) as Phaser.GameObjects.Sprite);
|
||||||
pageBg.setTexture(this.getPageKey(page));
|
pageBg.setTexture(this.getPageKey(page));
|
||||||
|
|
||||||
switch (page) {
|
switch (page) {
|
||||||
|
case Page.STATS:
|
||||||
|
const statsContainer = this.scene.add.container(0, -pageBg.height);
|
||||||
|
pageContainer.add(statsContainer);
|
||||||
|
|
||||||
|
const stats = Utils.getEnumValues(Stat) as Stat[];
|
||||||
|
|
||||||
|
stats.forEach((stat, s) => {
|
||||||
|
const statName = stat !== Stat.HP
|
||||||
|
? getStatName(stat)
|
||||||
|
: 'HP';
|
||||||
|
const rowIndex = s % 3;
|
||||||
|
const colIndex = Math.floor(s / 3);
|
||||||
|
|
||||||
|
const statLabel = addTextObject(this.scene, 27 + 115 * colIndex, 56 + 16 * rowIndex, statName, TextStyle.SUMMARY);
|
||||||
|
statLabel.setOrigin(0.5, 0);
|
||||||
|
statsContainer.add(statLabel);
|
||||||
|
|
||||||
|
const statValueText = stat !== Stat.HP
|
||||||
|
? this.pokemon.stats[s].toString()
|
||||||
|
: `${this.pokemon.hp}/${this.pokemon.getMaxHp()}`;
|
||||||
|
|
||||||
|
const statValue = addTextObject(this.scene, 120 + 88 * colIndex, 56 + 16 * rowIndex, statValueText, TextStyle.WINDOW);
|
||||||
|
statValue.setOrigin(1, 0);
|
||||||
|
statsContainer.add(statValue);
|
||||||
|
});
|
||||||
|
|
||||||
|
const totalLvExp = getLevelTotalExp(this.pokemon.level, this.pokemon.species.growthRate);
|
||||||
|
const expRatio = this.pokemon.level < 100 ? this.pokemon.levelExp / totalLvExp : 0;
|
||||||
|
|
||||||
|
const expLabel = addTextObject(this.scene, 6, 112, 'EXP. POINTS', TextStyle.SUMMARY);
|
||||||
|
expLabel.setOrigin(0, 0);
|
||||||
|
statsContainer.add(expLabel);
|
||||||
|
|
||||||
|
const nextLvExpLabel = addTextObject(this.scene, 6, 128, 'NEXT LV.', TextStyle.SUMMARY);
|
||||||
|
nextLvExpLabel.setOrigin(0, 0);
|
||||||
|
statsContainer.add(nextLvExpLabel);
|
||||||
|
|
||||||
|
const expText = addTextObject(this.scene, 208, 112, this.pokemon.exp.toString(), TextStyle.WINDOW);
|
||||||
|
expText.setOrigin(1, 0);
|
||||||
|
statsContainer.add(expText);
|
||||||
|
|
||||||
|
const nextLvExpText = addTextObject(this.scene, 208, 128, (totalLvExp - this.pokemon.levelExp).toString(), TextStyle.WINDOW);
|
||||||
|
nextLvExpText.setOrigin(1, 0);
|
||||||
|
statsContainer.add(nextLvExpText);
|
||||||
|
|
||||||
|
const expOverlay = this.scene.add.image(140, 145, 'summary_stats_overlay_exp');
|
||||||
|
expOverlay.setOrigin(0, 0);
|
||||||
|
statsContainer.add(expOverlay);
|
||||||
|
|
||||||
|
const expMaskRect = this.scene.make.graphics({});
|
||||||
|
expMaskRect.setScale(6);
|
||||||
|
expMaskRect.fillStyle(0xFFFFFF);
|
||||||
|
expMaskRect.beginPath();
|
||||||
|
expMaskRect.fillRect(140 + pageContainer.x, 145 + pageContainer.y + 21, Math.floor(expRatio * 64), 3);
|
||||||
|
|
||||||
|
const expMask = expMaskRect.createGeometryMask();
|
||||||
|
|
||||||
|
expOverlay.setMask(expMask);
|
||||||
|
break;
|
||||||
case Page.MOVES:
|
case Page.MOVES:
|
||||||
this.movesContainer = this.scene.add.container(5, -pageBg.height + 26);
|
this.movesContainer = this.scene.add.container(5, -pageBg.height + 26);
|
||||||
pageContainer.add(this.movesContainer);
|
pageContainer.add(this.movesContainer);
|
||||||
|
@ -462,13 +527,13 @@ export default class SummaryUiHandler extends UiHandler {
|
||||||
this.moveDescriptionText = addTextObject(this.scene, 2, 84, '', TextStyle.WINDOW, { wordWrap: { width: 1212 } });
|
this.moveDescriptionText = addTextObject(this.scene, 2, 84, '', TextStyle.WINDOW, { wordWrap: { width: 1212 } });
|
||||||
this.movesContainer.add(this.moveDescriptionText);
|
this.movesContainer.add(this.moveDescriptionText);
|
||||||
|
|
||||||
const maskRect = this.scene.make.graphics({});
|
const moveDescriptionTextMaskRect = this.scene.make.graphics({});
|
||||||
maskRect.setScale(6);
|
moveDescriptionTextMaskRect.setScale(6);
|
||||||
maskRect.fillStyle(0xFFFFFF);
|
moveDescriptionTextMaskRect.fillStyle(0xFFFFFF);
|
||||||
maskRect.beginPath();
|
moveDescriptionTextMaskRect.beginPath();
|
||||||
maskRect.fillRect(112, 130, 202, 46);
|
moveDescriptionTextMaskRect.fillRect(112, 130, 202, 46);
|
||||||
|
|
||||||
const moveDescriptionTextMask = maskRect.createGeometryMask();
|
const moveDescriptionTextMask = moveDescriptionTextMaskRect.createGeometryMask();
|
||||||
|
|
||||||
this.moveDescriptionText.setMask(moveDescriptionTextMask);
|
this.moveDescriptionText.setMask(moveDescriptionTextMask);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue