import { Utils } from '../common/Utils';
import { Object3D } from './Object3D';
import { EventType } from '../const';
import { MathUtils } from '../math/MathUtils';
/**
* @class BaseModelObject3D
* The base model object 3D.
* @memberof THING
* @extends THING.Object3D
*/
class BaseModelObject3D extends Object3D {
constructor(param) {
super(param);
}
hasResource() {
return true;
}
onSetupResource(param) {
this.onSetupURL(param);
// Setup components
const components = param['components'];
const toolkit = param['toolkit'];
if (components && toolkit) {
this.onImportComponents(components, toolkit, param);
}
let dynamic = Utils.parseValue(param['dynamic'], false);
if (!dynamic) {
let node = this.app.resourceManager.parseModel(this.type, param);
this.body.setNode(node);
this.onLoadComplete();
}
}
onLoadResource(options, resolve, reject) {
let dynamic = Utils.parseValue(options['dynamic'], false);
if (!dynamic) {
if (this.hasResource()) {
let node = this.app.resourceManager.parseModel(this.type, options);
this.body.setNode(node);
resolve();
}
// Here we do not proivde any URL, so let it to be loaded state
else {
resolve();
}
}
else {
resolve();
}
}
onCreateBodyNode(type) {
return Utils.createObject('Node');
}
onCollectMesh() {
// All base model object 3D resource creation is dynamic, so skip to collect mesh when export
return false;
}
_processBodyWithoutPivot(callback) {
let pivot = this.pivot;
let isEqualPivot = MathUtils.equalsVector3(pivot, [0.5, 0.5, 0.5]);
if (!isEqualPivot) {
this.pivot = null;
}
callback(this.body);
if (!isEqualPivot) {
this.pivot = pivot;
}
}
/**
* Check whether it's BaseModelObject3D type or inherit from it.
* @type {Boolean}
* @example
* let obj = new THING.BaseModelObject3D();
* let ret = obj.isBaseModelObject3D;
* // @expect(ret == true)
*/
get isBaseModelObject3D() {
return true;
}
}
export { BaseModelObject3D }