@animech-public/playcanvas
Version:
PlayCanvas WebGL game engine
2 lines (1 loc) • 2.37 kB
JavaScript
import{extend as e}from"../../../core/core.js";import{Vec3 as t}from"../../../core/math/vec3.js";import{BoundingBox as a}from"../../../core/shape/bounding-box.js";import{getDefaultMaterial as o}from"../../../scene/materials/default-material.js";import{Asset as s}from"../../asset/asset.js";import{Component as l}from"../component.js";import{ComponentSystem as m}from"../system.js";import{ModelComponent as i}from"./component.js";import{ModelComponentData as r}from"./data.js";const d=["enabled"];class n extends m{constructor(e){super(e),this.id="model",this.ComponentType=i,this.DataType=r,this.schema=d,this.defaultMaterial=o(e.graphicsDevice),this.on("beforeremove",this.onRemove,this)}initializeComponentData(e,o,s){s=["material","materialAsset","asset","castShadows","receiveShadows","castShadowsLightmap","lightmapped","lightmapSizeMultiplier","type","mapping","layers","isStatic","batchGroupId"],null!==o.batchGroupId&&void 0!==o.batchGroupId||(o.batchGroupId=-1),o.layers&&o.layers.length&&(o.layers=o.layers.slice(0));for(let t=0;t<s.length;t++)o.hasOwnProperty(s[t])&&(e[s[t]]=o[s[t]]);o.aabbCenter&&o.aabbHalfExtents&&(e.customAabb=new a(new t(o.aabbCenter),new t(o.aabbHalfExtents))),super.initializeComponentData(e,o,["enabled"])}cloneComponent(t,a){const o={type:t.model.type,asset:t.model.asset,castShadows:t.model.castShadows,receiveShadows:t.model.receiveShadows,castShadowsLightmap:t.model.castShadowsLightmap,lightmapped:t.model.lightmapped,lightmapSizeMultiplier:t.model.lightmapSizeMultiplier,isStatic:t.model.isStatic,enabled:t.model.enabled,layers:t.model.layers,batchGroupId:t.model.batchGroupId,mapping:e({},t.model.mapping)};let l=t.model.materialAsset;l instanceof s||null==l||(l=this.app.assets.get(l));const m=t.model.material;m&&m!==this.defaultMaterial&&l&&m!==l.resource||(o.materialAsset=l);const i=this.addComponent(a,o);if(t.model.model&&"asset"===t.model.type&&!t.model.asset&&(i.model=t.model.model.clone(),i._clonedModel=!0),o.materialAsset||(i.material=m),t.model.model){const e=t.model.model.meshInstances,a=i.model.meshInstances;for(let t=0;t<e.length;t++)a[t].mask=e[t].mask,a[t].material=e[t].material,a[t].layer=e[t].layer,a[t].receiveShadow=e[t].receiveShadow}return t.model.customAabb&&(i.customAabb=t.model.customAabb.clone()),i}onRemove(e,t){t.onRemove()}}l._buildAccessors(i.prototype,d);export{n as ModelComponentSystem};