| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- import modalWorker from './loadGltf.worker?worker';
- import Dexie from 'dexie';
- import { useModelStore } from '/@/store/modules/threejs';
- export function initModalWorker() {
- type model = {
- modelName: string;
- modelVal: any;
- };
- const modalUrlArr = [
- 'fm/fm.glb',
- 'fm/Fm-door.glb',
- 'fm/Fm-door-animation.glb',
- 'fm/Fm-overall.glb',
- 'fm/Fm-wallonly.glb',
- 'fc/sdFc.glb',
- 'fc/ddFc.glb',
- 'cf/lmcf.glb',
- 'cf/zdcf.glb',
- 'cf/dscf.glb',
- 'jbfj/jbfj_hd.glb',
- 'jbfj/jbfj_fm.glb',
- 'jbfj/jbfj_fc.glb',
- 'ztfj/main.glb',
- 'ztfj/dj1.glb',
- 'ztfj/dj2.glb',
- 'ztfj/bg.glb',
- ];
- const db: any = new Dexie('DB');
- window['CustomDB'] = db;
- const modelStore = useModelStore();
- db.version(1).stores({
- modal: '++id, modalName, modalVal',
- });
- new Promise(async (resolve) => {
- const validateModelUrlArr: string[] = [];
- for (let i = 0; i < modalUrlArr.length; i++) {
- const url = modalUrlArr[i];
- const modalName = url.replace(/(.*\/)*([^.]+).*/gi, '$2');
- const modalArr = await db.modal.where('modalName').equals(modalName).toArray();
- if (modalArr.length < 1) {
- validateModelUrlArr.push(url);
- } else {
- if (!modelStore.modelArr.get(modalName)) {
- const model: model = {
- modelName: modalName,
- modelVal: modalArr[0].modalVal,
- };
- modelStore.setModel(model);
- }
- }
- }
- resolve(validateModelUrlArr);
- }).then((validateModelUrlArr: string[]) => {
- validateModelUrlArr.forEach((url) => {
- const worker = new modalWorker();
- worker.onmessage = async function (e) {
- const { data, message } = e.data;
- if (message === 'end') {
- if (data) {
- modelStore.setModel(data);
- }
- worker.terminate();
- }
- };
- worker.postMessage({ message: 'load', data: url });
- });
- });
- }
- initModalWorker();
|