main.worker.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import modalWorker from './loadGltf.worker?worker';
  2. import Dexie from 'dexie';
  3. import { useModelStore } from '/@/store/modules/threejs';
  4. export function initModalWorker() {
  5. type model = {
  6. modelName: string;
  7. modelVal: any;
  8. };
  9. const modalUrlArr = [
  10. 'fm/fm.glb',
  11. 'fm/Fm-door.glb',
  12. 'fm/Fm-door-animation.glb',
  13. 'fm/Fm-overall.glb',
  14. 'fm/Fm-wallonly.glb',
  15. 'fc/sdFc.glb',
  16. 'fc/ddFc.glb',
  17. 'cf/lmcf.glb',
  18. 'cf/zdcf.glb',
  19. 'cf/dscf.glb',
  20. 'jbfj/jbfj_hd.glb',
  21. 'jbfj/jbfj_fm.glb',
  22. 'jbfj/jbfj_fc.glb',
  23. 'ztfj/main.glb',
  24. 'ztfj/dj1.glb',
  25. 'ztfj/dj2.glb',
  26. 'ztfj/bg.glb',
  27. ];
  28. const db: any = new Dexie('DB');
  29. window['CustomDB'] = db;
  30. const modelStore = useModelStore();
  31. db.version(1).stores({
  32. modal: '++id, modalName, modalVal',
  33. });
  34. new Promise(async (resolve) => {
  35. const validateModelUrlArr: string[] = [];
  36. for (let i = 0; i < modalUrlArr.length; i++) {
  37. const url = modalUrlArr[i];
  38. const modalName = url.replace(/(.*\/)*([^.]+).*/gi, '$2');
  39. const modalArr = await db.modal.where('modalName').equals(modalName).toArray();
  40. if (modalArr.length < 1) {
  41. validateModelUrlArr.push(url);
  42. } else {
  43. if (!modelStore.modelArr.get(modalName)) {
  44. const model: model = {
  45. modelName: modalName,
  46. modelVal: modalArr[0].modalVal,
  47. };
  48. modelStore.setModel(model);
  49. }
  50. }
  51. }
  52. resolve(validateModelUrlArr);
  53. }).then((validateModelUrlArr: string[]) => {
  54. validateModelUrlArr.forEach((url) => {
  55. const worker = new modalWorker();
  56. worker.onmessage = async function (e) {
  57. const { data, message } = e.data;
  58. if (message === 'end') {
  59. if (data) {
  60. modelStore.setModel(data);
  61. }
  62. worker.terminate();
  63. }
  64. };
  65. worker.postMessage({ message: 'load', data: url });
  66. });
  67. });
  68. }
  69. initModalWorker();