@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
59 lines (58 loc) • 1.65 kB
JavaScript
;
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 [];
}
}
}