UNPKG

@animech-public/playcanvas

Version:
2 lines (1 loc) 2.5 kB
import{path as t}from"../../../core/path.js";import{Component as s}from"../component.js";class i extends s{constructor(t,s){super(t,s),this.on("set_scripts",this.onSetScripts,this)}send(t,s){const i=Array.prototype.slice.call(arguments,2),e=this.entity.script.instances;let n;if(e&&e[t]&&(n=e[t].instance[s],n))return n.apply(e[t].instance,i)}onEnable(){this.data.areScriptsLoaded&&!this.system.preloading&&(this.data.initialized?this.system._enableScriptComponent(this):this.system._initializeScriptComponent(this),this.data.postInitialized||this.system._postInitializeScriptComponent(this))}onDisable(){this.system._disableScriptComponent(this)}onSetScripts(t,s,i){if(!this.system._inTools||this.runInTools){if(this._updateScriptAttributes(s,i))return;this.enabled&&this.system._disableScriptComponent(this),this.system._destroyScriptComponent(this),this.data.areScriptsLoaded=!1;const t=i.map((t=>t.url));if(this._loadFromCache(t))return;this._loadScripts(t)}}_updateScriptAttributes(t,s){let i=!0;if(t.length!==s.length)i=!1;else for(let e=0,n=s.length;e<n;e++)if(t[e].url!==s[e].url){i=!1;break}if(i)for(const t in this.instances)this.instances.hasOwnProperty(t)&&this.system._updateAccessors(this.entity,this.instances[t]);return i}_loadFromCache(s){const i=[],e=this.system.app._scriptPrefix||"",n=/^https?:\/\//i;for(let r=0,o=s.length;r<o;r++){let o=s[r];n.test(o)||(o=t.join(e,o));const a=this.system.app.loader.getFromCache(o,"script");if(!a)return!1;i.push(a)}for(let t=0,e=i.length;t<e;t++){const e=i[t];if(!0!==e&&(e&&this.entity.script&&!this.entity.script.instances[e._pcScriptName])){const i=new e(this.entity);this.system._preRegisterInstance(this.entity,s[t],e._pcScriptName,i)}}return this.data&&(this.data.areScriptsLoaded=!0),this.system.preloading||(this.system.onInitialize(this.entity),this.system.onPostInitialize(this.entity)),!0}_loadScripts(s){let i=s.length;const e=this.system.app._scriptPrefix||"";s.forEach((s=>{let n=null,r=null;s.toLowerCase().startsWith("http://")||s.toLowerCase().startsWith("https://")?(r=s,n=s):(r=s,n=t.join(e,s)),this.system.app.loader.load(n,"script",((t,s)=>{if(i--,t)console.error(t);else if(s&&this.entity.script&&!this.entity.script.instances[s._pcScriptName]){const t=new s(this.entity);this.system._preRegisterInstance(this.entity,r,s._pcScriptName,t)}0===i&&(this.data.areScriptsLoaded=!0,this.system.preloading||(this.system.onInitialize(this.entity),this.system.onPostInitialize(this.entity)))}))}))}}export{i as ScriptLegacyComponent};