File size: 1,062 Bytes
5b324f1 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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<Promise<{ id: string; glft: GLTF }>>();
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);
};
|