рисовательПоддерживаетИзображениеСИменемФайла = (файл) => { var форматы = поддерживаемыеРисователемФорматыИзображений(); for (var окончание in форматы) { if (файл.endsWith(окончание)) { return true; } } return false; }; // // // // поддерживаемыеРисователемФорматыИзображений = () => { return { ".png": "png", ".jpg": "jpeg", ".jpeg": "jpeg", ".gif": "gif", }; }; // // // // загрузитьРесурсыПоследовательно = (мир, функция, словарь, событие) => { var список = словарьРесурсовВСписок(словарь); function загрузить(мир, список, номер, успех, провал) { const э = список[номер]; функция( мир, э.указатель, э.файл, function(ресурс) { словарь[э.указатель][э.файл] = ресурс; успех(); }, function() { успех(); } ); } сделатьПоследовательно( мир, список, загрузить, function() { мир.уведомить(событие); } ); }; // // // // словарьРесурсовВСписок = словарь => { var список = []; for (var указатель in словарь) { for (var файл in словарь[указатель]) { список.push({ "указатель": указатель, "файл": файл, }); } } return список; }; // // // // форматИзображенияДляБазы64 = файл => { var форматы = поддерживаемыеРисователемФорматыИзображений(); for (var окончание in форматы) { if (файл.toLowerCase().endsWith(окончание)) { return форматы[окончание]; } } return null; }; // // // // загрузитьТекстуру = (мир, указатель, файл, откликУспех, откликПровал = null) => { var модуль = мир.модули.модульПоУказателю(указатель); var содержимое = модуль.содержимое[файл]; var представление = мир.база64ИзДвоичногоМассива(new Uint8Array(содержимое)); var формат = форматИзображенияДляБазы64(файл); var адрес = `data:image/${формат};base64,${представление}`; мир.текстурщик.load( адрес, function(текстура) { текстура.flipY = false; откликУспех(текстура); }, null, function(error) { var ошибка = "ОШИБКА ⚬ 错误 ⚬ ERROR: Не удалось загрузить текстуру ⚬ 无法加载纹理 ⚬ Could not load texture"; console.error(ошибка, указатель, файл); if (откликПровал) { откликПровал(); } } ); }; // // // // загрузитьПолигональнуюСетку = (мир, указатель, файл, откликУспех, откликПровал = null) => { var м = мир.модули.модульПоУказателю(указатель); var адрес = `${window.location.origin}${файл}`; THREE.Cache.enabled = true; THREE.Cache.add(адрес, м.содержимое[файл]); мир.модельер.load( адрес, function(gltf) { THREE.Cache.remove(адрес); // Вычленяем полигональную сетку. // Take polygon mesh. var успех = false; gltf.scene.traverse(function(ребёнок) { if (!успех && ребёнок.isMesh) { откликУспех(ребёнок); успех = true; } }); if (успех) { return; } var ошибка = "ОШИБКА ⚬ 错误 ⚬ ERROR: Отсутствует полигональная сетка ⚬ 不存在多边形网格 ⚬ Polygon mesh is absent"; console.error(ошибка, указатель, файл); if (откликПровал) { откликПровал(); } }, null, function(error) { var ошибка = "ОШИБКА ⚬ 错误 ⚬ ERROR: Не удалось загрузить полигональную сетку ⚬ 无法加载多边形网格 ⚬ Could not load polygon mesh"; console.error(ошибка, указатель, файл); if (откликПровал) { откликПровал(); } } ); };