From 347fc0e1e8a97fc6cf82f69cc7b04cc4800f02b9 Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Mon, 21 Oct 2024 18:35:36 +0200 Subject: [PATCH] MVP Dexie loader --- src/composables/zoneComposable.ts | 44 ----------------- src/screens/Game.vue | 41 ++++++++++++---- src/screens/Loading.vue | 21 +++----- src/utilities/assets.ts | 80 ++++++++++++++----------------- 4 files changed, 74 insertions(+), 112 deletions(-) diff --git a/src/composables/zoneComposable.ts b/src/composables/zoneComposable.ts index af3ce03..1d529a2 100644 --- a/src/composables/zoneComposable.ts +++ b/src/composables/zoneComposable.ts @@ -87,47 +87,3 @@ export const sortByIsometricDepth = { scene.load.destroy() } - -export const loadAssets = (scene: Phaser.Scene): Promise => { - return new Promise((resolve) => { - let assetManager = useAssetManager - let addedLoad = false - - assetManager.getAssetsByGroup('tiles').then((assets) => { - assets.forEach((asset) => { - if (scene.load.textureManager.exists(asset.key)) return - addedLoad = true - scene.textures.addBase64(asset.key, asset.data) - }) - }) - - assetManager.getAssetsByGroup('objects').then((assets) => { - assets.forEach((asset) => { - if (scene.load.textureManager.exists(asset.key)) return - addedLoad = true - scene.textures.addBase64(asset.key, asset.data) - }) - }) - - assetManager.getAssetsByGroup('sprites').then((assets) => { - assets.forEach((asset) => { - if (scene.load.textureManager.exists(asset.key)) return - let img = new Image(); - img.onload = () => { - scene.textures.addSpriteSheet(asset.key, img, { frameWidth: asset.frameWidth ?? 0, frameHeight: asset.frameHeight ?? 0 }) - }; - img.src = asset.data; - addedLoad = true - }) - }) - - if (addedLoad) { - scene.load.start() - scene.load.on(Phaser.Loader.Events.COMPLETE, () => { - resolve() - }) - } else { - resolve() - } - }) -} diff --git a/src/screens/Game.vue b/src/screens/Game.vue index 714bbd7..e5655eb 100644 --- a/src/screens/Game.vue +++ b/src/screens/Game.vue @@ -19,7 +19,7 @@ - \ No newline at end of file + diff --git a/src/utilities/assets.ts b/src/utilities/assets.ts index e33db9d..6a484e4 100644 --- a/src/utilities/assets.ts +++ b/src/utilities/assets.ts @@ -1,101 +1,93 @@ -import config from '@/config'; -import Dexie from 'dexie'; +import config from '@/config' +import Dexie from 'dexie' interface Asset { - key: string; - data: Blob; - group: string; - updatedAt: Date; - frameCount?: number; - frameWidth?: number; - frameHeight?: number; + key: string + data: Blob + group: string + updatedAt: Date + frameCount?: number + frameWidth?: number + frameHeight?: number } interface AssetWithUrl extends Omit { - data: string; + data: string } class AssetManager extends Dexie { - assets!: Dexie.Table; + assets!: Dexie.Table constructor() { - super('AssetManager'); + super('AssetManager') this.version(1).stores({ assets: 'key, group' - }); + }) } async getAssetCount(): Promise { try { - const count = await this.assets.count(); - return count; + const count = await this.assets.count() + return count } catch (error) { - console.error('Failed to get asset count:', error); - return 0; + console.error('Failed to get asset count:', error) + return 0 } } - async addAsset( - key: string, - url: string, - group: string, - updatedAt: Date, - frameCount?: number, - frameWidth?: number, - frameHeight?: number - ): Promise { + async addAsset(key: string, url: string, group: string, updatedAt: Date, frameCount?: number, frameWidth?: number, frameHeight?: number): Promise { try { - const response = await fetch(config.server_endpoint + url); - const blob = await response.blob(); - await this.assets.put({ key, data: blob, group, updatedAt, frameCount, frameWidth, frameHeight }); + const response = await fetch(config.server_endpoint + url) + const blob = await response.blob() + await this.assets.put({ key, data: blob, group, updatedAt, frameCount, frameWidth, frameHeight }) } catch (error) { - console.error(`Failed to add asset ${key}:`, error); + console.error(`Failed to add asset ${key}:`, error) } } async getAsset(key: string): Promise { try { - const asset = await this.assets.get(key); + const asset = await this.assets.get(key) if (asset) { return { ...asset, data: URL.createObjectURL(asset.data) - }; + } } } catch (error) { - console.error(`Failed to retrieve asset ${key}:`, error); + console.error(`Failed to retrieve asset ${key}:`, error) } - return null; + return null } async getAssetsByGroup(group: string): Promise { try { - const assets = await this.assets.where('group').equals(group).toArray(); - return assets.map(asset => ({ + const assets = await this.assets.where('group').equals(group).toArray() + return assets.map((asset) => ({ ...asset, data: URL.createObjectURL(asset.data) - })); + })) } catch (error) { - console.error(`Failed to retrieve assets for group ${group}:`, error); - return []; + console.error(`Failed to retrieve assets for group ${group}:`, error) + return [] } } async clearAssets(): Promise { try { - await this.assets.clear(); + await this.assets.clear() } catch (error) { - console.error('Failed to clear assets:', error); + console.error('Failed to clear assets:', error) } } async deleteAsset(key: string): Promise { try { - await this.assets.delete(key); + await this.assets.delete(key) } catch (error) { - console.error(`Failed to delete asset ${key}:`, error); + console.error(`Failed to delete asset ${key}:`, error) } } } -export const useAssetManager = new AssetManager(); \ No newline at end of file +export const useAssetManager = new AssetManager()