From 52f5e48266cceff919e5bd1fb1b8bd031f390bd6 Mon Sep 17 00:00:00 2001 From: dennemark Date: Thu, 17 Mar 2022 17:28:22 +0100 Subject: [PATCH] feat: :art: allow onSuccess and onError callbacks on useAssetManager tasks (#211) * fix: :bug: fix html loosing anchor node - camera transformation matrix is 0 on first render, led to vec being [NaN, NaN], therefore just added an isNaN check. * fix: :bug: fix visible behind camera frustum this should fix html still being visible, when object is behind camera frustum * feat: :art: allow onSuccess and onError callbacks on useAssetManager tasks * fix: :art: add onError callback to useAssetManager --- .../src/hooks/loaders/useAssetManager.tsx | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/packages/react-babylonjs/src/hooks/loaders/useAssetManager.tsx b/packages/react-babylonjs/src/hooks/loaders/useAssetManager.tsx index d97e4f0a..39e1a620 100644 --- a/packages/react-babylonjs/src/hooks/loaders/useAssetManager.tsx +++ b/packages/react-babylonjs/src/hooks/loaders/useAssetManager.tsx @@ -1,7 +1,9 @@ import { AbstractAssetTask, AssetsManager, + BinaryFileAssetTask, IAssetsProgressEvent, + MeshAssetTask, TextureAssetTask, } from '@babylonjs/core/Misc/assetsManager.js' import { EventState } from '@babylonjs/core/Misc/observable.js' @@ -20,6 +22,8 @@ export type BinaryTask = { taskType: TaskType.Binary name: string url: string + onSuccess?: BinaryFileAssetTask['onSuccess'] + onError?: BinaryFileAssetTask['onError'] } export type MeshTask = { @@ -28,6 +32,8 @@ export type MeshTask = { meshesNames?: any rootUrl: string sceneFilename: string + onSuccess?: MeshAssetTask['onSuccess'] + onError?: MeshAssetTask['onError'] } export type TextureTask = { @@ -37,6 +43,8 @@ export type TextureTask = { noMipmap?: boolean invertY?: boolean samplingMode?: number + onSuccess?: TextureAssetTask['onSuccess'] + onError?: TextureAssetTask['onError'] } export type Task = BinaryTask | MeshTask | TextureTask @@ -174,6 +182,12 @@ const useAssetManagerWithCache = (): (( case TaskType.Binary: const binaryTask = assetManager.addBinaryFileTask(task.name, task.url) newRequests.set(binaryTask, task) + if (task.onSuccess) { + binaryTask.onSuccess = task.onSuccess + } + if (task.onError) { + binaryTask.onError = task.onError + } break case TaskType.Mesh: const meshTask = assetManager.addMeshTask( @@ -183,6 +197,12 @@ const useAssetManagerWithCache = (): (( task.sceneFilename ) newRequests.set(meshTask, task) + if (task.onSuccess) { + meshTask.onSuccess = task.onSuccess + } + if (task.onError) { + meshTask.onError = task.onError + } break case TaskType.Texture: const textureTask: TextureAssetTask = assetManager.addTextureTask( @@ -193,6 +213,12 @@ const useAssetManagerWithCache = (): (( task.samplingMode ) newRequests.set(textureTask, task) + if (task.onSuccess) { + textureTask.onSuccess = task.onSuccess + } + if (task.onError) { + textureTask.onError = task.onError + } break default: throw new Error(