refactored companion selection scene
This commit is contained in:
parent
187e21eed9
commit
fb90111cdf
@ -24,8 +24,6 @@ export class SelectCompanionScene extends ResizableScene {
|
|||||||
private readonly nbCharactersPerRow = 7;
|
private readonly nbCharactersPerRow = 7;
|
||||||
|
|
||||||
private selectedRectangle!: Rectangle;
|
private selectedRectangle!: Rectangle;
|
||||||
private selectedRectangleXPos = 0;
|
|
||||||
private selectedRectangleYPos = 0;
|
|
||||||
|
|
||||||
private selectedCompanion!: Phaser.Physics.Arcade.Sprite;
|
private selectedCompanion!: Phaser.Physics.Arcade.Sprite;
|
||||||
private companions: Array<Phaser.Physics.Arcade.Sprite> = new Array<Phaser.Physics.Arcade.Sprite>();
|
private companions: Array<Phaser.Physics.Arcade.Sprite> = new Array<Phaser.Physics.Arcade.Sprite>();
|
||||||
@ -70,76 +68,85 @@ export class SelectCompanionScene extends ResizableScene {
|
|||||||
this.add.existing(this.logo);
|
this.add.existing(this.logo);
|
||||||
|
|
||||||
// input events
|
// input events
|
||||||
this.input.keyboard.on('keyup-ENTER', () => {
|
this.input.keyboard.on('keyup-ENTER', this.nextScene.bind(this));
|
||||||
return this.nextScene();
|
|
||||||
});
|
|
||||||
|
|
||||||
this.input.keyboard.on('keydown-RIGHT', () => {
|
this.input.keyboard.on('keydown-RIGHT', this.selectNext.bind(this));
|
||||||
if(this.selectedRectangleYPos * this.nbCharactersPerRow + (this.selectedRectangleXPos + 2))
|
this.input.keyboard.on('keydown-LEFT', this.selectPrevious.bind(this));
|
||||||
if (
|
this.input.keyboard.on('keydown-DOWN', this.jumpToNextRow.bind(this));
|
||||||
this.selectedRectangleXPos < this.nbCharactersPerRow - 1
|
this.input.keyboard.on('keydown-UP', this.jumpToPreviousRow.bind(this));
|
||||||
&& ((this.selectedRectangleYPos * this.nbCharactersPerRow) + (this.selectedRectangleXPos + 1) + 1) <= this.companionModels.length
|
|
||||||
) {
|
|
||||||
this.selectedRectangleXPos++;
|
|
||||||
}
|
|
||||||
this.updateSelectedCompanion();
|
|
||||||
});
|
|
||||||
|
|
||||||
this.input.keyboard.on('keydown-LEFT', () => {
|
|
||||||
if (
|
|
||||||
this.selectedRectangleXPos > 0
|
|
||||||
&& ((this.selectedRectangleYPos * this.nbCharactersPerRow) + (this.selectedRectangleXPos - 1) + 1) <= this.companionModels.length
|
|
||||||
) {
|
|
||||||
this.selectedRectangleXPos--;
|
|
||||||
}
|
|
||||||
this.updateSelectedCompanion();
|
|
||||||
});
|
|
||||||
|
|
||||||
this.input.keyboard.on('keydown-DOWN', () => {
|
|
||||||
if (
|
|
||||||
this.selectedRectangleYPos + 1 < Math.ceil(this.companionModels.length / this.nbCharactersPerRow)
|
|
||||||
&& (
|
|
||||||
(((this.selectedRectangleYPos + 1) * this.nbCharactersPerRow) + this.selectedRectangleXPos + 1) <= this.companionModels.length // check if companion isn't empty
|
|
||||||
|| (this.selectedRectangleYPos + 1) === Math.ceil(this.companionModels.length / this.nbCharactersPerRow) // check if is custom rectangle
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
this.selectedRectangleYPos++;
|
|
||||||
}
|
|
||||||
this.updateSelectedCompanion();
|
|
||||||
});
|
|
||||||
|
|
||||||
this.input.keyboard.on('keydown-UP', () => {
|
|
||||||
if (
|
|
||||||
this.selectedRectangleYPos > 0
|
|
||||||
&& (((this.selectedRectangleYPos - 1) * this.nbCharactersPerRow) + this.selectedRectangleXPos + 1) <= this.companionModels.length
|
|
||||||
) {
|
|
||||||
this.selectedRectangleYPos--;
|
|
||||||
}
|
|
||||||
this.updateSelectedCompanion();
|
|
||||||
});
|
|
||||||
|
|
||||||
this.createCurrentCompanion();
|
this.createCurrentCompanion();
|
||||||
|
this.selectCompanion(this.getCompanionIndex());
|
||||||
const companionNumber = this.getCompanionIndex();
|
|
||||||
|
|
||||||
this.selectedRectangleXPos = companionNumber % this.nbCharactersPerRow;
|
|
||||||
this.selectedRectangleYPos = Math.floor(companionNumber / this.nbCharactersPerRow);
|
|
||||||
|
|
||||||
this.updateSelectedCompanion();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
update(time: number, delta: number): void {
|
update(time: number, delta: number): void {
|
||||||
this.pressReturnField.setVisible(!!(Math.floor(time / 500) % 2));
|
this.pressReturnField.setVisible(!!(Math.floor(time / 500) % 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
private nextScene(): void {
|
private jumpToPreviousRow(): void {
|
||||||
// store companion
|
const index = this.companions.indexOf(this.selectedCompanion) - this.nbCharactersPerRow;
|
||||||
const companionNumber = this.selectedRectangleXPos + this.selectedRectangleYPos * this.nbCharactersPerRow;
|
if (index >= 0) {
|
||||||
const model = this.companionModels[companionNumber];
|
this.selectCompanion(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private jumpToNextRow(): void {
|
||||||
|
const index = this.companions.indexOf(this.selectedCompanion) + this.nbCharactersPerRow;
|
||||||
|
if (index < this.companions.length) {
|
||||||
|
this.selectCompanion(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private selectPrevious(): void {
|
||||||
|
const index = this.companions.indexOf(this.selectedCompanion);
|
||||||
|
this.selectCompanion(index - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private selectNext(): void {
|
||||||
|
const index = this.companions.indexOf(this.selectedCompanion);
|
||||||
|
this.selectCompanion(index + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private selectCompanion(index?: number): void {
|
||||||
|
if (typeof index === 'undefined') {
|
||||||
|
index = this.companions.indexOf(this.selectedCompanion);
|
||||||
|
}
|
||||||
|
|
||||||
|
// make sure index is inside possible range
|
||||||
|
index = Math.min(this.companions.length - 1, Math.max(0, index));
|
||||||
|
|
||||||
|
if (this.selectedCompanion === this.companions[index]) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.selectedCompanion.anims.pause();
|
||||||
|
this.selectedCompanion = this.companions[index];
|
||||||
|
|
||||||
|
this.selectedRectangle.setVisible(true);
|
||||||
|
this.selectedRectangle.setX(this.selectedCompanion.x);
|
||||||
|
this.selectedRectangle.setY(this.selectedCompanion.y);
|
||||||
|
this.selectedRectangle.setSize(32, 32);
|
||||||
|
|
||||||
|
const model = this.companionModels[index];
|
||||||
|
|
||||||
|
if (model !== null) {
|
||||||
|
this.selectedCompanion.anims.play(model.name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private storeCompanionSelection(): string|null {
|
||||||
|
const index = this.companions.indexOf(this.selectedCompanion);
|
||||||
|
const model = this.companionModels[index];
|
||||||
const companion = model === null ? null : model.name;
|
const companion = model === null ? null : model.name;
|
||||||
|
|
||||||
localUserStore.setCompanion(companion);
|
localUserStore.setCompanion(companion);
|
||||||
|
|
||||||
|
return companion;
|
||||||
|
}
|
||||||
|
|
||||||
|
private nextScene(): void {
|
||||||
|
const companion = this.storeCompanionSelection();
|
||||||
|
|
||||||
// next scene
|
// next scene
|
||||||
this.scene.stop(SelectCompanionSceneName);
|
this.scene.stop(SelectCompanionSceneName);
|
||||||
|
|
||||||
@ -177,9 +184,7 @@ export class SelectCompanionScene extends ResizableScene {
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion.setInteractive().on("pointerdown", () => {
|
companion.setInteractive().on("pointerdown", () => {
|
||||||
this.selectedRectangleXPos = col;
|
this.selectCompanion(i);
|
||||||
this.selectedRectangleYPos = row;
|
|
||||||
this.updateSelectedCompanion();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
this.companions.push(companion);
|
this.companions.push(companion);
|
||||||
@ -195,34 +200,13 @@ export class SelectCompanionScene extends ResizableScene {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
private updateSelectedCompanion(): void {
|
|
||||||
this.selectedCompanion?.anims.pause();
|
|
||||||
|
|
||||||
const [x, y] = this.getCharacterPosition(this.selectedRectangleXPos, this.selectedRectangleYPos);
|
|
||||||
this.selectedRectangle.setVisible(true);
|
|
||||||
this.selectedRectangle.setX(x);
|
|
||||||
this.selectedRectangle.setY(y);
|
|
||||||
this.selectedRectangle.setSize(32, 32);
|
|
||||||
|
|
||||||
const companionNumber = this.selectedRectangleXPos + this.selectedRectangleYPos * this.nbCharactersPerRow;
|
|
||||||
const model = this.companionModels[companionNumber];
|
|
||||||
|
|
||||||
const companion = this.companions[companionNumber];
|
|
||||||
|
|
||||||
if (model !== null) {
|
|
||||||
companion.play(model.name);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.selectedCompanion = companion;
|
|
||||||
}
|
|
||||||
|
|
||||||
public onResize(ev: UIEvent): void {
|
public onResize(ev: UIEvent): void {
|
||||||
this.textField.x = this.game.renderer.width / 2;
|
this.textField.x = this.game.renderer.width / 2;
|
||||||
this.pressReturnField.x = this.game.renderer.width / 2;
|
this.pressReturnField.x = this.game.renderer.width / 2;
|
||||||
this.logo.x = this.game.renderer.width - 30;
|
this.logo.x = this.game.renderer.width - 30;
|
||||||
this.logo.y = this.game.renderer.height - 20;
|
this.logo.y = this.game.renderer.height - 20;
|
||||||
|
|
||||||
for (let i = 0; i <this.companionModels.length; i++) {
|
for (let i = 0; i < this.companionModels.length; i++) {
|
||||||
const companion = this.companions[i];
|
const companion = this.companions[i];
|
||||||
|
|
||||||
const col = i % this.nbCharactersPerRow;
|
const col = i % this.nbCharactersPerRow;
|
||||||
@ -233,7 +217,7 @@ export class SelectCompanionScene extends ResizableScene {
|
|||||||
companion.y = y;
|
companion.y = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.updateSelectedCompanion();
|
this.selectCompanion();
|
||||||
}
|
}
|
||||||
|
|
||||||
private getCompanionIndex(): number {
|
private getCompanionIndex(): number {
|
||||||
|
Loading…
Reference in New Issue
Block a user