123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- class XDecal {
- constructor(e) {
- E(this, "_id");
- E(this, "meshPath");
- E(this, "_low_model", []);
- E(this, "_mat", null);
- E(this, "scene");
- E(this, "_skinInfo");
- E(this, "sourceMatId", "");
- E(this, "loadModel", async()=>new Promise((e,t)=>{
- typeof this.meshPath == "string" ? SceneLoader.LoadAssetContainerAsync("", this.meshPath, this.scene, null, ".glb").then(r=>{
- for (let n = r.materials.length - 1; n >= 0; --n)
- r.materials[n].dispose();
- for (let n = 0; n < r.meshes.length; ++n)
- r.meshes[n].visibility = 1,
- r.meshes[n].isPickable = !0,
- r.meshes[n].checkCollisions = !1,
- "hasVertexAlpha"in r.meshes[n] && (r.meshes[n].hasVertexAlpha = !1),
- this.scene.addMesh(r.meshes[n]),
- this._low_model.push(new XStaticMesh({
- id: this._id,
- mesh: r.meshes[n],
- xtype: EMeshType.Decal,
- skinInfo: this._skinInfo
- })),
- this.toggle(!1);
- e(!0)
- }
- ).catch(r=>{
- t(new XDecalError(`[Engine] decal load model error! ${r}`))
- }
- ) : t(new XDecalError("[Engine] decal inport mesh is not string!"))
- }
- ).catch(e=>{
- new XDecalError(`[Engine] decal loadModel ${e}`)
- }
- ));
- const {id: t, scene: r, meshPath: n, skinInfo: o="default"} = e;
- this._id = t,
- this.scene = r,
- this.meshPath = n,
- this._skinInfo = o
- }
- get skinInfo() {
- return this._skinInfo
- }
- getMesh() {
- return this._low_model
- }
- getMat() {
- return this._mat
- }
- get id() {
- return this._id
- }
- toggle(e) {
- for (let t = 0; t < this._low_model.length; ++t)
- e == !0 ? this._low_model[t].show() : this._low_model[t].hide()
- }
- setMat(e) {
- this._mat = e;
- for (let t = 0; t < this._low_model.length; ++t)
- this._low_model[t].mesh.material = this._mat;
- this.toggle(!0)
- }
- changeModel(e="") {
- return e != "" && (this.meshPath = e),
- this.meshPath == "" ? (log$x.error("[Engine] changeModel Error! meshPath is empty"),
- Promise.reject(new XDecalTextureError("[Engine] changeModel Error! meshPath is empty"))) : new Promise((t,r)=>SceneLoader.LoadAssetContainerAsync("", this.meshPath, this.scene, null, ".glb").then(n=>{
- for (let a = n.materials.length - 1; a >= 0; --a)
- n.materials[a].dispose();
- const o = [];
- for (let a = 0; a < n.meshes.length; ++a)
- n.meshes[a].visibility = 0,
- n.meshes[a].isPickable = !0,
- n.meshes[a].checkCollisions = !1,
- "hasVertexAlpha"in n.meshes[a] && (n.meshes[a].hasVertexAlpha = !1),
- this._mat != null && (n.meshes[a].material = this._mat),
- this.scene.addMesh(n.meshes[a]),
- o.push(new XStaticMesh({
- id: this._id,
- mesh: n.meshes[a],
- xtype: EMeshType.Decal,
- skinInfo: this._skinInfo
- }));
- e != "" && this.cleanMesh(),
- this._low_model = o,
- this._mat != null && this.toggle(!0),
- t(this)
- }
- ).catch(n=>{
- log$x.error("[Engine] Create decal error! " + n),
- r(new XDecalError("[Engine] Create decal error! " + n))
- }
- ))
- }
- cleanMesh(e=!1, t=!1) {
- log$x.info("[Engine] Decal Model clean mesh");
- for (let r = 0; r < this._low_model.length; ++r)
- this._low_model[r].dispose(e, t)
- }
- }
|