From ed96ff7ab2df32871e9bc37d107d2de3d1f30ac8 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Sat, 2 May 2026 04:52:35 +0200 Subject: [PATCH] auto-git: [add] src/foliage/bundled-foliage-model-loader.ts --- src/foliage/bundled-foliage-model-loader.ts | 34 +++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/foliage/bundled-foliage-model-loader.ts diff --git a/src/foliage/bundled-foliage-model-loader.ts b/src/foliage/bundled-foliage-model-loader.ts new file mode 100644 index 00000000..935c499f --- /dev/null +++ b/src/foliage/bundled-foliage-model-loader.ts @@ -0,0 +1,34 @@ +import { Group } from "three"; + +import { createConfiguredGltfLoader } from "../assets/gltf-model-import"; + +const bundledFoliageTemplatePromises = new Map>(); + +function getErrorDetail(error: unknown): string { + return error instanceof Error && error.message.trim().length > 0 + ? error.message.trim() + : "Unknown error."; +} + +export function loadBundledFoliageModelTemplate( + bundledPath: string +): Promise { + const cachedTemplatePromise = bundledFoliageTemplatePromises.get(bundledPath); + + if (cachedTemplatePromise !== undefined) { + return cachedTemplatePromise; + } + + const templatePromise = createConfiguredGltfLoader() + .loadAsync(bundledPath) + .then((gltf) => gltf.scene) + .catch((error: unknown) => { + bundledFoliageTemplatePromises.delete(bundledPath); + throw new Error( + `Bundled foliage model failed to load from ${bundledPath}: ${getErrorDetail(error)}` + ); + }); + + bundledFoliageTemplatePromises.set(bundledPath, templatePromise); + return templatePromise; +}