phaser4-rex-plugins
Version:
2 lines (1 loc) • 3.04 kB
JavaScript
var n,e;n=void 0,e=function(){const n=Phaser.Loader.FILE_POPULATED,e=Phaser.Utils.String.UUID;class t extends Phaser.Loader.File{constructor(n,t){t.hasOwnProperty("type")||(t.type="await"),t.hasOwnProperty("url")||(t.url=""),t.hasOwnProperty("key")||(t.key=e()),super(n,t)}load(){if(this.state===n)this.loader.nextFile(this,!0);else{var e=this.config,t=e.callback,o=e.scope;if(t){var i=this,a=!1,r=function(){a||(setTimeout((function(){i.onLoad()}),0),a=!0)},s=function(){a||(setTimeout((function(){i.onError()}),0),a=!0)};o?t.call(o,r,s):t(r,s)}else this.onLoad()}}onLoad(){this.loader.nextFile(this,!0)}onError(){this.loader.nextFile(this,!1)}}var o=function(n){return new Promise((function(e,t){!function(n,e){for(var t=document.getElementsByTagName("script"),o=0,i=t.length;o<i;o++)if(-1!=t[o].src.indexOf(n))return void(e&&e());var a=document.createElement("script");a.setAttribute("src",n),e&&(a.onload=e),document.head.appendChild(a)}(n,e)}))},i=0,a=function(n){i=n},r=function(){return 0===i};class s extends t{constructor(n,e){void 0===e&&(e="https://unpkg.com/comlink/dist/umd/comlink.js"),r&&a(1),super(n,{type:"comlink",key:"comlink",config:{callback:function(n,t){window.Comlink?(a(2),n()):o(e).then((function(){a(2),n()}))}}})}}const c=Phaser.Utils.Objects.GetFastValue,l=function(n){var e=this;if(r())if(window.Comlink)a(2);else{var t=c(n,"comlink");e.addFile(new s(e,t))}return 2===i?this.addFile(d(this,n)):e.once("filecomplete-comlink-comlink",(function(){this.addFile(d(e,n))})),this};var d=function(n,e){var o=c(e,"workerFilePath"),i=c(e,"workerCode"),a=c(e,"run"),r=c(e,"data"),s=c(e,"terminateWorker",!0),l=c(e,"onBegin"),d=c(e,"onBeforeWorker"),u=c(e,"onAfterWorker"),f=c(e,"onEnd");return new t(n,{type:"scriptTag",config:{callback:async function(n,e){var t;if(o)t=new Worker(o);else{i||(i="importScripts('https://unpkg.com/comlink/dist/umd/comlink.js');\n(() => {\n async function run(data, onBefore, onAfter) {\n var newData;\n if (onBefore) {\n newData = await onBefore(data);\n if (newData !== undefined) {\n data = newData;\n }\n }\n\n if (onAfter) {\n newData = await onAfter(data);\n if (newData !== undefined) {\n data = newData;\n }\n }\n\n return data;\n }\n Comlink.expose(run);\n})();");var c=new Blob([i],{type:"application/javascript"});t=new Worker(URL.createObjectURL(c))}var p,m=Comlink.wrap(t);d&&(d=Comlink.proxy(d)),u&&(u=Comlink.proxy(u)),l&&void 0!==(p=await l(r,m,t))&&(r=p),r=a?await m[a](r,d,u):await m(r,d,u),f&&void 0!==(p=await f(r,m,t))&&(r=p),s&&t.terminate(),r?n():e()}}})};class u extends Phaser.Plugins.BasePlugin{constructor(n){super(n),n.registerFileType("rexAwaitComlink",l)}addToScene(n){n.sys.load.rexAwaitComlink=l}}return u},"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(n="undefined"!=typeof globalThis?globalThis:n||self).rexawaitcomlinkloaderplugin=e();