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. 3d模型对象的基类
* @memberof THING
* @extends THING.Object3D
* @public
*/
class BaseModelObject3D extends Object3D {
/**
* 3D模型对象基类,负责3D模型对象的基础功能实现
* @param {object} param 初始化参数
*/
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);
}
if (!this.isDynamicLoad) {
let node = this.app.resourceManager.parseModel(this.type, param);
this.body.setNode(node);
this.onLoadComplete();
}
}
onLoadRenderableResource(options, resolve, reject) {
if (this.hasResource()) {
let node = this.app.resourceManager.parseModel(this.type, this.options);
this.body.setNode(node);
}
resolve();
}
onCreateBodyNode(type) {
return Utils.createObject('Node', { app: this.app });
}
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 }