diff --git a/front/dist/resources/logos/logo.png b/front/dist/resources/logos/logo.png new file mode 100644 index 00000000..f4440ad5 Binary files /dev/null and b/front/dist/resources/logos/logo.png differ diff --git a/front/src/Phaser/Components/Loader.ts b/front/src/Phaser/Components/Loader.ts index ab9c0d95..0eda58dc 100644 --- a/front/src/Phaser/Components/Loader.ts +++ b/front/src/Phaser/Components/Loader.ts @@ -1,14 +1,50 @@ +import ImageFrameConfig = Phaser.Types.Loader.FileTypes.ImageFrameConfig; -export const addLoader = (scene:Phaser.Scene): void => { - const loadingText = scene.add.text(scene.game.renderer.width / 2, 200, 'Loading'); +const LogoNameIndex: string = 'logoLoading'; +const TextName: string = 'Loading...'; +const LogoResource: string = 'resources/logos/logo.png'; +const LogoFrame: ImageFrameConfig = {frameWidth: 307, frameHeight: 59}; + +export const addLoader = (scene: Phaser.Scene): void => { + let loadingText: Phaser.GameObjects.Text|null = null; + const loadingBarWidth: number = Math.floor(scene.game.renderer.width / 3); + const loadingBarHeight: number = 16; + const padding: number = 5; + + const promiseLoadLogoTexture = new Promise((res) => { + if(scene.load.textureManager.exists(LogoNameIndex)){ + return res(scene.add.image(scene.game.renderer.width / 2, scene.game.renderer.height / 2 - 150, LogoNameIndex)); + }else{ + //add loading if logo image is not ready + loadingText = scene.add.text(scene.game.renderer.width / 2, scene.game.renderer.height / 2 - 50, TextName); + } + scene.load.spritesheet(LogoNameIndex, LogoResource, LogoFrame); + scene.load.once(`filecomplete-spritesheet-${LogoNameIndex}`, () => { + if(loadingText){ + loadingText.destroy(); + } + return res(scene.add.image(scene.game.renderer.width / 2, scene.game.renderer.height / 2 - 150, LogoNameIndex)); + }); + }); + + const progressContainer = scene.add.graphics(); const progress = scene.add.graphics(); + progressContainer.fillStyle(0x444444, 0.8); + progressContainer.fillRect((scene.game.renderer.width - loadingBarWidth) / 2 - padding, scene.game.renderer.height / 2 + 50 - padding, loadingBarWidth + padding * 2, loadingBarHeight + padding * 2); + scene.load.on('progress', (value: number) => { progress.clear(); - progress.fillStyle(0xffffff, 1); - progress.fillRect(0, 270, 800 * value, 60); + progress.fillStyle(0xBBBBBB, 1); + progress.fillRect((scene.game.renderer.width - loadingBarWidth) / 2, scene.game.renderer.height / 2 + 50, loadingBarWidth * value, loadingBarHeight); }); scene.load.on('complete', () => { - loadingText.destroy(); + if(loadingText){ + loadingText.destroy(); + } + promiseLoadLogoTexture.then((resLoadingImage: Phaser.GameObjects.Image) => { + resLoadingImage.destroy(); + }); progress.destroy(); + progressContainer.destroy(); }); -} \ No newline at end of file +}