UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

59 lines (58 loc) 1.65 kB
"use strict"; import { Object3D } from "three"; import { CoreLoaderGeometry } from "../Geometry"; import { CoreBaseLoader } from "../_Base"; import { isPromise } from "../../Type"; export class BaseGeoLoader { } export class BaseLoaderHandler extends CoreBaseLoader { reset() { this._loader = void 0; } async load(options) { const loader = await this._getLoader(options); if (!loader) { console.warn("no loader", this); return; } const url = this._urlToLoad(); return new Promise(async (resolve) => { CoreLoaderGeometry.incrementInProgressLoadsCount(); await CoreLoaderGeometry.waitForMaxConcurrentLoadsQueueFreed(); loader.load( url, (object) => { CoreLoaderGeometry.decrementInProgressLoadsCount(url, object); const result = this._onLoadSuccess(object); if (isPromise(result)) { result.then((newObjects) => { resolve(newObjects); }); } else { resolve(result); } }, (progress) => { }, (event) => { var _a; CoreLoaderGeometry.decrementInProgressLoadsCount(url); const message = this._errorMessage(url, event); (_a = options.node) == null ? void 0 : _a.states.error.set(message); } ); }); } _errorMessage(url, event) { return `could not load geometry from ${url} (Error: ${event.message})`; } } export class BaseObject3DLoaderHandler extends BaseLoaderHandler { _onLoadSuccess(o) { if (o instanceof Object3D) { return [o]; } else { return []; } } }