Merge pull request #505 from thecodingmachine/fixFrameLocalStorage

Manage Local Storage customers player error
This commit is contained in:
David Négrier 2020-12-18 16:33:36 +01:00 committed by GitHub
commit e5138e1c03
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 37 additions and 18 deletions

View file

@ -0,0 +1 @@
export class TextureError extends Error{}

View file

@ -3,6 +3,7 @@ import {SpeechBubble} from "./SpeechBubble";
import BitmapText = Phaser.GameObjects.BitmapText; import BitmapText = Phaser.GameObjects.BitmapText;
import Container = Phaser.GameObjects.Container; import Container = Phaser.GameObjects.Container;
import Sprite = Phaser.GameObjects.Sprite; import Sprite = Phaser.GameObjects.Sprite;
import {TextureError} from "../../Exception/TextureError";
export interface PlayerResourceDescriptionInterface { export interface PlayerResourceDescriptionInterface {
name: string, name: string,
@ -94,6 +95,9 @@ export abstract class Character extends Container {
public addTextures(textures: string[], frame?: string | number): void { public addTextures(textures: string[], frame?: string | number): void {
for (const texture of textures) { for (const texture of textures) {
if(!this.scene.textures.exists(texture)){
throw new TextureError('texture not found');
}
const sprite = new Sprite(this.scene, 0, 0, texture, frame); const sprite = new Sprite(this.scene, 0, 0, texture, frame);
sprite.setInteractive({useHandCursor: true}); sprite.setInteractive({useHandCursor: true});
this.add(sprite); this.add(sprite);
@ -106,7 +110,9 @@ export abstract class Character extends Container {
}); });
}) })
// Needed, otherwise, animations are not handled correctly. // Needed, otherwise, animations are not handled correctly.
this.scene.sys.updateList.add(sprite); if(this.scene) {
this.scene.sys.updateList.add(sprite);
}
this.sprites.set(texture, sprite); this.sprites.set(texture, sprite);
} }
} }
@ -152,10 +158,7 @@ export abstract class Character extends Container {
if (moving && (!sprite.anims.currentAnim || sprite.anims.currentAnim.key !== direction)) { if (moving && (!sprite.anims.currentAnim || sprite.anims.currentAnim.key !== direction)) {
sprite.play(texture+'-'+direction, true); sprite.play(texture+'-'+direction, true);
} else if (!moving) { } else if (!moving) {
/*if (this.anims.currentAnim) { sprite.anims.play(texture + '-' + direction, true);
this.anims.stop();
}*/
sprite.play(texture+'-'+direction, true);
sprite.anims.stop(); sprite.anims.stop();
} }
} }
@ -229,7 +232,9 @@ export abstract class Character extends Container {
this.scene.events.removeListener('postupdate', this.postupdate.bind(this)); this.scene.events.removeListener('postupdate', this.postupdate.bind(this));
} }
for (const sprite of this.sprites.values()) { for (const sprite of this.sprites.values()) {
this.scene.sys.updateList.remove(sprite); if(this.scene) {
this.scene.sys.updateList.remove(sprite);
}
} }
super.destroy(fromScene); super.destroy(fromScene);
this.playerName.destroy(); this.playerName.destroy();

View file

@ -63,6 +63,8 @@ import {urlManager} from "../../Url/UrlManager";
import {PresentationModeIcon} from "../Components/PresentationModeIcon"; import {PresentationModeIcon} from "../Components/PresentationModeIcon";
import {ChatModeIcon} from "../Components/ChatModeIcon"; import {ChatModeIcon} from "../Components/ChatModeIcon";
import {OpenChatIcon, openChatIconName} from "../Components/OpenChatIcon"; import {OpenChatIcon, openChatIconName} from "../Components/OpenChatIcon";
import {SelectCharacterScene, SelectCharacterSceneName} from "../Login/SelectCharacterScene";
import {TextureError} from "../../Exception/TextureError";
export interface GameSceneInitInterface { export interface GameSceneInitInterface {
initPosition: PointInterface|null, initPosition: PointInterface|null,
@ -670,8 +672,12 @@ export class GameScene extends ResizableScene implements CenterListener {
public cleanupClosingScene(): void { public cleanupClosingScene(): void {
// We are completely destroying the current scene to avoid using a half-backed instance when coming back to the same map. // We are completely destroying the current scene to avoid using a half-backed instance when coming back to the same map.
this.connection.closeConnection(); if(this.connection) {
this.simplePeer.unregister(); this.connection.closeConnection();
}
if(this.simplePeer) {
this.simplePeer.unregister();
}
} }
private switchLayoutMode(): void { private switchLayoutMode(): void {
@ -818,16 +824,23 @@ export class GameScene extends ResizableScene implements CenterListener {
createCurrentPlayer(){ createCurrentPlayer(){
//initialise player //initialise player
//TODO create animation moving between exit and start //TODO create animation moving between exit and start
this.CurrentPlayer = new Player( try {
this, this.CurrentPlayer = new Player(
this.startX, this,
this.startY, this.startX,
this.playerName, this.startY,
this.characterLayers, this.playerName,
PlayerAnimationNames.WalkDown, this.characterLayers,
false, PlayerAnimationNames.WalkDown,
this.userInputManager false,
); this.userInputManager
);
}catch (err){
if(err instanceof TextureError) {
gameManager.leaveGame(this, SelectCharacterSceneName, new SelectCharacterScene());
}
throw err;
}
//create collision //create collision
this.createCollisionWithPlayer(); this.createCollisionWithPlayer();