UNPKG

@animech-public/playcanvas

Version:
2 lines (1 loc) 1.77 kB
import{EventHandler as e}from"../../core/event-handler.js";import{Color as t}from"../../core/math/color.js";import{Vec2 as o}from"../../core/math/vec2.js";import{Vec3 as n}from"../../core/math/vec3.js";import{Vec4 as r}from"../../core/math/vec4.js";class i extends e{constructor(e){super(),this.app=e,this.store={},this.schema=[]}addComponent(e,t={}){const o=new this.ComponentType(this,e),n=new this.DataType;return this.store[e.getGuid()]={entity:e,data:n},e[this.id]=o,e.c[this.id]=o,this.initializeComponentData(o,t,[]),this.fire("add",e,o),o}removeComponent(e){const t=this.store[e.getGuid()],o=e.c[this.id];o.fire("beforeremove"),this.fire("beforeremove",e,o),delete this.store[e.getGuid()],e[this.id]=void 0,delete e.c[this.id],this.fire("remove",e,t.data)}cloneComponent(e,t){const o=this.store[e.getGuid()];return this.addComponent(t,o.data)}initializeComponentData(e,t={},o){for(let n=0,r=o.length;n<r;n++){const r=o[n];let i,a;"object"==typeof r?(i=r.name,a=r.type):(i=r,a=void 0);let c=t[i];void 0!==c?(void 0!==a&&(c=s(c,a)),e[i]=c):e[i]=e.data[i]}e.enabled&&e.entity.enabled&&e.onEnable()}getPropertiesOfType(e){const t=[];return(this.schema||[]).forEach((o=>{o&&"object"==typeof o&&o.type===e&&t.push(o)})),t}destroy(){this.off()}}function s(e,i){if(!e)return e;switch(i){case"rgb":return e instanceof t?e.clone():new t(e[0],e[1],e[2]);case"rgba":return e instanceof t?e.clone():new t(e[0],e[1],e[2],e[3]);case"vec2":return e instanceof o?e.clone():new o(e[0],e[1]);case"vec3":return e instanceof n?e.clone():new n(e[0],e[1],e[2]);case"vec4":return e instanceof r?e.clone():new r(e[0],e[1],e[2],e[3]);case"boolean":case"number":case"string":case"entity":return e;default:throw new Error(`Could not convert unhandled type: ${i}`)}}export{i as ComponentSystem};