import { GLTF, GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader"; import { DRACOLoader } from "three/examples/jsm/loaders/DRACOLoader"; import { ItemType } from "@/interfaces/interfaces"; import { getDracoLoader } from "@/utils/three/draco"; import { __PROTOCOL__ } from "@G/global.config"; export const loadItemTypeModules = async (itemTypeList: ItemType[]): Promise<{ id: string; glft: GLTF }[]> => { const promiseArr: Promise<{ id: string; glft: GLTF }>[] = new Array>(); const gltfLoader = new GLTFLoader(); gltfLoader.setDRACOLoader(getDracoLoader()); itemTypeList.forEach((itemType) => { const promise = new Promise<{ id: string; glft: GLTF }>((resolve, reject) => { gltfLoader.load( `${__PROTOCOL__}://${itemType.model.fileUrl}`, (glft: GLTF) => { glft.userData = { typeId: itemType.id }; resolve({ id: itemType.id, glft: glft }); }, undefined, (error) => { reject(error); } ); }); promiseArr.push(promise); }); return await Promise.all(promiseArr); };