Team display shows on bar

Flyout soon™
This commit is contained in:
RedstonewolfX 2024-07-05 15:59:27 -04:00
parent c296fcbbcd
commit 2b40ac7d58
5 changed files with 236 additions and 2 deletions

View File

@ -112,6 +112,7 @@ export default class BattleScene extends SceneBase {
public damageNumbersMode: integer = 0; public damageNumbersMode: integer = 0;
public reroll: boolean = false; public reroll: boolean = false;
public showMovesetFlyout: boolean = true; public showMovesetFlyout: boolean = true;
public showTeams: boolean = true;
public showArenaFlyout: boolean = true; public showArenaFlyout: boolean = true;
public showTimeOfDayWidget: boolean = true; public showTimeOfDayWidget: boolean = true;
public timeOfDayAnimation: EaseType = EaseType.NONE; public timeOfDayAnimation: EaseType = EaseType.NONE;

View File

@ -108,6 +108,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
private shinySparkle: Phaser.GameObjects.Sprite; private shinySparkle: Phaser.GameObjects.Sprite;
public usedInBattle: boolean = false;
constructor(scene: BattleScene, x: number, y: number, species: PokemonSpecies, level: integer, abilityIndex?: integer, formIndex?: integer, gender?: Gender, shiny?: boolean, variant?: Variant, ivs?: integer[], nature?: Nature, dataSource?: Pokemon | PokemonData) { constructor(scene: BattleScene, x: number, y: number, species: PokemonSpecies, level: integer, abilityIndex?: integer, formIndex?: integer, gender?: Gender, shiny?: boolean, variant?: Variant, ivs?: integer[], nature?: Nature, dataSource?: Pokemon | PokemonData) {
super(scene, x, y); super(scene, x, y);

View File

@ -1873,6 +1873,9 @@ export class TurnInitPhase extends FieldPhase {
if (pokemon?.isActive()) { if (pokemon?.isActive()) {
if (pokemon.isPlayer()) { if (pokemon.isPlayer()) {
this.scene.currentBattle.addParticipant(pokemon as PlayerPokemon); this.scene.currentBattle.addParticipant(pokemon as PlayerPokemon);
} else {
pokemon.usedInBattle = true;
pokemon.getBattleInfo().iconsActive = true
} }
pokemon.resetTurnData(); pokemon.resetTurnData();
@ -1881,6 +1884,32 @@ export class TurnInitPhase extends FieldPhase {
} }
}); });
var Pt = this.scene.getEnemyParty()
var Pt2 = Pt.slice()
if (Pt2.length > 1) {
Pt2[1] = Pt[0]
Pt2[0] = Pt[1]
}
Pt.forEach((pokemon, i) => {
if (pokemon.hasTrainer() || true) {
console.log(i)
if (pokemon.getFieldIndex() == 1 && pokemon.isOnField()) {
// Switch this to cycle between
// - hiding the top mon's team bar
// - showing the bottom mon's team bar with its active slots reversed
if (false) {
pokemon.getBattleInfo().displayParty(Pt)
Pt[0].getBattleInfo().switchIconVisibility(false); // Make the top mon's team bar go away
Pt[0].getBattleInfo().iconsActive = false; // Prevent the top mon from re-opening its bar
} else {
pokemon.getBattleInfo().displayParty(Pt2)
}
} else {
pokemon.getBattleInfo().displayParty(Pt)
}
}
})
this.scene.pushPhase(new TurnStartPhase(this.scene)); this.scene.pushPhase(new TurnStartPhase(this.scene));
this.end(); this.end();

View File

@ -98,6 +98,7 @@ export const SettingKeys = {
SE_Volume: "SE_VOLUME", SE_Volume: "SE_VOLUME",
Music_Preference: "MUSIC_PREFERENCE", Music_Preference: "MUSIC_PREFERENCE",
Show_BGM_Bar: "SHOW_BGM_BAR", Show_BGM_Bar: "SHOW_BGM_BAR",
Show_Pokemon_Teams: "SHOW_POKEMON_TEAMS"
}; };
/** /**
@ -645,6 +646,10 @@ export function setSetting(scene: BattleScene, setting: string, value: integer):
case SettingKeys.Show_Moveset_Flyout: case SettingKeys.Show_Moveset_Flyout:
scene.showMovesetFlyout = Setting[index].options[value].value === "On"; scene.showMovesetFlyout = Setting[index].options[value].value === "On";
break; break;
case SettingKeys.Show_Pokemon_Teams:
// Currently not used
scene.showTeams = Setting[index].options[value].value === "On";
break;
case SettingKeys.Show_Arena_Flyout: case SettingKeys.Show_Arena_Flyout:
scene.showArenaFlyout = Setting[index].options[value].value === "On"; scene.showArenaFlyout = Setting[index].options[value].value === "On";
break; break;

View File

@ -70,6 +70,15 @@ export default class BattleInfo extends Phaser.GameObjects.Container {
public flyoutMenu?: BattleFlyout; public flyoutMenu?: BattleFlyout;
private teamIcons: Phaser.GameObjects.Sprite[];
private teamIconOver: Phaser.GameObjects.Sprite[];
private teamIconsShow: boolean[];
public iconsActive: boolean = false;
private teamCount: integer = 0;
private showingTeam: boolean = false;
private pressedShow: boolean = false;
private override: boolean = false;
constructor(scene: Phaser.Scene, x: number, y: number, player: boolean) { constructor(scene: Phaser.Scene, x: number, y: number, player: boolean) {
super(scene, x, y); super(scene, x, y);
this.baseY = y; this.baseY = y;
@ -114,6 +123,27 @@ export default class BattleInfo extends Phaser.GameObjects.Container {
this.ownedIcon.setPositionRelative(this.nameText, 0, 11.75); this.ownedIcon.setPositionRelative(this.nameText, 0, 11.75);
this.add(this.ownedIcon); this.add(this.ownedIcon);
this.teamIcons = new Array(6);
this.teamIconOver = new Array(6);
this.teamIconsShow = new Array(6).fill(false);
for (var ballindex = 0; ballindex < 6; ballindex++) {
this.teamIcons[ballindex] = this.scene.add.sprite(0, 0, "pb_tray_ball", "empty")
this.teamIcons[ballindex].setName("pb_teamball_" + ballindex);
this.teamIcons[ballindex].setVisible(true);
this.teamIcons[ballindex].setAlpha(0);
this.teamIcons[ballindex].setOrigin(0, 0);
this.teamIcons[ballindex].setPositionRelative(this.nameText, 6 * ballindex, 11.75);
this.add(this.teamIcons[ballindex]);
this.teamIconOver[ballindex] = this.scene.add.sprite(0, 0, "pb_tray_ball", "empty")
this.teamIconOver[ballindex].setName("pb_teamball_" + ballindex);
this.teamIconOver[ballindex].setVisible(true);
this.teamIconOver[ballindex].setAlpha(0);
this.teamIconOver[ballindex].setOrigin(0, 0);
this.teamIconOver[ballindex].setPositionRelative(this.nameText, 6 * ballindex, 11.75);
this.add(this.teamIconOver[ballindex]);
}
this.championRibbon = this.scene.add.sprite(0, 0, "champion_ribbon"); this.championRibbon = this.scene.add.sprite(0, 0, "champion_ribbon");
this.championRibbon.setName("icon_champion_ribbon"); this.championRibbon.setName("icon_champion_ribbon");
this.championRibbon.setVisible(false); this.championRibbon.setVisible(false);
@ -484,6 +514,116 @@ export default class BattleInfo extends Phaser.GameObjects.Container {
} }
} }
displayParty(overwriteparty?: Pokemon[], useparty?: EnemyPokemon[]): void {
// Floor 8: 2 pokemon
// Floor 25: 3
// Floor 55: 4
// Floor 95: 5
// Floor 145: 6
// Floor 195: 6
var party = (this.scene as BattleScene).getEnemyParty()
if (useparty != undefined) {
console.debug("Using specified enemy party");
//party = useparty;
} else if (overwriteparty != undefined) {
console.debug("Using specified party");
}
var P;
if (useparty != undefined) {
//console.debug("Using specified enemy party");
P = useparty;
} else if (overwriteparty != undefined) {
//console.debug("Using specified party");
P = overwriteparty
} else {
P = party
}
var staticparty = (this.scene as BattleScene).getEnemyParty()
var states = new Array(6)
for (var i = 0; i < 6; i++) {
states[i] = "empty";
}
var total_visible = 0
for (var i = 0; i < P.length; i++) {
states[i] = "ball"
if (!party[i].hp) {
states[i] = "faint"
} else if (party[i].status) {
states[i] = "ball"
}
if (P[i].isOnField()) {
//console.log(P[i].name + " is in battle; set it as seen")
P[i].usedInBattle = true
}
if (P[i].usedInBattle) total_visible++;
//console.log(P[i].name, P[i].getIconAtlasKey(true))
}
console.log("Updating ball icons for party (" + P.length + ")")
if (staticparty.length > 0) {
for (var i = 0; i < staticparty.length; i++) {
//console.log(i, staticparty[i].name)
}
}
var Spacing = P.length == 6 ? 6 : 8
this.teamCount = P.length
for (var ballindex = 0; ballindex < 6; ballindex++) {
//console.log(ballindex + ": setting icon " + states[ballindex])
if (states[ballindex] == "ball" && P[ballindex].usedInBattle) {
this.teamIcons[ballindex].setTexture(P[ballindex].getIconAtlasKey(true))
this.teamIcons[ballindex].setFrame(P[ballindex].getIconId(true))
this.teamIcons[ballindex].setPositionRelative(this.nameText, Spacing * ballindex - 3, 11.75 - 4);
this.teamIcons[ballindex].setDisplaySize(18 * 0.8, 15 * 0.8)
this.teamIconOver[ballindex].setTexture(P[ballindex].getIconAtlasKey(true))
this.teamIconOver[ballindex].setFrame(P[ballindex].getIconId(true))
this.teamIconOver[ballindex].setPositionRelative(this.nameText, Spacing * ballindex - 3, 11.75 - 4);
this.teamIconOver[ballindex].setDisplaySize(18 * 0.8, 15 * 0.8)
this.teamIconOver[ballindex].setVisible(true)
this.teamIconsShow[ballindex] = true
if (P[ballindex].status && P[ballindex].hp) {
switch (P[ballindex].status.effect) {
case StatusEffect.NONE:
// Uncallable; replaced by "ball"
break;
case StatusEffect.POISON:
this.teamIconOver[ballindex].setTintFill(0xe40dfc)
break;
case StatusEffect.TOXIC:
this.teamIconOver[ballindex].setTintFill(0xfa2590)
break;
case StatusEffect.PARALYSIS:
this.teamIconOver[ballindex].setTintFill(0xf7ec1e)
break;
case StatusEffect.SLEEP:
this.teamIconOver[ballindex].setTintFill(0x54bfaa)
break;
case StatusEffect.FREEZE:
this.teamIconOver[ballindex].setTintFill(0xcbf0f2)
break;
case StatusEffect.BURN:
this.teamIconOver[ballindex].setTintFill(0xf51905)
break;
case StatusEffect.FAINT:
// Uncallable; replaced by "faint"
break;
}
} else {
this.teamIconOver[ballindex].clearTint()
this.teamIconOver[ballindex].setVisible(false)
this.teamIconsShow[ballindex] = false
}
} else {
this.teamIcons[ballindex].setTexture("pb_tray_ball")
this.teamIcons[ballindex].setFrame(states[ballindex])
this.teamIcons[ballindex].setPositionRelative(this.nameText, Spacing * ballindex, 11.75);
this.teamIcons[ballindex].setDisplaySize(7, 7)
this.teamIcons[ballindex].setVisible(states[ballindex] != 'empty')
this.teamIconOver[ballindex].clearTint()
this.teamIconOver[ballindex].setVisible(false)
this.teamIconsShow[ballindex] = false
}
}
}
setOffset(offset: boolean): void { setOffset(offset: boolean): void {
if (this.offset === offset) { if (this.offset === offset) {
return; return;
@ -532,11 +672,15 @@ export default class BattleInfo extends Phaser.GameObjects.Container {
if (this.lastStatus !== StatusEffect.NONE) { if (this.lastStatus !== StatusEffect.NONE) {
this.statusIndicator.setFrame(StatusEffect[this.lastStatus].toLowerCase()); this.statusIndicator.setFrame(StatusEffect[this.lastStatus].toLowerCase());
} else if (this.player) {
this.statusIndicator.setVisible(!!this.lastStatus);
} else {
this.statusIndicator.setVisible(!!this.lastStatus);
this.switchIconVisibility(this.showingTeam, true)
} }
this.statusIndicator.setVisible(!!this.lastStatus);
if (!this.player && this.ownedIcon.visible) { if (!this.player && this.ownedIcon.visible) {
this.ownedIcon.setAlpha(this.statusIndicator.visible ? 0 : 1); this.switchIconVisibility(this.showingTeam, true)
} }
} }
@ -746,6 +890,59 @@ export default class BattleInfo extends Phaser.GameObjects.Container {
} }
} }
/**
* Overrides the state of the team display.
*
* The state can't be switched by the player until the override is removed, but you can call this again to change the override state.
*/
addTeamDisplayOverride(visible: boolean): void {
this.override = true;
this.switchIconVisibility(visible);
}
/**
* Removes any override on the team display.
*
* The team display will then show/hide as required.
*/
removeTeamDisplayOverride(): void {
this.override = false;
this.switchIconVisibility(this.pressedShow);
}
/** Show or hide team display. */
switchIconVisibility(visible: boolean = this.showingTeam, override?: boolean): void {
if (!this.iconsActive) visible = false
if (this.showingTeam == visible && !override) return; // Don't spam requests
this.showingTeam = visible
this.scene.tweens.add({
targets: this.teamIcons,
duration: Utils.fixedInt(125),
ease: "Sine.easeInOut",
alpha: visible ? 1 : 0
});
this.scene.tweens.add({
targets: this.teamIconOver,
duration: Utils.fixedInt(125),
ease: "Sine.easeInOut",
alphaTopLeft: visible ? 0.4 : 0,
alphaTopRight: visible ? 0.4 : 0,
alphaBottomLeft: visible ? 0.7 : 0,
alphaBottomRight: visible ? 0.7 : 0,
});
this.scene.tweens.add({
targets: [ this.championRibbon, this.ownedIcon ],
duration: Utils.fixedInt(125),
ease: "Sine.easeInOut",
alpha: visible && this.iconsActive ? 0 : this.statusIndicator.visible ? 0 : 1
});
this.scene.tweens.add({
targets: this.statusIndicator,
duration: Utils.fixedInt(125),
ease: "Sine.easeInOut",
alpha: visible && this.iconsActive ? 0 : (!!this.lastStatus ? 1 : 0)
});
}
/** /**
* Show or hide the type effectiveness multiplier window * Show or hide the type effectiveness multiplier window
* Passing undefined will hide the window * Passing undefined will hide the window