diff --git a/main.js b/main.js index 0cd58d4..6c31c7b 100644 --- a/main.js +++ b/main.js @@ -1,3 +1,3 @@ /*! For license information please see main.js.LICENSE.txt */ -(()=>{var t={268:(t,e,i)=>{var s;self,s=t=>(()=>{var e={"./node_modules/fast-xml-parser/src/json2xml.js":(t,e,i)=>{"use strict";const s=i("./node_modules/fast-xml-parser/src/util.js").buildOptions,r={attributeNamePrefix:"@_",attrNodeName:!1,textNodeName:"#text",ignoreAttributes:!0,cdataTagName:!1,cdataPositionChar:"\\c",format:!1,indentBy:" ",supressEmptyNode:!1,tagValueProcessor:function(t){return t},attrValueProcessor:function(t){return t}},n=["attributeNamePrefix","attrNodeName","textNodeName","ignoreAttributes","cdataTagName","cdataPositionChar","format","indentBy","supressEmptyNode","tagValueProcessor","attrValueProcessor","rootNodeName"];function o(t){this.options=s(t,r,n),this.options.ignoreAttributes||this.options.attrNodeName?this.isAttribute=function(){return!1}:(this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=p),this.options.cdataTagName?this.isCDATA=_:this.isCDATA=function(){return!1},this.replaceCDATAstr=h,this.replaceCDATAarr=l,this.processTextOrObjNode=a,this.options.format?(this.indentate=g,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine=""),this.options.supressEmptyNode?(this.buildTextNode=u,this.buildObjNode=c):(this.buildTextNode=d,this.buildObjNode=A),this.buildTextValNode=d,this.buildObjectNode=A}function a(t,e,i){const s=this.j2x(t,i+1);return void 0!==t[this.options.textNodeName]&&1===Object.keys(t).length?this.buildTextNode(s.val,e,s.attrStr,i):this.buildObjNode(s.val,e,s.attrStr,i)}function h(t,e){return t=this.options.tagValueProcessor(""+t),""===this.options.cdataPositionChar||""===t?t+"");return t+this.newLine}function A(t,e,i,s){return i&&-1===t.indexOf("<")?this.indentate(s)+"<"+e+i+">"+t+""+this.options.tagValueProcessor(t)+"1&&(t={[this.options.rootNodeName]:t}),this.j2x(t,0).val},o.prototype.j2x=function(t,e){let i="",s="";for(let r in t)if(void 0===t[r]);else if(null===t[r])s+=this.indentate(e)+"<"+r+"/"+this.tagEndChar;else if(t[r]instanceof Date)s+=this.buildTextNode(t[r],r,"",e);else if("object"!=typeof t[r]){const n=this.isAttribute(r);n?i+=" "+n+'="'+this.options.attrValueProcessor(""+t[r])+'"':this.isCDATA(r)?t[this.options.textNodeName]?s+=this.replaceCDATAstr(t[this.options.textNodeName],t[r]):s+=this.replaceCDATAstr("",t[r]):r===this.options.textNodeName?t[this.options.cdataTagName]||(s+=this.options.tagValueProcessor(""+t[r])):s+=this.buildTextNode(t[r],r,"",e)}else if(Array.isArray(t[r]))if(this.isCDATA(r))s+=this.indentate(e),t[this.options.textNodeName]?s+=this.replaceCDATAarr(t[this.options.textNodeName],t[r]):s+=this.replaceCDATAarr("",t[r]);else{const i=t[r].length;for(let n=0;n{"use strict";const s=function(t){return String.fromCharCode(t)},r={nilChar:s(176),missingChar:s(201),nilPremitive:s(175),missingPremitive:s(200),emptyChar:s(178),emptyValue:s(177),boundryChar:s(179),objStart:s(198),arrStart:s(204),arrayEnd:s(185)},n=[r.nilChar,r.nilPremitive,r.missingChar,r.missingPremitive,r.boundryChar,r.emptyChar,r.emptyValue,r.arrayEnd,r.objStart,r.arrStart],o=function(t,e,i){if("string"==typeof e)return t&&t[0]&&void 0!==t[0].val?a(t[0].val,e):a(t,e);{const n=void 0===(s=t)?r.missingChar:null===s?r.nilChar:!(s.child&&0===Object.keys(s.child).length&&(!s.attrsMap||0===Object.keys(s.attrsMap).length))||r.emptyChar;if(!0===n){let s="";if(Array.isArray(e)){s+=r.arrStart;const n=e[0],l=t.length;if("string"==typeof n)for(let e=0;e{"use strict";const s=i("./node_modules/fast-xml-parser/src/util.js"),r=function(t,e,i){const n={};if(!e.alwaysCreateTextNode&&(!t.child||s.isEmptyObject(t.child))&&(!t.attrsMap||s.isEmptyObject(t.attrsMap)))return s.isExist(t.val)?t.val:"";if(s.isExist(t.val)&&("string"!=typeof t.val||""!==t.val&&t.val!==e.cdataPositionChar)){const r=s.isTagNameInArrayMode(t.tagname,e.arrayMode,i);n[e.textNodeName]=r?[t.val]:t.val}s.merge(n,t.attrsMap,e.arrayMode);const o=Object.keys(t.child);for(let a=0;a1){n[h]=[];for(let i in t.child[h])t.child[h].hasOwnProperty(i)&&n[h].push(r(t.child[h][i],e,h))}else{const o=r(t.child[h][0],e,h),a=!0===e.arrayMode&&"object"==typeof o||s.isTagNameInArrayMode(h,e.arrayMode,i);n[h]=a?[o]:o}}return n};e.convertToJson=r},"./node_modules/fast-xml-parser/src/node2json_str.js":(t,e,i)=>{"use strict";const s=i("./node_modules/fast-xml-parser/src/util.js"),r=i("./node_modules/fast-xml-parser/src/util.js").buildOptions,n=i("./node_modules/fast-xml-parser/src/xmlstr2xmlnode.js"),o=function(t,e,i){let r="{";const n=Object.keys(t.child);for(let i=0;i1){r+='"'+s+'" : [ ';for(let i in t.child[s])r+=o(t.child[s][i],e)+" , ";r=r.substr(0,r.length-1)+" ] "}else r+='"'+s+'" : '+o(t.child[s][0],e)+" ,"}return s.merge(r,t.attrsMap),s.isEmptyObject(r)?s.isExist(t.val)?t.val:"":(s.isExist(t.val)&&("string"!=typeof t.val||""!==t.val&&t.val!==e.cdataPositionChar)&&(r+='"'+e.textNodeName+'" : '+(!0!==(a=t.val)&&!1!==a&&isNaN(a)?'"'+a+'"':a)),","===r[r.length-1]&&(r=r.substr(0,r.length-2)),r+"}");var a};e.convertToJsonString=function(t,e){return(e=r(e,n.defaultOptions,n.props)).indentBy=e.indentBy||"",o(t,e,0)}},"./node_modules/fast-xml-parser/src/parser.js":(t,e,i)=>{"use strict";const s=i("./node_modules/fast-xml-parser/src/node2json.js"),r=i("./node_modules/fast-xml-parser/src/xmlstr2xmlnode.js"),n=i("./node_modules/fast-xml-parser/src/xmlstr2xmlnode.js"),o=i("./node_modules/fast-xml-parser/src/util.js").buildOptions,a=i("./node_modules/fast-xml-parser/src/validator.js");e.parse=function(t,e={},i){if(i){!0===i&&(i={});const e=a.validate(t,i);if(!0!==e)throw Error(e.err.msg)}e.parseTrueNumberOnly&&!1!==e.parseNodeValue&&!e.numParseOptions&&(e.numParseOptions={leadingZeros:!1});let h=o(e,n.defaultOptions,n.props);const l=r.getTraversalObj(t,h);return s.convertToJson(l,h)},e.convertTonimn=i("./node_modules/fast-xml-parser/src/nimndata.js").convert2nimn,e.getTraversalObj=r.getTraversalObj,e.convertToJson=s.convertToJson,e.convertToJsonString=i("./node_modules/fast-xml-parser/src/node2json_str.js").convertToJsonString,e.validate=a.validate,e.j2xParser=i("./node_modules/fast-xml-parser/src/json2xml.js"),e.parseToNimn=function(t,i,s){return e.convertTonimn(e.getTraversalObj(t,s),i,s)}},"./node_modules/fast-xml-parser/src/util.js":(t,e)=>{"use strict";const i="[:A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*",s=new RegExp("^"+i+"$");e.isExist=function(t){return void 0!==t},e.isEmptyObject=function(t){return 0===Object.keys(t).length},e.merge=function(t,e,i){if(e){const s=Object.keys(e),r=s.length;for(let n=0;n{"use strict";const s=i("./node_modules/fast-xml-parser/src/util.js"),r={allowBooleanAttributes:!1},n=["allowBooleanAttributes"];function o(t,e){const i=e;for(;e5&&"xml"===s)return d("InvalidXml","XML declaration allowed only at the start of the document.",g(t,e));if("?"==t[e]&&">"==t[e+1]){e++;break}}return e}function a(t,e){if(t.length>e+5&&"-"===t[e+1]&&"-"===t[e+2]){for(e+=3;e"===t[e+2]){e+=2;break}}else if(t.length>e+8&&"D"===t[e+1]&&"O"===t[e+2]&&"C"===t[e+3]&&"T"===t[e+4]&&"Y"===t[e+5]&&"P"===t[e+6]&&"E"===t[e+7]){let i=1;for(e+=8;e"===t[e]&&(i--,0===i))break}else if(t.length>e+9&&"["===t[e+1]&&"C"===t[e+2]&&"D"===t[e+3]&&"A"===t[e+4]&&"T"===t[e+5]&&"A"===t[e+6]&&"["===t[e+7])for(e+=8;e"===t[e+2]){e+=2;break}return e}function h(t,e){let i="",s="",r=!1;for(;e"===t[e]&&""===s){r=!0;break}i+=t[e]}return""===s&&{value:i,index:e,tagClosed:r}}e.validate=function(t,e){e=s.buildOptions(e,r,n);const i=[];let l=!1,u=!1;"\ufeff"===t[0]&&(t=t.substr(1));for(let r=0;r"!==t[r]&&" "!==t[r]&&"\t"!==t[r]&&"\n"!==t[r]&&"\r"!==t[r];r++)f+=t[r];if(f=f.trim(),"/"===f[f.length-1]&&(f=f.substring(0,f.length-1),r--),p=f,!s.isName(p)){let e;return e=0===f.trim().length?"Invalid space after '<'.":"Tag '"+f+"' is an invalid name.",d("InvalidTag",e,g(t,r))}const m=h(t,r);if(!1===m)return d("InvalidAttr","Attributes for '"+f+"' have open quote.",g(t,r));let C=m.value;if(r=m.index,"/"===C[C.length-1]){const i=r-C.length;C=C.substring(0,C.length-1);const s=A(C,e);if(!0!==s)return d(s.err.code,s.err.msg,g(t,i+s.err.line));l=!0}else if(_){if(!m.tagClosed)return d("InvalidTag","Closing tag '"+f+"' doesn't have proper closing.",g(t,r));if(C.trim().length>0)return d("InvalidTag","Closing tag '"+f+"' can't have attributes or invalid starting.",g(t,n));{const e=i.pop();if(f!==e.tagName){let i=g(t,e.tagStartPos);return d("InvalidTag","Expected closing tag '"+e.tagName+"' (opened in line "+i.line+", col "+i.col+") instead of closing tag '"+f+"'.",g(t,n))}0==i.length&&(u=!0)}}else{const s=A(C,e);if(!0!==s)return d(s.err.code,s.err.msg,g(t,r-C.length+s.err.line));if(!0===u)return d("InvalidXml","Multiple possible root nodes found.",g(t,r));i.push({tagName:f,tagStartPos:n}),l=!0}for(r++;r0)||d("InvalidXml","Invalid '"+JSON.stringify(i.map((t=>t.tagName)),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1}):d("InvalidXml","Start tag expected.",1)};const l=new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");function A(t,e){const i=s.getAllMatches(t,l),r={};for(let t=0;t{"use strict";t.exports=function(t,e,i){this.tagname=t,this.parent=e,this.child={},this.attrsMap={},this.val=i,this.addChild=function(t){Array.isArray(this.child[t.tagname])?this.child[t.tagname].push(t):this.child[t.tagname]=[t]}}},"./node_modules/fast-xml-parser/src/xmlstr2xmlnode.js":(t,e,i)=>{"use strict";const s=i("./node_modules/fast-xml-parser/src/util.js"),r=i("./node_modules/fast-xml-parser/src/util.js").buildOptions,n=i("./node_modules/fast-xml-parser/src/xmlNode.js"),o=i("./node_modules/strnum/strnum.js");"<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\/)(NAME)\\s*>))([^<]*)".replace(/NAME/g,s.nameRegexp),!Number.parseInt&&window.parseInt&&(Number.parseInt=window.parseInt),!Number.parseFloat&&window.parseFloat&&(Number.parseFloat=window.parseFloat);const a={attributeNamePrefix:"@_",attrNodeName:!1,textNodeName:"#text",ignoreAttributes:!0,ignoreNameSpace:!1,allowBooleanAttributes:!1,parseNodeValue:!0,parseAttributeValue:!1,arrayMode:!1,trimValues:!0,cdataTagName:!1,cdataPositionChar:"\\c",numParseOptions:{hex:!0,leadingZeros:!0},tagValueProcessor:function(t,e){return t},attrValueProcessor:function(t,e){return t},stopNodes:[],alwaysCreateTextNode:!1};e.defaultOptions=a;const h=["attributeNamePrefix","attrNodeName","textNodeName","ignoreAttributes","ignoreNameSpace","allowBooleanAttributes","parseNodeValue","parseAttributeValue","arrayMode","trimValues","cdataTagName","cdataPositionChar","tagValueProcessor","attrValueProcessor","parseTrueNumberOnly","numParseOptions","stopNodes","alwaysCreateTextNode"];function l(t,e,i){return e&&(i.trimValues&&(e=e.trim()),e=c(e=i.tagValueProcessor(e,t),i.parseNodeValue,i.numParseOptions)),e}function A(t,e){if(e.ignoreNameSpace){const e=t.split(":"),i="/"===t.charAt(0)?"/":"";if("xmlns"===e[0])return"";2===e.length&&(t=i+e[1])}return t}function c(t,e,i){if(e&&"string"==typeof t){const e=t.trim();return"true"===e||"false"!==e&&o(t,i)}return s.isExist(t)?t:""}e.props=h;const d=new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])(.*?)\\3)?","g");function u(t,e){if(!e.ignoreAttributes&&"string"==typeof t){t=t.replace(/\r?\n/g," ");const i=s.getAllMatches(t,d),r=i.length,n={};for(let t=0;t"===e)return{data:s,index:r};"\t"===e&&(e=" ")}s+=e}}function p(t,e,i,s){const r=t.indexOf(e,i);if(-1===r)throw new Error(s);return r+e.length-1}e.getTraversalObj=function(t,e){t=t.replace(/\r\n?/g,"\n"),e=r(e,a,h);const i=new n("!xml");let o=i,A="";for(let i=0;i",i,"Closing Tag is not closed.");let n=t.substring(i+2,r).trim();if(e.ignoreNameSpace){const t=n.indexOf(":");-1!==t&&(n=n.substr(t+1))}o&&(o.val?o.val=s.getValue(o.val)+""+l(n,A,e):o.val=l(n,A,e)),e.stopNodes.length&&e.stopNodes.includes(o.tagname)&&(o.child=[],null==o.attrsMap&&(o.attrsMap={}),o.val=t.substr(o.startIndex+1,i-o.startIndex-1)),o=o.parent,A="",i=r}else if("?"===t[i+1])i=p(t,"?>",i,"Pi Tag is not closed.");else if("!--"===t.substr(i+1,3))i=p(t,"--\x3e",i,"Comment is not closed.");else if("!D"===t.substr(i+1,2)){const e=p(t,">",i,"DOCTYPE is not closed.");i=t.substring(i,e).indexOf("[")>=0?t.indexOf("]>",i)+1:e}else if("!["===t.substr(i+1,2)){const r=p(t,"]]>",i,"CDATA is not closed.")-2,a=t.substring(i+9,r);if(A&&(o.val=s.getValue(o.val)+""+l(o.tagname,A,e),A=""),e.cdataTagName){const t=new n(e.cdataTagName,o,a);o.addChild(t),o.val=s.getValue(o.val)+e.cdataPositionChar,a&&(t.val=a)}else o.val=(o.val||"")+(a||"");i=r+2}else{const r=g(t,i+1);let a=r.data;const h=r.index,c=a.indexOf(" ");let d=a,p=!0;if(-1!==c&&(d=a.substr(0,c).replace(/\s\s*$/,""),a=a.substr(c+1)),e.ignoreNameSpace){const t=d.indexOf(":");-1!==t&&(d=d.substr(t+1),p=d!==r.data.substr(t+1))}if(o&&A&&"!xml"!==o.tagname&&(o.val=s.getValue(o.val)+""+l(o.tagname,A,e)),a.length>0&&a.lastIndexOf("/")===a.length-1){"/"===d[d.length-1]?(d=d.substr(0,d.length-1),a=d):a=a.substr(0,a.length-1);const t=new n(d,o,"");d!==a&&(t.attrsMap=u(a,e)),o.addChild(t)}else{const t=new n(d,o);e.stopNodes.length&&e.stopNodes.includes(t.tagname)&&(t.startIndex=h),d!==a&&p&&(t.attrsMap=u(a,e)),o.addChild(t),o=t}A="",i=h}else A+=t[i];return i}},"./node_modules/pako/index.js":(t,e,i)=>{"use strict";var s={};(0,i("./node_modules/pako/lib/utils/common.js").assign)(s,i("./node_modules/pako/lib/deflate.js"),i("./node_modules/pako/lib/inflate.js"),i("./node_modules/pako/lib/zlib/constants.js")),t.exports=s},"./node_modules/pako/lib/deflate.js":(t,e,i)=>{"use strict";var s=i("./node_modules/pako/lib/zlib/deflate.js"),r=i("./node_modules/pako/lib/utils/common.js"),n=i("./node_modules/pako/lib/utils/strings.js"),o=i("./node_modules/pako/lib/zlib/messages.js"),a=i("./node_modules/pako/lib/zlib/zstream.js"),h=Object.prototype.toString;function l(t){if(!(this instanceof l))return new l(t);this.options=r.assign({level:-1,method:8,chunkSize:16384,windowBits:15,memLevel:8,strategy:0,to:""},t||{});var e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new a,this.strm.avail_out=0;var i=s.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(0!==i)throw new Error(o[i]);if(e.header&&s.deflateSetHeader(this.strm,e.header),e.dictionary){var A;if(A="string"==typeof e.dictionary?n.string2buf(e.dictionary):"[object ArrayBuffer]"===h.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,0!==(i=s.deflateSetDictionary(this.strm,A)))throw new Error(o[i]);this._dict_set=!0}}function A(t,e){var i=new l(e);if(i.push(t,!0),i.err)throw i.msg||o[i.err];return i.result}l.prototype.push=function(t,e){var i,o,a=this.strm,l=this.options.chunkSize;if(this.ended)return!1;o=e===~~e?e:!0===e?4:0,"string"==typeof t?a.input=n.string2buf(t):"[object ArrayBuffer]"===h.call(t)?a.input=new Uint8Array(t):a.input=t,a.next_in=0,a.avail_in=a.input.length;do{if(0===a.avail_out&&(a.output=new r.Buf8(l),a.next_out=0,a.avail_out=l),1!==(i=s.deflate(a,o))&&0!==i)return this.onEnd(i),this.ended=!0,!1;0!==a.avail_out&&(0!==a.avail_in||4!==o&&2!==o)||("string"===this.options.to?this.onData(n.buf2binstring(r.shrinkBuf(a.output,a.next_out))):this.onData(r.shrinkBuf(a.output,a.next_out)))}while((a.avail_in>0||0===a.avail_out)&&1!==i);return 4===o?(i=s.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,0===i):2!==o||(this.onEnd(0),a.avail_out=0,!0)},l.prototype.onData=function(t){this.chunks.push(t)},l.prototype.onEnd=function(t){0===t&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=r.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},e.Deflate=l,e.deflate=A,e.deflateRaw=function(t,e){return(e=e||{}).raw=!0,A(t,e)},e.gzip=function(t,e){return(e=e||{}).gzip=!0,A(t,e)}},"./node_modules/pako/lib/inflate.js":(t,e,i)=>{"use strict";var s=i("./node_modules/pako/lib/zlib/inflate.js"),r=i("./node_modules/pako/lib/utils/common.js"),n=i("./node_modules/pako/lib/utils/strings.js"),o=i("./node_modules/pako/lib/zlib/constants.js"),a=i("./node_modules/pako/lib/zlib/messages.js"),h=i("./node_modules/pako/lib/zlib/zstream.js"),l=i("./node_modules/pako/lib/zlib/gzheader.js"),A=Object.prototype.toString;function c(t){if(!(this instanceof c))return new c(t);this.options=r.assign({chunkSize:16384,windowBits:0,to:""},t||{});var e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,0===e.windowBits&&(e.windowBits=-15)),!(e.windowBits>=0&&e.windowBits<16)||t&&t.windowBits||(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&0==(15&e.windowBits)&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new h,this.strm.avail_out=0;var i=s.inflateInit2(this.strm,e.windowBits);if(i!==o.Z_OK)throw new Error(a[i]);if(this.header=new l,s.inflateGetHeader(this.strm,this.header),e.dictionary&&("string"==typeof e.dictionary?e.dictionary=n.string2buf(e.dictionary):"[object ArrayBuffer]"===A.call(e.dictionary)&&(e.dictionary=new Uint8Array(e.dictionary)),e.raw&&(i=s.inflateSetDictionary(this.strm,e.dictionary))!==o.Z_OK))throw new Error(a[i])}function d(t,e){var i=new c(e);if(i.push(t,!0),i.err)throw i.msg||a[i.err];return i.result}c.prototype.push=function(t,e){var i,a,h,l,c,d=this.strm,u=this.options.chunkSize,g=this.options.dictionary,p=!1;if(this.ended)return!1;a=e===~~e?e:!0===e?o.Z_FINISH:o.Z_NO_FLUSH,"string"==typeof t?d.input=n.binstring2buf(t):"[object ArrayBuffer]"===A.call(t)?d.input=new Uint8Array(t):d.input=t,d.next_in=0,d.avail_in=d.input.length;do{if(0===d.avail_out&&(d.output=new r.Buf8(u),d.next_out=0,d.avail_out=u),(i=s.inflate(d,o.Z_NO_FLUSH))===o.Z_NEED_DICT&&g&&(i=s.inflateSetDictionary(this.strm,g)),i===o.Z_BUF_ERROR&&!0===p&&(i=o.Z_OK,p=!1),i!==o.Z_STREAM_END&&i!==o.Z_OK)return this.onEnd(i),this.ended=!0,!1;d.next_out&&(0!==d.avail_out&&i!==o.Z_STREAM_END&&(0!==d.avail_in||a!==o.Z_FINISH&&a!==o.Z_SYNC_FLUSH)||("string"===this.options.to?(h=n.utf8border(d.output,d.next_out),l=d.next_out-h,c=n.buf2string(d.output,h),d.next_out=l,d.avail_out=u-l,l&&r.arraySet(d.output,d.output,h,l,0),this.onData(c)):this.onData(r.shrinkBuf(d.output,d.next_out)))),0===d.avail_in&&0===d.avail_out&&(p=!0)}while((d.avail_in>0||0===d.avail_out)&&i!==o.Z_STREAM_END);return i===o.Z_STREAM_END&&(a=o.Z_FINISH),a===o.Z_FINISH?(i=s.inflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===o.Z_OK):a!==o.Z_SYNC_FLUSH||(this.onEnd(o.Z_OK),d.avail_out=0,!0)},c.prototype.onData=function(t){this.chunks.push(t)},c.prototype.onEnd=function(t){t===o.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=r.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},e.Inflate=c,e.inflate=d,e.inflateRaw=function(t,e){return(e=e||{}).raw=!0,d(t,e)},e.ungzip=d},"./node_modules/pako/lib/utils/common.js":(t,e)=>{"use strict";var i="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;function s(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.assign=function(t){for(var e=Array.prototype.slice.call(arguments,1);e.length;){var i=e.shift();if(i){if("object"!=typeof i)throw new TypeError(i+"must be non-object");for(var r in i)s(i,r)&&(t[r]=i[r])}}return t},e.shrinkBuf=function(t,e){return t.length===e?t:t.subarray?t.subarray(0,e):(t.length=e,t)};var r={arraySet:function(t,e,i,s,r){if(e.subarray&&t.subarray)t.set(e.subarray(i,i+s),r);else for(var n=0;n{"use strict";var s=i("./node_modules/pako/lib/utils/common.js"),r=!0,n=!0;try{String.fromCharCode.apply(null,[0])}catch(t){r=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){n=!1}for(var o=new s.Buf8(256),a=0;a<256;a++)o[a]=a>=252?6:a>=248?5:a>=240?4:a>=224?3:a>=192?2:1;function h(t,e){if(e<65534&&(t.subarray&&n||!t.subarray&&r))return String.fromCharCode.apply(null,s.shrinkBuf(t,e));for(var i="",o=0;o>>6,e[o++]=128|63&i):i<65536?(e[o++]=224|i>>>12,e[o++]=128|i>>>6&63,e[o++]=128|63&i):(e[o++]=240|i>>>18,e[o++]=128|i>>>12&63,e[o++]=128|i>>>6&63,e[o++]=128|63&i);return e},e.buf2binstring=function(t){return h(t,t.length)},e.binstring2buf=function(t){for(var e=new s.Buf8(t.length),i=0,r=e.length;i4)l[s++]=65533,i+=n-1;else{for(r&=2===n?31:3===n?15:7;n>1&&i1?l[s++]=65533:r<65536?l[s++]=r:(r-=65536,l[s++]=55296|r>>10&1023,l[s++]=56320|1023&r)}return h(l,s)},e.utf8border=function(t,e){var i;for((e=e||t.length)>t.length&&(e=t.length),i=e-1;i>=0&&128==(192&t[i]);)i--;return i<0||0===i?e:i+o[t[i]]>e?i:e}},"./node_modules/pako/lib/zlib/adler32.js":t=>{"use strict";t.exports=function(t,e,i,s){for(var r=65535&t|0,n=t>>>16&65535|0,o=0;0!==i;){i-=o=i>2e3?2e3:i;do{n=n+(r=r+e[s++]|0)|0}while(--o);r%=65521,n%=65521}return r|n<<16|0}},"./node_modules/pako/lib/zlib/constants.js":t=>{"use strict";t.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},"./node_modules/pako/lib/zlib/crc32.js":t=>{"use strict";var e=function(){for(var t,e=[],i=0;i<256;i++){t=i;for(var s=0;s<8;s++)t=1&t?3988292384^t>>>1:t>>>1;e[i]=t}return e}();t.exports=function(t,i,s,r){var n=e,o=r+s;t^=-1;for(var a=r;a>>8^n[255&(t^i[a])];return-1^t}},"./node_modules/pako/lib/zlib/deflate.js":(t,e,i)=>{"use strict";var s,r=i("./node_modules/pako/lib/utils/common.js"),n=i("./node_modules/pako/lib/zlib/trees.js"),o=i("./node_modules/pako/lib/zlib/adler32.js"),a=i("./node_modules/pako/lib/zlib/crc32.js"),h=i("./node_modules/pako/lib/zlib/messages.js"),l=-2,A=258,c=262,d=103,u=113,g=666;function p(t,e){return t.msg=h[e],e}function _(t){return(t<<1)-(t>4?9:0)}function f(t){for(var e=t.length;--e>=0;)t[e]=0}function m(t){var e=t.state,i=e.pending;i>t.avail_out&&(i=t.avail_out),0!==i&&(r.arraySet(t.output,e.pending_buf,e.pending_out,i,t.next_out),t.next_out+=i,e.pending_out+=i,t.total_out+=i,t.avail_out-=i,e.pending-=i,0===e.pending&&(e.pending_out=0))}function C(t,e){n._tr_flush_block(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,m(t.strm)}function y(t,e){t.pending_buf[t.pending++]=e}function I(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e}function w(t,e){var i,s,r=t.max_chain_length,n=t.strstart,o=t.prev_length,a=t.nice_match,h=t.strstart>t.w_size-c?t.strstart-(t.w_size-c):0,l=t.window,d=t.w_mask,u=t.prev,g=t.strstart+A,p=l[n+o-1],_=l[n+o];t.prev_length>=t.good_match&&(r>>=2),a>t.lookahead&&(a=t.lookahead);do{if(l[(i=e)+o]===_&&l[i+o-1]===p&&l[i]===l[n]&&l[++i]===l[n+1]){n+=2,i++;do{}while(l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&no){if(t.match_start=e,o=s,s>=a)break;p=l[n+o-1],_=l[n+o]}}}while((e=u[e&d])>h&&0!=--r);return o<=t.lookahead?o:t.lookahead}function v(t){var e,i,s,n,h,l,A,d,u,g,p=t.w_size;do{if(n=t.window_size-t.lookahead-t.strstart,t.strstart>=p+(p-c)){r.arraySet(t.window,t.window,p,p,0),t.match_start-=p,t.strstart-=p,t.block_start-=p,e=i=t.hash_size;do{s=t.head[--e],t.head[e]=s>=p?s-p:0}while(--i);e=i=p;do{s=t.prev[--e],t.prev[e]=s>=p?s-p:0}while(--i);n+=p}if(0===t.strm.avail_in)break;if(l=t.strm,A=t.window,d=t.strstart+t.lookahead,u=n,g=void 0,(g=l.avail_in)>u&&(g=u),i=0===g?0:(l.avail_in-=g,r.arraySet(A,l.input,l.next_in,g,d),1===l.state.wrap?l.adler=o(l.adler,A,g,d):2===l.state.wrap&&(l.adler=a(l.adler,A,g,d)),l.next_in+=g,l.total_in+=g,g),t.lookahead+=i,t.lookahead+t.insert>=3)for(h=t.strstart-t.insert,t.ins_h=t.window[h],t.ins_h=(t.ins_h<=3&&(t.ins_h=(t.ins_h<=3)if(s=n._tr_tally(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do{t.strstart++,t.ins_h=(t.ins_h<=3&&(t.ins_h=(t.ins_h<4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){r=t.strstart+t.lookahead-3,s=n._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=r&&(t.ins_h=(t.ins_h<15&&(a=2,s-=16),n<1||n>9||8!==i||s<8||s>15||e<0||e>9||o<0||o>4)return p(t,l);8===s&&(s=9);var h=new b;return t.state=h,h.strm=t,h.wrap=a,h.gzhead=null,h.w_bits=s,h.w_size=1<t.pending_buf_size-5&&(i=t.pending_buf_size-5);;){if(t.lookahead<=1){if(v(t),0===t.lookahead&&0===e)return 1;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;var s=t.block_start+i;if((0===t.strstart||t.strstart>=s)&&(t.lookahead=t.strstart-s,t.strstart=s,C(t,!1),0===t.strm.avail_out))return 1;if(t.strstart-t.block_start>=t.w_size-c&&(C(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,4===e?(C(t,!0),0===t.strm.avail_out?3:4):(t.strstart>t.block_start&&(C(t,!1),t.strm.avail_out),1)})),new B(4,4,8,4,x),new B(4,5,16,8,x),new B(4,6,32,32,x),new B(4,4,16,16,E),new B(8,16,32,32,E),new B(8,16,128,128,E),new B(8,32,128,256,E),new B(32,128,258,1024,E),new B(32,258,258,4096,E)],e.deflateInit=function(t,e){return D(t,e,8,15,8,0)},e.deflateInit2=D,e.deflateReset=S,e.deflateResetKeep=Q,e.deflateSetHeader=function(t,e){return t&&t.state?2!==t.state.wrap?l:(t.state.gzhead=e,0):l},e.deflate=function(t,e){var i,r,o,h;if(!t||!t.state||e>5||e<0)return t?p(t,l):l;if(r=t.state,!t.output||!t.input&&0!==t.avail_in||r.status===g&&4!==e)return p(t,0===t.avail_out?-5:l);if(r.strm=t,i=r.last_flush,r.last_flush=e,42===r.status)if(2===r.wrap)t.adler=0,y(r,31),y(r,139),y(r,8),r.gzhead?(y(r,(r.gzhead.text?1:0)+(r.gzhead.hcrc?2:0)+(r.gzhead.extra?4:0)+(r.gzhead.name?8:0)+(r.gzhead.comment?16:0)),y(r,255&r.gzhead.time),y(r,r.gzhead.time>>8&255),y(r,r.gzhead.time>>16&255),y(r,r.gzhead.time>>24&255),y(r,9===r.level?2:r.strategy>=2||r.level<2?4:0),y(r,255&r.gzhead.os),r.gzhead.extra&&r.gzhead.extra.length&&(y(r,255&r.gzhead.extra.length),y(r,r.gzhead.extra.length>>8&255)),r.gzhead.hcrc&&(t.adler=a(t.adler,r.pending_buf,r.pending,0)),r.gzindex=0,r.status=69):(y(r,0),y(r,0),y(r,0),y(r,0),y(r,0),y(r,9===r.level?2:r.strategy>=2||r.level<2?4:0),y(r,3),r.status=u);else{var c=8+(r.w_bits-8<<4)<<8;c|=(r.strategy>=2||r.level<2?0:r.level<6?1:6===r.level?2:3)<<6,0!==r.strstart&&(c|=32),c+=31-c%31,r.status=u,I(r,c),0!==r.strstart&&(I(r,t.adler>>>16),I(r,65535&t.adler)),t.adler=1}if(69===r.status)if(r.gzhead.extra){for(o=r.pending;r.gzindex<(65535&r.gzhead.extra.length)&&(r.pending!==r.pending_buf_size||(r.gzhead.hcrc&&r.pending>o&&(t.adler=a(t.adler,r.pending_buf,r.pending-o,o)),m(t),o=r.pending,r.pending!==r.pending_buf_size));)y(r,255&r.gzhead.extra[r.gzindex]),r.gzindex++;r.gzhead.hcrc&&r.pending>o&&(t.adler=a(t.adler,r.pending_buf,r.pending-o,o)),r.gzindex===r.gzhead.extra.length&&(r.gzindex=0,r.status=73)}else r.status=73;if(73===r.status)if(r.gzhead.name){o=r.pending;do{if(r.pending===r.pending_buf_size&&(r.gzhead.hcrc&&r.pending>o&&(t.adler=a(t.adler,r.pending_buf,r.pending-o,o)),m(t),o=r.pending,r.pending===r.pending_buf_size)){h=1;break}h=r.gzindexo&&(t.adler=a(t.adler,r.pending_buf,r.pending-o,o)),0===h&&(r.gzindex=0,r.status=91)}else r.status=91;if(91===r.status)if(r.gzhead.comment){o=r.pending;do{if(r.pending===r.pending_buf_size&&(r.gzhead.hcrc&&r.pending>o&&(t.adler=a(t.adler,r.pending_buf,r.pending-o,o)),m(t),o=r.pending,r.pending===r.pending_buf_size)){h=1;break}h=r.gzindexo&&(t.adler=a(t.adler,r.pending_buf,r.pending-o,o)),0===h&&(r.status=d)}else r.status=d;if(r.status===d&&(r.gzhead.hcrc?(r.pending+2>r.pending_buf_size&&m(t),r.pending+2<=r.pending_buf_size&&(y(r,255&t.adler),y(r,t.adler>>8&255),t.adler=0,r.status=u)):r.status=u),0!==r.pending){if(m(t),0===t.avail_out)return r.last_flush=-1,0}else if(0===t.avail_in&&_(e)<=_(i)&&4!==e)return p(t,-5);if(r.status===g&&0!==t.avail_in)return p(t,-5);if(0!==t.avail_in||0!==r.lookahead||0!==e&&r.status!==g){var w=2===r.strategy?function(t,e){for(var i;;){if(0===t.lookahead&&(v(t),0===t.lookahead)){if(0===e)return 1;break}if(t.match_length=0,i=n._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,i&&(C(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,4===e?(C(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(C(t,!1),0===t.strm.avail_out)?1:2}(r,e):3===r.strategy?function(t,e){for(var i,s,r,o,a=t.window;;){if(t.lookahead<=A){if(v(t),t.lookahead<=A&&0===e)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(s=a[r=t.strstart-1])===a[++r]&&s===a[++r]&&s===a[++r]){o=t.strstart+A;do{}while(s===a[++r]&&s===a[++r]&&s===a[++r]&&s===a[++r]&&s===a[++r]&&s===a[++r]&&s===a[++r]&&s===a[++r]&&rt.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(i=n._tr_tally(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(i=n._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),i&&(C(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,4===e?(C(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(C(t,!1),0===t.strm.avail_out)?1:2}(r,e):s[r.level].func(r,e);if(3!==w&&4!==w||(r.status=g),1===w||3===w)return 0===t.avail_out&&(r.last_flush=-1),0;if(2===w&&(1===e?n._tr_align(r):5!==e&&(n._tr_stored_block(r,0,0,!1),3===e&&(f(r.head),0===r.lookahead&&(r.strstart=0,r.block_start=0,r.insert=0))),m(t),0===t.avail_out))return r.last_flush=-1,0}return 4!==e?0:r.wrap<=0?1:(2===r.wrap?(y(r,255&t.adler),y(r,t.adler>>8&255),y(r,t.adler>>16&255),y(r,t.adler>>24&255),y(r,255&t.total_in),y(r,t.total_in>>8&255),y(r,t.total_in>>16&255),y(r,t.total_in>>24&255)):(I(r,t.adler>>>16),I(r,65535&t.adler)),m(t),r.wrap>0&&(r.wrap=-r.wrap),0!==r.pending?0:1)},e.deflateEnd=function(t){var e;return t&&t.state?42!==(e=t.state.status)&&69!==e&&73!==e&&91!==e&&e!==d&&e!==u&&e!==g?p(t,l):(t.state=null,e===u?p(t,-3):0):l},e.deflateSetDictionary=function(t,e){var i,s,n,a,h,A,c,d,u=e.length;if(!t||!t.state)return l;if(2===(a=(i=t.state).wrap)||1===a&&42!==i.status||i.lookahead)return l;for(1===a&&(t.adler=o(t.adler,e,u,0)),i.wrap=0,u>=i.w_size&&(0===a&&(f(i.head),i.strstart=0,i.block_start=0,i.insert=0),d=new r.Buf8(i.w_size),r.arraySet(d,e,u-i.w_size,i.w_size,0),e=d,u=i.w_size),h=t.avail_in,A=t.next_in,c=t.input,t.avail_in=u,t.next_in=0,t.input=e,v(i);i.lookahead>=3;){s=i.strstart,n=i.lookahead-2;do{i.ins_h=(i.ins_h<{"use strict";t.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},"./node_modules/pako/lib/zlib/inffast.js":t=>{"use strict";t.exports=function(t,e){var i,s,r,n,o,a,h,l,A,c,d,u,g,p,_,f,m,C,y,I,w,v,x,E,B;i=t.state,s=t.next_in,E=t.input,r=s+(t.avail_in-5),n=t.next_out,B=t.output,o=n-(e-t.avail_out),a=n+(t.avail_out-257),h=i.dmax,l=i.wsize,A=i.whave,c=i.wnext,d=i.window,u=i.hold,g=i.bits,p=i.lencode,_=i.distcode,f=(1<>>=y=C>>>24,g-=y,0==(y=C>>>16&255))B[n++]=65535&C;else{if(!(16&y)){if(0==(64&y)){C=p[(65535&C)+(u&(1<>>=y,g-=y),g<15&&(u+=E[s++]<>>=y=C>>>24,g-=y,!(16&(y=C>>>16&255))){if(0==(64&y)){C=_[(65535&C)+(u&(1<h){t.msg="invalid distance too far back",i.mode=30;break t}if(u>>>=y,g-=y,w>(y=n-o)){if((y=w-y)>A&&i.sane){t.msg="invalid distance too far back",i.mode=30;break t}if(v=0,x=d,0===c){if(v+=l-y,y2;)B[n++]=x[v++],B[n++]=x[v++],B[n++]=x[v++],I-=3;I&&(B[n++]=x[v++],I>1&&(B[n++]=x[v++]))}else{v=n-w;do{B[n++]=B[v++],B[n++]=B[v++],B[n++]=B[v++],I-=3}while(I>2);I&&(B[n++]=B[v++],I>1&&(B[n++]=B[v++]))}break}}break}}while(s>3,u&=(1<<(g-=I<<3))-1,t.next_in=s,t.next_out=n,t.avail_in=s{"use strict";var s=i("./node_modules/pako/lib/utils/common.js"),r=i("./node_modules/pako/lib/zlib/adler32.js"),n=i("./node_modules/pako/lib/zlib/crc32.js"),o=i("./node_modules/pako/lib/zlib/inffast.js"),a=i("./node_modules/pako/lib/zlib/inftrees.js"),h=-2,l=12,A=30;function c(t){return(t>>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24)}function d(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new s.Buf16(320),this.work=new s.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function u(t){var e;return t&&t.state?(e=t.state,t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=1,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new s.Buf32(852),e.distcode=e.distdyn=new s.Buf32(592),e.sane=1,e.back=-1,0):h}function g(t){var e;return t&&t.state?((e=t.state).wsize=0,e.whave=0,e.wnext=0,u(t)):h}function p(t,e){var i,s;return t&&t.state?(s=t.state,e<0?(i=0,e=-e):(i=1+(e>>4),e<48&&(e&=15)),e&&(e<8||e>15)?h:(null!==s.window&&s.wbits!==e&&(s.window=null),s.wrap=i,s.wbits=e,g(t))):h}function _(t,e){var i,s;return t?(s=new d,t.state=s,s.window=null,0!==(i=p(t,e))&&(t.state=null),i):h}var f,m,C=!0;function y(t){if(C){var e;for(f=new s.Buf32(512),m=new s.Buf32(32),e=0;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(a(1,t.lens,0,288,f,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;a(2,t.lens,0,32,m,0,t.work,{bits:5}),C=!1}t.lencode=f,t.lenbits=9,t.distcode=m,t.distbits=5}function I(t,e,i,r){var n,o=t.state;return null===o.window&&(o.wsize=1<=o.wsize?(s.arraySet(o.window,e,i-o.wsize,o.wsize,0),o.wnext=0,o.whave=o.wsize):((n=o.wsize-o.wnext)>r&&(n=r),s.arraySet(o.window,e,i-r,n,o.wnext),(r-=n)?(s.arraySet(o.window,e,i-r,r,0),o.wnext=r,o.whave=o.wsize):(o.wnext+=n,o.wnext===o.wsize&&(o.wnext=0),o.whave>>8&255,i.check=n(i.check,N,2,0),m=0,C=0,i.mode=2;break}if(i.flags=0,i.head&&(i.head.done=!1),!(1&i.wrap)||(((255&m)<<8)+(m>>8))%31){t.msg="incorrect header check",i.mode=A;break}if(8!=(15&m)){t.msg="unknown compression method",i.mode=A;break}if(C-=4,F=8+(15&(m>>>=4)),0===i.wbits)i.wbits=F;else if(F>i.wbits){t.msg="invalid window size",i.mode=A;break}i.dmax=1<>8&1),512&i.flags&&(N[0]=255&m,N[1]=m>>>8&255,i.check=n(i.check,N,2,0)),m=0,C=0,i.mode=3;case 3:for(;C<32;){if(0===_)break t;_--,m+=d[g++]<>>8&255,N[2]=m>>>16&255,N[3]=m>>>24&255,i.check=n(i.check,N,4,0)),m=0,C=0,i.mode=4;case 4:for(;C<16;){if(0===_)break t;_--,m+=d[g++]<>8),512&i.flags&&(N[0]=255&m,N[1]=m>>>8&255,i.check=n(i.check,N,2,0)),m=0,C=0,i.mode=5;case 5:if(1024&i.flags){for(;C<16;){if(0===_)break t;_--,m+=d[g++]<>>8&255,i.check=n(i.check,N,2,0)),m=0,C=0}else i.head&&(i.head.extra=null);i.mode=6;case 6:if(1024&i.flags&&((x=i.length)>_&&(x=_),x&&(i.head&&(F=i.head.extra_len-i.length,i.head.extra||(i.head.extra=new Array(i.head.extra_len)),s.arraySet(i.head.extra,d,g,x,F)),512&i.flags&&(i.check=n(i.check,d,x,g)),_-=x,g+=x,i.length-=x),i.length))break t;i.length=0,i.mode=7;case 7:if(2048&i.flags){if(0===_)break t;x=0;do{F=d[g+x++],i.head&&F&&i.length<65536&&(i.head.name+=String.fromCharCode(F))}while(F&&x<_);if(512&i.flags&&(i.check=n(i.check,d,x,g)),_-=x,g+=x,F)break t}else i.head&&(i.head.name=null);i.length=0,i.mode=8;case 8:if(4096&i.flags){if(0===_)break t;x=0;do{F=d[g+x++],i.head&&F&&i.length<65536&&(i.head.comment+=String.fromCharCode(F))}while(F&&x<_);if(512&i.flags&&(i.check=n(i.check,d,x,g)),_-=x,g+=x,F)break t}else i.head&&(i.head.comment=null);i.mode=9;case 9:if(512&i.flags){for(;C<16;){if(0===_)break t;_--,m+=d[g++]<>9&1,i.head.done=!0),t.adler=i.check=0,i.mode=l;break;case 10:for(;C<32;){if(0===_)break t;_--,m+=d[g++]<>>=7&C,C-=7&C,i.mode=27;break}for(;C<3;){if(0===_)break t;_--,m+=d[g++]<>>=1)){case 0:i.mode=14;break;case 1:if(y(i),i.mode=20,6===e){m>>>=2,C-=2;break t}break;case 2:i.mode=17;break;case 3:t.msg="invalid block type",i.mode=A}m>>>=2,C-=2;break;case 14:for(m>>>=7&C,C-=7&C;C<32;){if(0===_)break t;_--,m+=d[g++]<>>16^65535)){t.msg="invalid stored block lengths",i.mode=A;break}if(i.length=65535&m,m=0,C=0,i.mode=15,6===e)break t;case 15:i.mode=16;case 16:if(x=i.length){if(x>_&&(x=_),x>f&&(x=f),0===x)break t;s.arraySet(u,d,g,x,p),_-=x,g+=x,f-=x,p+=x,i.length-=x;break}i.mode=l;break;case 17:for(;C<14;){if(0===_)break t;_--,m+=d[g++]<>>=5,C-=5,i.ndist=1+(31&m),m>>>=5,C-=5,i.ncode=4+(15&m),m>>>=4,C-=4,i.nlen>286||i.ndist>30){t.msg="too many length or distance symbols",i.mode=A;break}i.have=0,i.mode=18;case 18:for(;i.have>>=3,C-=3}for(;i.have<19;)i.lens[G[i.have++]]=0;if(i.lencode=i.lendyn,i.lenbits=7,R={bits:i.lenbits},P=a(0,i.lens,0,19,i.lencode,0,i.work,R),i.lenbits=R.bits,P){t.msg="invalid code lengths set",i.mode=A;break}i.have=0,i.mode=19;case 19:for(;i.have>>16&255,S=65535&L,!((b=L>>>24)<=C);){if(0===_)break t;_--,m+=d[g++]<>>=b,C-=b,i.lens[i.have++]=S;else{if(16===S){for(M=b+2;C>>=b,C-=b,0===i.have){t.msg="invalid bit length repeat",i.mode=A;break}F=i.lens[i.have-1],x=3+(3&m),m>>>=2,C-=2}else if(17===S){for(M=b+3;C>>=b)),m>>>=3,C-=3}else{for(M=b+7;C>>=b)),m>>>=7,C-=7}if(i.have+x>i.nlen+i.ndist){t.msg="invalid bit length repeat",i.mode=A;break}for(;x--;)i.lens[i.have++]=F}}if(i.mode===A)break;if(0===i.lens[256]){t.msg="invalid code -- missing end-of-block",i.mode=A;break}if(i.lenbits=9,R={bits:i.lenbits},P=a(1,i.lens,0,i.nlen,i.lencode,0,i.work,R),i.lenbits=R.bits,P){t.msg="invalid literal/lengths set",i.mode=A;break}if(i.distbits=6,i.distcode=i.distdyn,R={bits:i.distbits},P=a(2,i.lens,i.nlen,i.ndist,i.distcode,0,i.work,R),i.distbits=R.bits,P){t.msg="invalid distances set",i.mode=A;break}if(i.mode=20,6===e)break t;case 20:i.mode=21;case 21:if(_>=6&&f>=258){t.next_out=p,t.avail_out=f,t.next_in=g,t.avail_in=_,i.hold=m,i.bits=C,o(t,v),p=t.next_out,u=t.output,f=t.avail_out,g=t.next_in,d=t.input,_=t.avail_in,m=i.hold,C=i.bits,i.mode===l&&(i.back=-1);break}for(i.back=0;Q=(L=i.lencode[m&(1<>>16&255,S=65535&L,!((b=L>>>24)<=C);){if(0===_)break t;_--,m+=d[g++]<>D)])>>>16&255,S=65535&L,!(D+(b=L>>>24)<=C);){if(0===_)break t;_--,m+=d[g++]<>>=D,C-=D,i.back+=D}if(m>>>=b,C-=b,i.back+=b,i.length=S,0===Q){i.mode=26;break}if(32&Q){i.back=-1,i.mode=l;break}if(64&Q){t.msg="invalid literal/length code",i.mode=A;break}i.extra=15&Q,i.mode=22;case 22:if(i.extra){for(M=i.extra;C>>=i.extra,C-=i.extra,i.back+=i.extra}i.was=i.length,i.mode=23;case 23:for(;Q=(L=i.distcode[m&(1<>>16&255,S=65535&L,!((b=L>>>24)<=C);){if(0===_)break t;_--,m+=d[g++]<>D)])>>>16&255,S=65535&L,!(D+(b=L>>>24)<=C);){if(0===_)break t;_--,m+=d[g++]<>>=D,C-=D,i.back+=D}if(m>>>=b,C-=b,i.back+=b,64&Q){t.msg="invalid distance code",i.mode=A;break}i.offset=S,i.extra=15&Q,i.mode=24;case 24:if(i.extra){for(M=i.extra;C>>=i.extra,C-=i.extra,i.back+=i.extra}if(i.offset>i.dmax){t.msg="invalid distance too far back",i.mode=A;break}i.mode=25;case 25:if(0===f)break t;if(x=v-f,i.offset>x){if((x=i.offset-x)>i.whave&&i.sane){t.msg="invalid distance too far back",i.mode=A;break}x>i.wnext?(x-=i.wnext,E=i.wsize-x):E=i.wnext-x,x>i.length&&(x=i.length),B=i.window}else B=u,E=p-i.offset,x=i.length;x>f&&(x=f),f-=x,i.length-=x;do{u[p++]=B[E++]}while(--x);0===i.length&&(i.mode=21);break;case 26:if(0===f)break t;u[p++]=i.length,f--,i.mode=21;break;case 27:if(i.wrap){for(;C<32;){if(0===_)break t;_--,m|=d[g++]<{"use strict";var s=i("./node_modules/pako/lib/utils/common.js"),r=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],n=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],o=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],a=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];t.exports=function(t,e,i,h,l,A,c,d){var u,g,p,_,f,m,C,y,I,w=d.bits,v=0,x=0,E=0,B=0,b=0,Q=0,S=0,D=0,T=0,k=0,F=null,P=0,R=new s.Buf16(16),M=new s.Buf16(16),L=null,N=0;for(v=0;v<=15;v++)R[v]=0;for(x=0;x=1&&0===R[B];B--);if(b>B&&(b=B),0===B)return l[A++]=20971520,l[A++]=20971520,d.bits=1,0;for(E=1;E0&&(0===t||1!==B))return-1;for(M[1]=0,v=1;v<15;v++)M[v+1]=M[v]+R[v];for(x=0;x852||2===t&&T>592)return 1;for(;;){C=v-S,c[x]m?(y=L[N+c[x]],I=F[P+c[x]]):(y=96,I=0),u=1<>S)+(g-=u)]=C<<24|y<<16|I|0}while(0!==g);for(u=1<>=1;if(0!==u?(k&=u-1,k+=u):k=0,x++,0==--R[v]){if(v===B)break;v=e[i+c[x]]}if(v>b&&(k&_)!==p){for(0===S&&(S=b),f+=E,D=1<<(Q=v-S);Q+S852||2===t&&T>592)return 1;l[p=k&_]=b<<24|Q<<16|f-A|0}}return 0!==k&&(l[f+k]=v-S<<24|64<<16|0),d.bits=b,0}},"./node_modules/pako/lib/zlib/messages.js":t=>{"use strict";t.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},"./node_modules/pako/lib/zlib/trees.js":(t,e,i)=>{"use strict";var s=i("./node_modules/pako/lib/utils/common.js");function r(t){for(var e=t.length;--e>=0;)t[e]=0}var n=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],o=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],a=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],h=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],l=new Array(576);r(l);var A=new Array(60);r(A);var c=new Array(512);r(c);var d=new Array(256);r(d);var u=new Array(29);r(u);var g,p,_,f=new Array(30);function m(t,e,i,s,r){this.static_tree=t,this.extra_bits=e,this.extra_base=i,this.elems=s,this.max_length=r,this.has_stree=t&&t.length}function C(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}function y(t){return t<256?c[t]:c[256+(t>>>7)]}function I(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255}function w(t,e,i){t.bi_valid>16-i?(t.bi_buf|=e<>16-t.bi_valid,t.bi_valid+=i-16):(t.bi_buf|=e<>>=1,i<<=1}while(--e>0);return i>>>1}function E(t,e,i){var s,r,n=new Array(16),o=0;for(s=1;s<=15;s++)n[s]=o=o+i[s-1]<<1;for(r=0;r<=e;r++){var a=t[2*r+1];0!==a&&(t[2*r]=x(n[a]++,a))}}function B(t){var e;for(e=0;e<286;e++)t.dyn_ltree[2*e]=0;for(e=0;e<30;e++)t.dyn_dtree[2*e]=0;for(e=0;e<19;e++)t.bl_tree[2*e]=0;t.dyn_ltree[512]=1,t.opt_len=t.static_len=0,t.last_lit=t.matches=0}function b(t){t.bi_valid>8?I(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0}function Q(t,e,i,s){var r=2*e,n=2*i;return t[r]>1;i>=1;i--)S(t,n,i);r=h;do{i=t.heap[1],t.heap[1]=t.heap[t.heap_len--],S(t,n,1),s=t.heap[1],t.heap[--t.heap_max]=i,t.heap[--t.heap_max]=s,n[2*r]=n[2*i]+n[2*s],t.depth[r]=(t.depth[i]>=t.depth[s]?t.depth[i]:t.depth[s])+1,n[2*i+1]=n[2*s+1]=r,t.heap[1]=r++,S(t,n,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],function(t,e){var i,s,r,n,o,a,h=e.dyn_tree,l=e.max_code,A=e.stat_desc.static_tree,c=e.stat_desc.has_stree,d=e.stat_desc.extra_bits,u=e.stat_desc.extra_base,g=e.stat_desc.max_length,p=0;for(n=0;n<=15;n++)t.bl_count[n]=0;for(h[2*t.heap[t.heap_max]+1]=0,i=t.heap_max+1;i<573;i++)(n=h[2*h[2*(s=t.heap[i])+1]+1]+1)>g&&(n=g,p++),h[2*s+1]=n,s>l||(t.bl_count[n]++,o=0,s>=u&&(o=d[s-u]),a=h[2*s],t.opt_len+=a*(n+o),c&&(t.static_len+=a*(A[2*s+1]+o)));if(0!==p){do{for(n=g-1;0===t.bl_count[n];)n--;t.bl_count[n]--,t.bl_count[n+1]+=2,t.bl_count[g]--,p-=2}while(p>0);for(n=g;0!==n;n--)for(s=t.bl_count[n];0!==s;)(r=t.heap[--i])>l||(h[2*r+1]!==n&&(t.opt_len+=(n-h[2*r+1])*h[2*r],h[2*r+1]=n),s--)}}(t,e),E(n,l,t.bl_count)}function k(t,e,i){var s,r,n=-1,o=e[1],a=0,h=7,l=4;for(0===o&&(h=138,l=3),e[2*(i+1)+1]=65535,s=0;s<=i;s++)r=o,o=e[2*(s+1)+1],++a>=7;s<30;s++)for(f[s]=r<<7,t=0;t<1<0?(2===t.strm.data_type&&(t.strm.data_type=function(t){var e,i=4093624447;for(e=0;e<=31;e++,i>>>=1)if(1&i&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e<256;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0}(t)),T(t,t.l_desc),T(t,t.d_desc),o=function(t){var e;for(k(t,t.dyn_ltree,t.l_desc.max_code),k(t,t.dyn_dtree,t.d_desc.max_code),T(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*h[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e}(t),r=t.opt_len+3+7>>>3,(n=t.static_len+3+7>>>3)<=r&&(r=n)):r=n=i+5,i+4<=r&&-1!==e?R(t,e,i,s):4===t.strategy||n===r?(w(t,2+(s?1:0),3),D(t,l,A)):(w(t,4+(s?1:0),3),function(t,e,i,s){var r;for(w(t,e-257,5),w(t,i-1,5),w(t,s-4,4),r=0;r>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&i,t.last_lit++,0===e?t.dyn_ltree[2*i]++:(t.matches++,e--,t.dyn_ltree[2*(d[i]+256+1)]++,t.dyn_dtree[2*y(e)]++),t.last_lit===t.lit_bufsize-1},e._tr_align=function(t){w(t,2,3),v(t,256,l),function(t){16===t.bi_valid?(I(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}(t)}},"./node_modules/pako/lib/zlib/zstream.js":t=>{"use strict";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},"./node_modules/strnum/strnum.js":t=>{const e=/^[-+]?0x[a-fA-F0-9]+$/,i=/^([\-\+])?(0*)(\.[0-9]+([eE]\-?[0-9]+)?|[0-9]+(\.[0-9]+([eE]\-?[0-9]+)?)?)$/,s={hex:!0,leadingZeros:!0,decimalPoint:"."};t.exports=function(t,r={}){if(r=Object.assign({},s,r),!t||"string"!=typeof t)return t;let n=t.trim();if(void 0!==r.skipLike&&r.skipLike.test(n))return t;if(r.hex&&e.test(n))return Number.parseInt(n,16);{const e=i.exec(n);if(e){e[1];const i=e[2],s=e[3];return e[4]||e[6],1===i.length&&"."===s[0]?Number(t):!r.leadingZeros&&i.length>0?t:Number(n)}return t}}},"./src/index.ts":(t,e,i)=>{"use strict";i.r(e),i.d(e,{FLIPPED_DIAGONALLY_FLAG:()=>o.FLIPPED_DIAGONALLY_FLAG,FLIPPED_HORIZONTALLY_FLAG:()=>o.FLIPPED_HORIZONTALLY_FLAG,FLIPPED_VERTICALLY_FLAG:()=>o.FLIPPED_VERTICALLY_FLAG,TiledEntity:()=>n.TiledEntity,TiledLayer:()=>o.TiledLayer,TiledLayerComponent:()=>A.TiledLayerComponent,TiledMap:()=>r.TiledMap,TiledMapFormat:()=>s.TiledMapFormat,TiledMapResource:()=>s.TiledMapResource,TiledObject:()=>a.TiledObject,TiledObjectComponent:()=>l.TiledObjectComponent,TiledObjectGroup:()=>a.TiledObjectGroup,TiledTileset:()=>h.TiledTileset,TiledTilesetTile:()=>h.TiledTilesetTile,getCanonicalGid:()=>o.getCanonicalGid,getProperty:()=>n.getProperty,isFlippedDiagonally:()=>o.isFlippedDiagonally,isFlippedHorizontally:()=>o.isFlippedHorizontally,isFlippedVertically:()=>o.isFlippedVertically,parseExternalJson:()=>h.parseExternalJson,parseExternalTsx:()=>h.parseExternalTsx}),i("./src/tiled-types.ts");var s=i("./src/tiled-map-resource.ts"),r=i("./src/tiled-map-parser.ts"),n=i("./src/tiled-entity.ts"),o=i("./src/tiled-layer.ts"),a=i("./src/tiled-object.ts"),h=i("./src/tiled-tileset.ts"),l=i("./src/tiled-object-component.ts"),A=i("./src/tiled-layer-component.ts");i("./src/raw-tiled-layer.ts"),i("./src/raw-tiled-map.ts"),i("./src/raw-tiled-object.ts"),i("./src/raw-tiled-text.ts"),i("./src/raw-tiled-tileset.ts"),i("./src/raw-tileset-tile.ts")},"./src/raw-tiled-layer.ts":(t,e,i)=>{"use strict";i.r(e)},"./src/raw-tiled-map.ts":(t,e,i)=>{"use strict";i.r(e)},"./src/raw-tiled-object.ts":(t,e,i)=>{"use strict";i.r(e)},"./src/raw-tiled-text.ts":(t,e,i)=>{"use strict";i.r(e)},"./src/raw-tiled-tileset.ts":(t,e,i)=>{"use strict";i.r(e)},"./src/raw-tileset-tile.ts":(t,e,i)=>{"use strict";i.r(e)},"./src/tiled-entity.ts":(t,e,i)=>{"use strict";i.r(e),i.d(e,{TiledEntity:()=>r,getProperty:()=>s});const s=(t,e)=>{if(Array.isArray(t))return null==t?void 0:t.filter((t=>{var i;return(null===(i=t.name)||void 0===i?void 0:i.toLocaleLowerCase())===e.toLocaleLowerCase()}))[0]};class r{constructor(){this.properties=[]}getProperty(t){return s(this.properties,t)}}},"./src/tiled-layer-component.ts":(t,e,i)=>{"use strict";i.r(e),i.d(e,{TiledLayerComponent:()=>r});var s=i("excalibur");class r extends s.Component{constructor(t){super(),this.layer=t,this.type="ex.tiledlayer"}}},"./src/tiled-layer.ts":(t,e,i)=>{"use strict";i.r(e),i.d(e,{FLIPPED_DIAGONALLY_FLAG:()=>a,FLIPPED_HORIZONTALLY_FLAG:()=>n,FLIPPED_VERTICALLY_FLAG:()=>o,TiledLayer:()=>d,getCanonicalGid:()=>c,isFlippedDiagonally:()=>A,isFlippedHorizontally:()=>h,isFlippedVertically:()=>l});var s=i("./src/tiled-entity.ts"),r=i("excalibur");const n=2147483648,o=1073741824,a=536870912,h=t=>!!(t&n),l=t=>!!(t&o),A=t=>!!(t&a),c=t=>t&~(n|o|a);class d extends s.TiledEntity{constructor(){super(...arguments),this.offset=r.Vector.Zero,this.parallaxFactor=null,this.encoding="csv"}static parse(t){var e,i,s,n,o,a;if("tilelayer"!==t.type)throw Error("Cannot parse a non tilelayer type layer");const h=new d;return h.id=+t.id,h.name=t.name,h.data=t.data,h.offset=(0,r.vec)(null!==(e=t.offsetx)&&void 0!==e?e:0,null!==(i=t.offsety)&&void 0!==i?i:0),h.parallaxFactor=t.parallaxx||t.parallaxy?(0,r.vec)(null!==(s=t.parallaxx)&&void 0!==s?s:1,null!==(n=t.parallaxy)&&void 0!==n?n:1):null,h.width=t.width,h.height=t.height,h.encoding=null!==(o=t.encoding)&&void 0!==o?o:"csv",h.compression=t.compression,h.order=t.order,h.properties=null!==(a=t.properties)&&void 0!==a?a:[],h.rawLayer=t,h}}},"./src/tiled-map-parser.ts":(t,e,i)=>{"use strict";i.r(e),i.d(e,{TiledMap:()=>A});var s=i("./node_modules/fast-xml-parser/src/parser.js"),r=i("./node_modules/pako/index.js"),n=i("./node_modules/zstddec/dist/zstddec.modern.js"),o=i("./src/tiled-layer.ts"),a=i("./src/tiled-object.ts"),h=i("./src/tiled-tileset.ts"),l=function(t,e,i,s){return new(i||(i=Promise))((function(r,n){function o(t){try{h(s.next(t))}catch(t){n(t)}}function a(t){try{h(s.throw(t))}catch(t){n(t)}}function h(t){var e;t.done?r(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,a)}h((s=s.apply(t,e||[])).next())}))};class A{constructor(){this.layers=[],this.tileSets=[],this.objectGroups=[]}getExcaliburObjects(){return this.getObjectLayerByProperty("excalibur",!0)}getObjectLayerByName(t){return this.objectGroups.filter((e=>e.name===t))[0]}getObjectLayerByProperty(t,e){return this.objectGroups.filter((i=>{var s;return(null===(s=i.getProperty(t))||void 0===s?void 0:s.value)===e}))}getTileLayerByName(t){return this.layers.filter((e=>e.name===t))[0]}getTileLayersByProperty(t,e){return this.layers.filter((i=>{var s;return(null===(s=i.getProperty(t))||void 0===s?void 0:s.value)===e}))}static fromTmx(t){var e,i,r,n,o,a,h,c,d,u,g,p,_,f,m,C;return l(this,void 0,void 0,(function*(){const l=(t,e,i=!1)=>{t[e]?(t[e+(i?"s":"")]=Array.isArray(t[e])?t[e]:[t[e]],i&&delete t[e]):t[e+(i?"s":"")]=[]},y=s.parse(t,{attributeNamePrefix:"",textNodeName:"#text",ignoreAttributes:!1,ignoreNameSpace:!1,allowBooleanAttributes:!0,parseNodeValue:!0,parseAttributeValue:!0,trimValues:!0,parseTrueNumberOnly:!1,arrayMode:!1,stopNodes:["parse-me-as-string"]}).map;l(y,"layer",!0);for(let t of y.layers)t.type=null!==(e=t.type)&&void 0!==e?e:"tilelayer",t.encoding=t.data.encoding,t.compression=t.data.compression,"csv"===t.encoding?t.data=t.data["#text"].split(",").map((t=>+t)):t.data=t.data["#text"],t.properties=null!==(r=null===(i=t.properties)||void 0===i?void 0:i.property)&&void 0!==r?r:[],l(t,"properties");y.objectgroup=null!==(n=y.objectgroup)&&void 0!==n?n:[];let I=Array.isArray(y.objectgroup)?y.objectgroup:[y.objectgroup];for(let t of I){t.type=null!==(o=t.type)&&void 0!==o?o:"objectgroup",t.objects=Array.isArray(t.object)?t.object:[t.object],t.objects.forEach((t=>{var e,i;return t.properties=null!==(i=null===(e=t.properties)||void 0===e?void 0:e.property)&&void 0!==i?i:[]})),t.objects.forEach((t=>l(t,"properties"))),t.properties=null!==(h=null===(a=t.properties)||void 0===a?void 0:a.property)&&void 0!==h?h:[],l(t,"properties"),delete t.object;for(let e of t.objects)e.text&&(e.text.text=e.text["#text"],e.text.halign=null!==(c=e.text.halign)&&void 0!==c?c:"left",e.text.valign=null!==(d=e.text.valign)&&void 0!==d?d:"top",e.text.fontfamily=null!==(u=e.text.fontfamily)&&void 0!==u?u:"sans-serif",e.text.pixelsize=+(null!==(g=e.text.pixelsize)&&void 0!==g?g:16),e.text.kerning=!!e.text.kerning,e.text.italic=!!e.text.italic,e.text.bold=!!e.text.bold,e.text.underline=!!e.text.underline,e.text.strikeout=!!e.text.strikeout,e.text.color=null!==(p=e.text.color)&&void 0!==p?p:"#000000"),""===e.point&&(e.point=!0),""===e.ellipse&&(e.ellipse=!0),e.polyline&&(e.polyline=e.polyline.points.split(" ").map((t=>{const e=t.split(",");return{x:+e[0],y:+e[1]}}))),e.polygon&&(e.polygon=e.polygon.points.split(" ").map((t=>{const e=t.split(",");return{x:+e[0],y:+e[1]}})));y.layers.push(t)}delete y.objectgroup,l(y,"imagelayer",!0);for(let t of y.imagelayers)t.type=null!==(_=t.type)&&void 0!==_?_:"imagelayer",t.image=t.image.source,t.properties=null!==(m=null===(f=t.properties)||void 0===f?void 0:f.property)&&void 0!==m?m:[],l(t,"properties"),y.layers.push(t);delete y.imagelayer,l(y,"tileset",!0);for(let t of y.tilesets)t.source||(t.image&&(t.imagewidth=t.image.width,t.imageheight=t.image.height,t.image=t.image.source),t.objectalignment=null!==(C=t.objectalignment)&&void 0!==C?C:"unspecified",l(t,"tile",!0),t.tiles.forEach((t=>{var e;(null===(e=t.image)||void 0===e?void 0:e.source)&&(t.image=t.image.source),t.objectgroup&&(t.objectgroup.type="objectgroup",l(t.objectgroup,"object",!0))})));return yield A._fromRawTiledMap(y)}))}static fromJson(t){return l(this,void 0,void 0,(function*(){return yield A._fromRawTiledMap(t)}))}static _fromRawTiledMap(t){return l(this,void 0,void 0,(function*(){yield A._decompresslayers(t);const e=new A;e.orientation=t.orientation,e.rawMap=t,e.width=+t.width,e.height=+t.height,e.tileWidth=+t.tilewidth,e.tileHeight=+t.tileheight,c(t);for(let i of t.layers)"tilelayer"==i.type&&e.layers.push(o.TiledLayer.parse(i)),"objectgroup"==i.type&&e.objectGroups.push(a.TiledObjectGroup.parse(i));for(let i of t.tilesets)i.source||e.tileSets.push(h.TiledTileset.parse(i));return e}))}static _decompresslayers(t){var e;return l(this,void 0,void 0,(function*(){if(t.layers)for(var i of t.layers)"string"==typeof i.data?"base64"===i.encoding&&(i.data=yield d.decompressBase64(i.data,i.encoding,null!==(e=i.compression)&&void 0!==e?e:"")):i.data=d.decompressCsv(i.data);return t}))}}const c=t=>{let e=0;for(let i of t.layers)i.order=e++},d={decompressCsv:t=>t,decompressBase64:(t,e,i)=>{var s,o,a,h,l,A;if(t.length%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var c="+".charCodeAt(0),d="/".charCodeAt(0),u="0".charCodeAt(0),g="a".charCodeAt(0),p="A".charCodeAt(0),_="-".charCodeAt(0),f="_".charCodeAt(0);function m(t){var e=t.charCodeAt(0);if(e===c||e===_)return 62;if(e===d||e===f)return 63;if(e0?t.length-4:t.length;var y=0;function I(t){A[y++]=t}for(s=0,o=0;s>16),I((65280&h)>>8),I(255&h);return 2===l?I(255&(h=m(t.charAt(s))<<2|m(t.charAt(s+1))>>4)):1===l&&(I((h=m(t.charAt(s))<<10|m(t.charAt(s+1))<<4|m(t.charAt(s+2))>>2)>>8&255),I(255&h)),new Promise((t=>{const e=function(t){for(var e=0,i=t.length-1;i>=0;i--)e=256*e+1*t[i];return e};if("zlib"===i||"gzip"===i){var o=(A=(0,r.inflate)(A)).length/4,a=new Array(o);for(s=0;s{var r=(A=i.decode(A)).length/4,n=new Array(r);for(s=0;s{"use strict";i.r(e),i.d(e,{TiledMapFormat:()=>s,TiledMapResource:()=>d});var s,r=i("excalibur"),n=i("./src/tiled-map-parser.ts"),o=i("./src/tiled-tileset.ts"),a=i("./src/tiled-layer.ts"),h=i("./src/tiled-entity.ts"),l=i("./src/tiled-object-component.ts"),A=i("./src/tiled-layer-component.ts"),c=function(t,e,i,s){return new(i||(i=Promise))((function(r,n){function o(t){try{h(s.next(t))}catch(t){n(t)}}function a(t){try{h(s.throw(t))}catch(t){n(t)}}function h(t){var e;t.done?r(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,a)}h((s=s.apply(t,e||[])).next())}))};!function(t){t.TMX="TMX",t.JSON="JSON"}(s||(s={}));class d{constructor(t,e){this.path=t,this.layers=[],this.isoLayers=[],this._layerZIndexStart=-1,this._mapToRawLayer=new Map;const{mapFormatOverride:i,startingLayerZIndex:n}=Object.assign({},e);this._layerZIndexStart=null!=n?n:this._layerZIndexStart;const o=null!=i?i:t.includes(".tmx")?s.TMX:s.JSON;switch(o){case s.TMX:this._resource=new r.Resource(t,"text");break;case s.JSON:this._resource=new r.Resource(t,"json");break;default:throw`The format ${o} is not currently supported. Please export Tiled map as JSON.`}this.mapFormat=o,this.ex={},this.imageMap={},this.sheetMap={},this.tileImageMap={},this.convertPath=(t,e)=>{if(0===e.indexOf("/"))return e;const i=t.split("/"),s=e.split("/");return i[i.length-1].includes(".")&&i.pop(),i.concat(s).join("/")}}_addTiledCamera(t){const e=this.ex.camera;e&&(t.camera.x=e.x,t.camera.y=e.y,t.camera.zoom=e.zoom)}_addTiledColliders(t){var e;const i=this.ex.colliders;if(i)for(let s of i){const i=new r.Actor({pos:(0,r.vec)(s.x,s.y),name:s.name,collisionType:null!==(e=s.collisionType)&&void 0!==e?e:r.CollisionType.Fixed});s.color&&(i.color=r.Color.fromHex(s.color.value)),"box"===s.type&&i.collider.useBoxCollider(s.width,s.height,r.Vector.Zero),"circle"===s.type&&i.collider.useCircleCollider(s.radius),i.addComponent(new l.TiledObjectComponent(s.tiled)),t.add(i),s.zIndex&&(i.z=s.zIndex)}}_addTiledText(t){var e,i,s,n,o,a,h,A,c,d,u,g;const p=null===(e=this.data)||void 0===e?void 0:e.getExcaliburObjects();if(p.length>0)for(const e of p){const p=e.getText();for(const _ of p){const p=new r.Label({x:_.x,y:_.y+((null!==(i=_.height)&&void 0!==i?i:0)-(null!==(n=null===(s=_.text)||void 0===s?void 0:s.pixelSize)&&void 0!==n?n:0)),text:null!==(a=null===(o=_.text)||void 0===o?void 0:o.text)&&void 0!==a?a:"",name:this._getEntityName(_),font:new r.Font({family:null===(h=_.text)||void 0===h?void 0:h.fontFamily,size:null===(A=_.text)||void 0===A?void 0:A.pixelSize,unit:r.FontUnit.Px})});p.font.textAlign=r.TextAlign.Left,p.font.baseAlign=r.BaseAlign.Top,p.rotation=_.rotation,p.color=r.Color.fromHex(null!==(d=null===(c=_.text)||void 0===c?void 0:c.color)&&void 0!==d?d:"#000000"),p.collider.set(r.Shape.Box(null!==(u=_.width)&&void 0!==u?u:0,null!==(g=_.height)&&void 0!==g?g:0)),p.addComponent(new l.TiledObjectComponent(_)),t.add(p),p.z=this._calculateZIndex(_,e)}}}_addTiledInsertedTiles(t){var e;const i=null===(e=this.data)||void 0===e?void 0:e.getExcaliburObjects();if(i.length>0)for(const e of i){const i=e.getInsertedTiles();for(const s of i){const i=s.getProperty("collisionType");let n=r.CollisionType.PreventCollision;if(i&&(n=i.value),s.gid){const i=this.getSpriteForGid(s.gid),o=this.getCollidersForGid(s.gid),a=new r.Actor({x:s.x,y:s.y,width:s.width,height:s.height,anchor:(0,r.vec)(0,1),rotation:s.rotation,collisionType:n,name:this._getEntityName(s)});o.length&&(a.collider.clear(),a.collider.set(new r.CompositeCollider(o))),a.addComponent(new l.TiledObjectComponent(s)),a.graphics.anchor=(0,r.vec)(0,1),a.graphics.use(i),t.add(a),a.z=this._calculateZIndex(s,e)}}}}useSolidLayers(){var t,e,i;let s=this.getTileMapLayers();s=s.concat(this.isoLayers);for(const r of s){const s=this._mapToRawLayer.get(r);if(s&&null!==(e=null===(t=(0,h.getProperty)(s.properties,"solid"))||void 0===t?void 0:t.value)&&void 0!==e&&e)for(let t=0;t0){d.camera=null===(e=c.find((t=>t.getObjectByClass("camera"))))||void 0===e?void 0:e.getCamera(),d.colliders=[];for(let t of c){const e=t.getObjectsByClass("boxcollider");for(let o of e){const e=o.getProperty("collisiontype"),a=o.getProperty("color"),h=this._calculateZIndex(o,t);d.colliders.push(Object.assign(Object.assign({},o),{width:+(null!==(i=o.width)&&void 0!==i?i:0),height:+(null!==(s=o.height)&&void 0!==s?s:0),collisionType:null!==(n=null==e?void 0:e.value)&&void 0!==n?n:r.CollisionType.Fixed,color:a,zIndex:h,radius:0,type:"box",tiled:o,name:this._getEntityName(o)}))}const c=t.getObjectsByClass("circlecollider");for(let e of c){const i=e.getProperty("collisiontype"),s=e.getProperty("color"),n=this._calculateZIndex(e,t);d.colliders.push({x:e.x,y:e.y,radius:Math.max(null!==(o=e.width)&&void 0!==o?o:0,null!==(a=e.height)&&void 0!==a?a:0),collisionType:null!==(h=null==i?void 0:i.value)&&void 0!==h?h:r.CollisionType.Fixed,color:s,zIndex:n,width:null!==(l=e.width)&&void 0!==l?l:0,height:null!==(A=e.height)&&void 0!==A?A:0,type:"circle",tiled:e,name:this._getEntityName(e)})}}}this.ex=d}isLoaded(){return!!this.data}load(){return c(this,void 0,void 0,(function*(){const t=yield this._resource.load(),e=yield this._importMapData(t);let i=[];return e.rawMap.tilesets.forEach((t=>{if(t.source){const n=t.source.includes(".tsx")?"text":"json";var s=new r.Resource(this.convertPath(this.path,t.source),n);i.push(s.load().then((i=>{i="text"===n?(0,o.parseExternalTsx)(i,t.firstgid,t.source):(0,o.parseExternalJson)(i,t.firstgid,t.source),Object.assign(t,i),e.tileSets.push(i)}),(()=>{r.Logger.getInstance().error(`[Tiled] Error loading external tileset file ${s.path}`)})))}})),yield Promise.all(i).then((()=>{let t=[];return e.rawMap.tilesets.forEach((e=>{let i=[];if(e.image){i=e.source?[this.convertPath(e.source,e.image)]:[this.convertPath(this.path,e.image)];for(let s of i){const i=new r.ImageSource(s);this.imageMap[e.firstgid]=i,t.push(i.load()),r.Logger.getInstance().debug("[Tiled] Loading associated tileset image: "+e.image)}}else for(let i of e.tiles){let s;s=e.source?this.convertPath(e.source,i.image):this.convertPath(this.path,i.image);const n=new r.ImageSource(s);t.push(n.load()),this.tileImageMap[e.firstgid]||(this.tileImageMap[e.firstgid]=[]),this.tileImageMap[e.firstgid].push([i,n]),r.Logger.getInstance().debug("[Tiled] Loading associated tileset image: "+s)}})),Promise.all(t).then((()=>{this._createTileMap()}),(()=>{r.Logger.getInstance().error("[Tiled] Error loading tileset images")}))})),this._parseExcaliburInfo(),e}))}_importMapData(t){return c(this,void 0,void 0,(function*(){if(void 0===t)throw`Tiled map resource ${this.path} is empty`;switch(this.mapFormat){case s.TMX:return this.data=yield n.TiledMap.fromTmx(t);case s.JSON:return this.data=yield n.TiledMap.fromJson(t);default:throw new Error("Unknown map format: "+this.mapFormat)}}))}getTilesetForTile(t){if(this.data)for(var e=this.data.tileSets.length-1;e>=0;e--){var i=this.data.tileSets[e];if(t>=i.firstGid&&t<=i.firstGid+i.tileCount-1)return i}throw Error(`No tileset exists for tiled gid [${t}]!`)}getSpriteForGid(t){const e=(0,a.isFlippedHorizontally)(t),i=(0,a.isFlippedVertically)(t),s=(0,a.isFlippedDiagonally)(t),n=(0,a.getCanonicalGid)(t),o=this.getTilesetForTile(n),h=n-o.firstGid,l=this.sheetMap[o.firstGid.toString()];if(l){let t=l.sprites[h];return(s||e||i)&&(t=t.clone()),s&&(t.rotation=-Math.PI/2,t.scale=(0,r.vec)(-1,1)),e&&(t.scale=(0,r.vec)((s?1:-1)*t.scale.x,(s?-1:1)*t.scale.y)),i&&(t.scale=(0,r.vec)((s?-1:1)*t.scale.x,(s?1:-1)*t.scale.y)),t}throw new Error(`Could not find sprite for gid: [${t}] normalized gid: [${n}]`)}_transformPoints(t,e,i){const s=(0,a.isFlippedHorizontally)(i),r=(0,a.isFlippedVertically)(i);return(0,a.isFlippedDiagonally)(i)&&(t=t.map((t=>e.diagonalFlipTransform.multiply(t)))),s&&(t=t.map((t=>e.horizontalFlipTransform.multiply(t)))),r&&(t=t.map((t=>e.verticalFlipTransform.multiply(t)))),t}getCollidersForGid(t){const e=(0,a.getCanonicalGid)(t),i=this.getTilesetForTile(e),s=e-i.firstGid,n=i.tiles.find((t=>t.id===s));if(n&&n.objectgroup){const e=[];for(const s of n.objectgroup.getPolygons()){const n=(0,r.vec)(s.x,s.y),o=s.polygon.points.split(" ").map((t=>{const e=t.split(",");return(0,r.vec)(Number.parseFloat(e[0]),Number.parseFloat(e[1])).add(n)})),a=r.Shape.Polygon(o);a.points=this._transformPoints(a.points,i,t),e.push(a)}for(const s of n.objectgroup.getBoxes()){const n=r.Shape.Box(s.width,s.height,r.Vector.Zero);n.points=n.points.map((t=>t.add((0,r.vec)(s.x,s.y)))),n.points=this._transformPoints(n.points,i,t),e.push(n)}for(const t of n.objectgroup.getEllipses()){const i=r.Shape.Circle(Math.min(t.width/2,t.height/2),(0,r.vec)(t.width/2,t.height/2).add((0,r.vec)(t.x,t.y)));e.push(i)}return e}return[]}getAnimationForGid(t){const e=(0,a.getCanonicalGid)(t),i=this.getTilesetForTile(e),s=e-i.firstGid,r=i.tiles.find((t=>t.id===s));return r&&r.hasAnimation()?r.getAnimation(this):null}_calculateZIndex(t,e){var i,s,r;let n=null!==(s=null===(i=t.getProperty("z"))||void 0===i?void 0:i.value)&&void 0!==s?s:null===(r=t.getProperty("zindex"))||void 0===r?void 0:r.value;return null!=n||(n=e.order+this._layerZIndexStart),+n}_getEntityName(t){return t.name}_createTileMap(){var t,e,i,s,n,o,a;for(const s of this.data.rawMap.tilesets){const n=null!==(t=s.spacing)&&void 0!==t?t:0,o=Math.floor((s.imagewidth+n)/(s.tilewidth+n)),a=Math.floor((s.imageheight+n)/(s.tileheight+n));if(this.imageMap[s.firstgid]){const t=r.SpriteSheet.fromImageSource({image:this.imageMap[s.firstgid],grid:{columns:o,rows:a,spriteWidth:s.tilewidth,spriteHeight:s.tileheight},spacing:{margin:{x:null!==(e=s.spacing)&&void 0!==e?e:0,y:null!==(i=s.spacing)&&void 0!==i?i:0}}});this.sheetMap[s.firstgid.toString()]=t}else{const t=this.tileImageMap[s.firstgid].map((([t,e])=>e.toSprite())),e=new r.SpriteSheet({sprites:t});this.sheetMap[s.firstgid.toString()]=e}}for(var h of this.data.layers)if("tilelayer"===h.rawLayer.type){if("orthogonal"===this.data.orientation){const t=h.rawLayer,e=new r.TileMap({name:h.rawLayer.name,pos:(0,r.vec)(h.offset.x,h.offset.y),tileWidth:this.data.rawMap.tilewidth,tileHeight:this.data.rawMap.tileheight,columns:this.data.width,rows:this.data.height});if(e.addComponent(new A.TiledLayerComponent(h)),h.rawLayer.parallaxx||h.rawLayer.parallaxy){const t=(0,r.vec)(null!==(s=h.rawLayer.parallaxx)&&void 0!==s?s:1,null!==(n=h.rawLayer.parallaxy)&&void 0!==n?n:1);e.addComponent(new r.ParallaxComponent(t))}e.z=this._calculateZIndex(h,h);for(let i=0;i{"use strict";i.r(e),i.d(e,{TiledObjectComponent:()=>r});var s=i("excalibur");class r extends s.Component{constructor(t){super(),this.object=t,this.type="ex.tiledobject"}}},"./src/tiled-object.ts":(t,e,i)=>{"use strict";i.r(e),i.d(e,{TiledObject:()=>o,TiledObjectGroup:()=>n});var s=i("./src/tiled-entity.ts"),r=i("excalibur");class n extends s.TiledEntity{constructor(){super(...arguments),this.objects=[]}getCamera(){var t;const e=this.getObjectByClass("camera");if(e){const i=e.getProperty("zoom");return{x:e.x,y:e.y,zoom:i?+(null!==(t=null==i?void 0:i.value)&&void 0!==t?t:1):1}}}getObjectByType(t){return this.getObjectsByType(t)[0]}getObjectByClass(t){return this.getObjectsByClass(t)[0]}getObjectsByType(t){return this.objects.filter((e=>{var i;return(null===(i=e.type)||void 0===i?void 0:i.toLocaleLowerCase())===t.toLocaleLowerCase()}))}getObjectsByClass(t){return this.objects.filter((e=>{var i;return(null===(i=e.class)||void 0===i?void 0:i.toLocaleLowerCase())===t.toLocaleLowerCase()}))}getObjectByName(t){return this.getObjectsByName(t)[0]}getObjectsByName(t){return this.objects.filter((e=>{var i;return(null===(i=e.name)||void 0===i?void 0:i.toLocaleLowerCase())===t.toLocaleLowerCase()}))}getPoints(){return this.objects.filter((t=>!!t.point))}getEllipses(){return this.objects.filter((t=>!!t.ellipse))}getText(){return this.objects.filter((t=>!!t.text))}getPolyLines(){return this.objects.filter((t=>!!t.polyline))}getPolygons(){return this.objects.filter((t=>!!t.polygon))}getBoxes(){return this.objects.filter((t=>!!t.width&&!!t.height&&!t.ellipse))}getInsertedTiles(){return this.objects.filter((t=>!!t.gid))}static parse(t){var e;if("objectgroup"!==t.type)throw Error("Cannot parse non objectgroup type layer");const i=new n;i.id=+t.id,i.name=t.name,i.properties=null!==(e=t.properties)&&void 0!==e?e:[],i.rawObjectGroup=t,i.order=t.order;for(let e of t.objects)i.objects.push(o.parse(e));return i}}class o extends s.TiledEntity{static parse(t){var e,i,s,n;const a=new o;return a.id=+t.id,a.gid=t.gid,a.visible=null===(e=t.visible)||void 0===e||e,a.name=t.name,a.type=t.type,a.class=t.class,a.x=+t.x,a.y=+t.y,a.rotation=t.rotation?(0,r.toRadians)(t.rotation):0,a.width=null!==(i=t.width)&&void 0!==i?i:0,a.height=null!==(s=t.height)&&void 0!==s?s:0,a.point=t.point,a.ellipse=!0===t.ellipse||""===t.ellipse,a.polyline=t.polyline,a.polygon=t.polygon,a.rawObject=t,t.text&&(a.text=Object.assign(Object.assign({},t.text),{pixelSize:t.text.pixelsize,fontFamily:t.text.fontfamily})),a.properties=null!==(n=t.properties)&&void 0!==n?n:[],a}}},"./src/tiled-tileset.ts":(t,e,i)=>{"use strict";i.r(e),i.d(e,{TiledTileset:()=>a,TiledTilesetTile:()=>h,parseExternalJson:()=>A,parseExternalTsx:()=>l});var s=i("excalibur"),r=i("./node_modules/fast-xml-parser/src/parser.js"),n=i("./src/index.ts"),o=i("./src/tiled-entity.ts");class a{constructor(){this.tiles=[]}static parse(t){var e,i;const r=new a;let n=[];if(Array.isArray(t.tiles))n=(null!==(e=t.tiles)&&void 0!==e?e:[]).map((t=>h.parse(t,r)));else for(let e in t.tiles)n.push(h.parse(Object.assign(Object.assign({},t.tiles[e]),{id:+e}),r));return r.tiles=n,r.firstGid=t.firstgid,r.tileWidth=t.tilewidth,r.tileHeight=t.tileheight,r.tileCount=t.tilecount,r.tileOffset=t.tileoffset,r.tiledVersion=t.tiledversion,r.backgroundColor=t.backgroundcolor,r.transparentColor=t.transparentcolor,r.wangSets=t.wangsets,r.imageWidth=t.imagewidth,r.imageHeight=t.imageheight,r.objectAlignment=null!==(i=t.objectalignment)&&void 0!==i?i:"unspecified",r.image=t.image,r.spacing=isNaN(t.spacing)?0:t.spacing,r.horizontalFlipTransform=s.Matrix.identity().translate(r.tileWidth,0).scale(-1,1),r.verticalFlipTransform=s.Matrix.identity().translate(0,r.tileHeight).scale(1,-1),r.diagonalFlipTransform=s.Matrix.identity().translate(0,0).rotate(-Math.PI/2).scale(-1,1),r}}class h{hasAnimation(){return!!this.animation}getAnimation(t){var e;if(this.animation){let i=[];for(let e of this.animation)i.push({graphic:t.getSpriteForGid(e.tileid+this.tileset.firstGid),duration:e.duration});return new s.Animation({frames:i,strategy:null!==(e=this.animationStrategy)&&void 0!==e?e:s.AnimationStrategy.Loop})}return null}static parse(t,e){var i,r,a;const l=new h;if(l.id=+t.id,l.image=t.image,l.tileset=e,l.properties=Array.isArray(t.properties)?t.properties:null!==(r=null===(i=t.properties)||void 0===i?void 0:i.property)&&void 0!==r?r:[],t.objectgroup&&(l.objectgroup=n.TiledObjectGroup.parse(t.objectgroup)),t.terrain&&(l.terrain=t.terrain),t.animation&&(l.animation=Array.isArray(t.animation)?t.animation:[...t.animation.frame],l.properties)){const t=null===(a=(0,o.getProperty)(l.properties,"animationstrategy"))||void 0===a?void 0:a.value;switch(null==t?void 0:t.toLowerCase()){case s.AnimationStrategy.End.toLowerCase():l.animationStrategy=s.AnimationStrategy.End;break;case s.AnimationStrategy.Freeze.toLowerCase():l.animationStrategy=s.AnimationStrategy.Freeze;break;case s.AnimationStrategy.Loop.toLowerCase():l.animationStrategy=s.AnimationStrategy.Loop;break;case s.AnimationStrategy.PingPong.toLowerCase():l.animationStrategy=s.AnimationStrategy.PingPong;break;default:l.animationStrategy=s.AnimationStrategy.Loop}}return l}}const l=(t,e,i)=>{var n,o,a,l,A;const c=(t,e,i=!1)=>{t[e]?(t[e+(i?"s":"")]=Array.isArray(t[e])?t[e]:[t[e]],i&&delete t[e]):t[e+(i?"s":"")]=[]},d=r.parse(t,{attributeNamePrefix:"",textNodeName:"#text",ignoreAttributes:!1,ignoreNameSpace:!1,allowBooleanAttributes:!0,parseNodeValue:!0,parseAttributeValue:!0,trimValues:!0,parseTrueNumberOnly:!1,arrayMode:!1,stopNodes:["parse-me-as-string"]}).tileset,u=d;u.firstgid=e,u.source=i,u.imagewidth=null===(n=d.image)||void 0===n?void 0:n.width,u.imageheight=null===(o=d.image)||void 0===o?void 0:o.height,u.objectalignment=null!==(a=d.objectalignment)&&void 0!==a?a:"unspecified",u.image=null===(l=d.image)||void 0===l?void 0:l.source,u.spacing=isNaN(d.spacing)?0:d.spacing,c(d,"tile",!0),d.tiles.forEach((t=>{var e;(null===(e=t.image)||void 0===e?void 0:e.source)&&(t.image=t.image.source),t.objectgroup&&(t.objectgroup.type="objectgroup",c(t.objectgroup,"object",!0))})),u.tiles=d.tiles;const g=Object.assign(Object.assign({},u),{tiles:[],firstGid:u.firstgid,tileWidth:u.tilewidth,tileHeight:u.tileheight,tileCount:u.tilecount,tileOffset:u.tileoffset,tiledVersion:u.tiledversion,backgroundColor:u.backgroundcolor,transparentColor:u.transparentcolor,wangSets:u.wangsets,imageWidth:u.imagewidth,imageHeight:u.imageheight,objectAlignment:null!==(A=u.objectalignment)&&void 0!==A?A:"unspecified",image:u.image,spacing:isNaN(u.spacing)?0:u.spacing,horizontalFlipTransform:s.Matrix.identity().translate(u.tilewidth,0).scale(-1,1),verticalFlipTransform:s.Matrix.identity().translate(0,u.tileheight).scale(1,-1),diagonalFlipTransform:s.Matrix.identity().translate(u.tilewidth,u.tileheight).rotate(-Math.PI/2).scale(-1,1)});return g.tiles=u.tiles.map((t=>h.parse(t,g))),g},A=(t,e,i)=>{var r,n;let o=[];t.tiles=null!==(r=t.tiles)&&void 0!==r?r:[],(0,s.vec)(t.tilewidth/2,t.tileheight/2);const a=Object.assign(Object.assign({},t),{source:i,tiles:o,firstGid:e,tileWidth:t.tilewidth,tileHeight:t.tileheight,tileCount:t.tilecount,tileOffset:t.tileoffset,tiledVersion:t.tiledversion,backgroundColor:t.backgroundcolor,transparentColor:t.transparentcolor,wangSets:t.wangsets,imageWidth:t.imagewidth,imageHeight:t.imageheight,spacing:isNaN(t.spacing)?0:t.spacing,objectAlignment:null!==(n=t.objectalignment)&&void 0!==n?n:"unspecified",image:t.image,horizontalFlipTransform:s.Matrix.identity().translate(t.tilewidth,0).scale(-1,1),verticalFlipTransform:s.Matrix.identity().translate(0,t.tileheight).scale(1,-1),diagonalFlipTransform:s.Matrix.identity().translate(t.tilewidth,t.tileheight).rotate(-Math.PI/2).scale(-1,1)});for(let e in t.tiles)o.push(h.parse(Object.assign(Object.assign({},t.tiles[e]),{id:+e}),a));return a}},"./src/tiled-types.ts":(t,e,i)=>{"use strict";i.r(e)},"./node_modules/zstddec/dist/zstddec.modern.js":(t,e,i)=>{"use strict";let s,r,n;i.r(e),i.d(e,{ZSTDDecoder:()=>a});const o={env:{emscripten_notify_memory_growth:function(t){n=new Uint8Array(r.exports.memory.buffer)}}};class a{init(){return s||(s="undefined"!=typeof fetch?fetch("data:application/wasm;base64,"+h).then((t=>t.arrayBuffer())).then((t=>WebAssembly.instantiate(t,o))).then(this._init):WebAssembly.instantiate(Buffer.from(h,"base64"),o).then(this._init),s)}_init(t){r=t.instance,o.env.emscripten_notify_memory_growth(0)}decode(t,e=0){if(!r)throw new Error("ZSTDDecoder: Await .init() before decoding.");const i=t.byteLength,s=r.exports.malloc(i);n.set(t,s),e=e||Number(r.exports.ZSTD_findDecompressedSize(s,i));const o=r.exports.malloc(e),a=r.exports.ZSTD_decompress(o,e,s,i),h=n.slice(o,o+a);return r.exports.free(s),r.exports.free(o),h}}const h="AGFzbQEAAAABpQEVYAF/AX9gAn9/AGADf39/AX9gBX9/f39/AX9gAX8AYAJ/fwF/YAR/f39/AX9gA39/fwBgBn9/f39/fwF/YAd/f39/f39/AX9gAn9/AX5gAn5+AX5gAABgBX9/f39/AGAGf39/f39/AGAIf39/f39/f38AYAl/f39/f39/f38AYAABf2AIf39/f39/f38Bf2ANf39/f39/f39/f39/fwF/YAF/AX4CJwEDZW52H2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgABANpaAEFAAAFAgEFCwACAQABAgIFBQcAAwABDgsBAQcAEhMHAAUBDAQEAAANBwQCAgYCBAgDAwMDBgEACQkHBgICAAYGAgQUBwYGAwIGAAMCAQgBBwUGCgoEEQAEBAEIAwgDBQgDEA8IAAcABAUBcAECAgUEAQCAAgYJAX8BQaCgwAILB2AHBm1lbW9yeQIABm1hbGxvYwAoBGZyZWUAJgxaU1REX2lzRXJyb3IAaBlaU1REX2ZpbmREZWNvbXByZXNzZWRTaXplAFQPWlNURF9kZWNvbXByZXNzAEoGX3N0YXJ0ACQJBwEAQQELASQKussBaA8AIAAgACgCBCABajYCBAsZACAAKAIAIAAoAgRBH3F0QQAgAWtBH3F2CwgAIABBiH9LC34BBH9BAyEBIAAoAgQiA0EgTQRAIAAoAggiASAAKAIQTwRAIAAQDQ8LIAAoAgwiAiABRgRAQQFBAiADQSBJGw8LIAAgASABIAJrIANBA3YiBCABIARrIAJJIgEbIgJrIgQ2AgggACADIAJBA3RrNgIEIAAgBCgAADYCAAsgAQsUAQF/IAAgARACIQIgACABEAEgAgv3AQECfyACRQRAIABCADcCACAAQQA2AhAgAEIANwIIQbh/DwsgACABNgIMIAAgAUEEajYCECACQQRPBEAgACABIAJqIgFBfGoiAzYCCCAAIAMoAAA2AgAgAUF/ai0AACIBBEAgAEEIIAEQFGs2AgQgAg8LIABBADYCBEF/DwsgACABNgIIIAAgAS0AACIDNgIAIAJBfmoiBEEBTQRAIARBAWtFBEAgACABLQACQRB0IANyIgM2AgALIAAgAS0AAUEIdCADajYCAAsgASACakF/ai0AACIBRQRAIABBADYCBEFsDwsgAEEoIAEQFCACQQN0ams2AgQgAgsWACAAIAEpAAA3AAAgACABKQAINwAICy8BAX8gAUECdEGgHWooAgAgACgCAEEgIAEgACgCBGprQR9xdnEhAiAAIAEQASACCyEAIAFCz9bTvtLHq9lCfiAAfEIfiUKHla+vmLbem55/fgsdAQF/IAAoAgggACgCDEYEfyAAKAIEQSBGBUEACwuCBAEDfyACQYDAAE8EQCAAIAEgAhBnIAAPCyAAIAJqIQMCQCAAIAFzQQNxRQRAAkAgAkEBSARAIAAhAgwBCyAAQQNxRQRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADTw0BIAJBA3ENAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgA0F8aiIEIABJBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAsMACAAIAEpAAA3AAALQQECfyAAKAIIIgEgACgCEEkEQEEDDwsgACAAKAIEIgJBB3E2AgQgACABIAJBA3ZrIgE2AgggACABKAAANgIAQQALDAAgACABKAIANgAAC/cCAQJ/AkAgACABRg0AAkAgASACaiAASwRAIAAgAmoiBCABSw0BCyAAIAEgAhALDwsgACABc0EDcSEDAkACQCAAIAFJBEAgAwRAIAAhAwwDCyAAQQNxRQRAIAAhAwwCCyAAIQMDQCACRQ0EIAMgAS0AADoAACABQQFqIQEgAkF/aiECIANBAWoiA0EDcQ0ACwwBCwJAIAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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"},excalibur:e=>{"use strict";e.exports=t}},i={};function s(t){var r=i[t];if(void 0!==r)return r.exports;var n=i[t]={exports:{}};return e[t](n,n.exports,s),n.exports}return s.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return s.d(e,{a:e}),e},s.d=(t,e)=>{for(var i in e)s.o(e,i)&&!s.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},s.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),s.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},s("./src/index.ts")})(),t.exports=s(i(882))},882:(t,e,i)=>{"use strict";i.r(e),i.d(e,{ActionContext:()=>a,ActionQueue:()=>h,ActionSequence:()=>l,ActionsComponent:()=>A,ActionsSystem:()=>c,ActivateEvent:()=>d,Actor:()=>u,AddedComponent:()=>g,AddedEntity:()=>p,AffineMatrix:()=>_,Animation:()=>f,AnimationDirection:()=>m,AnimationStrategy:()=>C,ArcadeSolver:()=>y,AudioContextFactory:()=>I,Axis:()=>w,BaseAlign:()=>v,Blink:()=>x,BodyComponent:()=>E,BoundingBox:()=>B,BroadphaseStrategy:()=>b,BrowserComponent:()=>Q,BrowserEvents:()=>S,Camera:()=>D,Canvas:()=>T,Circle:()=>k,CircleCollider:()=>F,Class:()=>P,Clock:()=>R,ClosestLine:()=>M,ClosestLineJumpTable:()=>L,Collider:()=>N,ColliderComponent:()=>G,CollisionContact:()=>U,CollisionEndEvent:()=>z,CollisionGroup:()=>O,CollisionGroupManager:()=>H,CollisionJumpTable:()=>q,CollisionPostSolveEvent:()=>Y,CollisionPreSolveEvent:()=>j,CollisionResolutionStrategy:()=>V,CollisionStartEvent:()=>K,CollisionSystem:()=>J,CollisionType:()=>W,Color:()=>X,ColorBlindFlags:()=>Z,ColorBlindnessMode:()=>$,ColorBlindnessPostProcessor:()=>tt,Component:()=>et,CompositeCollider:()=>it,Configurable:()=>st,ConsoleAppender:()=>rt,ContactConstraintPoint:()=>nt,ContactEndEvent:()=>ot,ContactStartEvent:()=>at,CoordPlane:()=>ht,DeactivateEvent:()=>lt,Debug:()=>At,DebugGraphicsComponent:()=>ct,DebugSystem:()=>dt,DebugText:()=>ut,DegreeOfFreedom:()=>gt,Delay:()=>pt,Detector:()=>_t,Die:()=>ft,Direction:()=>mt,DisplayMode:()=>Ct,DynamicTree:()=>yt,DynamicTreeCollisionProcessor:()=>It,EX_VERSION:()=>wt,EaseBy:()=>vt,EaseTo:()=>xt,EasingFunctions:()=>Et,EdgeCollider:()=>Bt,ElasticToActorStrategy:()=>bt,EmitterType:()=>Qt,Engine:()=>St,EnterTriggerEvent:()=>Dt,EnterViewPortEvent:()=>Tt,Entity:()=>kt,EntityManager:()=>Ft,EventDispatcher:()=>Pt,EventTypes:()=>Rt,Events:()=>Mt,ExResponse:()=>Lt,ExcaliburGraphicsContext2DCanvas:()=>Nt,ExcaliburGraphicsContextWebGL:()=>Gt,ExcaliburWebGLContextAccessor:()=>Ut,ExitTriggerEvent:()=>zt,ExitViewPortEvent:()=>Ot,Fade:()=>Ht,Flags:()=>qt,Follow:()=>Yt,Font:()=>jt,FontStyle:()=>Vt,FontUnit:()=>Kt,FpsSampler:()=>Jt,FrameStats:()=>Wt,Future:()=>Xt,GameEvent:()=>Zt,GameStartEvent:()=>$t,GameStopEvent:()=>te,GamepadAxisEvent:()=>ee,GamepadButtonEvent:()=>ie,GamepadConnectEvent:()=>se,GamepadDisconnectEvent:()=>re,Gif:()=>ne,GlobalCoordinates:()=>oe,Graphic:()=>ae,GraphicsComponent:()=>he,GraphicsGroup:()=>le,GraphicsLayer:()=>Ae,GraphicsLayers:()=>ce,GraphicsSystem:()=>de,HiddenEvent:()=>ue,ImageFiltering:()=>ge,ImageSource:()=>pe,InitializeEvent:()=>_e,Input:()=>fe,Integrator:()=>me,IsometricEntityComponent:()=>Ce,IsometricEntitySystem:()=>ye,IsometricMap:()=>Ie,IsometricTile:()=>we,KillEvent:()=>ve,Label:()=>xe,LimitCameraBoundsStrategy:()=>Ee,Line:()=>Be,LineSegment:()=>be,Loader:()=>Qe,LockCameraToActorAxisStrategy:()=>Se,LockCameraToActorStrategy:()=>De,LogLevel:()=>Te,Logger:()=>ke,Matrix:()=>Fe,MatrixLocations:()=>Pe,MediaEvent:()=>Re,Meet:()=>Me,MotionComponent:()=>Le,MotionSystem:()=>Ne,MoveBy:()=>Ge,MoveTo:()=>Ue,NativeSoundEvent:()=>ze,NativeSoundProcessedEvent:()=>Oe,Observable:()=>He,OffscreenSystem:()=>qe,Pair:()=>Ye,ParallaxComponent:()=>je,ParallelActions:()=>Ve,ParseGif:()=>Ke,Particle:()=>Je,ParticleEmitter:()=>We,Physics:()=>Xe,PhysicsStats:()=>Ze,PointerComponent:()=>$e,PointerSystem:()=>ti,Polygon:()=>ei,PolygonCollider:()=>ii,Pool:()=>si,PostCollisionEvent:()=>ri,PostDebugDrawEvent:()=>ni,PostDrawEvent:()=>oi,PostFrameEvent:()=>ai,PostKillEvent:()=>hi,PostUpdateEvent:()=>li,PreCollisionEvent:()=>Ai,PreDebugDrawEvent:()=>ci,PreDrawEvent:()=>di,PreFrameEvent:()=>ui,PreKillEvent:()=>gi,PreUpdateEvent:()=>pi,Projection:()=>_i,QuadIndexBuffer:()=>fi,Query:()=>mi,QueryManager:()=>Ci,RadiusAroundActorStrategy:()=>yi,Random:()=>Ii,Raster:()=>wi,Ray:()=>vi,RealisticSolver:()=>xi,Rectangle:()=>Ei,RemovedComponent:()=>Bi,RemovedEntity:()=>bi,Repeat:()=>Qi,RepeatForever:()=>Si,Resolution:()=>Di,Resource:()=>Ti,RotateBy:()=>ki,RotateTo:()=>Fi,RotationType:()=>Pi,ScaleBy:()=>Ri,ScaleTo:()=>Mi,Scene:()=>Li,Screen:()=>Ni,ScreenAppender:()=>Gi,ScreenElement:()=>Ui,ScreenShader:()=>zi,ScrollPreventionMode:()=>Oi,Semaphore:()=>Hi,Shader:()=>qi,Shape:()=>Yi,Side:()=>ji,Sound:()=>Vi,Sprite:()=>Ki,SpriteFont:()=>Ji,SpriteSheet:()=>Wi,StandardClock:()=>Xi,StateMachine:()=>Zi,StrategyContainer:()=>$i,Stream:()=>ts,System:()=>es,SystemManager:()=>is,SystemType:()=>ss,TagComponent:()=>rs,TestClock:()=>ns,Text:()=>os,TextAlign:()=>as,TextureLoader:()=>hs,Tile:()=>ls,TileMap:()=>As,Timer:()=>cs,Toaster:()=>ds,Transform:()=>us,TransformComponent:()=>gs,TreeNode:()=>ps,Trigger:()=>_s,TwoPI:()=>fs,Util:()=>ms,Vector:()=>Cs,VectorView:()=>ys,VertexBuffer:()=>Is,VertexLayout:()=>ws,VisibleEvent:()=>vs,WebAudio:()=>xs,WebAudioInstance:()=>Es,World:()=>Bs,canonicalizeAngle:()=>bs,clamp:()=>Qs,createId:()=>Ss,frac:()=>Ds,hasGraphicsTick:()=>Ts,hasOnInitialize:()=>ks,hasOnPostUpdate:()=>Fs,hasOnPreUpdate:()=>Ps,hasPostDraw:()=>Rs,hasPreDraw:()=>Ms,has_initialize:()=>Ls,has_postupdate:()=>Ns,has_preupdate:()=>Gs,isAddedComponent:()=>Us,isAddedSystemEntity:()=>zs,isRemoveSystemEntity:()=>Os,isRemovedComponent:()=>Hs,isScreenElement:()=>qs,maxMessages:()=>Ys,obsolete:()=>js,pixelSnapEpsilon:()=>Vs,randomInRange:()=>Ks,randomIntInRange:()=>Js,range:()=>Ws,resetObsoleteCounter:()=>Xs,sign:()=>Zs,toDegrees:()=>$s,toRadians:()=>tr,vec:()=>er,webgl:()=>ir});var s={4662:(t,e,i)=>{i(3430);var s=i(8791);t.exports=s("Array","sort")},8343:(t,e,i)=>{i(4769);var s=i(9276);t.exports=s.Object.keys},7111:(t,e,i)=>{var s=i(6733),r=i(9821),n=TypeError;t.exports=function(t){if(s(t))return t;throw n(r(t)+" is not a function")}},1176:(t,e,i)=>{var s=i(5052),r=String,n=TypeError;t.exports=function(t){if(s(t))return t;throw n(r(t)+" is not an object")}},9540:(t,e,i)=>{var s=i(905),r=i(3231),n=i(9646),o=function(t){return function(e,i,o){var a,h=s(e),l=n(h),A=r(o,l);if(t&&i!=i){for(;l>A;)if((a=h[A++])!=a)return!0}else for(;l>A;A++)if((t||A in h)&&h[A]===i)return t||A||0;return!t&&-1}};t.exports={includes:o(!0),indexOf:o(!1)}},6038:(t,e,i)=>{var s=i(4229);t.exports=function(t,e){var i=[][t];return!!i&&s((function(){i.call(null,e||function(){return 1},1)}))}},9794:(t,e,i)=>{var s=i(3231),r=i(9646),n=i(2324),o=Array,a=Math.max;t.exports=function(t,e,i){for(var h=r(t),l=s(e,h),A=s(void 0===i?h:i,h),c=o(a(A-l,0)),d=0;l{var s=i(9794),r=Math.floor,n=function(t,e){var i=t.length,h=r(i/2);return i<8?o(t,e):a(t,n(s(t,0,h),e),n(s(t,h),e),e)},o=function(t,e){for(var i,s,r=t.length,n=1;n0;)t[s]=t[--s];s!==n++&&(t[s]=i)}return t},a=function(t,e,i,s){for(var r=e.length,n=i.length,o=0,a=0;o{var s=i(5968),r=s({}.toString),n=s("".slice);t.exports=function(t){return n(r(t),8,-1)}},1589:(t,e,i)=>{var s=i(1601),r=i(6733),n=i(7079),o=i(95)("toStringTag"),a=Object,h="Arguments"==n(function(){return arguments}());t.exports=s?n:function(t){var e,i,s;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(i=function(t,e){try{return t[e]}catch(t){}}(e=a(t),o))?i:h?n(e):"Object"==(s=n(e))&&r(e.callee)?"Arguments":s}},7081:(t,e,i)=>{var s=i(8270),r=i(4826),n=i(7933),o=i(1787);t.exports=function(t,e,i){for(var a=r(e),h=o.f,l=n.f,A=0;A{var s=i(7400),r=i(1787),n=i(5358);t.exports=s?function(t,e,i){return r.f(t,e,n(1,i))}:function(t,e,i){return t[e]=i,t}},5358:t=>{t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},2324:(t,e,i)=>{var s=i(9310),r=i(1787),n=i(5358);t.exports=function(t,e,i){var o=s(e);o in t?r.f(t,o,n(0,i)):t[o]=i}},4768:(t,e,i)=>{var s=i(6733),r=i(1787),n=i(6039),o=i(8400);t.exports=function(t,e,i,a){a||(a={});var h=a.enumerable,l=void 0!==a.name?a.name:e;if(s(i)&&n(i,l,a),a.global)h?t[e]=i:o(e,i);else{try{a.unsafe?t[e]&&(h=!0):delete t[e]}catch(t){}h?t[e]=i:r.f(t,e,{value:i,enumerable:!1,configurable:!a.nonConfigurable,writable:!a.nonWritable})}return t}},8400:(t,e,i)=>{var s=i(9859),r=Object.defineProperty;t.exports=function(t,e){try{r(s,t,{value:e,configurable:!0,writable:!0})}catch(i){s[t]=e}return e}},9563:(t,e,i)=>{var s=i(9821),r=TypeError;t.exports=function(t,e){if(!delete t[e])throw r("Cannot delete property "+s(e)+" of "+s(t))}},7400:(t,e,i)=>{var s=i(4229);t.exports=!s((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},2635:(t,e,i)=>{var s=i(9859),r=i(5052),n=s.document,o=r(n)&&r(n.createElement);t.exports=function(t){return o?n.createElement(t):{}}},2671:(t,e,i)=>{var s=i(598).match(/firefox\/(\d+)/i);t.exports=!!s&&+s[1]},8506:(t,e,i)=>{var s=i(598);t.exports=/MSIE|Trident/.test(s)},598:(t,e,i)=>{var s=i(1333);t.exports=s("navigator","userAgent")||""},6358:(t,e,i)=>{var s,r,n=i(9859),o=i(598),a=n.process,h=n.Deno,l=a&&a.versions||h&&h.version,A=l&&l.v8;A&&(r=(s=A.split("."))[0]>0&&s[0]<4?1:+(s[0]+s[1])),!r&&o&&(!(s=o.match(/Edge\/(\d+)/))||s[1]>=74)&&(s=o.match(/Chrome\/(\d+)/))&&(r=+s[1]),t.exports=r},9811:(t,e,i)=>{var s=i(598).match(/AppleWebKit\/(\d+)\./);t.exports=!!s&&+s[1]},8791:(t,e,i)=>{var s=i(9859),r=i(5968);t.exports=function(t,e){return r(s[t].prototype[e])}},3837:t=>{t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},3103:(t,e,i)=>{var s=i(9859),r=i(7933).f,n=i(5762),o=i(4768),a=i(8400),h=i(7081),l=i(6541);t.exports=function(t,e){var i,A,c,d,u,g=t.target,p=t.global,_=t.stat;if(i=p?s:_?s[g]||a(g,{}):(s[g]||{}).prototype)for(A in e){if(d=e[A],c=t.dontCallGetSet?(u=r(i,A))&&u.value:i[A],!l(p?A:g+(_?".":"#")+A,t.forced)&&void 0!==c){if(typeof d==typeof c)continue;h(d,c)}(t.sham||c&&c.sham)&&n(d,"sham",!0),o(i,A,d,t)}}},4229:t=>{t.exports=function(t){try{return!!t()}catch(t){return!0}}},7188:(t,e,i)=>{var s=i(4229);t.exports=!s((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")}))},266:(t,e,i)=>{var s=i(7188),r=Function.prototype.call;t.exports=s?r.bind(r):function(){return r.apply(r,arguments)}},1805:(t,e,i)=>{var s=i(7400),r=i(8270),n=Function.prototype,o=s&&Object.getOwnPropertyDescriptor,a=r(n,"name"),h=a&&"something"===function(){}.name,l=a&&(!s||s&&o(n,"name").configurable);t.exports={EXISTS:a,PROPER:h,CONFIGURABLE:l}},5968:(t,e,i)=>{var s=i(7188),r=Function.prototype,n=r.bind,o=r.call,a=s&&n.bind(o,o);t.exports=s?function(t){return t&&a(t)}:function(t){return t&&function(){return o.apply(t,arguments)}}},1333:(t,e,i)=>{var s=i(9859),r=i(6733);t.exports=function(t,e){return arguments.length<2?(i=s[t],r(i)?i:void 0):s[t]&&s[t][e];var i}},5300:(t,e,i)=>{var s=i(7111);t.exports=function(t,e){var i=t[e];return null==i?void 0:s(i)}},9859:(t,e,i)=>{var s=function(t){return t&&t.Math==Math&&t};t.exports=s("object"==typeof globalThis&&globalThis)||s("object"==typeof window&&window)||s("object"==typeof self&&self)||s("object"==typeof i.g&&i.g)||function(){return this}()||Function("return this")()},8270:(t,e,i)=>{var s=i(5968),r=i(2991),n=s({}.hasOwnProperty);t.exports=Object.hasOwn||function(t,e){return n(r(t),e)}},5977:t=>{t.exports={}},4394:(t,e,i)=>{var s=i(7400),r=i(4229),n=i(2635);t.exports=!s&&!r((function(){return 7!=Object.defineProperty(n("div"),"a",{get:function(){return 7}}).a}))},9337:(t,e,i)=>{var s=i(5968),r=i(4229),n=i(7079),o=Object,a=s("".split);t.exports=r((function(){return!o("z").propertyIsEnumerable(0)}))?function(t){return"String"==n(t)?a(t,""):o(t)}:o},8511:(t,e,i)=>{var s=i(5968),r=i(6733),n=i(5353),o=s(Function.toString);r(n.inspectSource)||(n.inspectSource=function(t){return o(t)}),t.exports=n.inspectSource},6407:(t,e,i)=>{var s,r,n,o=i(8694),a=i(9859),h=i(5968),l=i(5052),A=i(5762),c=i(8270),d=i(5353),u=i(4399),g=i(5977),p="Object already initialized",_=a.TypeError,f=a.WeakMap;if(o||d.state){var m=d.state||(d.state=new f),C=h(m.get),y=h(m.has),I=h(m.set);s=function(t,e){if(y(m,t))throw new _(p);return e.facade=t,I(m,t,e),e},r=function(t){return C(m,t)||{}},n=function(t){return y(m,t)}}else{var w=u("state");g[w]=!0,s=function(t,e){if(c(t,w))throw new _(p);return e.facade=t,A(t,w,e),e},r=function(t){return c(t,w)?t[w]:{}},n=function(t){return c(t,w)}}t.exports={set:s,get:r,has:n,enforce:function(t){return n(t)?r(t):s(t,{})},getterFor:function(t){return function(e){var i;if(!l(e)||(i=r(e)).type!==t)throw _("Incompatible receiver, "+t+" required");return i}}}},6733:t=>{t.exports=function(t){return"function"==typeof t}},6541:(t,e,i)=>{var s=i(4229),r=i(6733),n=/#|\.prototype\./,o=function(t,e){var i=h[a(t)];return i==A||i!=l&&(r(e)?s(e):!!e)},a=o.normalize=function(t){return String(t).replace(n,".").toLowerCase()},h=o.data={},l=o.NATIVE="N",A=o.POLYFILL="P";t.exports=o},5052:(t,e,i)=>{var s=i(6733);t.exports=function(t){return"object"==typeof t?null!==t:s(t)}},4231:t=>{t.exports=!1},9395:(t,e,i)=>{var s=i(1333),r=i(6733),n=i(1321),o=i(6969),a=Object;t.exports=o?function(t){return"symbol"==typeof t}:function(t){var e=s("Symbol");return r(e)&&n(e.prototype,a(t))}},9646:(t,e,i)=>{var s=i(4237);t.exports=function(t){return s(t.length)}},6039:(t,e,i)=>{var s=i(4229),r=i(6733),n=i(8270),o=i(7400),a=i(1805).CONFIGURABLE,h=i(8511),l=i(6407),A=l.enforce,c=l.get,d=Object.defineProperty,u=o&&!s((function(){return 8!==d((function(){}),"length",{value:8}).length})),g=String(String).split("String"),p=t.exports=function(t,e,i){"Symbol("===String(e).slice(0,7)&&(e="["+String(e).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),i&&i.getter&&(e="get "+e),i&&i.setter&&(e="set "+e),(!n(t,"name")||a&&t.name!==e)&&(o?d(t,"name",{value:e,configurable:!0}):t.name=e),u&&i&&n(i,"arity")&&t.length!==i.arity&&d(t,"length",{value:i.arity});try{i&&n(i,"constructor")&&i.constructor?o&&d(t,"prototype",{writable:!1}):t.prototype&&(t.prototype=void 0)}catch(t){}var s=A(t);return n(s,"source")||(s.source=g.join("string"==typeof e?e:"")),t};Function.prototype.toString=p((function(){return r(this)&&c(this).source||h(this)}),"toString")},917:t=>{var e=Math.ceil,i=Math.floor;t.exports=Math.trunc||function(t){var s=+t;return(s>0?i:e)(s)}},3839:(t,e,i)=>{var s=i(6358),r=i(4229);t.exports=!!Object.getOwnPropertySymbols&&!r((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&s&&s<41}))},8694:(t,e,i)=>{var s=i(9859),r=i(6733),n=i(8511),o=s.WeakMap;t.exports=r(o)&&/native code/.test(n(o))},1787:(t,e,i)=>{var s=i(7400),r=i(4394),n=i(7137),o=i(1176),a=i(9310),h=TypeError,l=Object.defineProperty,A=Object.getOwnPropertyDescriptor,c="enumerable",d="configurable",u="writable";e.f=s?n?function(t,e,i){if(o(t),e=a(e),o(i),"function"==typeof t&&"prototype"===e&&"value"in i&&u in i&&!i[u]){var s=A(t,e);s&&s[u]&&(t[e]=i.value,i={configurable:d in i?i[d]:s[d],enumerable:c in i?i[c]:s[c],writable:!1})}return l(t,e,i)}:l:function(t,e,i){if(o(t),e=a(e),o(i),r)try{return l(t,e,i)}catch(t){}if("get"in i||"set"in i)throw h("Accessors not supported");return"value"in i&&(t[e]=i.value),t}},7933:(t,e,i)=>{var s=i(7400),r=i(266),n=i(9195),o=i(5358),a=i(905),h=i(9310),l=i(8270),A=i(4394),c=Object.getOwnPropertyDescriptor;e.f=s?c:function(t,e){if(t=a(t),e=h(e),A)try{return c(t,e)}catch(t){}if(l(t,e))return o(!r(n.f,t,e),t[e])}},8151:(t,e,i)=>{var s=i(140),r=i(3837).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return s(t,r)}},894:(t,e)=>{e.f=Object.getOwnPropertySymbols},1321:(t,e,i)=>{var s=i(5968);t.exports=s({}.isPrototypeOf)},140:(t,e,i)=>{var s=i(5968),r=i(8270),n=i(905),o=i(9540).indexOf,a=i(5977),h=s([].push);t.exports=function(t,e){var i,s=n(t),l=0,A=[];for(i in s)!r(a,i)&&r(s,i)&&h(A,i);for(;e.length>l;)r(s,i=e[l++])&&(~o(A,i)||h(A,i));return A}},5632:(t,e,i)=>{var s=i(140),r=i(3837);t.exports=Object.keys||function(t){return s(t,r)}},9195:(t,e)=>{var i={}.propertyIsEnumerable,s=Object.getOwnPropertyDescriptor,r=s&&!i.call({1:2},1);e.f=r?function(t){var e=s(this,t);return!!e&&e.enumerable}:i},2914:(t,e,i)=>{var s=i(266),r=i(6733),n=i(5052),o=TypeError;t.exports=function(t,e){var i,a;if("string"===e&&r(i=t.toString)&&!n(a=s(i,t)))return a;if(r(i=t.valueOf)&&!n(a=s(i,t)))return a;if("string"!==e&&r(i=t.toString)&&!n(a=s(i,t)))return a;throw o("Can't convert object to primitive value")}},4826:(t,e,i)=>{var s=i(1333),r=i(5968),n=i(8151),o=i(894),a=i(1176),h=r([].concat);t.exports=s("Reflect","ownKeys")||function(t){var e=n.f(a(t)),i=o.f;return i?h(e,i(t)):e}},9276:(t,e,i)=>{var s=i(9859);t.exports=s},8885:t=>{var e=TypeError;t.exports=function(t){if(null==t)throw e("Can't call method on "+t);return t}},4399:(t,e,i)=>{var s=i(3036),r=i(1441),n=s("keys");t.exports=function(t){return n[t]||(n[t]=r(t))}},5353:(t,e,i)=>{var s=i(9859),r=i(8400),n="__core-js_shared__",o=s[n]||r(n,{});t.exports=o},3036:(t,e,i)=>{var s=i(4231),r=i(5353);(t.exports=function(t,e){return r[t]||(r[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.23.3",mode:s?"pure":"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.23.3/LICENSE",source:"https://github.com/zloirock/core-js"})},3231:(t,e,i)=>{var s=i(3329),r=Math.max,n=Math.min;t.exports=function(t,e){var i=s(t);return i<0?r(i+e,0):n(i,e)}},905:(t,e,i)=>{var s=i(9337),r=i(8885);t.exports=function(t){return s(r(t))}},3329:(t,e,i)=>{var s=i(917);t.exports=function(t){var e=+t;return e!=e||0===e?0:s(e)}},4237:(t,e,i)=>{var s=i(3329),r=Math.min;t.exports=function(t){return t>0?r(s(t),9007199254740991):0}},2991:(t,e,i)=>{var s=i(8885),r=Object;t.exports=function(t){return r(s(t))}},2066:(t,e,i)=>{var s=i(266),r=i(5052),n=i(9395),o=i(5300),a=i(2914),h=i(95),l=TypeError,A=h("toPrimitive");t.exports=function(t,e){if(!r(t)||n(t))return t;var i,h=o(t,A);if(h){if(void 0===e&&(e="default"),i=s(h,t,e),!r(i)||n(i))return i;throw l("Can't convert object to primitive value")}return void 0===e&&(e="number"),a(t,e)}},9310:(t,e,i)=>{var s=i(2066),r=i(9395);t.exports=function(t){var e=s(t,"string");return r(e)?e:e+""}},1601:(t,e,i)=>{var s={};s[i(95)("toStringTag")]="z",t.exports="[object z]"===String(s)},3326:(t,e,i)=>{var s=i(1589),r=String;t.exports=function(t){if("Symbol"===s(t))throw TypeError("Cannot convert a Symbol value to a string");return r(t)}},9821:t=>{var e=String;t.exports=function(t){try{return e(t)}catch(t){return"Object"}}},1441:(t,e,i)=>{var s=i(5968),r=0,n=Math.random(),o=s(1..toString);t.exports=function(t){return"Symbol("+(void 0===t?"":t)+")_"+o(++r+n,36)}},6969:(t,e,i)=>{var s=i(3839);t.exports=s&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},7137:(t,e,i)=>{var s=i(7400),r=i(4229);t.exports=s&&r((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},95:(t,e,i)=>{var s=i(9859),r=i(3036),n=i(8270),o=i(1441),a=i(3839),h=i(6969),l=r("wks"),A=s.Symbol,c=A&&A.for,d=h?A:A&&A.withoutSetter||o;t.exports=function(t){if(!n(l,t)||!a&&"string"!=typeof l[t]){var e="Symbol."+t;a&&n(A,t)?l[t]=A[t]:l[t]=h&&c?c(e):d(e)}return l[t]}},3430:(t,e,i)=>{var s=i(3103),r=i(5968),n=i(7111),o=i(2991),a=i(9646),h=i(9563),l=i(3326),A=i(4229),c=i(3867),d=i(6038),u=i(2671),g=i(8506),p=i(6358),_=i(9811),f=[],m=r(f.sort),C=r(f.push),y=A((function(){f.sort(void 0)})),I=A((function(){f.sort(null)})),w=d("sort"),v=!A((function(){if(p)return p<70;if(!(u&&u>3)){if(g)return!0;if(_)return _<603;var t,e,i,s,r="";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:i=3;break;case 68:case 71:i=4;break;default:i=2}for(s=0;s<47;s++)f.push({k:e+s,v:i})}for(f.sort((function(t,e){return e.v-t.v})),s=0;sl(i)?1:-1}}(t)),i=r.length,s=0;s{var s=i(3103),r=i(2991),n=i(5632);s({target:"Object",stat:!0,forced:i(4229)((function(){n(1)}))},{keys:function(t){return n(r(t))}})},1388:(t,e,i)=>{i.d(e,{Z:()=>a});var s=i(272),r=i.n(s),n=i(2609),o=i.n(n)()(r());o.push([t.id,"/* Buttons styles start */\r\n\r\nbutton#excalibur-play {\r\n display: inline-block;\r\n position: relative;\r\n z-index: 999;\r\n border-radius: 6px;\r\n border: none;\r\n /*border: 3px solid;\r\n border-color: white;\r\n box-shadow: 0 0 10px #ccc;*/\r\n padding: 1rem 1.5rem 1rem 4rem;\r\n margin: 0;\r\n text-decoration: none;\r\n background: #00b233;\r\n color: #ffffff;\r\n font-family: sans-serif;\r\n font-size: 2rem;\r\n white-space: nowrap;\r\n line-height: 1;\r\n cursor: pointer;\r\n text-align: center;\r\n transition: background 250ms ease-in-out, transform 150ms ease;\r\n -webkit-appearance: none;\r\n -moz-appearance: none;\r\n\r\n -webkit-animation: excalibur-button-fadein 200ms; /* Safari, Chrome and Opera > 12.1 */\r\n -moz-animation: excalibur-button-fadein 200ms; /* Firefox < 16 */\r\n -ms-animation: excalibur-button-fadein 200ms; /* Internet Explorer */\r\n -o-animation: excalibur-button-fadein 200ms; /* Opera < 12.1 */\r\n animation: excalibur-button-fadein 200ms;\r\n}\r\n\r\n/*\r\nbutton#excalibur-play {\r\n display: none;\r\n}*/\r\n\r\nbutton#excalibur-play:after {\r\n position: absolute;\r\n content: '';\r\n border: 8px solid;\r\n border-color: transparent transparent transparent white;\r\n left: 35px;\r\n top: 24px;\r\n width: 0;\r\n height: 0;\r\n}\r\n\r\nbutton#excalibur-play:before {\r\n position: absolute;\r\n content: '';\r\n border: 3px solid;\r\n left: 19px;\r\n top: 14px;\r\n border-radius: 20px;\r\n width: 30px;\r\n height: 30px;\r\n}\r\n\r\nbutton#excalibur-play:hover,\r\nbutton#excalibur-play:focus {\r\n background: #00982c;\r\n}\r\n\r\nbutton#excalibur-play:focus {\r\n outline: 1px solid #fff;\r\n outline-offset: -4px;\r\n}\r\n\r\nbutton#excalibur-play:active {\r\n transform: scale(0.99);\r\n}\r\n\r\n@keyframes excalibur-button-fadein {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n/* Firefox < 16 */\r\n@-moz-keyframes excalibur-button-fadein {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n/* Safari, Chrome and Opera > 12.1 */\r\n@-webkit-keyframes excalibur-button-fadein {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n/* Internet Explorer */\r\n@-ms-keyframes excalibur-button-fadein {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n/* Opera < 12.1 */\r\n@-o-keyframes excalibur-button-fadein {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n","",{version:3,sources:["webpack://./Loader.css"],names:[],mappings:"AAAA,yBAAyB;;AAEzB;EACE,qBAAqB;EACrB,kBAAkB;EAClB,YAAY;EACZ,kBAAkB;EAClB,YAAY;EACZ;;+BAE6B;EAC7B,8BAA8B;EAC9B,SAAS;EACT,qBAAqB;EACrB,mBAAmB;EACnB,cAAc;EACd,uBAAuB;EACvB,eAAe;EACf,mBAAmB;EACnB,cAAc;EACd,eAAe;EACf,kBAAkB;EAClB,8DAA8D;EAC9D,wBAAwB;EACxB,qBAAqB;;EAErB,gDAAgD,EAAE,oCAAoC;EACtF,6CAA6C,EAAE,iBAAiB;EAChE,4CAA4C,EAAE,sBAAsB;EACpE,2CAA2C,EAAE,iBAAiB;EAC9D,wCAAwC;AAC1C;;AAEA;;;EAGE;;AAEF;EACE,kBAAkB;EAClB,WAAW;EACX,iBAAiB;EACjB,uDAAuD;EACvD,UAAU;EACV,SAAS;EACT,QAAQ;EACR,SAAS;AACX;;AAEA;EACE,kBAAkB;EAClB,WAAW;EACX,iBAAiB;EACjB,UAAU;EACV,SAAS;EACT,mBAAmB;EACnB,WAAW;EACX,YAAY;AACd;;AAEA;;EAEE,mBAAmB;AACrB;;AAEA;EACE,uBAAuB;EACvB,oBAAoB;AACtB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE;IACE,UAAU;EACZ;EACA;IACE,UAAU;EACZ;AACF;;AAEA,iBAAiB;AACjB;EACE;IACE,UAAU;EACZ;EACA;IACE,UAAU;EACZ;AACF;;AAEA,oCAAoC;AACpC;EACE;IACE,UAAU;EACZ;EACA;IACE,UAAU;EACZ;AACF;;AAEA,sBAAsB;AACtB;EACE;IACE,UAAU;EACZ;EACA;IACE,UAAU;EACZ;AACF;;AAEA,iBAAiB;AACjB;EACE;IACE,UAAU;EACZ;EACA;IACE,UAAU;EACZ;AACF",sourcesContent:["/* Buttons styles start */\r\n\r\nbutton#excalibur-play {\r\n display: inline-block;\r\n position: relative;\r\n z-index: 999;\r\n border-radius: 6px;\r\n border: none;\r\n /*border: 3px solid;\r\n border-color: white;\r\n box-shadow: 0 0 10px #ccc;*/\r\n padding: 1rem 1.5rem 1rem 4rem;\r\n margin: 0;\r\n text-decoration: none;\r\n background: #00b233;\r\n color: #ffffff;\r\n font-family: sans-serif;\r\n font-size: 2rem;\r\n white-space: nowrap;\r\n line-height: 1;\r\n cursor: pointer;\r\n text-align: center;\r\n transition: background 250ms ease-in-out, transform 150ms ease;\r\n -webkit-appearance: none;\r\n -moz-appearance: none;\r\n\r\n -webkit-animation: excalibur-button-fadein 200ms; /* Safari, Chrome and Opera > 12.1 */\r\n -moz-animation: excalibur-button-fadein 200ms; /* Firefox < 16 */\r\n -ms-animation: excalibur-button-fadein 200ms; /* Internet Explorer */\r\n -o-animation: excalibur-button-fadein 200ms; /* Opera < 12.1 */\r\n animation: excalibur-button-fadein 200ms;\r\n}\r\n\r\n/*\r\nbutton#excalibur-play {\r\n display: none;\r\n}*/\r\n\r\nbutton#excalibur-play:after {\r\n position: absolute;\r\n content: '';\r\n border: 8px solid;\r\n border-color: transparent transparent transparent white;\r\n left: 35px;\r\n top: 24px;\r\n width: 0;\r\n height: 0;\r\n}\r\n\r\nbutton#excalibur-play:before {\r\n position: absolute;\r\n content: '';\r\n border: 3px solid;\r\n left: 19px;\r\n top: 14px;\r\n border-radius: 20px;\r\n width: 30px;\r\n height: 30px;\r\n}\r\n\r\nbutton#excalibur-play:hover,\r\nbutton#excalibur-play:focus {\r\n background: #00982c;\r\n}\r\n\r\nbutton#excalibur-play:focus {\r\n outline: 1px solid #fff;\r\n outline-offset: -4px;\r\n}\r\n\r\nbutton#excalibur-play:active {\r\n transform: scale(0.99);\r\n}\r\n\r\n@keyframes excalibur-button-fadein {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n/* Firefox < 16 */\r\n@-moz-keyframes excalibur-button-fadein {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n/* Safari, Chrome and Opera > 12.1 */\r\n@-webkit-keyframes excalibur-button-fadein {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n/* Internet Explorer */\r\n@-ms-keyframes excalibur-button-fadein {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n/* Opera < 12.1 */\r\n@-o-keyframes excalibur-button-fadein {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n"],sourceRoot:""}]);const a=o},7379:(t,e,i)=>{i.d(e,{Z:()=>a});var s=i(272),r=i.n(s),n=i(2609),o=i.n(n)()(r());o.push([t.id,"\r\n#ex-toast-container {\r\n position: absolute;\r\n height: 0;\r\n min-width: 50%;\r\n left: 50%;\r\n top: 0;\r\n}\r\n\r\n.ex-toast-message {\r\n left: -50%;\r\n position: relative;\r\n display: flex;\r\n justify-content: space-between;\r\n\r\n\r\n padding: 10px;\r\n margin-top: 5px;\r\n font-size: 18px;\r\n font-family: sans-serif;\r\n border-radius: 6px;\r\n border: 3px solid #b7b779;\r\n background-color: rgb(253, 253, 192);\r\n}\r\n\r\n\r\n.ex-toast-message button {\r\n align-self: flex-start;\r\n}","",{version:3,sources:["webpack://./Util/Toaster.css"],names:[],mappings:";AACA;EACE,kBAAkB;EAClB,SAAS;EACT,cAAc;EACd,SAAS;EACT,MAAM;AACR;;AAEA;EACE,UAAU;EACV,kBAAkB;EAClB,aAAa;EACb,8BAA8B;;;EAG9B,aAAa;EACb,eAAe;EACf,eAAe;EACf,uBAAuB;EACvB,kBAAkB;EAClB,yBAAyB;EACzB,oCAAoC;AACtC;;;AAGA;EACE,sBAAsB;AACxB",sourcesContent:["\r\n#ex-toast-container {\r\n position: absolute;\r\n height: 0;\r\n min-width: 50%;\r\n left: 50%;\r\n top: 0;\r\n}\r\n\r\n.ex-toast-message {\r\n left: -50%;\r\n position: relative;\r\n display: flex;\r\n justify-content: space-between;\r\n\r\n\r\n padding: 10px;\r\n margin-top: 5px;\r\n font-size: 18px;\r\n font-family: sans-serif;\r\n border-radius: 6px;\r\n border: 3px solid #b7b779;\r\n background-color: rgb(253, 253, 192);\r\n}\r\n\r\n\r\n.ex-toast-message button {\r\n align-self: flex-start;\r\n}"],sourceRoot:""}]);const a=o},2609:t=>{t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var i="",s=void 0!==e[5];return e[4]&&(i+="@supports (".concat(e[4],") {")),e[2]&&(i+="@media ".concat(e[2]," {")),s&&(i+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),i+=t(e),s&&(i+="}"),e[2]&&(i+="}"),e[4]&&(i+="}"),i})).join("")},e.i=function(t,i,s,r,n){"string"==typeof t&&(t=[[null,t,void 0]]);var o={};if(s)for(var a=0;a0?" ".concat(A[5]):""," {").concat(A[1],"}")),A[5]=n),i&&(A[2]?(A[1]="@media ".concat(A[2]," {").concat(A[1],"}"),A[2]=i):A[2]=i),r&&(A[4]?(A[1]="@supports (".concat(A[4],") {").concat(A[1],"}"),A[4]=r):A[4]="".concat(r)),e.push(A))}},e}},272:t=>{t.exports=function(t){var e=t[1],i=t[3];if(!i)return e;if("function"==typeof btoa){var s=btoa(unescape(encodeURIComponent(JSON.stringify(i)))),r="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(s),n="/*# ".concat(r," */"),o=i.sources.map((function(t){return"/*# sourceURL=".concat(i.sourceRoot||"").concat(t," */")}));return[e].concat(o).concat([n]).join("\n")}return[e].join("\n")}}},r={};function n(t){var e=r[t];if(void 0!==e)return e.exports;var i=r[t]={id:t,exports:{}};return s[t](i,i.exports,n),i.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var i in e)n.o(e,i)&&!n.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var o={};(()=>{n.d(o,{fWn:()=>ns,Ia8:()=>zi,rqv:()=>qr,hLI:()=>os,yyv:()=>cr,tX5:()=>It,vtX:()=>ls,r7K:()=>Qi,lCh:()=>Qs,cE4:()=>H,fwF:()=>ir,sce:()=>qs,_c7:()=>Ys,KUs:()=>Us,Ajp:()=>de,RDh:()=>Bi,_H9:()=>vi,mxs:()=>$i,OmD:()=>bi,kBf:()=>P,C4F:()=>ze,NQt:()=>Br,JjN:()=>br,V1s:()=>vs,Xz7:()=>we,Cdc:()=>Ni,FKn:()=>ci,wTW:()=>ge,SUY:()=>Pr,ab2:()=>li,GfZ:()=>Ai,YMS:()=>oi,oyv:()=>mi,aUb:()=>di,SdD:()=>Ct,JUv:()=>$e,jEj:()=>jr,TFq:()=>gi,HDU:()=>ft,R_y:()=>_t,ydN:()=>Ue,t50:()=>mt,s$$:()=>Hs,v2G:()=>Pe,Ilk:()=>k,s9i:()=>mr,dxL:()=>Vs,LLX:()=>fr,wA2:()=>Ke,R_p:()=>ai,IQ$:()=>rr,I5F:()=>D,X8$:()=>zs,FR6:()=>pt,U8o:()=>gt,kbG:()=>He,iS_:()=>wt,cGG:()=>Cr,RPN:()=>gs,skb:()=>lr,SLU:()=>Lt,RdJ:()=>Ci,cNu:()=>es,gU7:()=>Fe,LSk:()=>is,Nmp:()=>Ei,d1Y:()=>le,xrL:()=>si,sRW:()=>ni,cmV:()=>cn,qWz:()=>Zi,N0Q:()=>Xi,q8b:()=>Ui,ynB:()=>pi,jT9:()=>ys,wAz:()=>js,D4V:()=>Ur,N6H:()=>Et,W1A:()=>xt,JHW:()=>ki,v2K:()=>ks,pBf:()=>bt,GMl:()=>b,zW2:()=>t,B0K:()=>ve,Nv7:()=>he,C_p:()=>ne,iqw:()=>Ut,MUA:()=>Bt,xqU:()=>vt,pTp:()=>ts,vUK:()=>h,j9l:()=>ss,Zxw:()=>as,Hdx:()=>xi,Z$d:()=>Ii,iqV:()=>Fr,o$7:()=>yr,olM:()=>R,Zm$:()=>j,$QH:()=>W,i78:()=>X,h6u:()=>lt,hts:()=>ht,j88:()=>ot,VME:()=>at,nt:()=>en,Ukr:()=>Qr,zsu:()=>Tt,oA6:()=>Mi,TVh:()=>sr,TwZ:()=>Pi,GTT:()=>Ri,xxj:()=>hr,XdK:()=>ct,Jmb:()=>Q,cXo:()=>Pt,Dm5:()=>yt,IIB:()=>s,zI0:()=>Oe,LYD:()=>dr,cEG:()=>ur,SEl:()=>Hr,t9V:()=>Or,SKZ:()=>V,__J:()=>zr,RI$:()=>ws,x12:()=>an,ccz:()=>hi,aNw:()=>Te,xwn:()=>Cs,dNK:()=>ms,ini:()=>x,YdH:()=>S,y3G:()=>O,l57:()=>B,xn0:()=>Be,t2V:()=>rs,uxB:()=>Ze,cpd:()=>Gs,fiy:()=>qi,$XZ:()=>Yi,uqK:()=>be,STE:()=>Qe,y$z:()=>We,mAD:()=>gr,sOq:()=>ti,hUw:()=>us,_0G:()=>Yr,Sqs:()=>on,hpZ:()=>or,Vol:()=>ar,wIZ:()=>qe,cBi:()=>Ir,RFv:()=>Gi,kfC:()=>Ar,mgq:()=>hn,YVA:()=>_i,Kgp:()=>ee,HH$:()=>ut,M_d:()=>et,rgh:()=>$,Ra6:()=>nt,KhR:()=>J,BS5:()=>st,xhz:()=>dt,xOq:()=>tt,a9j:()=>Z,bHk:()=>rt,CgK:()=>K,cuY:()=>it,kvE:()=>ei,SBu:()=>Xt,AE_:()=>Ps,ctO:()=>Rs,OLH:()=>Is,kky:()=>c,nSF:()=>Ie,zHn:()=>ri,zwx:()=>Os,AeJ:()=>Li,hLz:()=>Di,D9g:()=>Ds,wA:()=>Oi,jhr:()=>Hi,GVs:()=>Ae,_zO:()=>Qt,w6$:()=>Vi,mhV:()=>ji,MOD:()=>yi,kwd:()=>Ji,Lmr:()=>Ki,xsS:()=>pr,lLr:()=>ce,Z$r:()=>T,IXb:()=>cs,SGH:()=>_r,SMj:()=>Lr,L34:()=>An,exe:()=>qt,bnF:()=>fi,MFA:()=>E,$uU:()=>De,jyi:()=>kt,E03:()=>Mt,V6q:()=>Rt,rg2:()=>Rr,DVW:()=>xe,nVo:()=>fs,F6N:()=>nn,xP7:()=>bs,Odq:()=>Ms,Zif:()=>Bs,ZGJ:()=>Je,MJk:()=>Mr,xvT:()=>hs,PHM:()=>wi,dpR:()=>Ft,n9L:()=>_s,KwO:()=>ps,B7y:()=>ds,x7r:()=>Gr,wx7:()=>Ve,Uvn:()=>Xe,OFT:()=>ii,xzN:()=>Es,M5Z:()=>d,ZrN:()=>r,OWs:()=>w,dF9:()=>Ye,oZy:()=>Yt,rD2:()=>jt,VHo:()=>At,ohE:()=>ue,R$E:()=>Ee,q3I:()=>Ls,Pab:()=>_,uZ5:()=>p,McK:()=>l,F9c:()=>u,k0b:()=>Fi,hnT:()=>Kr,RSJ:()=>Zr,Mku:()=>Wr,h90:()=>tn,rms:()=>$r,ErP:()=>Vr,aVg:()=>Xr,lPc:()=>Jr,Z8E:()=>Si,_N2:()=>Ss,yFn:()=>Ts,lNv:()=>Ti,cu9:()=>As,MZQ:()=>Re,FUM:()=>Ge,BxR:()=>se,vdf:()=>y,iaL:()=>I,w6H:()=>C,Q4c:()=>Le,Xxe:()=>g,Uxb:()=>f,Yr5:()=>m,Bhw:()=>v,yOA:()=>e});var t={};n.r(t),n.d(t,{ActivateEvent:()=>It,CollisionEndEvent:()=>Ct,CollisionPostSolveEvent:()=>ft,CollisionPreSolveEvent:()=>_t,CollisionStartEvent:()=>mt,ContactEndEvent:()=>pt,ContactStartEvent:()=>gt,DeactivateEvent:()=>wt,EnterTriggerEvent:()=>Et,EnterViewPortEvent:()=>xt,EventTypes:()=>b,ExitTriggerEvent:()=>Bt,ExitViewPortEvent:()=>vt,GameEvent:()=>j,GameStartEvent:()=>W,GameStopEvent:()=>X,GamepadAxisEvent:()=>lt,GamepadButtonEvent:()=>ht,GamepadConnectEvent:()=>ot,GamepadDisconnectEvent:()=>at,HiddenEvent:()=>ct,InitializeEvent:()=>yt,KillEvent:()=>V,PostCollisionEvent:()=>ut,PostDebugDrawEvent:()=>et,PostDrawEvent:()=>$,PostFrameEvent:()=>nt,PostKillEvent:()=>J,PostUpdateEvent:()=>st,PreCollisionEvent:()=>dt,PreDebugDrawEvent:()=>tt,PreDrawEvent:()=>Z,PreFrameEvent:()=>rt,PreKillEvent:()=>K,PreUpdateEvent:()=>it,VisibleEvent:()=>At});var e={};n.r(e),n.d(e,{getAttributeComponentSize:()=>Ot,getAttributePointerType:()=>Ht,getGlTypeSizeBytes:()=>zt});var i={};n.r(i),n.d(i,{circle:()=>Ce,line:()=>pe,point:()=>_e,roundRect:()=>me,vector:()=>fe});var s={};n.r(s),n.d(s,{Axes:()=>Xs,Buttons:()=>Ws,Gamepad:()=>Er,Gamepads:()=>xr,KeyEvent:()=>wr,Keyboard:()=>vr,Keys:()=>Js,NativePointerButton:()=>$s,PointerButton:()=>tr,PointerComponent:()=>Gi,PointerEvent:()=>Sr,PointerEventReceiver:()=>kr,PointerScope:()=>Ks,PointerSystem:()=>Ar,PointerType:()=>er,WheelDeltaMode:()=>Zs,WheelEvent:()=>Dr});var r={};function a(){if("undefined"==typeof window&&(window={audioContext:function(){}}),"undefined"==typeof window||window.requestAnimationFrame||(window.requestAnimationFrame=window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(t){window.setInterval(t,1e3/60)}),"undefined"==typeof window||window.cancelAnimationFrame||(window.cancelAnimationFrame=window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||function(){}),"undefined"!=typeof window&&!window.AudioContext){if(window.webkitAudioContext){const t=window.webkitAudioContext.prototype.decodeAudioData;window.webkitAudioContext.prototype.decodeAudioData=function(e){return new Promise(((i,s)=>{t.call(this,e,i,s)}))}}window.AudioContext=window.AudioContext||window.webkitAudioContext||window.mozAudioContext||window.msAudioContext||window.oAudioContext}"undefined"==typeof window||window.devicePixelRatio||(window.devicePixelRatio=window.devicePixelRatio||1)}n.r(r),n.d(r,{ConsoleAppender:()=>D,DrawUtil:()=>i,EasingFunctions:()=>Ui,LogLevel:()=>x,Logger:()=>S,Observable:()=>We,ScreenAppender:()=>T,addItemToArray:()=>L,contains:()=>G,delay:()=>z,fail:()=>U,getPosition:()=>M,removeItemFromArray:()=>N}),n(4662),n(8343);class h{static useCanvasGraphicsContext(){h.enable("use-canvas-context")}static freeze(){h._FROZEN=!0}static _reset(){h._FROZEN=!1,h._FLAGS={}}static enable(t){if(this._FROZEN)throw Error("Feature flags can only be enabled before Engine constructor time");h._FLAGS[t]=!0}static disable(t){if(this._FROZEN)throw Error("Feature flags can only be disabled before Engine constructor time");h._FLAGS[t]=!1}static isEnabled(t){return!!h._FLAGS[t]}static show(){return Object.keys(h._FLAGS)}}function l(t,e){return{type:t,value:e}}h._FROZEN=!1,h._FLAGS={};const A=4294967295;class c{constructor(t){this.seed=t,this._lowerMask=2147483647,this._upperMask=2147483648,this._w=32,this._n=624,this._m=397,this._a=2567483615,this._u=11,this._s=7,this._b=2636928640,this._t=15,this._c=4022730752,this._l=18,this._f=1812433253,this._mt=new Array(this._n),this._mt[0]=(t||Date.now())>>>0;for(let t=1;t>>this._w-2;this._mt[t]=(this._f*((4294901760&e)>>>16)<<16)+this._f*(65535&e)+t>>>0}this._index=this._n}_twist(){const t=[0,this._a];let e=0,i=0;for(;i>>1^t[1&e]&A;for(;i>>1^t[1&e]&A;e=this._mt[this._n-1]&this._upperMask|this._mt[0]&this._lowerMask,this._mt[this._n-1]=this._mt[this._m-1]^e>>>1^t[1&e]&A,this._index=0}nextInt(){this._index>=this._n&&this._twist();let t=this._mt[this._index++];return t^=t>>>this._u,t^=t<>>this._l,t>>>0}next(){return this.nextInt()*(1/4294967296)}floating(t,e){return(e-t)*this.next()+t}integer(t,e){return Math.floor((e-t+1)*this.next()+t)}bool(t=.5){return this.next()<=t}pickOne(t){return t[this.integer(0,t.length-1)]}pickSet(t,e,i=!1){return i?this._pickSetWithDuplicates(t,e):this._pickSetWithoutDuplicates(t,e)}_pickSetWithoutDuplicates(t,e){if(e>t.length||e<0)throw new Error("Invalid number of elements to pick, must pick a value 0 < n <= length");if(e===t.length)return t;const i=new Array(e);let s=0;const r=t.slice(0);for(;s=0?t-Math.floor(t):t-Math.ceil(t)}function g(t){return 0===t?0:t<0?-1:1}function p(t,e,i){return Math.min(Math.max(e,t),i)}function _(t){let e=t;if(t>d)for(;e>d;)e-=d;if(t<0)for(;e<0;)e+=d;return e}function f(t){return 180/Math.PI*t}function m(t){return t/180*Math.PI}const C=(t,e)=>Array.from(new Array(e-t+1),((e,i)=>i+t));function y(t,e,i=new c){return i?i.floating(t,e):t+Math.random()*(e-t)}function I(t,e,i=new c){return i?i.integer(t,e):Math.round(y(t,e))}class w{constructor(t,e){this._x=0,this._y=0,this._x=t,this._y=e}static get Zero(){return new w(0,0)}static get One(){return new w(1,1)}static get Half(){return new w(.5,.5)}static get Up(){return new w(0,-1)}static get Down(){return new w(0,1)}static get Left(){return new w(-1,0)}static get Right(){return new w(1,0)}static fromAngle(t){return new w(Math.cos(t),Math.sin(t))}static isValid(t){return null!=t&&!isNaN(t.x)&&!isNaN(t.y)&&t.x!==1/0&&t.y!==1/0&&t.x!==-1/0&&t.y!==-1/0}static distance(t,e){return Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2))}static min(t,e){return new w(Math.min(t.x,e.x),Math.min(t.y,e.y))}static max(t,e){return new w(Math.max(t.x,e.x),Math.max(t.y,e.y))}get x(){return this._x}set x(t){this._x=t}get y(){return this._y}set y(t){this._y=t}setTo(t,e){this.x=t,this.y=e}equals(t,e=.001){return Math.abs(this.x-t.x)<=e&&Math.abs(this.y-t.y)<=e}distance(t){if(!t)return Math.sqrt(this.x*this.x+this.y*this.y);const e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)}squareDistance(t){t||(t=w.Zero);const e=this.x-t.x,i=this.y-t.y;return e*e+i*i}clampMagnitude(t){const e=p(this.size,0,t);return this.size=e,this}get size(){return this.distance()}set size(t){const e=this.normalize().scale(t);this.setTo(e.x,e.y)}normalize(){const t=this.distance();return t>0?new w(this.x/t,this.y/t):new w(0,1)}average(t){return this.add(t).scale(.5)}scale(t,e){const i=e||new w(0,0);return t instanceof w?(i.x=this.x*t.x,i.y=this.y*t.y):(i.x=this.x*t,i.y=this.y*t),i}add(t,e){return e?(e.x=this.x+t.x,e.y=this.y+t.y,e):new w(this.x+t.x,this.y+t.y)}sub(t){return new w(this.x-t.x,this.y-t.y)}addEqual(t){return this.setTo(this.x+t.x,this.y+t.y),this}subEqual(t){return this.setTo(this.x-t.x,this.y-t.y),this}scaleEqual(t){return this.setTo(this.x*t,this.y*t),this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return t instanceof w?this.x*t.y-this.y*t.x:"number"==typeof t?new w(t*this.y,-t*this.x):void 0}static cross(t,e){return new w(-t*e.y,t*e.x)}perpendicular(){return new w(this.y,-this.x)}normal(){return this.perpendicular().normalize()}negate(){return this.scale(-1)}toAngle(){return Math.atan2(this.y,this.x)}rotate(t,e){e||(e=new w(0,0));const i=Math.sin(t),s=Math.cos(t),r=s*(this.x-e.x)-i*(this.y-e.y)+e.x,n=i*(this.x-e.x)+s*(this.y-e.y)+e.y;return new w(r,n)}clone(t){const e=null!=t?t:new w(0,0);return e.x=this.x,e.y=this.y,e}toString(t){return t?`(${this.x.toFixed(t)}, ${this.y.toFixed(t)})`:`(${this.x}, ${this.y})`}}function v(t,e){return new w(t,e)}var x,E,B,b,Q;!function(t){t[t.Debug=0]="Debug",t[t.Info=1]="Info",t[t.Warn=2]="Warn",t[t.Error=3]="Error",t[t.Fatal=4]="Fatal"}(x||(x={}));class S{constructor(){if(this._appenders=[],this.defaultLevel=x.Info,S._INSTANCE)throw new Error("Logger is a singleton");return S._INSTANCE=this,S._INSTANCE.addAppender(new D),S._INSTANCE}static getInstance(){return null==S._INSTANCE&&(S._INSTANCE=new S),S._INSTANCE}addAppender(t){this._appenders.push(t)}clearAppenders(){this._appenders.length=0}_log(t,e){null==t&&(t=this.defaultLevel);const i=this._appenders.length;for(let s=0;s=this.defaultLevel&&this._appenders[s].log(t,e)}debug(...t){this._log(x.Debug,t)}info(...t){this._log(x.Info,t)}warn(...t){this._log(x.Warn,t)}error(...t){this._log(x.Error,t)}fatal(...t){this._log(x.Fatal,t)}}S._INSTANCE=null;class D{log(t,e){if(!console&&!console.log&&console.warn&&console.error)return;const i=[];i.unshift.apply(i,e),i.unshift("["+x[t]+"] : "),t0?r-.05:0}}class k{constructor(t,e,i,s){this.r=t,this.g=e,this.b=i,this.a=null!=s?s:1}static fromRGB(t,e,i,s){return new k(t,e,i,s)}static fromRGBString(t){let e=null;if(e=t.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+(?:\.\d+)?))?\)/i)){const t=parseInt(e[1],10),i=parseInt(e[2],10),s=parseInt(e[3],10);let r=1;return e[4]&&(r=parseFloat(e[4])),new k(t,i,s,r)}throw new Error("Invalid rgb/a string: "+t)}static fromHex(t){let e=null;if(e=t.match(/^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})?$/i)){const t=parseInt(e[1],16),i=parseInt(e[2],16),s=parseInt(e[3],16);let r=1;return e[4]&&(r=parseInt(e[4],16)/255),new k(t,i,s,r)}throw new Error("Invalid hex string: "+t)}static fromHSL(t,e,i,s=1){return new F(t,e,i,s).toRGBA()}lighten(t=.1){const e=F.fromRGBA(this.r,this.g,this.b,this.a);return e.l+=(1-e.l)*t,e.toRGBA()}darken(t=.1){const e=F.fromRGBA(this.r,this.g,this.b,this.a);return e.l-=e.l*t,e.toRGBA()}saturate(t=.1){const e=F.fromRGBA(this.r,this.g,this.b,this.a);return e.s+=e.s*t,e.toRGBA()}desaturate(t=.1){const e=F.fromRGBA(this.r,this.g,this.b,this.a);return e.s-=e.s*t,e.toRGBA()}multiply(t){const e=t.r/255*this.r/255*255,i=t.g/255*this.g/255*255,s=t.b/255*this.b/255*255,r=t.a*this.a;return new k(e,i,s,r)}screen(t){const e=t.invert(),i=t.invert();return e.multiply(i).invert()}invert(){return new k(255-this.r,255-this.g,255-this.b,1-this.a)}average(t){const e=(t.r+this.r)/2,i=(t.g+this.g)/2,s=(t.b+this.b)/2,r=(t.a+this.a)/2;return new k(e,i,s,r)}equal(t){return this.toString()===t.toString()}toString(t="rgb"){switch(t){case"rgb":return this.toRGBA();case"hsl":return this.toHSLA();case"hex":return this.toHex();default:throw new Error("Invalid Color format")}}_componentToHex(t){const e=t.toString(16);return 1===e.length?"0"+e:e}toHex(){return"#"+this._componentToHex(this.r)+this._componentToHex(this.g)+this._componentToHex(this.b)}toRGBA(){const t=String(this.r.toFixed(0))+", "+String(this.g.toFixed(0))+", "+String(this.b.toFixed(0));return void 0!==this.a||null!==this.a?"rgba("+t+", "+String(this.a)+")":"rgb("+t+")"}toHSLA(){return F.fromRGBA(this.r,this.g,this.b,this.a).toString()}fillStyle(){return this.toString()}clone(){return new k(this.r,this.g,this.b,this.a)}static get Black(){return k.fromHex("#000000")}static get White(){return k.fromHex("#FFFFFF")}static get Gray(){return k.fromHex("#808080")}static get LightGray(){return k.fromHex("#D3D3D3")}static get DarkGray(){return k.fromHex("#A9A9A9")}static get Yellow(){return k.fromHex("#FFFF00")}static get Orange(){return k.fromHex("#FFA500")}static get Red(){return k.fromHex("#FF0000")}static get Vermilion(){return k.fromHex("#FF5B31")}static get Rose(){return k.fromHex("#FF007F")}static get Magenta(){return k.fromHex("#FF00FF")}static get Violet(){return k.fromHex("#7F00FF")}static get Blue(){return k.fromHex("#0000FF")}static get Azure(){return k.fromHex("#007FFF")}static get Cyan(){return k.fromHex("#00FFFF")}static get Viridian(){return k.fromHex("#59978F")}static get Green(){return k.fromHex("#00FF00")}static get Chartreuse(){return k.fromHex("#7FFF00")}static get Transparent(){return k.fromHex("#FFFFFF00")}static get ExcaliburBlue(){return k.fromHex("#176BAA")}}class F{constructor(t,e,i,s){this.h=t,this.s=e,this.l=i,this.a=s}static hue2rgb(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}static fromRGBA(t,e,i,s){t/=255,e/=255,i/=255;const r=Math.max(t,e,i),n=Math.min(t,e,i);let o,a;const h=(r+n)/2;if(r===n)o=a=0;else{const s=r-n;switch(a=h>.5?s/(2-r-n):s/(r+n),r){case t:o=(e-i)/s+(er&&(r=i[t].dot(e),n=t);return s[n]}}(E||(E={}));class P{constructor(t=0,e=0,i=0,s=0){"object"==typeof t?(this.left=t.left,this.top=t.top,this.right=t.right,this.bottom=t.bottom):"number"==typeof t&&(this.left=t,this.top=e,this.right=i,this.bottom=s)}clone(){return new P(this.left,this.top,this.right,this.bottom)}static getSideFromIntersection(t){return t&&t?Math.abs(t.x)>Math.abs(t.y)?t.x<0?E.Right:E.Left:t.y<0?E.Bottom:E.Top:E.None}static fromPoints(t){let e=1/0,i=1/0,s=-1/0,r=-1/0;for(let n=0;ns&&(s=t[n].x),t[n].yr&&(r=t[n].y);return new P(e,i,s,r)}static fromDimension(t,e,i=w.Half,s=w.Zero){return new P(-t*i.x+s.x,-e*i.y+s.y,t-t*i.x+s.x,e-e*i.y+s.y)}get width(){return this.right-this.left}get height(){return this.bottom-this.top}hasZeroDimensions(){return 0===this.width||0===this.height}get center(){return new w((this.left+this.right)/2,(this.top+this.bottom)/2)}translate(t){return new P(this.left+t.x,this.top+t.y,this.right+t.x,this.bottom+t.y)}rotate(t,e=w.Zero){const i=this.getPoints().map((i=>i.rotate(t,e)));return P.fromPoints(i)}scale(t,e=w.Zero){const i=this.translate(e);return new P(i.left*t.x,i.top*t.y,i.right*t.x,i.bottom*t.y)}transform(t){const e=t.data[0]*this.left,i=t.data[1]*this.left,s=t.data[0]*this.right,r=t.data[1]*this.right,n=t.data[2]*this.top,o=t.data[3]*this.top,a=t.data[2]*this.bottom,h=t.data[3]*this.bottom,l=t.getPosition(),A=Math.min(e,s)+Math.min(n,a)+l.x,c=Math.min(i,r)+Math.min(o,h)+l.y,d=Math.max(e,s)+Math.max(n,a)+l.x,u=Math.max(i,r)+Math.max(o,h)+l.y;return new P({left:A,top:c,right:d,bottom:u})}getPerimeter(){return 2*(this.width+this.height)}getPoints(){const t=[];return t.push(new w(this.left,this.top)),t.push(new w(this.right,this.top)),t.push(new w(this.right,this.bottom)),t.push(new w(this.left,this.bottom)),t}rayCast(t,e=1/0){let i=-1/0,s=1/0;const r=0===t.dir.x?Number.MAX_VALUE:1/t.dir.x,n=0===t.dir.y?Number.MAX_VALUE:1/t.dir.y,o=(this.left-t.pos.x)*r,a=(this.right-t.pos.x)*r;i=Math.min(o,a),s=Math.max(o,a);const h=(this.top-t.pos.y)*n,l=(this.bottom-t.pos.y)*n;return i=Math.max(i,Math.min(h,l)),s=Math.min(s,Math.max(h,l)),s>=Math.max(0,i)&&i=Math.max(0,i)&&i=t.y&&this.right>=t.x:t instanceof P&&this.left<=t.left&&this.top<=t.top&&t.bottom<=this.bottom&&t.right<=this.right}combine(t){return new P(Math.min(this.left,t.left),Math.min(this.top,t.top),Math.max(this.right,t.right),Math.max(this.bottom,t.bottom))}get dimensions(){return new w(this.width,this.height)}overlaps(t,e){const i=e||0;if(t.hasZeroDimensions())return this.contains(t);if(this.hasZeroDimensions())return t.contains(this);const s=this.combine(t);return s.width+i=t.left&&this.right<=t.right?t.left-this.right:t.right-this.left;let i=0;return i=this.top<=t.bottom&&this.top>=t.top?t.bottom-this.top:t.top-this.bottom,Math.abs(e)=0?this.right-t.right<=t.left-this.left?t.left-this.right:t.right-this.left:t.right-this.right<=this.left-t.left?this.left-t.right:this.right-t.left;let i=0;return i=this.height-t.height>=0?this.bottom-t.bottom<=t.top-this.top?t.top-this.bottom:t.bottom-this.top:t.bottom-this.bottom<=this.top-t.top?this.top-t.bottom:this.bottom-t.top,Math.abs(e){this._resolver=t,this._rejecter=e}))}get isCompleted(){return this._isCompleted}resolve(t){this._isCompleted||(this._isCompleted=!0,this._resolver(t))}reject(t){this._isCompleted||(this._isCompleted=!0,this._rejecter(t))}}function M(t){let e=0,i=0;const s=t=>{e+=t.offsetLeft,t.offsetParent&&s(t.offsetParent)},r=t=>{i+=t.offsetTop,t.offsetParent&&r(t.offsetParent)};return s(t),r(t),new w(e,i)}function L(t,e){return-1===e.indexOf(t)&&(e.push(t),!0)}function N(t,e){let i=-1;return(i=e.indexOf(t))>-1&&(e.splice(i,1),!0)}function G(t,e){for(let i=0;i{s.resolve()}),t),s.promise}!function(t){t[t.X=12]="X",t[t.Y=13]="Y"}(B||(B={}));class O{constructor(){this.data=new Float32Array(16),this._scaleX=1,this._scaleSignX=1,this._scaleY=1,this._scaleSignY=1}static ortho(t,e,i,s,r,n){const o=new O;return o.data[0]=2/(e-t),o.data[1]=0,o.data[2]=0,o.data[3]=0,o.data[4]=0,o.data[5]=2/(s-i),o.data[6]=0,o.data[7]=0,o.data[8]=0,o.data[9]=0,o.data[10]=-2/(n-r),o.data[11]=0,o.data[12]=-(e+t)/(e-t),o.data[13]=-(s+i)/(s-i),o.data[14]=-(n+r)/(n-r),o.data[15]=1,o}clone(t){const e=t||new O;return e.data[0]=this.data[0],e.data[1]=this.data[1],e.data[2]=this.data[2],e.data[3]=this.data[3],e.data[4]=this.data[4],e.data[5]=this.data[5],e.data[6]=this.data[6],e.data[7]=this.data[7],e.data[8]=this.data[8],e.data[9]=this.data[9],e.data[10]=this.data[10],e.data[11]=this.data[11],e.data[12]=this.data[12],e.data[13]=this.data[13],e.data[14]=this.data[14],e.data[15]=this.data[15],e}toDOMMatrix(){return new DOMMatrix([...this.data])}static fromFloat32Array(t){const e=new O;return e.data=t,e}static identity(){const t=new O;return t.data[0]=1,t.data[1]=0,t.data[2]=0,t.data[3]=0,t.data[4]=0,t.data[5]=1,t.data[6]=0,t.data[7]=0,t.data[8]=0,t.data[9]=0,t.data[10]=1,t.data[11]=0,t.data[12]=0,t.data[13]=0,t.data[14]=0,t.data[15]=1,t}reset(){const t=this;return t.data[0]=1,t.data[1]=0,t.data[2]=0,t.data[3]=0,t.data[4]=0,t.data[5]=1,t.data[6]=0,t.data[7]=0,t.data[8]=0,t.data[9]=0,t.data[10]=1,t.data[11]=0,t.data[12]=0,t.data[13]=0,t.data[14]=0,t.data[15]=1,t}static translation(t,e){const i=O.identity();return i.data[12]=t,i.data[13]=e,i}static scale(t,e){const i=O.identity();return i.data[0]=t,i.data[5]=e,i.data[10]=1,i.data[15]=1,i}static rotation(t){const e=O.identity();return e.data[0]=Math.cos(t),e.data[4]=-Math.sin(t),e.data[1]=Math.sin(t),e.data[5]=Math.cos(t),e}multiply(t,e){if(t instanceof w){const i=e||new w(0,0),s=t,r=s.x*this.data[0]+s.y*this.data[4]+this.data[12],n=s.x*this.data[1]+s.y*this.data[5]+this.data[13];return i.x=r,i.y=n,i}{const i=e||new O,s=t,r=this.data[0],n=this.data[1],o=this.data[2],a=this.data[3],h=this.data[4],l=this.data[5],A=this.data[6],c=this.data[7],d=this.data[8],u=this.data[9],p=this.data[10],_=this.data[11],f=this.data[12],m=this.data[13],C=this.data[14],y=this.data[15],I=s.data[0],w=s.data[1],v=s.data[2],x=s.data[3],E=s.data[4],B=s.data[5],b=s.data[6],Q=s.data[7],S=s.data[8],D=s.data[9],T=s.data[10],k=s.data[11],F=s.data[12],P=s.data[13],R=s.data[14],M=s.data[15];i.data[0]=r*I+h*w+d*v+f*x,i.data[1]=n*I+l*w+u*v+m*x,i.data[2]=o*I+A*w+p*v+C*x,i.data[3]=a*I+c*w+_*v+y*x,i.data[4]=r*E+h*B+d*b+f*Q,i.data[5]=n*E+l*B+u*b+m*Q,i.data[6]=o*E+A*B+p*b+C*Q,i.data[7]=a*E+c*B+_*b+y*Q,i.data[8]=r*S+h*D+d*T+f*k,i.data[9]=n*S+l*D+u*T+m*k,i.data[10]=o*S+A*D+p*T+C*k,i.data[11]=a*S+c*D+_*T+y*k,i.data[12]=r*F+h*P+d*R+f*M,i.data[13]=n*F+l*P+u*R+m*M,i.data[14]=o*F+A*P+p*R+C*M,i.data[15]=a*F+c*P+_*R+y*M;const L=this.getScale();return i._scaleSignX=g(L.x)*g(i._scaleSignX),i._scaleSignY=g(L.y)*g(i._scaleSignY),i}}translate(t,e){const i=this.data[0],s=this.data[1],r=this.data[2],n=this.data[3],o=this.data[4],a=this.data[5],h=this.data[6],l=this.data[7],A=this.data[8],c=this.data[9],d=this.data[10],u=this.data[11],g=this.data[12],p=this.data[13],_=this.data[14],f=this.data[15];return this.data[12]=i*t+o*e+0*A+1*g,this.data[13]=s*t+a*e+0*c+1*p,this.data[14]=r*t+h*e+0*d+1*_,this.data[15]=n*t+l*e+0*u+1*f,this}setPosition(t,e){this.data[12]=t,this.data[13]=e}getPosition(){return v(this.data[12],this.data[13])}rotate(t){const e=this.data[0],i=this.data[1],s=this.data[2],r=this.data[3],n=this.data[4],o=this.data[5],a=this.data[6],h=this.data[7],l=Math.sin(t),A=Math.cos(t);return this.data[0]=A*e+l*n,this.data[1]=A*i+l*o,this.data[2]=A*s+l*a,this.data[3]=A*r+l*h,this.data[4]=A*n-l*e,this.data[5]=A*o-l*i,this.data[6]=A*a-l*s,this.data[7]=A*h-l*r,this}scale(t,e){const i=this.data[0],s=this.data[1],r=this.data[2],n=this.data[3],o=this.data[4],a=this.data[5],h=this.data[6],l=this.data[7];return this.data[0]=i*t,this.data[1]=s*t,this.data[2]=r*t,this.data[3]=n*t,this.data[4]=o*e,this.data[5]=a*e,this.data[6]=h*e,this.data[7]=l*e,this}setRotation(t){const e=this.getScale(),i=Math.sin(t),s=Math.cos(t);this.data[0]=s*e.x,this.data[1]=i*e.y,this.data[4]=-i*e.x,this.data[5]=s*e.y}getRotation(){return _(Math.atan2(this.data[1]/this.getScaleY(),this.data[0]/this.getScaleX()))}getScaleX(){const t=v(this.data[0],this.data[4]).size;return this._scaleSignX*t}getScaleY(){const t=v(this.data[1],this.data[5]).size;return this._scaleSignY*t}getScale(){return v(this.getScaleX(),this.getScaleY())}setScaleX(t){if(this._scaleX===t)return;this._scaleSignX=g(t);const e=v(this.data[0]*this._scaleSignX,this.data[4]*this._scaleSignX).normalize();this.data[0]=e.x*t,this.data[4]=e.y*t,this._scaleX=t}setScaleY(t){if(this._scaleY===t)return;this._scaleSignY=g(t);const e=v(this.data[1]*this._scaleSignY,this.data[5]*this._scaleSignY).normalize();this.data[1]=e.x*t,this.data[5]=e.y*t,this._scaleY=t}setScale(t){this.setScaleX(t.x),this.setScaleY(t.y)}getBasisDeterminant(){return this.data[0]*this.data[5]-this.data[1]*this.data[4]}getAffineInverse(t){const e=1/this.getBasisDeterminant(),i=this.data[0],s=this.data[4],r=this.data[1],n=this.data[5],o=t||O.identity();o.data[0]=n*e,o.data[1]=-r*e,o.data[4]=-s*e,o.data[5]=i*e;const a=this.data[12],h=this.data[13];return o.data[12]=-(a*o.data[0]+h*o.data[4]),o.data[13]=-(a*o.data[1]+h*o.data[5]),o}isIdentity(){return 1===this.data[0]&&0===this.data[1]&&0===this.data[2]&&0===this.data[3]&&0===this.data[4]&&1===this.data[5]&&0===this.data[6]&&0===this.data[7]&&0===this.data[8]&&0===this.data[9]&&1===this.data[10]&&0===this.data[11]&&0===this.data[12]&&0===this.data[13]&&0===this.data[14]&&1===this.data[15]}toString(){return`\n[${this.data[0]} ${this.data[4]} ${this.data[8]} ${this.data[12]}]\n[${this.data[1]} ${this.data[5]} ${this.data[9]} ${this.data[13]}]\n[${this.data[2]} ${this.data[6]} ${this.data[10]} ${this.data[14]}]\n[${this.data[3]} ${this.data[7]} ${this.data[11]} ${this.data[15]}]\n`}}class H{constructor(){this.data=new Float64Array(6),this._scale=new Float64Array([1,1]),this._scaleSignX=1,this._scaleSignY=1}toDOMMatrix(){return new DOMMatrix([...this.data])}static identity(){const t=new H;return t.data[0]=1,t.data[1]=0,t.data[2]=0,t.data[3]=1,t.data[4]=0,t.data[5]=0,t}static translation(t,e){const i=H.identity();return i.data[4]=t,i.data[5]=e,i}static scale(t,e){const i=H.identity();return i.data[0]=t,i.data[3]=e,i._scale[0]=t,i._scale[1]=e,i}static rotation(t){const e=H.identity();return e.data[0]=Math.cos(t),e.data[1]=Math.sin(t),e.data[2]=-Math.sin(t),e.data[3]=Math.cos(t),e}setPosition(t,e){this.data[4]=t,this.data[5]=e}getPosition(){return v(this.data[4],this.data[5])}rotate(t){const e=this.data[0],i=this.data[1],s=this.data[2],r=this.data[3],n=Math.sin(t),o=Math.cos(t);return this.data[0]=o*e+n*s,this.data[1]=o*i+n*r,this.data[2]=o*s-n*e,this.data[3]=o*r-n*i,this}translate(t,e){const i=this.data[0],s=this.data[1],r=this.data[2],n=this.data[3],o=this.data[4],a=this.data[5];return this.data[4]=i*t+r*e+o,this.data[5]=s*t+n*e+a,this}scale(t,e){const i=this.data[0],s=this.data[1],r=this.data[2],n=this.data[3];return this.data[0]=i*t,this.data[1]=s*t,this.data[2]=r*e,this.data[3]=n*e,this._scale[0]=t,this._scale[1]=e,this}determinant(){return this.data[0]*this.data[3]-this.data[1]*this.data[2]}inverse(t){const e=1/this.determinant(),i=this.data[0],s=this.data[2],r=this.data[1],n=this.data[3],o=t||H.identity();o.data[0]=n*e,o.data[1]=-r*e,o.data[2]=-s*e,o.data[3]=i*e;const a=this.data[4],h=this.data[5];return o.data[4]=-(a*o.data[0]+h*o.data[2]),o.data[5]=-(a*o.data[1]+h*o.data[3]),o}multiply(t,e){if(t instanceof w){const i=e||new w(0,0),s=t,r=s.x*this.data[0]+s.y*this.data[2]+this.data[4],n=s.x*this.data[1]+s.y*this.data[3]+this.data[5];return i.x=r,i.y=n,i}{const i=e||new H,s=t,r=this.data[0],n=this.data[1],o=this.data[2],a=this.data[3],h=this.data[4],l=this.data[5],A=s.data[0],c=s.data[1],d=s.data[2],u=s.data[3],p=s.data[4],_=s.data[5];i.data[0]=r*A+o*c,i.data[1]=n*A+a*c,i.data[2]=r*d+o*u,i.data[3]=n*d+a*u,i.data[4]=r*p+o*_+h,i.data[5]=n*p+a*_+l;const f=this.getScale();return i._scaleSignX=g(f.x)*g(i._scaleSignX),i._scaleSignY=g(f.y)*g(i._scaleSignY),i}}to4x4(){const t=new O;return t.data[0]=this.data[0],t.data[1]=this.data[1],t.data[2]=0,t.data[3]=0,t.data[4]=this.data[2],t.data[5]=this.data[3],t.data[6]=0,t.data[7]=0,t.data[8]=0,t.data[9]=0,t.data[10]=1,t.data[11]=0,t.data[12]=this.data[4],t.data[13]=this.data[5],t.data[14]=0,t.data[15]=1,t}setRotation(t){const e=this.getScale(),i=Math.sin(t),s=Math.cos(t);this.data[0]=s*e.x,this.data[1]=i*e.y,this.data[2]=-i*e.x,this.data[3]=s*e.y}getRotation(){return _(Math.atan2(this.data[1]/this.getScaleY(),this.data[0]/this.getScaleX()))}getScaleX(){const t=v(this.data[0],this.data[2]).distance();return this._scaleSignX*t}getScaleY(){const t=v(this.data[1],this.data[3]).distance();return this._scaleSignY*t}getScale(){return v(this.getScaleX(),this.getScaleY())}setScaleX(t){if(t===this._scale[0])return;this._scaleSignX=g(t);const e=v(this.data[0]*this._scaleSignX,this.data[2]*this._scaleSignX).normalize();this.data[0]=e.x*t,this.data[2]=e.y*t,this._scale[0]=t}setScaleY(t){if(t===this._scale[1])return;this._scaleSignY=g(t);const e=v(this.data[1]*this._scaleSignY,this.data[3]*this._scaleSignY).normalize();this.data[1]=e.x*t,this.data[3]=e.y*t,this._scale[1]=t}setScale(t){this.setScaleX(t.x),this.setScaleY(t.y)}isIdentity(){return 1===this.data[0]&&0===this.data[1]&&0===this.data[2]&&1===this.data[3]&&0===this.data[4]&&0===this.data[5]}reset(){const t=this;return t.data[0]=1,t.data[1]=0,t.data[2]=0,t.data[3]=1,t.data[4]=0,t.data[5]=0,t}clone(t){const e=t||new H;return e.data[0]=this.data[0],e.data[1]=this.data[1],e.data[2]=this.data[2],e.data[3]=this.data[3],e.data[4]=this.data[4],e.data[5]=this.data[5],e}toString(){return`\n[${this.data[0]} ${this.data[2]} ${this.data[4]}]\n[${this.data[1]} ${this.data[3]} ${this.data[5]}]\n[0 0 1]\n`}}class q{constructor(){this._transforms=[],this._currentTransform=H.identity()}save(){this._transforms.push(this._currentTransform),this._currentTransform=this._currentTransform.clone()}restore(){this._currentTransform=this._transforms.pop()}translate(t,e){return this._currentTransform.translate(t,e)}rotate(t){return this._currentTransform.rotate(t)}scale(t,e){return this._currentTransform.scale(t,e)}set current(t){this._currentTransform=t}get current(){return this._currentTransform}}class Y{constructor(){this._states=[],this._currentState=this._getDefaultState()}_getDefaultState(){return{opacity:1,z:0,tint:k.White}}_cloneState(){return{opacity:this._currentState.opacity,z:this._currentState.z,tint:this._currentState.tint.clone()}}save(){this._states.push(this._currentState),this._currentState=this._cloneState()}restore(){this._currentState=this._states.pop()}get current(){return this._currentState}set current(t){this._currentState=t}}!function(t){t.Kill="kill",t.PreKill="prekill",t.PostKill="postkill",t.PreDraw="predraw",t.PostDraw="postdraw",t.PreDebugDraw="predebugdraw",t.PostDebugDraw="postdebugdraw",t.PreUpdate="preupdate",t.PostUpdate="postupdate",t.PreFrame="preframe",t.PostFrame="postframe",t.PreCollision="precollision",t.CollisionStart="collisionstart",t.CollisionEnd="collisionend",t.PostCollision="postcollision",t.Initialize="initialize",t.Activate="activate",t.Deactivate="deactivate",t.ExitViewport="exitviewport",t.EnterViewport="enterviewport",t.ExitTrigger="exit",t.EnterTrigger="enter",t.Connect="connect",t.Disconnect="disconnect",t.Button="button",t.Axis="axis",t.Visible="visible",t.Hidden="hidden",t.Start="start",t.Stop="stop",t.PointerUp="pointerup",t.PointerDown="pointerdown",t.PointerMove="pointermove",t.PointerEnter="pointerenter",t.PointerLeave="pointerleave",t.PointerCancel="pointercancel",t.PointerWheel="pointerwheel",t.Up="up",t.Down="down",t.Move="move",t.Enter="enter",t.Leave="leave",t.Cancel="cancel",t.Wheel="wheel",t.Press="press",t.Release="release",t.Hold="hold",t.PointerDragStart="pointerdragstart",t.PointerDragEnd="pointerdragend",t.PointerDragEnter="pointerdragenter",t.PointerDragLeave="pointerdragleave",t.PointerDragMove="pointerdragmove"}(b||(b={}));class j{constructor(){this._bubbles=!0}get bubbles(){return this._bubbles}set bubbles(t){this._bubbles=t}stopPropagation(){this.bubbles=!1}}class V extends j{constructor(t){super(),this.target=t}}class K extends j{constructor(t){super(),this.target=t}}class J extends j{constructor(t){super(),this.target=t}}class W extends j{constructor(t){super(),this.target=t}}class X extends j{constructor(t){super(),this.target=t}}class Z extends j{constructor(t,e,i){super(),this.ctx=t,this.delta=e,this.target=i}}class $ extends j{constructor(t,e,i){super(),this.ctx=t,this.delta=e,this.target=i}}class tt extends j{constructor(t,e){super(),this.ctx=t,this.target=e}}class et extends j{constructor(t,e){super(),this.ctx=t,this.target=e}}class it extends j{constructor(t,e,i){super(),this.engine=t,this.delta=e,this.target=i}}class st extends j{constructor(t,e,i){super(),this.engine=t,this.delta=e,this.target=i}}class rt extends j{constructor(t,e){super(),this.engine=t,this.prevStats=e,this.target=t}}class nt extends j{constructor(t,e){super(),this.engine=t,this.stats=e,this.target=t}}class ot extends j{constructor(t,e){super(),this.index=t,this.gamepad=e,this.target=e}}class at extends j{constructor(t,e){super(),this.index=t,this.gamepad=e,this.target=e}}class ht extends j{constructor(t,e,i){super(),this.button=t,this.value=e,this.target=i}}class lt extends j{constructor(t,e,i){super(),this.axis=t,this.value=e,this.target=i}}class At extends j{constructor(t){super(),this.target=t}}class ct extends j{constructor(t){super(),this.target=t}}class dt extends j{constructor(t,e,i,s){super(),this.other=e,this.side=i,this.intersection=s,this.target=t}}class ut extends j{constructor(t,e,i,s){super(),this.other=e,this.side=i,this.intersection=s,this.target=t}get actor(){return this.target}set actor(t){this.target=t}}class gt{constructor(t,e,i){this.target=t,this.other=e,this.contact=i}}class pt{constructor(t,e){this.target=t,this.other=e}}class _t{constructor(t,e,i,s,r){this.target=t,this.other=e,this.side=i,this.intersection=s,this.contact=r}}class ft{constructor(t,e,i,s,r){this.target=t,this.other=e,this.side=i,this.intersection=s,this.contact=r}}class mt extends j{constructor(t,e,i){super(),this.other=e,this.contact=i,this.target=t}get actor(){return this.target}set actor(t){this.target=t}}class Ct extends j{constructor(t,e){super(),this.other=e,this.target=t}get actor(){return this.target}set actor(t){this.target=t}}class yt extends j{constructor(t,e){super(),this.engine=t,this.target=e}}class It extends j{constructor(t,e){super(),this.context=t,this.target=e}}class wt extends j{constructor(t,e){super(),this.context=t,this.target=e}}class vt extends j{constructor(t){super(),this.target=t}}class xt extends j{constructor(t){super(),this.target=t}}class Et extends j{constructor(t,e){super(),this.target=t,this.actor=e}}class Bt extends j{constructor(t,e){super(),this.target=t,this.actor=e}}class bt{constructor(){this._handlers={},this._wiredEventDispatchers=[],this._deferedHandlerRemovals=[]}clear(){this._handlers={},this._wiredEventDispatchers=[]}_processDeferredHandlerRemovals(){for(const t of this._deferedHandlerRemovals)this._removeHandler(t.name,t.handler);this._deferedHandlerRemovals.length=0}emit(t,e){if(this._processDeferredHandlerRemovals(),!t)return;let i,s;if(t=t.toLowerCase(),e||(e=new j),this._handlers[t])for(i=0,s=this._handlers[t].length;i-1&&this._handlers[t].splice(s,1)}else this._handlers[t].length=0}once(t,e){this._processDeferredHandlerRemovals();const i=s=>{const r=s||new j;this.off(t,i),e(r)};this.on(t,i)}wire(t){t._wiredEventDispatchers.push(this)}unwire(t){const e=t._wiredEventDispatchers.indexOf(this);e>-1&&t._wiredEventDispatchers.splice(e,1)}}class Qt{constructor(t,e,i=!0){this.path=t,this.responseType=e,this.bustCache=i,this.data=null,this.logger=S.getInstance(),this.events=new bt}isLoaded(){return null!==this.data}_cacheBust(t){return/\?\w*=\w*/.test(t)?t+="&__="+Date.now():t+="?__="+Date.now(),t}load(){return new Promise(((t,e)=>{if(null!==this.data)return this.logger.debug("Already have data for resource",this.path),this.events.emit("complete",this.data),void t(this.data);const i=new XMLHttpRequest;i.open("GET",this.bustCache?this._cacheBust(this.path):this.path,!0),i.responseType=this.responseType,i.addEventListener("loadstart",(t=>this.events.emit("loadstart",t))),i.addEventListener("progress",(t=>this.events.emit("progress",t))),i.addEventListener("error",(t=>this.events.emit("error",t))),i.addEventListener("load",(t=>this.events.emit("load",t))),i.addEventListener("load",(()=>{if(0!==i.status&&200!==i.status)return this.logger.error("Failed to load resource ",this.path," server responded with error code",i.status),this.events.emit("error",i.response),void e(new Error(i.statusText));this.data=i.response,this.events.emit("complete",this.data),this.logger.debug("Completed loading resource",this.path),t(this.data)})),i.send()}))}}function St(t,e){return t&&void 0===t.__isProxy?new Proxy(t,{set:(t,i,s)=>(t[i]!==s&&(t[i]=s,"string"==typeof i&&"_"!==i[0]&&e(t)),!0),get:(t,e)=>"__isProxy"===e||t[e]}):t}function Dt(t,e){return t&&void 0===t.__isProxy?new Proxy(t,{set:(t,i,s)=>(t[i]=s,"string"==typeof i&&"_"!==i[0]&&e(t),!0),get:(t,e)=>"__isProxy"===e||t[e]}):t}class Tt{constructor(t){var e,i,s,r,n,o;this.id=Tt._ID++,this.transform=H.identity(),this.tint=null,this._transformStale=!0,this.showDebug=!1,this._flipHorizontal=!1,this._flipVertical=!1,this._rotation=0,this.opacity=1,this._scale=w.One,this._origin=null,this._width=0,this._height=0,t&&(this.origin=null!==(e=t.origin)&&void 0!==e?e:this.origin,this.flipHorizontal=null!==(i=t.flipHorizontal)&&void 0!==i?i:this.flipHorizontal,this.flipVertical=null!==(s=t.flipVertical)&&void 0!==s?s:this.flipVertical,this.rotation=null!==(r=t.rotation)&&void 0!==r?r:this.rotation,this.opacity=null!==(n=t.opacity)&&void 0!==n?n:this.opacity,this.scale=null!==(o=t.scale)&&void 0!==o?o:this.scale)}isStale(){return this._transformStale}get flipHorizontal(){return this._flipHorizontal}set flipHorizontal(t){this._flipHorizontal=t,this._transformStale=!0}get flipVertical(){return this._flipVertical}set flipVertical(t){this._flipVertical=t,this._transformStale=!0}get rotation(){return this._rotation}set rotation(t){this._rotation=t,this._transformStale=!0}get scale(){return this._scale}set scale(t){this._scale=St(t,(()=>{this._transformStale=!0})),this._transformStale=!0}get origin(){return this._origin}set origin(t){this._origin=St(t,(()=>{this._transformStale=!0})),this._transformStale=!0}cloneGraphicOptions(){return{origin:this.origin?this.origin.clone():null,flipHorizontal:this.flipHorizontal,flipVertical:this.flipVertical,rotation:this.rotation,opacity:this.opacity,scale:this.scale?this.scale.clone():null}}get width(){return Math.abs(this._width*this.scale.x)}get height(){return Math.abs(this._height*this.scale.y)}set width(t){this._width=t,this._transformStale=!0}set height(t){this._height=t,this._transformStale=!0}get localBounds(){return P.fromDimension(this.width,this.height,w.Zero)}draw(t,e,i){this._preDraw(t,e,i),this._drawImage(t,0,0),this._postDraw(t)}_preDraw(t,e,i){t.save(),t.translate(e,i),this._transformStale&&(this.transform.reset(),this.transform.scale(Math.abs(this.scale.x),Math.abs(this.scale.y)),this._rotate(this.transform),this._flip(this.transform),this._transformStale=!1),t.multiply(this.transform),t.opacity=t.opacity*this.opacity,this.tint&&(t.tint=this.tint)}_rotate(t){var e;const i=this.scale.x>0?1:-1,s=this.scale.y>0?1:-1,r=null!==(e=this.origin)&&void 0!==e?e:v(this.width/2,this.height/2);t.translate(r.x,r.y),t.rotate(this.rotation),t.scale(i,s),t.translate(-r.x,-r.y)}_flip(t){this.flipHorizontal&&(t.translate(this.width/this.scale.x,0),t.scale(-1,1)),this.flipVertical&&(t.translate(0,this.height/this.scale.y),t.scale(1,-1))}_postDraw(t){this.showDebug&&t.debug.drawRect(0,0,this.width,this.height),t.restore()}}Tt._ID=0;class kt extends Tt{constructor(t){var e,i;super(t),this._logger=S.getInstance(),this._dirty=!0,this._logNotLoadedWarning=!1,this.image=t.image;const{width:s,height:r}=t;this.sourceView=null!==(e=t.sourceView)&&void 0!==e?e:{x:0,y:0,width:null!=s?s:0,height:null!=r?r:0},this.destSize=null!==(i=t.destSize)&&void 0!==i?i:{width:null!=s?s:0,height:null!=r?r:0},this._updateSpriteDimensions(),this.image.ready.then((()=>{this._updateSpriteDimensions()}))}static from(t){return new kt({image:t})}get width(){return Math.abs(this.destSize.width*this.scale.x)}get height(){return Math.abs(this.destSize.height*this.scale.y)}set width(t){t/=Math.abs(this.scale.x),this.destSize.width=t,super.width=Math.ceil(this.destSize.width)}set height(t){t/=Math.abs(this.scale.y),this.destSize.height=t,super.height=Math.ceil(this.destSize.height)}_updateSpriteDimensions(){var t,e,i,s,r,n;const{width:o,height:a}=this.image;this.sourceView.width=(null===(t=this.sourceView)||void 0===t?void 0:t.width)||o,this.sourceView.height=(null===(e=this.sourceView)||void 0===e?void 0:e.height)||a,this.destSize.width=(null===(i=this.destSize)||void 0===i?void 0:i.width)||(null===(s=this.sourceView)||void 0===s?void 0:s.width)||o,this.destSize.height=(null===(r=this.destSize)||void 0===r?void 0:r.height)||(null===(n=this.sourceView)||void 0===n?void 0:n.height)||a,this.width=Math.ceil(this.destSize.width)*this.scale.x,this.height=Math.ceil(this.destSize.height)*this.scale.y}_preDraw(t,e,i){this.image.isLoaded()&&this._dirty&&(this._dirty=!1,this._updateSpriteDimensions()),super._preDraw(t,e,i)}_drawImage(t,e,i){this.image.isLoaded()?t.drawImage(this.image.image,this.sourceView.x,this.sourceView.y,this.sourceView.width,this.sourceView.height,e,i,this.destSize.width,this.destSize.height):(this._logNotLoadedWarning||this._logger.warn(`ImageSource ${this.image.path} is not yet loaded and won't be drawn. Please call .load() or include in a Loader.\n\nRead https://excaliburjs.com/docs/imagesource for more information.`),this._logNotLoadedWarning=!0)}clone(){return new kt({image:this.image,sourceView:{...this.sourceView},destSize:{...this.destSize},...this.cloneGraphicOptions()})}}!function(t){t.Pixel="Pixel",t.Blended="Blended"}(Q||(Q={}));class Ft{static register(t){Ft._GL=t,Ft._MAX_TEXTURE_SIZE=t.getParameter(t.MAX_TEXTURE_SIZE)}static get(t){return Ft._TEXTURE_MAP.get(t)}static has(t){return Ft._TEXTURE_MAP.has(t)}static load(t,e,i=!1){const s=Ft._GL;if(!s)return null;let r=null;if(Ft.has(t)&&(r=Ft.get(t)),r)return i&&(s.bindTexture(s.TEXTURE_2D,r),s.texImage2D(s.TEXTURE_2D,0,s.RGBA,s.RGBA,s.UNSIGNED_BYTE,t)),r;r=s.createTexture(),Ft.checkImageSizeSupportedAndLog(t),s.bindTexture(s.TEXTURE_2D,r),s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,s.CLAMP_TO_EDGE);const n=null!=e?e:Ft.filtering;return s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,n===Q.Pixel?s.NEAREST:s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,n===Q.Pixel?s.NEAREST:s.LINEAR),s.texImage2D(s.TEXTURE_2D,0,s.RGBA,s.RGBA,s.UNSIGNED_BYTE,t),Ft._TEXTURE_MAP.set(t,r),r}static delete(t){const e=Ft._GL;if(!e)return null;let i=null;Ft.has(t)&&(i=Ft.get(t),e.deleteTexture(i))}static checkImageSizeSupportedAndLog(t){var e;const i=null!==(e=t.dataset.originalSrc)&&void 0!==e?e:"internal canvas bitmap";return t.width>Ft._MAX_TEXTURE_SIZE||t.height>Ft._MAX_TEXTURE_SIZE?(Ft._LOGGER.error(`The image [${i}] provided to Excalibur is too large for the device's maximum texture size of (${Ft._MAX_TEXTURE_SIZE}x${Ft._MAX_TEXTURE_SIZE}) please resize to an image for excalibur to render properly.\n\nImages will likely render as black rectangles.\n\nRead more here: https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/WebGL_best_practices#understand_system_limits`),!1):((t.width>4096||t.height>4096)&&Ft._LOGGER.warn(`The image [${i}] provided to excalibur is too large may not work on all mobile devices, it is recommended you resize images to a maximum (4096x4096).\n\nImages will likely render as black rectangles on some mobile platforms.\n\nRead more here: https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/WebGL_best_practices#understand_system_limits`),!0)}}Ft._LOGGER=S.getInstance(),Ft.filtering=Q.Blended,Ft._TEXTURE_MAP=new Map,Ft._MAX_TEXTURE_SIZE=0;class Pt{constructor(t,e=!1,i){this.path=t,this._logger=S.getInstance(),this.data=new Image,this._readyFuture=new R,this.ready=this._readyFuture.promise,this._resource=new Qt(t,"blob",e),this._filtering=i,(t.endsWith(".svg")||t.endsWith(".gif"))&&this._logger.warn(`Image type is not fully supported, you may have mixed results ${t}. Fully supported: jpg, bmp, and png`)}get width(){return this.image.naturalWidth}get height(){return this.image.naturalHeight}isLoaded(){return this._src||(this._src=this.data.src),!!this._src}get image(){return this.data}async load(){if(this.isLoaded())return this.data;try{let t;if(this.path.includes("data:image/"))t=this.path;else{const e=await this._resource.load();t=URL.createObjectURL(e)}const e=new Image,i=new R;e.onload=()=>i.resolve(),e.src=t,e.setAttribute("data-original-src",this.path),await i.promise,this.data=e}catch(t){throw`Error loading ImageSource from path '${this.path}' with error [${t.message}]`}return Ft.load(this.data,this._filtering),this._readyFuture.resolve(this.data),this.data}toSprite(){return kt.from(this)}unload(){this.data=new Image}}class Rt{constructor(t){this._logger=S.getInstance(),this.sprites=[];const{sprites:e,rows:i,columns:s}=t;this.sprites=e,this.rows=null!=i?i:1,this.columns=null!=s?s:this.sprites.length}getSprite(t,e){if(t>=this.columns||t<0)return this._logger.warn(`No sprite exists in the SpriteSheet at (${t}, ${e}), x: ${t} should be between 0 and ${this.columns-1}`),null;if(e>=this.rows||e<0)return this._logger.warn(`No sprite exists in the SpriteSheet at (${t}, ${e}), y: ${e} should be between 0 and ${this.rows-1}`),null;const i=t+e*this.columns;return this.sprites[i]}static fromImageSourceWithSourceViews(t){const e=t.sourceViews.map((e=>new kt({image:t.image,sourceView:e})));return new Rt({sprites:e})}static fromImageSource(t){var e;const i=[];t.spacing=null!==(e=t.spacing)&&void 0!==e?e:{};const{image:s,grid:{rows:r,columns:n,spriteWidth:o,spriteHeight:a},spacing:{originOffset:h,margin:l}}=t,A={x:0,y:0,...h},c={x:0,y:0,...l};for(let t=0;tt.length>e.length?t:e)),s=this._getCharacterSprites(i);let r=0,n=0;for(const t of s)r+=t.width+this.spacing,n=Math.max(n,t.height);return P.fromDimension(r,n*e.length,w.Zero)}_drawImage(t,e,i){let s=0,r=0,n=0;const o=this._text.split("\n");for(const a of o){for(const o of this._getCharacterSprites(a))o.draw(t,e+s,i+r),s+=o.width+this.spacing,n=Math.max(n,o.height);s=0,r+=n}}render(t,e,i,s,r){this._text=e;const n=this.measureText(e);this.width=n.width,this.height=n.height,this.shadow&&(t.save(),t.translate(this.shadow.offset.x,this.shadow.offset.y),this.draw(t,s,r),t.restore()),this.draw(t,s,r)}clone(){return new Mt({alphabet:this.alphabet,spriteSheet:this.spriteSheet,spacing:this.spacing})}}class Lt{constructor(){this.fontSheet="data:image/png;base64,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",this.size=16,this.load()}load(){return this._imageSource=new Pt(this.fontSheet),this._imageSource.load().then((()=>{this._spriteSheet=Rt.fromImageSource({image:this._imageSource,grid:{rows:3,columns:16,spriteWidth:16,spriteHeight:16}}),this._spriteFont=new Mt({alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ,!'&.\"?-()+ ",caseInsensitive:!0,spriteSheet:this._spriteSheet,spacing:-6})}))}write(t,e,i){this._imageSource.isLoaded()&&this._spriteFont.render(t,e,null,i.x,i.y)}}class Nt{constructor(t,e){this._gl=t,this._texture=e}use(){const t=this._gl;t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,this._texture)}disable(){const t=this._gl;t.bindTexture(t.TEXTURE_2D,null)}}class Gt{constructor(t){this.width=t.width,this.height=t.height,this._gl=t.gl,this._setupFramebuffer()}setResolution(t,e){const i=this._gl;this.width=t,this.height=e,i.bindTexture(i.TEXTURE_2D,this._frameTexture),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,this.width,this.height,0,i.RGBA,i.UNSIGNED_BYTE,null)}get frameBuffer(){return this._frameBuffer}get frameTexture(){return this._frameTexture}_setupFramebuffer(){const t=this._gl;this._frameTexture=t.createTexture(),t.bindTexture(t.TEXTURE_2D,this._frameTexture),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,this.width,this.height,0,t.RGBA,t.UNSIGNED_BYTE,null),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE);const e=t.COLOR_ATTACHMENT0;this._frameBuffer=t.createFramebuffer(),t.bindFramebuffer(t.FRAMEBUFFER,this._frameBuffer),t.framebufferTexture2D(t.FRAMEBUFFER,e,t.TEXTURE_2D,this._frameTexture,0),this.disable()}toRenderSource(){return new Nt(this._gl,this._frameTexture)}use(){const t=this._gl;t.bindFramebuffer(t.FRAMEBUFFER,this._frameBuffer),t.viewport(0,0,this.width,this.height)}disable(){const t=this._gl;t.bindFramebuffer(t.FRAMEBUFFER,null),t.bindTexture(t.TEXTURE_2D,null)}}class Ut{static clear(){Ut._GL=null}static register(t){Ut._GL=t}static get gl(){if(!Ut._GL)throw Error("Attempted gl access before init");return Ut._GL}}function zt(t,e){switch(e){case t.FLOAT:return 4;case t.SHORT:case t.UNSIGNED_SHORT:return 2;case t.BYTE:case t.UNSIGNED_BYTE:default:return 1}}function Ot(t,e){switch(e){case t.LOW_FLOAT:case t.HIGH_FLOAT:case t.FLOAT:return 1;case t.FLOAT_VEC2:return 2;case t.FLOAT_VEC3:return 3;case t.FLOAT_VEC4:return 4;case t.BYTE:case t.UNSIGNED_BYTE:case t.UNSIGNED_SHORT:case t.SHORT:default:return 1}}function Ht(t,e){switch(e){case t.LOW_FLOAT:case t.HIGH_FLOAT:case t.FLOAT:case t.FLOAT_VEC2:case t.FLOAT_VEC3:case t.FLOAT_VEC4:return t.FLOAT;case t.BYTE:return t.BYTE;case t.UNSIGNED_BYTE:return t.UNSIGNED_BYTE;case t.SHORT:return t.SHORT;case t.UNSIGNED_SHORT:return t.UNSIGNED_SHORT;default:return t.FLOAT}}class qt{constructor(t){this._gl=Ut.gl,this.uniforms={},this.attributes={},this._compiled=!1;const{vertexSource:e,fragmentSource:i}=t;this.vertexSource=e,this.fragmentSource=i}get compiled(){return this._compiled}use(){this._gl.useProgram(this.program),qt._ACTIVE_SHADER_INSTANCE=this}isCurrentlyBound(){return qt._ACTIVE_SHADER_INSTANCE===this}compile(){const t=this._gl,e=this._compileShader(t,this.vertexSource,t.VERTEX_SHADER),i=this._compileShader(t,this.fragmentSource,t.FRAGMENT_SHADER);this.program=this._createProgram(t,e,i);const s=this.getAttributes();for(const t of s)this.attributes[t.name]=t;const r=this.getUniforms();for(const t of r)this.uniforms[t.name]=t;return this._compiled=!0,this.program}getUniforms(){const t=this._gl,e=t.getProgramParameter(this.program,t.ACTIVE_UNIFORMS),i=[];for(let s=0;sNumber(t)));for(let t=0;t=this._maxLines}hasPendingDraws(){return 0!==this._lineCount}flush(){if(0===this._lineCount)return;const t=this._gl;this._shader.use(),this._layout.use(!0),this._shader.setUniformMatrix("u_matrix",this._context.ortho),t.drawArrays(t.LINES,0,2*this._lineCount),Vt.DrawnImagesCount+=this._lineCount,Vt.DrawCallCount++,this._vertexIndex=0,this._lineCount=0}}class Jt{constructor(){this.type="ex.point",this.priority=0,this._maxPoints=10922,this._pointCount=0,this._vertexIndex=0}initialize(t,e){this._gl=t,this._context=e,this._shader=new qt({vertexSource:"#version 300 es\r\nin vec2 a_position;\r\nin vec4 a_color;\r\nin float a_size;\r\nout lowp vec4 v_color;\r\nuniform mat4 u_matrix;\r\n\r\nvoid main() {\r\n gl_Position = u_matrix * vec4(a_position, 0.0, 1.0);\r\n gl_PointSize = a_size * 2.0;\r\n v_color = a_color;\r\n}",fragmentSource:'#version 300 es\r\n\r\nprecision mediump float;\r\nin lowp vec4 v_color;\r\n\r\nout vec4 fragColor;\r\n\r\nvoid main() {\r\n float r = 0.0, delta = 0.0, alpha = 1.0;\r\n vec2 cxy = 2.0 * gl_PointCoord - 1.0;\r\n r = dot(cxy, cxy);\r\n\r\n delta = fwidth(r);\r\n alpha = 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r);\r\n // "premultiply" the color by alpha\r\n vec4 color = v_color;\r\n color.a = color.a * alpha;\r\n color.rgb = color.rgb * color.a;\r\n fragColor = color;\r\n}'}),this._shader.compile(),this._shader.use(),this._shader.setUniformMatrix("u_matrix",this._context.ortho),this._buffer=new Yt({size:7*this._maxPoints,type:"dynamic"}),this._layout=new jt({shader:this._shader,vertexBuffer:this._buffer,attributes:[["a_position",2],["a_color",4],["a_size",1]]})}draw(t,e,i){this._isFull()&&this.flush(),this._pointCount++;const s=this._context.getTransform(),r=this._context.opacity,n=this._context.snapToPixel,o=s.multiply(t);n&&(o.x=~~(o.x+se),o.y=~~(o.y+se));const a=this._buffer.bufferData;a[this._vertexIndex++]=o.x,a[this._vertexIndex++]=o.y,a[this._vertexIndex++]=e.r/255,a[this._vertexIndex++]=e.g/255,a[this._vertexIndex++]=e.b/255,a[this._vertexIndex++]=e.a*r,a[this._vertexIndex++]=i*Math.max(s.getScaleX(),s.getScaleY())}_isFull(){return this._pointCount>=this._maxPoints}hasPendingDraws(){return 0!==this._pointCount}flush(){if(0===this._pointCount)return;const t=this._gl;this._shader.use(),this._layout.use(!0),this._shader.setUniformMatrix("u_matrix",this._context.ortho),t.drawArrays(t.POINTS,0,this._pointCount),Vt.DrawnImagesCount+=this._pointCount,Vt.DrawCallCount++,this._pointCount=0,this._vertexIndex=0}}class Wt{constructor(t){this._gl=t,this._shader=new qt({vertexSource:"#version 300 es\r\nin vec2 a_position;\r\n\r\nin vec2 a_texcoord;\r\nout vec2 v_texcoord;\r\n\r\nvoid main() {\r\n gl_Position = vec4(a_position, 0.0, 1.0);\r\n\r\n // Pass the texcoord to the fragment shader.\r\n v_texcoord = a_texcoord;\r\n}",fragmentSource:"#version 300 es\r\nprecision mediump float;\r\n\r\n// Passed in from the vertex shader.\r\nin vec2 v_texcoord;\r\n\r\n// The texture.\r\nuniform sampler2D u_texture;\r\n\r\nout vec4 fragColor;\r\n\r\nvoid main() {\r\n fragColor = texture(u_texture, v_texcoord);\r\n}"}),this._shader.compile(),this._buffer=new Yt({type:"static",data:new Float32Array([-1,-1,0,0,-1,1,0,1,1,-1,1,0,1,-1,1,0,-1,1,0,1,1,1,1,1])}),this._layout=new jt({shader:this._shader,vertexBuffer:this._buffer,attributes:[["a_position",2],["a_texcoord",2]]}),this._buffer.upload()}renderWithPostProcessor(t){const e=this._gl;t.getShader().use(),t.getLayout().use(),e.drawArrays(e.TRIANGLES,0,6)}renderToScreen(){const t=this._gl;this._shader.use(),this._layout.use(),t.drawArrays(t.TRIANGLES,0,6)}}class Xt{constructor(t,e){this._gl=Ut.gl,this._logger=S.getInstance();const i=this._gl;this.buffer=i.createBuffer(),i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,this.buffer);const s=6*t;if(e){const e=65535,r=Math.floor((e-1)/4);this.bufferGlType=i.UNSIGNED_SHORT,this.bufferData=new Uint16Array(s),t>r&&this._logger.warn(`Total quads exceeds hardware index buffer limit (uint16), max(${r}) requested quads(${t})`)}else this.bufferData=new Uint32Array(s);let r=0;for(let t=0;te))),this._buffer=new Yt({size:40*this._maxImages,type:"dynamic"}),this._layout=new jt({shader:this._shader,vertexBuffer:this._buffer,attributes:[["a_position",2],["a_opacity",1],["a_texcoord",2],["a_textureIndex",1],["a_tint",4]]}),this._quads=new Xt(this._maxImages,!0)}_transformFragmentSource(t,e){let i=t.replace("%%count%%",e.toString()),s="";for(let t=0;t=this._maxImages||this._textures.length>=this._maxTextures}draw(t,e,i,s,r,n,o,a,h){var l,A,c,d;this._isFull()&&this.flush(),this._imageCount++,this._addImageAsTexture(t);let u=(null==t?void 0:t.width)||s||0,g=(null==t?void 0:t.height)||r||0,p=[0,0,null!==(l=null!=s?s:null==t?void 0:t.width)&&void 0!==l?l:0,null!==(A=null!=r?r:null==t?void 0:t.height)&&void 0!==A?A:0],_=[null!=e?e:1,null!=i?i:1];void 0!==n&&void 0!==o&&void 0!==a&&void 0!==h&&(p=[null!=e?e:1,null!=i?i:1,null!==(c=null!=s?s:null==t?void 0:t.width)&&void 0!==c?c:0,null!==(d=null!=r?r:null==t?void 0:t.height)&&void 0!==d?d:0],_=[n,o],u=a,g=h),e=p[0],i=p[1];const f=p[2],m=p[3],C=this._context.getTransform(),y=this._context.opacity,I=this._context.snapToPixel;let w=v(_[0],_[1]),x=v(_[0]+u,_[1]),E=v(_[0],_[1]+g),B=v(_[0]+u,_[1]+g);w=C.multiply(w),x=C.multiply(x),E=C.multiply(E),B=C.multiply(B),I&&(w.x=~~(w.x+se),w.y=~~(w.y+se),x.x=~~(x.x+se),x.y=~~(x.y+se),E.x=~~(E.x+se),E.y=~~(E.y+se),B.x=~~(B.x+se),B.y=~~(B.y+se));const b=this._context.tint,Q=this._getTextureIdForImage(t),S=t.width||u,D=t.height||g,T=e/S,k=i/D,F=(e+f-.01)/S,P=(i+m-.01)/D,R=this._layout.vertexBuffer.bufferData;R[this._vertexIndex++]=w.x,R[this._vertexIndex++]=w.y,R[this._vertexIndex++]=y,R[this._vertexIndex++]=T,R[this._vertexIndex++]=k,R[this._vertexIndex++]=Q,R[this._vertexIndex++]=b.r/255,R[this._vertexIndex++]=b.g/255,R[this._vertexIndex++]=b.b/255,R[this._vertexIndex++]=b.a,R[this._vertexIndex++]=E.x,R[this._vertexIndex++]=E.y,R[this._vertexIndex++]=y,R[this._vertexIndex++]=T,R[this._vertexIndex++]=P,R[this._vertexIndex++]=Q,R[this._vertexIndex++]=b.r/255,R[this._vertexIndex++]=b.g/255,R[this._vertexIndex++]=b.b/255,R[this._vertexIndex++]=b.a,R[this._vertexIndex++]=x.x,R[this._vertexIndex++]=x.y,R[this._vertexIndex++]=y,R[this._vertexIndex++]=F,R[this._vertexIndex++]=k,R[this._vertexIndex++]=Q,R[this._vertexIndex++]=b.r/255,R[this._vertexIndex++]=b.g/255,R[this._vertexIndex++]=b.b/255,R[this._vertexIndex++]=b.a,R[this._vertexIndex++]=B.x,R[this._vertexIndex++]=B.y,R[this._vertexIndex++]=y,R[this._vertexIndex++]=F,R[this._vertexIndex++]=P,R[this._vertexIndex++]=Q,R[this._vertexIndex++]=b.r/255,R[this._vertexIndex++]=b.g/255,R[this._vertexIndex++]=b.b/255,R[this._vertexIndex++]=b.a}hasPendingDraws(){return 0!==this._imageCount}flush(){if(0===this._imageCount)return;const t=this._gl;this._shader.use(),this._layout.use(!0,40*this._imageCount),this._shader.setUniformMatrix("u_matrix",this._context.ortho),this._bindTextures(t),this._quads.bind(),t.drawElements(t.TRIANGLES,6*this._imageCount,this._quads.bufferGlType,0),Vt.DrawnImagesCount+=this._imageCount,Vt.DrawCallCount++,this._imageCount=0,this._vertexIndex=0,this._textures.length=0}}class $t{constructor(){this.type="ex.rectangle",this.priority=0,this._maxRectangles=10922,this._rectangleCount=0,this._vertexIndex=0}initialize(t,e){this._gl=t,this._context=e,this._shader=new qt({fragmentSource:"#version 300 es\r\n\r\nprecision mediump float;\r\n\r\n// UV coord\r\nin vec2 v_uv;\r\n\r\nin vec2 v_size; // in pixels\r\n\r\n// Color coord to blend with image\r\nin lowp vec4 v_color;\r\n\r\n// Stroke color if used\r\nin lowp vec4 v_strokeColor;\r\n\r\n// Stroke thickness if used\r\nin lowp float v_strokeThickness; // in pixels\r\n\r\n// Opacity\r\nin float v_opacity;\r\n\r\nout vec4 fragColor;\r\n\r\nvoid main() {\r\n // modified from https://stackoverflow.com/questions/59197671/glsl-rounded-rectangle-with-variable-border\r\n vec2 uv = v_uv;\r\n vec2 fragCoord = uv * v_size;\r\n float maxX = v_size.x - v_strokeThickness;\r\n float minX = v_strokeThickness;\r\n float maxY = v_size.y - v_strokeThickness;\r\n float minY = v_strokeThickness;\r\n\r\n if (fragCoord.x < maxX && fragCoord.x > minX &&\r\n fragCoord.y < maxY && fragCoord.y > minY) {\r\n fragColor = v_color;\r\n } else {\r\n fragColor = v_strokeColor;\r\n }\r\n fragColor.a *= v_opacity;\r\n fragColor.rgb *= fragColor.a;\r\n\r\n // vec2 v2CenteredPos = abs(fragCoord - v_size.xy / 2.0);\r\n // vec2 v2HalfShapeSizePx = v_size.xy/2.0 - v_strokeThickness/2.0;\r\n\r\n // float fHalfBorderDist = 0.0;\r\n // float fHalfBorderThickness = 0.0;\r\n\r\n // if (fragCoord.x > max(v_radius, v_strokeThickness) && \r\n // fragCoord.x < v_size.x - max(v_radius, v_strokeThickness))\r\n // {\r\n // fHalfBorderDist = v2CenteredPos.y - v2HalfShapeSizePx.y;\r\n // fHalfBorderThickness = v_strokeThickness / 2.0;\r\n // }\r\n // else if (fragCoord.y > max(v_radius, v_strokeThickness) && \r\n // fragCoord.y < v_size.y - max(v_radius, v_strokeThickness))\r\n // {\r\n // fHalfBorderDist = v2CenteredPos.x - v2HalfShapeSizePx.x;\r\n // fHalfBorderThickness = v_strokeThickness / 2.0;\r\n // }\r\n // else\r\n // {\r\n // vec2 edgeVec = max(vec2(0.0), v_radius - vec2(\r\n // uv.x > 0.5 ? v_size.x - fragCoord.x : fragCoord.x,\r\n // uv.y > 0.5 ? v_size.y - fragCoord.y : fragCoord.y));\r\n \r\n // float ellipse_ab = v_radius-v_strokeThickness;\r\n // vec2 ellipse_isect = (v_strokeThickness > v_radius || v_strokeThickness > v_radius) ? vec2(0.0) :\r\n // edgeVec.xy * ellipse_ab*ellipse_ab / length(ellipse_ab*edgeVec.yx); \r\n \r\n // fHalfBorderThickness = (v_radius - length(ellipse_isect)) / 2.0;\r\n // fHalfBorderDist = length(edgeVec) - (v_radius - fHalfBorderThickness);\r\n // }\r\n\r\n // vec4 v4FromColor = v_strokeColor;\r\n // v4FromColor.rgb *= v4FromColor.a;\r\n // vec4 v4ToColor = vec4(0.0); // background color is transparent\r\n // if (fHalfBorderDist < 0.0) {\r\n // v4ToColor = v_color;\r\n // v4ToColor.rgb *= v4ToColor.a;\r\n // }\r\n\r\n // float mixPct = abs(fHalfBorderDist) - fHalfBorderThickness;\r\n\r\n // vec4 finalColor = mix(v4FromColor, v4ToColor, mixPct);\r\n // gl_FragColor = finalColor;\r\n}",vertexSource:"#version 300 es\r\nin vec2 a_position;\r\n\r\n// UV coordinate\r\nin vec2 a_uv;\r\nout vec2 v_uv;\r\n\r\nin vec2 a_size;\r\nout vec2 v_size;\r\n\r\n// Opacity \r\nin float a_opacity;\r\nout float v_opacity;\r\n\r\nin vec4 a_color;\r\nout vec4 v_color;\r\n\r\nin vec4 a_strokeColor;\r\nout vec4 v_strokeColor;\r\n\r\nin float a_strokeThickness;\r\nout float v_strokeThickness;\r\n\r\nuniform mat4 u_matrix;\r\n\r\n\r\nvoid main() {\r\n // Set the vertex position using the ortho transform matrix\r\n gl_Position = u_matrix * vec4(a_position, 0.0, 1.0);\r\n\r\n // Pass through UV coords\r\n v_uv = a_uv;\r\n // Pass through size\r\n v_size = a_size;\r\n // Pass through the Opacity to the fragment shader\r\n v_opacity = a_opacity;\r\n // Pass through the color to the fragment shader\r\n v_color = a_color;\r\n // Pass through the stroke color to the fragment shader\r\n v_strokeColor = a_strokeColor;\r\n // Pass through the stroke thickenss to the fragment shader\r\n v_strokeThickness = a_strokeThickness;\r\n}"}),this._shader.compile(),this._shader.use(),this._shader.setUniformMatrix("u_matrix",e.ortho),this._buffer=new Yt({size:64*this._maxRectangles,type:"dynamic"}),this._layout=new jt({shader:this._shader,vertexBuffer:this._buffer,attributes:[["a_position",2],["a_uv",2],["a_size",2],["a_opacity",1],["a_color",4],["a_strokeColor",4],["a_strokeThickness",1]]}),this._quads=new Xt(this._maxRectangles,!0)}_isFull(){return this._rectangleCount>=this._maxRectangles}draw(...t){t[0]instanceof w&&t[1]instanceof w?this.drawLine.apply(this,t):this.drawRectangle.apply(this,t)}drawLine(t,e,i,s=1){this._isFull()&&this.flush(),this._rectangleCount++;const r=this._context.getTransform(),n=this._context.opacity,o=this._context.snapToPixel,a=e.sub(t),h=a.size,l=a.normalize().perpendicular(),A=s/2,c=r.multiply(l.scale(A).add(t)),d=r.multiply(l.scale(-A).add(t)),u=r.multiply(l.scale(A).add(e)),g=r.multiply(l.scale(-A).add(e));o&&(c.x=~~(c.x+se),c.y=~~(c.y+se),u.x=~~(u.x+se),u.y=~~(u.y+se),d.x=~~(d.x+se),d.y=~~(d.y+se),g.x=~~(g.x+se),g.y=~~(g.y+se));const p=k.Transparent,_=this._layout.vertexBuffer.bufferData;_[this._vertexIndex++]=c.x,_[this._vertexIndex++]=c.y,_[this._vertexIndex++]=0,_[this._vertexIndex++]=0,_[this._vertexIndex++]=h,_[this._vertexIndex++]=s,_[this._vertexIndex++]=n,_[this._vertexIndex++]=i.r/255,_[this._vertexIndex++]=i.g/255,_[this._vertexIndex++]=i.b/255,_[this._vertexIndex++]=i.a,_[this._vertexIndex++]=p.r/255,_[this._vertexIndex++]=p.g/255,_[this._vertexIndex++]=p.b/255,_[this._vertexIndex++]=p.a,_[this._vertexIndex++]=0,_[this._vertexIndex++]=d.x,_[this._vertexIndex++]=d.y,_[this._vertexIndex++]=0,_[this._vertexIndex++]=1,_[this._vertexIndex++]=h,_[this._vertexIndex++]=s,_[this._vertexIndex++]=n,_[this._vertexIndex++]=i.r/255,_[this._vertexIndex++]=i.g/255,_[this._vertexIndex++]=i.b/255,_[this._vertexIndex++]=i.a,_[this._vertexIndex++]=p.r/255,_[this._vertexIndex++]=p.g/255,_[this._vertexIndex++]=p.b/255,_[this._vertexIndex++]=p.a,_[this._vertexIndex++]=0,_[this._vertexIndex++]=u.x,_[this._vertexIndex++]=u.y,_[this._vertexIndex++]=1,_[this._vertexIndex++]=0,_[this._vertexIndex++]=h,_[this._vertexIndex++]=s,_[this._vertexIndex++]=n,_[this._vertexIndex++]=i.r/255,_[this._vertexIndex++]=i.g/255,_[this._vertexIndex++]=i.b/255,_[this._vertexIndex++]=i.a,_[this._vertexIndex++]=p.r/255,_[this._vertexIndex++]=p.g/255,_[this._vertexIndex++]=p.b/255,_[this._vertexIndex++]=p.a,_[this._vertexIndex++]=0,_[this._vertexIndex++]=g.x,_[this._vertexIndex++]=g.y,_[this._vertexIndex++]=1,_[this._vertexIndex++]=1,_[this._vertexIndex++]=h,_[this._vertexIndex++]=s,_[this._vertexIndex++]=n,_[this._vertexIndex++]=i.r/255,_[this._vertexIndex++]=i.g/255,_[this._vertexIndex++]=i.b/255,_[this._vertexIndex++]=i.a,_[this._vertexIndex++]=p.r/255,_[this._vertexIndex++]=p.g/255,_[this._vertexIndex++]=p.b/255,_[this._vertexIndex++]=p.a,_[this._vertexIndex++]=0}drawRectangle(t,e,i,s,r=k.Transparent,n=0){this._isFull()&&this.flush(),this._rectangleCount++;const o=this._context.getTransform(),a=this._context.opacity,h=this._context.snapToPixel,l=o.multiply(t.add(v(0,0))),A=o.multiply(t.add(v(e,0))),c=o.multiply(t.add(v(e,i))),d=o.multiply(t.add(v(0,i)));h&&(l.x=~~(l.x+se),l.y=~~(l.y+se),A.x=~~(A.x+se),A.y=~~(A.y+se),d.x=~~(d.x+se),d.y=~~(d.y+se),c.x=~~(c.x+se),c.y=~~(c.y+se));const u=this._layout.vertexBuffer.bufferData;u[this._vertexIndex++]=l.x,u[this._vertexIndex++]=l.y,u[this._vertexIndex++]=0,u[this._vertexIndex++]=0,u[this._vertexIndex++]=e,u[this._vertexIndex++]=i,u[this._vertexIndex++]=a,u[this._vertexIndex++]=s.r/255,u[this._vertexIndex++]=s.g/255,u[this._vertexIndex++]=s.b/255,u[this._vertexIndex++]=s.a,u[this._vertexIndex++]=r.r/255,u[this._vertexIndex++]=r.g/255,u[this._vertexIndex++]=r.b/255,u[this._vertexIndex++]=r.a,u[this._vertexIndex++]=n,u[this._vertexIndex++]=d.x,u[this._vertexIndex++]=d.y,u[this._vertexIndex++]=0,u[this._vertexIndex++]=1,u[this._vertexIndex++]=e,u[this._vertexIndex++]=i,u[this._vertexIndex++]=a,u[this._vertexIndex++]=s.r/255,u[this._vertexIndex++]=s.g/255,u[this._vertexIndex++]=s.b/255,u[this._vertexIndex++]=s.a,u[this._vertexIndex++]=r.r/255,u[this._vertexIndex++]=r.g/255,u[this._vertexIndex++]=r.b/255,u[this._vertexIndex++]=r.a,u[this._vertexIndex++]=n,u[this._vertexIndex++]=A.x,u[this._vertexIndex++]=A.y,u[this._vertexIndex++]=1,u[this._vertexIndex++]=0,u[this._vertexIndex++]=e,u[this._vertexIndex++]=i,u[this._vertexIndex++]=a,u[this._vertexIndex++]=s.r/255,u[this._vertexIndex++]=s.g/255,u[this._vertexIndex++]=s.b/255,u[this._vertexIndex++]=s.a,u[this._vertexIndex++]=r.r/255,u[this._vertexIndex++]=r.g/255,u[this._vertexIndex++]=r.b/255,u[this._vertexIndex++]=r.a,u[this._vertexIndex++]=n,u[this._vertexIndex++]=c.x,u[this._vertexIndex++]=c.y,u[this._vertexIndex++]=1,u[this._vertexIndex++]=1,u[this._vertexIndex++]=e,u[this._vertexIndex++]=i,u[this._vertexIndex++]=a,u[this._vertexIndex++]=s.r/255,u[this._vertexIndex++]=s.g/255,u[this._vertexIndex++]=s.b/255,u[this._vertexIndex++]=s.a,u[this._vertexIndex++]=r.r/255,u[this._vertexIndex++]=r.g/255,u[this._vertexIndex++]=r.b/255,u[this._vertexIndex++]=r.a,u[this._vertexIndex++]=n}hasPendingDraws(){return 0!==this._rectangleCount}flush(){if(0===this._rectangleCount)return;const t=this._gl;this._shader.use(),this._layout.use(!0),this._shader.setUniformMatrix("u_matrix",this._context.ortho),this._quads.bind(),t.drawElements(t.TRIANGLES,6*this._rectangleCount,this._quads.bufferGlType,0),Vt.DrawnImagesCount+=this._rectangleCount,Vt.DrawCallCount++,this._rectangleCount=0,this._vertexIndex=0}}class te{constructor(){this.type="ex.circle",this.priority=0,this._maxCircles=10922,this._circleCount=0,this._vertexIndex=0}initialize(t,e){this._gl=t,this._context=e,this._shader=new qt({fragmentSource:"#version 300 es\r\nprecision highp float;\r\n\r\n// UV coord\r\nin vec2 v_uv;\r\n\r\n// Color coord to blend with image\r\nin lowp vec4 v_color;\r\n\r\n// Stroke color if used\r\nin lowp vec4 v_strokeColor;\r\n\r\n// Stroke thickness if used\r\nin lowp float v_strokeThickness;\r\n\r\n// Opacity\r\nin float v_opacity;\r\n\r\nout vec4 fragColor;\r\n\r\nvoid main() {\r\n // make (0, 0) the center the uv \r\n vec2 uv = v_uv * 2.0 - 1.0;\r\n\r\n vec4 color = v_color;\r\n vec4 strokeColor = v_strokeColor;\r\n\r\n // circle border is at radius 1.0 \r\n // dist is > 0 when inside the circle \r\n float d = length(uv);\r\n float dist = 1.0 - length(uv);\r\n\r\n // Fade based on fwidth\r\n float fade = fwidth(dot(uv, uv));\r\n\r\n // if dist is greater than 0 step to 1;\r\n // when we cross this 0 threshold add a smooth fade\r\n float fill = smoothstep(-fade/2.0, fade/2.0, dist);\r\n\r\n // if dist is greater than the stroke thickness step to 1\r\n float stroke = 1.0 - smoothstep(v_strokeThickness, v_strokeThickness + fade, dist);\r\n\r\n strokeColor.a *= fill * stroke;\r\n strokeColor.rgb *= strokeColor.a;\r\n\r\n color.a *= fill * (1.0 - stroke);\r\n color.rgb *= color.a;\r\n\r\n vec4 finalColor = mix(vec4(0.0), (color + strokeColor), fill);\r\n finalColor.rgb = finalColor.rgb * v_opacity;\r\n finalColor.a = finalColor.a * v_opacity;\r\n fragColor = finalColor;\r\n}",vertexSource:"#version 300 es\r\nin vec2 a_position;\r\n\r\n// UV coordinate\r\nin vec2 a_uv;\r\nout vec2 v_uv;\r\n\r\n// Opacity \r\nin float a_opacity;\r\nout float v_opacity;\r\n\r\nin vec4 a_color;\r\nout vec4 v_color;\r\n\r\nin vec4 a_strokeColor;\r\nout vec4 v_strokeColor;\r\n\r\nin float a_strokeThickness;\r\nout float v_strokeThickness;\r\n\r\nuniform mat4 u_matrix;\r\n\r\n\r\nvoid main() {\r\n // Set the vertex position using the ortho transform matrix\r\n gl_Position = u_matrix * vec4(a_position, 0.0, 1.0);\r\n\r\n // Pass through UV coords\r\n v_uv = a_uv;\r\n // Pass through the Opacity to the fragment shader\r\n v_opacity = a_opacity;\r\n // Pass through the color to the fragment shader\r\n v_color = a_color;\r\n // Pass through the stroke color to the fragment shader\r\n v_strokeColor = a_strokeColor;\r\n // Pass through the stroke thickenss to the fragment shader\r\n v_strokeThickness = a_strokeThickness;\r\n}"}),this._shader.compile(),this._shader.use(),this._shader.setUniformMatrix("u_matrix",e.ortho),this._buffer=new Yt({size:56*this._maxCircles,type:"dynamic"}),this._layout=new jt({shader:this._shader,vertexBuffer:this._buffer,attributes:[["a_position",2],["a_uv",2],["a_opacity",1],["a_color",4],["a_strokeColor",4],["a_strokeThickness",1]]}),this._quads=new Xt(this._maxCircles,!0)}_isFull(){return this._circleCount>=this._maxCircles}draw(t,e,i,s=k.Transparent,r=0){this._isFull()&&this.flush(),this._circleCount++;const n=this._context.getTransform(),o=this._context.opacity,a=this._context.snapToPixel,h=n.multiply(t.add(v(-e,-e))),l=n.multiply(t.add(v(e,-e))),A=n.multiply(t.add(v(e,e))),c=n.multiply(t.add(v(-e,e)));a&&(h.x=~~(h.x+se),h.y=~~(h.y+se),l.x=~~(l.x+se),l.y=~~(l.y+se),c.x=~~(c.x+se),c.y=~~(c.y+se),A.x=~~(A.x+se),A.y=~~(A.y+se));const d=this._layout.vertexBuffer.bufferData;d[this._vertexIndex++]=h.x,d[this._vertexIndex++]=h.y,d[this._vertexIndex++]=0,d[this._vertexIndex++]=0,d[this._vertexIndex++]=o,d[this._vertexIndex++]=i.r/255,d[this._vertexIndex++]=i.g/255,d[this._vertexIndex++]=i.b/255,d[this._vertexIndex++]=i.a,d[this._vertexIndex++]=s.r/255,d[this._vertexIndex++]=s.g/255,d[this._vertexIndex++]=s.b/255,d[this._vertexIndex++]=s.a,d[this._vertexIndex++]=r/e,d[this._vertexIndex++]=c.x,d[this._vertexIndex++]=c.y,d[this._vertexIndex++]=0,d[this._vertexIndex++]=1,d[this._vertexIndex++]=o,d[this._vertexIndex++]=i.r/255,d[this._vertexIndex++]=i.g/255,d[this._vertexIndex++]=i.b/255,d[this._vertexIndex++]=i.a,d[this._vertexIndex++]=s.r/255,d[this._vertexIndex++]=s.g/255,d[this._vertexIndex++]=s.b/255,d[this._vertexIndex++]=s.a,d[this._vertexIndex++]=r/e,d[this._vertexIndex++]=l.x,d[this._vertexIndex++]=l.y,d[this._vertexIndex++]=1,d[this._vertexIndex++]=0,d[this._vertexIndex++]=o,d[this._vertexIndex++]=i.r/255,d[this._vertexIndex++]=i.g/255,d[this._vertexIndex++]=i.b/255,d[this._vertexIndex++]=i.a,d[this._vertexIndex++]=s.r/255,d[this._vertexIndex++]=s.g/255,d[this._vertexIndex++]=s.b/255,d[this._vertexIndex++]=s.a,d[this._vertexIndex++]=r/e,d[this._vertexIndex++]=A.x,d[this._vertexIndex++]=A.y,d[this._vertexIndex++]=1,d[this._vertexIndex++]=1,d[this._vertexIndex++]=o,d[this._vertexIndex++]=i.r/255,d[this._vertexIndex++]=i.g/255,d[this._vertexIndex++]=i.b/255,d[this._vertexIndex++]=i.a,d[this._vertexIndex++]=s.r/255,d[this._vertexIndex++]=s.g/255,d[this._vertexIndex++]=s.b/255,d[this._vertexIndex++]=s.a,d[this._vertexIndex++]=r/e}hasPendingDraws(){return 0!==this._circleCount}flush(){if(0===this._circleCount)return;const t=this._gl;this._shader.use(),this._layout.use(!0),this._shader.setUniformMatrix("u_matrix",this._context.ortho),this._quads.bind(),t.drawElements(t.TRIANGLES,6*this._circleCount,this._quads.bufferGlType,0),Vt.DrawnImagesCount+=this._circleCount,Vt.DrawCallCount++,this._circleCount=0,this._vertexIndex=0}}class ee{constructor(t,e,i=100){this.builder=t,this.recycler=e,this.maxObjects=i,this.totalAllocations=0,this.index=0,this.objects=[],this.disableWarnings=!1,this._logger=S.getInstance()}preallocate(){for(let t=0;tnew ie),(t=>(t.priority=0,t.z=0,t.renderer=void 0,t.args=void 0,t)),4e3),this._drawCalls=[],this._postProcessTargets=[],this._postprocessors=[],this._transform=new q,this._state=new Y,this.snapToPixel=!1,this.smoothing=!1,this.backgroundColor=k.ExcaliburBlue,this._alreadyWarnedDrawLifecycle=!1,this.debug=new re(this);const{canvasElement:e,enableTransparency:i,smoothing:s,snapToPixel:r,backgroundColor:n,useDrawSorting:o}=t;if(this.__gl=e.getContext("webgl2",{antialias:null!=s?s:this.smoothing,premultipliedAlpha:!1,alpha:null==i||i,depth:!0,powerPreference:"high-performance"}),!this.__gl)throw Error("Failed to retrieve webgl context from browser");Ut.register(this.__gl),Ft.register(this.__gl),this.snapToPixel=null!=r?r:this.snapToPixel,this.smoothing=null!=s?s:this.smoothing,this.backgroundColor=null!=n?n:this.backgroundColor,this.useDrawSorting=null!=o?o:this.useDrawSorting,this._drawCallPool.disableWarnings=!0,this._drawCallPool.preallocate(),this._init()}get z(){return this._state.current.z}set z(t){this._state.current.z=t}get opacity(){return this._state.current.opacity}set opacity(t){this._state.current.opacity=t}get tint(){return this._state.current.tint}set tint(t){this._state.current.tint=t}get width(){return this.__gl.canvas.width}get height(){return this.__gl.canvas.height}get ortho(){return this._ortho}checkIfResolutionSupported(t){let e=!0;return(t.width>4096||t.height>4096)&&(e=!1),e}_init(){const t=this.__gl;this._ortho=O.ortho(0,t.canvas.width,t.canvas.height,0,400,-400),t.viewport(0,0,t.canvas.width,t.canvas.height),t.clearColor(this.backgroundColor.r/255,this.backgroundColor.g/255,this.backgroundColor.b/255,this.backgroundColor.a),t.clear(t.COLOR_BUFFER_BIT),t.enable(t.BLEND),t.blendEquation(t.FUNC_ADD),t.blendFunc(t.ONE,t.ONE_MINUS_SRC_ALPHA),t.blendEquationSeparate(t.FUNC_ADD,t.FUNC_ADD),t.blendFuncSeparate(t.ONE,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA),this.register(new Zt),this.register(new $t),this.register(new te),this.register(new Jt),this.register(new Kt),this._screenRenderer=new Wt(t),this._renderTarget=new Gt({gl:t,width:t.canvas.width,height:t.canvas.height}),this._postProcessTargets=[new Gt({gl:t,width:t.canvas.width,height:t.canvas.height}),new Gt({gl:t,width:t.canvas.width,height:t.canvas.height})]}register(t){this._renderers.set(t.type,t),t.initialize(this.__gl,this)}get(t){return this._renderers.get(t)}_isCurrentRenderer(t){return!this._currentRenderer||this._currentRenderer===t}beginDrawLifecycle(){this._isDrawLifecycle=!0}endDrawLifecycle(){this._isDrawLifecycle=!1}draw(t,...e){this._isDrawLifecycle||this._alreadyWarnedDrawLifecycle||(this._logger.warn("Attempting to draw outside the the drawing lifecycle (preDraw/postDraw) is not supported and is a source of bugs/errors.\nIf you want to do custom drawing, use Actor.graphics, or any onPreDraw or onPostDraw handler."),this._alreadyWarnedDrawLifecycle=!0);const i=this._renderers.get(t);if(!i)throw Error(`No renderer with name ${t} has been registered`);if(this.useDrawSorting){const s=this._drawCallPool.get();s.z=this._state.current.z,s.priority=i.priority,s.renderer=t,this.getTransform().clone(s.transform),s.state.z=this._state.current.z,s.state.opacity=this._state.current.opacity,s.state.tint=this._state.current.tint,s.args=e,this._drawCalls.push(s)}else this._currentRenderer||(this._currentRenderer=i),this._isCurrentRenderer(i)||this._currentRenderer.flush(),i.draw(...e),this._currentRenderer=i}resetTransform(){this._transform.current=H.identity()}updateViewport(t){const e=this.__gl;this._ortho=this._ortho=O.ortho(0,t.width,t.height,0,400,-400),this._renderTarget.setResolution(e.canvas.width,e.canvas.height),this._postProcessTargets[0].setResolution(e.canvas.width,e.canvas.height),this._postProcessTargets[1].setResolution(e.canvas.width,e.canvas.height)}drawImage(t,e,i,s,r,n,o,a,h){if(0!==s&&0!==r&&0!==a&&0!==h&&0!==t.width&&0!==t.height)return t?void this.draw("ex.image",t,e,i,s,r,n,o,a,h):(S.getInstance().warn("Cannot draw a null or undefined image"),void(console.trace&&console.trace()))}drawLine(t,e,i,s=1){this.draw("ex.rectangle",t,e,i,s)}drawRectangle(t,e,i,s,r,n){this.draw("ex.rectangle",t,e,i,s,r,n)}drawCircle(t,e,i,s,r){this.draw("ex.circle",t,e,i,s,r)}save(){this._transform.save(),this._state.save()}restore(){this._transform.restore(),this._state.restore()}translate(t,e){this._transform.translate(this.snapToPixel?~~(t+se):t,this.snapToPixel?~~(e+se):e)}rotate(t){this._transform.rotate(t)}scale(t,e){this._transform.scale(t,e)}transform(t){this._transform.current=t}getTransform(){return this._transform.current}multiply(t){this._transform.current.multiply(t,this._transform.current)}addPostProcessor(t){this._postprocessors.push(t),t.initialize(this.__gl)}removePostProcessor(t){const e=this._postprocessors.indexOf(t);-1!==e&&this._postprocessors.splice(e,1)}clearPostProcessors(){this._postprocessors.length=0}clear(){const t=this.__gl;this._renderTarget.use(),t.clearColor(this.backgroundColor.r/255,this.backgroundColor.g/255,this.backgroundColor.b/255,this.backgroundColor.a),t.clear(t.COLOR_BUFFER_BIT)}flush(){const t=this.__gl;if(this._renderTarget.use(),this.useDrawSorting){const t=new Map;for(const[e]of this._renderers){const i=this._drawCalls.findIndex((t=>t.renderer===e));t.set(e,i)}this._drawCalls.sort(((e,i)=>{const s=e.z-i.z,r=t.get(e.renderer)-t.get(i.renderer),n=e.priority-i.priority;return 0===s?0===n?r:n:s}));const e=this._transform.current,i=this._state.current;if(this._drawCalls.length){let t=this._drawCalls[0].renderer,e=this._renderers.get(t);for(let i=0;ivoid 0!==t)).map((t=>"number"==typeof t&&this.snapToPixel?~~t:t));this.__ctx.drawImage.apply(this.__ctx,l),Vt.DrawCallCount++,Vt.DrawnImagesCount=1}drawLine(t,e,i,s=1){this.__ctx.save(),this.__ctx.beginPath(),this.__ctx.strokeStyle=i.toString(),this.__ctx.moveTo(this.snapToPixel?~~(t.x+oe):t.x,this.snapToPixel?~~(t.y+oe):t.y),this.__ctx.lineTo(this.snapToPixel?~~(e.x+oe):e.x,this.snapToPixel?~~(e.y+oe):e.y),this.__ctx.lineWidth=s,this.__ctx.stroke(),this.__ctx.closePath(),this.__ctx.restore()}drawRectangle(t,e,i,s){this.__ctx.save(),this.__ctx.fillStyle=s.toString(),this.__ctx.fillRect(this.snapToPixel?~~(t.x+oe):t.x,this.snapToPixel?~~(t.y+oe):t.y,this.snapToPixel?~~(e+oe):e,this.snapToPixel?~~(i+oe):i),this.__ctx.restore()}drawCircle(t,e,i,s,r){this.__ctx.save(),this.__ctx.beginPath(),s&&(this.__ctx.strokeStyle=s.toString()),r&&(this.__ctx.lineWidth=r),this.__ctx.fillStyle=i.toString(),this.__ctx.arc(this.snapToPixel?~~(t.x+oe):t.x,this.snapToPixel?~~(t.y+oe):t.y,e,0,2*Math.PI),this.__ctx.fill(),s&&this.__ctx.stroke(),this.__ctx.closePath(),this.__ctx.restore()}save(){this.__ctx.save()}restore(){this.__ctx.restore()}translate(t,e){this.__ctx.translate(this.snapToPixel?~~(t+oe):t,this.snapToPixel?~~(e+oe):e)}rotate(t){this.__ctx.rotate(t)}scale(t,e){this.__ctx.scale(t,e)}getTransform(){throw new Error("Not implemented")}multiply(t){this.__ctx.setTransform(this.__ctx.getTransform().multiply(t.toDOMMatrix()))}addPostProcessor(t){}removePostProcessor(t){}clearPostProcessors(){}beginDrawLifecycle(){}endDrawLifecycle(){}clear(){this.__ctx.clearRect(0,0,this.width,this.height),this.__ctx.fillStyle=this.backgroundColor.toString(),this.__ctx.fillRect(0,0,this.width,this.height),Vt.clear()}flush(){}}var le;!function(t){t.Fixed="Fixed",t.FitContainerAndFill="FitContainerAndFill",t.FitScreenAndFill="FitScreenAndFill",t.FitContainerAndZoom="FitContainerAndZoom",t.FitScreenAndZoom="FitScreenAndZoom",t.FitScreen="FitScreen",t.FillScreen="FillScreen",t.FitContainer="FitContainer",t.FillContainer="FillContainer"}(le||(le={}));class Ae{static get SVGA(){return{width:800,height:600}}static get Standard(){return{width:1920,height:1080}}static get Atari2600(){return{width:160,height:192}}static get GameBoy(){return{width:160,height:144}}static get GameBoyAdvance(){return{width:240,height:160}}static get NintendoDS(){return{width:256,height:192}}static get NES(){return{width:256,height:224}}static get SNES(){return{width:256,height:244}}}class ce{constructor(t){var e,i,s;this._antialiasing=!0,this._resolutionStack=[],this._viewportStack=[],this._pixelRatioOverride=null,this._isFullScreen=!1,this._isDisposed=!1,this._logger=S.getInstance(),this._fullscreenChangeHandler=()=>{this._isFullScreen=!this._isFullScreen,this._logger.debug("Fullscreen Change",this._isFullScreen)},this._pixelRatioChangeHandler=()=>{this._logger.debug("Pixel Ratio Change",window.devicePixelRatio),this._listenForPixelRatio(),this._devicePixelRatio=this._calculateDevicePixelRatio(),this.applyResolutionAndViewport()},this._resizeHandler=()=>{const t=this.parent;this._logger.debug("View port resized"),this._setResolutionAndViewportByDisplayMode(t),this.applyResolutionAndViewport()},this._devicePixelRatio=this._calculateDevicePixelRatio(),this._alreadyWarned=!1,this._contentArea=new P,this.viewport=t.viewport,this.resolution=null!==(e=t.resolution)&&void 0!==e?e:{...this.viewport},this._contentResolution=this.resolution,this._displayMode=null!==(i=t.displayMode)&&void 0!==i?i:le.Fixed,this._canvas=t.canvas,this.graphicsContext=t.context,this._antialiasing=null!==(s=t.antialiasing)&&void 0!==s?s:this._antialiasing,this._browser=t.browser,this._pixelRatioOverride=t.pixelRatio,this._applyDisplayMode(),this._listenForPixelRatio(),this._canvas.addEventListener("fullscreenchange",this._fullscreenChangeHandler),this.applyResolutionAndViewport()}_listenForPixelRatio(){this._mediaQueryList&&!this._mediaQueryList.addEventListener&&this._mediaQueryList.removeListener(this._pixelRatioChangeHandler),this._mediaQueryList=this._browser.window.nativeComponent.matchMedia(`(resolution: ${window.devicePixelRatio}dppx)`),this._mediaQueryList.addEventListener?this._mediaQueryList.addEventListener("change",this._pixelRatioChangeHandler,{once:!0}):this._mediaQueryList.addListener(this._pixelRatioChangeHandler)}dispose(){this._isDisposed||(this._isDisposed=!0,this._browser.window.off("resize",this._resizeHandler),this._resizeObserver&&this._resizeObserver.disconnect(),this.parent.removeEventListener("resize",this._resizeHandler),this._mediaQueryList.removeEventListener?this._mediaQueryList.removeEventListener("change",this._pixelRatioChangeHandler):this._mediaQueryList.removeListener(this._pixelRatioChangeHandler),this._canvas.removeEventListener("fullscreenchange",this._fullscreenChangeHandler))}_calculateDevicePixelRatio(){return window.devicePixelRatio<1?1:window.devicePixelRatio||1}get pixelRatio(){return this._pixelRatioOverride?this._pixelRatioOverride:this._devicePixelRatio}get isHiDpi(){return 1!==this.pixelRatio}get displayMode(){return this._displayMode}get canvas(){return this._canvas}get parent(){switch(this.displayMode){case le.FillContainer:case le.FitContainer:case le.FitContainerAndFill:case le.FitContainerAndZoom:return this.canvas.parentElement||document.body;default:return window}}get resolution(){return this._resolution}set resolution(t){this._resolution=t}get viewport(){return this._viewport?this._viewport:this._resolution}set viewport(t){this._viewport=t}get aspectRatio(){return this._resolution.width/this._resolution.height}get scaledWidth(){return this._resolution.width*this.pixelRatio}get scaledHeight(){return this._resolution.height*this.pixelRatio}setCurrentCamera(t){this._camera=t}pushResolutionAndViewport(){this._resolutionStack.push(this.resolution),this._viewportStack.push(this.viewport),this.resolution={...this.resolution},this.viewport={...this.viewport}}peekViewport(){return this._viewportStack[this._viewportStack.length-1]}peekResolution(){return this._resolutionStack[this._resolutionStack.length-1]}popResolutionAndViewport(){this.resolution=this._resolutionStack.pop(),this.viewport=this._viewportStack.pop()}applyResolutionAndViewport(){this._canvas.width=this.scaledWidth,this._canvas.height=this.scaledHeight,this.graphicsContext instanceof ne&&(this.graphicsContext.checkIfResolutionSupported({width:this.scaledWidth,height:this.scaledHeight})||this._alreadyWarned||(this._alreadyWarned=!0,this._logger.warn(`The currently configured resolution (${this.resolution.width}x${this.resolution.height}) and pixel ratio (${this.pixelRatio}) are too large for the platform WebGL implementation, this may work but cause WebGL rendering to behave oddly. Try reducing the resolution or disabling Hi DPI scaling to avoid this (read more here https://excaliburjs.com/docs/screens#understanding-viewport--resolution).`))),this._antialiasing?this._canvas.style.imageRendering="auto":(this._canvas.style.imageRendering="pixelated",""===this._canvas.style.imageRendering&&(this._canvas.style.imageRendering="crisp-edges")),this._canvas.style.width=this.viewport.width+"px",this._canvas.style.height=this.viewport.height+"px",this.graphicsContext.updateViewport(this.resolution),this.graphicsContext.resetTransform(),this.graphicsContext.smoothing=this._antialiasing,this.graphicsContext instanceof he&&this.graphicsContext.scale(this.pixelRatio,this.pixelRatio)}get antialiasing(){return this._antialiasing}set antialiasing(t){this._antialiasing=t,this.graphicsContext.smoothing=this._antialiasing}get isFullScreen(){return this._isFullScreen}goFullScreen(t){if(t){const e=document.getElementById(t);if(e)return e.requestFullscreen()}return this._canvas.requestFullscreen()}exitFullScreen(){return document.exitFullscreen()}pageToScreenCoordinates(t){let e=t.x,i=t.y;if(this._isFullScreen||(e-=M(this._canvas).x,i-=M(this._canvas).y),this._isFullScreen)if(window.innerWidth/this.aspectRatiot?-(h-t)/2+"px":"",this.canvas.style.top=l>e?-(l-e)/2+"px":"",this.viewport={width:h,height:l};const A=P.fromDimension(this.viewport.width,this.viewport.height,w.Zero);if(this.viewport.width>t){const e=(this.viewport.width-t)/this.viewport.width*this.resolution.width;A.top=0,A.left=e/2,A.right=this.resolution.width-e/2,A.bottom=this.resolution.height}if(this.viewport.height>e){const t=(this.viewport.height-e)/this.viewport.height*this.resolution.height;A.top=t/2,A.left=0,A.bottom=this.resolution.height-t/2,A.right=this.resolution.width}this._contentArea=A}_computeFitContainer(){const t=this.aspectRatio;let e=0,i=0;const s=this.canvas.parentElement;s.clientWidth/t{this._resizeHandler()})),this._resizeObserver.observe(this.parent)),this.parent.addEventListener("resize",this._resizeHandler)}_setResolutionAndViewportByDisplayMode(t){this.displayMode===le.FillContainer&&(this.resolution={width:t.clientWidth,height:t.clientHeight},this.viewport=this.resolution),this.displayMode===le.FillScreen&&(document.body.style.margin="0px",document.body.style.overflow="hidden",this.resolution={width:t.innerWidth,height:t.innerHeight},this.viewport=this.resolution),this.displayMode===le.FitScreen&&this._computeFit(),this.displayMode===le.FitContainer&&this._computeFitContainer(),this.displayMode===le.FitScreenAndFill&&this._computeFitScreenAndFill(),this.displayMode===le.FitContainerAndFill&&this._computeFitContainerAndFill(),this.displayMode===le.FitScreenAndZoom&&this._computeFitScreenAndZoom(),this.displayMode===le.FitContainerAndZoom&&this._computeFitContainerAndZoom()}}class de{static create(){return this._INSTANCE||(window.AudioContext||window.webkitAudioContext)&&(this._INSTANCE=new AudioContext),this._INSTANCE}}de._INSTANCE=null;class ue{static unlock(){return new Promise(((t,e)=>{if(ue._UNLOCKED||!de.create())return t(!0);const i=setTimeout((()=>{S.getInstance().warn("Excalibur was unable to unlock the audio context, audio probably will not play in this browser."),t(!1)}),200),s=de.create();s.resume().then((()=>{const e=s.createBuffer(1,1,22050),r=s.createBufferSource();let n=!1;r.buffer=e,r.connect(s.destination),r.onended=()=>n=!0,r.start(0),setTimeout((()=>{!function(t){return!!t.playbackState}(r)?(s.currentTime>0||n)&&(ue._UNLOCKED=!0):r.playbackState!==r.PLAYING_STATE&&r.playbackState!==r.FINISHED_STATE||(ue._UNLOCKED=!0)}),0),clearTimeout(i),t(!0)}),(()=>{e()}))}))}static isUnlocked(){return this._UNLOCKED}}ue._UNLOCKED=!1;class ge{constructor(){this.eventDispatcher=new bt}on(t,e){this.eventDispatcher.on(t,e)}off(t,e){this.eventDispatcher.off(t,e)}emit(t,e){this.eventDispatcher.emit(t,e)}once(t,e){this.eventDispatcher.once(t,e)}}function pe(t,e=k.Red,i,s,r,n,o=1,a="butt"){t.save(),t.beginPath(),t.lineWidth=o,t.lineCap=a,t.strokeStyle=e.toString(),t.moveTo(i,s),t.lineTo(r,n),t.closePath(),t.stroke(),t.restore()}function _e(t,e=k.Red,i){t.beginPath(),t.strokeStyle=e.toString(),t.arc(i.x,i.y,5,0,2*Math.PI),t.closePath(),t.stroke()}function fe(t,e,i,s,r=1){const n=e?e.toString():"blue",o=s.scale(r);t.beginPath(),t.strokeStyle=n,t.moveTo(i.x,i.y),t.lineTo(i.x+o.x,i.y+o.y),t.closePath(),t.stroke()}function me(t,e,i,s,r,n=5,o=k.White,a=null){let h;if("number"==typeof n)h={tl:n,tr:n,br:n,bl:n};else{const t={tl:0,tr:0,br:0,bl:0};for(const e in t)if(t.hasOwnProperty(e)){const i=e;h[i]=n[i]||t[i]}}t.beginPath(),t.moveTo(e+h.tl,i),t.lineTo(e+s-h.tr,i),t.quadraticCurveTo(e+s,i,e+s,i+h.tr),t.lineTo(e+s,i+r-h.br),t.quadraticCurveTo(e+s,i+r,e+s-h.br,i+r),t.lineTo(e+h.bl,i+r),t.quadraticCurveTo(e,i+r,e,i+r-h.bl),t.lineTo(e,i+h.tl),t.quadraticCurveTo(e,i,e+h.tl,i),t.closePath(),a&&(t.fillStyle=a.toString(),t.fill()),o&&(t.strokeStyle=o.toString(),t.stroke())}function Ce(t,e,i,s,r=k.White,n=null){t.beginPath(),t.arc(e,i,s,0,2*Math.PI),t.closePath(),n&&(t.fillStyle=n.toString(),t.fill()),r&&(t.strokeStyle=r.toString(),t.stroke())}var ye=n(1388);class Ie extends Tt{constructor(t){var e,i,s,r,n,o,a,h,l,A;super(t),this.filtering=null,this.lineCap="butt",this.quality=1,this._dirty=!0,this._smoothing=!1,this._color=St(k.Black,(()=>this.flagDirty())),this._lineWidth=1,this._lineDash=[],this._padding=0,t&&(this.quality=null!==(e=t.quality)&&void 0!==e?e:this.quality,this.color=null!==(i=t.color)&&void 0!==i?i:k.Black,this.strokeColor=null==t?void 0:t.strokeColor,this.smoothing=null!==(s=t.smoothing)&&void 0!==s?s:this.smoothing,this.lineWidth=null!==(r=t.lineWidth)&&void 0!==r?r:this.lineWidth,this.lineDash=null!==(n=t.lineDash)&&void 0!==n?n:this.lineDash,this.lineCap=null!==(o=t.lineCap)&&void 0!==o?o:this.lineCap,this.padding=null!==(a=t.padding)&&void 0!==a?a:this.padding,this.filtering=null!==(h=t.filtering)&&void 0!==h?h:this.filtering),this._bitmap=document.createElement("canvas");const c=null!==(l=null==t?void 0:t.width)&&void 0!==l?l:this._bitmap.width,d=null!==(A=null==t?void 0:t.height)&&void 0!==A?A:this._bitmap.height;this.width=c,this.height=d;const u=this._bitmap.getContext("2d");if(!u)throw new Error("Browser does not support 2d canvas drawing, cannot create Raster graphic");this._ctx=u}cloneRasterOptions(){return{color:this.color?this.color.clone():null,strokeColor:this.strokeColor?this.strokeColor.clone():null,smoothing:this.smoothing,lineWidth:this.lineWidth,lineDash:this.lineDash,lineCap:this.lineCap,quality:this.quality,padding:this.padding}}get dirty(){return this._dirty}flagDirty(){this._dirty=!0}get width(){return Math.abs(this._getTotalWidth()*this.scale.x)}set width(t){t/=Math.abs(this.scale.x),this._bitmap.width=t,this._originalWidth=t,this.flagDirty()}get height(){return Math.abs(this._getTotalHeight()*this.scale.y)}set height(t){t/=Math.abs(this.scale.y),this._bitmap.height=t,this._originalHeight=t,this.flagDirty()}_getTotalWidth(){var t;return 1*((null!==(t=this._originalWidth)&&void 0!==t?t:this._bitmap.width)+2*this.padding)}_getTotalHeight(){var t;return 1*((null!==(t=this._originalHeight)&&void 0!==t?t:this._bitmap.height)+2*this.padding)}get localBounds(){return P.fromDimension(this._getTotalWidth()*this.scale.x,this._getTotalHeight()*this.scale.y,w.Zero)}get smoothing(){return this._smoothing}set smoothing(t){this._smoothing=t,this.flagDirty()}get color(){return this._color}set color(t){this.flagDirty(),this._color=St(t,(()=>this.flagDirty()))}get strokeColor(){return this._strokeColor}set strokeColor(t){this.flagDirty(),this._strokeColor=St(t,(()=>this.flagDirty()))}get lineWidth(){return this._lineWidth}set lineWidth(t){this._lineWidth=t,this.flagDirty()}get lineDash(){return this._lineDash}set lineDash(t){this._lineDash=t,this.flagDirty()}get padding(){return this._padding}set padding(t){this._padding=t,this.flagDirty()}rasterize(){this._dirty=!1,this._ctx.clearRect(0,0,this._getTotalWidth(),this._getTotalHeight()),this._ctx.save(),this._applyRasterProperties(this._ctx),this.execute(this._ctx),this._ctx.restore(),Ft.load(this._bitmap,this.filtering,!0)}_applyRasterProperties(t){var e,i,s;this._bitmap.width=this._getTotalWidth()*this.quality,this._bitmap.height=this._getTotalHeight()*this.quality,t.scale(this.quality,this.quality),t.translate(this.padding,this.padding),t.imageSmoothingEnabled=this.smoothing,t.lineWidth=this.lineWidth,t.setLineDash(null!==(e=this.lineDash)&&void 0!==e?e:t.getLineDash()),t.lineCap=this.lineCap,t.strokeStyle=null===(i=this.strokeColor)||void 0===i?void 0:i.toString(),t.fillStyle=null===(s=this.color)||void 0===s?void 0:s.toString()}_drawImage(t,e,i){this._dirty&&this.rasterize(),t.scale(1/this.quality,1/this.quality),t.drawImage(this._bitmap,e,i)}}class we extends Ie{constructor(t){super(t),this._options=t}get ctx(){return this._ctx}clone(){return new we({...this._options,...this.cloneGraphicOptions(),...this.cloneRasterOptions()})}execute(t){var e,i;(null===(e=this._options)||void 0===e?void 0:e.draw)&&(null===(i=this._options)||void 0===i||i.draw(t)),this._options.cache||this.flagDirty()}}class ve{}ve.type={any:"",blob:"blob",json:"json",text:"text",document:"document",arraybuffer:"arraybuffer"};class xe{constructor(){this.states=new Map}get currentState(){return this._currentState}set currentState(t){this._currentState=t}static create(t,e){const i=new xe;i.data=e;for(const e in t.states)i.states.set(e,{name:e,...t.states[e]});for(const t of i.states.values())for(const e of t.transitions)if("*"!==e&&!i.states.has(e))throw Error(`Invalid state machine, state [${t.name}] has a transition to another state that doesn't exist [${e}]`);return i.currentState=i.startState=i.states.get(t.start),i}in(t){return this.currentState.name===t}go(t,e){var i,s;if(this.currentState.transitions.includes(t)||this.currentState.transitions.includes("*")){const r=this.states.get(t);return(!this.currentState.onExit||!1!==(null===(i=this.currentState)||void 0===i?void 0:i.onExit({to:r.name,data:this.data})))&&((!(null==r?void 0:r.onEnter)||!1!==(null==r?void 0:r.onEnter({from:this.currentState.name,eventData:e,data:this.data})))&&(this.currentState=r,(null===(s=this.currentState)||void 0===s?void 0:s.onState)&&this.currentState.onState(),!0))}return!1}update(t){this.currentState.onUpdate&&this.currentState.onUpdate(this.data,t)}save(t){localStorage.setItem(t,JSON.stringify({currentState:this.currentState.name,data:this.data}))}restore(t){const e=JSON.parse(localStorage.getItem(t));this.currentState=this.states.get(e.currentState),this.data=e.data}}class Ee{constructor(t){this._src=t,this._audioContext=de.create(),this._volumeNode=this._audioContext.createGain(),this._playingPromise=new Promise((t=>{this._playingResolve=t})),this._stateMachine=xe.create({start:"STOPPED",states:{PLAYING:{onEnter:({data:t})=>{this._createNewBufferSource(),this._handleEnd(),this._instance.start(0,t.pausedAt*this._playbackRate,this.duration),t.startedAt=this._audioContext.currentTime-t.pausedAt,t.pausedAt=0},onState:()=>this._playStarted(),onExit:({to:t})=>{"STOPPED"===t&&this._playingResolve(!0),this._instance.onended=null,this._instance.disconnect(),this._instance.stop(0),this._instance=null},transitions:["STOPPED","PAUSED","SEEK"]},SEEK:{onEnter:({eventData:t,data:e})=>{e.pausedAt=(null!=t?t:0)/this._playbackRate,e.startedAt=0},transitions:["*"]},STOPPED:{onEnter:({data:t})=>{t.pausedAt=0,t.startedAt=0,this._playingResolve(!0)},transitions:["PLAYING","PAUSED","SEEK"]},PAUSED:{onEnter:({data:t})=>{t.pausedAt=this._audioContext.currentTime-t.startedAt},transitions:["PLAYING","STOPPED","SEEK"]}}},{startedAt:0,pausedAt:0}),this._volume=1,this._loop=!1,this._playStarted=()=>{},this._playbackRate=1,this._createNewBufferSource()}_createNewBufferSource(){this._instance=this._audioContext.createBufferSource(),this._instance.buffer=this._src,this._instance.loop=this.loop,this._instance.playbackRate.value=this._playbackRate,this._instance.connect(this._volumeNode),this._volumeNode.connect(this._audioContext.destination)}_handleEnd(){this.loop||(this._instance.onended=()=>{this._playingResolve(!0)})}set loop(t){this._loop=t,this._instance&&(this._instance.loop=t,this.loop||(this._instance.onended=()=>{this._playingResolve(!0)}))}get loop(){return this._loop}set volume(t){t=p(t,0,1),this._volume=t,this._stateMachine.in("PLAYING")&&this._volumeNode.gain.setTargetAtTime?this._volumeNode.gain.setTargetAtTime(t,this._audioContext.currentTime,.1):this._volumeNode.gain.value=t}get volume(){return this._volume}get duration(){var t;return null!==(t=this._duration)&&void 0!==t?t:this.getTotalPlaybackDuration()}set duration(t){this._duration=t}isPlaying(){return this._stateMachine.in("PLAYING")}isPaused(){return this._stateMachine.in("PAUSED")||this._stateMachine.in("SEEK")}play(t=(()=>{})){return this._playStarted=t,this._stateMachine.go("PLAYING"),this._playingPromise}pause(){this._stateMachine.go("PAUSED")}stop(){this._stateMachine.go("STOPPED")}seek(t){this._stateMachine.go("PAUSED"),this._stateMachine.go("SEEK",t)}getTotalPlaybackDuration(){return this._src.duration}getPlaybackPosition(){const{pausedAt:t,startedAt:e}=this._stateMachine.data;return t?t*this._playbackRate:e?(this._audioContext.currentTime-e)*this._playbackRate:0}set playbackRate(t){this._instance.playbackRate.value=this._playbackRate=t}get playbackRate(){return this._instance.playbackRate.value}}class Be extends j{constructor(t,e="MediaEvent"){super(),this.target=t,this._name=e}set bubbles(t){}get bubbles(){return!1}get _path(){return null}set _path(t){}stopPropagation(){}action(){}propagate(){}layPath(t){}}class be extends Be{constructor(t,e){super(t,"NativeSoundEvent"),this.track=e}}class Qe extends Be{constructor(t,e){super(t,"NativeSoundProcessedEvent"),this._processedData=e,this.data=this._processedData}}function Se(t){try{const e=new Audio,i=/.*\.([A-Za-z0-9]+)$/,s=t.match(i)[1];return!!e.canPlayType("audio/"+s)}catch(t){return S.getInstance().warn("Cannot determine audio support, assuming no support for the Audio Tag",t),!1}}class De extends ge{constructor(...t){super(),this.logger=S.getInstance(),this._loop=!1,this._volume=1,this._isStopped=!1,this._tracks=[],this._wasPlayingOnHidden=!1,this._playbackRate=1,this._audioContext=de.create(),this._resource=new Qt("",ve.type.arraybuffer);for(const e of t)if(Se(e)){this.path=e;break}this.path||(this.logger.warn("This browser does not support any of the audio files specified:",t.join(", ")),this.logger.warn("Attempting to use",t[0]),this.path=t[0])}set loop(t){this._loop=t;for(const t of this._tracks)t.loop=this._loop;this.logger.debug("Set loop for all instances of sound",this.path,"to",this._loop)}get loop(){return this._loop}set volume(t){this._volume=t;for(const t of this._tracks)t.volume=this._volume;this.emit("volumechange",new be(this)),this.logger.debug("Set loop for all instances of sound",this.path,"to",this._volume)}get volume(){return this._volume}get duration(){return this._duration}set duration(t){this._duration=t}get instances(){return this._tracks}get path(){return this._resource.path}set path(t){this._resource.path=t}isLoaded(){return!!this.data}async load(){var t,e;if(this.data)return this.data;const i=await this._resource.load(),s=await this.decodeAudio(i.slice(0));return this._duration=null!==(e=null!==(t=this._duration)&&void 0!==t?t:null==s?void 0:s.duration)&&void 0!==e?e:void 0,this.emit("processed",new Qe(this,s)),this.data=s}async decodeAudio(t){try{return await this._audioContext.decodeAudioData(t.slice(0))}catch(t){return this.logger.error("Unable to decode this browser may not fully support this format, or the file may be corrupt, if this is an mp3 try removing id3 tags and album art from the file."),await Promise.reject()}}wireEngine(t){t&&(this._engine=t,this._engine.on("hidden",(()=>{t.pauseAudioWhenHidden&&this.isPlaying()&&(this._wasPlayingOnHidden=!0,this.pause())})),this._engine.on("visible",(()=>{t.pauseAudioWhenHidden&&this._wasPlayingOnHidden&&(this.play(),this._wasPlayingOnHidden=!1)})),this._engine.on("start",(()=>{this._isStopped=!1})),this._engine.on("stop",(()=>{this.stop(),this._isStopped=!0})))}instanceCount(){return this._tracks.length}isPlaying(){return this._tracks.some((t=>t.isPlaying()))}isPaused(){return this._tracks.some((t=>t.isPaused()))}play(t){return this.isLoaded()?this._isStopped?(this.logger.warn("Cannot start playing. Engine is in a stopped state."),Promise.resolve(!1)):(this.volume=t||this.volume,this.isPaused()?this._resumePlayback():this._startPlayback()):(this.logger.warn("Cannot start playing. Resource",this.path,"is not loaded yet"),Promise.resolve(!0))}pause(){if(this.isPlaying()){for(const t of this._tracks)t.pause();this.emit("pause",new be(this)),this.logger.debug("Paused all instances of sound",this.path)}}stop(){for(const t of this._tracks)t.stop();this.emit("stop",new be(this)),this._tracks.length=0,this.logger.debug("Stopped all instances of sound",this.path)}get playbackRate(){return this._playbackRate}set playbackRate(t){this._playbackRate=t,this._tracks.forEach((t=>{t.playbackRate=this._playbackRate}))}seek(t,e=0){0===this._tracks.length&&this._getTrackInstance(this.data),this._tracks[e].seek(t)}getTotalPlaybackDuration(){return this.data.duration}getPlaybackPosition(t=0){return this._tracks.length?this._tracks[t].getPlaybackPosition():0}getTrackId(t){return this._tracks.indexOf(t)}async _resumePlayback(){if(this.isPaused){const t=[];for(const e of this._tracks)t.push(e.play().then((()=>(this.emit("playbackend",new be(this,e)),this._tracks.splice(this.getTrackId(e),1),!0))));this.emit("resume",new be(this)),this.logger.debug("Resuming paused instances for sound",this.path,this._tracks),await Promise.all(t)}return!0}async _startPlayback(){const t=await this._getTrackInstance(this.data),e=await t.play((()=>{this.emit("playbackstart",new be(this,t)),this.logger.debug("Playing new instance for sound",this.path)}));return this.emit("playbackend",new be(this,t)),this._tracks.splice(this.getTrackId(t),1),e}_getTrackInstance(t){const e=new Ee(t);return e.loop=this.loop,e.volume=this.volume,e.duration=this.duration,e.playbackRate=this._playbackRate,this._tracks.push(e),e}}class Te extends ge{constructor(t){super(),this.canvas=new we({filtering:Q.Blended,smoothing:!0,cache:!0,draw:this.draw.bind(this)}),this._resourceList=[],this._index=0,this._playButtonShown=!1,this._resourceCount=0,this._numLoaded=0,this._progressCounts={},this._totalCounts={},this.logo="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdQAAAB2CAYAAABxhGI9AAAACXBIWXMAAAsSAAALEgHS3X78AAAKnUlEQVR42u3dP2wjSx0H8N8hJIonIRmJjsq0SBR+BQ1dcqKhe0lD77SvSwpKkJKGPulpktfRIMUdEqKIqV57rpAokM4dbSiyq7ONPTP7x39ifz7SFbnEnp3xer47O7uzH15fXwMA6OYHmgAABCoACFQAEKgAgEAFAIEKAAIVAAQqACBQAUCgAoBABQCBCgAIVAAQqAAgUAFAoAIAAhUABCoACFQAEKgAgECFLbmOiNeFf2PbAyz68Pr6qhUgbRwR92v+/zwiJrYHMEKFMmcN///UtgcQqFBk1PD/97U9Qx8VCFSgu4EmAIEKAAIVAAQqACBQ4Z25jojP8eX+0WtNAgIVaOY+Im5j+eKh24h41jQgUIEyZ7F5NaPU7wCBCiwYd/w9cOB+qAlgJ3KLLow0EV198803RWvJfvfddx+0lhEqHKu5JgAjVCBvlhmFzjQRXUekHz9+TP79y8uLRjNChXfvoePvAYEKxNtj1e42/O5JoIJABcrdRMRVLM+X3kTEpaaB988cKuzWg9EobTWdMx0Oly8uN4dqhAoARqgnaN3arHfqu7OyH8ItKLVB/P+CEfMTHyGPY3npx1m8zWGDEeoBfUk/xdti57dr/r1Wv2+6EPow3tZ5rRdS72s1neuF97xvWd+XTH0/V+UMttDWqbI/r2nrxfp+jv2uSjSO7S+OXy/A/3lN+9xX5T5HxEUPZZ0tfB71+w57eJ/HFu+z+jkv1u92YX9fbI/HhX3JA9rp5MPr66tWaG9UfUGbrHIzi7cLUyYFf/tpTady03EEeL8mUJ6i7MKYNvWNqr4Pe2jradXO60LrvPAz2PQ5RPX684ah8dxD+2zantnCgVipSVV+m/tgB9W2DDq2Sx/vM95wcHhZhWVJm8yrv58cSgfTdc70+++/X/r522+/tUKSEepBqo+om4ZLPerMjUwuNnQCtx1GWJtee1FwdD5uWd86xLs8UaVt2aNEO1/saZ/Z5rYMW4zq6v34rGV9Bg3q2eZ9SkeNm9qwyUh30OPIHYFKx5FG03C7znSOqYBq+qW/zpQ3anH037TNHluG6f0WPsPhHvab4QFty7ogOeuxDYcNy2/zu2214WNYWxmBurNO8bGn97pNBOO8xy/9uCorZZ4I2r4C7aJgO7ZV9iE49Dm6NvOWx+pWE9CUq3zbdTp9doz38TbXtzqH9RT5CyWe422OaZoZGeZCabrhPQY9HjwsjpTvCg4YtlE2+Ta/j2bzn8fqrDqgm+6yUHOmAvWUjAtGhbNYvsBknDnqH1Qhc7VmxHgeb/NbudA5j/UXlYwif2p6luhAc9teu1npiHKnDs8if6tCm7JLX3NKpgttXe9ruc9mHMd7a83iwdxF5vt8tutARaCeklRnNK9C8WnNF7geJQ4T4XG3JhSnVdilQrG+yOnrlVHfsEGYzhNBn7Lu6tS7+HJafJQ4EMiNlNqWXZ9WPvVgnVYHG5M1ByDXkT6leX2EgTqJtyt45yv7S2qO3sEZjZhDLXeR+YKdJ0Zdk8QocvH9N732KrNtq+FZ/zzIHABcJrYpd+Xv14lOd5ap76SgrduW/VTQ1qcQpqnbgu4ifZvUMNpd9XuoZmvCtPaQ2Y/BCHVLgbrJTeRPDdVf6pfMKDU2fOkHmVFFfXr3MsouLsnNvV5kRoe5+s431PeuoKPqWnaurY/ZPBEeqwceN4l96iwO6H7Mjq4y7VGPVNe10VaZMzVCPVWpI/Z6FZbcv5fMqGCU+dLfFGzj58jP8+bCdJCo7yzKTwdOF0bu9Ug7V4c+yz7FJfYeGoysUss0HssIdVZwYLDujMqlESoCdTtGsZtbHnJBeNdDSJSs0jTKdMJN1HNX54Wv7bvsU9NkVJVa13dX+/wuArV0X/l5RHyo/lnfF4G6p6DrS0kHdtXhy35TGErDPYZUn2WfWqDOo/lVqdMD2O/hKJhD7S/odukymq9s02QN4EEPR/zbaOumZc+r15zK1Zqznl9jsfiemTM1QmV3HUuTkedlg9HIQzRbUD93dfC+2tpj2fIHEH2+RqCCQH13gZq7hWXTNpVu19OB1fc9nQ0AKOKUb5lU0P1kDyOneoWk0lOZ9cIP0x7qu8+2BhCoR2wYu1+e7DmaXzBSsu5vaX1ne2zrpmUPTmxf7PM1Dm4y/vC7ny7Nif7+z/9ZmtM0Z3panPLtPmra9f16bcK0Dpbnwk43Vd/RHtu6zfNQTy1QBy3aqG2g9nVmxml+BOoJyT3NpWmn9xhfFnu4bvDa+44BXhqqfdf3uUF9+yz77AT31Yue2mjecYQ62NLfgkA9ghHqLNEhNem4H1c6vdyDxhf/bpz5m4coW/c39wi6VH2bPtHlcaV9cvXts+zxCe6rTeqc2ndL7uGd93QwM9bFcAzMoZZ7SgTBbWx+asui61h/iq1+RmjqdbnQXQ3T1DNQ63V/U9ucqm/pMzPb1rePsk/1iTOjgvatR4W3Lc8ULB78pELyrnAfeTcj1NU509/86mfJ33/8+Mf00a05UyPUEw7UVCeWG/WNEiExyHRMt5ltW30izUPk18ytt7lNfc8i//DvtvXto+ySA5BjljsLUF8lPkqMPEtW1JomDsiGBZ9Byb4NAvUITSN9GuwsIj6t6UTOqk7jJREkmzqli8xIs96udSO20sX0H1vW92IL9e1a9rgqVyf91gbPsTy9UD9n9lOkT8k+RfkFR5PMNqxOcdSf32PBvg3vilO+zdxE+okx9Wm0ph36XYsRZCpMF993GOk5qvqB3Dct6jvssb67KvuUNJ3frw92bhr8/STSF0JdRPMLpUCgnsgo9S76PZ246ZFk1wWvK5m3vVoYvW1Sz7nN91jfXbQ1ZQc7TW6HeaoOalypG/8/p/rP1aNAc6ZHzSnfdqPUPhdy2PQw6Nz9gSVhuhiqueUHR3uu7y7K3rdDX4u46ZrPbUa0IFBZ0seKQ3XQTRt2vm3W/a2DbNKys++rvm3ep6+y1x2UdP3bWU9lzra47U1GmlctX/sQ23t+aOlByLTh/4NAPaCRxtcdO5HLSJ/6vNtCwGx67VPmPbvWd1q9frKHtp4kAqRJ2HR9j762JfX3bZ//elPtj13PPDx1+D5tqk/Xi6NO8SHz7MmH19dXrdBNfVFP6T2PT1UHNit87/t4m5+aRH+nQBdvqyhZDKJLfZs8h7XPsqdV2ZOV+tanKB8aln0dyxdAXbV4j4gvt4oMOrbP6vbU73NW7TMlbdTnPrWpfqXfh9HKZ9vke7KuTeZRNtXRSe6+1FV//ce/ln5eXfsXgcqXzr6+9261M3moOoa7E6nvTZTfy7iNsmfb7kjfgXGsvxe0vihsEts9HTquPpt1q1vtahu2TqAiUAEEKj0zhwoARqgAu/OnX/442WH+9xc/Wvr58re/Tr7f41/+ZsRqhAoACFQAEKgAcHjMoQJskJsz/eqrr5Z+vvr7v5fmQFevAl5lztQIFQAQqAAgUAHgIJlDBdhgdQ41N2eKESoAIFABQKACwFEwhwoARqgAIFABQKACAAIVAAQqAAhUABCoAIBABQCBCgACFQAEKgAgUAFAoAKAQAUAgQoACFQAEKgAIFABQKACAAIVAAQqAAhUABCoAIBABQCBCgACFQAQqAAgUAFAoAKAQAUAlvwPcFDns1DsH4sAAAAASUVORK5CYII=",this.logoWidth=468,this.logoHeight=118,this.loadingBarColor=k.White,this.backgroundColor="#176BAA",this.suppressPlayButton=!1,this._playButtonStyles=ye.Z.toString(),this.playButtonText="Play game",this.startButtonFactory=()=>{let t=document.getElementById("excalibur-play");return t||(t=document.createElement("button")),t.id="excalibur-play",t.textContent=this.playButtonText,t.style.display="none",t},this._loadingFuture=new R,t&&this.addResources(t)}get _image(){return this._imageElement||(this._imageElement=new Image,this._imageElement.src=this.logo),this._imageElement}get playButtonRootElement(){return this._playButtonRootElement}get playButtonElement(){return this._playButtonElement}get _playButton(){const t=document.getElementById("excalibur-play-root");return t&&(this._playButtonRootElement=t),this._playButtonRootElement||(this._playButtonRootElement=document.createElement("div"),this._playButtonRootElement.id="excalibur-play-root",this._playButtonRootElement.style.position="absolute",document.body.appendChild(this._playButtonRootElement)),this._styleBlock||(this._styleBlock=document.createElement("style"),this._styleBlock.textContent=this._playButtonStyles,document.head.appendChild(this._styleBlock)),this._playButtonElement||(this._playButtonElement=this.startButtonFactory(),this._playButtonRootElement.appendChild(this._playButtonElement)),this._playButtonElement}wireEngine(t){this._engine=t,this.canvas.width=this._engine.canvas.width,this.canvas.height=this._engine.canvas.height}addResource(t){const e=this._index++;this._resourceList.push(t),this._progressCounts[e]=0,this._totalCounts[e]=1,this._resourceCount++}addResources(t){let e=0;const i=t.length;for(;e{this._positionPlayButton()};(null===(e=this._engine)||void 0===e?void 0:e.browser)&&this._engine.browser.window.on("resize",t),this._playButtonShown=!0,this._playButton.style.display="block",document.body.addEventListener("keyup",(t=>{"Enter"===t.key&&this._playButton.click()})),this._positionPlayButton();const i=new Promise((e=>{const i=i=>{var s;i.stopPropagation(),this.hidePlayButton(),(null===(s=this._engine)||void 0===s?void 0:s.browser)&&this._engine.browser.window.off("resize",t),e()};this._playButton.addEventListener("click",i),this._playButton.addEventListener("touchend",i),this._playButton.addEventListener("pointerup",i)}));return await i}this.hidePlayButton(),await z(500,null===(t=this._engine)||void 0===t?void 0:t.clock)}hidePlayButton(){this._playButtonShown=!1,this._playButton.style.display="none"}dispose(){this._playButtonRootElement.parentElement&&(this._playButtonRootElement.removeChild(this._playButtonElement),document.body.removeChild(this._playButtonRootElement),document.head.removeChild(this._styleBlock),this._playButtonRootElement=null,this._playButtonElement=null,this._styleBlock=null)}update(t,e){}areResourcesLoaded(){return this._loadingFuture.promise}async load(){var t,e;await(null===(t=this._image)||void 0===t?void 0:t.decode()),this.canvas.flagDirty(),await Promise.all(this._resourceList.map((async t=>{await t.load().finally((()=>{this._numLoaded++,this.canvas.flagDirty()}))})));for(const t of this._resourceList)t instanceof De&&t.wireEngine(this._engine);return this._loadingFuture.resolve(),await z(200,null===(e=this._engine)||void 0===e?void 0:e.clock),this.canvas.flagDirty(),await this.showPlayButton(),await ue.unlock(),this.data=this._resourceList}markResourceComplete(){this._numLoaded++}get progress(){return this._resourceCount>0?p(this._numLoaded,0,this._resourceCount)/this._resourceCount:1}_positionPlayButton(){if(this._engine){const t=this._engine.screen.viewport.height,e=this._engine.screen.viewport.width;if(this._playButtonRootElement){const i=this._engine.canvas.offsetLeft,s=this._engine.canvas.offsetTop,r=this._playButton.clientWidth,n=this._playButton.clientHeight;this.playButtonPosition?(this._playButtonRootElement.style.left=`${this.playButtonPosition.x}px`,this._playButtonRootElement.style.top=`${this.playButtonPosition.y}px`):(this._playButtonRootElement.style.left=i+e/2-r/2+"px",this._playButtonRootElement.style.top=s+t/2-n/2+100+"px")}}}draw(t){const e=this._engine.canvasHeight/this._engine.pixelRatio,i=this._engine.canvasWidth/this._engine.pixelRatio;this._positionPlayButton(),t.fillStyle=this.backgroundColor,t.fillRect(0,0,i,e);let s=e/2;const r=Math.min(this.logoWidth,.75*i);let n=i/2-r/2;this.logoPosition&&(n=this.logoPosition.x,s=this.logoPosition.y);const o=Math.floor(r*(this.logoHeight/this.logoWidth)),a=this._engine.getAntialiasing();if(this._engine.setAntialiasing(!0),this.logoPosition?t.drawImage(this._image,0,0,this.logoWidth,this.logoHeight,n,s,r,o):t.drawImage(this._image,0,0,this.logoWidth,this.logoHeight,n,s-o-20,r,o),!this.suppressPlayButton&&this._playButtonShown)return void this._engine.setAntialiasing(a);let h=n,l=s;this.loadingBarPosition&&(h=this.loadingBarPosition.x,l=this.loadingBarPosition.y),t.lineWidth=2,me(t,h,l,r,20,10,this.loadingBarColor);const A=r*this.progress-10;me(t,h+5,l+5,A>10?A:10,10,5,null,this.loadingBarColor),this._engine.setAntialiasing(a)}}const ke={webgl:"WebGL",webaudio:"WebAudio",gamepadapi:"Gamepad API"};class Fe{constructor(){this._features=null,this.failedTests=[],this._criticalTests={canvasSupport:function(){const t=document.createElement("canvas");return!(!t.getContext||!t.getContext("2d"))},arrayBufferSupport:function(){const t=new XMLHttpRequest;t.open("GET","/");try{t.responseType="arraybuffer"}catch(t){return!1}return"arraybuffer"===t.responseType},dataUrlSupport:function(){return 0===document.createElement("canvas").toDataURL("image/png").indexOf("data:image/png")},objectUrlSupport:function(){return"URL"in window&&"revokeObjectURL"in URL&&"createObjectURL"in URL},rgbaSupport:function(){const t=document.createElement("a").style;return t.cssText="background-color:rgba(150,255,150,.5)",(""+t.backgroundColor).indexOf("rgba")>-1}},this._warningTest={webAudioSupport:function(){return!!(window.AudioContext||window.webkitAudioContext||window.mozAudioContext||window.msAudioContext||window.oAudioContext)},webglSupport:function(){const t=document.createElement("canvas");return!(!t.getContext||!t.getContext("webgl"))}},this._features=this._loadBrowserFeatures()}getBrowserFeatures(){return null===this._features&&(this._features=this._loadBrowserFeatures()),this._features}logBrowserFeatures(){let t="%cSUPPORTED BROWSER FEATURES\n==========================%c\n";const e=["font-weight: bold; color: navy","font-weight: normal; color: inherit"],i=this.getBrowserFeatures();for(const s of Object.keys(ke))i[s]?(t+="(%c✓%c)",e.push("font-weight: bold; color: green"),e.push("font-weight: normal; color: inherit")):(t+="(%c✗%c)",e.push("font-weight: bold; color: red"),e.push("font-weight: normal; color: inherit")),t+=" "+ke[s]+"\n";e.unshift(t),console.log.apply(console,e)}_loadBrowserFeatures(){return{canvas:(()=>this._criticalTests.canvasSupport())(),arraybuffer:(()=>this._criticalTests.arrayBufferSupport())(),dataurl:(()=>this._criticalTests.dataUrlSupport())(),objecturl:(()=>this._criticalTests.objectUrlSupport())(),rgba:(()=>this._criticalTests.rgbaSupport())(),webaudio:(()=>this._warningTest.webAudioSupport())(),webgl:(()=>this._warningTest.webglSupport())(),gamepadapi:!!navigator.getGamepads}}test(){let t=!1;for(const e in this._criticalTests)this._criticalTests[e].call(this)||(this.failedTests.push(e),S.getInstance().error("Critical browser feature missing, Excalibur requires:",e),t=!0);if(t)return!1;for(const t in this._warningTest)this._warningTest[t]()||S.getInstance().warn("Warning browser feature missing, Excalibur will have reduced performance:",t);return!0}}var Pe;!function(t){t.PreventCollision="PreventCollision",t.Passive="Passive",t.Active="Active",t.Fixed="Fixed"}(Pe||(Pe={}));const Re=5,Me={},Le=()=>{for(const t in Me)Me[t]=0},Ne=(t,e)=>{const i=h.isEnabled("suppress-obsolete-message");Me[t]=0;a--)(r=t[a])&&(o=(n<3?r(o):n>3?r(e,i,o):r(e,i))||o);n>3&&o&&Object.defineProperty(e,i,o)}([Ge({message:"Alias for incorrect spelling used in older versions, will be removed in v0.25.0",alternateMethod:"dynamicTreeVelocityMultiplier"})],qe,"dynamicTreeVelocityMultiplyer",null),function(t){t.World="world",t.Screen="screen"}(He||(He={}));class Ye extends w{constructor(t){super(0,0),this._getX=t.getX,this._getY=t.getY,this._setX=t.setX,this._setY=t.setY}get x(){return this._x=this._getX()}set x(t){this._setX(t),this._x=t}get y(){return this._y=this._getY()}set y(t){this._setY(t),this._y=t}}class je extends w{constructor(t,e){super(t.x,t.y),this.original=t,this.change=e}get x(){return this._x=this.original.x}set x(t){this.change(t,this._y),this._x=this.original.x=t}get y(){return this._y=this.original.y}set y(t){this.change(this._x,t),this._y=this.original.y=t}}class Ve{constructor(){this._parent=null,this._children=[],this._pos=v(0,0),this._rotation=0,this._scale=v(1,1),this._isDirty=!1,this._isInverseDirty=!1,this._matrix=H.identity(),this._inverse=H.identity()}get parent(){return this._parent}set parent(t){if(this._parent){const t=this._parent._children.indexOf(this);t>-1&&this._parent._children.splice(t,1)}this._parent=t,this._parent&&this._parent._children.push(this),this.flagDirty()}get children(){return this._children}set pos(t){t.equals(this._pos)||(this._pos.x=t.x,this._pos.y=t.y,this.flagDirty())}get pos(){return new je(this._pos,((t,e)=>{t===this._pos.x&&e===this._pos.y||this.flagDirty()}))}set globalPos(t){let e=t.clone();this.parent&&(e=this.parent.inverse.multiply(t)),e.equals(this._pos)||(this._pos=e,this.flagDirty())}get globalPos(){return new Ye({getX:()=>this.matrix.data[4],getY:()=>this.matrix.data[5],setX:t=>{if(this.parent){const{x:e}=this.parent.inverse.multiply(v(t,this.pos.y));this.pos.x=e}else this.pos.x=t;t!==this.matrix.data[4]&&this.flagDirty()},setY:t=>{if(this.parent){const{y:e}=this.parent.inverse.multiply(v(this.pos.x,t));this.pos.y=e}else this.pos.y=t;t!==this.matrix.data[5]&&this.flagDirty()}})}set rotation(t){const e=_(t);e!==this._rotation&&this.flagDirty(),this._rotation=e}get rotation(){return this._rotation}set globalRotation(t){let e=0;this.parent&&(e=this.parent.globalRotation);const i=_(t+e);i!==this._rotation&&this.flagDirty(),this._rotation=i}get globalRotation(){return this.parent?this.matrix.getRotation():this.rotation}set scale(t){t.equals(this._scale)||(this._scale.x=t.x,this._scale.y=t.y,this.flagDirty())}get scale(){return new je(this._scale,((t,e)=>{t===this._scale.x&&e===this._scale.y||this.flagDirty()}))}set globalScale(t){let e=v(1,1);this.parent&&(e=this.parent.globalScale),this.scale=t.scale(v(1/e.x,1/e.y))}get globalScale(){return new Ye({getX:()=>this.parent?this.matrix.getScaleX():this.scale.x,getY:()=>this.parent?this.matrix.getScaleY():this.scale.y,setX:t=>{if(this.parent){const e=this.parent.globalScale.x;this.scale.x=t/e}else this.scale.x=t},setY:t=>{if(this.parent){const e=this.parent.globalScale.y;this.scale.y=t/e}else this.scale.y=t}})}get matrix(){return this._isDirty&&(null===this.parent?this._matrix=this._calculateMatrix():this._matrix=this.parent.matrix.multiply(this._calculateMatrix()),this._isDirty=!1),this._matrix}get inverse(){return this._isInverseDirty&&(this._inverse=this.matrix.inverse(),this._isInverseDirty=!1),this._inverse}_calculateMatrix(){return H.identity().translate(this.pos.x,this.pos.y).rotate(this.rotation).scale(this.scale.x,this.scale.y)}flagDirty(){this._isDirty=!0,this._isInverseDirty=!0;for(let t=0;t{const e=t.get(Xe);e&&(e._transform.parent=this._transform)},this.zIndexChanged$=new We,this._z=0,this.coordPlane=He.World}get(){return this._transform}onAdd(t){for(const e of t.children)this._addChildTransform(e);t.childrenAdded$.subscribe((t=>this._addChildTransform(t))),t.childrenRemoved$.subscribe((t=>{const e=t.get(Xe);e&&(e._transform.parent=null)}))}onRemove(t){this._transform.parent=null}get z(){return this._z}set z(t){const e=this._z;this._z=t,e!==t&&this.zIndexChanged$.notifyAll(t)}get pos(){return this._transform.pos}set pos(t){this._transform.pos=t}get globalPos(){return this._transform.globalPos}set globalPos(t){this._transform.globalPos=t}get rotation(){return this._transform.rotation}set rotation(t){this._transform.rotation=t}get globalRotation(){return this._transform.globalRotation}set globalRotation(t){this._transform.globalRotation=t}get scale(){return this._transform.scale}set scale(t){this._transform.scale=t}get globalScale(){return this._transform.globalScale}set globalScale(t){this._transform.globalScale=t}applyInverse(t){return this._transform.applyInverse(t)}apply(t){return this._transform.apply(t)}}class Ze extends Ke{constructor(){super(...arguments),this.type="ex.motion",this.vel=w.Zero,this.acc=w.Zero,this.scaleFactor=w.Zero,this.angularVelocity=0,this.torque=0,this.inertia=1}}class $e{constructor(t,e,i){this._name=t,this._category=e,this._mask=i}get name(){return this._name}get category(){return this._category}get mask(){return this._mask}canCollide(t){return 0!=(this.category&t.mask)&&0!=(t.category&this.mask)}invert(){return new $e("~("+this.name+")",~this.category,~this.mask)}static combine(t){const e=t.map((t=>t.name)).join("+"),i=t.reduce(((t,e)=>e.category|t),0);return new $e(e,i,~i)}static collidesWith(t){return $e.combine(t).invert()}}$e.All=new $e("Collide with all groups",-1,-1);class ti{constructor(t,e){this.colliderA=t,this.colliderB=e,this.id=null,this.id=ti.calculatePairHash(t.id,e.id)}static canCollide(t,e){var i,s;const r=null===(i=null==t?void 0:t.owner)||void 0===i?void 0:i.get(bi),n=null===(s=null==e?void 0:e.owner)||void 0===s?void 0:s.get(bi);return!(t.id===e.id||t.owner&&e.owner&&t.owner.id===e.owner.id||t.localBounds.hasZeroDimensions()||e.localBounds.hasZeroDimensions()||!r||!n||!r.group.canCollide(n.group)||r.collisionType===Pe.Fixed&&n.collisionType===Pe.Fixed||n.collisionType===Pe.PreventCollision||r.collisionType===Pe.PreventCollision||!r.active||!n.active)}get canCollide(){const t=this.colliderA,e=this.colliderB;return ti.canCollide(t,e)}collide(){return this.colliderA.collide(this.colliderB)}hasCollider(t){return t===this.colliderA||t===this.colliderB}static calculatePairHash(t,e){return t.valuet.min&&t.max>this.min}getOverlap(t){return this.overlaps(t)?this.max>t.max?t.max-this.min:this.max-t.min:0}}class ii{constructor(t){this.parent=t,this.parent=t||null,this.data=null,this.bounds=new P,this.left=null,this.right=null,this.height=0}isLeaf(){return!this.left&&!this.right}}class si{constructor(t=new P(-Number.MAX_VALUE,-Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE)){this.worldBounds=t,this.root=null,this.nodes={}}_insert(t){if(null===this.root)return this.root=t,void(this.root.parent=null);const e=t.bounds;let i=this.root;for(;!i.isLeaf();){const t=i.left,s=i.right,r=i.bounds.getPerimeter(),n=i.bounds.combine(e).getPerimeter(),o=2*n,a=2*(n-r);let h=0;const l=e.combine(t.bounds);let A,c;t.isLeaf()?h=l.getPerimeter()+a:(c=t.bounds.getPerimeter(),A=l.getPerimeter(),h=A-c+a);let d=0;const u=e.combine(s.bounds);if(s.isLeaf()?d=u.getPerimeter()+a:(c=s.bounds.getPerimeter(),A=u.getPerimeter(),d=A-c+a),o1)return n.left=s,n.parent=s.parent,s.parent=n,n.parent?n.parent.left===s?n.parent.left=n:n.parent.right=n:this.root=n,h.height>l.height?(n.right=h,s.right=l,l.parent=s,s.bounds=r.bounds.combine(l.bounds),n.bounds=s.bounds.combine(h.bounds),s.height=1+Math.max(r.height,l.height),n.height=1+Math.max(s.height,h.height)):(n.right=l,s.right=h,h.parent=s,s.bounds=r.bounds.combine(h.bounds),n.bounds=s.bounds.combine(l.bounds),s.height=1+Math.max(r.height,h.height),n.height=1+Math.max(s.height,l.height)),n;if(A<-1){if(r.left=s,r.parent=s.parent,s.parent=r,r.parent)if(r.parent.left===s)r.parent.left=r;else{if(r.parent.right!==s)throw"Error rotating Dynamic Tree";r.parent.right=r}else this.root=r;return o.height>a.height?(r.right=o,s.left=a,a.parent=s,s.bounds=n.bounds.combine(a.bounds),r.bounds=s.bounds.combine(o.bounds),s.height=1+Math.max(n.height,a.height),r.height=1+Math.max(s.height,o.height)):(r.right=a,s.left=o,o.parent=s,s.bounds=n.bounds.combine(o.bounds),r.bounds=s.bounds.combine(a.bounds),s.height=1+Math.max(n.height,o.height),r.height=1+Math.max(s.height,a.height)),r}return t}getHeight(){return null===this.root?0:this.root.height}query(t,e){const i=t.bounds,s=r=>{if(r&&r.bounds.overlaps(i)){if(!r.isLeaf()||r.data===t)return s(r.left)||s(r.right);if(e.call(t,r.data))return!0}return!1};s(this.root)}rayCastQuery(t,e=1/0,i){const s=r=>{if(r&&r.bounds.rayCast(t,e)){if(!r.isLeaf())return s(r.left)||s(r.right);if(i.call(t,r.data))return!0}return!1};s(this.root)}getNodes(){const t=e=>e?[e].concat(t(e.left),t(e.right)):[];return t(this.root)}debug(t){const e=i=>{i&&(i.isLeaf()?i.bounds.draw(t,k.Green):i.bounds.draw(t,k.White),i.left&&e(i.left),i.right&&e(i.right))};e(this.root)}}class ri{constructor(t,e){this.pos=t,this.dir=e.normalize()}intersect(t){const e=t.begin.sub(this.pos);if(0===this.dir.cross(t.getSlope())&&0!==e.cross(this.dir))return-1;const i=this.dir.cross(t.getSlope());if(0===i)return-1;const s=e.cross(t.getSlope())/i;if(s>=0){const r=e.cross(this.dir)/i/t.getLength();if(r>=0&&r<=1)return s}return-1}intersectPoint(t){const e=this.intersect(t);return e<0?null:this.getPoint(e)}getPoint(t){return this.pos.add(this.dir.scale(t))}}class ni{constructor(){this._dynamicCollisionTree=new si,this._pairs=new Set,this._collisionPairCache=[],this._colliders=[]}getColliders(){return this._colliders}track(t){if(t)if(t instanceof ai){const e=t.getColliders();for(const i of e)i.owner=t.owner,this._colliders.push(i),this._dynamicCollisionTree.trackCollider(i)}else this._colliders.push(t),this._dynamicCollisionTree.trackCollider(t);else S.getInstance().warn("Cannot track null collider")}untrack(t){if(t)if(t instanceof ai){const e=t.getColliders();for(const t of e){const e=this._colliders.indexOf(t);-1!==e&&this._colliders.splice(e,1),this._dynamicCollisionTree.untrackCollider(t)}}else{const e=this._colliders.indexOf(t);-1!==e&&this._colliders.splice(e,1),this._dynamicCollisionTree.untrackCollider(t)}else S.getInstance().warn("Cannot untrack a null collider")}_pairExists(t,e){const i=ti.calculatePairHash(t.id,e.id);return this._pairs.has(i)}broadphase(t,e,i){const s=e/1e3,r=t.filter((t=>{var e,i;const s=null===(e=t.owner)||void 0===e?void 0:e.get(bi);return(null===(i=t.owner)||void 0===i?void 0:i.active)&&s.collisionType!==Pe.PreventCollision}));let n;this._collisionPairCache=[],this._pairs.clear();for(let t=0,e=r.length;t{if(!this._pairExists(n,t)&&ti.canCollide(n,t)){const e=new ti(n,t);this._pairs.add(e.id),this._collisionPairCache.push(e)}return!1}));if(i&&(i.physics.pairs=this._collisionPairCache.length),qe.checkForFastBodies)for(const t of r){const e=t.owner.get(bi);if(e.collisionType!==Pe.Active)continue;const r=e.vel.size*s+.5*e.acc.size*s*s,n=Math.min(t.bounds.height,t.bounds.width);if(qe.disableMinimumSpeedForFastBody||r>n/2){i&&i.physics.fastBodies++;const s=e.globalPos.sub(e.oldPos),n=t.center,o=t.getFurthestPoint(e.vel),a=o.sub(s),h=new ri(a,e.vel);let l;h.pos=h.pos.add(h.dir.scale(-2*qe.surfaceEpsilon));let A=new w(1/0,1/0);if(this._dynamicCollisionTree.rayCastQuery(h,r+2*qe.surfaceEpsilon,(e=>{if(!this._pairExists(t,e)&&ti.canCollide(t,e)){const t=e.rayCast(h,r+10*qe.surfaceEpsilon);if(t){const i=t.sub(a);i.size0)for(const t of r)e.physics.contacts.set(t.id,t)}return e&&(e.physics.collisions+=i.length),i}update(t){let e=0;const i=t.length;for(let s=0;st.combine(e.bounds)),null!==(e=null===(t=i[0])||void 0===t?void 0:t.bounds)&&void 0!==e?e:(new P).translate(this.worldPos))}get localBounds(){var t,e;const i=this.getColliders();return i.reduce(((t,e)=>t.combine(e.localBounds)),null!==(e=null===(t=i[0])||void 0===t?void 0:t.localBounds)&&void 0!==e?e:new P)}get axes(){const t=this.getColliders();let e=[];for(const i of t)e=e.concat(i.axes);return e}getFurthestPoint(t){const e=this.getColliders(),i=[];for(const s of e)i.push(s.getFurthestPoint(t));let s=i[0],r=-Number.MAX_VALUE;for(const e of i){const i=e.dot(t);i>r&&(s=e,r=i)}return s}getInertia(t){const e=this.getColliders();let i=0;for(const s of e)i+=s.getInertia(t);return i}collide(t){let e=[t];t instanceof ai&&(e=t.getColliders());const i=[];for(const t of e)this._dynamicAABBTree.query(t,(e=>(i.push(new ti(t,e)),!1)));let s=[];for(const t of i)s=s.concat(t.collide());return s}getClosestLineBetween(t){const e=this.getColliders(),i=[];if(t instanceof ai){const s=t.getColliders();for(const t of e)for(const e of s){const s=t.getClosestLineBetween(e);s&&i.push(s)}}else for(const s of e){const e=t.getClosestLineBetween(s);e&&i.push(e)}if(i.length){let t=i[0].getLength(),e=i[0];for(const s of i){const i=s.getLength();it.clone())))}}class hi{constructor(t,e){this.begin=t,this.end=e}get slope(){return(this.end.y-this.begin.y)/(this.end.x-this.begin.x)}get intercept(){return this.begin.y-this.slope*this.begin.x}normal(){return this._normal?this._normal:this._normal=this.end.sub(this.begin).normal()}dir(){return this._dir?this._dir:this._dir=this.end.sub(this.begin)}getPoints(){return[this.begin,this.end]}getSlope(){if(this._slope)return this._slope;const t=this.begin,e=this.end,i=t.distance(e);return this._slope=e.sub(t).scale(1/i)}getEdge(){const t=this.begin;return this.end.sub(t)}getLength(){if(this._length)return this._length;const t=this.begin,e=this.end,i=t.distance(e);return this._length=i}get midpoint(){return this.begin.add(this.end).scale(.5)}flip(){return new hi(this.end,this.begin)}below(t){return(this.end.x-this.begin.x)*(t.y-this.begin.y)-(this.end.y-this.begin.y)*(t.x-this.begin.x)>=0}clip(t,e){let i=t;i=i.normalize();const s=i.dot(this.begin)-e,r=i.dot(this.end)-e,n=[];if(s<=0&&n.push(this.begin),r<=0&&n.push(this.end),s*r<0){const t=s/(s-r);n.push(this.begin.add(this.end.sub(this.begin).scale(t)))}return 2!==n.length?null:new hi(n[0],n[1])}distanceToPoint(t,e=!1){const i=t.x,s=t.y,r=this.getLength(),n=((this.end.y-this.begin.y)*i-(this.end.x-this.begin.x)*s+this.end.x*this.begin.y-this.end.y*this.begin.x)/r;return e?n:Math.abs(n)}findVectorToPoint(t){const e=this.begin.sub(t),i=this.getSlope();return e.sub(i.scale(e.dot(i)))}findPoint(t=null,e=null){const i=this.slope,s=this.intercept;if(null!==t)return new w(t,i*t+s);if(null!==e)return new w((e-s)/i,e);throw new Error("You must provide an X or a Y value")}hasPoint(){let t,e=0;if("number"==typeof arguments[0]&&"number"==typeof arguments[1])t=new w(arguments[0],arguments[1]),e=arguments[2]||0;else{if(!(arguments[0]instanceof w))throw"Could not determine the arguments for Vector.hasPoint";t=arguments[0],e=arguments[1]||0}const i=t.x-this.begin.x,s=t.y-this.begin.y,r=this.end.x-this.begin.x,n=this.end.y-this.begin.y,o=i*n-s*r;return!(Math.abs(o)>e)&&(Math.abs(r)>=Math.abs(n)?r>0?this.begin.x<=t.x&&t.x<=this.end.x:this.end.x<=t.x&&t.x<=this.begin.x:n>0?this.begin.y<=t.y&&t.y<=this.end.y:this.end.y<=t.y&&t.y<=this.begin.y)}}function li(t,e,i,s){const r=t.sub(i),n=e.dot(e),o=e.dot(s),a=s.dot(s),h=e.dot(r),l=s.dot(r),A=n*a-o*o;let c=A,d=A;if(0===A||A<=.01){const e=h/o;return new hi(t,i.add(s.scale(e)))}let u=o*l-a*h,g=n*l-o*h;return u<0?(u=0,g=l,d=a):u>c&&(u=c,g=l+o,d=a),g<0?(g=0,-h<0?u=0:-h>n?u=c:(u=-h,c=n)):g>d&&(g=d,-h+o<0?u=0:-h+o>n?u=c:(u=-h+o,c=n)),u=Math.abs(u)<.001?0:u/c,g=Math.abs(g)<.001?0:g/d,new hi(t.add(e.scale(u)),i.add(s.scale(g)))}const Ai={PolygonPolygonClosestLine(t,e){const i=e.worldPos,s=i.sub(t.worldPos),r=s.negate(),n=new ri(t.worldPos,s),o=new ri(i,r),a=t.rayCast(n).add(n.dir.scale(.1)),h=e.rayCast(o).add(o.dir.scale(.1)),l=t.getClosestFace(a),A=e.getClosestFace(h);return li(l.face.begin,l.face.getEdge(),A.face.begin,A.face.getEdge())},PolygonEdgeClosestLine(t,e){const i=e.worldPos.sub(t.worldPos),s=new ri(t.worldPos,i),r=t.rayCast(s).add(s.dir.scale(.1)),n=t.getClosestFace(r),o=n.face.begin,a=n.face.getEdge(),h=e.asLine();return li(o,a,h.begin,h.getEdge())},PolygonCircleClosestLine(t,e){const i=e.worldPos,s=i.sub(t.worldPos),r=new ri(t.worldPos,s.normalize()),n=t.rayCast(r).add(r.dir.scale(.1)),o=t.getClosestFace(n),a=o.face.begin,h=o.face.getEdge();let l=(h.x*(i.x-a.x)+h.y*(i.y-a.y))/(h.x*h.x+h.y*h.y);l>1?l=1:l<0&&(l=0);const A=Math.sqrt(Math.pow(a.x+h.x*l-i.x,2)+Math.pow(a.y+h.y*l-i.y,2))-e.radius,c=(a.x+h.x*l-i.x)*e.radius/(e.radius+A),d=(a.y+h.y*l-i.y)*e.radius/(e.radius+A);return new hi(h.scale(l).add(a),new w(i.x+c,i.y+d))},CircleCircleClosestLine(t,e){const i=e.worldPos.sub(t.worldPos),s=t.worldPos.sub(e.worldPos),r=new ri(t.worldPos,i),n=new ri(e.worldPos,s),o=t.rayCast(r),a=e.rayCast(n);return new hi(o,a)},CircleEdgeClosestLine(t,e){const i=t.worldPos,s=e.asLine(),r=s.begin,n=s.getEdge();let o=(n.x*(i.x-r.x)+n.y*(i.y-r.y))/(n.x*n.x+n.y*n.y);o>1?o=1:o<0&&(o=0);const a=Math.sqrt(Math.pow(r.x+n.x*o-i.x,2)+Math.pow(r.y+n.y*o-i.y,2))-t.radius,h=(r.x+n.x*o-i.x)*t.radius/(t.radius+a),l=(r.y+n.y*o-i.y)*t.radius/(t.radius+a);return new hi(n.scale(o).add(r),new w(i.x+h,i.y+l))},EdgeEdgeClosestLine(t,e){const i=t.asLine(),s=i.begin,r=i.getEdge(),n=e.asLine();return li(s,r,n.begin,n.getEdge())}};class ci extends oi{constructor(t){super(),this.offset=w.Zero,this._globalMatrix=H.identity(),this.offset=t.offset||w.Zero,this.radius=t.radius||0,this._globalMatrix.translate(this.offset.x,this.offset.y)}get worldPos(){return this._globalMatrix.getPosition()}get radius(){var t;const e=this._transform,i=null!==(t=null==e?void 0:e.globalScale)&&void 0!==t?t:w.One;return this._naturalRadius*Math.min(i.x,i.y)}set radius(t){var e;const i=this._transform,s=null!==(e=null==i?void 0:i.globalScale)&&void 0!==e?e:w.One;this._naturalRadius=t/Math.min(s.x,s.y)}clone(){return new ci({offset:this.offset.clone(),radius:this.radius})}get center(){return this._globalMatrix.getPosition()}contains(t){var e,i;return(null!==(i=null===(e=this._transform)||void 0===e?void 0:e.pos)&&void 0!==i?i:this.offset).distance(t)<=this.radius}rayCast(t,e=1/0){const i=this.center,s=t.dir,r=t.pos,n=Math.sqrt(Math.pow(s.dot(r.sub(i)),2)-Math.pow(r.sub(i).distance(),2)+Math.pow(this.radius,2));if(n<0)return null;{let o=0;if(0===n)return o=-s.dot(r.sub(i)),o>0&&o=0&&h.push(o),a>=0&&h.push(a);const l=Math.min(...h);return l<=e?t.getPoint(l):null}}}getClosestLineBetween(t){if(t instanceof ci)return Ai.CircleCircleClosestLine(this,t);if(t instanceof _i)return Ai.PolygonCircleClosestLine(t,this).flip();if(t instanceof pi)return Ai.CircleEdgeClosestLine(this,t).flip();throw new Error("Polygon could not collide with unknown CollisionShape "+typeof t)}collide(t){if(t instanceof ci)return gi.CollideCircleCircle(this,t);if(t instanceof _i)return gi.CollideCirclePolygon(this,t);if(t instanceof pi)return gi.CollideCircleEdge(this,t);throw new Error("Circle could not collide with unknown CollisionShape "+typeof t)}getFurthestPoint(t){return this.center.add(t.normalize().scale(this.radius))}getFurthestLocalPoint(t){return t.normalize().scale(this.radius)}get bounds(){var t,e,i;const s=this._transform,r=null!==(t=null==s?void 0:s.globalScale)&&void 0!==t?t:w.One,n=null!==(e=null==s?void 0:s.globalRotation)&&void 0!==e?e:0,o=null!==(i=null==s?void 0:s.globalPos)&&void 0!==i?i:w.Zero;return new P(this.offset.x-this._naturalRadius,this.offset.y-this._naturalRadius,this.offset.x+this._naturalRadius,this.offset.y+this._naturalRadius).rotate(n).scale(r).translate(o)}get localBounds(){return new P(this.offset.x-this._naturalRadius,this.offset.y-this._naturalRadius,this.offset.x+this._naturalRadius,this.offset.y+this._naturalRadius)}get axes(){return[]}getInertia(t){return t*this.radius*this.radius/2}update(t){var e;this._transform=t,(null!==(e=t.matrix)&&void 0!==e?e:this._globalMatrix).clone(this._globalMatrix),this._globalMatrix.translate(this.offset.x,this.offset.y)}project(t){const e=[],i=this.center.dot(t);return e.push(i),e.push(i+this.radius),e.push(i-this.radius),new ei(Math.min.apply(Math,e),Math.max.apply(Math,e))}debug(t,e){var i,s,r,n;const o=this._transform,a=null!==(i=null==o?void 0:o.globalScale)&&void 0!==i?i:w.One,h=null!==(s=null==o?void 0:o.globalRotation)&&void 0!==s?s:0,l=null!==(r=null==o?void 0:o.globalPos)&&void 0!==r?r:w.Zero;t.save(),t.translate(l.x,l.y),t.rotate(h),t.scale(a.x,a.y),t.drawCircle(null!==(n=this.offset)&&void 0!==n?n:w.Zero,this._naturalRadius,k.Transparent,e,2),t.restore()}}class di{constructor(t,e,i,s,r,n,o,a){var h,l;this._canceled=!1,this.colliderA=t,this.colliderB=e,this.mtv=i,this.normal=s,this.tangent=r,this.points=n,this.localPoints=o,this.info=a,this.id=ti.calculatePairHash(t.id,e.id),(t.__compositeColliderId||e.__compositeColliderId)&&(this.id+="|"+ti.calculatePairHash(null!==(h=t.__compositeColliderId)&&void 0!==h?h:t.id,null!==(l=e.__compositeColliderId)&&void 0!==l?l:e.id))}matchAwake(){const t=this.colliderA.owner.get(bi),e=this.colliderB.owner.get(bi);t&&e&&t.sleeping!==e.sleeping&&(t.sleeping&&t.collisionType!==Pe.Fixed&&e.sleepMotion>=qe.wakeThreshold&&t.setSleeping(!1),e.sleeping&&e.collisionType!==Pe.Fixed&&t.sleepMotion>=qe.wakeThreshold&&e.setSleeping(!1))}isCanceled(){return this._canceled}cancel(){this._canceled=!0}}class ui{static findPolygonPolygonSeparation(t,e){let i=-Number.MAX_VALUE,s=null,r=null,n=-1,o=null;const a=t.getSides(),h=t.getLocalSides();for(let t=0;ti&&(i=c,s=h,r=l,n=t,o=A)}return{collider:t,separation:r?i:99,axis:r,side:s,localSide:h[n],sideId:n,point:o,localPoint:r?e.getFurthestLocalPoint(r.negate()):null}}static findCirclePolygonSeparation(t,e){const i=e.axes,s=e.center.sub(t.worldPos),r=e.getFurthestPoint(s.negate());i.push(r.sub(t.worldPos).normalize());let n=Number.MAX_VALUE,o=null,a=-1;for(let s=0;sr)return[];const o=r-n,a=s.sub(i).normalize(),h=a.perpendicular(),l=a.scale(o),A=t.getFurthestPoint(a),c=t.getFurthestLocalPoint(a);return[new di(t,e,l,a,h,[A],[c],{collider:t,separation:o,axis:a,point:A})]},CollideCirclePolygon(t,e){var i,s;let r=ui.findCirclePolygonSeparation(t,e);if(!r)return[];const n=r.dot(e.center.sub(t.center));r=n<0?r.negate():r;const o=t.getFurthestPoint(r),a=(null!==(s=null===(i=t.owner)||void 0===i?void 0:i.get(Xe))&&void 0!==s?s:new Xe).applyInverse(o),h=r.normalize(),l={collider:t,separation:-r.size,axis:h,point:o,localPoint:a,side:e.findSide(h.negate()),localSide:e.findLocalSide(h.negate())};return[new di(t,e,r,h,h.perpendicular(),[o],[a],l)]},CollideCircleEdge(t,e){const i=t.center,s=e.asLine(),r=s.end.sub(s.begin),n=r.dot(s.end.sub(i)),o=r.dot(i.sub(s.begin)),a=e.asLine(),h=e.asLocalLine();if(o<=0){const r=s.begin.sub(i),n=r.dot(r);if(n>t.radius*t.radius)return[];const o=r.normalize(),l=t.radius-Math.sqrt(n),A={collider:t,separation:l,axis:o,point:a.begin,side:a,localSide:h};return[new di(t,e,o.scale(l),o,o.perpendicular(),[a.begin],[h.begin],A)]}if(n<=0){const r=s.end.sub(i),n=r.dot(r);if(n>t.radius*t.radius)return[];const o=r.normalize(),l=t.radius-Math.sqrt(n),A={collider:t,separation:l,axis:o,point:a.end,side:a,localSide:h};return[new di(t,e,o.scale(l),o,o.perpendicular(),[a.end],[h.end],A)]}const l=r.dot(r),A=s.begin.scale(n).add(s.end.scale(o)).scale(1/l),c=i.sub(A),d=c.dot(c);if(d>t.radius*t.radius)return[];let u=r.perpendicular();u.dot(i.sub(s.begin))<0&&(u.x=-u.x,u.y=-u.y),u=u.normalize();const g=t.radius-Math.sqrt(d),p=u.scale(g),_={collider:t,separation:g,axis:u,point:A,side:a,localSide:h};return[new di(t,e,p,u.negate(),u.negate().perpendicular(),[A],[A.sub(e.worldPos)],_)]},CollideEdgeEdge:()=>[],CollidePolygonEdge(t,e){var i;const s=t.center,r=e.center.sub(s).normalize(),n=new _i({points:[e.begin,e.end,e.end.add(r.scale(100)),e.begin.add(r.scale(100))],offset:e.offset});n.owner=e.owner,(null===(i=e.owner)||void 0===i?void 0:i.get(Xe))&&n.update(e.owner.get(Xe).get());const o=this.CollidePolygonPolygon(t,n);return o.length&&(o[0].colliderB=e,o[0].id=ti.calculatePairHash(t.id,e.id)),o},CollidePolygonPolygon(t,e){var i,s,r,n;const o=ui.findPolygonPolygonSeparation(t,e);if(o.separation>0)return[];const a=ui.findPolygonPolygonSeparation(e,t);if(a.separation>0)return[];const h=o.separation>a.separation?o:a,l=(h.collider===t?e:t).findSide(h.axis.negate()),A=h.side,c=A.dir().normalize(),d=l.clip(c.negate(),-c.dot(A.begin));let u=null;if(d&&(u=d.clip(c,c.dot(A.end))),u){const o=u.getPoints().filter((t=>A.below(t)));let a=h.axis,l=a.perpendicular();e.center.sub(t.center).dot(a)<0&&(a=a.negate(),l=a.perpendicular());let c=[];if(h.collider===t){const t=null!==(s=null===(i=e.owner)||void 0===i?void 0:i.get(Xe))&&void 0!==s?s:new Xe;c=o.map((e=>t.applyInverse(e)))}else{const e=null!==(n=null===(r=t.owner)||void 0===r?void 0:r.get(Xe))&&void 0!==n?n:new Xe;c=o.map((t=>e.applyInverse(t)))}return[new di(t,e,a.scale(-h.separation),a,l,o,c,h)]}return[]},FindContactSeparation(t,e){var i,s,r,n;const o=t.colliderA,a=null!==(s=null===(i=t.colliderA.owner)||void 0===i?void 0:i.get(Xe))&&void 0!==s?s:new Xe,h=t.colliderB,l=null!==(n=null===(r=t.colliderB.owner)||void 0===r?void 0:r.get(Xe))&&void 0!==n?n:new Xe;if(o instanceof ci&&h instanceof ci)return-(o.radius+h.radius-a.pos.distance(l.pos));if(o instanceof _i&&h instanceof _i&&t.info.localSide){let i,s;return t.info.collider===o?(i=new hi(a.apply(t.info.localSide.begin),a.apply(t.info.localSide.end)),s=l.apply(e)):(i=new hi(l.apply(t.info.localSide.begin),l.apply(t.info.localSide.end)),s=a.apply(e)),i.distanceToPoint(s,!0)}if(o instanceof _i&&h instanceof ci||h instanceof _i&&o instanceof ci){const i=a.apply(e);if(t.info.side)return t.info.side.distanceToPoint(i,!0)}if(o instanceof pi&&h instanceof _i||h instanceof pi&&o instanceof _i){let i;if(i=t.info.collider===o?l.apply(e):a.apply(e),t.info.side)return t.info.side.distanceToPoint(i,!0)}if(o instanceof ci&&h instanceof pi||h instanceof ci&&o instanceof pi){const i=l.apply(e);let s;o instanceof ci&&(s=o.getFurthestPoint(t.normal));const r=i.distance(s);if(t.info.side)return r>0?-r:0}return 0}};class pi extends oi{constructor(t){var e;super(),this._globalMatrix=H.identity(),this.begin=t.begin||w.Zero,this.end=t.end||w.Zero,this.offset=null!==(e=t.offset)&&void 0!==e?e:w.Zero}clone(){return new pi({begin:this.begin.clone(),end:this.end.clone()})}get worldPos(){var t;const e=this._transform;return null!==(t=null==e?void 0:e.globalPos.add(this.offset))&&void 0!==t?t:this.offset}get center(){const t=this._getTransformedBegin(),e=this._getTransformedEnd();return t.average(e)}_getTransformedBegin(){return this._globalMatrix.multiply(this.begin)}_getTransformedEnd(){return this._globalMatrix.multiply(this.end)}getSlope(){const t=this._getTransformedBegin(),e=this._getTransformedEnd(),i=t.distance(e);return e.sub(t).scale(1/i)}getLength(){const t=this._getTransformedBegin(),e=this._getTransformedEnd();return t.distance(e)}contains(){return!1}rayCast(t,e=1/0){const i=this._getTransformedBegin().sub(t.pos);if(0===t.dir.cross(this.getSlope())&&0!==i.cross(t.dir))return null;const s=t.dir.cross(this.getSlope());if(0===s)return null;const r=i.cross(this.getSlope())/s;if(r>=0&&r<=e){const e=i.cross(t.dir)/s/this.getLength();if(e>=0&&e<=1)return t.getPoint(r)}return null}getClosestLineBetween(t){if(t instanceof ci)return Ai.CircleEdgeClosestLine(t,this);if(t instanceof _i)return Ai.PolygonEdgeClosestLine(t,this).flip();if(t instanceof pi)return Ai.EdgeEdgeClosestLine(this,t);throw new Error("Polygon could not collide with unknown CollisionShape "+typeof t)}collide(t){if(t instanceof ci)return gi.CollideCircleEdge(t,this);if(t instanceof _i)return gi.CollidePolygonEdge(t,this);if(t instanceof pi)return gi.CollideEdgeEdge();throw new Error("Edge could not collide with unknown CollisionShape "+typeof t)}getFurthestPoint(t){const e=this._getTransformedBegin(),i=this._getTransformedEnd();return t.dot(e)>0?e:i}_boundsFromBeginEnd(t,e,i=10){return new P(Math.min(t.x,e.x)-i,Math.min(t.y,e.y)-i,Math.max(t.x,e.x)+i,Math.max(t.y,e.y)+i)}get bounds(){const t=this._getTransformedBegin(),e=this._getTransformedEnd();return this._boundsFromBeginEnd(t,e)}get localBounds(){return this._boundsFromBeginEnd(this.begin,this.end)}asLine(){return new hi(this._getTransformedBegin(),this._getTransformedEnd())}asLocalLine(){return new hi(this.begin,this.end)}get axes(){const t=this._getTransformedEnd().sub(this._getTransformedBegin()).normal(),e=[];return e.push(t),e.push(t.negate()),e.push(t.normal()),e.push(t.normal().negate()),e}getInertia(t){const e=this.end.sub(this.begin).distance()/2;return t*e*e}update(t){var e;this._transform=t,(null!==(e=t.matrix)&&void 0!==e?e:this._globalMatrix).clone(this._globalMatrix),this._globalMatrix.translate(this.offset.x,this.offset.y)}project(t){const e=[],i=[this._getTransformedBegin(),this._getTransformedEnd()],s=i.length;for(let r=0;rMath.PI&&(h-=2*Math.PI),0===o){if(0===h)return!1;r=h>0?1:-1}else if(r*h<=0)return!1;n+=h}return 1===Math.abs(Math.round(n/(2*Math.PI)))}tessellate(){const t=[];for(let e=1;efi.Polygon(t))))}triangulate(){if(this.points.length<3)throw Error("Invalid polygon");function t(t,e){return t>=e.length?e[t%e.length]:t<0?e[t%e.length+e.length]:e[t]}function e(t,e,i,s){const r=i.sub(e),n=s.sub(i),o=e.sub(s),a=t.sub(e),h=t.sub(i),l=t.sub(s),A=r.cross(a),c=n.cross(h),d=o.cross(l);return!(A>0||c>0||d>0)}const i=[],s=[...this.points],r=C(0,this.points.length-1);for(;r.length>3;)for(let n=0;n0))continue;let u=!0;for(let t=0;tfi.Polygon(t))))}clone(){return new _i({offset:this.offset.clone(),points:this.points.map((t=>t.clone()))})}get worldPos(){return this._transform?this._transform.pos.add(this.offset):this.offset}get center(){return this.bounds.center}_calculateTransformation(){const t=this.points,e=t.length;this._transformedPoints.length=0;for(let i=0;is&&(i=n,s=o)}return i}findLocalSide(t){const e=this.getLocalSides();let i=e[0],s=-Number.MAX_VALUE;for(let r=0;rs&&(i=n,s=o)}return i}get axes(){const t=[],e=this.getSides();for(let i=0;i=0?t+1:t}),0)%2!=0}getClosestLineBetween(t){if(t instanceof ci)return Ai.PolygonCircleClosestLine(this,t);if(t instanceof _i)return Ai.PolygonPolygonClosestLine(this,t);if(t instanceof pi)return Ai.PolygonEdgeClosestLine(this,t);throw new Error("Polygon could not collide with unknown CollisionShape "+typeof t)}collide(t){if(t instanceof ci)return gi.CollideCirclePolygon(t,this);if(t instanceof _i)return gi.CollidePolygonPolygon(this,t);if(t instanceof pi)return gi.CollidePolygonEdge(this,t);throw new Error("Polygon could not collide with unknown CollisionShape "+typeof t)}getFurthestPoint(t){const e=this.getTransformedPoints();let i=null,s=-Number.MAX_VALUE;for(let r=0;rs&&(s=n,i=e[r])}return i}getFurthestLocalPoint(t){const e=this.points;let i=e[0],s=-Number.MAX_VALUE;for(let r=0;rs&&(s=n,i=e[r])}return i}getClosestFace(t){const e=this.getSides();let i=Number.POSITIVE_INFINITY,s=-1,r=-1;for(let n=0;n=0&&s=0?t.getPoint(r):null}project(t){const e=this.getTransformedPoints(),i=e.length;let s=Number.MAX_VALUE,r=-Number.MAX_VALUE;for(let n=0;n=t?[fi.Circle(t/2,v(0,-e/2+t/2).add(i)),fi.Box(t,e-t,w.Half,i),fi.Circle(t/2,v(0,e/2-t/2).add(i))]:[fi.Circle(e/2,v(-t/2+e/2,0).add(i)),fi.Box(t-e,e,w.Half,i),fi.Circle(e/2,v(t/2-e/2,0).add(i))])}}class mi extends Ke{constructor(t){super(),this.type="ex.collider",this.events=new bt,this.$colliderAdded=new We,this.$colliderRemoved=new We,this.set(t)}get(){return this._collider}set(t){return this.clear(),t&&(this._collider=t,this._collider.owner=this.owner,this.events.wire(t.events),this.$colliderAdded.notifyAll(t),this.update()),t}clear(){this._collider&&(this.events.unwire(this._collider.events),this.$colliderRemoved.notifyAll(this._collider),this._collider.owner=null,this._collider=null)}get bounds(){var t,e;return null!==(e=null===(t=this._collider)||void 0===t?void 0:t.bounds)&&void 0!==e?e:new P}get localBounds(){var t,e;return null!==(e=null===(t=this._collider)||void 0===t?void 0:t.localBounds)&&void 0!==e?e:new P}update(){var t;const e=null===(t=this.owner)||void 0===t?void 0:t.get(Xe);this._collider&&(this._collider.owner=this.owner,e&&this._collider.update(e.get()))}collide(t){let e=this._collider,i=t._collider;if(!e||!i)return[];let s=!1;if(i instanceof ai&&(e=i,i=this._collider,s=!0),this._collider){const r=e.collide(i);return r?(s&&r.forEach((e=>{e.mtv=e.mtv.negate(),e.normal=e.normal.negate(),e.tangent=e.normal.perpendicular(),e.colliderA=this._collider,e.colliderB=t._collider})),r):[]}return[]}onAdd(t){this._collider&&this.update(),this.events.on("precollision",(e=>{const i=e;t.events.emit("precollision",new dt(i.target.owner,i.other.owner,i.side,i.intersection))})),this.events.on("postcollision",(e=>{const i=e;t.events.emit("postcollision",new ut(i.target.owner,i.other.owner,i.side,i.intersection))})),this.events.on("collisionstart",(e=>{const i=e;t.events.emit("collisionstart",new mt(i.target.owner,i.other.owner,i.contact))})),this.events.on("collisionend",(e=>{const i=e;t.events.emit("collisionend",new Ct(i.target.owner,i.other.owner))}))}onRemove(){this.events.clear(),this.$colliderRemoved.notifyAll(this._collider)}useBoxCollider(t,e,i=w.Half,s=w.Zero){const r=fi.Box(t,e,i,s);return this.set(r)}usePolygonCollider(t,e=w.Zero){const i=fi.Polygon(t,e);return this.set(i)}useCircleCollider(t,e=w.Zero){const i=fi.Circle(t,e);return this.set(i)}useEdgeCollider(t,e){const i=fi.Edge(t,e);return this.set(i)}useCompositeCollider(t){return this.set(new ai(t))}}var Ci,yi,Ii,wi,vi,xi,Ei,Bi;!function(t){t.Rotation="rotation",t.X="x",t.Y="y"}(Ci||(Ci={}));class bi extends Ke{constructor(t){var e,i,s;super(),this.type="ex.body",this.dependencies=[Xe,Ze],this.id=l("body",bi._ID++),this.events=new bt,this._oldTransform=new Ve,this.__oldTransformCaptured=!1,this.enableFixedUpdateInterpolate=!0,this.collisionType=Pe.PreventCollision,this.group=$e.All,this._mass=qe.defaultMass,this.sleepMotion=5*qe.sleepEpsilon,this.canSleep=qe.bodiesCanSleepByDefault,this._sleeping=!1,this.bounciness=.2,this.friction=.99,this.useGravity=!0,this.limitDegreeOfFreedom=[],this.oldVel=new w(0,0),this.oldAcc=w.Zero,t&&(this.collisionType=null!==(e=t.type)&&void 0!==e?e:this.collisionType,this.group=null!==(i=t.group)&&void 0!==i?i:this.group,this.useGravity=null!==(s=t.useGravity)&&void 0!==s?s:this.useGravity)}get matrix(){return this.transform.get().matrix}get mass(){return this._mass}set mass(t){this._mass=t,this._cachedInertia=void 0,this._cachedInverseInertia=void 0}get inverseMass(){return this.collisionType===Pe.Fixed?0:1/this.mass}get sleeping(){return this._sleeping}setSleeping(t){this._sleeping=t,t?(this.vel=w.Zero,this.acc=w.Zero,this.angularVelocity=0,this.sleepMotion=0):this.sleepMotion=5*qe.sleepEpsilon}updateMotion(){this._sleeping&&this.setSleeping(!0);const t=this.vel.size*this.vel.size+Math.abs(this.angularVelocity*this.angularVelocity),e=qe.sleepBias;this.sleepMotion=e*this.sleepMotion+(1-e)*t,this.sleepMotion=p(this.sleepMotion,0,10*qe.sleepEpsilon),this.canSleep&&this.sleepMotion{this._cachedInertia=null})),t.$colliderRemoved.subscribe((()=>{this._cachedInertia=null}));const e=t.get();if(e)return this._cachedInertia=e.getInertia(this.mass)}return 0}get inverseInertia(){return this._cachedInverseInertia?this._cachedInverseInertia:this._cachedInverseInertia=this.collisionType===Pe.Fixed?0:1/this.inertia}get active(){var t;return!!(null===(t=this.owner)||void 0===t?void 0:t.active)}get center(){return this.globalPos}get transform(){var t;return null===(t=this.owner)||void 0===t?void 0:t.get(Xe)}get motion(){var t;return null===(t=this.owner)||void 0===t?void 0:t.get(Ze)}get pos(){return this.transform.pos}set pos(t){this.transform.pos=t}get globalPos(){return this.transform.globalPos}set globalPos(t){this.transform.globalPos=t}get oldPos(){return this._oldTransform.pos}get vel(){return this.motion.vel}set vel(t){this.motion.vel=t}get acc(){return this.motion.acc}set acc(t){this.motion.acc=t}get torque(){return this.motion.torque}set torque(t){this.motion.torque=t}get oldRotation(){return this._oldTransform.rotation}get rotation(){return this.transform.globalRotation}set rotation(t){this.transform.globalRotation=t}get scale(){return this.transform.globalScale}set scale(t){this.transform.globalScale=t}get oldScale(){return this._oldTransform.scale}get scaleFactor(){return this.motion.scaleFactor}set scaleFactor(t){this.motion.scaleFactor=t}get angularVelocity(){return this.motion.angularVelocity}set angularVelocity(t){this.motion.angularVelocity=t}applyImpulse(t,e){if(this.collisionType!==Pe.Active)return;const i=e.scale(this.inverseMass);if(this.limitDegreeOfFreedom.includes(Ci.X)&&(i.x=0),this.limitDegreeOfFreedom.includes(Ci.Y)&&(i.y=0),this.vel.addEqual(i),!this.limitDegreeOfFreedom.includes(Ci.Rotation)){const i=t.sub(this.globalPos);this.angularVelocity+=this.inverseInertia*i.cross(e)}}applyLinearImpulse(t){if(this.collisionType!==Pe.Active)return;const e=t.scale(this.inverseMass);this.limitDegreeOfFreedom.includes(Ci.X)&&(e.x=0),this.limitDegreeOfFreedom.includes(Ci.Y)&&(e.y=0),this.vel=this.vel.add(e)}applyAngularImpulse(t,e){if(this.collisionType===Pe.Active&&!this.limitDegreeOfFreedom.includes(Ci.Rotation)){const i=t.sub(this.globalPos);this.angularVelocity+=this.inverseInertia*i.cross(e)}}captureOldTransform(){this.__oldTransformCaptured=!0,this.transform.get().clone(this._oldTransform),this.oldVel.setTo(this.vel.x,this.vel.y),this.oldAcc.setTo(this.acc.x,this.acc.y)}}bi._ID=0;class Qi{constructor(t){this.data=t,this.type="Component Added"}}function Si(t){return!!t&&"Component Added"===t.type}class Di{constructor(t){this.data=t,this.type="Component Removed"}}function Ti(t){return!!t&&"Component Removed"===t.type}class ki extends ge{constructor(t,e){if(super(),this.id=ki._ID++,this._name="anonymous",this.active=!0,this._componentsToRemove=[],this._componentTypeToInstance=new Map,this._componentStringToInstance=new Map,this._tagsMemo=[],this._typesMemo=[],this.componentAdded$=new We,this.componentRemoved$=new We,this._parent=null,this.childrenAdded$=new We,this.childrenRemoved$=new We,this._children=[],this._isInitialized=!1,this._setName(e),t)for(const e of t)this.addComponent(e)}_setName(t){t&&(this._name=t)}get name(){return this._name}get events(){return this.eventDispatcher}kill(){this.active=!1}isKilled(){return!this.active}get tags(){return this._tagsMemo}hasTag(t){return this.tags.includes(t)}addTag(t){return this.addComponent(new Je(t))}removeTag(t,e=!1){return this.removeComponent(t,e)}get types(){return this._typesMemo}_rebuildMemos(){this._tagsMemo=Array.from(this._componentStringToInstance.values()).filter((t=>t instanceof Je)).map((t=>t.type)),this._typesMemo=Array.from(this._componentStringToInstance.keys())}getComponents(){return Array.from(this._componentStringToInstance.values())}_notifyAddComponent(t){this._rebuildMemos();const e=new Qi({component:t,entity:this});this.componentAdded$.notifyAll(e)}_notifyRemoveComponent(t){const e=new Di({component:t,entity:this});this.componentRemoved$.notifyAll(e),this._rebuildMemos()}get parent(){return this._parent}get children(){return this._children}unparent(){this._parent&&(this._parent.removeChild(this),this._parent=null)}addChild(t){if(null!==t.parent)throw new Error("Entity already has a parent, cannot add without unparenting");if(this.getAncestors().includes(t))throw new Error("Cycle detected, cannot add entity");return this._children.push(t),t._parent=this,this.childrenAdded$.notifyAll(t),this}removeChild(t){return t.parent===this&&(N(t,this._children),t._parent=null,this.childrenRemoved$.notifyAll(t)),this}removeAllChildren(){return this.children.forEach((t=>{this.removeChild(t)})),this}getAncestors(){const t=[this];let e=this.parent;for(;e;)t.push(e),e=e.parent;return t.reverse()}getDescendants(){let t=[this],e=[this];for(;e.length>0;){const i=e.pop();e=e.concat(i.children),t=t.concat(i.children)}return t}clone(){const t=new ki;for(const e of this.types)t.addComponent(this.get(e).clone());for(const e of this.children)t.addChild(e.clone());return t}addTemplate(t,e=!1){for(const i of t.getComponents())this.addComponent(i.clone(),e);for(const e of t.children)this.addChild(e.clone().addTemplate(e));return this}addComponent(t,e=!1){if(this.has(t.type)){if(!e)return this;this.removeComponent(t)}if(t.dependencies&&t.dependencies.length)for(const e of t.dependencies)this.addComponent(new e);t.owner=this;const i=t.constructor;return this._componentTypeToInstance.set(i,t),this._componentStringToInstance.set(t.type,t),t.onAdd&&t.onAdd(this),this._notifyAddComponent(t),this}removeComponent(t,e=!1){return e?"string"==typeof t?this._removeComponentByType(t):t instanceof Ke&&this._removeComponentByType(t.type):this._componentsToRemove.push(t),this}_removeComponentByType(t){if(this.has(t)){const e=this.get(t);e.owner=null,e.onRemove&&e.onRemove(this);const i=e.constructor;this._componentTypeToInstance.delete(i),this._componentStringToInstance.delete(e.type),this._notifyRemoveComponent(e)}}processComponentRemoval(){for(const t of this._componentsToRemove){const e="string"==typeof t?t:t.type;this._removeComponentByType(e)}this._componentsToRemove.length=0}has(t){return"string"==typeof t?this._componentStringToInstance.has(t):this._componentTypeToInstance.has(t)}get(t){return"string"==typeof t?this._componentStringToInstance.get(t):this._componentTypeToInstance.get(t)}get isInitialized(){return this._isInitialized}_initialize(t){this.isInitialized||(this.onInitialize(t),super.emit("initialize",new yt(t,this)),this._isInitialized=!0)}_preupdate(t,e){this.emit("preupdate",new it(t,e,this)),this.onPreUpdate(t,e)}_postupdate(t,e){this.emit("postupdate",new st(t,e,this)),this.onPostUpdate(t,e)}onInitialize(t){}onPreUpdate(t,e){}onPostUpdate(t,e){}update(t,e){this._initialize(t),this._preupdate(t,e);for(const i of this.children)i.update(t,e);this._postupdate(t,e)}}function Fi(t){return!!t.tick}ki._ID=0;class Pi{constructor(t,e){this._options=t,this._graphics=e,this.graphics=[]}get name(){return this._options.name}hide(t){if(t){let e=null;e=t instanceof Tt?t:this._graphics.getGraphic(t),this.graphics=this.graphics.filter((t=>t.graphic!==e)),this._graphics.recalculateBounds()}else this.graphics.length=0}show(t,e){let i;return e={...e},t instanceof Tt?i=this._graphics.copyGraphics?t.clone():t:(i=this._graphics.getGraphic(t),i||S.getInstance().error(`No such graphic added to component named ${t}. These named graphics are available: `,this._graphics.getNames())),i?(this.graphics.push({graphic:i,options:e}),this._graphics.recalculateBounds(),i):null}use(t,e){return e={...e},this.hide(),this.show(t,e)}get order(){return this._options.order}set order(t){this._options.order=t}get offset(){var t;return null!==(t=this._options.offset)&&void 0!==t?t:w.Zero}set offset(t){this._options.offset=t}get currentKeys(){var t;return null!==(t=this.name)&&void 0!==t?t:"anonymous"}}class Ri{constructor(t){this._component=t,this._layers=[],this._layerMap={},this.default=new Pi({name:"default",order:0},t),this._maybeAddLayer(this.default)}create(t){const e=new Pi(t,this._component);return this._maybeAddLayer(e)}get(t){return t?this._getLayer(t):this._layers}currentKeys(){const t=[];for(const e of this._layers)t.push(e.currentKeys);return t}has(t){return t in this._layerMap}_maybeAddLayer(t){return this._layerMap[t.name]?this._layerMap[t.name]:(this._layerMap[t.name]=t,this._layers.push(t),this._layers.sort(((t,e)=>t.order-e.order)),t)}_getLayer(t){return this._layerMap[t]}}class Mi extends Ke{constructor(t){super(),this.type="ex.graphics",this._graphics={},this.visible=!0,this.opacity=1,this.offset=w.Zero,this.anchor=w.Half,this.copyGraphics=!1,this._localBounds=null,t={visible:this.visible,...t};const{current:e,anchor:i,opacity:s,visible:r,graphics:n,offset:o,copyGraphics:a,onPreDraw:h,onPostDraw:l}=t;this._graphics=n||{},this.offset=null!=o?o:this.offset,this.opacity=null!=s?s:this.opacity,this.anchor=null!=i?i:this.anchor,this.copyGraphics=null!=a?a:this.copyGraphics,this.onPreDraw=null!=h?h:this.onPreDraw,this.onPostDraw=null!=l?l:this.onPostDraw,this.visible=!!r,this.layers=new Ri(this),e&&this._graphics[e]&&this.show(this._graphics[e])}getGraphic(t){return this._graphics[t]}getNames(){return Object.keys(this._graphics)}get current(){return this.layers.default.graphics}get graphics(){return this._graphics}add(t,e){let i="default",s=null;return"string"==typeof t?(i=t,s=e):s=t,this._graphics[i]=this.copyGraphics?s.clone():s,"default"===i&&this.show("default"),s}show(t,e){const i=this.layers.default.show(t,e);return this.recalculateBounds(),i}use(t,e){const i=this.layers.default.use(t,e);return this.recalculateBounds(),i}hide(t){this.layers.default.hide(t)}set localBounds(t){this._localBounds=t}recalculateBounds(){let t=new P;for(const e of this.layers.get())for(const{graphic:i,options:s}of e.graphics){let r=this.anchor,n=this.offset;(null==s?void 0:s.anchor)&&(r=s.anchor),(null==s?void 0:s.offset)&&(n=s.offset);const o=i.localBounds,a=-o.width*r.x+n.x,h=-o.height*r.y+n.y;t=null==i?void 0:i.localBounds.translate(v(a+e.offset.x,h+e.offset.y)).combine(t)}this._localBounds=t}get localBounds(){return this._localBounds&&!this._localBounds.hasZeroDimensions()||this.recalculateBounds(),this._localBounds}update(t,e=0){for(const i of this.layers.get())for(const{graphic:s}of i.graphics)Fi(s)&&(null==s||s.tick(t,e))}}class Li extends Ie{constructor(t){super(t),this.width=t.width,this.height=t.height,this.rasterize()}clone(){return new Li({width:this.width,height:this.height,...this.cloneGraphicOptions(),...this.cloneRasterOptions()})}execute(t){this.color&&t.fillRect(0,0,this.width,this.height),this.strokeColor&&t.strokeRect(0,0,this.width,this.height)}}class Ni extends Ie{constructor(t){var e,i;super(t),this._radius=0,this.padding=null!==(e=t.padding)&&void 0!==e?e:2,this.radius=t.radius,this.filtering=null!==(i=t.filtering)&&void 0!==i?i:Q.Blended,this.rasterize()}get radius(){return this._radius}set radius(t){this._radius=t,this.width=2*this._radius,this.height=2*this._radius,this.flagDirty()}clone(){return new Ni({radius:this.radius,...this.cloneGraphicOptions(),...this.cloneRasterOptions()})}execute(t){this.radius>0&&(t.beginPath(),t.arc(this.radius,this.radius,this.radius,0,2*Math.PI),this.color&&t.fill(),this.strokeColor&&t.stroke())}}class Gi extends Ke{constructor(){super(...arguments),this.type="ex.pointer",this.useColliderShape=!0,this.useGraphicsBounds=!1}}class Ui{static CreateReversibleEasingFunction(t){return(e,i,s,r)=>snew w(t(e,i.x,s.x,r),t(e,i.y,s.y,r))}}Ui.Linear=Ui.CreateReversibleEasingFunction(((t,e,i,s)=>(i-=e)*t/s+e)),Ui.EaseInQuad=Ui.CreateReversibleEasingFunction(((t,e,i,s)=>(i-=e)*(t/=s)*t+e)),Ui.EaseOutQuad=Ui.CreateReversibleEasingFunction(((t,e,i,s)=>-(i-=e)*(t/=s)*(t-2)+e)),Ui.EaseInOutQuad=Ui.CreateReversibleEasingFunction(((t,e,i,s)=>(i-=e,(t/=s/2)<1?i/2*t*t+e:-i/2*(--t*(t-2)-1)+e))),Ui.EaseInCubic=Ui.CreateReversibleEasingFunction(((t,e,i,s)=>(i-=e)*(t/=s)*t*t+e)),Ui.EaseOutCubic=Ui.CreateReversibleEasingFunction(((t,e,i,s)=>(t/=s,(i-=e)*(--t*t*t+1)+e))),Ui.EaseInOutCubic=Ui.CreateReversibleEasingFunction(((t,e,i,s)=>(i-=e,(t/=s/2)<1?i/2*t*t*t+e:i/2*((t-=2)*t*t+2)+e)));class zi{constructor(t){this._actions=[],this._completedActions=[],this._entity=t}add(t){this._actions.push(t)}remove(t){const e=this._actions.indexOf(t);this._actions.splice(e,1)}clearActions(){this._actions.length=0,this._completedActions.length=0,this._currentAction&&this._currentAction.stop()}getActions(){return this._actions.concat(this._completedActions)}hasNext(){return this._actions.length>0}isComplete(){return 0===this._actions.length}reset(){this._actions=this.getActions();const t=this._actions.length;for(let e=0;e0&&(this._currentAction=this._actions[0],this._currentAction.update(t),this._currentAction.isComplete(this._entity)&&this._completedActions.push(this._actions.shift()))}}class Oi{constructor(t,e,i){this._stopped=!1,this._repeatBuilder=e,this._repeatContext=new ns(t),this._actionQueue=this._repeatContext.getQueue(),this._repeat=i,this._originalRepeat=i,this._repeatBuilder(this._repeatContext),this._repeat--}update(t){this._actionQueue.isComplete()&&(this._actionQueue.clearActions(),this._repeatBuilder(this._repeatContext),this._repeat--),this._actionQueue.update(t)}isComplete(){return this._stopped||this._repeat<=0&&this._actionQueue.isComplete()}stop(){this._stopped=!0}reset(){this._repeat=this._originalRepeat}}class Hi{constructor(t,e){this._stopped=!1,this._repeatBuilder=e,this._repeatContext=new ns(t),this._actionQueue=this._repeatContext.getQueue(),this._repeatBuilder(this._repeatContext)}update(t){this._stopped||(this._actionQueue.isComplete()&&(this._actionQueue.clearActions(),this._repeatBuilder(this._repeatContext)),this._actionQueue.update(t))}isComplete(){return this._stopped}stop(){this._stopped=!0,this._actionQueue.clearActions()}reset(){}}class qi{constructor(t,e,i,s){if(this._started=!1,this._stopped=!1,this._entity=t,this._tx=t.get(Xe),this._motion=t.get(Ze),this._speed=s,this._offset=new w(e,i),s<=0)throw S.getInstance().error("Attempted to moveBy with speed less than or equal to zero : "+s),new Error("Speed must be greater than 0 pixels per second")}update(t){this._started||(this._started=!0,this._start=new w(this._tx.pos.x,this._tx.pos.y),this._end=this._start.add(this._offset),this._distance=this._offset.size,this._dir=this._end.sub(this._start).normalize()),this.isComplete(this._entity)?(this._tx.pos=v(this._end.x,this._end.y),this._motion.vel=v(0,0)):this._motion.vel=this._dir.scale(this._speed)}isComplete(t){const e=t.get(Xe);return this._stopped||e.pos.distance(this._start)>=this._distance}stop(){this._motion.vel=v(0,0),this._stopped=!0}reset(){this._started=!1,this._stopped=!1}}class Yi{constructor(t,e,i,s){this.entity=t,this._started=!1,this._stopped=!1,this._tx=t.get(Xe),this._motion=t.get(Ze),this._end=new w(e,i),this._speed=s}update(t){this._started||(this._started=!0,this._start=new w(this._tx.pos.x,this._tx.pos.y),this._distance=this._start.distance(this._end),this._dir=this._end.sub(this._start).normalize());const e=this._dir.scale(this._speed);this._motion.vel=v(e.x,e.y),this.isComplete(this.entity)&&(this._tx.pos=v(this._end.x,this._end.y),this._motion.vel=v(0,0))}isComplete(t){const e=t.get(Xe);return this._stopped||new w(e.pos.x,e.pos.y).distance(this._start)>=this._distance}stop(){this._motion.vel=v(0,0),this._stopped=!0}reset(){this._started=!1,this._stopped=!1}}!function(t){t[t.ShortestPath=0]="ShortestPath",t[t.LongestPath=1]="LongestPath",t[t.Clockwise=2]="Clockwise",t[t.CounterClockwise=3]="CounterClockwise"}(yi||(yi={}));class ji{constructor(t,e,i,s){this._started=!1,this._stopped=!1,this._tx=t.get(Xe),this._motion=t.get(Ze),this._end=e,this._speed=i,this._rotationType=s||yi.ShortestPath}update(t){if(!this._started){this._started=!0,this._start=this._tx.rotation,this._currentNonCannonAngle=this._tx.rotation;const t=Math.abs(this._end-this._start),e=d-t;switch(t>e?(this._shortDistance=e,this._longDistance=t):(this._shortDistance=t,this._longDistance=e),this._shortestPathIsPositive=(this._start-this._end+d)%d>=Math.PI,this._rotationType){case yi.ShortestPath:this._distance=this._shortDistance,this._shortestPathIsPositive?this._direction=1:this._direction=-1;break;case yi.LongestPath:this._distance=this._longDistance,this._shortestPathIsPositive?this._direction=-1:this._direction=1;break;case yi.Clockwise:this._direction=1,this._shortestPathIsPositive?this._distance=this._shortDistance:this._distance=this._longDistance;break;case yi.CounterClockwise:this._direction=-1,this._shortestPathIsPositive?this._distance=this._longDistance:this._distance=this._shortDistance}}this._motion.angularVelocity=this._direction*this._speed,this._currentNonCannonAngle+=this._direction*this._speed*(t/1e3),this.isComplete()&&(this._tx.rotation=this._end,this._motion.angularVelocity=0,this._stopped=!0)}isComplete(){const t=Math.abs(this._currentNonCannonAngle-this._start);return this._stopped||t>=Math.abs(this._distance)}stop(){this._motion.angularVelocity=0,this._stopped=!0}reset(){this._started=!1,this._stopped=!1}}class Vi{constructor(t,e,i,s){this._started=!1,this._stopped=!1,this._tx=t.get(Xe),this._motion=t.get(Ze),this._speed=i,this._offset=e,this._rotationType=s||yi.ShortestPath}update(t){if(!this._started){this._started=!0,this._start=this._tx.rotation,this._currentNonCannonAngle=this._tx.rotation,this._end=this._start+this._offset;const t=Math.abs(this._end-this._start),e=d-t;switch(t>e?(this._shortDistance=e,this._longDistance=t):(this._shortDistance=t,this._longDistance=e),this._shortestPathIsPositive=(this._start-this._end+d)%d>=Math.PI,this._rotationType){case yi.ShortestPath:this._distance=this._shortDistance,this._shortestPathIsPositive?this._direction=1:this._direction=-1;break;case yi.LongestPath:this._distance=this._longDistance,this._shortestPathIsPositive?this._direction=-1:this._direction=1;break;case yi.Clockwise:this._direction=1,this._shortDistance>=0?this._distance=this._shortDistance:this._distance=this._longDistance;break;case yi.CounterClockwise:this._direction=-1,this._shortDistance<=0?this._distance=this._shortDistance:this._distance=this._longDistance}}this._motion.angularVelocity=this._direction*this._speed,this._currentNonCannonAngle+=this._direction*this._speed*(t/1e3),this.isComplete()&&(this._tx.rotation=this._end,this._motion.angularVelocity=0,this._stopped=!0)}isComplete(){const t=Math.abs(this._currentNonCannonAngle-this._start);return this._stopped||t>=Math.abs(this._distance)}stop(){this._motion.angularVelocity=0,this._stopped=!0}reset(){this._started=!1,this._stopped=!1,this._start=void 0,this._currentNonCannonAngle=void 0,this._distance=void 0}}class Ki{constructor(t,e,i,s,r){this._started=!1,this._stopped=!1,this._tx=t.get(Xe),this._motion=t.get(Ze),this._endX=e,this._endY=i,this._speedX=s,this._speedY=r}update(t){if(this._started||(this._started=!0,this._startX=this._tx.scale.x,this._startY=this._tx.scale.y,this._distanceX=Math.abs(this._endX-this._startX),this._distanceY=Math.abs(this._endY-this._startY)),Math.abs(this._tx.scale.x-this._startX)>=this._distanceX)this._motion.scaleFactor.x=0;else{const t=this._endY=this._distanceY)this._motion.scaleFactor.y=0;else{const t=this._endY=this._distanceX-.01&&Math.abs(this._tx.scale.y-this._startY)>=this._distanceY-.01}stop(){this._motion.scaleFactor.x=0,this._motion.scaleFactor.y=0,this._stopped=!0}reset(){this._started=!1,this._stopped=!1}}class Ji{constructor(t,e,i,s){this._started=!1,this._stopped=!1,this._tx=t.get(Xe),this._motion=t.get(Ze),this._offset=new w(e,i),this._speedX=this._speedY=s}update(t){this._started||(this._started=!0,this._startScale=this._tx.scale.clone(),this._endScale=this._startScale.add(this._offset),this._distanceX=Math.abs(this._endScale.x-this._startScale.x),this._distanceY=Math.abs(this._endScale.y-this._startScale.y),this._directionX=this._endScale.x=this._distanceX-.01&&Math.abs(this._tx.scale.y-this._startScale.y)>=this._distanceY-.01}stop(){this._motion.scaleFactor.x=0,this._motion.scaleFactor.y=0,this._stopped=!0}reset(){this._started=!1,this._stopped=!1}}class Wi{constructor(t){this._method=null,this._hasBeenCalled=!1,this._method=t}update(t){this._method(),this._hasBeenCalled=!0}isComplete(){return this._hasBeenCalled}reset(){this._hasBeenCalled=!1}stop(){this._hasBeenCalled=!0}}class Xi{constructor(t,e,i,s,r){this.easingFcn=r,this._currentLerpTime=0,this._lerpDuration=1e3,this._lerpStart=new w(0,0),this._lerpEnd=new w(0,0),this._initialized=!1,this._stopped=!1,this._tx=t.get(Xe),this._motion=t.get(Ze),this._lerpDuration=s,this._lerpEnd=new w(e,i)}_initialize(){this._lerpStart=new w(this._tx.pos.x,this._tx.pos.y),this._currentLerpTime=0}update(t){this._initialized||(this._initialize(),this._initialized=!0),this._currentLerpTime+=t;let e=this._tx.pos.x,i=this._tx.pos.y;this._currentLerpTime=this._lerpDuration}reset(){this._initialized=!1,this._stopped=!1,this._currentLerpTime=0}stop(){this._motion.vel=v(0,0),this._stopped=!0}}class Zi{constructor(t,e,i,s,r){this.easingFcn=r,this._currentLerpTime=0,this._lerpDuration=1e3,this._lerpStart=new w(0,0),this._lerpEnd=new w(0,0),this._initialized=!1,this._stopped=!1,this._tx=t.get(Xe),this._motion=t.get(Ze),this._lerpDuration=s,this._offset=new w(e,i)}_initialize(){this._lerpStart=new w(this._tx.pos.x,this._tx.pos.y),this._currentLerpTime=0,this._lerpEnd=this._lerpStart.add(this._offset)}update(t){this._initialized||(this._initialize(),this._initialized=!0),this._currentLerpTime+=t;let e=this._tx.pos.x,i=this._tx.pos.y;this._currentLerpTime=this._lerpDuration}reset(){this._initialized=!1,this._stopped=!1,this._currentLerpTime=0}stop(){this._motion.vel=v(0,0),this._stopped=!0}}class $i{constructor(t,e,i,s=1){this._timeVisible=0,this._timeNotVisible=0,this._elapsedTime=0,this._totalTime=0,this._stopped=!1,this._started=!1,this._graphics=t.get(Mi),this._timeVisible=e,this._timeNotVisible=i,this._duration=(e+i)*s}update(t){this._started||(this._started=!0,this._elapsedTime=0,this._totalTime=0),this._graphics&&(this._elapsedTime+=t,this._totalTime+=t,this._graphics.visible&&this._elapsedTime>=this._timeVisible&&(this._graphics.visible=!1,this._elapsedTime=0),!this._graphics.visible&&this._elapsedTime>=this._timeNotVisible&&(this._graphics.visible=!0,this._elapsedTime=0),this.isComplete()&&(this._graphics.visible=!0))}isComplete(){return this._stopped||this._totalTime>=this._duration}stop(){this._graphics&&(this._graphics.visible=!0),this._stopped=!0}reset(){this._started=!1,this._stopped=!1,this._elapsedTime=0,this._totalTime=0}}class ts{constructor(t,e,i){this._multiplier=1,this._started=!1,this._stopped=!1,this._graphics=t.get(Mi),this._endOpacity=e,this._speed=this._ogspeed=i}update(t){this._graphics&&(this._started||(this._started=!0,this._speed=this._ogspeed,this._endOpacity0&&(this._graphics.opacity+=this._multiplier*(Math.abs(this._graphics.opacity-this._endOpacity)*t)/this._speed),this._speed-=t,this.isComplete()&&(this._graphics.opacity=this._endOpacity),S.getInstance().debug("[Action fade] Actor opacity:",this._graphics.opacity))}isComplete(){return this._stopped||Math.abs(this._graphics.opacity-this._endOpacity)<.05}stop(){this._stopped=!0}reset(){this._started=!1,this._stopped=!1}}class es{constructor(t){this._elapsedTime=0,this._started=!1,this._stopped=!1,this._delay=t}update(t){this._started||(this._started=!0),this._elapsedTime+=t}isComplete(){return this._stopped||this._elapsedTime>=this._delay}stop(){this._stopped=!0}reset(){this._elapsedTime=0,this._started=!1,this._stopped=!1}}class is{constructor(t){this._stopped=!1,this._entity=t}update(t){this._entity.get(os).clearActions(),this._entity.kill(),this._stopped=!0}isComplete(){return this._stopped}stop(){}reset(){}}class ss{constructor(t,e,i){this._started=!1,this._stopped=!1,this._tx=t.get(Xe),this._motion=t.get(Ze),this._followTx=e.get(Xe),this._followMotion=e.get(Ze),this._current=new w(this._tx.pos.x,this._tx.pos.y),this._end=new w(this._followTx.pos.x,this._followTx.pos.y),this._maximumDistance=void 0!==i?i:this._current.distance(this._end),this._speed=0}update(t){this._started||(this._started=!0,this._distanceBetween=this._current.distance(this._end),this._dir=this._end.sub(this._current).normalize());const e=Math.sqrt(Math.pow(this._followMotion.vel.x,2)+Math.pow(this._followMotion.vel.y,2));if(0!==e&&(this._speed=e),this._current=v(this._tx.pos.x,this._tx.pos.y),this._end=v(this._followTx.pos.x,this._followTx.pos.y),this._distanceBetween=this._current.distance(this._end),this._dir=this._end.sub(this._current).normalize(),this._distanceBetween>=this._maximumDistance){const t=this._dir.scale(this._speed);this._motion.vel=v(t.x,t.y)}else this._motion.vel=v(0,0);this.isComplete()&&(this._tx.pos=v(this._end.x,this._end.y),this._motion.vel=v(0,0))}stop(){this._motion.vel=v(0,0),this._stopped=!0}isComplete(){return this._stopped}reset(){this._started=!1,this._stopped=!1}}class rs{constructor(t,e,i){this._started=!1,this._stopped=!1,this._speedWasSpecified=!1,this._tx=t.get(Xe),this._motion=t.get(Ze),this._meetTx=e.get(Xe),this._meetMotion=e.get(Ze),this._current=new w(this._tx.pos.x,this._tx.pos.y),this._end=new w(this._meetTx.pos.x,this._meetTx.pos.y),this._speed=i||0,void 0!==i&&(this._speedWasSpecified=!0)}update(t){this._started||(this._started=!0,this._distanceBetween=this._current.distance(this._end),this._dir=this._end.sub(this._current).normalize());const e=Math.sqrt(Math.pow(this._meetMotion.vel.x,2)+Math.pow(this._meetMotion.vel.y,2));0===e||this._speedWasSpecified||(this._speed=e),this._current=v(this._tx.pos.x,this._tx.pos.y),this._end=v(this._meetTx.pos.x,this._meetTx.pos.y),this._distanceBetween=this._current.distance(this._end),this._dir=this._end.sub(this._current).normalize();const i=this._dir.scale(this._speed);this._motion.vel=v(i.x,i.y),this.isComplete()&&(this._tx.pos=v(this._end.x,this._end.y),this._motion.vel=v(0,0))}isComplete(){return this._stopped||this._distanceBetween<=1}stop(){this._motion.vel=v(0,0),this._stopped=!0}reset(){this._started=!1,this._stopped=!1,this._distanceBetween=void 0}}class ns{constructor(t){this._entity=t,this._queue=new zi(t)}getQueue(){return this._queue}update(t){this._queue.update(t)}clearActions(){this._queue.clearActions()}runAction(t){return t.reset(),this._queue.add(t),this}easeTo(...t){var e,i;let s=0,r=0,n=0,o=Ui.Linear;return t[0]instanceof w?(s=t[0].x,r=t[0].y,n=t[1],o=null!==(e=t[2])&&void 0!==e?e:o):(s=t[0],r=t[1],n=t[2],o=null!==(i=t[3])&&void 0!==i?i:o),this._queue.add(new Xi(this._entity,s,r,n,o)),this}easeBy(...t){var e,i;let s=0,r=0,n=0,o=Ui.Linear;return t[0]instanceof w?(s=t[0].x,r=t[0].y,n=t[1],o=null!==(e=t[2])&&void 0!==e?e:o):(s=t[0],r=t[1],n=t[2],o=null!==(i=t[3])&&void 0!==i?i:o),this._queue.add(new Zi(this._entity,s,r,n,o)),this}moveTo(t,e,i){let s=0,r=0,n=0;return t instanceof w?(s=t.x,r=t.y,n=e):(s=t,r=e,n=i),this._queue.add(new Yi(this._entity,s,r,n)),this}moveBy(t,e,i){let s=0,r=0,n=0;return t instanceof w?(s=t.x,r=t.y,n=e):(s=t,r=e,n=i),this._queue.add(new qi(this._entity,s,r,n)),this}rotateTo(t,e,i){return this._queue.add(new ji(this._entity,t,e,i)),this}rotateBy(t,e,i){return this._queue.add(new Vi(this._entity,t,e,i)),this}scaleTo(t,e,i,s){let r=1,n=1,o=0,a=0;return t instanceof w&&e instanceof w&&(r=t.x,n=t.y,o=e.x,a=e.y),"number"==typeof t&&"number"==typeof e&&(r=t,n=e,o=i,a=s),this._queue.add(new Ki(this._entity,r,n,o,a)),this}scaleBy(t,e,i){let s=1,r=1;return t instanceof w&&(s=t.x,r=t.y,i=e),"number"==typeof t&&"number"==typeof e&&(s=t,r=e),this._queue.add(new Ji(this._entity,s,r,i)),this}blink(t,e,i=1){return this._queue.add(new $i(this._entity,t,e,i)),this}fade(t,e){return this._queue.add(new ts(this._entity,t,e)),this}delay(t){return this._queue.add(new es(t)),this}die(){return this._queue.add(new is(this._entity)),this}callMethod(t){return this._queue.add(new Wi(t)),this}repeat(t,e){return e?(this._queue.add(new Oi(this._entity,t,e)),this):(this.repeatForever(t),this)}repeatForever(t){return this._queue.add(new Hi(this._entity,t)),this}follow(t,e){return void 0===e?this._queue.add(new ss(this._entity,t)):this._queue.add(new ss(this._entity,t,e)),this}meet(t,e){return void 0===e?this._queue.add(new rs(this._entity,t)):this._queue.add(new rs(this._entity,t,e)),this}toPromise(){return new Promise((t=>{this._queue.add(new Wi((()=>{t()})))}))}}class os extends Ke{constructor(){super(...arguments),this.type="ex.actions",this.dependencies=[Xe,Ze]}onAdd(t){this._ctx=new ns(t)}onRemove(){this._ctx=null}getQueue(){var t;return null===(t=this._ctx)||void 0===t?void 0:t.getQueue()}runAction(t){var e;return null===(e=this._ctx)||void 0===e?void 0:e.runAction(t)}update(t){var e;return null===(e=this._ctx)||void 0===e?void 0:e.update(t)}clearActions(){var t;null===(t=this._ctx)||void 0===t||t.clearActions()}easeTo(...t){return this._ctx.easeTo.apply(this._ctx,t)}easeBy(...t){return this._ctx.easeBy.apply(this._ctx,t)}moveTo(t,e,i){return this._ctx.moveTo.apply(this._ctx,[t,e,i])}moveBy(t,e,i){return this._ctx.moveBy.apply(this._ctx,[t,e,i])}rotateTo(t,e,i){return this._ctx.rotateTo(t,e,i)}rotateBy(t,e,i){return this._ctx.rotateBy(t,e,i)}scaleTo(t,e,i,s){return this._ctx.scaleTo.apply(this._ctx,[t,e,i,s])}scaleBy(t,e,i){return this._ctx.scaleBy.apply(this._ctx,[t,e,i])}blink(t,e,i){return this._ctx.blink(t,e,i)}fade(t,e){return this._ctx.fade(t,e)}delay(t){return this._ctx.delay(t)}die(){return this._ctx.die()}callMethod(t){return this._ctx.callMethod(t)}repeat(t,e){return this._ctx.repeat(t,e)}repeatForever(t){return this._ctx.repeatForever(t)}follow(t,e){return this._ctx.follow(t,e)}meet(t,e){return this._ctx.meet(t,e)}toPromise(){return this._ctx.toPromise()}}!function(t){t.Em="em",t.Rem="rem",t.Px="px",t.Pt="pt",t.Percent="%"}(Ii||(Ii={})),function(t){t.Left="left",t.Right="right",t.Center="center",t.Start="start",t.End="end"}(wi||(wi={})),function(t){t.Top="top",t.Hanging="hanging",t.Middle="middle",t.Alphabetic="alphabetic",t.Ideographic="ideographic",t.Bottom="bottom"}(vi||(vi={})),function(t){t.Normal="normal",t.Italic="italic",t.Oblique="oblique"}(xi||(xi={})),function(t){t.LeftToRight="ltr",t.RightToLeft="rtl"}(Ei||(Ei={}));class as extends Tt{constructor(t={}){var e,i,s,r,n,o,a,h,l,A,c,d,u,g,p,_,f,m,C;super(t),this.filtering=Q.Blended,this.quality=2,this.padding=2,this.smoothing=!1,this.lineWidth=1,this.lineDash=[],this.color=k.Black,this.family="sans-serif",this.style=xi.Normal,this.bold=!1,this.unit=Ii.Px,this.textAlign=wi.Left,this.baseAlign=vi.Alphabetic,this.direction=Ei.LeftToRight,this.size=10,this.shadow=null,this._textBounds=new P,this._cachedTextMeasurement=new Map,this._bitmapToTextMeasurement=new Map,this._textToBitmap=new Map,this._bitmapUsage=new Map,this._textFragments=[],this.smoothing=null!==(e=null==t?void 0:t.smoothing)&&void 0!==e?e:this.smoothing,this.padding=null!==(i=null==t?void 0:t.padding)&&void 0!==i?i:this.padding,this.color=null!==(s=null==t?void 0:t.color)&&void 0!==s?s:this.color,this.strokeColor=null!==(r=null==t?void 0:t.strokeColor)&&void 0!==r?r:this.strokeColor,this.lineDash=null!==(n=null==t?void 0:t.lineDash)&&void 0!==n?n:this.lineDash,this.lineWidth=null!==(o=null==t?void 0:t.lineWidth)&&void 0!==o?o:this.lineWidth,this.filtering=null!==(a=null==t?void 0:t.filtering)&&void 0!==a?a:this.filtering,this.family=null!==(h=null==t?void 0:t.family)&&void 0!==h?h:this.family,this.style=null!==(l=null==t?void 0:t.style)&&void 0!==l?l:this.style,this.bold=null!==(A=null==t?void 0:t.bold)&&void 0!==A?A:this.bold,this.size=null!==(c=null==t?void 0:t.size)&&void 0!==c?c:this.size,this.unit=null!==(d=null==t?void 0:t.unit)&&void 0!==d?d:this.unit,this.textAlign=null!==(u=null==t?void 0:t.textAlign)&&void 0!==u?u:this.textAlign,this.baseAlign=null!==(g=null==t?void 0:t.baseAlign)&&void 0!==g?g:this.baseAlign,this.direction=null!==(p=null==t?void 0:t.direction)&&void 0!==p?p:this.direction,this.quality=null!==(_=null==t?void 0:t.quality)&&void 0!==_?_:this.quality,(null==t?void 0:t.shadow)&&(this.shadow={},this.shadow.blur=null!==(f=t.shadow.blur)&&void 0!==f?f:this.shadow.blur,this.shadow.offset=null!==(m=t.shadow.offset)&&void 0!==m?m:this.shadow.offset,this.shadow.color=null!==(C=t.shadow.color)&&void 0!==C?C:this.shadow.color)}clone(){return new as({...this.cloneGraphicOptions(),size:this.size,unit:this.unit,family:this.family,style:this.style,bold:this.bold,textAlign:this.textAlign,baseAlign:this.baseAlign,direction:this.direction,shadow:this.shadow?{blur:this.shadow.blur,offset:this.shadow.offset,color:this.shadow.color}:null})}get fontString(){return`${this.style} ${this.bold?"bold":""} ${this.size}${this.unit} ${this.family}`}get localBounds(){return this._textBounds}_drawImage(t,e,i){}_rotate(t){var e;const i=null!==(e=this.origin)&&void 0!==e?e:this._textBounds.center;t.translate(i.x,i.y),t.rotate(this.rotation),t.translate(-i.x,-i.y)}_flip(t){this.flipHorizontal&&(t.translate(this._textBounds.width/this.scale.x,0),t.scale(-1,1)),this.flipVertical&&(t.translate(0,-this._textBounds.height/2/this.scale.y),t.scale(1,-1))}measureText(t){let e=!1,i=this._cachedTextMeasurement.get(t);i||(e=!0);const s=this._getRasterPropertiesHash();if(i&&s===i.rasterProps||(e=!0),e){const e=t.split("\n"),r=e.reduce(((t,e)=>t.length>e.length?t:e)),n=this._getTextBitmap(t);this._applyFont(n);const o=n.measureText(r);let a=Math.abs(o.actualBoundingBoxAscent)+Math.abs(o.actualBoundingBoxDescent);const h=a*e.length;a=h;const l=h-Math.abs(o.actualBoundingBoxAscent),A=0,c=0;return i={text:t,rasterProps:s,measurement:new P({left:A-Math.abs(o.actualBoundingBoxLeft)-this.padding,top:c-Math.abs(o.actualBoundingBoxAscent)-this.padding,bottom:c+l+this.padding,right:A+Math.abs(o.actualBoundingBoxRight)+this.padding})},this._cachedTextMeasurement.set(t,i),this._bitmapToTextMeasurement.set(n,i),i.measurement}return i.measurement}_setDimension(t,e){e.canvas.width=2*(t.width+2*this.padding)*this.quality,e.canvas.height=2*(t.height+2*this.padding)*this.quality}_postDraw(t){t.restore()}_getRasterPropertiesHash(t){var e,i;return"__hashcode__"+this.fontString+this.showDebug+this.textAlign+this.baseAlign+this.direction+JSON.stringify(this.shadow)+(this.padding.toString()+this.smoothing.toString()+this.lineWidth.toString()+this.lineDash.toString()+(null===(e=this.strokeColor)||void 0===e?void 0:e.toString())+(t?t.toString():null===(i=this.color)||void 0===i?void 0:i.toString()).toString())}_applyRasterProperties(t,e){var i,s,r;t.translate(this.padding,this.padding),t.imageSmoothingEnabled=this.smoothing,t.lineWidth=this.lineWidth,t.setLineDash(null!==(i=this.lineDash)&&void 0!==i?i:t.getLineDash()),t.strokeStyle=null===(s=this.strokeColor)||void 0===s?void 0:s.toString(),t.fillStyle=e?e.toString():null===(r=this.color)||void 0===r?void 0:r.toString()}_applyFont(t){t.translate(this.padding+t.canvas.width/2,this.padding+t.canvas.height/2),t.scale(this.quality,this.quality),t.textAlign=this.textAlign,t.textBaseline=this.baseAlign,t.font=this.fontString,t.direction=this.direction,this.shadow&&(t.shadowColor=this.shadow.color.toString(),t.shadowBlur=this.shadow.blur,t.shadowOffsetX=this.shadow.offset.x,t.shadowOffsetY=this.shadow.offset.y)}_drawText(t,e,i,s){const r=e.split("\n");this._applyRasterProperties(t,i),this._applyFont(t);for(let e=0;ethis._handleAnchorChange(t))),this.logger=S.getInstance(),this.scene=null,this._draggable=!1,this._dragging=!1,this._pointerDragStartHandler=()=>{this._dragging=!0},this._pointerDragEndHandler=()=>{this._dragging=!1},this._pointerDragMoveHandler=t=>{this._dragging&&(this.pos=t.worldPos)},this._pointerDragLeaveHandler=t=>{this._dragging&&(this.pos=t.worldPos)};const{name:e,x:i,y:s,pos:r,coordPlane:n,scale:o,width:a,height:h,radius:l,collider:A,vel:c,acc:d,rotation:u,angularVelocity:g,z:p,color:_,visible:f,anchor:m,collisionType:C,collisionGroup:y}={...t};this._setName(e),this.anchor=null!=m?m:ls.defaults.anchor.clone();const I=new Xe;this.addComponent(I),this.pos=null!=r?r:v(null!=i?i:0,null!=s?s:0),this.rotation=null!=u?u:0,this.scale=null!=o?o:v(1,1),this.z=null!=p?p:0,I.coordPlane=null!=n?n:He.World,this.addComponent(new Gi),this.addComponent(new Mi({anchor:this.anchor})),this.addComponent(new Ze),this.vel=null!=c?c:w.Zero,this.acc=null!=d?d:w.Zero,this.angularVelocity=null!=g?g:0,this.addComponent(new os),this.addComponent(new bi),this.body.collisionType=null!=C?C:Pe.Passive,y&&(this.body.group=y),A?this.addComponent(new mi(A)):l?this.addComponent(new mi(fi.Circle(l))):a>0&&h>0?this.addComponent(new mi(fi.Box(a,h,this.anchor))):this.addComponent(new mi),this.graphics.visible=null==f||f,_&&(this.color=_,a&&h?this.graphics.add(new Li({color:_,width:a,height:h})):l&&this.graphics.add(new Ni({color:_,radius:l})))}get body(){return this.get(bi)}get transform(){return this.get(Xe)}get motion(){return this.get(Ze)}get graphics(){return this.get(Mi)}get collider(){return this.get(mi)}get pointer(){return this.get(Gi)}get actions(){return this.get(os)}get pos(){return this.transform.pos}set pos(t){this.transform.pos=t.clone()}get oldPos(){return this.body.oldPos}set oldPos(t){this.body.oldPos.setTo(t.x,t.y)}get vel(){return this.motion.vel}set vel(t){this.motion.vel=t.clone()}get oldVel(){return this.body.oldVel}set oldVel(t){this.body.oldVel.setTo(t.x,t.y)}get acc(){return this.motion.acc}set acc(t){this.motion.acc=t.clone()}set oldAcc(t){this.body.oldAcc.setTo(t.x,t.y)}get oldAcc(){return this.body.oldAcc}get rotation(){return this.transform.rotation}set rotation(t){this.transform.rotation=t}get angularVelocity(){return this.motion.angularVelocity}set angularVelocity(t){this.motion.angularVelocity=t}get scale(){return this.get(Xe).scale}set scale(t){this.get(Xe).scale=t}get anchor(){return this._anchor}set anchor(t){this._anchor=St(t,(t=>this._handleAnchorChange(t))),this._handleAnchorChange(t)}_handleAnchorChange(t){this.graphics&&(this.graphics.anchor=t)}get isOffScreen(){return this.hasTag("ex.offscreen")}get draggable(){return this._draggable}set draggable(t){t&&(t&&!this._draggable?(this.on("pointerdragstart",this._pointerDragStartHandler),this.on("pointerdragend",this._pointerDragEndHandler),this.on("pointerdragmove",this._pointerDragMoveHandler),this.on("pointerdragleave",this._pointerDragLeaveHandler)):!t&&this._draggable&&(this.off("pointerdragstart",this._pointerDragStartHandler),this.off("pointerdragend",this._pointerDragEndHandler),this.off("pointerdragmove",this._pointerDragMoveHandler),this.off("pointerdragleave",this._pointerDragLeaveHandler)),this._draggable=t)}get color(){return this._color}set color(t){var e;this._color=t.clone();const i=null===(e=this.graphics.layers.default.graphics[0])||void 0===e?void 0:e.graphic;(i instanceof Ie||i instanceof hs)&&(i.color=this._color)}onInitialize(t){}_initialize(t){super._initialize(t);for(const e of this.children)e._initialize(t)}on(t,e){super.on(t,e)}once(t,e){super.once(t,e)}off(t,e){super.off(t,e)}_prekill(t){super.emit("prekill",new K(this)),this.onPreKill(t)}onPreKill(t){}_postkill(t){super.emit("postkill",new J(this)),this.onPostKill(t)}onPostKill(t){}kill(){this.scene?(this._prekill(this.scene),this.emit("kill",new V(this)),super.kill(),this._postkill(this.scene)):this.logger.warn("Cannot kill actor, it was never added to the Scene")}unkill(){this.active=!0}isKilled(){return!this.active}get z(){return this.get(Xe).z}set z(t){this.get(Xe).z=t}get center(){const t=this.getGlobalPos();return new w(t.x+this.width/2-this.anchor.x*this.width,t.y+this.height/2-this.anchor.y*this.height)}get localCenter(){return new w(this.pos.x+this.width/2-this.anchor.x*this.width,this.pos.y+this.height/2-this.anchor.y*this.height)}get width(){return this.collider.localBounds.width*this.getGlobalScale().x}get height(){return this.collider.localBounds.height*this.getGlobalScale().y}getGlobalRotation(){return this.get(Xe).globalRotation}getGlobalPos(){return this.get(Xe).globalPos}getGlobalScale(){return this.get(Xe).globalScale}contains(t,e,i=!1){const s=v(t,e),r=this.get(mi);r.update();const n=r.get();if(!n)return!1;const o=n.contains(s);return i?o||this.children.some((i=>i.contains(t,e,!0))):o}within(t,e){const i=this.get(mi),s=t.get(mi),r=i.get(),n=s.get();return!(!r||!n)&&r.getClosestLineBetween(n).getLength()<=e}update(t,e){this._initialize(t),this._preupdate(t,e),this._postupdate(t,e)}onPreUpdate(t,e){}onPostUpdate(t,e){}_preupdate(t,e){this.emit("preupdate",new it(t,e,this)),this.onPreUpdate(t,e)}_postupdate(t,e){this.emit("postupdate",new it(t,e,this)),this.onPostUpdate(t,e)}}function As(t){return t instanceof cs}ls.defaults={anchor:w.Half};class cs extends ls{constructor(t){super({...t}),this.get(Xe).coordPlane=He.Screen,this.anchor=v(0,0),this.body.collisionType=Pe.PreventCollision,this.collider.useBoxCollider(this.width,this.height,this.anchor)}_initialize(t){this._engine=t,super._initialize(t)}contains(t,e,i=!0){if(i)return super.contains(t,e);const s=this._engine.worldToScreenCoordinates(new w(t,e));return super.contains(s.x,s.y)}}class ds{constructor(t,e,i,s,r,n){if(this._logger=S.getInstance(),this.id=0,this._elapsedTime=0,this._totalTimeAlive=0,this._running=!1,this._numberOfTicks=0,this.interval=10,this.repeats=!1,this.maxNumberOfRepeats=-1,this.randomRange=[0,0],this._baseInterval=10,this._generateRandomInterval=()=>this._baseInterval+this.random.integer(this.randomRange[0],this.randomRange[1]),this._complete=!1,this.scene=null,"function"!=typeof t){const o=t;t=o.fcn,e=o.interval,i=o.repeats,s=o.numberOfRepeats,r=o.randomRange,n=o.random}if(s&&s>=0&&(this.maxNumberOfRepeats=s,!i))throw new Error("repeats must be set to true if numberOfRepeats is set");if(this.id=ds._MAX_ID++,this._callbacks=[],this._baseInterval=this.interval=e,r){if(r[0]>r[1])throw new Error("min value must be lower than max value for range");this.random=null!=n?n:new c,this.randomRange=r,this.interval=this._generateRandomInterval(),this.on((()=>{this.interval=this._generateRandomInterval()}))}this.repeats=i||this.repeats,t&&this.on(t)}get complete(){return this._complete}on(t){this._callbacks.push(t)}off(t){const e=this._callbacks.indexOf(t);this._callbacks.splice(e,1)}update(t){this._running&&(this._totalTimeAlive+=t,this._elapsedTime+=t,this.maxNumberOfRepeats>-1&&this._numberOfTicks>=this.maxNumberOfRepeats&&(this._complete=!0,this._running=!1,this._elapsedTime=0),!this.complete&&this._elapsedTime>=this.interval&&(this._callbacks.forEach((t=>{t.call(this)})),this._numberOfTicks++,this.repeats||(this._complete=!0,this._running=!1),this._elapsedTime=0))}reset(t,e){if(t&&t>=0&&(this._baseInterval=this.interval=t),this.maxNumberOfRepeats&&this.maxNumberOfRepeats>=0&&(this.maxNumberOfRepeats=e,!this.repeats))throw new Error("repeats must be set to true if numberOfRepeats is set");this._complete=!1,this._elapsedTime=0,this._numberOfTicks=0}get timesRepeated(){return this._numberOfTicks}getTimeRunning(){return this._totalTimeAlive}get timeToNextAction(){return this.complete?0:this.interval-this._elapsedTime}get timeElapsedTowardNextAction(){return this._elapsedTime}get isRunning(){return this._running}pause(){return this._running=!1,this}resume(){return this._running=!0,this}start(){return this.scene||this._logger.warn("Cannot start a timer not part of a scene, timer wont start until added"),this._running=!0,this.complete&&(this._complete=!1,this._elapsedTime=0,this._numberOfTicks=0),this}stop(){return this._running=!1,this._elapsedTime=0,this._numberOfTicks=0,this}cancel(){this.pause(),this.scene&&this.scene.cancelTimer(this)}}ds._MAX_ID=0;class us extends Ke{constructor(t){super(),this.type="ex.parallax",this.parallaxFactor=v(1,1),this.parallaxFactor=null!=t?t:this.parallaxFactor}}class gs extends Ke{constructor(t,e=!0){super(),this.draw=t,this.useTransform=e,this.type="ex.debuggraphics"}}class ps extends ki{constructor(t){var e,i;super(null,t.name),this._token=0,this._onScreenXStart=0,this._onScreenXEnd=Number.MAX_VALUE,this._onScreenYStart=0,this._onScreenYEnd=Number.MAX_VALUE,this.logger=S.getInstance(),this.tiles=[],this._rows=[],this._cols=[],this.renderFromTopOfGraphic=!1,this._collidersDirty=!0,this._originalOffsets=new WeakMap,this.addComponent(new Xe),this.addComponent(new Ze),this.addComponent(new bi({type:Pe.Fixed})),this.addComponent(new Mi({onPostDraw:(t,e)=>this.draw(t,e)})),this.addComponent(new gs((t=>this.debug(t)))),this.addComponent(new mi),this._graphics=this.get(Mi),this._transform=this.get(Xe),this._motion=this.get(Ze),this._collider=this.get(mi),this._composite=this._collider.useCompositeCollider([]),this._transform.pos=null!==(e=t.pos)&&void 0!==e?e:w.Zero,this._oldPos=this._transform.pos,this.renderFromTopOfGraphic=null!==(i=t.renderFromTopOfGraphic)&&void 0!==i?i:this.renderFromTopOfGraphic,this.tileWidth=t.tileWidth,this.tileHeight=t.tileHeight,this.rows=t.rows,this.columns=t.columns,this.tiles=new Array(this.rows*this.columns),this._rows=new Array(this.rows),this._cols=new Array(this.columns);let s=[];for(let t=0;t0){for(const t of r.getColliders()){const e=this._getOrSetColliderOriginalOffset(t);t.offset=v(r.x*this.tileWidth,r.y*this.tileHeight).add(e),t.owner=this,this._composite.addCollider(t)}e=null}else e=e?e.combine(r.bounds):r.bounds;else e&&t.push(e),e=null}if(e){const i=t[t.length-1];i&&i.top===e.top&&i.bottom===e.bottom?t[t.length-1]=i.combine(e):t.push(e)}}for(const e of t){const t=fi.Box(e.width,e.height,w.Zero,v(e.left-this.pos.x,e.top-this.pos.y));t.owner=this,this._composite.addCollider(t)}this._collider.update()}getTileByIndex(t){return this.tiles[t]}getTile(t,e){return t<0||e<0||t>=this.columns||e>=this.rows?null:this.tiles[t+e*this.columns]}getTileByPoint(t){const e=Math.floor((t.x-this.pos.x)/this.tileWidth),i=Math.floor((t.y-this.pos.y)/this.tileHeight),s=this.getTile(e,i);return e>=0&&i>=0&&e-1&&this._colliders.splice(e,1),this.map.flagCollidersDirty()}clearColliders(){this._colliders.length=0,this.map.flagCollidersDirty()}flagDirty(){return this._posDirty=!0}_recalculate(){this._pos=this.map.pos.add(v(this.x*this.map.tileWidth,this.y*this.map.tileHeight)),this._bounds=new P(this._pos.x,this._pos.y,this._pos.x+this.width,this._pos.y+this.height),this._posDirty=!1}get bounds(){return this._posDirty&&this._recalculate(),this._bounds}get center(){return this._posDirty&&this._recalculate(),new w(this._pos.x+this.width/2,this._pos.y+this.height/2)}}class fs{constructor(t){this.camera=t}lockToActor(t){this.camera.addStrategy(new ms(t))}lockToActorAxis(t,e){this.camera.addStrategy(new Cs(t,e))}elasticToActor(t,e,i){this.camera.addStrategy(new ys(t,e,i))}radiusAroundActor(t,e){this.camera.addStrategy(new Is(t,e))}limitCameraBounds(t){this.camera.addStrategy(new ws(t))}}!function(t){t[t.X=0]="X",t[t.Y=1]="Y"}(Bi||(Bi={}));class ms{constructor(t){this.target=t,this.action=(t,e,i,s)=>t.center}}class Cs{constructor(t,e){this.target=t,this.axis=e,this.action=(t,e,i,s)=>{const r=t.center,n=e.getFocus();return this.axis===Bi.X?new w(r.x,n.y):new w(n.x,r.y)}}}class ys{constructor(t,e,i){this.target=t,this.cameraElasticity=e,this.cameraFriction=i,this.action=(t,e,i,s)=>{const r=t.center;let n=e.getFocus(),o=e.vel.clone();const a=r.sub(n).scale(this.cameraElasticity);o=o.add(a);const h=o.scale(-1).scale(this.cameraFriction);return o=o.add(h),n=n.add(o),n}}}class Is{constructor(t,e){this.target=t,this.radius=e,this.action=(t,e,i,s)=>{const r=t.center,n=e.getFocus(),o=r.sub(n),a=o.size;if(a>=this.radius){const t=a-this.radius;return n.add(o.normalize().scale(t))}return n}}}class ws{constructor(t){this.target=t,this.boundSizeChecked=!1,this.action=(t,e,i,s)=>{const r=e.getFocus();this.boundSizeChecked||((t.bottom-t.topt.right-i.halfDrawWidth&&(n=t.right-i.halfDrawWidth),r.yt.bottom-i.halfDrawHeight&&(o=t.bottom-i.halfDrawHeight),v(n,o)}}}class vs extends ge{constructor(){super(...arguments),this.transform=H.identity(),this.inverse=H.identity(),this._cameraStrategies=[],this.strategy=new fs(this),this._z=1,this.dz=0,this.az=0,this.rotation=0,this._angularVelocity=0,this._posChanged=!1,this._pos=Dt(w.Zero,(()=>this._posChanged=!0)),this.vel=w.Zero,this.acc=w.Zero,this._cameraMoving=!1,this._currentLerpTime=0,this._lerpDuration=1e3,this._lerpStart=null,this._lerpEnd=null,this._isShaking=!1,this._shakeMagnitudeX=0,this._shakeMagnitudeY=0,this._shakeDuration=0,this._elapsedShakeTime=0,this._xShake=0,this._yShake=0,this._isZooming=!1,this._zoomStart=1,this._zoomEnd=1,this._currentZoomTime=0,this._zoomDuration=0,this._zoomEasing=Ui.EaseInOutCubic,this._easing=Ui.EaseInOutCubic,this._halfWidth=0,this._halfHeight=0,this._viewport=null,this._isInitialized=!1}get zoom(){return this._z}set zoom(t){this._z=t,this._engine&&(this._halfWidth=this._engine.halfDrawWidth,this._halfHeight=this._engine.halfDrawHeight)}get angularVelocity(){return this._angularVelocity}set angularVelocity(t){this._angularVelocity=t}get pos(){return this._pos}set pos(t){this._pos=Dt(t,(()=>this._posChanged=!0)),this._posChanged=!0}get x(){return this.pos.x}set x(t){this._follow||this._cameraMoving||(this.pos=v(t,this.pos.y))}get y(){return this.pos.y}set y(t){this._follow||this._cameraMoving||(this.pos=v(this.pos.x,t))}get dx(){return this.vel.x}set dx(t){this.vel=v(t,this.vel.y)}get dy(){return this.vel.y}set dy(t){this.vel=v(this.vel.x,t)}get ax(){return this.acc.x}set ax(t){this.acc=v(t,this.acc.y)}get ay(){return this.acc.y}set ay(t){this.acc=v(this.acc.x,t)}getFocus(){return this.pos}move(t,e,i=Ui.EaseInOutCubic){if("function"!=typeof i)throw"Please specify an EasingFunction";return this._follow?Promise.reject(t):(this._lerpPromise&&this._lerpResolve&&this._lerpResolve(t),this._lerpPromise=new Promise((t=>{this._lerpResolve=t})),this._lerpStart=this.getFocus().clone(),this._lerpDuration=e,this._lerpEnd=t,this._currentLerpTime=0,this._cameraMoving=!0,this._easing=i,this._lerpPromise)}shake(t,e,i){this._isShaking=!0,this._shakeMagnitudeX=t,this._shakeMagnitudeY=e,this._shakeDuration=i}zoomOverTime(t,e=0,i=Ui.EaseInOutCubic){return this._zoomPromise=new Promise((t=>{this._zoomResolve=t})),e?(this._isZooming=!0,this._zoomEasing=i,this._currentZoomTime=0,this._zoomDuration=e,this._zoomStart=this.zoom,this._zoomEnd=t,this._zoomPromise):(this._isZooming=!1,this.zoom=t,Promise.resolve(!0))}get viewport(){return this._viewport?this._viewport:new P(0,0,0,0)}addStrategy(t){this._cameraStrategies.push(t)}removeStrategy(t){N(t,this._cameraStrategies)}clearAllStrategies(){this._cameraStrategies.length=0}_preupdate(t,e){this.emit("preupdate",new it(t,e,this)),this.onPreUpdate(t,e)}onPreUpdate(t,e){}_postupdate(t,e){this.emit("postupdate",new st(t,e,this)),this.onPostUpdate(t,e)}onPostUpdate(t,e){}get isInitialized(){return this._isInitialized}_initialize(t){if(!this.isInitialized){this._engine=t,this._screen=t.screen;const e=this._screen.resolution;let i=v(e.width/2,e.height/2);if(!this._engine.loadingComplete){const t=this._screen.peekResolution();t&&(i=v(t.width/2,t.height/2))}this._halfWidth=i.x,this._halfHeight=i.y,this._posChanged||(this.pos=i),this.updateTransform(),this.runStrategies(t,t.clock.elapsed()),this.updateViewport(),this.updateTransform(),this.onInitialize(t),super.emit("initialize",new yt(t,this)),this._isInitialized=!0}}onInitialize(t){}on(t,e){super.on(t,e)}off(t,e){super.off(t,e)}once(t,e){super.once(t,e)}runStrategies(t,e){for(const i of this._cameraStrategies)this.pos=i.action.call(i,i.target,this,t,e)}updateViewport(){this._viewport=new P(this.x-this._halfWidth,this.y-this._halfHeight,this.x+this._halfWidth,this.y+this._halfHeight)}update(t,e){if(this._initialize(t),this._preupdate(t,e),this.pos=this.pos.add(this.vel.scale(e/1e3)),this.zoom+=this.dz*e/1e3,this.vel=this.vel.add(this.acc.scale(e/1e3)),this.dz+=this.az*e/1e3,this.rotation+=this.angularVelocity*e/1e3,this._isZooming)if(this._currentZoomTime=this._shakeDuration}}const xs={pos:w.Zero,width:10,height:10,visible:!1,action:()=>{},filter:()=>!0,repeat:-1};class Es extends ls{constructor(t){super({x:t.pos.x,y:t.pos.y,width:t.width,height:t.height}),this.action=()=>{},this.filter=()=>!0,this.repeat=-1,t={...xs,...t},this.filter=t.filter||this.filter,this.repeat=t.repeat||this.repeat,this.action=t.action||this.action,t.target&&(this.target=t.target),this.graphics.visible=t.visible,this.body.collisionType=Pe.Passive,this.eventDispatcher=new bt,this.events.on("collisionstart",(t=>{this.filter(t.other)&&(this.emit("enter",new Et(this,t.other)),this._dispatchAction(),0===this.repeat&&this.kill())})),this.events.on("collisionend",(t=>{this.filter(t.other)&&this.emit("exit",new Bt(this,t.other))}))}set target(t){this._target=t,this.filter=e=>e===t}get target(){return this._target}_initialize(t){super._initialize(t)}_dispatchAction(){0!==this.repeat&&(this.action.call(this),this.repeat--)}}var Bs;!function(t){t.Update="update",t.Draw="draw"}(Bs||(Bs={}));class bs{constructor(){this.priority=0}notify(t){}}class Qs{constructor(t){this.data=t,this.type="Entity Added"}}function Ss(t){return!!t&&"Entity Added"===t.type}class Ds{constructor(t){this.data=t,this.type="Entity Removed"}}function Ts(t){return!!t&&"Entity Removed"===t.type}class ks{constructor(t){this._world=t,this.entities=[],this._entityIndex={},this._entitiesToRemove=[]}updateEntities(t,e){for(const i of this.entities)i.update(t.engine,e),i.active||this.removeEntity(i)}findEntitiesForRemoval(){for(const t of this.entities)t.active||this.removeEntity(t)}notify(t){Si(t)&&this._world.queryManager.addEntity(t.data.entity),Ti(t)&&this._world.queryManager.removeComponent(t.data.entity,t.data.component)}addEntity(t){t.active=!0,t&&!this._entityIndex[t.id]&&(this._entityIndex[t.id]=t,this.entities.push(t),this._world.queryManager.addEntity(t),t.componentAdded$.register(this),t.componentRemoved$.register(this),t.children.forEach((t=>this.addEntity(t))),t.childrenAdded$.register({notify:t=>{this.addEntity(t)}}),t.childrenRemoved$.register({notify:t=>{this.removeEntity(t,!1)}}))}removeEntity(t,e=!0){var i;let s=0;s=t instanceof ki?t.id:t;const r=this._entityIndex[s];r&&r.active&&r.kill(),r&&e?this._entitiesToRemove.push(r):(delete this._entityIndex[s],r&&(N(r,this.entities),this._world.queryManager.removeEntity(r),r.componentAdded$.unregister(this),r.componentRemoved$.unregister(this),r.children.forEach((t=>this.removeEntity(t,e))),r.childrenAdded$.clear(),r.childrenRemoved$.clear(),(null===(i=this._world.context)||void 0===i?void 0:i.engine)&&this._world.context.engine.stats.currFrame.actors.killed++))}processEntityRemovals(){for(const t of this._entitiesToRemove)t.active||this.removeEntity(t,!1)}processComponentRemovals(){for(const t of this.entities)t.processComponentRemoval()}getById(t){return this._entityIndex[t]}getByName(t){return this.entities.filter((e=>e.name===t))}clear(){for(const t of this.entities)this.removeEntity(t)}}const Fs=t=>[...t].sort(((t,e)=>t.localeCompare(e))).join("+");class Ps extends We{constructor(t){super(),this._entities=[],t[0]instanceof Function?this.types=t.map((t=>(new t).type)):this.types=t}get key(){return this._key?this._key:this._key=Fs(this.types)}getEntities(t){return t&&this._entities.sort(t),this._entities}addEntity(t){!G(this._entities,t)&&this.matches(t)&&(this._entities.push(t),this.notifyAll(new Qs(t)))}removeEntity(t){N(t,this._entities)&&this.notifyAll(new Ds(t))}clear(){this._entities.length=0;for(const t of this.observers)this.unregister(t)}matches(t){let e=[];e=t instanceof ki?t.types:t;let i=!0;for(const t of this.types)if(i=i&&e.indexOf(t)>-1,!i)return!1;return i}contain(t){return this.types.indexOf(t)>-1}}class Rs{constructor(t){this._world=t,this._queries={}}_addQuery(t){this._queries[Fs(t.types)]=t;for(const e of this._world.entityManager.entities)t.addEntity(e)}maybeRemoveQuery(t){0===t.observers.length&&(t.clear(),delete this._queries[Fs(t.types)])}addEntity(t){for(const e in this._queries)this._queries[e]&&this._queries[e].addEntity(t)}removeComponent(t,e){for(const i in this._queries)this._queries[i].contain(e.type)&&this._queries[i].removeEntity(t)}removeEntity(t){for(const e in this._queries)this._queries[e].removeEntity(t)}createQuery(t){const e=this.getQuery(t);if(e)return e;const i=new Ps(t);return this._addQuery(i),i}getQuery(t){const e=Fs(t);return this._queries[e]?this._queries[e]:null}}class Ms{constructor(t){this._world=t,this.systems=[],this.initialized=!1}get(t){return this.systems.find((e=>e instanceof t))}addSystem(t){if(!t.types||0===t.types.length)throw new Error("Attempted to add a System without any types");const e=this._world.queryManager.createQuery(t.types);this.systems.push(t),this.systems.sort(((t,e)=>t.priority-e.priority)),e.register(t),this.initialized&&t.initialize&&t.initialize(this._world.context)}removeSystem(t){N(t,this.systems);const e=this._world.queryManager.getQuery(t.types);e&&(e.unregister(t),this._world.queryManager.maybeRemoveQuery(e))}initialize(){if(!this.initialized){this.initialized=!0;for(const t of this.systems)t.initialize&&t.initialize(this._world.context)}}updateSystems(t,e,i){const s=this.systems.filter((e=>e.systemType===t));for(const t of s)t.preupdate&&t.preupdate(e,i);for(const t of s){const s=this._world.queryManager.getQuery(t.types).getEntities(t.sort);if(e instanceof pr)for(const t of s)t._initialize(null==e?void 0:e.engine);t.update(s,i)}for(const t of s)t.postupdate&&t.postupdate(e,i)}clear(){for(const t of this.systems)this.removeSystem(t)}}class Ls{constructor(t){this.context=t,this.queryManager=new Rs(this),this.entityManager=new ks(this),this.systemManager=new Ms(this)}update(t,e){t===Bs.Update&&this.entityManager.updateEntities(this.context,e),this.systemManager.updateSystems(t,this.context,e),this.entityManager.findEntitiesForRemoval(),this.entityManager.processComponentRemovals(),this.entityManager.processEntityRemovals()}add(t){t instanceof ki&&this.entityManager.addEntity(t),t instanceof bs&&this.systemManager.addSystem(t)}remove(t,e=!0){t instanceof ki&&this.entityManager.removeEntity(t,e),t instanceof bs&&this.systemManager.removeSystem(t)}clearEntities(){this.entityManager.clear()}clearSystems(){this.systemManager.clear()}}class Ns{static integrate(t,e,i,s){const r=s/1e3;e.vel.addEqual(i.scale(r,Ns._ACC)),t.pos.add(e.vel.scale(r,Ns._VEL),Ns._POS).addEqual(i.scale(.5*r*r,Ns._VEL_ACC)),e.angularVelocity+=e.torque*(1/e.inertia)*r;const n=t.rotation+e.angularVelocity*r;t.scale.add(e.scaleFactor.scale(r,this._SCALE_FACTOR),Ns._SCALE),t.get().setTransform(Ns._POS,n,Ns._SCALE)}}Ns._POS=new w(0,0),Ns._SCALE=new w(1,1),Ns._ACC=new w(0,0),Ns._VEL=new w(0,0),Ns._VEL_ACC=new w(0,0),Ns._SCALE_FACTOR=new w(0,0);class Gs extends bs{constructor(){super(...arguments),this.types=["ex.transform","ex.motion"],this.systemType=Bs.Update,this.priority=-1}update(t,e){let i,s;for(let r=0;r!t.isCanceled()))).sort(((t,e)=>this.distanceMap.get(t.id)-this.distanceMap.get(e.id)));for(const e of t)this.solvePosition(e),this.solveVelocity(e);return this.postSolve(t),t}preSolve(t){for(const e of t){const t=E.fromDirection(e.mtv),i=e.mtv.negate(),s=e.colliderA.worldPos.squareDistance(e.colliderB.worldPos);this.distanceMap.set(e.id,s),e.colliderA.events.emit("precollision",new dt(e.colliderA,e.colliderB,t,i)),e.colliderB.events.emit("precollision",new dt(e.colliderB,e.colliderA,E.getOpposite(t),i.negate()))}}postSolve(t){var e,i;for(const s of t){if(s.isCanceled())continue;const t=s.colliderA,r=s.colliderB,n=null===(e=t.owner)||void 0===e?void 0:e.get(bi),o=null===(i=r.owner)||void 0===i?void 0:i.get(bi);if(n&&o&&(n.collisionType===Pe.Passive||o.collisionType===Pe.Passive))continue;const a=E.fromDirection(s.mtv),h=s.mtv.negate();s.colliderA.events.emit("postcollision",new ut(s.colliderA,s.colliderB,a,h)),s.colliderB.events.emit("postcollision",new ut(s.colliderB,s.colliderA,E.getOpposite(a),h.negate()))}}solvePosition(t){var e,i;const s=1e-4;if(!t.colliderA.bounds.overlaps(t.colliderB.bounds,s))return void t.cancel();if(Math.abs(t.mtv.x)!t.isCanceled())),this.solveVelocity(t),this.solvePosition(t),this.postSolve(t),t}preSolve(t){var e,i,s;for(const e of t){const t=E.fromDirection(e.mtv);e.colliderA.events.emit("precollision",new dt(e.colliderA,e.colliderB,t,e.mtv)),e.colliderA.events.emit("beforecollisionresolve",new _t(e.colliderA,e.colliderB,t,e.mtv,e)),e.colliderB.events.emit("precollision",new dt(e.colliderB,e.colliderA,E.getOpposite(t),e.mtv.negate())),e.colliderB.events.emit("beforecollisionresolve",new _t(e.colliderB,e.colliderA,E.getOpposite(t),e.mtv.negate(),e)),e.matchAwake()}const r=Array.from(this.idToContactConstraint.keys());for(const n of t){const t=r.indexOf(n.id);t>-1&&r.splice(t,1);const o=null!==(e=this.idToContactConstraint.get(n.id))&&void 0!==e?e:[];let a=0;const h=n.colliderA.owner.get(bi),l=n.colliderB.owner.get(bi);if(h&&l)for(const t of n.points){const e=n.normal,r=n.tangent,A=t.sub(h.globalPos),c=t.sub(l.globalPos),d=A.cross(e),u=c.cross(e),g=h.inverseMass+l.inverseMass+h.inverseInertia*d*d+l.inverseInertia*u*u,p=A.cross(r),_=c.cross(r),f=h.inverseMass+l.inverseMass+h.inverseInertia*p*p+l.inverseInertia*_*_;o[a]&&(null===(s=null===(i=o[a])||void 0===i?void 0:i.point)||void 0===s?void 0:s.squareDistance(t))<4?(o[a].point=t,o[a].local=n.localPoints[a]):o[a]=new zs(t,n.localPoints[a],n),o[a].aToContact=A,o[a].bToContact=c,o[a].normalMass=1/g,o[a].tangentMass=1/f;const m=h.bounciness>l.bounciness?h.bounciness:l.bounciness,C=n.normal.dot(o[a].getRelativeVelocity());o[a].originalVelocityAndRestitution=0,C<-.1&&(o[a].originalVelocityAndRestitution=-m*C),a++}this.idToContactConstraint.set(n.id,o)}for(const t of r)this.idToContactConstraint.delete(t);if(qe.warmStart)this.warmStart(t);else for(const e of t){const t=this.getContactConstraints(e.id);for(const e of t)e.normalImpulse=0,e.tangentImpulse=0}}postSolve(t){for(const e of t){const t=e.colliderA.owner.get(bi),i=e.colliderB.owner.get(bi);if(t&&i){if(t.collisionType===Pe.Passive||i.collisionType===Pe.Passive)continue;t.updateMotion(),i.updateMotion()}const s=E.fromDirection(e.mtv);e.colliderA.events.emit("postcollision",new ut(e.colliderA,e.colliderB,s,e.mtv)),e.colliderA.events.emit("aftercollisionresolve",new ft(e.colliderA,e.colliderB,s,e.mtv,e)),e.colliderB.events.emit("postcollision",new ut(e.colliderB,e.colliderA,E.getOpposite(s),e.mtv.negate())),e.colliderB.events.emit("aftercollisionresolve",new ft(e.colliderB,e.colliderA,E.getOpposite(s),e.mtv.negate(),e))}this.lastFrameContacts.clear();for(const e of t)this.lastFrameContacts.set(e.id,e)}warmStart(t){var e,i,s;for(const r of t){const t=null===(e=r.colliderA.owner)||void 0===e?void 0:e.get(bi),n=null===(i=r.colliderB.owner)||void 0===i?void 0:i.get(bi);if(t&&n){const e=null!==(s=this.idToContactConstraint.get(r.id))&&void 0!==s?s:[];for(const i of e)if(qe.warmStart){const e=r.normal.scale(i.normalImpulse),s=r.tangent.scale(i.tangentImpulse),o=e.add(s);t.applyImpulse(i.point,o.negate()),n.applyImpulse(i.point,o)}else i.normalImpulse=0,i.tangentImpulse=0}}}solvePosition(t){var e,i,s;for(let r=0;rthis._processor.track(t),this._untrackCollider=t=>this._processor.untrack(t)}notify(t){if(Ss(t)){const e=t.data.get(mi);e.$colliderAdded.subscribe(this._trackCollider),e.$colliderRemoved.subscribe(this._untrackCollider);const i=e.get();i&&this._processor.track(i)}else{const e=t.data.get(mi),i=e.get();e&&i&&this._processor.untrack(i)}}initialize(t){this._engine=t.engine}update(t,e){var i,s,r,n;if(!qe.enabled)return;let o=[];for(const e of t){const t=e.get(mi),s=null==t?void 0:t.get();if(t&&(null===(i=t.owner)||void 0===i?void 0:i.active)&&s)if(t.update(),s instanceof ai){const t=s.getColliders();o=o.concat(t)}else o.push(s)}this._processor.update(o);const a=this._processor.broadphase(o,e);this._currentFrameContacts.clear();let h=this._processor.narrowphase(a,null===(n=null===(r=null===(s=this._engine)||void 0===s?void 0:s.debug)||void 0===r?void 0:r.stats)||void 0===n?void 0:n.currFrame);h=this.getSolver().solve(h);for(const t of h){const e=t.id.indexOf("|");if(e>0){const i=t.id.substring(e+1);this._currentFrameContacts.set(i,t)}else this._currentFrameContacts.set(t.id,t)}this.runContactStartEnd(),this._lastFrameContacts.clear(),this._lastFrameContacts=new Map(this._currentFrameContacts)}getSolver(){return qe.collisionResolutionStrategy===Ue.Realistic?this._realisticSolver:this._arcadeSolver}debug(t){this._processor.debug(t)}runContactStartEnd(){for(const[t,e]of this._currentFrameContacts)if(!this._lastFrameContacts.has(t)){const t=e.colliderA,i=e.colliderB;t.events.emit("collisionstart",new mt(t,i,e)),t.events.emit("contactstart",new gt(t,i,e)),i.events.emit("collisionstart",new mt(i,t,e)),i.events.emit("contactstart",new gt(i,t,e))}for(const[t,e]of this._lastFrameContacts)if(!this._currentFrameContacts.has(t)){const t=e.colliderA,i=e.colliderB;t.events.emit("collisionend",new Ct(t,i)),t.events.emit("contactend",new pt(t,i)),i.events.emit("collisionend",new Ct(i,t)),i.events.emit("contactend",new pt(i,t))}}}var qs,Ys,js,Vs,Ks,Js,Ws,Xs,Zs,$s,tr,er;!function(t){t.Forward="forward",t.Backward="backward"}(qs||(qs={})),function(t){t.End="end",t.Loop="loop",t.PingPong="pingpong",t.Freeze="freeze"}(Ys||(Ys={}));class ir extends Tt{constructor(t){var e,i;super(t),this.events=new bt,this.frames=[],this.strategy=Ys.Loop,this.frameDuration=100,this.timeScale=1,this._idempotencyToken=-1,this._firstTick=!0,this._currentFrame=0,this._timeLeftInFrame=0,this._direction=1,this._done=!1,this._playing=!0,this._reversed=!1,this.frames=t.frames,this.strategy=null!==(e=t.strategy)&&void 0!==e?e:this.strategy,this.frameDuration=t.totalDuration?t.totalDuration/this.frames.length:null!==(i=t.frameDuration)&&void 0!==i?i:this.frameDuration,t.reverse&&this.reverse(),this.goToFrame(0)}clone(){return new ir({frames:this.frames.map((t=>({...t}))),frameDuration:this.frameDuration,reverse:this._reversed,strategy:this.strategy,...this.cloneGraphicOptions()})}get width(){const t=this.currentFrame;return t?Math.abs(t.graphic.width*this.scale.x):0}get height(){const t=this.currentFrame;return t?Math.abs(t.graphic.height*this.scale.y):0}static fromSpriteSheet(t,e,i,s=Ys.Loop){const r=t.sprites.length-1,n=e.filter((t=>t<0||t>r));return n.length&&ir._LOGGER.warn(`Indices into SpriteSheet were provided that don't exist: ${n.join(",")} no frame will be shown`),new ir({frames:t.sprites.filter(((t,i)=>e.indexOf(i)>-1)).map((t=>({graphic:t,duration:i}))),strategy:s})}get currentFrame(){return this._currentFrame>=0&&this._currentFrame=this.frames.length&&(this._done=!0,this._currentFrame=this.frames.length,this.events.emit("end",this));break;case Ys.Freeze:e=p(t+1,0,this.frames.length-1),e>=this.frames.length-1&&(this._done=!0,this.events.emit("end",this));break;case Ys.PingPong:t+this._direction>=this.frames.length&&(this._direction=-1,this.events.emit("loop",this)),t+this._direction<0&&(this._direction=1,this.events.emit("loop",this)),e=t+this._direction%this.frames.length}return e}tick(t,e=0){this._idempotencyToken!==e&&(this._idempotencyToken=e,this._playing&&(this._firstTick&&(this._firstTick=!1,this.events.emit("frame",this.currentFrame)),this._timeLeftInFrame-=t*this.timeScale,this._timeLeftInFrame<=0&&this.goToFrame(this._nextFrame())))}_drawImage(t,e,i){this.currentFrame&&this.currentFrame.graphic.draw(t,e,i)}}ir._LOGGER=S.getInstance();class sr extends Tt{constructor(t){super(t),this.members=[],this.members=t.members,this._updateDimensions()}clone(){return new sr({members:[...this.members],...this.cloneGraphicOptions()})}_updateDimensions(){let t=new P;for(const{graphic:e,pos:i}of this.members)t=e.localBounds.translate(i).combine(t);return this.width=t.width,this.height=t.height,t}get localBounds(){let t=new P;for(const{graphic:e,pos:i}of this.members)t=e.localBounds.translate(i).combine(t);return t}_isAnimationOrGroup(t){return t instanceof ir||t instanceof sr}tick(t,e){for(const i of this.members){const s=i.graphic;this._isAnimationOrGroup(s)&&s.tick(t,e)}}reset(){for(const t of this.members){const e=t.graphic;this._isAnimationOrGroup(e)&&e.reset()}}_preDraw(t,e,i){this._updateDimensions(),super._preDraw(t,e,i)}_drawImage(t,e,i){for(const s of this.members)t.save(),t.translate(e,i),s.graphic.draw(t,s.pos.x,s.pos.y),this.showDebug&&t.debug.drawRect(0,0,this.width,this.height),t.restore()}}function rr(t){return class extends t{assign(t){for(const e in t)"function"!=typeof this[e]&&(this[e]=t[e])}constructor(...t){super(...t),1!==t.filter((function(t){return void 0!==t})).length||!t[0]||"object"!=typeof t[0]||t[0]instanceof Array||this.assign(t[0])}}}!function(t){t[t.Circle=0]="Circle",t[t.Rectangle=1]="Rectangle"}(js||(js={}));class nr extends ki{constructor(t,e,i,s,r,n,o,a,h,l){super(),this.position=new w(0,0),this.velocity=new w(0,0),this.acceleration=new w(0,0),this.particleRotationalVelocity=0,this.currentRotation=0,this.focus=null,this.focusAccel=0,this.opacity=1,this.beginColor=k.White,this.endColor=k.White,this.life=300,this.fadeFlag=!1,this._rRate=1,this._gRate=1,this._bRate=1,this._aRate=0,this._currentColor=k.White,this.emitter=null,this.particleSize=5,this.particleSprite=null,this.sizeRate=0,this.elapsedMultiplier=0,this.visible=!0,this.isOffscreen=!1;let A=t;if(A&&!(t instanceof ar)){const c=t;A=c.emitter,e=c.life,i=c.opacity,r=c.endColor,s=c.beginColor,n=c.position,o=c.velocity,a=c.acceleration,h=c.startSize,l=c.endSize}this.emitter=A,this.life=e||this.life,this.opacity=i||this.opacity,this.endColor=r||this.endColor.clone(),this.beginColor=s||this.beginColor.clone(),this._currentColor=this.beginColor.clone(),this.position=(n||this.position).add(this.emitter.pos),this.velocity=o||this.velocity,this.acceleration=a||this.acceleration,this._rRate=(this.endColor.r-this.beginColor.r)/this.life,this._gRate=(this.endColor.g-this.beginColor.g)/this.life,this._bRate=(this.endColor.b-this.beginColor.b)/this.life,this._aRate=this.opacity/this.life,this.startSize=h||0,this.endSize=l||0,this.endSize>0&&this.startSize>0&&(this.sizeRate=(this.endSize-this.startSize)/this.life,this.particleSize=this.startSize),this.addComponent(this.transform=new Xe),this.addComponent(this.graphics=new Mi),this.transform.pos=this.position,this.transform.rotation=this.currentRotation,this.transform.scale=v(1,1),this.particleSprite?(this.graphics.opacity=this.opacity,this.graphics.use(this.particleSprite)):(this.graphics.localBounds=P.fromDimension(this.particleSize,this.particleSize,w.Half),this.graphics.onPostDraw=t=>{t.save(),this.graphics.opacity=this.opacity;const e=this._currentColor.clone();e.a=1,t.debug.drawPoint(v(0,0),{color:e,size:this.particleSize}),t.restore()})}kill(){this.emitter.removeParticle(this)}update(t,e){if(this.life=this.life-e,this.elapsedMultiplier=this.elapsedMultiplier+e,this.life<0&&this.kill(),this.fadeFlag&&(this.opacity=p(this._aRate*this.life,1e-4,1)),this.startSize>0&&this.endSize>0&&(this.particleSize=p(this.sizeRate*e+this.particleSize,Math.min(this.startSize,this.endSize),Math.max(this.startSize,this.endSize))),this._currentColor.r=p(this._currentColor.r+this._rRate*e,0,255),this._currentColor.g=p(this._currentColor.g+this._gRate*e,0,255),this._currentColor.b=p(this._currentColor.b+this._bRate*e,0,255),this._currentColor.a=p(this.opacity,1e-4,1),this.focus){const t=this.focus.sub(this.position).normalize().scale(this.focusAccel).scale(e/1e3);this.velocity=this.velocity.add(t)}else this.velocity=this.velocity.add(this.acceleration.scale(e/1e3));this.position=this.position.add(this.velocity.scale(e/1e3)),this.particleRotationalVelocity&&(this.currentRotation=(this.currentRotation+this.particleRotationalVelocity*e/1e3)%(2*Math.PI)),this.transform.pos=this.position,this.transform.rotation=this.currentRotation,this.transform.scale=v(1,1),this.graphics.opacity=this.opacity}}class or extends(rr(nr)){constructor(t,e,i,s,r,n,o,a,h,l){super(t,e,i,s,r,n,o,a,h,l)}}class ar extends ls{constructor(t){var e,i;super({width:null!==(e=t.width)&&void 0!==e?e:0,height:null!==(i=t.height)&&void 0!==i?i:0}),this._particlesToEmit=0,this.numParticles=0,this.isEmitting=!0,this.particles=[],this.deadParticles=[],this.minVel=0,this.maxVel=0,this.acceleration=new w(0,0),this.minAngle=0,this.maxAngle=0,this.emitRate=1,this.particleLife=2e3,this.fadeFlag=!1,this.focus=null,this.focusAccel=null,this.startSize=null,this.endSize=null,this.minSize=5,this.maxSize=5,this.beginColor=k.White,this.endColor=k.White,this._sprite=null,this.emitterType=js.Rectangle,this.radius=0,this.particleRotationalVelocity=0,this.randomRotation=!1;const{x:s,y:r,pos:n,isEmitting:o,minVel:a,maxVel:h,acceleration:l,minAngle:A,maxAngle:d,emitRate:u,particleLife:g,opacity:p,fadeFlag:_,focus:f,focusAccel:m,startSize:C,endSize:y,minSize:I,maxSize:x,beginColor:E,endColor:B,particleSprite:b,emitterType:Q,radius:S,particleRotationalVelocity:D,randomRotation:T,random:F}={...t};this.pos=null!=n?n:v(null!=s?s:0,null!=r?r:0),this.isEmitting=null!=o?o:this.isEmitting,this.minVel=null!=a?a:this.minVel,this.maxVel=null!=h?h:this.maxVel,this.acceleration=null!=l?l:this.acceleration,this.minAngle=null!=A?A:this.minAngle,this.maxAngle=null!=d?d:this.maxAngle,this.emitRate=null!=u?u:this.emitRate,this.particleLife=null!=g?g:this.particleLife,this.opacity=null!=p?p:this.opacity,this.fadeFlag=null!=_?_:this.fadeFlag,this.focus=null!=f?f:this.focus,this.focusAccel=null!=m?m:this.focusAccel,this.startSize=null!=C?C:this.startSize,this.endSize=null!=y?y:this.endSize,this.minSize=null!=I?I:this.minSize,this.maxSize=null!=x?x:this.maxSize,this.beginColor=null!=E?E:this.beginColor,this.endColor=null!=B?B:this.endColor,this.particleSprite=null!=b?b:this.particleSprite,this.emitterType=null!=Q?Q:this.emitterType,this.radius=null!=S?S:this.radius,this.particleRotationalVelocity=null!=D?D:this.particleRotationalVelocity,this.randomRotation=null!=T?T:this.randomRotation,this.body.collisionType=Pe.PreventCollision,this.random=null!=F?F:new c}get opacity(){return super.graphics.opacity}set opacity(t){super.graphics.opacity=t}get particleSprite(){return this._sprite}set particleSprite(t){t&&(this._sprite=t)}removeParticle(t){this.deadParticles.push(t)}emitParticles(t){var e;for(let i=0;i1&&(this.emitParticles(Math.floor(this._particlesToEmit)),this._particlesToEmit=this._particlesToEmit-Math.floor(this._particlesToEmit)));for(let t=0;t{this._zHasChanged=!0}}get sortedTransforms(){return this._sortedTransforms}initialize(t){this._camera=t.camera,this._engine=t.engine}preupdate(){this._graphicsContext=this._engine.graphicsContext,this._zHasChanged&&(this._sortedTransforms.sort(((t,e)=>t.z-e.z)),this._zHasChanged=!1)}notify(t){if(Ss(t)){const e=t.data.get(Xe);this._sortedTransforms.push(e),e.zIndexChanged$.subscribe(this._zIndexUpdate),this._zHasChanged=!0}else{const e=t.data.get(Xe);e.zIndexChanged$.unsubscribe(this._zIndexUpdate);const i=this._sortedTransforms.indexOf(e);i>-1&&this._sortedTransforms.splice(i,1)}}update(t,e){let i;this._token++,this._graphicsContext.save(),this._camera&&this._camera.draw(this._graphicsContext);for(const t of this._sortedTransforms){const s=t.owner;if(s.hasTag("ex.offscreen"))continue;if(i=s.get(Mi),!i.visible)continue;t.coordPlane===He.Screen&&this._graphicsContext.restore(),this._graphicsContext.save(),i.update(e,this._token);const r=s.get(us);if(r){const t=w.One.sub(r.parallaxFactor),e=this._camera.pos.scale(t);this._graphicsContext.translate(e.x,e.y)}this._applyTransform(s),i.onPreDraw&&i.onPreDraw(this._graphicsContext,e);const n=s instanceof or?s.opacity:1;this._graphicsContext.opacity=i.opacity*n,this._drawGraphicsComponent(i),i.onPostDraw&&i.onPostDraw(this._graphicsContext,e),this._graphicsContext.restore(),t.coordPlane===He.Screen&&(this._graphicsContext.save(),this._camera&&this._camera.draw(this._graphicsContext))}this._graphicsContext.restore()}_drawGraphicsComponent(t){var e,i;if(t.visible)for(const s of t.layers.get())for(const{graphic:r,options:n}of s.graphics){let o=t.anchor,a=t.offset;(null==n?void 0:n.anchor)&&(o=n.anchor),(null==n?void 0:n.offset)&&(a=n.offset);const h=-r.width*o.x+a.x,l=-r.height*o.y+a.y;if(null==r||r.draw(this._graphicsContext,h+s.offset.x,l+s.offset.y),(null===(e=this._engine)||void 0===e?void 0:e.isDebug)&&this._engine.debug.graphics.showBounds){const t=v(h+s.offset.x,l+s.offset.y);if(r instanceof sr)for(const e of r.members)null===(i=e.graphic)||void 0===i||i.localBounds.translate(t.add(e.pos)).draw(this._graphicsContext,this._engine.debug.graphics.boundsColor);else null==r||r.localBounds.translate(t).draw(this._graphicsContext,this._engine.debug.graphics.boundsColor)}}}_applyTransform(t){const e=t.getAncestors();for(const t of e){const e=null==t?void 0:t.get(Xe),i=null==t?void 0:t.get(bi);let s=e.pos,r=e.scale,n=e.rotation;if(i&&this._engine.fixedUpdateFps&&i.__oldTransformCaptured&&i.enableFixedUpdateInterpolate){const t=this._engine.currentFrameLagMs/(1e3/this._engine.fixedUpdateFps);s=e.pos.scale(t).add(i.oldPos.scale(1-t)),r=e.scale.scale(t).add(i.oldScale.scale(1-t));const o=(1-t)*Math.cos(i.oldRotation)+t*Math.cos(e.rotation),a=(1-t)*Math.sin(i.oldRotation)+t*Math.sin(e.rotation);n=Math.atan2(a,o)}e&&(this._graphicsContext.z=e.z,this._graphicsContext.translate(s.x,s.y),this._graphicsContext.scale(r.x,r.y),this._graphicsContext.rotate(n))}}}class lr extends bs{constructor(){super(...arguments),this.types=["ex.transform"],this.systemType=Bs.Draw,this.priority=999}initialize(t){this._graphicsContext=t.engine.graphicsContext,this._camera=t.camera,this._engine=t.engine,this._collisionSystem=t.world.systemManager.get(Hs)}update(t,e){var i;if(!this._engine.isDebug)return;const s=this._engine.debug.filter;let r,n;const o=this._engine.debug.entity;let a;const h=this._engine.debug.transform;let l;const A=this._engine.debug.motion;let c;const d=this._engine.debug.collider,u=this._engine.debug.physics;let g;const p=this._engine.debug.graphics;let _,m;const C=this._engine.debug.body,y=this._engine.debug.camera;for(const e of t){if(e.hasTag("offscreen"))continue;if(e instanceof or)continue;if(s.useFilter){if(0!==s.ids.length&&!s.ids.includes(e.id))continue;if(""!==s.nameQuery&&!e.name.includes(s.nameQuery))continue}let t=w.Zero;const u=v(0,16);if(r=e.id,n=e.name,a=e.get(Xe),this._pushCameraTransform(a),this._graphicsContext.save(),this._applyTransform(e),a&&((h.showAll||h.showPosition)&&this._graphicsContext.debug.drawPoint(w.Zero,{size:4,color:h.positionColor}),(h.showAll||h.showPositionLabel)&&(this._graphicsContext.debug.drawText(`pos${a.pos.toString(2)}`,t),t=t.add(u)),(h.showAll||h.showZIndex)&&(this._graphicsContext.debug.drawText(`z(${a.z.toFixed(1)})`,t),t=t.add(u)),(o.showAll||o.showId)&&(this._graphicsContext.debug.drawText(`id(${r}) ${e.parent?"child of id("+(null===(i=e.parent)||void 0===i?void 0:i.id)+")":""}`,t),t=t.add(u)),(o.showAll||o.showName)&&(this._graphicsContext.debug.drawText(`name(${n})`,t),t=t.add(u)),(h.showAll||h.showRotation)&&(this._graphicsContext.drawLine(w.Zero,w.fromAngle(a.rotation).scale(50).add(w.Zero),h.rotationColor,2),this._graphicsContext.debug.drawText(`rot deg(${f(a.rotation).toFixed(2)})`,t),t=t.add(u)),(h.showAll||h.showScale)&&this._graphicsContext.drawLine(w.Zero,a.scale.add(w.Zero),h.scaleColor,2)),g=e.get(Mi),g&&(p.showAll||p.showBounds)&&g.localBounds.draw(this._graphicsContext,p.boundsColor),_=e.get(gs),_&&(_.useTransform||this._graphicsContext.restore(),_.draw(this._graphicsContext),_.useTransform||(this._graphicsContext.save(),this._applyTransform(e))),m=e.get(bi),m&&((C.showAll||C.showCollisionGroup)&&(this._graphicsContext.debug.drawText(`collision group(${m.group.name})`,t),t=t.add(u)),(C.showAll||C.showCollisionType)&&(this._graphicsContext.debug.drawText(`collision type(${m.collisionType})`,t),t=t.add(u)),(C.showAll||C.showMass)&&(this._graphicsContext.debug.drawText(`mass(${m.mass})`,t),t=t.add(u)),(C.showAll||C.showMotion)&&(this._graphicsContext.debug.drawText(`motion(${m.sleepMotion})`,t),t=t.add(u)),(C.showAll||C.showSleeping)&&(this._graphicsContext.debug.drawText(`sleeping(${m.canSleep?m.sleeping:"cant sleep"})`,t),t=t.add(u))),this._graphicsContext.restore(),l=e.get(Ze),l&&((A.showAll||A.showVelocity)&&(this._graphicsContext.debug.drawText(`vel${l.vel.toString(2)}`,t.add(a.globalPos)),this._graphicsContext.drawLine(a.globalPos,a.globalPos.add(l.vel),A.velocityColor,2),t=t.add(u)),(A.showAll||A.showAcceleration)&&this._graphicsContext.drawLine(a.globalPos,a.globalPos.add(l.acc),A.accelerationColor,2)),c=e.get(mi),c){const t=c.get();if((d.showAll||d.showGeometry)&&t&&t.debug(this._graphicsContext,d.geometryColor),d.showAll||d.showBounds)if(t instanceof ai){const e=t.getColliders();for(const t of e){const e=t.bounds,i=v(e.left,e.top);this._graphicsContext.debug.drawRect(i.x,i.y,e.width,e.height,{color:d.boundsColor}),(d.showAll||d.showOwner)&&this._graphicsContext.debug.drawText(`owner id(${t.owner.id})`,i)}c.bounds.draw(this._graphicsContext,d.boundsColor)}else if(t){const t=c.bounds,e=v(t.left,t.top);this._graphicsContext.debug.drawRect(e.x,e.y,t.width,t.height,{color:d.boundsColor}),(d.showAll||d.showOwner)&&this._graphicsContext.debug.drawText(`owner id(${c.owner.id})`,e)}}this._popCameraTransform(a)}if(this._graphicsContext.save(),this._camera.draw(this._graphicsContext),(u.showAll||u.showBroadphaseSpacePartitionDebug)&&this._collisionSystem.debug(this._graphicsContext),u.showAll||u.showCollisionContacts||u.showCollisionNormals)for(const[t,e]of this._engine.debug.stats.currFrame.physics.contacts){if(u.showAll||u.showCollisionContacts)for(const t of e.points)this._graphicsContext.debug.drawPoint(t,{size:5,color:u.collisionContactColor});if(u.showAll||u.showCollisionNormals)for(const t of e.points)this._graphicsContext.debug.drawLine(t,e.normal.scale(30).add(t),{color:u.collisionNormalColor})}this._graphicsContext.restore(),y&&(this._graphicsContext.save(),this._camera.draw(this._graphicsContext),(y.showAll||y.showFocus)&&this._graphicsContext.drawCircle(this._camera.pos,4,y.focusColor),(y.showAll||y.showZoom)&&this._graphicsContext.debug.drawText(`zoom(${this._camera.zoom})`,this._camera.pos),this._graphicsContext.restore()),this._graphicsContext.flush()}_applyTransform(t){const e=t.getAncestors();for(const t of e){const e=null==t?void 0:t.get(Xe);e&&(this._graphicsContext.translate(e.pos.x,e.pos.y),this._graphicsContext.scale(e.scale.x,e.scale.y),this._graphicsContext.rotate(e.rotation))}}_pushCameraTransform(t){t.coordPlane===He.World&&(this._graphicsContext.save(),this._camera&&this._camera.draw(this._graphicsContext))}_popCameraTransform(t){t.coordPlane===He.World&&this._graphicsContext.restore()}}class Ar extends bs{constructor(){super(...arguments),this.types=["ex.transform","ex.pointer"],this.systemType=Bs.Update,this.priority=-1,this.overrideUseColliderShape=!1,this.overrideUseGraphicsBounds=!1,this.lastFrameEntityToPointers=new Map,this.currentFrameEntityToPointers=new Map,this._sortedTransforms=[],this._sortedEntities=[],this._zHasChanged=!1,this._zIndexUpdate=()=>{this._zHasChanged=!0}}initialize(t){this._engine=t.engine}preupdate(){this._receiver=this._engine.input.pointers,this._zHasChanged&&(this._sortedTransforms.sort(((t,e)=>e.z-t.z)),this._sortedEntities=this._sortedTransforms.map((t=>t.owner)),this._zHasChanged=!1)}notify(t){if(Ss(t)){const e=t.data.get(Xe);this._sortedTransforms.push(e),this._sortedEntities.push(e.owner),e.zIndexChanged$.subscribe(this._zIndexUpdate),this._zHasChanged=!0}else{const e=t.data.get(Xe);e.zIndexChanged$.unsubscribe(this._zIndexUpdate);const i=this._sortedTransforms.indexOf(e);i>-1&&(this._sortedTransforms.splice(i,1),this._sortedEntities.splice(i,1))}}entityCurrentlyUnderPointer(t,e){return this.currentFrameEntityToPointers.has(t.id)&&this.currentFrameEntityToPointers.get(t.id).includes(e)}entityWasUnderPointer(t,e){return this.lastFrameEntityToPointers.has(t.id)&&this.lastFrameEntityToPointers.get(t.id).includes(e)}entered(t,e){return this.entityCurrentlyUnderPointer(t,e)&&!this.lastFrameEntityToPointers.has(t.id)}left(t,e){return!this.currentFrameEntityToPointers.has(t.id)&&this.entityWasUnderPointer(t,e)}addPointerToEntity(t,e){if(!this.currentFrameEntityToPointers.has(t.id))return void this.currentFrameEntityToPointers.set(t.id,[e]);const i=this.currentFrameEntityToPointers.get(t.id);this.currentFrameEntityToPointers.set(t.id,i.concat(e))}update(t){this._processPointerToEntity(this._sortedEntities),this._dispatchEvents(this._sortedEntities),this._receiver.update(),this.lastFrameEntityToPointers.clear(),this.lastFrameEntityToPointers=new Map(this.currentFrameEntityToPointers),this.currentFrameEntityToPointers.clear(),this._receiver.clear()}_processPointerToEntity(t){var e;let i,s,r,n;for(const o of t){if(i=o.get(Xe),n=null!==(e=o.get(Gi))&&void 0!==e?e:new Gi,s=o.get(mi),s&&(n.useColliderShape||this.overrideUseColliderShape)){s.update();const t=s.get();if(t)for(const[e,s]of this._receiver.currentFramePointerCoords.entries())t.contains(i.coordPlane===He.World?s.worldPos:s.screenPos)&&this.addPointerToEntity(o,e)}if(r=o.get(Mi),r&&(n.useGraphicsBounds||this.overrideUseGraphicsBounds)){const t=r.localBounds.transform(i.get().matrix);for(const[e,s]of this._receiver.currentFramePointerCoords.entries())t.contains(i.coordPlane===He.World?s.worldPos:s.screenPos)&&this.addPointerToEntity(o,e)}}}_processDownAndEmit(t){const e=new Map;for(const i of this._receiver.currentFrameDown)i.active&&t.active&&this.entityCurrentlyUnderPointer(t,i.pointerId)&&(t.events.emit("pointerdown",i),this._receiver.isDragStart(i.pointerId)&&t.events.emit("pointerdragstart",i)),e.set(i.pointerId,i);return e}_processUpAndEmit(t){const e=new Map;for(const i of this._receiver.currentFrameUp)i.active&&t.active&&this.entityCurrentlyUnderPointer(t,i.pointerId)&&(t.events.emit("pointerup",i),this._receiver.isDragEnd(i.pointerId)&&t.events.emit("pointerdragend",i)),e.set(i.pointerId,i);return e}_processMoveAndEmit(t){const e=new Map;for(const i of this._receiver.currentFrameMove)i.active&&t.active&&this.entityCurrentlyUnderPointer(t,i.pointerId)&&(t.events.emit("pointermove",i),this._receiver.isDragging(i.pointerId)&&t.events.emit("pointerdragmove",i)),e.set(i.pointerId,i);return e}_processEnterLeaveAndEmit(t,e){for(const i of e){if(i.active&&t.active&&this.entered(t,i.pointerId)){t.events.emit("pointerenter",i),this._receiver.isDragging(i.pointerId)&&t.events.emit("pointerdragenter",i);break}if(i.active&&t.active&&(this.left(t,i.pointerId)||this.entityCurrentlyUnderPointer(t,i.pointerId)&&"up"===i.type)){t.events.emit("pointerleave",i),this._receiver.isDragging(i.pointerId)&&t.events.emit("pointerdragleave",i);break}}}_processCancelAndEmit(t){for(const e of this._receiver.currentFrameCancel)e.active&&t.active&&this.entityCurrentlyUnderPointer(t,e.pointerId)&&t.events.emit("pointercancel",e)}_processWheelAndEmit(t){for(const e of this._receiver.currentFrameWheel)e.active&&t.active&&this.entityCurrentlyUnderPointer(t,0)&&t.events.emit("pointerwheel",e)}_dispatchEvents(t){const e=new Set(this.lastFrameEntityToPointers.keys()),i=new Set(this.currentFrameEntityToPointers.keys()),s=t.filter((t=>e.has(t.id)||i.has(t.id)));let r,n,o;for(const t of s){o=this._processDownAndEmit(t),n=this._processUpAndEmit(t),r=this._processMoveAndEmit(t);const e=[...r.values(),...o.values(),...n.values()];this._processEnterLeaveAndEmit(t,e),this._processCancelAndEmit(t),this._processWheelAndEmit(t)}}}class cr extends bs{constructor(){super(...arguments),this.types=["ex.actions"],this.systemType=Bs.Update,this.priority=-1,this._actions=[]}notify(t){if(Ss(t)){const e=t.data.get(os);this._actions.push(e)}else{const e=t.data.get(os),i=this._actions.indexOf(e);i>-1&&this._actions.splice(i,1)}}update(t,e){for(const t of this._actions)t.update(e)}}class dr extends Ke{constructor(t){super(),this.type="ex.isometricentity",this.elevation=0,this.map=t}}class ur extends bs{constructor(){super(...arguments),this.types=["ex.transform","ex.isometricentity"],this.systemType=Bs.Update,this.priority=99}update(t,e){let i,s;for(const e of t){i=e.get(Xe),s=e.get(dr);const t=Math.max(s.map.columns*s.map.tileWidth,s.map.rows*s.map.tileHeight)*s.elevation+i.pos.y;i.z=t}}}class gr extends bs{constructor(){super(...arguments),this.types=["ex.transform","ex.graphics"],this.systemType=Bs.Draw,this.priority=-1}initialize(t){this._camera=t.camera}update(t){let e,i,s;for(const r of t){let t;if(i=r.get(Mi),e=r.get(Xe),s=r.get(us),s){const e=w.One.sub(s.parallaxFactor);t=this._camera.pos.scale(e)}const n=this._isOffscreen(e,i,t);n&&!r.hasTag("ex.offscreen")&&(r.eventDispatcher.emit("exitviewport",new vt(r)),r.addTag("ex.offscreen")),!n&&r.hasTag("ex.offscreen")&&(r.eventDispatcher.emit("enterviewport",new xt(r)),r.removeTag("ex.offscreen"))}}_isOffscreen(t,e,i){if(t.coordPlane===He.World){let s=e.localBounds;i&&(s=s.translate(i));const r=s.transform(t.get().matrix);return!this._camera.viewport.overlaps(r)}return!1}}class pr extends ge{constructor(){super(),this._logger=S.getInstance(),this.camera=new vs,this.world=new Ls(this),this._isInitialized=!1,this._timers=[],this._cancelQueue=[],this.world.add(new cr),this.world.add(new Gs),this.world.add(new Hs),this.world.add(new Ar),this.world.add(new ur),this.world.add(new gr),this.world.add(new hr),this.world.add(new lr)}get actors(){return this.world.entityManager.entities.filter((t=>t instanceof ls))}get entities(){return this.world.entityManager.entities}get triggers(){return this.world.entityManager.entities.filter((t=>t instanceof Es))}get tileMaps(){return this.world.entityManager.entities.filter((t=>t instanceof ps))}get timers(){return this._timers}on(t,e){super.on(t,e)}once(t,e){super.once(t,e)}off(t,e){super.off(t,e)}onInitialize(t){}onActivate(t){}onDeactivate(t){}onPreUpdate(t,e){}onPostUpdate(t,e){}onPreDraw(t,e){}onPostDraw(t,e){}_initializeChildren(){for(const t of this.entities)t._initialize(this.engine)}get isInitialized(){return this._isInitialized}_initialize(t){this.isInitialized||(this.engine=t,this.camera._initialize(t),this.world.systemManager.initialize(),this.onInitialize.call(this,t),this._initializeChildren(),this._logger.debug("Scene.onInitialize",this,t),this.eventDispatcher.emit("initialize",new yt(t,this)),this._isInitialized=!0)}_activate(t){this._logger.debug("Scene.onActivate",this),this.onActivate(t)}_deactivate(t){this._logger.debug("Scene.onDeactivate",this),this.onDeactivate(t)}_preupdate(t,e){this.emit("preupdate",new it(t,e,this)),this.onPreUpdate(t,e)}_postupdate(t,e){this.emit("postupdate",new st(t,e,this)),this.onPostUpdate(t,e)}_predraw(t,e){this.emit("predraw",new Z(t,e,this)),this.onPreDraw(t,e)}_postdraw(t,e){this.emit("postdraw",new $(t,e,this)),this.onPostDraw(t,e)}update(t,e){let i,s;for(this._preupdate(t,e),i=0,s=this._cancelQueue.length;i-1}add(t){this.emit("entityadded",{target:t}),this.world.add(t),t.scene=this,t instanceof ds&&(G(this._timers,t)||this.addTimer(t))}remove(t){t instanceof ki&&(this.emit("entityremoved",{target:t}),this.world.remove(t)),t instanceof ds&&this.removeTimer(t)}clear(t=!0){for(const e of this.entities)this.world.remove(e,t);for(const t of this.timers)this.removeTimer(t)}addTimer(t){return this._timers.push(t),t.scene=this,t}removeTimer(t){const e=this._timers.indexOf(t);return-1!==e&&this._timers.splice(e,1),t}cancelTimer(t){return this._cancelQueue.push(t),t}isTimerActive(t){return this._timers.indexOf(t)>-1&&!t.complete}isCurrentScene(){return!!this.engine&&this.engine.currentScene===this}_collectActorStats(t){const e=this.actors.filter((t=>t instanceof cs));for(const i of e)t.stats.currFrame.actors.ui++;for(const e of this.actors){t.stats.currFrame.actors.alive++;for(const i of e.children)As(i)?t.stats.currFrame.actors.ui++:t.stats.currFrame.actors.alive++}}}!function(t){t.Protanope="Protanope",t.Deuteranope="Deuteranope",t.Tritanope="Tritanope"}(Vs||(Vs={}));class _r{constructor(t){this._shader=new qt({vertexSource:"#version 300 es\n in vec2 a_position;\n in vec2 a_texcoord;\n out vec2 v_texcoord;\n\n void main() {\n gl_Position = vec4(a_position, 0.0, 1.0);\n // Pass the texcoord to the fragment shader.\n v_texcoord = a_texcoord;\n }",fragmentSource:t}),this._shader.compile(),this._buffer=new Yt({type:"static",data:new Float32Array([-1,-1,0,0,-1,1,0,1,1,-1,1,0,1,-1,1,0,-1,1,0,1,1,1,1,1])}),this._layout=new jt({shader:this._shader,vertexBuffer:this._buffer,attributes:[["a_position",2],["a_texcoord",2]]}),this._buffer.upload()}getShader(){return this._shader}getLayout(){return this._layout}}class fr{constructor(t,e=!1){this._colorBlindnessMode=t,this._simulate=!1,this._simulate=e}initialize(t){this._shader=new _r("#version 300 es\r\nprecision mediump float;\r\n// our texture\r\nuniform sampler2D u_image;\r\n// the texCoords passed in from the vertex shader.\r\nin vec2 v_texcoord;\r\n\r\n// color blind type\r\nuniform int u_type;\r\n\r\n// simulation?\r\nuniform bool u_simulate;\r\n\r\nout vec4 fragColor;\r\n\r\nvoid main() {\r\n vec4 o = texture(u_image, v_texcoord);\r\n // RGB to LMS matrix conversion\r\n float L = (17.8824 * o.r) + (43.5161 * o.g) + (4.11935 * o.b);\r\n float M = (3.45565 * o.r) + (27.1554 * o.g) + (3.86714 * o.b);\r\n float S = (0.0299566 * o.r) + (0.184309 * o.g) + (1.46709 * o.b);\r\n // Simulate color blindness\r\n float l;\r\n float m;\r\n float s;\r\n //MODE CODE//\r\n if (u_type == 0) {\r\n // Protanope\r\n l = 0.0 * L + 2.02344 * M + -2.52581 * S;\r\n m = 0.0 * L + 1.0 * M + 0.0 * S;\r\n s = 0.0 * L + 0.0 * M + 1.0 * S;;\r\n } else if (u_type == 1) {\r\n // Deuteranope\r\n l = 1.0 * L + 0.0 * M + 0.0 * S;\r\n m = 0.494207 * L + 0.0 * M + 1.24827 * S;\r\n s = 0.0 * L + 0.0 * M + 1.0 * S;\r\n } else if (u_type == 2) {\r\n // Tritanope\r\n l = 1.0 * L + 0.0 * M + 0.0 * S;\r\n m = 0.0 * L + 1.0 * M + 0.0 * S;\r\n s = -0.395913 * L + 0.801109 * M + 0.0 * S;\r\n }\r\n\r\n // LMS to RGB matrix conversion\r\n vec4 error; // simulate the colors\r\n error.r = (0.0809444479 * l) + (-0.130504409 * m) + (0.116721066 * s);\r\n error.g = (-0.0102485335 * l) + (0.0540193266 * m) + (-0.113614708 * s);\r\n error.b = (-0.000365296938 * l) + (-0.00412161469 * m) + (0.693511405 * s);\r\n error.a = 1.0;\r\n vec4 diff = o - error;\r\n vec4 correction; // correct the colors\r\n correction.r = 0.0;\r\n correction.g = (diff.r * 0.7) + (diff.g * 1.0);\r\n correction.b = (diff.r * 0.7) + (diff.b * 1.0);\r\n correction = o + correction;\r\n correction.a = o.a;\r\n //SIMULATE//\r\n\r\n // sim \r\n if (u_simulate) {\r\n fragColor = error.rgba;\r\n } else {\r\n fragColor = correction.rgba;\r\n }\r\n}"),this.simulate=this._simulate,this.colorBlindnessMode=this._colorBlindnessMode}getShader(){return this._shader.getShader()}getLayout(){return this._shader.getLayout()}set colorBlindnessMode(t){if(this._colorBlindnessMode=t,this._shader){const t=this._shader.getShader();t.use(),this._colorBlindnessMode===Vs.Protanope?t.setUniformInt("u_type",0):this._colorBlindnessMode===Vs.Deuteranope?t.setUniformInt("u_type",1):this._colorBlindnessMode===Vs.Tritanope&&t.setUniformInt("u_type",2)}}get colorBlindnessMode(){return this._colorBlindnessMode}set simulate(t){if(this._simulate=t,this._shader){const e=this._shader.getShader();e.use(),e.setUniformBoolean("u_simulate",t)}}get simulate(){return this._simulate}}class mr{constructor(t){this._engine=t,this._colorBlindPostProcessor=new fr(Vs.Protanope)}correct(t){this._engine.graphicsContext instanceof ne&&(this.clear(),this._colorBlindPostProcessor.colorBlindnessMode=t,this._colorBlindPostProcessor.simulate=!1,this._engine.graphicsContext.addPostProcessor(this._colorBlindPostProcessor))}simulate(t){this._engine.graphicsContext instanceof ne&&(this.clear(),this._colorBlindPostProcessor.colorBlindnessMode=t,this._colorBlindPostProcessor.simulate=!0,this._engine.graphicsContext.addPostProcessor(this._colorBlindPostProcessor))}clear(){this._engine.graphicsContext.removePostProcessor(this._colorBlindPostProcessor)}}class Cr{constructor(t){this.stats={currFrame:new yr,prevFrame:new yr},this.filter={useFilter:!1,nameQuery:"",ids:[]},this.entity={showAll:!1,showId:!0,showName:!1},this.transform={showAll:!1,showPosition:!1,showPositionLabel:!1,positionColor:k.Yellow,showZIndex:!1,showScale:!1,scaleColor:k.Green,showRotation:!1,rotationColor:k.Blue},this.graphics={showAll:!1,showBounds:!0,boundsColor:k.Yellow},this.collider={showAll:!1,showBounds:!0,boundsColor:k.Blue,showOwner:!1,showGeometry:!0,geometryColor:k.Green},this.physics={showAll:!1,showBroadphaseSpacePartitionDebug:!1,showCollisionNormals:!1,collisionNormalColor:k.Cyan,showCollisionContacts:!0,collisionContactColor:k.Red},this.motion={showAll:!1,showVelocity:!1,velocityColor:k.Yellow,showAcceleration:!1,accelerationColor:k.Red},this.body={showAll:!1,showCollisionGroup:!1,showCollisionType:!1,showSleeping:!1,showMotion:!1,showMass:!1},this.camera={showAll:!1,showFocus:!1,focusColor:k.Red,showZoom:!1},this._engine=t,this.colorBlindMode=new mr(this._engine)}useTestClock(){const t=this._engine.clock,e=t.isRunning();t.stop();const i=t.toTestClock();return e&&i.start(),this._engine.clock=i,i}useStandardClock(){const t=this._engine.clock,e=t.isRunning();t.stop();const i=t.toStandardClock();return e&&i.start(),this._engine.clock=i,i}}class yr{constructor(){this._id=0,this._delta=0,this._fps=0,this._actorStats={alive:0,killed:0,ui:0,get remaining(){return this.alive-this.killed},get total(){return this.remaining+this.ui}},this._durationStats={update:0,draw:0,get total(){return this.update+this.draw}},this._physicsStats=new Ir,this._graphicsStats={drawCalls:0,drawnImages:0}}reset(t){t?(this.id=t.id,this.delta=t.delta,this.fps=t.fps,this.actors.alive=t.actors.alive,this.actors.killed=t.actors.killed,this.actors.ui=t.actors.ui,this.duration.update=t.duration.update,this.duration.draw=t.duration.draw,this._physicsStats.reset(t.physics),this.graphics.drawCalls=t.graphics.drawCalls,this.graphics.drawnImages=t.graphics.drawnImages):(this.id=this.delta=this.fps=0,this.actors.alive=this.actors.killed=this.actors.ui=0,this.duration.update=this.duration.draw=0,this._physicsStats.reset(),this.graphics.drawnImages=this.graphics.drawCalls=0)}clone(){const t=new yr;return t.reset(this),t}get id(){return this._id}set id(t){this._id=t}get delta(){return this._delta}set delta(t){this._delta=t}get fps(){return this._fps}set fps(t){this._fps=t}get actors(){return this._actorStats}get duration(){return this._durationStats}get physics(){return this._physicsStats}get graphics(){return this._graphicsStats}}class Ir{constructor(){this._pairs=0,this._collisions=0,this._contacts=new Map,this._fastBodies=0,this._fastBodyCollisions=0,this._broadphase=0,this._narrowphase=0}reset(t){t?(this.pairs=t.pairs,this.collisions=t.collisions,this.contacts=t.contacts,this.fastBodies=t.fastBodies,this.fastBodyCollisions=t.fastBodyCollisions,this.broadphase=t.broadphase,this.narrowphase=t.narrowphase):(this.pairs=this.collisions=this.fastBodies=0,this.fastBodyCollisions=this.broadphase=this.narrowphase=0,this.contacts.clear())}clone(){const t=new Ir;return t.reset(this),t}get pairs(){return this._pairs}set pairs(t){this._pairs=t}get collisions(){return this._collisions}set collisions(t){this._collisions=t}get contacts(){return this._contacts}set contacts(t){this._contacts=t}get fastBodies(){return this._fastBodies}set fastBodies(t){this._fastBodies=t}get fastBodyCollisions(){return this._fastBodyCollisions}set fastBodyCollisions(t){this._fastBodyCollisions=t}get broadphase(){return this._broadphase}set broadphase(t){this._broadphase=t}get narrowphase(){return this._narrowphase}set narrowphase(t){this._narrowphase=t}}!function(t){t.Canvas="Canvas",t.Document="Document"}(Ks||(Ks={})),function(t){t.Num0="Numpad0",t.Num1="Numpad1",t.Num2="Numpad2",t.Num3="Numpad3",t.Num4="Numpad4",t.Num5="Numpad5",t.Num6="Numpad6",t.Num7="Numpad7",t.Num8="Numpad8",t.Num9="Numpad9",t.NumAdd="NumpadAdd",t.NumSubtract="NumpadSubtract",t.NumMultiply="NumpadMultiply",t.NumDivide="NumpadDivide",t.NumDecimal="NumpadDecimal",t.Numpad0="Numpad0",t.Numpad1="Numpad1",t.Numpad2="Numpad2",t.Numpad3="Numpad3",t.Numpad4="Numpad4",t.Numpad5="Numpad5",t.Numpad6="Numpad6",t.Numpad7="Numpad7",t.Numpad8="Numpad8",t.Numpad9="Numpad9",t.NumpadAdd="NumpadAdd",t.NumpadSubtract="NumpadSubtract",t.NumpadMultiply="NumpadMultiply",t.NumpadDivide="NumpadDivide",t.NumpadDecimal="NumpadDecimal",t.NumLock="NumLock",t.ShiftLeft="ShiftLeft",t.ShiftRight="ShiftRight",t.AltLeft="AltLeft",t.AltRight="AltRight",t.ControlLeft="ControlLeft",t.ControlRight="ControlRight",t.MetaLeft="MetaLeft",t.MetaRight="MetaRight",t.Key0="Digit0",t.Key1="Digit1",t.Key2="Digit2",t.Key3="Digit3",t.Key4="Digit4",t.Key5="Digit5",t.Key6="Digit6",t.Key7="Digit7",t.Key8="Digit8",t.Key9="Digit9",t.Digit0="Digit0",t.Digit1="Digit1",t.Digit2="Digit2",t.Digit3="Digit3",t.Digit4="Digit4",t.Digit5="Digit5",t.Digit6="Digit6",t.Digit7="Digit7",t.Digit8="Digit8",t.Digit9="Digit9",t.F1="F1",t.F2="F2",t.F3="F3",t.F4="F4",t.F5="F5",t.F6="F6",t.F7="F7",t.F8="F8",t.F9="F9",t.F10="F10",t.F11="F11",t.F12="F12",t.A="KeyA",t.B="KeyB",t.C="KeyC",t.D="KeyD",t.E="KeyE",t.F="KeyF",t.G="KeyG",t.H="KeyH",t.I="KeyI",t.J="KeyJ",t.K="KeyK",t.L="KeyL",t.M="KeyM",t.N="KeyN",t.O="KeyO",t.P="KeyP",t.Q="KeyQ",t.R="KeyR",t.S="KeyS",t.T="KeyT",t.U="KeyU",t.V="KeyV",t.W="KeyW",t.X="KeyX",t.Y="KeyY",t.Z="KeyZ",t.KeyA="KeyA",t.KeyB="KeyB",t.KeyC="KeyC",t.KeyD="KeyD",t.KeyE="KeyE",t.KeyF="KeyF",t.KeyG="KeyG",t.KeyH="KeyH",t.KeyI="KeyI",t.KeyJ="KeyJ",t.KeyK="KeyK",t.KeyL="KeyL",t.KeyM="KeyM",t.KeyN="KeyN",t.KeyO="KeyO",t.KeyP="KeyP",t.KeyQ="KeyQ",t.KeyR="KeyR",t.KeyS="KeyS",t.KeyT="KeyT",t.KeyU="KeyU",t.KeyV="KeyV",t.KeyW="KeyW",t.KeyX="KeyX",t.KeyY="KeyY",t.KeyZ="KeyZ",t.Semicolon="Semicolon",t.Quote="Quote",t.Comma="Comma",t.Minus="Minus",t.Period="Period",t.Slash="Slash",t.Equal="Equal",t.BracketLeft="BracketLeft",t.Backslash="Backslash",t.BracketRight="BracketRight",t.Backquote="Backquote",t.Up="ArrowUp",t.Down="ArrowDown",t.Left="ArrowLeft",t.Right="ArrowRight",t.ArrowUp="ArrowUp",t.ArrowDown="ArrowDown",t.ArrowLeft="ArrowLeft",t.ArrowRight="ArrowRight",t.Space="Space",t.Backspace="Backspace",t.Delete="Delete",t.Esc="Escape",t.Escape="Escape",t.Enter="Enter",t.NumpadEnter="NumpadEnter",t.ContextMenu="ContextMenu"}(Js||(Js={}));class wr extends j{constructor(t,e,i){super(),this.key=t,this.value=e,this.originalEvent=i}}class vr extends ge{constructor(){super(),this._keys=[],this._keysUp=[],this._keysDown=[],this._handleKeyDown=t=>{const e=t.code;if(-1===this._keys.indexOf(e)){this._keys.push(e),this._keysDown.push(e);const i=new wr(e,t.key,t);this.eventDispatcher.emit("down",i),this.eventDispatcher.emit("press",i)}},this._handleKeyUp=t=>{const e=t.code,i=this._keys.indexOf(e);this._keys.splice(i,1),this._keysUp.push(e);const s=new wr(e,t.key,t);this.eventDispatcher.emit("up",s),this.eventDispatcher.emit("release",s)}}on(t,e){super.on(t,e)}init(t){if(!t)try{const e=()=>{};window.top.addEventListener("blur",e),window.top.removeEventListener("blur",e),t=window.top}catch(e){t=window,S.getInstance().warn("Failed to bind to keyboard events to top frame. If you are trying to embed Excalibur in a cross-origin iframe, keyboard events will not fire.")}t.addEventListener("blur",(()=>{this._keys.length=0})),t.addEventListener("keyup",this._handleKeyUp),t.addEventListener("keydown",this._handleKeyDown)}update(){this._keysDown.length=0,this._keysUp.length=0;for(let t=0;t-1}isHeld(t){return this._keys.indexOf(t)>-1}wasReleased(t){return this._keysUp.indexOf(t)>-1}triggerEvent(t,e,i){"down"===t&&this._handleKeyDown(new KeyboardEvent("keydown",{code:e,key:null!=i?i:null})),"up"===t&&this._handleKeyUp(new KeyboardEvent("keyup",{code:e,key:null!=i?i:null}))}}class xr extends ge{constructor(){super(),this.enabled=!1,this.supported=!!navigator.getGamepads,this._gamePadTimeStamps=[0,0,0,0],this._oldPads=[],this._pads=[],this._initSuccess=!1,this._navigator=navigator,this._minimumConfiguration=null}init(){this.supported&&(this._initSuccess||(this._oldPads=this._clonePads(this._navigator.getGamepads()),this._oldPads.length&&this._oldPads[0]&&(this._initSuccess=!0)))}setMinimumGamepadConfiguration(t){this._enableAndUpdate(),this._minimumConfiguration=t}_enableAndUpdate(){this.enabled||(this.enabled=!0,this.update())}_isGamepadValid(t){if(!this._minimumConfiguration)return!0;if(!t)return!1;const e=t.axes.filter((t=>void 0!==typeof t)).length,i=t.buttons.filter((t=>void 0!==typeof t)).length;return e>=this._minimumConfiguration.axis&&i>=this._minimumConfiguration.buttons&&t.connected}on(t,e){this._enableAndUpdate(),super.on(t,e)}off(t,e){this._enableAndUpdate(),super.off(t,e)}update(){if(!this.enabled||!this.supported)return;this.init();const t=this._navigator.getGamepads();for(let e=0;e=this._pads.length)for(let e=this._pads.length-1,i=t;et.connected)).length}_clonePads(t){const e=[];for(let i=0,s=t.length;i=e}getButton(t){return this._buttons[t]}getAxes(t){const e=this._axes[t];return Math.abs(e){this._paused||t(e)}}pause(){this._paused=!0}resume(){this._paused=!1}clear(){for(const t in this._nativeHandlers)this.off(t)}}class br{constructor(t,e){this._windowGlobal=t,this._documentGlobal=e,this._windowComponent=new Br(this._windowGlobal),this._documentComponent=new Br(this._documentGlobal)}get window(){return this._windowComponent}get document(){return this._documentComponent}pause(){this.window.pause(),this.document.pause()}resume(){this.window.resume(),this.document.resume()}clear(){this.window.clear(),this.document.clear()}}class Qr{constructor(t,e,i){this.worldPos=t,this.pagePos=e,this.screenPos=i}static fromPagePosition(t,e,i){let s,r,n,o;3===arguments.length?(s=t,r=e,n=new w(s,r),o=i):(n=t,s=n.x,r=n.y,o=e);const a=o.screen.pageToScreenCoordinates(n),h=o.screen.screenToWorldCoordinates(a);return new Qr(h,n,a)}}class Sr{constructor(t,e,i,s,r,n){this.type=t,this.pointerId=e,this.button=i,this.pointerType=s,this.coordinates=r,this.nativeEvent=n,this.active=!0}cancel(){this.active=!1}get pagePos(){return this.coordinates.pagePos}get screenPos(){return this.coordinates.screenPos}get worldPos(){return this.coordinates.worldPos}}class Dr{constructor(t,e,i,s,r,n,o,a,h,l,A,c){this.x=t,this.y=e,this.pageX=i,this.pageY=s,this.screenX=r,this.screenY=n,this.index=o,this.deltaX=a,this.deltaY=h,this.deltaZ=l,this.deltaMode=A,this.ev=c,this.active=!0}cancel(){this.active=!1}}class Tr extends ge{constructor(){super(),this.lastPagePos=w.Zero,this.lastScreenPos=w.Zero,this.lastWorldPos=w.Zero,this._onPointerMove=t=>{this.lastPagePos=new w(t.pagePos.x,t.pagePos.y),this.lastScreenPos=new w(t.screenPos.x,t.screenPos.y),this.lastWorldPos=new w(t.worldPos.x,t.worldPos.y)},this._onPointerDown=t=>{this.lastPagePos=new w(t.pagePos.x,t.pagePos.y),this.lastScreenPos=new w(t.screenPos.x,t.screenPos.y),this.lastWorldPos=new w(t.worldPos.x,t.worldPos.y)},this.on("move",this._onPointerMove),this.on("down",this._onPointerDown)}on(t,e){super.on(t,e)}once(t,e){super.once(t,e)}off(t,e){super.off(t,e)}}!function(t){t.Pixel="Pixel",t.Line="Line",t.Page="Page"}(Zs||(Zs={})),function(t){t[t.NoButton=-1]="NoButton",t[t.Left=0]="Left",t[t.Middle=1]="Middle",t[t.Right=2]="Right",t[t.Unknown=3]="Unknown"}($s||($s={})),function(t){t.Left="Left",t.Middle="Middle",t.Right="Right",t.Unknown="Unknown",t.NoButton="NoButton"}(tr||(tr={})),function(t){t.Touch="Touch",t.Mouse="Mouse",t.Pen="Pen",t.Unknown="Unknown"}(er||(er={}));class kr extends ge{constructor(t,e){super(),this.target=t,this.engine=e,this.primary=new Tr,this._activeNativePointerIdsToNormalized=new Map,this.lastFramePointerCoords=new Map,this.currentFramePointerCoords=new Map,this.currentFramePointerDown=new Map,this.lastFramePointerDown=new Map,this.currentFrameDown=[],this.currentFrameUp=[],this.currentFrameMove=[],this.currentFrameCancel=[],this.currentFrameWheel=[],this._pointers=[this.primary],this._boundHandle=this._handle.bind(this),this._boundWheel=this._handleWheel.bind(this)}recreate(t,e){const i=new kr(t,e);return i.primary=this.primary,i._pointers=this._pointers,i}at(t){if(t>=this._pointers.length)for(let e=this._pointers.length-1,i=t;et-e)).findIndex((e=>e===t));return this._activeNativePointerIdsToNormalized.set(t,e),e}_handle(t){t.preventDefault();const e=new Map;let i,s;if(r=t,globalThis.TouchEvent&&r instanceof globalThis.TouchEvent){i=tr.Unknown,s=er.Touch;for(let i=0;i=this._previousSampleTime+this._samplePeriod&&(this._fps=1e3*this._frames/(t-this._previousSampleTime),this._previousSampleTime=t,this._frames=0)}get fps(){return this._fps}get instant(){return 1e3/this._currentFrameTime}}class Pr{constructor(t){var e,i,s;this._onFatalException=()=>{},this._maxFps=1/0,this._lastTime=0,this._elapsed=1,this._scheduledCbs=[],this._totalElapsed=0,this._options=t,this.tick=t.tick,this._lastTime=null!==(e=this.now())&&void 0!==e?e:0,this._maxFps=null!==(i=t.maxFps)&&void 0!==i?i:this._maxFps,this._onFatalException=null!==(s=t.onFatalException)&&void 0!==s?s:this._onFatalException,this.fpsSampler=new Fr({initialFps:60,nowFn:()=>this.now()})}elapsed(){return this._elapsed}now(){return performance.now()}toTestClock(){return new Mr({...this._options,defaultUpdateMs:16.6})}toStandardClock(){return new Rr({...this._options})}setFatalExceptionHandler(t){this._onFatalException=t}schedule(t,e=0){const i=this._totalElapsed+e;this._scheduledCbs.push([t,i])}_runScheduledCbs(){for(let t=this._scheduledCbs.length-1;t>-1;t--)this._scheduledCbs[t][1]<=this._totalElapsed&&(this._scheduledCbs[t][0](),this._scheduledCbs.splice(t,1))}update(t){try{this.fpsSampler.start();const e=this.now();let i=e-this._lastTime||1;const s=1e3/this._maxFps;if(i>=s){let r=0;0!==s&&(r=i%s,i-=r),i>200&&(i=1),this._elapsed=t||i,this._totalElapsed+=this._elapsed,this._runScheduledCbs(),this.tick(t||i),this._lastTime=0!==s?e-r:e,this.fpsSampler.end()}}catch(t){this._onFatalException(t),this.stop()}}}class Rr extends Pr{constructor(t){super(t),this._running=!1}isRunning(){return this._running}start(){if(this._running)return;this._running=!0;const t=()=>{if(this._running)try{this._requestId=window.requestAnimationFrame(t),this.update()}catch(t){throw window.cancelAnimationFrame(this._requestId),t}};t()}stop(){this._running=!1}}class Mr extends Pr{constructor(t){super({...t}),this._logger=S.getInstance(),this._running=!1,this._currentTime=0,this._updateMs=t.defaultUpdateMs}now(){var t;return null!==(t=this._currentTime)&&void 0!==t?t:0}isRunning(){return this._running}start(){this._running=!0}stop(){this._running=!1}step(t){const e=null!=t?t:this._updateMs;this._running?(this.update(e),this._currentTime+=e):this._logger.warn("The clock is not running, no step will be performed")}run(t,e){for(let i=0;ithis._createFragment(t)));if(e){const t=document.createElement("a");t.href=e,t.innerText=i||e,r.splice(1,0,t)}const n=document.createElement("div");r.forEach((t=>{n.appendChild(t)})),s.appendChild(n);const o=document.createElement("button");o.innerText="x",o.addEventListener("click",(()=>{this._container.removeChild(s)})),s.appendChild(o);const a=t=>{if("Escape"===t.key)try{this._container.removeChild(s)}catch(t){}document.removeEventListener("keydown",a)};document.addEventListener("keydown",a);const h=this._container.firstChild;this._container.insertBefore(s,h)}}a(),function(t){t[t.None=0]="None",t[t.Canvas=1]="Canvas",t[t.All=2]="All"}(Lr||(Lr={}));class Ur extends ge{constructor(t){var e,i,s,r,n,o;super(),this.maxFps=Number.POSITIVE_INFINITY,this.scenes={},this._suppressPlayButton=!1,this.pauseAudioWhenHidden=!0,this._isDebug=!1,this.enableCanvasTransparency=!0,this.onFatalException=t=>{S.getInstance().fatal(t)},this._toaster=new Gr,this._timescale=1,this._isInitialized=!1,this._deferredGoTo=null,this._originalOptions={},this._performanceThresholdTriggered=!1,this._fpsSamples=[],this._loadingComplete=!1,this._isReady=!1,this._isReadyPromise=new Promise((t=>{this._isReadyResolve=t})),this.currentFrameElapsedMs=0,this.currentFrameLagMs=0,this._lagMs=0,this._screenShotRequests=[],t={...Ur._DEFAULT_ENGINE_OPTIONS,...t},this._originalOptions=t,h.freeze(),this.browser=new br(window,document);const a=new Fe;if(!t.suppressMinimumBrowserFeatureDetection&&!(this._compatible=a.test())){const e=document.createElement("div");if(e.innerText="Sorry, your browser does not support all the features needed for Excalibur",document.body.appendChild(e),a.failedTests.forEach((function(t){const e=document.createElement("div");e.innerText="Browser feature missing "+t,document.body.appendChild(e)})),t.canvasElementId){const e=document.getElementById(t.canvasElementId);e&&e.parentElement.removeChild(e)}return}this._compatible=!0,console.log&&!t.suppressConsoleBootMessage&&(console.log(`%cPowered by Excalibur.js (v${cn})`,"background: #176BAA; color: white; border-radius: 5px; padding: 15px; font-size: 1.5em; line-height: 80px;"),console.log("\n /| ________________\nO|===|* >________________>\n \\|"),console.log("Visit","http://excaliburjs.com","for more information")),t.suppressPlayButton&&(this._suppressPlayButton=!0),this._logger=S.getInstance(),this._logger.defaultLevel===x.Debug&&a.logBrowserFeatures(),this._logger.debug("Building engine..."),this.canvasElementId=t.canvasElementId,t.canvasElementId?(this._logger.debug("Using Canvas element specified: "+t.canvasElementId),this.canvas=document.getElementById(t.canvasElementId)):t.canvasElement?(this._logger.debug("Using Canvas element specified:",t.canvasElement),this.canvas=t.canvasElement):(this._logger.debug("Using generated canvas element"),this.canvas=document.createElement("canvas"));let l=null!==(e=t.displayMode)&&void 0!==e?e:le.Fixed;t.width&&t.height||t.viewport?(void 0===t.displayMode&&(l=le.Fixed),this._logger.debug("Engine viewport is size "+t.width+" x "+t.height)):t.displayMode||(this._logger.debug("Engine viewport is fit"),l=le.FitScreen),this._originalDisplayMode=l;let A=h.isEnabled("use-canvas-context");if(!A)try{this.graphicsContext=new ne({canvasElement:this.canvas,enableTransparency:this.enableCanvasTransparency,smoothing:t.antialiasing,backgroundColor:t.backgroundColor,snapToPixel:t.snapToPixel,useDrawSorting:t.useDrawSorting})}catch(t){this._logger.warn(`Excalibur could not load webgl for some reason (${t.message}) and loaded a Canvas 2D fallback. Some features of Excalibur will not work in this mode. \n\nRead more about this issue at https://excaliburjs.com/docs/webgl`),A=!0}A&&(this.graphicsContext=new he({canvasElement:this.canvas,enableTransparency:this.enableCanvasTransparency,smoothing:t.antialiasing,backgroundColor:t.backgroundColor,snapToPixel:t.snapToPixel,useDrawSorting:t.useDrawSorting})),this.screen=new ce({canvas:this.canvas,context:this.graphicsContext,antialiasing:null===(i=t.antialiasing)||void 0===i||i,browser:this.browser,viewport:null!==(s=t.viewport)&&void 0!==s?s:t.width&&t.height?{width:t.width,height:t.height}:Ae.SVGA,resolution:t.resolution,displayMode:l,pixelRatio:t.suppressHiDPIScaling?1:null!==(r=t.pixelRatio)&&void 0!==r?r:null}),Ft.filtering=t.antialiasing?Q.Blended:Q.Pixel,t.backgroundColor&&(this.backgroundColor=t.backgroundColor.clone()),this.maxFps=null!==(n=t.maxFps)&&void 0!==n?n:this.maxFps,this.fixedUpdateFps=null!==(o=t.fixedUpdateFps)&&void 0!==o?o:this.fixedUpdateFps,this.clock=new Rr({maxFps:this.maxFps,tick:this._mainloop.bind(this),onFatalException:t=>this.onFatalException(t)}),this.enableCanvasTransparency=t.enableCanvasTransparency,this._loader=new Te,this._loader.wireEngine(this),this.debug=new Cr(this),this._initialize(t),this.rootScene=this.currentScene=new pr,this.addScene("root",this.rootScene),window.___EXCALIBUR_DEVTOOL=this}get canvasWidth(){return this.screen.canvasWidth}get halfCanvasWidth(){return this.screen.halfCanvasWidth}get canvasHeight(){return this.screen.canvasHeight}get halfCanvasHeight(){return this.screen.halfCanvasHeight}get drawWidth(){return this.screen.drawWidth}get halfDrawWidth(){return this.screen.halfDrawWidth}get drawHeight(){return this.screen.drawHeight}get halfDrawHeight(){return this.screen.halfDrawHeight}get isHiDpi(){return this.screen.isHiDpi}get stats(){return this.debug.stats}get isFullscreen(){return this.screen.isFullScreen}get displayMode(){return this.screen.displayMode}get pixelRatio(){return this.screen.pixelRatio}get isDebug(){return this._isDebug}get snapToPixel(){return this.graphicsContext.snapToPixel}set snapToPixel(t){this.graphicsContext.snapToPixel=t}on(t,e){super.on(t,e)}once(t,e){super.once(t,e)}off(t,e){super.off(t,e)}_monitorPerformanceThresholdAndTriggerFallback(){const{allow:t}=this._originalOptions.configurePerformanceCanvas2DFallback;let{threshold:e,showPlayerMessage:i}=this._originalOptions.configurePerformanceCanvas2DFallback;if(void 0===e&&(e=Ur._DEFAULT_ENGINE_OPTIONS.configurePerformanceCanvas2DFallback.threshold),void 0===i&&(i=Ur._DEFAULT_ENGINE_OPTIONS.configurePerformanceCanvas2DFallback.showPlayerMessage),!h.isEnabled("use-canvas-context")&&t&&this.ready&&!this._performanceThresholdTriggered){this._fpsSamples.length===e.numberOfFrames&&this._fpsSamples.splice(0,1),this._fpsSamples.push(this.clock.fpsSampler.fps);let t=0;for(let e=0;e Advanced > System, and ensure "Use Hardware Acceleration" is checked.\n * Visit chrome://flags/#ignore-gpu-blocklist and ensure "Override software rendering list" is "enabled"\nIf in Firefox, visit about:config\n * Ensure webgl.disabled = false\n * Ensure webgl.force-enabled = true\n * Ensure layers.acceleration.force-enabled = true\n\nRead more about this issue at https://excaliburjs.com/docs/performance'),i&&this._toaster.toast("Excalibur is encountering performance issues. It's possible that your browser doesn't have hardware acceleration enabled. Visit [LINK] for more information and potential solutions.","https://excaliburjs.com/docs/performance"),this.useCanvas2DFallback(),this.emit("fallbackgraphicscontext",this.graphicsContext))}}useCanvas2DFallback(){var t,e,i;const s=this.canvas.cloneNode(!1);this.canvas.parentNode.replaceChild(s,this.canvas),this.canvas=s;const r=this._originalOptions,n=this._originalDisplayMode;this.graphicsContext=new he({canvasElement:this.canvas,enableTransparency:this.enableCanvasTransparency,smoothing:r.antialiasing,backgroundColor:r.backgroundColor,snapToPixel:r.snapToPixel,useDrawSorting:r.useDrawSorting}),this.screen&&this.screen.dispose(),this.screen=new ce({canvas:this.canvas,context:this.graphicsContext,antialiasing:null===(t=r.antialiasing)||void 0===t||t,browser:this.browser,viewport:null!==(e=r.viewport)&&void 0!==e?e:r.width&&r.height?{width:r.width,height:r.height}:Ae.SVGA,resolution:r.resolution,displayMode:n,pixelRatio:r.suppressHiDPIScaling?1:null!==(i=r.pixelRatio)&&void 0!==i?i:null}),this.screen.setCurrentCamera(this.currentScene.camera),this.input.pointers.detach();const o=r&&r.pointerScope===Ks.Document?document:this.canvas;this.input.pointers=this.input.pointers.recreate(o,this),this.input.pointers.init()}getWorldBounds(){return this.screen.getWorldBounds()}get timescale(){return this._timescale}set timescale(t){t<=0?S.getInstance().error("Cannot set engine.timescale to a value of 0 or less than 0."):this._timescale=t}addTimer(t){return this.currentScene.addTimer(t)}removeTimer(t){return this.currentScene.removeTimer(t)}addScene(t,e){this.scenes[t]&&this._logger.warn("Scene",t,"already exists overwriting"),this.scenes[t]=e}removeScene(t){if(t instanceof pr)for(const e in this.scenes)this.scenes.hasOwnProperty(e)&&this.scenes[e]===t&&delete this.scenes[e];"string"==typeof t&&delete this.scenes[t]}add(t){2!==arguments.length?this._deferredGoTo&&this.scenes[this._deferredGoTo]?this.scenes[this._deferredGoTo].add(t):this.currentScene.add(t):this.addScene(arguments[0],arguments[1])}remove(t){t instanceof ki&&this.currentScene.remove(t),t instanceof pr&&this.removeScene(t),"string"==typeof t&&this.removeScene(t)}goToScene(t,e){if(this.isInitialized)if(this.scenes[t]){const i=this.currentScene,s=this.scenes[t];if(this._logger.debug("Going to scene:",t),this.currentScene.isInitialized){const t={engine:this,previousScene:i,nextScene:s};this.currentScene._deactivate.apply(this.currentScene,[t,s]),this.currentScene.eventDispatcher.emit("deactivate",new wt(t,this.currentScene))}this.currentScene=s,this.screen.setCurrentCamera(s.camera),this.currentScene._initialize(this);const r={engine:this,previousScene:i,nextScene:s,data:e};this.currentScene._activate.apply(this.currentScene,[r,s]),this.currentScene.eventDispatcher.emit("activate",new It(r,this.currentScene))}else this._logger.error("Scene",t,"does not exist!");else this._deferredGoTo=t}screenToWorldCoordinates(t){return this.screen.screenToWorldCoordinates(t)}worldToScreenCoordinates(t){return this.screen.worldToScreenCoordinates(t)}_initialize(t){this.pageScrollPreventionMode=t.scrollPreventionMode;const e=t&&t.pointerScope===Ks.Document?document:this.canvas;let i,s;this.input={keyboard:new vr,pointers:new kr(e,this),gamepads:new xr},this.input.keyboard.init(),this.input.pointers.init(),this.input.gamepads.init(),void 0!==document.hidden?(i="hidden",s="visibilitychange"):"msHidden"in document?(i="msHidden",s="msvisibilitychange"):"webkitHidden"in document&&(i="webkitHidden",s="webkitvisibilitychange"),this.browser.document.on(s,(()=>{document[i]?(this.eventDispatcher.emit("hidden",new ct(this)),this._logger.debug("Window hidden")):(this.eventDispatcher.emit("visible",new At(this)),this._logger.debug("Window visible"))})),this.canvasElementId||t.canvasElement||document.body.appendChild(this.canvas)}onInitialize(t){}setAntialiasing(t){this.screen.antialiasing=t}getAntialiasing(){return this.screen.antialiasing}get isInitialized(){return this._isInitialized}_overrideInitialize(t){if(!this.isInitialized)if(this.onInitialize(t),super.emit("initialize",new yt(t,this)),this._isInitialized=!0,this._deferredGoTo){const t=this._deferredGoTo;this._deferredGoTo=null,this.goToScene(t)}else this.goToScene("root")}_update(t){if(!this.ready)return this._loader.update(this,t),this.input.keyboard.update(),void this.input.gamepads.update();this._preupdate(t),this.currentScene.update(this,t),this._postupdate(t),this.input.keyboard.update(),this.input.gamepads.update()}_preupdate(t){this.emit("preupdate",new it(this,t,this)),this.onPreUpdate(this,t)}onPreUpdate(t,e){}_postupdate(t){this.emit("postupdate",new st(this,t,this)),this.onPostUpdate(this,t)}onPostUpdate(t,e){}_draw(t){if(this.graphicsContext.beginDrawLifecycle(),this.graphicsContext.clear(),this._predraw(this.graphicsContext,t),!this._isReady)return this._loader.canvas.draw(this.graphicsContext,0,0),void this.graphicsContext.flush();this.graphicsContext.backgroundColor=this.backgroundColor,this.currentScene.draw(this.graphicsContext,t),this._postdraw(this.graphicsContext,t),this.graphicsContext.flush(),this.graphicsContext.endDrawLifecycle(),this._checkForScreenShots()}_predraw(t,e){this.emit("predraw",new Z(t,e,this)),this.onPreDraw(t,e)}onPreDraw(t,e){}_postdraw(t,e){this.emit("postdraw",new $(t,e,this)),this.onPostDraw(t,e)}onPostDraw(t,e){}showDebug(t){this._isDebug=t}toggleDebug(){return this._isDebug=!this._isDebug,this._isDebug}get loadingComplete(){return this._loadingComplete}get ready(){return this._isReady}isReady(){return this._isReadyPromise}async start(t){if(!this._compatible)throw new Error("Excalibur is incompatible with your browser");return t&&(this.screen.pushResolutionAndViewport(),this.screen.resolution=this.screen.viewport,this.screen.applyResolutionAndViewport(),this._loader=t,this._loader.suppressPlayButton=this._suppressPlayButton||this._loader.suppressPlayButton,this._loader.wireEngine(this)),this._logger.debug("Starting game clock..."),this.browser.resume(),this.clock.start(),this._logger.debug("Game clock started"),t&&(await this.load(this._loader),this._loadingComplete=!0,this.screen.popResolutionAndViewport(),this.screen.applyResolutionAndViewport()),this._loadingComplete=!0,this._overrideInitialize(this),this._isReady=!0,this._isReadyResolve(),this.emit("start",new W(this)),this._isReadyPromise}_mainloop(t){this.emit("preframe",new rt(this,this.stats.prevFrame));const e=t*this.timescale;this.currentFrameElapsedMs=e;const i=this.stats.prevFrame.id+1;this.stats.currFrame.reset(),this.stats.currFrame.id=i,this.stats.currFrame.delta=e,this.stats.currFrame.fps=this.clock.fpsSampler.fps,Vt.clear();const s=this.clock.now(),r=1e3/this.fixedUpdateFps;if(this.fixedUpdateFps)for(this._lagMs+=e;this._lagMs>=r;)this._update(r),this._lagMs-=r;else this._update(e);const n=this.clock.now();this.currentFrameLagMs=this._lagMs,this._draw(e);const o=this.clock.now();this.stats.currFrame.duration.update=n-s,this.stats.currFrame.duration.draw=o-n,this.stats.currFrame.graphics.drawnImages=Vt.DrawnImagesCount,this.stats.currFrame.graphics.drawCalls=Vt.DrawCallCount,this.emit("postframe",new nt(this,this.stats.currFrame)),this.stats.prevFrame.reset(this.stats.currFrame),this._monitorPerformanceThresholdAndTriggerFallback()}stop(){this.clock.isRunning()&&(this.emit("stop",new X(this)),this.browser.pause(),this.clock.stop(),this._logger.debug("Game stopped"))}isRunning(){return this.clock.isRunning()}screenshot(t=!1){return new Promise((e=>{this._screenShotRequests.push({preserveHiDPIResolution:t,resolve:e})}))}_checkForScreenShots(){for(const t of this._screenShotRequests){const e=t.preserveHiDPIResolution?this.canvas.width:this.screen.resolution.width,i=t.preserveHiDPIResolution?this.canvas.height:this.screen.resolution.height,s=document.createElement("canvas");s.width=e,s.height=i,s.getContext("2d").drawImage(this.canvas,0,0,e,i);const r=new Image,n=s.toDataURL("image/png");r.src=n,t.resolve(r)}this._screenShotRequests.length=0}async load(t){try{await t.load()}catch(t){this._logger.error("Error loading resources, things may not behave properly",t),await Promise.resolve()}}}Ur._DEFAULT_ENGINE_OPTIONS={width:0,height:0,enableCanvasTransparency:!0,useDrawSorting:!0,configurePerformanceCanvas2DFallback:{allow:!0,showPlayerMessage:!1,threshold:{fps:20,numberOfFrames:100}},canvasElementId:"",canvasElement:void 0,snapToPixel:!1,pointerScope:Ks.Canvas,suppressConsoleBootMessage:null,suppressMinimumBrowserFeatureDetection:null,suppressHiDPIScaling:null,suppressPlayButton:null,scrollPreventionMode:Lr.Canvas,backgroundColor:k.fromHex("#2185d0")};class zr extends ls{constructor(t){super(t),this._font=new as,this._text=new hs({text:"",font:this._font});const{text:e,pos:i,x:s,y:r,spriteFont:n,font:o,color:a}=t;this.pos=null!=i?i:s&&r?v(s,r):this.pos,this.text=null!=e?e:this.text,this.font=null!=o?o:this.font,this.spriteFont=null!=n?n:this.spriteFont,this._text.color=null!=a?a:this.color;const h=this.get(Mi);h.anchor=w.Zero,h.use(this._text)}get font(){return this._font}set font(t){this._font=t,this._text.font=t}get text(){return this._text.text}set text(t){this._text.text=t}get color(){return this._text.color}set color(t){this._text&&(this._text.color=t)}get opacity(){return this._text.opacity}set opacity(t){this._text.opacity=t}get spriteFont(){return this._spriteFont}set spriteFont(t){t&&(this._spriteFont=t,this._text.font=this._spriteFont)}_initialize(t){super._initialize(t)}getTextWidth(){return this._text.width}}class Or extends ki{constructor(t,e,i,s){super([new Xe,new Mi({offset:null!=i?i:w.Zero,onPostDraw:(t,e)=>this.draw(t,e)}),new dr(s)]),this.solid=!1,this._tileBounds=new P,this._graphics=[],this._colliders=[],this.x=t,this.y=e,this.map=s,this._transform=this.get(Xe),this._isometricEntityComponent=this.get(dr);const r=this.map.tileWidth/2,n=this.map.tileHeight/2,o=(this.x-this.y)*r,a=(this.x+this.y)*n;this._transform.pos=v(o,a),this._isometricEntityComponent.elevation=0,this._gfx=this.get(Mi),this._gfx.visible=!1;const h=this.map.tileWidth,l=this.map.tileHeight,A=v(0,this.map.renderFromTopOfGraphic?l:0);this._gfx.localBounds=this._tileBounds=new P({left:-h/2,top:-l,right:h/2,bottom:l}).translate(A)}getGraphics(){return this._graphics}addGraphic(t){this._graphics.push(t),this._gfx.visible=!0,this._gfx.localBounds=this._recalculateBounds()}_recalculateBounds(){let t=this._tileBounds.clone();for(const e of this._graphics){const i=v(this.map.graphicsOffset.x-this.map.tileWidth/2,this.map.graphicsOffset.y-(this.map.renderFromTopOfGraphic?0:e.height-this.map.tileHeight));t=t.combine(e.localBounds.translate(i))}return t}removeGraphic(t){const e=this._graphics.indexOf(t);e>-1&&this._graphics.splice(e,1),this._gfx.localBounds=this._recalculateBounds()}clearGraphics(){this._graphics.length=0,this._gfx.visible=!1,this._gfx.localBounds=this._recalculateBounds()}getColliders(){return this._colliders}addCollider(t){this._colliders.push(t),this.map.flagCollidersDirty()}removeCollider(t){const e=this._colliders.indexOf(t);e>-1&&this._colliders.splice(e,1),this.map.flagCollidersDirty()}clearColliders(){this._colliders.length=0,this.map.flagCollidersDirty()}get pos(){return this.map.tileToWorld(v(this.x,this.y))}get center(){return this.pos.add(v(0,this.map.tileHeight/2))}draw(t,e){const i=this.map.tileWidth/2;t.save(),t.translate(-i,0);for(const e of this._graphics)e.draw(t,this.map.graphicsOffset.x,this.map.graphicsOffset.y-(this.map.renderFromTopOfGraphic?0:e.height-this.map.tileHeight));t.restore()}}class Hr extends ki{constructor(t){super([new Xe,new bi({type:Pe.Fixed}),new mi,new gs((t=>this.debug(t)),!1)],t.name),this.renderFromTopOfGraphic=!1,this.graphicsOffset=v(0,0),this._collidersDirty=!1,this._originalOffsets=new WeakMap;const{pos:e,tileWidth:i,tileHeight:s,columns:r,rows:n,renderFromTopOfGraphic:o,graphicsOffset:a}=t;this.transform=this.get(Xe),e&&(this.transform.pos=e),this.collider=this.get(mi),this.collider&&this.collider.set(this._composite=new ai([])),this.renderFromTopOfGraphic=null!=o?o:this.renderFromTopOfGraphic,this.graphicsOffset=null!=a?a:this.graphicsOffset,this.tileWidth=i,this.tileHeight=s,this.columns=r,this.rows=n,this.tiles=new Array(r*n);for(let t=0;t=this.columns||e>=this.rows?null:this.tiles[t+e*this.columns]}getTileByPoint(t){const e=this.worldToTile(t);return this.getTile(e.x,e.y)}_getMaxZIndex(){let t=Number.NEGATIVE_INFINITY;for(const e of this.tiles){const i=e.get(Xe).z;i>t&&(t=i)}return t}debug(t){t.save(),t.z=this._getMaxZIndex()+.5;for(let e=0;ee.isComplete(t)))}reset(){this._actions.forEach((t=>t.reset()))}stop(){this._actions.forEach((t=>t.stop()))}}class jr{static create(t,e){if(this._CURRENT_GROUP>this._MAX_GROUPS)throw new Error(`Cannot have more than ${this._MAX_GROUPS} collision groups`);if(this._GROUPS.get(t))throw new Error(`Collision group ${t} already exists`);const i=new $e(t,this._CURRENT_BIT,void 0!==e?e:~this._CURRENT_BIT);return this._CURRENT_BIT=this._CURRENT_BIT<<1|0,this._CURRENT_GROUP++,this._GROUPS.set(t,i),i}static get groups(){return Array.from(this._GROUPS.values())}static groupByName(t){return this._GROUPS.get(t)}static reset(){this._GROUPS=new Map,this._CURRENT_BIT=this._STARTING_BIT,this._CURRENT_GROUP=1}}function Vr(t){return!!t._initialize}function Kr(t){return!!t.onInitialize}function Jr(t){return!!t._preupdate}function Wr(t){return!!t.onPreUpdate}function Xr(t){return!!t.onPostUpdate}function Zr(t){return!!t.onPostUpdate}function $r(t){return!!t.onPreDraw}function tn(t){return!!t.onPostDraw}jr._STARTING_BIT=1,jr._MAX_GROUPS=32,jr._CURRENT_GROUP=1,jr._CURRENT_BIT=jr._STARTING_BIT,jr._GROUPS=new Map;class en{constructor(t,e=k.Magenta,i=!0){this.path=t,this.color=e,this.bustCache=i,this._stream=null,this._gif=null,this._textures=[],this._animation=null,this._transparentColor=null,this._resource=new Qt(t,"arraybuffer",i),this._transparentColor=e}async load(){const t=await this._resource.load();this._stream=new nn(t),this._gif=new on(this._stream,this._transparentColor);const e=this._gif.images.map((t=>new Pt(t.src,!1)));return await Promise.all(e.map((t=>t.load()))),this.data=this._textures=e}isLoaded(){return!!this.data}toSprite(t=0){return this._textures[t].toSprite()}toSpriteSheet(){const t=this._textures.map((t=>t.toSprite()));return new Rt({sprites:t})}toAnimation(t){const e=this.toSpriteSheet(),i=e.sprites.length;return this._animation=ir.fromSpriteSheet(e,C(0,i),t),this._animation}get readCheckBytes(){return this._gif.checkBytes}}const sn=t=>t.reduce((function(t,e){return 2*t+e}),0),rn=t=>{const e=[];for(let i=7;i>=0;i--)e.push(!!(t&1<{if(this.position>=this.data.byteLength)throw new Error("Attempted to read past end of stream.");return this.data[this.position++]},this.readBytes=t=>{const e=[];for(let i=0;i{let e="";for(let i=0;i{const t=this.readBytes(2);return(t[1]<<8)+t[0]},this.data=new Uint8Array(t),this.len=this.data.byteLength,0===this.len)throw new Error("No data loaded from file")}}class on{constructor(t,e=k.Magenta){this._st=null,this._handler={},this._transparentColor=null,this.frames=[],this.images=[],this.globalColorTable=[],this.checkBytes=[],this.parseColorTable=t=>{const e=[];for(let i=0;i{const e=t.toString(16);return 1===e.length?"0"+e:e})).join("");e.push(t)}return e},this.readSubBlocks=()=>{let t,e;e="";do{t=this._st.readByte(),e+=this._st.read(t)}while(0!==t);return e},this.parseHeader=()=>{const t={sig:null,ver:null,width:null,height:null,colorRes:null,globalColorTableSize:null,gctFlag:null,sorted:null,globalColorTable:[],bgColor:null,pixelAspectRatio:null};if(t.sig=this._st.read(3),t.ver=this._st.read(3),"GIF"!==t.sig)throw new Error("Not a GIF file.");t.width=this._st.readUnsigned(),t.height=this._st.readUnsigned();const e=rn(this._st.readByte());t.gctFlag=e.shift(),t.colorRes=sn(e.splice(0,3)),t.sorted=e.shift(),t.globalColorTableSize=sn(e.splice(0,3)),t.bgColor=this._st.readByte(),t.pixelAspectRatio=this._st.readByte(),t.gctFlag&&(t.globalColorTable=this.parseColorTable(1<{const e=t=>{this.checkBytes.push(this._st.readByte());const e=rn(this._st.readByte());t.reserved=e.splice(0,3),t.disposalMethod=sn(e.splice(0,3)),t.userInput=e.shift(),t.transparencyGiven=e.shift(),t.delayTime=this._st.readUnsigned(),t.transparencyIndex=this._st.readByte(),t.terminator=this._st.readByte(),this._handler.gce&&this._handler.gce(t)&&this.checkBytes.push(this._handler.gce)},i=t=>{t.comment=this.readSubBlocks(),this._handler.com&&this._handler.com(t)&&this.checkBytes.push(this._handler.com)},s=t=>{this.checkBytes.push(this._st.readByte()),t.ptHeader=this._st.readBytes(12),t.ptData=this.readSubBlocks(),this._handler.pte&&this._handler.pte(t)&&this.checkBytes.push(this._handler.pte)},r=t=>{this.checkBytes.push(this._st.readByte()),t.identifier=this._st.read(8),t.authCode=this._st.read(3),"NETSCAPE"===t.identifier?(t=>{this.checkBytes.push(this._st.readByte()),t.unknown=this._st.readByte(),t.iterations=this._st.readUnsigned(),t.terminator=this._st.readByte(),this._handler.app&&this._handler.app.NETSCAPE&&this._handler.app.NETSCAPE(t)&&this.checkBytes.push(this._handler.app)})(t):(t=>{t.appData=this.readSubBlocks(),this._handler.app&&this._handler.app[t.identifier]&&this._handler.app[t.identifier](t)&&this.checkBytes.push(this._handler.app[t.identifier])})(t)},n=t=>{t.data=this.readSubBlocks(),this._handler.unknown&&this._handler.unknown(t)&&this.checkBytes.push(this._handler.unknown)};switch(t.label=this._st.readByte(),t.label){case 249:t.extType="gce",e(t);break;case 254:t.extType="com",i(t);break;case 1:t.extType="pte",s(t);break;case 255:t.extType="app",r(t);break;default:t.extType="unknown",n(t)}},this.parseImg=t=>{t.leftPos=this._st.readUnsigned(),t.topPos=this._st.readUnsigned(),t.width=this._st.readUnsigned(),t.height=this._st.readUnsigned();const e=rn(this._st.readByte());t.lctFlag=e.shift(),t.interlaced=e.shift(),t.sorted=e.shift(),t.reserved=e.splice(0,2),t.lctSize=sn(e.splice(0,3)),t.lctFlag&&(t.lct=this.parseColorTable(1<>3)&1<<(7&i)&&(s|=1<{const i=new Array(t.length),s=t.length/e,r=(s,r)=>{const n=t.slice(r*e,(r+1)*e);i.splice.apply(i,[s*e,e].concat(n))},n=[0,4,2,1],o=[8,8,4,2];let a=0;for(let t=0;t<4;t++)for(let e=n[t];e{const t={sentinel:this._st.readByte(),type:""};switch(String.fromCharCode(t.sentinel)){case"!":t.type="ext",this.parseExt(t);break;case",":t.type="img",this.parseImg(t);break;case";":t.type="eof",this._handler.eof&&this._handler.eof(t)&&this.checkBytes.push(this._handler.eof);break;default:throw new Error("Unknown block: 0x"+t.sentinel.toString(16))}"eof"!==t.type&&this.parseBlock()},this.arrayToImage=t=>{let e=0;const i=document.createElement("canvas");i.id=e.toString(),i.width=t.width,i.height=t.height,e++;const s=i.getContext("2d");let r=0,n=0;for(let e=0;eMath.max(e.x,t)),0)-e.x,this.height=this._points.reduce(((t,e)=>Math.max(e.y,t)),0)-e.y,this.flagDirty()}get minPoint(){return v(this._points.reduce(((t,e)=>Math.min(e.x,t)),1/0),this._points.reduce(((t,e)=>Math.min(e.y,t)),1/0))}clone(){return new hn({points:this.points.map((t=>t.clone())),...this.cloneGraphicOptions(),...this.cloneRasterOptions()})}execute(t){if(this.points&&this.points.length){t.beginPath();const e=this.minPoint.negate(),i=this.points[0].add(e);t.moveTo(i.x,i.y),this.points.forEach((i=>{t.lineTo(i.x+e.x,i.y+e.y)})),t.lineTo(i.x,i.y),t.closePath(),this.color&&t.fill(),this.strokeColor&&t.stroke()}}}class ln{constructor(){this._queue=[]}get length(){return this._queue.length}enqueue(){const t=new R;return this._queue.push(t),t.promise}dequeue(t){this._queue.shift().resolve(t)}}class An{constructor(t){this._count=t,this._waitQueue=new ln}get count(){return this._count}get waiting(){return this._waitQueue.length}async enter(){return 0!==this._count?(this._count--,Promise.resolve()):this._waitQueue.enqueue()}exit(t=1){if(0!==t){for(;0!==t&&0!==this._waitQueue.length;)this._waitQueue.dequeue(null),t--;this._count+=t}}}const cn="0.27.0";a()})();var a=o.fWn,h=o.Ia8,l=o.rqv,A=o.hLI,c=o.yyv,d=o.tX5,u=o.vtX,g=o.r7K,p=o.lCh,_=o.cE4,f=o.fwF,m=o.sce,C=o._c7,y=o.KUs,I=o.Ajp,w=o.RDh,v=o._H9,x=o.mxs,E=o.OmD,B=o.kBf,b=o.C4F,Q=o.NQt,S=o.JjN,D=o.V1s,T=o.Xz7,k=o.Cdc,F=o.FKn,P=o.wTW,R=o.SUY,M=o.ab2,L=o.GfZ,N=o.YMS,G=o.oyv,U=o.aUb,z=o.SdD,O=o.JUv,H=o.jEj,q=o.TFq,Y=o.HDU,j=o.R_y,V=o.ydN,K=o.t50,J=o.s$$,W=o.v2G,X=o.Ilk,Z=o.s9i,$=o.dxL,tt=o.LLX,et=o.wA2,it=o.R_p,st=o.IQ$,rt=o.I5F,nt=o.X8$,ot=o.FR6,at=o.U8o,ht=o.kbG,lt=o.iS_,At=o.cGG,ct=o.RPN,dt=o.skb,ut=o.SLU,gt=o.RdJ,pt=o.cNu,_t=o.gU7,ft=o.LSk,mt=o.Nmp,Ct=o.d1Y,yt=o.xrL,It=o.sRW,wt=o.cmV,vt=o.qWz,xt=o.N0Q,Et=o.q8b,Bt=o.ynB,bt=o.jT9,Qt=o.wAz,St=o.D4V,Dt=o.N6H,Tt=o.W1A,kt=o.JHW,Ft=o.v2K,Pt=o.pBf,Rt=o.GMl,Mt=o.zW2,Lt=o.B0K,Nt=o.Nv7,Gt=o.C_p,Ut=o.iqw,zt=o.MUA,Ot=o.xqU,Ht=o.pTp,qt=o.vUK,Yt=o.j9l,jt=o.Zxw,Vt=o.Hdx,Kt=o.Z$d,Jt=o.iqV,Wt=o.o$7,Xt=o.olM,Zt=o.Zm$,$t=o.$QH,te=o.i78,ee=o.h6u,ie=o.hts,se=o.j88,re=o.VME,ne=o.nt,oe=o.Ukr,ae=o.zsu,he=o.oA6,le=o.TVh,Ae=o.TwZ,ce=o.GTT,de=o.xxj,ue=o.XdK,ge=o.Jmb,pe=o.cXo,_e=o.Dm5,fe=o.IIB,me=o.zI0,Ce=o.LYD,ye=o.cEG,Ie=o.SEl,we=o.t9V,ve=o.SKZ,xe=o.__J,Ee=o.RI$,Be=o.x12,be=o.ccz,Qe=o.aNw,Se=o.xwn,De=o.dNK,Te=o.ini,ke=o.YdH,Fe=o.y3G,Pe=o.l57,Re=o.xn0,Me=o.t2V,Le=o.uxB,Ne=o.cpd,Ge=o.fiy,Ue=o.$XZ,ze=o.uqK,Oe=o.STE,He=o.y$z,qe=o.mAD,Ye=o.sOq,je=o.hUw,Ve=o._0G,Ke=o.Sqs,Je=o.hpZ,We=o.Vol,Xe=o.wIZ,Ze=o.cBi,$e=o.RFv,ti=o.kfC,ei=o.mgq,ii=o.YVA,si=o.Kgp,ri=o.HH$,ni=o.M_d,oi=o.rgh,ai=o.Ra6,hi=o.KhR,li=o.BS5,Ai=o.xhz,ci=o.xOq,di=o.a9j,ui=o.bHk,gi=o.CgK,pi=o.cuY,_i=o.kvE,fi=o.SBu,mi=o.AE_,Ci=o.ctO,yi=o.OLH,Ii=o.kky,wi=o.nSF,vi=o.zHn,xi=o.zwx,Ei=o.AeJ,Bi=o.hLz,bi=o.D9g,Qi=o.wA,Si=o.jhr,Di=o.GVs,Ti=o._zO,ki=o.w6$,Fi=o.mhV,Pi=o.MOD,Ri=o.kwd,Mi=o.Lmr,Li=o.xsS,Ni=o.lLr,Gi=o.Z$r,Ui=o.IXb,zi=o.SGH,Oi=o.SMj,Hi=o.L34,qi=o.exe,Yi=o.bnF,ji=o.MFA,Vi=o.$uU,Ki=o.jyi,Ji=o.E03,Wi=o.V6q,Xi=o.rg2,Zi=o.DVW,$i=o.nVo,ts=o.F6N,es=o.xP7,is=o.Odq,ss=o.Zif,rs=o.ZGJ,ns=o.MJk,os=o.xvT,as=o.PHM,hs=o.dpR,ls=o.n9L,As=o.KwO,cs=o.B7y,ds=o.x7r,us=o.wx7,gs=o.Uvn,ps=o.OFT,_s=o.xzN,fs=o.M5Z,ms=o.ZrN,Cs=o.OWs,ys=o.dF9,Is=o.oZy,ws=o.rD2,vs=o.VHo,xs=o.ohE,Es=o.R$E,Bs=o.q3I,bs=o.Pab,Qs=o.uZ5,Ss=o.McK,Ds=o.F9c,Ts=o.k0b,ks=o.hnT,Fs=o.RSJ,Ps=o.Mku,Rs=o.h90,Ms=o.rms,Ls=o.ErP,Ns=o.aVg,Gs=o.lPc,Us=o.Z8E,zs=o._N2,Os=o.yFn,Hs=o.lNv,qs=o.cu9,Ys=o.MZQ,js=o.FUM,Vs=o.BxR,Ks=o.vdf,Js=o.iaL,Ws=o.w6H,Xs=o.Q4c,Zs=o.Xxe,$s=o.Uxb,tr=o.Yr5,er=o.Bhw,ir=o.yOA},913:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Config=void 0,e.Config={PlayerSpeed:32,PlayerFrameSpeed:200}},519:function(t,e,i){"use strict";var s=this&&this.__createBinding||(Object.create?function(t,e,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(e,i);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[i]}}),Object.defineProperty(t,s,r)}:function(t,e,i,s){void 0===s&&(s=i),t[s]=e[i]}),r=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),n=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)"default"!==i&&Object.prototype.hasOwnProperty.call(t,i)&&s(e,t,i);return r(e,t),e};Object.defineProperty(e,"__esModule",{value:!0});const o=n(i(882)),a=i(512),h=i(251),l=new o.Engine({width:800,height:600,canvasElementId:"game",antialiasing:!1});l.start(a.loader).then((()=>{var t,e;const i=a.Resources.TiledMap.data.getObjectLayerByName("Objects"),s=i.getObjectByName("Camera");s&&(l.currentScene.camera.pos=o.vec(s.x,s.y),l.currentScene.camera.zoom=null!==(e=null===(t=s.getProperty("zoom"))||void 0===t?void 0:t.value)&&void 0!==e?e:1);const r=i.getObjectByName("Player");if(r){const t=new h.Player(o.vec(r.x,r.y));l.currentScene.add(t),t.z=100}a.Resources.TiledMap.addTiledMapToScene(l.currentScene)}))},251:function(t,e,i){"use strict";var s=this&&this.__createBinding||(Object.create?function(t,e,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(e,i);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[i]}}),Object.defineProperty(t,s,r)}:function(t,e,i,s){void 0===s&&(s=i),t[s]=e[i]}),r=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),n=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)"default"!==i&&Object.prototype.hasOwnProperty.call(t,i)&&s(e,t,i);return r(e,t),e};Object.defineProperty(e,"__esModule",{value:!0}),e.Player=void 0;const o=n(i(882)),a=i(512),h=i(913);class l extends o.Actor{constructor(t){super({pos:t,width:16,height:16,collisionType:o.CollisionType.Active})}onInitialize(t){const e=o.SpriteSheet.fromImageSource({image:a.Resources.HeroSpriteSheetPng,grid:{spriteWidth:16,spriteHeight:16,rows:8,columns:8}}),i=new o.Animation({frames:[{graphic:e.getSprite(0,1),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(1,1),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(2,1),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(3,1),duration:h.Config.PlayerFrameSpeed}]});this.graphics.add("left-idle",i);const s=new o.Animation({frames:[{graphic:e.getSprite(0,2),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(1,2),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(2,2),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(3,2),duration:h.Config.PlayerFrameSpeed}]});this.graphics.add("right-idle",s);const r=new o.Animation({frames:[{graphic:e.getSprite(0,3),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(1,3),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(2,3),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(3,3),duration:h.Config.PlayerFrameSpeed}]});this.graphics.add("up-idle",r);const n=new o.Animation({frames:[{graphic:e.getSprite(0,0),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(1,0),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(2,0),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(3,0),duration:h.Config.PlayerFrameSpeed}]});this.graphics.add("down-idle",n);const l=new o.Animation({frames:[{graphic:e.getSprite(0,5),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(1,5),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(2,5),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(3,5),duration:h.Config.PlayerFrameSpeed}]});this.graphics.add("left-walk",l);const A=new o.Animation({frames:[{graphic:e.getSprite(0,6),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(1,6),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(2,6),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(3,6),duration:h.Config.PlayerFrameSpeed}]});this.graphics.add("right-walk",A);const c=new o.Animation({frames:[{graphic:e.getSprite(0,7),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(1,7),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(2,7),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(3,7),duration:h.Config.PlayerFrameSpeed}]});this.graphics.add("up-walk",c);const d=new o.Animation({frames:[{graphic:e.getSprite(0,4),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(1,4),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(2,4),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(3,4),duration:h.Config.PlayerFrameSpeed}]});this.graphics.add("down-walk",d)}onPreUpdate(t,e){this.vel=o.Vector.Zero,this.graphics.use("down-idle"),t.input.keyboard.isHeld(o.Input.Keys.ArrowRight)&&(this.vel=o.vec(h.Config.PlayerSpeed,0),this.graphics.use("right-walk")),t.input.keyboard.isHeld(o.Input.Keys.ArrowLeft)&&(this.vel=o.vec(-h.Config.PlayerSpeed,0),this.graphics.use("left-walk")),t.input.keyboard.isHeld(o.Input.Keys.ArrowUp)&&(this.vel=o.vec(0,-h.Config.PlayerSpeed),this.graphics.use("up-walk")),t.input.keyboard.isHeld(o.Input.Keys.ArrowDown)&&(this.vel=o.vec(0,h.Config.PlayerSpeed),this.graphics.use("down-walk"))}}e.Player=l},512:(t,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.loader=e.Resources=void 0;const s=i(882),r=i(268);e.Resources={HeroSpriteSheetPng:new s.ImageSource("../img/Solaria Demo Pack Update 03/Solaria Demo Pack Update 03/16x16/Sprites/Hero 01.png",!1,s.ImageFiltering.Pixel),TiledMap:new r.TiledMapResource("../res/first-level.tmx")},e.loader=new s.Loader;for(let t of Object.values(e.Resources))e.loader.addResource(t)}},e={};function i(s){var r=e[s];if(void 0!==r)return r.exports;var n=e[s]={exports:{}};return t[s].call(n.exports,n,n.exports,i),n.exports}i.d=(t,e)=>{for(var s in e)i.o(e,s)&&!i.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:e[s]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i(519)})(); +(()=>{var t={268:(t,e,i)=>{var s;self,s=t=>(()=>{var e={"./node_modules/fast-xml-parser/src/json2xml.js":(t,e,i)=>{"use strict";const s=i("./node_modules/fast-xml-parser/src/util.js").buildOptions,r={attributeNamePrefix:"@_",attrNodeName:!1,textNodeName:"#text",ignoreAttributes:!0,cdataTagName:!1,cdataPositionChar:"\\c",format:!1,indentBy:" ",supressEmptyNode:!1,tagValueProcessor:function(t){return t},attrValueProcessor:function(t){return t}},n=["attributeNamePrefix","attrNodeName","textNodeName","ignoreAttributes","cdataTagName","cdataPositionChar","format","indentBy","supressEmptyNode","tagValueProcessor","attrValueProcessor","rootNodeName"];function o(t){this.options=s(t,r,n),this.options.ignoreAttributes||this.options.attrNodeName?this.isAttribute=function(){return!1}:(this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=p),this.options.cdataTagName?this.isCDATA=_:this.isCDATA=function(){return!1},this.replaceCDATAstr=h,this.replaceCDATAarr=l,this.processTextOrObjNode=a,this.options.format?(this.indentate=g,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine=""),this.options.supressEmptyNode?(this.buildTextNode=u,this.buildObjNode=c):(this.buildTextNode=d,this.buildObjNode=A),this.buildTextValNode=d,this.buildObjectNode=A}function a(t,e,i){const s=this.j2x(t,i+1);return void 0!==t[this.options.textNodeName]&&1===Object.keys(t).length?this.buildTextNode(s.val,e,s.attrStr,i):this.buildObjNode(s.val,e,s.attrStr,i)}function h(t,e){return t=this.options.tagValueProcessor(""+t),""===this.options.cdataPositionChar||""===t?t+"");return t+this.newLine}function A(t,e,i,s){return i&&-1===t.indexOf("<")?this.indentate(s)+"<"+e+i+">"+t+""+this.options.tagValueProcessor(t)+"1&&(t={[this.options.rootNodeName]:t}),this.j2x(t,0).val},o.prototype.j2x=function(t,e){let i="",s="";for(let r in t)if(void 0===t[r]);else if(null===t[r])s+=this.indentate(e)+"<"+r+"/"+this.tagEndChar;else if(t[r]instanceof Date)s+=this.buildTextNode(t[r],r,"",e);else if("object"!=typeof t[r]){const n=this.isAttribute(r);n?i+=" "+n+'="'+this.options.attrValueProcessor(""+t[r])+'"':this.isCDATA(r)?t[this.options.textNodeName]?s+=this.replaceCDATAstr(t[this.options.textNodeName],t[r]):s+=this.replaceCDATAstr("",t[r]):r===this.options.textNodeName?t[this.options.cdataTagName]||(s+=this.options.tagValueProcessor(""+t[r])):s+=this.buildTextNode(t[r],r,"",e)}else if(Array.isArray(t[r]))if(this.isCDATA(r))s+=this.indentate(e),t[this.options.textNodeName]?s+=this.replaceCDATAarr(t[this.options.textNodeName],t[r]):s+=this.replaceCDATAarr("",t[r]);else{const i=t[r].length;for(let n=0;n{"use strict";const s=function(t){return String.fromCharCode(t)},r={nilChar:s(176),missingChar:s(201),nilPremitive:s(175),missingPremitive:s(200),emptyChar:s(178),emptyValue:s(177),boundryChar:s(179),objStart:s(198),arrStart:s(204),arrayEnd:s(185)},n=[r.nilChar,r.nilPremitive,r.missingChar,r.missingPremitive,r.boundryChar,r.emptyChar,r.emptyValue,r.arrayEnd,r.objStart,r.arrStart],o=function(t,e,i){if("string"==typeof e)return t&&t[0]&&void 0!==t[0].val?a(t[0].val,e):a(t,e);{const n=void 0===(s=t)?r.missingChar:null===s?r.nilChar:!(s.child&&0===Object.keys(s.child).length&&(!s.attrsMap||0===Object.keys(s.attrsMap).length))||r.emptyChar;if(!0===n){let s="";if(Array.isArray(e)){s+=r.arrStart;const n=e[0],l=t.length;if("string"==typeof n)for(let e=0;e{"use strict";const s=i("./node_modules/fast-xml-parser/src/util.js"),r=function(t,e,i){const n={};if(!e.alwaysCreateTextNode&&(!t.child||s.isEmptyObject(t.child))&&(!t.attrsMap||s.isEmptyObject(t.attrsMap)))return s.isExist(t.val)?t.val:"";if(s.isExist(t.val)&&("string"!=typeof t.val||""!==t.val&&t.val!==e.cdataPositionChar)){const r=s.isTagNameInArrayMode(t.tagname,e.arrayMode,i);n[e.textNodeName]=r?[t.val]:t.val}s.merge(n,t.attrsMap,e.arrayMode);const o=Object.keys(t.child);for(let a=0;a1){n[h]=[];for(let i in t.child[h])t.child[h].hasOwnProperty(i)&&n[h].push(r(t.child[h][i],e,h))}else{const o=r(t.child[h][0],e,h),a=!0===e.arrayMode&&"object"==typeof o||s.isTagNameInArrayMode(h,e.arrayMode,i);n[h]=a?[o]:o}}return n};e.convertToJson=r},"./node_modules/fast-xml-parser/src/node2json_str.js":(t,e,i)=>{"use strict";const s=i("./node_modules/fast-xml-parser/src/util.js"),r=i("./node_modules/fast-xml-parser/src/util.js").buildOptions,n=i("./node_modules/fast-xml-parser/src/xmlstr2xmlnode.js"),o=function(t,e,i){let r="{";const n=Object.keys(t.child);for(let i=0;i1){r+='"'+s+'" : [ ';for(let i in t.child[s])r+=o(t.child[s][i],e)+" , ";r=r.substr(0,r.length-1)+" ] "}else r+='"'+s+'" : '+o(t.child[s][0],e)+" ,"}return s.merge(r,t.attrsMap),s.isEmptyObject(r)?s.isExist(t.val)?t.val:"":(s.isExist(t.val)&&("string"!=typeof t.val||""!==t.val&&t.val!==e.cdataPositionChar)&&(r+='"'+e.textNodeName+'" : '+(!0!==(a=t.val)&&!1!==a&&isNaN(a)?'"'+a+'"':a)),","===r[r.length-1]&&(r=r.substr(0,r.length-2)),r+"}");var a};e.convertToJsonString=function(t,e){return(e=r(e,n.defaultOptions,n.props)).indentBy=e.indentBy||"",o(t,e,0)}},"./node_modules/fast-xml-parser/src/parser.js":(t,e,i)=>{"use strict";const s=i("./node_modules/fast-xml-parser/src/node2json.js"),r=i("./node_modules/fast-xml-parser/src/xmlstr2xmlnode.js"),n=i("./node_modules/fast-xml-parser/src/xmlstr2xmlnode.js"),o=i("./node_modules/fast-xml-parser/src/util.js").buildOptions,a=i("./node_modules/fast-xml-parser/src/validator.js");e.parse=function(t,e={},i){if(i){!0===i&&(i={});const e=a.validate(t,i);if(!0!==e)throw Error(e.err.msg)}e.parseTrueNumberOnly&&!1!==e.parseNodeValue&&!e.numParseOptions&&(e.numParseOptions={leadingZeros:!1});let h=o(e,n.defaultOptions,n.props);const l=r.getTraversalObj(t,h);return s.convertToJson(l,h)},e.convertTonimn=i("./node_modules/fast-xml-parser/src/nimndata.js").convert2nimn,e.getTraversalObj=r.getTraversalObj,e.convertToJson=s.convertToJson,e.convertToJsonString=i("./node_modules/fast-xml-parser/src/node2json_str.js").convertToJsonString,e.validate=a.validate,e.j2xParser=i("./node_modules/fast-xml-parser/src/json2xml.js"),e.parseToNimn=function(t,i,s){return e.convertTonimn(e.getTraversalObj(t,s),i,s)}},"./node_modules/fast-xml-parser/src/util.js":(t,e)=>{"use strict";const i="[:A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*",s=new RegExp("^"+i+"$");e.isExist=function(t){return void 0!==t},e.isEmptyObject=function(t){return 0===Object.keys(t).length},e.merge=function(t,e,i){if(e){const s=Object.keys(e),r=s.length;for(let n=0;n{"use strict";const s=i("./node_modules/fast-xml-parser/src/util.js"),r={allowBooleanAttributes:!1},n=["allowBooleanAttributes"];function o(t,e){const i=e;for(;e5&&"xml"===s)return d("InvalidXml","XML declaration allowed only at the start of the document.",g(t,e));if("?"==t[e]&&">"==t[e+1]){e++;break}}return e}function a(t,e){if(t.length>e+5&&"-"===t[e+1]&&"-"===t[e+2]){for(e+=3;e"===t[e+2]){e+=2;break}}else if(t.length>e+8&&"D"===t[e+1]&&"O"===t[e+2]&&"C"===t[e+3]&&"T"===t[e+4]&&"Y"===t[e+5]&&"P"===t[e+6]&&"E"===t[e+7]){let i=1;for(e+=8;e"===t[e]&&(i--,0===i))break}else if(t.length>e+9&&"["===t[e+1]&&"C"===t[e+2]&&"D"===t[e+3]&&"A"===t[e+4]&&"T"===t[e+5]&&"A"===t[e+6]&&"["===t[e+7])for(e+=8;e"===t[e+2]){e+=2;break}return e}function h(t,e){let i="",s="",r=!1;for(;e"===t[e]&&""===s){r=!0;break}i+=t[e]}return""===s&&{value:i,index:e,tagClosed:r}}e.validate=function(t,e){e=s.buildOptions(e,r,n);const i=[];let l=!1,u=!1;"\ufeff"===t[0]&&(t=t.substr(1));for(let r=0;r"!==t[r]&&" "!==t[r]&&"\t"!==t[r]&&"\n"!==t[r]&&"\r"!==t[r];r++)f+=t[r];if(f=f.trim(),"/"===f[f.length-1]&&(f=f.substring(0,f.length-1),r--),p=f,!s.isName(p)){let e;return e=0===f.trim().length?"Invalid space after '<'.":"Tag '"+f+"' is an invalid name.",d("InvalidTag",e,g(t,r))}const m=h(t,r);if(!1===m)return d("InvalidAttr","Attributes for '"+f+"' have open quote.",g(t,r));let C=m.value;if(r=m.index,"/"===C[C.length-1]){const i=r-C.length;C=C.substring(0,C.length-1);const s=A(C,e);if(!0!==s)return d(s.err.code,s.err.msg,g(t,i+s.err.line));l=!0}else if(_){if(!m.tagClosed)return d("InvalidTag","Closing tag '"+f+"' doesn't have proper closing.",g(t,r));if(C.trim().length>0)return d("InvalidTag","Closing tag '"+f+"' can't have attributes or invalid starting.",g(t,n));{const e=i.pop();if(f!==e.tagName){let i=g(t,e.tagStartPos);return d("InvalidTag","Expected closing tag '"+e.tagName+"' (opened in line "+i.line+", col "+i.col+") instead of closing tag '"+f+"'.",g(t,n))}0==i.length&&(u=!0)}}else{const s=A(C,e);if(!0!==s)return d(s.err.code,s.err.msg,g(t,r-C.length+s.err.line));if(!0===u)return d("InvalidXml","Multiple possible root nodes found.",g(t,r));i.push({tagName:f,tagStartPos:n}),l=!0}for(r++;r0)||d("InvalidXml","Invalid '"+JSON.stringify(i.map((t=>t.tagName)),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1}):d("InvalidXml","Start tag expected.",1)};const l=new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");function A(t,e){const i=s.getAllMatches(t,l),r={};for(let t=0;t{"use strict";t.exports=function(t,e,i){this.tagname=t,this.parent=e,this.child={},this.attrsMap={},this.val=i,this.addChild=function(t){Array.isArray(this.child[t.tagname])?this.child[t.tagname].push(t):this.child[t.tagname]=[t]}}},"./node_modules/fast-xml-parser/src/xmlstr2xmlnode.js":(t,e,i)=>{"use strict";const s=i("./node_modules/fast-xml-parser/src/util.js"),r=i("./node_modules/fast-xml-parser/src/util.js").buildOptions,n=i("./node_modules/fast-xml-parser/src/xmlNode.js"),o=i("./node_modules/strnum/strnum.js");"<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\/)(NAME)\\s*>))([^<]*)".replace(/NAME/g,s.nameRegexp),!Number.parseInt&&window.parseInt&&(Number.parseInt=window.parseInt),!Number.parseFloat&&window.parseFloat&&(Number.parseFloat=window.parseFloat);const a={attributeNamePrefix:"@_",attrNodeName:!1,textNodeName:"#text",ignoreAttributes:!0,ignoreNameSpace:!1,allowBooleanAttributes:!1,parseNodeValue:!0,parseAttributeValue:!1,arrayMode:!1,trimValues:!0,cdataTagName:!1,cdataPositionChar:"\\c",numParseOptions:{hex:!0,leadingZeros:!0},tagValueProcessor:function(t,e){return t},attrValueProcessor:function(t,e){return t},stopNodes:[],alwaysCreateTextNode:!1};e.defaultOptions=a;const h=["attributeNamePrefix","attrNodeName","textNodeName","ignoreAttributes","ignoreNameSpace","allowBooleanAttributes","parseNodeValue","parseAttributeValue","arrayMode","trimValues","cdataTagName","cdataPositionChar","tagValueProcessor","attrValueProcessor","parseTrueNumberOnly","numParseOptions","stopNodes","alwaysCreateTextNode"];function l(t,e,i){return e&&(i.trimValues&&(e=e.trim()),e=c(e=i.tagValueProcessor(e,t),i.parseNodeValue,i.numParseOptions)),e}function A(t,e){if(e.ignoreNameSpace){const e=t.split(":"),i="/"===t.charAt(0)?"/":"";if("xmlns"===e[0])return"";2===e.length&&(t=i+e[1])}return t}function c(t,e,i){if(e&&"string"==typeof t){const e=t.trim();return"true"===e||"false"!==e&&o(t,i)}return s.isExist(t)?t:""}e.props=h;const d=new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])(.*?)\\3)?","g");function u(t,e){if(!e.ignoreAttributes&&"string"==typeof t){t=t.replace(/\r?\n/g," ");const i=s.getAllMatches(t,d),r=i.length,n={};for(let t=0;t"===e)return{data:s,index:r};"\t"===e&&(e=" ")}s+=e}}function p(t,e,i,s){const r=t.indexOf(e,i);if(-1===r)throw new Error(s);return r+e.length-1}e.getTraversalObj=function(t,e){t=t.replace(/\r\n?/g,"\n"),e=r(e,a,h);const i=new n("!xml");let o=i,A="";for(let i=0;i",i,"Closing Tag is not closed.");let n=t.substring(i+2,r).trim();if(e.ignoreNameSpace){const t=n.indexOf(":");-1!==t&&(n=n.substr(t+1))}o&&(o.val?o.val=s.getValue(o.val)+""+l(n,A,e):o.val=l(n,A,e)),e.stopNodes.length&&e.stopNodes.includes(o.tagname)&&(o.child=[],null==o.attrsMap&&(o.attrsMap={}),o.val=t.substr(o.startIndex+1,i-o.startIndex-1)),o=o.parent,A="",i=r}else if("?"===t[i+1])i=p(t,"?>",i,"Pi Tag is not closed.");else if("!--"===t.substr(i+1,3))i=p(t,"--\x3e",i,"Comment is not closed.");else if("!D"===t.substr(i+1,2)){const e=p(t,">",i,"DOCTYPE is not closed.");i=t.substring(i,e).indexOf("[")>=0?t.indexOf("]>",i)+1:e}else if("!["===t.substr(i+1,2)){const r=p(t,"]]>",i,"CDATA is not closed.")-2,a=t.substring(i+9,r);if(A&&(o.val=s.getValue(o.val)+""+l(o.tagname,A,e),A=""),e.cdataTagName){const t=new n(e.cdataTagName,o,a);o.addChild(t),o.val=s.getValue(o.val)+e.cdataPositionChar,a&&(t.val=a)}else o.val=(o.val||"")+(a||"");i=r+2}else{const r=g(t,i+1);let a=r.data;const h=r.index,c=a.indexOf(" ");let d=a,p=!0;if(-1!==c&&(d=a.substr(0,c).replace(/\s\s*$/,""),a=a.substr(c+1)),e.ignoreNameSpace){const t=d.indexOf(":");-1!==t&&(d=d.substr(t+1),p=d!==r.data.substr(t+1))}if(o&&A&&"!xml"!==o.tagname&&(o.val=s.getValue(o.val)+""+l(o.tagname,A,e)),a.length>0&&a.lastIndexOf("/")===a.length-1){"/"===d[d.length-1]?(d=d.substr(0,d.length-1),a=d):a=a.substr(0,a.length-1);const t=new n(d,o,"");d!==a&&(t.attrsMap=u(a,e)),o.addChild(t)}else{const t=new n(d,o);e.stopNodes.length&&e.stopNodes.includes(t.tagname)&&(t.startIndex=h),d!==a&&p&&(t.attrsMap=u(a,e)),o.addChild(t),o=t}A="",i=h}else A+=t[i];return i}},"./node_modules/pako/index.js":(t,e,i)=>{"use strict";var s={};(0,i("./node_modules/pako/lib/utils/common.js").assign)(s,i("./node_modules/pako/lib/deflate.js"),i("./node_modules/pako/lib/inflate.js"),i("./node_modules/pako/lib/zlib/constants.js")),t.exports=s},"./node_modules/pako/lib/deflate.js":(t,e,i)=>{"use strict";var s=i("./node_modules/pako/lib/zlib/deflate.js"),r=i("./node_modules/pako/lib/utils/common.js"),n=i("./node_modules/pako/lib/utils/strings.js"),o=i("./node_modules/pako/lib/zlib/messages.js"),a=i("./node_modules/pako/lib/zlib/zstream.js"),h=Object.prototype.toString;function l(t){if(!(this instanceof l))return new l(t);this.options=r.assign({level:-1,method:8,chunkSize:16384,windowBits:15,memLevel:8,strategy:0,to:""},t||{});var e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new a,this.strm.avail_out=0;var i=s.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(0!==i)throw new Error(o[i]);if(e.header&&s.deflateSetHeader(this.strm,e.header),e.dictionary){var A;if(A="string"==typeof e.dictionary?n.string2buf(e.dictionary):"[object ArrayBuffer]"===h.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,0!==(i=s.deflateSetDictionary(this.strm,A)))throw new Error(o[i]);this._dict_set=!0}}function A(t,e){var i=new l(e);if(i.push(t,!0),i.err)throw i.msg||o[i.err];return i.result}l.prototype.push=function(t,e){var i,o,a=this.strm,l=this.options.chunkSize;if(this.ended)return!1;o=e===~~e?e:!0===e?4:0,"string"==typeof t?a.input=n.string2buf(t):"[object ArrayBuffer]"===h.call(t)?a.input=new Uint8Array(t):a.input=t,a.next_in=0,a.avail_in=a.input.length;do{if(0===a.avail_out&&(a.output=new r.Buf8(l),a.next_out=0,a.avail_out=l),1!==(i=s.deflate(a,o))&&0!==i)return this.onEnd(i),this.ended=!0,!1;0!==a.avail_out&&(0!==a.avail_in||4!==o&&2!==o)||("string"===this.options.to?this.onData(n.buf2binstring(r.shrinkBuf(a.output,a.next_out))):this.onData(r.shrinkBuf(a.output,a.next_out)))}while((a.avail_in>0||0===a.avail_out)&&1!==i);return 4===o?(i=s.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,0===i):2!==o||(this.onEnd(0),a.avail_out=0,!0)},l.prototype.onData=function(t){this.chunks.push(t)},l.prototype.onEnd=function(t){0===t&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=r.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},e.Deflate=l,e.deflate=A,e.deflateRaw=function(t,e){return(e=e||{}).raw=!0,A(t,e)},e.gzip=function(t,e){return(e=e||{}).gzip=!0,A(t,e)}},"./node_modules/pako/lib/inflate.js":(t,e,i)=>{"use strict";var s=i("./node_modules/pako/lib/zlib/inflate.js"),r=i("./node_modules/pako/lib/utils/common.js"),n=i("./node_modules/pako/lib/utils/strings.js"),o=i("./node_modules/pako/lib/zlib/constants.js"),a=i("./node_modules/pako/lib/zlib/messages.js"),h=i("./node_modules/pako/lib/zlib/zstream.js"),l=i("./node_modules/pako/lib/zlib/gzheader.js"),A=Object.prototype.toString;function c(t){if(!(this instanceof c))return new c(t);this.options=r.assign({chunkSize:16384,windowBits:0,to:""},t||{});var e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,0===e.windowBits&&(e.windowBits=-15)),!(e.windowBits>=0&&e.windowBits<16)||t&&t.windowBits||(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&0==(15&e.windowBits)&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new h,this.strm.avail_out=0;var i=s.inflateInit2(this.strm,e.windowBits);if(i!==o.Z_OK)throw new Error(a[i]);if(this.header=new l,s.inflateGetHeader(this.strm,this.header),e.dictionary&&("string"==typeof e.dictionary?e.dictionary=n.string2buf(e.dictionary):"[object ArrayBuffer]"===A.call(e.dictionary)&&(e.dictionary=new Uint8Array(e.dictionary)),e.raw&&(i=s.inflateSetDictionary(this.strm,e.dictionary))!==o.Z_OK))throw new Error(a[i])}function d(t,e){var i=new c(e);if(i.push(t,!0),i.err)throw i.msg||a[i.err];return i.result}c.prototype.push=function(t,e){var i,a,h,l,c,d=this.strm,u=this.options.chunkSize,g=this.options.dictionary,p=!1;if(this.ended)return!1;a=e===~~e?e:!0===e?o.Z_FINISH:o.Z_NO_FLUSH,"string"==typeof t?d.input=n.binstring2buf(t):"[object ArrayBuffer]"===A.call(t)?d.input=new Uint8Array(t):d.input=t,d.next_in=0,d.avail_in=d.input.length;do{if(0===d.avail_out&&(d.output=new r.Buf8(u),d.next_out=0,d.avail_out=u),(i=s.inflate(d,o.Z_NO_FLUSH))===o.Z_NEED_DICT&&g&&(i=s.inflateSetDictionary(this.strm,g)),i===o.Z_BUF_ERROR&&!0===p&&(i=o.Z_OK,p=!1),i!==o.Z_STREAM_END&&i!==o.Z_OK)return this.onEnd(i),this.ended=!0,!1;d.next_out&&(0!==d.avail_out&&i!==o.Z_STREAM_END&&(0!==d.avail_in||a!==o.Z_FINISH&&a!==o.Z_SYNC_FLUSH)||("string"===this.options.to?(h=n.utf8border(d.output,d.next_out),l=d.next_out-h,c=n.buf2string(d.output,h),d.next_out=l,d.avail_out=u-l,l&&r.arraySet(d.output,d.output,h,l,0),this.onData(c)):this.onData(r.shrinkBuf(d.output,d.next_out)))),0===d.avail_in&&0===d.avail_out&&(p=!0)}while((d.avail_in>0||0===d.avail_out)&&i!==o.Z_STREAM_END);return i===o.Z_STREAM_END&&(a=o.Z_FINISH),a===o.Z_FINISH?(i=s.inflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===o.Z_OK):a!==o.Z_SYNC_FLUSH||(this.onEnd(o.Z_OK),d.avail_out=0,!0)},c.prototype.onData=function(t){this.chunks.push(t)},c.prototype.onEnd=function(t){t===o.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=r.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},e.Inflate=c,e.inflate=d,e.inflateRaw=function(t,e){return(e=e||{}).raw=!0,d(t,e)},e.ungzip=d},"./node_modules/pako/lib/utils/common.js":(t,e)=>{"use strict";var i="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;function s(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.assign=function(t){for(var e=Array.prototype.slice.call(arguments,1);e.length;){var i=e.shift();if(i){if("object"!=typeof i)throw new TypeError(i+"must be non-object");for(var r in i)s(i,r)&&(t[r]=i[r])}}return t},e.shrinkBuf=function(t,e){return t.length===e?t:t.subarray?t.subarray(0,e):(t.length=e,t)};var r={arraySet:function(t,e,i,s,r){if(e.subarray&&t.subarray)t.set(e.subarray(i,i+s),r);else for(var n=0;n{"use strict";var s=i("./node_modules/pako/lib/utils/common.js"),r=!0,n=!0;try{String.fromCharCode.apply(null,[0])}catch(t){r=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){n=!1}for(var o=new s.Buf8(256),a=0;a<256;a++)o[a]=a>=252?6:a>=248?5:a>=240?4:a>=224?3:a>=192?2:1;function h(t,e){if(e<65534&&(t.subarray&&n||!t.subarray&&r))return String.fromCharCode.apply(null,s.shrinkBuf(t,e));for(var i="",o=0;o>>6,e[o++]=128|63&i):i<65536?(e[o++]=224|i>>>12,e[o++]=128|i>>>6&63,e[o++]=128|63&i):(e[o++]=240|i>>>18,e[o++]=128|i>>>12&63,e[o++]=128|i>>>6&63,e[o++]=128|63&i);return e},e.buf2binstring=function(t){return h(t,t.length)},e.binstring2buf=function(t){for(var e=new s.Buf8(t.length),i=0,r=e.length;i4)l[s++]=65533,i+=n-1;else{for(r&=2===n?31:3===n?15:7;n>1&&i1?l[s++]=65533:r<65536?l[s++]=r:(r-=65536,l[s++]=55296|r>>10&1023,l[s++]=56320|1023&r)}return h(l,s)},e.utf8border=function(t,e){var i;for((e=e||t.length)>t.length&&(e=t.length),i=e-1;i>=0&&128==(192&t[i]);)i--;return i<0||0===i?e:i+o[t[i]]>e?i:e}},"./node_modules/pako/lib/zlib/adler32.js":t=>{"use strict";t.exports=function(t,e,i,s){for(var r=65535&t|0,n=t>>>16&65535|0,o=0;0!==i;){i-=o=i>2e3?2e3:i;do{n=n+(r=r+e[s++]|0)|0}while(--o);r%=65521,n%=65521}return r|n<<16|0}},"./node_modules/pako/lib/zlib/constants.js":t=>{"use strict";t.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},"./node_modules/pako/lib/zlib/crc32.js":t=>{"use strict";var e=function(){for(var t,e=[],i=0;i<256;i++){t=i;for(var s=0;s<8;s++)t=1&t?3988292384^t>>>1:t>>>1;e[i]=t}return e}();t.exports=function(t,i,s,r){var n=e,o=r+s;t^=-1;for(var a=r;a>>8^n[255&(t^i[a])];return-1^t}},"./node_modules/pako/lib/zlib/deflate.js":(t,e,i)=>{"use strict";var s,r=i("./node_modules/pako/lib/utils/common.js"),n=i("./node_modules/pako/lib/zlib/trees.js"),o=i("./node_modules/pako/lib/zlib/adler32.js"),a=i("./node_modules/pako/lib/zlib/crc32.js"),h=i("./node_modules/pako/lib/zlib/messages.js"),l=-2,A=258,c=262,d=103,u=113,g=666;function p(t,e){return t.msg=h[e],e}function _(t){return(t<<1)-(t>4?9:0)}function f(t){for(var e=t.length;--e>=0;)t[e]=0}function m(t){var e=t.state,i=e.pending;i>t.avail_out&&(i=t.avail_out),0!==i&&(r.arraySet(t.output,e.pending_buf,e.pending_out,i,t.next_out),t.next_out+=i,e.pending_out+=i,t.total_out+=i,t.avail_out-=i,e.pending-=i,0===e.pending&&(e.pending_out=0))}function C(t,e){n._tr_flush_block(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,m(t.strm)}function y(t,e){t.pending_buf[t.pending++]=e}function v(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e}function w(t,e){var i,s,r=t.max_chain_length,n=t.strstart,o=t.prev_length,a=t.nice_match,h=t.strstart>t.w_size-c?t.strstart-(t.w_size-c):0,l=t.window,d=t.w_mask,u=t.prev,g=t.strstart+A,p=l[n+o-1],_=l[n+o];t.prev_length>=t.good_match&&(r>>=2),a>t.lookahead&&(a=t.lookahead);do{if(l[(i=e)+o]===_&&l[i+o-1]===p&&l[i]===l[n]&&l[++i]===l[n+1]){n+=2,i++;do{}while(l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&no){if(t.match_start=e,o=s,s>=a)break;p=l[n+o-1],_=l[n+o]}}}while((e=u[e&d])>h&&0!=--r);return o<=t.lookahead?o:t.lookahead}function I(t){var e,i,s,n,h,l,A,d,u,g,p=t.w_size;do{if(n=t.window_size-t.lookahead-t.strstart,t.strstart>=p+(p-c)){r.arraySet(t.window,t.window,p,p,0),t.match_start-=p,t.strstart-=p,t.block_start-=p,e=i=t.hash_size;do{s=t.head[--e],t.head[e]=s>=p?s-p:0}while(--i);e=i=p;do{s=t.prev[--e],t.prev[e]=s>=p?s-p:0}while(--i);n+=p}if(0===t.strm.avail_in)break;if(l=t.strm,A=t.window,d=t.strstart+t.lookahead,u=n,g=void 0,(g=l.avail_in)>u&&(g=u),i=0===g?0:(l.avail_in-=g,r.arraySet(A,l.input,l.next_in,g,d),1===l.state.wrap?l.adler=o(l.adler,A,g,d):2===l.state.wrap&&(l.adler=a(l.adler,A,g,d)),l.next_in+=g,l.total_in+=g,g),t.lookahead+=i,t.lookahead+t.insert>=3)for(h=t.strstart-t.insert,t.ins_h=t.window[h],t.ins_h=(t.ins_h<=3&&(t.ins_h=(t.ins_h<=3)if(s=n._tr_tally(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do{t.strstart++,t.ins_h=(t.ins_h<=3&&(t.ins_h=(t.ins_h<4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){r=t.strstart+t.lookahead-3,s=n._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=r&&(t.ins_h=(t.ins_h<15&&(a=2,s-=16),n<1||n>9||8!==i||s<8||s>15||e<0||e>9||o<0||o>4)return p(t,l);8===s&&(s=9);var h=new b;return t.state=h,h.strm=t,h.wrap=a,h.gzhead=null,h.w_bits=s,h.w_size=1<t.pending_buf_size-5&&(i=t.pending_buf_size-5);;){if(t.lookahead<=1){if(I(t),0===t.lookahead&&0===e)return 1;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;var s=t.block_start+i;if((0===t.strstart||t.strstart>=s)&&(t.lookahead=t.strstart-s,t.strstart=s,C(t,!1),0===t.strm.avail_out))return 1;if(t.strstart-t.block_start>=t.w_size-c&&(C(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,4===e?(C(t,!0),0===t.strm.avail_out?3:4):(t.strstart>t.block_start&&(C(t,!1),t.strm.avail_out),1)})),new B(4,4,8,4,x),new B(4,5,16,8,x),new B(4,6,32,32,x),new B(4,4,16,16,E),new B(8,16,32,32,E),new B(8,16,128,128,E),new B(8,32,128,256,E),new B(32,128,258,1024,E),new B(32,258,258,4096,E)],e.deflateInit=function(t,e){return D(t,e,8,15,8,0)},e.deflateInit2=D,e.deflateReset=S,e.deflateResetKeep=Q,e.deflateSetHeader=function(t,e){return t&&t.state?2!==t.state.wrap?l:(t.state.gzhead=e,0):l},e.deflate=function(t,e){var i,r,o,h;if(!t||!t.state||e>5||e<0)return t?p(t,l):l;if(r=t.state,!t.output||!t.input&&0!==t.avail_in||r.status===g&&4!==e)return p(t,0===t.avail_out?-5:l);if(r.strm=t,i=r.last_flush,r.last_flush=e,42===r.status)if(2===r.wrap)t.adler=0,y(r,31),y(r,139),y(r,8),r.gzhead?(y(r,(r.gzhead.text?1:0)+(r.gzhead.hcrc?2:0)+(r.gzhead.extra?4:0)+(r.gzhead.name?8:0)+(r.gzhead.comment?16:0)),y(r,255&r.gzhead.time),y(r,r.gzhead.time>>8&255),y(r,r.gzhead.time>>16&255),y(r,r.gzhead.time>>24&255),y(r,9===r.level?2:r.strategy>=2||r.level<2?4:0),y(r,255&r.gzhead.os),r.gzhead.extra&&r.gzhead.extra.length&&(y(r,255&r.gzhead.extra.length),y(r,r.gzhead.extra.length>>8&255)),r.gzhead.hcrc&&(t.adler=a(t.adler,r.pending_buf,r.pending,0)),r.gzindex=0,r.status=69):(y(r,0),y(r,0),y(r,0),y(r,0),y(r,0),y(r,9===r.level?2:r.strategy>=2||r.level<2?4:0),y(r,3),r.status=u);else{var c=8+(r.w_bits-8<<4)<<8;c|=(r.strategy>=2||r.level<2?0:r.level<6?1:6===r.level?2:3)<<6,0!==r.strstart&&(c|=32),c+=31-c%31,r.status=u,v(r,c),0!==r.strstart&&(v(r,t.adler>>>16),v(r,65535&t.adler)),t.adler=1}if(69===r.status)if(r.gzhead.extra){for(o=r.pending;r.gzindex<(65535&r.gzhead.extra.length)&&(r.pending!==r.pending_buf_size||(r.gzhead.hcrc&&r.pending>o&&(t.adler=a(t.adler,r.pending_buf,r.pending-o,o)),m(t),o=r.pending,r.pending!==r.pending_buf_size));)y(r,255&r.gzhead.extra[r.gzindex]),r.gzindex++;r.gzhead.hcrc&&r.pending>o&&(t.adler=a(t.adler,r.pending_buf,r.pending-o,o)),r.gzindex===r.gzhead.extra.length&&(r.gzindex=0,r.status=73)}else r.status=73;if(73===r.status)if(r.gzhead.name){o=r.pending;do{if(r.pending===r.pending_buf_size&&(r.gzhead.hcrc&&r.pending>o&&(t.adler=a(t.adler,r.pending_buf,r.pending-o,o)),m(t),o=r.pending,r.pending===r.pending_buf_size)){h=1;break}h=r.gzindexo&&(t.adler=a(t.adler,r.pending_buf,r.pending-o,o)),0===h&&(r.gzindex=0,r.status=91)}else r.status=91;if(91===r.status)if(r.gzhead.comment){o=r.pending;do{if(r.pending===r.pending_buf_size&&(r.gzhead.hcrc&&r.pending>o&&(t.adler=a(t.adler,r.pending_buf,r.pending-o,o)),m(t),o=r.pending,r.pending===r.pending_buf_size)){h=1;break}h=r.gzindexo&&(t.adler=a(t.adler,r.pending_buf,r.pending-o,o)),0===h&&(r.status=d)}else r.status=d;if(r.status===d&&(r.gzhead.hcrc?(r.pending+2>r.pending_buf_size&&m(t),r.pending+2<=r.pending_buf_size&&(y(r,255&t.adler),y(r,t.adler>>8&255),t.adler=0,r.status=u)):r.status=u),0!==r.pending){if(m(t),0===t.avail_out)return r.last_flush=-1,0}else if(0===t.avail_in&&_(e)<=_(i)&&4!==e)return p(t,-5);if(r.status===g&&0!==t.avail_in)return p(t,-5);if(0!==t.avail_in||0!==r.lookahead||0!==e&&r.status!==g){var w=2===r.strategy?function(t,e){for(var i;;){if(0===t.lookahead&&(I(t),0===t.lookahead)){if(0===e)return 1;break}if(t.match_length=0,i=n._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,i&&(C(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,4===e?(C(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(C(t,!1),0===t.strm.avail_out)?1:2}(r,e):3===r.strategy?function(t,e){for(var i,s,r,o,a=t.window;;){if(t.lookahead<=A){if(I(t),t.lookahead<=A&&0===e)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(s=a[r=t.strstart-1])===a[++r]&&s===a[++r]&&s===a[++r]){o=t.strstart+A;do{}while(s===a[++r]&&s===a[++r]&&s===a[++r]&&s===a[++r]&&s===a[++r]&&s===a[++r]&&s===a[++r]&&s===a[++r]&&rt.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(i=n._tr_tally(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(i=n._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),i&&(C(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,4===e?(C(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(C(t,!1),0===t.strm.avail_out)?1:2}(r,e):s[r.level].func(r,e);if(3!==w&&4!==w||(r.status=g),1===w||3===w)return 0===t.avail_out&&(r.last_flush=-1),0;if(2===w&&(1===e?n._tr_align(r):5!==e&&(n._tr_stored_block(r,0,0,!1),3===e&&(f(r.head),0===r.lookahead&&(r.strstart=0,r.block_start=0,r.insert=0))),m(t),0===t.avail_out))return r.last_flush=-1,0}return 4!==e?0:r.wrap<=0?1:(2===r.wrap?(y(r,255&t.adler),y(r,t.adler>>8&255),y(r,t.adler>>16&255),y(r,t.adler>>24&255),y(r,255&t.total_in),y(r,t.total_in>>8&255),y(r,t.total_in>>16&255),y(r,t.total_in>>24&255)):(v(r,t.adler>>>16),v(r,65535&t.adler)),m(t),r.wrap>0&&(r.wrap=-r.wrap),0!==r.pending?0:1)},e.deflateEnd=function(t){var e;return t&&t.state?42!==(e=t.state.status)&&69!==e&&73!==e&&91!==e&&e!==d&&e!==u&&e!==g?p(t,l):(t.state=null,e===u?p(t,-3):0):l},e.deflateSetDictionary=function(t,e){var i,s,n,a,h,A,c,d,u=e.length;if(!t||!t.state)return l;if(2===(a=(i=t.state).wrap)||1===a&&42!==i.status||i.lookahead)return l;for(1===a&&(t.adler=o(t.adler,e,u,0)),i.wrap=0,u>=i.w_size&&(0===a&&(f(i.head),i.strstart=0,i.block_start=0,i.insert=0),d=new r.Buf8(i.w_size),r.arraySet(d,e,u-i.w_size,i.w_size,0),e=d,u=i.w_size),h=t.avail_in,A=t.next_in,c=t.input,t.avail_in=u,t.next_in=0,t.input=e,I(i);i.lookahead>=3;){s=i.strstart,n=i.lookahead-2;do{i.ins_h=(i.ins_h<{"use strict";t.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},"./node_modules/pako/lib/zlib/inffast.js":t=>{"use strict";t.exports=function(t,e){var i,s,r,n,o,a,h,l,A,c,d,u,g,p,_,f,m,C,y,v,w,I,x,E,B;i=t.state,s=t.next_in,E=t.input,r=s+(t.avail_in-5),n=t.next_out,B=t.output,o=n-(e-t.avail_out),a=n+(t.avail_out-257),h=i.dmax,l=i.wsize,A=i.whave,c=i.wnext,d=i.window,u=i.hold,g=i.bits,p=i.lencode,_=i.distcode,f=(1<>>=y=C>>>24,g-=y,0==(y=C>>>16&255))B[n++]=65535&C;else{if(!(16&y)){if(0==(64&y)){C=p[(65535&C)+(u&(1<>>=y,g-=y),g<15&&(u+=E[s++]<>>=y=C>>>24,g-=y,!(16&(y=C>>>16&255))){if(0==(64&y)){C=_[(65535&C)+(u&(1<h){t.msg="invalid distance too far back",i.mode=30;break t}if(u>>>=y,g-=y,w>(y=n-o)){if((y=w-y)>A&&i.sane){t.msg="invalid distance too far back",i.mode=30;break t}if(I=0,x=d,0===c){if(I+=l-y,y2;)B[n++]=x[I++],B[n++]=x[I++],B[n++]=x[I++],v-=3;v&&(B[n++]=x[I++],v>1&&(B[n++]=x[I++]))}else{I=n-w;do{B[n++]=B[I++],B[n++]=B[I++],B[n++]=B[I++],v-=3}while(v>2);v&&(B[n++]=B[I++],v>1&&(B[n++]=B[I++]))}break}}break}}while(s>3,u&=(1<<(g-=v<<3))-1,t.next_in=s,t.next_out=n,t.avail_in=s{"use strict";var s=i("./node_modules/pako/lib/utils/common.js"),r=i("./node_modules/pako/lib/zlib/adler32.js"),n=i("./node_modules/pako/lib/zlib/crc32.js"),o=i("./node_modules/pako/lib/zlib/inffast.js"),a=i("./node_modules/pako/lib/zlib/inftrees.js"),h=-2,l=12,A=30;function c(t){return(t>>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24)}function d(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new s.Buf16(320),this.work=new s.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function u(t){var e;return t&&t.state?(e=t.state,t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=1,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new s.Buf32(852),e.distcode=e.distdyn=new s.Buf32(592),e.sane=1,e.back=-1,0):h}function g(t){var e;return t&&t.state?((e=t.state).wsize=0,e.whave=0,e.wnext=0,u(t)):h}function p(t,e){var i,s;return t&&t.state?(s=t.state,e<0?(i=0,e=-e):(i=1+(e>>4),e<48&&(e&=15)),e&&(e<8||e>15)?h:(null!==s.window&&s.wbits!==e&&(s.window=null),s.wrap=i,s.wbits=e,g(t))):h}function _(t,e){var i,s;return t?(s=new d,t.state=s,s.window=null,0!==(i=p(t,e))&&(t.state=null),i):h}var f,m,C=!0;function y(t){if(C){var e;for(f=new s.Buf32(512),m=new s.Buf32(32),e=0;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(a(1,t.lens,0,288,f,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;a(2,t.lens,0,32,m,0,t.work,{bits:5}),C=!1}t.lencode=f,t.lenbits=9,t.distcode=m,t.distbits=5}function v(t,e,i,r){var n,o=t.state;return null===o.window&&(o.wsize=1<=o.wsize?(s.arraySet(o.window,e,i-o.wsize,o.wsize,0),o.wnext=0,o.whave=o.wsize):((n=o.wsize-o.wnext)>r&&(n=r),s.arraySet(o.window,e,i-r,n,o.wnext),(r-=n)?(s.arraySet(o.window,e,i-r,r,0),o.wnext=r,o.whave=o.wsize):(o.wnext+=n,o.wnext===o.wsize&&(o.wnext=0),o.whave>>8&255,i.check=n(i.check,N,2,0),m=0,C=0,i.mode=2;break}if(i.flags=0,i.head&&(i.head.done=!1),!(1&i.wrap)||(((255&m)<<8)+(m>>8))%31){t.msg="incorrect header check",i.mode=A;break}if(8!=(15&m)){t.msg="unknown compression method",i.mode=A;break}if(C-=4,k=8+(15&(m>>>=4)),0===i.wbits)i.wbits=k;else if(k>i.wbits){t.msg="invalid window size",i.mode=A;break}i.dmax=1<>8&1),512&i.flags&&(N[0]=255&m,N[1]=m>>>8&255,i.check=n(i.check,N,2,0)),m=0,C=0,i.mode=3;case 3:for(;C<32;){if(0===_)break t;_--,m+=d[g++]<>>8&255,N[2]=m>>>16&255,N[3]=m>>>24&255,i.check=n(i.check,N,4,0)),m=0,C=0,i.mode=4;case 4:for(;C<16;){if(0===_)break t;_--,m+=d[g++]<>8),512&i.flags&&(N[0]=255&m,N[1]=m>>>8&255,i.check=n(i.check,N,2,0)),m=0,C=0,i.mode=5;case 5:if(1024&i.flags){for(;C<16;){if(0===_)break t;_--,m+=d[g++]<>>8&255,i.check=n(i.check,N,2,0)),m=0,C=0}else i.head&&(i.head.extra=null);i.mode=6;case 6:if(1024&i.flags&&((x=i.length)>_&&(x=_),x&&(i.head&&(k=i.head.extra_len-i.length,i.head.extra||(i.head.extra=new Array(i.head.extra_len)),s.arraySet(i.head.extra,d,g,x,k)),512&i.flags&&(i.check=n(i.check,d,x,g)),_-=x,g+=x,i.length-=x),i.length))break t;i.length=0,i.mode=7;case 7:if(2048&i.flags){if(0===_)break t;x=0;do{k=d[g+x++],i.head&&k&&i.length<65536&&(i.head.name+=String.fromCharCode(k))}while(k&&x<_);if(512&i.flags&&(i.check=n(i.check,d,x,g)),_-=x,g+=x,k)break t}else i.head&&(i.head.name=null);i.length=0,i.mode=8;case 8:if(4096&i.flags){if(0===_)break t;x=0;do{k=d[g+x++],i.head&&k&&i.length<65536&&(i.head.comment+=String.fromCharCode(k))}while(k&&x<_);if(512&i.flags&&(i.check=n(i.check,d,x,g)),_-=x,g+=x,k)break t}else i.head&&(i.head.comment=null);i.mode=9;case 9:if(512&i.flags){for(;C<16;){if(0===_)break t;_--,m+=d[g++]<>9&1,i.head.done=!0),t.adler=i.check=0,i.mode=l;break;case 10:for(;C<32;){if(0===_)break t;_--,m+=d[g++]<>>=7&C,C-=7&C,i.mode=27;break}for(;C<3;){if(0===_)break t;_--,m+=d[g++]<>>=1)){case 0:i.mode=14;break;case 1:if(y(i),i.mode=20,6===e){m>>>=2,C-=2;break t}break;case 2:i.mode=17;break;case 3:t.msg="invalid block type",i.mode=A}m>>>=2,C-=2;break;case 14:for(m>>>=7&C,C-=7&C;C<32;){if(0===_)break t;_--,m+=d[g++]<>>16^65535)){t.msg="invalid stored block lengths",i.mode=A;break}if(i.length=65535&m,m=0,C=0,i.mode=15,6===e)break t;case 15:i.mode=16;case 16:if(x=i.length){if(x>_&&(x=_),x>f&&(x=f),0===x)break t;s.arraySet(u,d,g,x,p),_-=x,g+=x,f-=x,p+=x,i.length-=x;break}i.mode=l;break;case 17:for(;C<14;){if(0===_)break t;_--,m+=d[g++]<>>=5,C-=5,i.ndist=1+(31&m),m>>>=5,C-=5,i.ncode=4+(15&m),m>>>=4,C-=4,i.nlen>286||i.ndist>30){t.msg="too many length or distance symbols",i.mode=A;break}i.have=0,i.mode=18;case 18:for(;i.have>>=3,C-=3}for(;i.have<19;)i.lens[G[i.have++]]=0;if(i.lencode=i.lendyn,i.lenbits=7,R={bits:i.lenbits},P=a(0,i.lens,0,19,i.lencode,0,i.work,R),i.lenbits=R.bits,P){t.msg="invalid code lengths set",i.mode=A;break}i.have=0,i.mode=19;case 19:for(;i.have>>16&255,S=65535&L,!((b=L>>>24)<=C);){if(0===_)break t;_--,m+=d[g++]<>>=b,C-=b,i.lens[i.have++]=S;else{if(16===S){for(M=b+2;C>>=b,C-=b,0===i.have){t.msg="invalid bit length repeat",i.mode=A;break}k=i.lens[i.have-1],x=3+(3&m),m>>>=2,C-=2}else if(17===S){for(M=b+3;C>>=b)),m>>>=3,C-=3}else{for(M=b+7;C>>=b)),m>>>=7,C-=7}if(i.have+x>i.nlen+i.ndist){t.msg="invalid bit length repeat",i.mode=A;break}for(;x--;)i.lens[i.have++]=k}}if(i.mode===A)break;if(0===i.lens[256]){t.msg="invalid code -- missing end-of-block",i.mode=A;break}if(i.lenbits=9,R={bits:i.lenbits},P=a(1,i.lens,0,i.nlen,i.lencode,0,i.work,R),i.lenbits=R.bits,P){t.msg="invalid literal/lengths set",i.mode=A;break}if(i.distbits=6,i.distcode=i.distdyn,R={bits:i.distbits},P=a(2,i.lens,i.nlen,i.ndist,i.distcode,0,i.work,R),i.distbits=R.bits,P){t.msg="invalid distances set",i.mode=A;break}if(i.mode=20,6===e)break t;case 20:i.mode=21;case 21:if(_>=6&&f>=258){t.next_out=p,t.avail_out=f,t.next_in=g,t.avail_in=_,i.hold=m,i.bits=C,o(t,I),p=t.next_out,u=t.output,f=t.avail_out,g=t.next_in,d=t.input,_=t.avail_in,m=i.hold,C=i.bits,i.mode===l&&(i.back=-1);break}for(i.back=0;Q=(L=i.lencode[m&(1<>>16&255,S=65535&L,!((b=L>>>24)<=C);){if(0===_)break t;_--,m+=d[g++]<>D)])>>>16&255,S=65535&L,!(D+(b=L>>>24)<=C);){if(0===_)break t;_--,m+=d[g++]<>>=D,C-=D,i.back+=D}if(m>>>=b,C-=b,i.back+=b,i.length=S,0===Q){i.mode=26;break}if(32&Q){i.back=-1,i.mode=l;break}if(64&Q){t.msg="invalid literal/length code",i.mode=A;break}i.extra=15&Q,i.mode=22;case 22:if(i.extra){for(M=i.extra;C>>=i.extra,C-=i.extra,i.back+=i.extra}i.was=i.length,i.mode=23;case 23:for(;Q=(L=i.distcode[m&(1<>>16&255,S=65535&L,!((b=L>>>24)<=C);){if(0===_)break t;_--,m+=d[g++]<>D)])>>>16&255,S=65535&L,!(D+(b=L>>>24)<=C);){if(0===_)break t;_--,m+=d[g++]<>>=D,C-=D,i.back+=D}if(m>>>=b,C-=b,i.back+=b,64&Q){t.msg="invalid distance code",i.mode=A;break}i.offset=S,i.extra=15&Q,i.mode=24;case 24:if(i.extra){for(M=i.extra;C>>=i.extra,C-=i.extra,i.back+=i.extra}if(i.offset>i.dmax){t.msg="invalid distance too far back",i.mode=A;break}i.mode=25;case 25:if(0===f)break t;if(x=I-f,i.offset>x){if((x=i.offset-x)>i.whave&&i.sane){t.msg="invalid distance too far back",i.mode=A;break}x>i.wnext?(x-=i.wnext,E=i.wsize-x):E=i.wnext-x,x>i.length&&(x=i.length),B=i.window}else B=u,E=p-i.offset,x=i.length;x>f&&(x=f),f-=x,i.length-=x;do{u[p++]=B[E++]}while(--x);0===i.length&&(i.mode=21);break;case 26:if(0===f)break t;u[p++]=i.length,f--,i.mode=21;break;case 27:if(i.wrap){for(;C<32;){if(0===_)break t;_--,m|=d[g++]<{"use strict";var s=i("./node_modules/pako/lib/utils/common.js"),r=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],n=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],o=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],a=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];t.exports=function(t,e,i,h,l,A,c,d){var u,g,p,_,f,m,C,y,v,w=d.bits,I=0,x=0,E=0,B=0,b=0,Q=0,S=0,D=0,T=0,F=0,k=null,P=0,R=new s.Buf16(16),M=new s.Buf16(16),L=null,N=0;for(I=0;I<=15;I++)R[I]=0;for(x=0;x=1&&0===R[B];B--);if(b>B&&(b=B),0===B)return l[A++]=20971520,l[A++]=20971520,d.bits=1,0;for(E=1;E0&&(0===t||1!==B))return-1;for(M[1]=0,I=1;I<15;I++)M[I+1]=M[I]+R[I];for(x=0;x852||2===t&&T>592)return 1;for(;;){C=I-S,c[x]m?(y=L[N+c[x]],v=k[P+c[x]]):(y=96,v=0),u=1<>S)+(g-=u)]=C<<24|y<<16|v|0}while(0!==g);for(u=1<>=1;if(0!==u?(F&=u-1,F+=u):F=0,x++,0==--R[I]){if(I===B)break;I=e[i+c[x]]}if(I>b&&(F&_)!==p){for(0===S&&(S=b),f+=E,D=1<<(Q=I-S);Q+S852||2===t&&T>592)return 1;l[p=F&_]=b<<24|Q<<16|f-A|0}}return 0!==F&&(l[f+F]=I-S<<24|64<<16|0),d.bits=b,0}},"./node_modules/pako/lib/zlib/messages.js":t=>{"use strict";t.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},"./node_modules/pako/lib/zlib/trees.js":(t,e,i)=>{"use strict";var s=i("./node_modules/pako/lib/utils/common.js");function r(t){for(var e=t.length;--e>=0;)t[e]=0}var n=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],o=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],a=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],h=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],l=new Array(576);r(l);var A=new Array(60);r(A);var c=new Array(512);r(c);var d=new Array(256);r(d);var u=new Array(29);r(u);var g,p,_,f=new Array(30);function m(t,e,i,s,r){this.static_tree=t,this.extra_bits=e,this.extra_base=i,this.elems=s,this.max_length=r,this.has_stree=t&&t.length}function C(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}function y(t){return t<256?c[t]:c[256+(t>>>7)]}function v(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255}function w(t,e,i){t.bi_valid>16-i?(t.bi_buf|=e<>16-t.bi_valid,t.bi_valid+=i-16):(t.bi_buf|=e<>>=1,i<<=1}while(--e>0);return i>>>1}function E(t,e,i){var s,r,n=new Array(16),o=0;for(s=1;s<=15;s++)n[s]=o=o+i[s-1]<<1;for(r=0;r<=e;r++){var a=t[2*r+1];0!==a&&(t[2*r]=x(n[a]++,a))}}function B(t){var e;for(e=0;e<286;e++)t.dyn_ltree[2*e]=0;for(e=0;e<30;e++)t.dyn_dtree[2*e]=0;for(e=0;e<19;e++)t.bl_tree[2*e]=0;t.dyn_ltree[512]=1,t.opt_len=t.static_len=0,t.last_lit=t.matches=0}function b(t){t.bi_valid>8?v(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0}function Q(t,e,i,s){var r=2*e,n=2*i;return t[r]>1;i>=1;i--)S(t,n,i);r=h;do{i=t.heap[1],t.heap[1]=t.heap[t.heap_len--],S(t,n,1),s=t.heap[1],t.heap[--t.heap_max]=i,t.heap[--t.heap_max]=s,n[2*r]=n[2*i]+n[2*s],t.depth[r]=(t.depth[i]>=t.depth[s]?t.depth[i]:t.depth[s])+1,n[2*i+1]=n[2*s+1]=r,t.heap[1]=r++,S(t,n,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],function(t,e){var i,s,r,n,o,a,h=e.dyn_tree,l=e.max_code,A=e.stat_desc.static_tree,c=e.stat_desc.has_stree,d=e.stat_desc.extra_bits,u=e.stat_desc.extra_base,g=e.stat_desc.max_length,p=0;for(n=0;n<=15;n++)t.bl_count[n]=0;for(h[2*t.heap[t.heap_max]+1]=0,i=t.heap_max+1;i<573;i++)(n=h[2*h[2*(s=t.heap[i])+1]+1]+1)>g&&(n=g,p++),h[2*s+1]=n,s>l||(t.bl_count[n]++,o=0,s>=u&&(o=d[s-u]),a=h[2*s],t.opt_len+=a*(n+o),c&&(t.static_len+=a*(A[2*s+1]+o)));if(0!==p){do{for(n=g-1;0===t.bl_count[n];)n--;t.bl_count[n]--,t.bl_count[n+1]+=2,t.bl_count[g]--,p-=2}while(p>0);for(n=g;0!==n;n--)for(s=t.bl_count[n];0!==s;)(r=t.heap[--i])>l||(h[2*r+1]!==n&&(t.opt_len+=(n-h[2*r+1])*h[2*r],h[2*r+1]=n),s--)}}(t,e),E(n,l,t.bl_count)}function F(t,e,i){var s,r,n=-1,o=e[1],a=0,h=7,l=4;for(0===o&&(h=138,l=3),e[2*(i+1)+1]=65535,s=0;s<=i;s++)r=o,o=e[2*(s+1)+1],++a>=7;s<30;s++)for(f[s]=r<<7,t=0;t<1<0?(2===t.strm.data_type&&(t.strm.data_type=function(t){var e,i=4093624447;for(e=0;e<=31;e++,i>>>=1)if(1&i&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e<256;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0}(t)),T(t,t.l_desc),T(t,t.d_desc),o=function(t){var e;for(F(t,t.dyn_ltree,t.l_desc.max_code),F(t,t.dyn_dtree,t.d_desc.max_code),T(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*h[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e}(t),r=t.opt_len+3+7>>>3,(n=t.static_len+3+7>>>3)<=r&&(r=n)):r=n=i+5,i+4<=r&&-1!==e?R(t,e,i,s):4===t.strategy||n===r?(w(t,2+(s?1:0),3),D(t,l,A)):(w(t,4+(s?1:0),3),function(t,e,i,s){var r;for(w(t,e-257,5),w(t,i-1,5),w(t,s-4,4),r=0;r>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&i,t.last_lit++,0===e?t.dyn_ltree[2*i]++:(t.matches++,e--,t.dyn_ltree[2*(d[i]+256+1)]++,t.dyn_dtree[2*y(e)]++),t.last_lit===t.lit_bufsize-1},e._tr_align=function(t){w(t,2,3),I(t,256,l),function(t){16===t.bi_valid?(v(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}(t)}},"./node_modules/pako/lib/zlib/zstream.js":t=>{"use strict";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},"./node_modules/strnum/strnum.js":t=>{const e=/^[-+]?0x[a-fA-F0-9]+$/,i=/^([\-\+])?(0*)(\.[0-9]+([eE]\-?[0-9]+)?|[0-9]+(\.[0-9]+([eE]\-?[0-9]+)?)?)$/,s={hex:!0,leadingZeros:!0,decimalPoint:"."};t.exports=function(t,r={}){if(r=Object.assign({},s,r),!t||"string"!=typeof t)return t;let n=t.trim();if(void 0!==r.skipLike&&r.skipLike.test(n))return t;if(r.hex&&e.test(n))return Number.parseInt(n,16);{const e=i.exec(n);if(e){e[1];const i=e[2],s=e[3];return e[4]||e[6],1===i.length&&"."===s[0]?Number(t):!r.leadingZeros&&i.length>0?t:Number(n)}return t}}},"./src/index.ts":(t,e,i)=>{"use strict";i.r(e),i.d(e,{FLIPPED_DIAGONALLY_FLAG:()=>o.FLIPPED_DIAGONALLY_FLAG,FLIPPED_HORIZONTALLY_FLAG:()=>o.FLIPPED_HORIZONTALLY_FLAG,FLIPPED_VERTICALLY_FLAG:()=>o.FLIPPED_VERTICALLY_FLAG,TiledEntity:()=>n.TiledEntity,TiledLayer:()=>o.TiledLayer,TiledLayerComponent:()=>A.TiledLayerComponent,TiledMap:()=>r.TiledMap,TiledMapFormat:()=>s.TiledMapFormat,TiledMapResource:()=>s.TiledMapResource,TiledObject:()=>a.TiledObject,TiledObjectComponent:()=>l.TiledObjectComponent,TiledObjectGroup:()=>a.TiledObjectGroup,TiledTileset:()=>h.TiledTileset,TiledTilesetTile:()=>h.TiledTilesetTile,getCanonicalGid:()=>o.getCanonicalGid,getProperty:()=>n.getProperty,isFlippedDiagonally:()=>o.isFlippedDiagonally,isFlippedHorizontally:()=>o.isFlippedHorizontally,isFlippedVertically:()=>o.isFlippedVertically,parseExternalJson:()=>h.parseExternalJson,parseExternalTsx:()=>h.parseExternalTsx}),i("./src/tiled-types.ts");var s=i("./src/tiled-map-resource.ts"),r=i("./src/tiled-map-parser.ts"),n=i("./src/tiled-entity.ts"),o=i("./src/tiled-layer.ts"),a=i("./src/tiled-object.ts"),h=i("./src/tiled-tileset.ts"),l=i("./src/tiled-object-component.ts"),A=i("./src/tiled-layer-component.ts");i("./src/raw-tiled-layer.ts"),i("./src/raw-tiled-map.ts"),i("./src/raw-tiled-object.ts"),i("./src/raw-tiled-text.ts"),i("./src/raw-tiled-tileset.ts"),i("./src/raw-tileset-tile.ts")},"./src/raw-tiled-layer.ts":(t,e,i)=>{"use strict";i.r(e)},"./src/raw-tiled-map.ts":(t,e,i)=>{"use strict";i.r(e)},"./src/raw-tiled-object.ts":(t,e,i)=>{"use strict";i.r(e)},"./src/raw-tiled-text.ts":(t,e,i)=>{"use strict";i.r(e)},"./src/raw-tiled-tileset.ts":(t,e,i)=>{"use strict";i.r(e)},"./src/raw-tileset-tile.ts":(t,e,i)=>{"use strict";i.r(e)},"./src/tiled-entity.ts":(t,e,i)=>{"use strict";i.r(e),i.d(e,{TiledEntity:()=>r,getProperty:()=>s});const s=(t,e)=>{if(Array.isArray(t))return null==t?void 0:t.filter((t=>{var i;return(null===(i=t.name)||void 0===i?void 0:i.toLocaleLowerCase())===e.toLocaleLowerCase()}))[0]};class r{constructor(){this.properties=[]}getProperty(t){return s(this.properties,t)}}},"./src/tiled-layer-component.ts":(t,e,i)=>{"use strict";i.r(e),i.d(e,{TiledLayerComponent:()=>r});var s=i("excalibur");class r extends s.Component{constructor(t){super(),this.layer=t,this.type="ex.tiledlayer"}}},"./src/tiled-layer.ts":(t,e,i)=>{"use strict";i.r(e),i.d(e,{FLIPPED_DIAGONALLY_FLAG:()=>a,FLIPPED_HORIZONTALLY_FLAG:()=>n,FLIPPED_VERTICALLY_FLAG:()=>o,TiledLayer:()=>d,getCanonicalGid:()=>c,isFlippedDiagonally:()=>A,isFlippedHorizontally:()=>h,isFlippedVertically:()=>l});var s=i("./src/tiled-entity.ts"),r=i("excalibur");const n=2147483648,o=1073741824,a=536870912,h=t=>!!(t&n),l=t=>!!(t&o),A=t=>!!(t&a),c=t=>t&~(n|o|a);class d extends s.TiledEntity{constructor(){super(...arguments),this.offset=r.Vector.Zero,this.parallaxFactor=null,this.encoding="csv"}static parse(t){var e,i,s,n,o,a;if("tilelayer"!==t.type)throw Error("Cannot parse a non tilelayer type layer");const h=new d;return h.id=+t.id,h.name=t.name,h.data=t.data,h.offset=(0,r.vec)(null!==(e=t.offsetx)&&void 0!==e?e:0,null!==(i=t.offsety)&&void 0!==i?i:0),h.parallaxFactor=t.parallaxx||t.parallaxy?(0,r.vec)(null!==(s=t.parallaxx)&&void 0!==s?s:1,null!==(n=t.parallaxy)&&void 0!==n?n:1):null,h.width=t.width,h.height=t.height,h.encoding=null!==(o=t.encoding)&&void 0!==o?o:"csv",h.compression=t.compression,h.order=t.order,h.properties=null!==(a=t.properties)&&void 0!==a?a:[],h.rawLayer=t,h}}},"./src/tiled-map-parser.ts":(t,e,i)=>{"use strict";i.r(e),i.d(e,{TiledMap:()=>A});var s=i("./node_modules/fast-xml-parser/src/parser.js"),r=i("./node_modules/pako/index.js"),n=i("./node_modules/zstddec/dist/zstddec.modern.js"),o=i("./src/tiled-layer.ts"),a=i("./src/tiled-object.ts"),h=i("./src/tiled-tileset.ts"),l=function(t,e,i,s){return new(i||(i=Promise))((function(r,n){function o(t){try{h(s.next(t))}catch(t){n(t)}}function a(t){try{h(s.throw(t))}catch(t){n(t)}}function h(t){var e;t.done?r(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,a)}h((s=s.apply(t,e||[])).next())}))};class A{constructor(){this.layers=[],this.tileSets=[],this.objectGroups=[]}getExcaliburObjects(){return this.getObjectLayerByProperty("excalibur",!0)}getObjects(){var t;return null!==(t=this.objectGroups.filter((t=>{var e;return!(null===(e=t.getProperty("excalibur-exclude"))||void 0===e?void 0:e.value)})))&&void 0!==t?t:[]}getObjectLayerByName(t){return this.objectGroups.filter((e=>e.name===t))[0]}getObjectLayerByProperty(t,e){return this.objectGroups.filter((i=>{var s;return(null===(s=i.getProperty(t))||void 0===s?void 0:s.value)===e}))}getTileLayerByName(t){return this.layers.filter((e=>e.name===t))[0]}getTileLayersByProperty(t,e){return this.layers.filter((i=>{var s;return(null===(s=i.getProperty(t))||void 0===s?void 0:s.value)===e}))}static fromTmx(t){var e,i,r,n,o,a,h,c,d,u,g,p,_,f,m,C;return l(this,void 0,void 0,(function*(){const l=(t,e,i=!1)=>{t[e]?(t[e+(i?"s":"")]=Array.isArray(t[e])?t[e]:[t[e]],i&&delete t[e]):t[e+(i?"s":"")]=[]},y=s.parse(t,{attributeNamePrefix:"",textNodeName:"#text",ignoreAttributes:!1,ignoreNameSpace:!1,allowBooleanAttributes:!0,parseNodeValue:!0,parseAttributeValue:!0,trimValues:!0,parseTrueNumberOnly:!1,arrayMode:!1,stopNodes:["parse-me-as-string"]}).map;l(y,"layer",!0);for(let t of y.layers)t.type=null!==(e=t.type)&&void 0!==e?e:"tilelayer",t.encoding=t.data.encoding,t.compression=t.data.compression,"csv"===t.encoding?t.data=t.data["#text"].split(",").map((t=>+t)):t.data=t.data["#text"],t.properties=null!==(r=null===(i=t.properties)||void 0===i?void 0:i.property)&&void 0!==r?r:[],l(t,"properties");y.objectgroup=null!==(n=y.objectgroup)&&void 0!==n?n:[];let v=Array.isArray(y.objectgroup)?y.objectgroup:[y.objectgroup];for(let t of v)if(t.type=null!==(o=t.type)&&void 0!==o?o:"objectgroup",t.properties=null!==(h=null===(a=t.properties)||void 0===a?void 0:a.property)&&void 0!==h?h:[],l(t,"properties"),t.object){t.objects=Array.isArray(t.object)?t.object:[t.object],t.objects.forEach((t=>{var e,i;return t.properties=null!==(i=null===(e=t.properties)||void 0===e?void 0:e.property)&&void 0!==i?i:[]})),t.objects.forEach((t=>l(t,"properties"))),delete t.object;for(let e of t.objects)e.text&&(e.text.text=e.text["#text"],e.text.halign=null!==(c=e.text.halign)&&void 0!==c?c:"left",e.text.valign=null!==(d=e.text.valign)&&void 0!==d?d:"top",e.text.fontfamily=null!==(u=e.text.fontfamily)&&void 0!==u?u:"sans-serif",e.text.pixelsize=+(null!==(g=e.text.pixelsize)&&void 0!==g?g:16),e.text.kerning=!!e.text.kerning,e.text.italic=!!e.text.italic,e.text.bold=!!e.text.bold,e.text.underline=!!e.text.underline,e.text.strikeout=!!e.text.strikeout,e.text.color=null!==(p=e.text.color)&&void 0!==p?p:"#000000"),""===e.point&&(e.point=!0),""===e.ellipse&&(e.ellipse=!0),e.polyline&&(e.polyline=e.polyline.points.split(" ").map((t=>{const e=t.split(",");return{x:+e[0],y:+e[1]}}))),e.polygon&&(e.polygon=e.polygon.points.split(" ").map((t=>{const e=t.split(",");return{x:+e[0],y:+e[1]}})));y.layers.push(t)}delete y.objectgroup,l(y,"imagelayer",!0);for(let t of y.imagelayers)t.type=null!==(_=t.type)&&void 0!==_?_:"imagelayer",t.image=t.image.source,t.properties=null!==(m=null===(f=t.properties)||void 0===f?void 0:f.property)&&void 0!==m?m:[],l(t,"properties"),y.layers.push(t);delete y.imagelayer,l(y,"tileset",!0);for(let t of y.tilesets)t.source||(t.image&&(t.imagewidth=t.image.width,t.imageheight=t.image.height,t.image=t.image.source),t.objectalignment=null!==(C=t.objectalignment)&&void 0!==C?C:"unspecified",l(t,"tile",!0),t.tiles.forEach((t=>{var e;(null===(e=t.image)||void 0===e?void 0:e.source)&&(t.image=t.image.source),t.objectgroup&&(t.objectgroup.type="objectgroup",l(t.objectgroup,"object",!0))})));return yield A._fromRawTiledMap(y)}))}static fromJson(t){return l(this,void 0,void 0,(function*(){return yield A._fromRawTiledMap(t)}))}static _fromRawTiledMap(t){return l(this,void 0,void 0,(function*(){yield A._decompresslayers(t);const e=new A;e.orientation=t.orientation,e.rawMap=t,e.width=+t.width,e.height=+t.height,e.tileWidth=+t.tilewidth,e.tileHeight=+t.tileheight,c(t);for(let i of t.layers)"tilelayer"==i.type&&e.layers.push(o.TiledLayer.parse(i)),"objectgroup"==i.type&&e.objectGroups.push(a.TiledObjectGroup.parse(i));for(let i of t.tilesets)i.source||e.tileSets.push(h.TiledTileset.parse(i));return e}))}static _decompresslayers(t){var e;return l(this,void 0,void 0,(function*(){if(t.layers)for(var i of t.layers)"string"==typeof i.data?"base64"===i.encoding&&(i.data=yield d.decompressBase64(i.data,i.encoding,null!==(e=i.compression)&&void 0!==e?e:"")):i.data=d.decompressCsv(i.data);return t}))}}const c=t=>{let e=0;for(let i of t.layers)i.order=e++},d={decompressCsv:t=>t,decompressBase64:(t,e,i)=>{var s,o,a,h,l,A;if(t.length%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var c="+".charCodeAt(0),d="/".charCodeAt(0),u="0".charCodeAt(0),g="a".charCodeAt(0),p="A".charCodeAt(0),_="-".charCodeAt(0),f="_".charCodeAt(0);function m(t){var e=t.charCodeAt(0);if(e===c||e===_)return 62;if(e===d||e===f)return 63;if(e0?t.length-4:t.length;var y=0;function v(t){A[y++]=t}for(s=0,o=0;s>16),v((65280&h)>>8),v(255&h);return 2===l?v(255&(h=m(t.charAt(s))<<2|m(t.charAt(s+1))>>4)):1===l&&(v((h=m(t.charAt(s))<<10|m(t.charAt(s+1))<<4|m(t.charAt(s+2))>>2)>>8&255),v(255&h)),new Promise((t=>{const e=function(t){for(var e=0,i=t.length-1;i>=0;i--)e=256*e+1*t[i];return e};if("zlib"===i||"gzip"===i){var o=(A=(0,r.inflate)(A)).length/4,a=new Array(o);for(s=0;s{var r=(A=i.decode(A)).length/4,n=new Array(r);for(s=0;s{"use strict";i.r(e),i.d(e,{TiledMapFormat:()=>s,TiledMapResource:()=>d});var s,r=i("excalibur"),n=i("./src/tiled-map-parser.ts"),o=i("./src/tiled-tileset.ts"),a=i("./src/tiled-layer.ts"),h=i("./src/tiled-entity.ts"),l=i("./src/tiled-object-component.ts"),A=i("./src/tiled-layer-component.ts"),c=function(t,e,i,s){return new(i||(i=Promise))((function(r,n){function o(t){try{h(s.next(t))}catch(t){n(t)}}function a(t){try{h(s.throw(t))}catch(t){n(t)}}function h(t){var e;t.done?r(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,a)}h((s=s.apply(t,e||[])).next())}))};!function(t){t.TMX="TMX",t.JSON="JSON"}(s||(s={}));class d{constructor(t,e){this.path=t,this.layers=[],this.isoLayers=[],this._layerZIndexStart=-1,this._mapToRawLayer=new Map;const{mapFormatOverride:i,startingLayerZIndex:n}=Object.assign({},e);this._layerZIndexStart=null!=n?n:this._layerZIndexStart;const o=null!=i?i:t.includes(".tmx")?s.TMX:s.JSON;switch(o){case s.TMX:this._resource=new r.Resource(t,"text");break;case s.JSON:this._resource=new r.Resource(t,"json");break;default:throw`The format ${o} is not currently supported. Please export Tiled map as JSON.`}this.mapFormat=o,this.ex={},this.imageMap={},this.sheetMap={},this.tileImageMap={},this.convertPath=(t,e)=>{if(0===e.indexOf("/"))return e;const i=t.split("/"),s=e.split("/");return i[i.length-1].includes(".")&&i.pop(),i.concat(s).join("/")}}_addTiledCamera(t){const e=this.ex.camera;if(e){let i=(0,r.vec)(e.x,e.y);this.isIsometric()&&(i=this._isoTileToScreenCoords(e.x,e.y)),t.camera.x=i.x,t.camera.y=i.y,t.camera.zoom=e.zoom}}_addTiledColliders(t){var e;const i=this.ex.colliders;if(i)for(let s of i){const i=new r.Actor({pos:(0,r.vec)(s.x,s.y),name:s.name,collisionType:null!==(e=s.collisionType)&&void 0!==e?e:r.CollisionType.Fixed});if(s.color&&(i.color=r.Color.fromHex(s.color.value)),"box"===s.type)if(this.isIsometric()){i.pos=this._isoTileToScreenCoords(s.x,s.y);const t=new r.BoundingBox({left:0,top:0,right:s.width,bottom:s.height}).getPoints().map((t=>this._isoTileToScreenCoords(t.x,t.y)));i.collider.usePolygonCollider(t,r.Vector.Zero)}else i.collider.useBoxCollider(s.width,s.height,r.Vector.Zero);"circle"===s.type&&i.collider.useCircleCollider(s.radius),i.addComponent(new l.TiledObjectComponent(s.tiled)),t.add(i),s.zIndex&&(i.z=s.zIndex)}}_isoTileToScreenCoords(t,e){if(this.isIsometric()){const i=this.isoLayers[0],s=i.tileWidth,n=i.tileHeight,o=0,a=e/n,h=t/n;return(0,r.vec)((h-a)*s/2+o,(h+a)*n/2)}return(0,r.vec)(t,e)}_addTiledText(t){var e,i,s,n,o,a,h,A,c,d,u,g;const p=null===(e=this.data)||void 0===e?void 0:e.getObjects();if(p&&p.length>0)for(const e of p){const p=e.getText();for(const _ of p){let p=(0,r.vec)(_.x,_.y+((null!==(i=_.height)&&void 0!==i?i:0)-(null!==(n=null===(s=_.text)||void 0===s?void 0:s.pixelSize)&&void 0!==n?n:0)));this.isIsometric()&&(p=this._isoTileToScreenCoords(_.x,_.y));const f=new r.Label({anchor:r.Vector.Zero,x:p.x,y:p.y,text:null!==(a=null===(o=_.text)||void 0===o?void 0:o.text)&&void 0!==a?a:"",name:this._getEntityName(_),font:new r.Font({family:null===(h=_.text)||void 0===h?void 0:h.fontFamily,size:null===(A=_.text)||void 0===A?void 0:A.pixelSize,unit:r.FontUnit.Px})});if(f.font.textAlign=r.TextAlign.Left,f.font.baseAlign=r.BaseAlign.Top,f.rotation=_.rotation,f.color=r.Color.fromHex(null!==(d=null===(c=_.text)||void 0===c?void 0:c.color)&&void 0!==d?d:"#000000"),f.collider.set(r.Shape.Box(null!==(u=_.width)&&void 0!==u?u:0,null!==(g=_.height)&&void 0!==g?g:0)),f.body.collisionType=r.CollisionType.PreventCollision,f.addComponent(new l.TiledObjectComponent(_)),f.z=this._calculateZIndex(_,e),this.isIsometric()){const t=new r.IsometricEntityComponent(this.isoLayers[0]);f.addComponent(t),t.elevation=e.order}t.add(f)}}}_addTiledInsertedTiles(t){var e,i,s;const n=null===(e=this.data)||void 0===e?void 0:e.getObjects();if(n&&n.length>0)for(const e of n){const n=e.getInsertedTiles();for(const o of n){const n=o.getProperty("collisionType");let a=r.CollisionType.PreventCollision;n&&(a=n.value);let h=(0,r.vec)(o.x,o.y);if(this.isIsometric()&&(h=this._isoTileToScreenCoords(o.x,o.y)),o.gid){const n=this.getSpriteForGid(o.gid),A=this.getCollidersForGid(o.gid),c=new r.Actor({x:h.x,y:h.y,width:o.width,height:o.height,anchor:this.isIsometric()?(0,r.vec)(.5,1):(0,r.vec)(0,1),rotation:o.rotation,collisionType:a,name:this._getEntityName(o)});if(this.isIsometric()){const t=this.isoLayers[0];for(let e of A)e.offset=(0,r.vec)(-t.tileWidth/2,2*-t.tileHeight)}if(A.length&&(c.collider.clear(),c.collider.set(new r.CompositeCollider(A))),c.addComponent(new l.TiledObjectComponent(o)),c.graphics.anchor=this.isIsometric()?(0,r.vec)(.5,1):(0,r.vec)(0,1),n.destSize.width=null!==(i=o.width)&&void 0!==i?i:n.destSize.width,n.destSize.height=null!==(s=o.height)&&void 0!==s?s:n.destSize.height,c.graphics.use(n),this.isIsometric()){const t=new r.IsometricEntityComponent(this.isoLayers[0]);c.addComponent(t),t.elevation=e.order}t.add(c),c.z=this._calculateZIndex(o,e)}}}}useSolidLayers(){var t,e,i;let s=this.getTileMapLayers();s=s.concat(this.isoLayers);for(const r of s){const s=this._mapToRawLayer.get(r);if(s&&null!==(e=null===(t=(0,h.getProperty)(s.properties,"solid"))||void 0===t?void 0:t.value)&&void 0!==e&&e)for(let t=0;t0){d.camera=null===(e=c.find((t=>t.getObjectByClass("camera"))))||void 0===e?void 0:e.getCamera(),d.colliders=[];for(let t of c){const e=t.getObjectsByClass("boxcollider");for(let o of e){const e=o.getProperty("collisiontype"),a=o.getProperty("color"),h=this._calculateZIndex(o,t);d.colliders.push(Object.assign(Object.assign({},o),{width:+(null!==(i=o.width)&&void 0!==i?i:0),height:+(null!==(s=o.height)&&void 0!==s?s:0),collisionType:null!==(n=null==e?void 0:e.value)&&void 0!==n?n:r.CollisionType.Fixed,color:a,zIndex:h,radius:0,type:"box",tiled:o,name:this._getEntityName(o)}))}const c=t.getObjectsByClass("circlecollider");for(let e of c){const i=e.getProperty("collisiontype"),s=e.getProperty("color"),n=this._calculateZIndex(e,t);d.colliders.push({x:e.x,y:e.y,radius:Math.max(null!==(o=e.width)&&void 0!==o?o:0,null!==(a=e.height)&&void 0!==a?a:0),collisionType:null!==(h=null==i?void 0:i.value)&&void 0!==h?h:r.CollisionType.Fixed,color:s,zIndex:n,width:null!==(l=e.width)&&void 0!==l?l:0,height:null!==(A=e.height)&&void 0!==A?A:0,type:"circle",tiled:e,name:this._getEntityName(e)})}}}this.ex=d}isLoaded(){return!!this.data}isIsometric(){return!!this.isoLayers.length}load(){return c(this,void 0,void 0,(function*(){const t=yield this._resource.load(),e=yield this._importMapData(t);let i=[];return e.rawMap.tilesets.forEach((t=>{if(t.source){const n=t.source.includes(".tsx")?"text":"json";var s=new r.Resource(this.convertPath(this.path,t.source),n);i.push(s.load().then((i=>{i="text"===n?(0,o.parseExternalTsx)(i,t.firstgid,t.source):(0,o.parseExternalJson)(i,t.firstgid,t.source),Object.assign(t,i),e.tileSets.push(i)}),(()=>{r.Logger.getInstance().error(`[Tiled] Error loading external tileset file ${s.path}`)})))}})),yield Promise.all(i).then((()=>{let t=[];return e.rawMap.tilesets.forEach((e=>{let i=[];if(e.image){i=e.source?[this.convertPath(e.source,e.image)]:[this.convertPath(this.path,e.image)];for(let s of i){const i=new r.ImageSource(s);this.imageMap[e.firstgid]=i,t.push(i.load()),r.Logger.getInstance().debug("[Tiled] Loading associated tileset image: "+e.image)}}else for(let i of e.tiles){let s;s=e.source?this.convertPath(e.source,i.image):this.convertPath(this.path,i.image);const n=new r.ImageSource(s);t.push(n.load()),this.tileImageMap[e.firstgid]||(this.tileImageMap[e.firstgid]=[]),this.tileImageMap[e.firstgid].push([i,n]),r.Logger.getInstance().debug("[Tiled] Loading associated tileset image: "+s)}})),Promise.all(t).then((()=>{this._createTileMap()}),(()=>{r.Logger.getInstance().error("[Tiled] Error loading tileset images")}))})),this._parseExcaliburInfo(),e}))}_importMapData(t){return c(this,void 0,void 0,(function*(){if(void 0===t)throw`Tiled map resource ${this.path} is empty`;switch(this.mapFormat){case s.TMX:return this.data=yield n.TiledMap.fromTmx(t);case s.JSON:return this.data=yield n.TiledMap.fromJson(t);default:throw new Error("Unknown map format: "+this.mapFormat)}}))}getTilesetForTile(t){if(this.data)for(var e=this.data.tileSets.length-1;e>=0;e--){var i=this.data.tileSets[e];if(t>=i.firstGid&&t<=i.firstGid+i.tileCount-1)return i}throw Error(`No tileset exists for tiled gid [${t}]!`)}getSpriteForGid(t){const e=(0,a.isFlippedHorizontally)(t),i=(0,a.isFlippedVertically)(t),s=(0,a.isFlippedDiagonally)(t),n=(0,a.getCanonicalGid)(t),o=this.getTilesetForTile(n),h=n-o.firstGid,l=this.sheetMap[o.firstGid.toString()];if(l){let t=l.sprites[h];return(s||e||i)&&(t=t.clone()),s&&(t.rotation=-Math.PI/2,t.scale=(0,r.vec)(-1,1)),e&&(t.scale=(0,r.vec)((s?1:-1)*t.scale.x,(s?-1:1)*t.scale.y)),i&&(t.scale=(0,r.vec)((s?-1:1)*t.scale.x,(s?1:-1)*t.scale.y)),t}throw new Error(`Could not find sprite for gid: [${t}] normalized gid: [${n}]`)}_transformPoints(t,e,i){const s=(0,a.isFlippedHorizontally)(i),r=(0,a.isFlippedVertically)(i);return(0,a.isFlippedDiagonally)(i)&&(t=t.map((t=>e.diagonalFlipTransform.multiply(t)))),s&&(t=t.map((t=>e.horizontalFlipTransform.multiply(t)))),r&&(t=t.map((t=>e.verticalFlipTransform.multiply(t)))),t}getCollidersForGid(t){const e=(0,a.getCanonicalGid)(t),i=this.getTilesetForTile(e),s=e-i.firstGid,n=i.tiles.find((t=>t.id===s));if(n&&n.objectgroup){const e=[];for(const s of n.objectgroup.getPolygons()){const n=(0,r.vec)(s.x,s.y),o=s.polygon.points.split(" ").map((t=>{const e=t.split(",");return(0,r.vec)(Number.parseFloat(e[0]),Number.parseFloat(e[1])).add(n)})),a=r.Shape.Polygon(o);a.points=this._transformPoints(a.points,i,t),e.push(a)}for(const s of n.objectgroup.getBoxes()){const n=r.Shape.Box(s.width,s.height,r.Vector.Zero);n.points=n.points.map((t=>t.add((0,r.vec)(s.x,s.y)))),n.points=this._transformPoints(n.points,i,t),e.push(n)}for(const t of n.objectgroup.getEllipses()){const i=r.Shape.Circle(Math.min(t.width/2,t.height/2),(0,r.vec)(t.width/2,t.height/2).add((0,r.vec)(t.x,t.y)));e.push(i)}return e}return[]}getAnimationForGid(t){const e=(0,a.getCanonicalGid)(t),i=this.getTilesetForTile(e),s=e-i.firstGid,r=i.tiles.find((t=>t.id===s));return r&&r.hasAnimation()?r.getAnimation(this):null}_calculateZIndex(t,e){var i,s,r;let n=null!==(s=null===(i=t.getProperty("z"))||void 0===i?void 0:i.value)&&void 0!==s?s:null===(r=t.getProperty("zindex"))||void 0===r?void 0:r.value;return null!=n||(n=e.order+this._layerZIndexStart),+n}_getEntityName(t){return t.name}_createTileMap(){var t,e,i,s,n,o,a,h,l;for(const o of this.data.rawMap.tilesets){const a=null!==(t=o.spacing)&&void 0!==t?t:0,h=Math.floor((o.imagewidth+a)/(o.tilewidth+a)),l=Math.floor((o.imageheight+a)/(o.tileheight+a));if(this.imageMap[o.firstgid]){const t=r.SpriteSheet.fromImageSource({image:this.imageMap[o.firstgid],grid:{columns:h,rows:l,spriteWidth:o.tilewidth,spriteHeight:o.tileheight},spacing:{originOffset:{x:null!==(e=o.margin)&&void 0!==e?e:0,y:null!==(i=o.margin)&&void 0!==i?i:0},margin:{x:null!==(s=o.spacing)&&void 0!==s?s:0,y:null!==(n=o.spacing)&&void 0!==n?n:0}}});this.sheetMap[o.firstgid.toString()]=t}else{const t=this.tileImageMap[o.firstgid].map((([t,e])=>e.toSprite())),e=new r.SpriteSheet({sprites:t});this.sheetMap[o.firstgid.toString()]=e}}for(var c of this.data.layers)if("tilelayer"===c.rawLayer.type){if("orthogonal"===this.data.orientation){const t=c.rawLayer,e=new r.TileMap({name:c.rawLayer.name,pos:(0,r.vec)(c.offset.x,c.offset.y),tileWidth:this.data.rawMap.tilewidth,tileHeight:this.data.rawMap.tileheight,columns:this.data.width,rows:this.data.height});if(e.addComponent(new A.TiledLayerComponent(c)),c.rawLayer.parallaxx||c.rawLayer.parallaxy){const t=(0,r.vec)(null!==(o=c.rawLayer.parallaxx)&&void 0!==o?o:1,null!==(a=c.rawLayer.parallaxy)&&void 0!==a?a:1);e.addComponent(new r.ParallaxComponent(t))}e.z=this._calculateZIndex(c,c);for(let i=0;it.id===n-1))||{id:n-1,tileset:o,properties:{}}}getTileByPoint(t,e){const i=this.getTileMapLayers().find((e=>e.name===t));if(i){const s=i.getTileByPoint(e);return this._lookupTile(i,s,t)}return null}getTileByCoordinate(t,e,i){const s=this.getTileMapLayers().find((e=>e.name===t));if(s){const r=s.getTile(e,i);return this._lookupTile(s,r,t)}return null}}},"./src/tiled-object-component.ts":(t,e,i)=>{"use strict";i.r(e),i.d(e,{TiledObjectComponent:()=>r});var s=i("excalibur");class r extends s.Component{constructor(t){super(),this.object=t,this.type="ex.tiledobject"}}},"./src/tiled-object.ts":(t,e,i)=>{"use strict";i.r(e),i.d(e,{TiledObject:()=>o,TiledObjectGroup:()=>n});var s=i("./src/tiled-entity.ts"),r=i("excalibur");class n extends s.TiledEntity{constructor(){super(...arguments),this.objects=[]}getCamera(){var t;const e=this.getObjectByClass("camera");if(e){const i=e.getProperty("zoom");return{x:e.x,y:e.y,zoom:i?+(null!==(t=null==i?void 0:i.value)&&void 0!==t?t:1):1}}}getObjectByType(t){return this.getObjectsByType(t)[0]}getObjectByClass(t){return this.getObjectsByClass(t)[0]}getObjectsByType(t){return this.objects.filter((e=>{var i;return(null===(i=e.type)||void 0===i?void 0:i.toLocaleLowerCase())===t.toLocaleLowerCase()}))}getObjectsByClass(t){return this.objects.filter((e=>{var i,s;return(null===(i=e.class)||void 0===i?void 0:i.toLocaleLowerCase())===t.toLocaleLowerCase()||(null===(s=e.type)||void 0===s?void 0:s.toLocaleLowerCase())===t.toLocaleLowerCase()}))}getObjectByName(t){return this.getObjectsByName(t)[0]}getObjectsByName(t){return this.objects.filter((e=>{var i;return(null===(i=e.name)||void 0===i?void 0:i.toString().toLocaleLowerCase())===t.toString().toLocaleLowerCase()}))}getPoints(){return this.objects.filter((t=>!!t.point))}getEllipses(){return this.objects.filter((t=>!!t.ellipse))}getText(){return this.objects.filter((t=>!!t.text))}getPolyLines(){return this.objects.filter((t=>!!t.polyline))}getPolygons(){return this.objects.filter((t=>!!t.polygon))}getBoxes(){return this.objects.filter((t=>!!t.width&&!!t.height&&!t.ellipse))}getInsertedTiles(){return this.objects.filter((t=>!!t.gid))}static parse(t){var e;if("objectgroup"!==t.type)throw Error("Cannot parse non objectgroup type layer");const i=new n;i.id=+t.id,i.name=t.name,i.properties=null!==(e=t.properties)&&void 0!==e?e:[],i.rawObjectGroup=t,i.order=t.order;for(let e of t.objects)i.objects.push(o.parse(e));return i}}class o extends s.TiledEntity{static parse(t){var e,i,s,n;const a=new o;return a.id=+t.id,a.gid=t.gid,a.visible=null===(e=t.visible)||void 0===e||e,a.name=t.name,a.type=t.type,a.class=t.class,a.x=+t.x,a.y=+t.y,a.rotation=t.rotation?(0,r.toRadians)(t.rotation):0,a.width=null!==(i=t.width)&&void 0!==i?i:0,a.height=null!==(s=t.height)&&void 0!==s?s:0,a.point=t.point,a.ellipse=!0===t.ellipse||""===t.ellipse,a.polyline=t.polyline,a.polygon=t.polygon,a.rawObject=t,t.text&&(a.text=Object.assign(Object.assign({},t.text),{pixelSize:t.text.pixelsize,fontFamily:t.text.fontfamily})),a.properties=null!==(n=t.properties)&&void 0!==n?n:[],a}}},"./src/tiled-tileset.ts":(t,e,i)=>{"use strict";i.r(e),i.d(e,{TiledTileset:()=>a,TiledTilesetTile:()=>h,parseExternalJson:()=>A,parseExternalTsx:()=>l});var s=i("excalibur"),r=i("./node_modules/fast-xml-parser/src/parser.js"),n=i("./src/index.ts"),o=i("./src/tiled-entity.ts");class a{constructor(){this.tiles=[]}static parse(t){var e,i;const r=new a;let n=[];if(Array.isArray(t.tiles))n=(null!==(e=t.tiles)&&void 0!==e?e:[]).map((t=>h.parse(t,r)));else for(let e in t.tiles)n.push(h.parse(Object.assign(Object.assign({},t.tiles[e]),{id:+e}),r));return r.tiles=n,r.firstGid=t.firstgid,r.tileWidth=t.tilewidth,r.tileHeight=t.tileheight,r.tileCount=t.tilecount,r.tileOffset=t.tileoffset,r.tiledVersion=t.tiledversion,r.backgroundColor=t.backgroundcolor,r.transparentColor=t.transparentcolor,r.wangSets=t.wangsets,r.imageWidth=t.imagewidth,r.imageHeight=t.imageheight,r.objectAlignment=null!==(i=t.objectalignment)&&void 0!==i?i:"unspecified",r.image=t.image,r.spacing=isNaN(t.spacing)?0:t.spacing,r.horizontalFlipTransform=s.Matrix.identity().translate(r.tileWidth,0).scale(-1,1),r.verticalFlipTransform=s.Matrix.identity().translate(0,r.tileHeight).scale(1,-1),r.diagonalFlipTransform=s.Matrix.identity().translate(0,0).rotate(-Math.PI/2).scale(-1,1),r}}class h{hasAnimation(){return!!this.animation}getAnimation(t){var e;if(this.animation){let i=[];for(let e of this.animation)i.push({graphic:t.getSpriteForGid(e.tileid+this.tileset.firstGid),duration:e.duration});return new s.Animation({frames:i,strategy:null!==(e=this.animationStrategy)&&void 0!==e?e:s.AnimationStrategy.Loop})}return null}static parse(t,e){var i,r,a;const l=new h;if(l.id=+t.id,l.image=t.image,l.tileset=e,l.properties=Array.isArray(t.properties)?t.properties:null!==(r=null===(i=t.properties)||void 0===i?void 0:i.property)&&void 0!==r?r:[],t.objectgroup&&(l.objectgroup=n.TiledObjectGroup.parse(t.objectgroup)),t.terrain&&(l.terrain=t.terrain),t.animation&&(l.animation=Array.isArray(t.animation)?t.animation:[...t.animation.frame],l.properties)){const t=null===(a=(0,o.getProperty)(l.properties,"animationstrategy"))||void 0===a?void 0:a.value;switch(null==t?void 0:t.toLowerCase()){case s.AnimationStrategy.End.toLowerCase():l.animationStrategy=s.AnimationStrategy.End;break;case s.AnimationStrategy.Freeze.toLowerCase():l.animationStrategy=s.AnimationStrategy.Freeze;break;case s.AnimationStrategy.Loop.toLowerCase():l.animationStrategy=s.AnimationStrategy.Loop;break;case s.AnimationStrategy.PingPong.toLowerCase():l.animationStrategy=s.AnimationStrategy.PingPong;break;default:l.animationStrategy=s.AnimationStrategy.Loop}}return l}}const l=(t,e,i)=>{var n,o,a,l,A;const c=(t,e,i=!1)=>{t[e]?(t[e+(i?"s":"")]=Array.isArray(t[e])?t[e]:[t[e]],i&&delete t[e]):t[e+(i?"s":"")]=[]},d=r.parse(t,{attributeNamePrefix:"",textNodeName:"#text",ignoreAttributes:!1,ignoreNameSpace:!1,allowBooleanAttributes:!0,parseNodeValue:!0,parseAttributeValue:!0,trimValues:!0,parseTrueNumberOnly:!1,arrayMode:!1,stopNodes:["parse-me-as-string"]}).tileset,u=d;u.firstgid=e,u.source=i,u.imagewidth=null===(n=d.image)||void 0===n?void 0:n.width,u.imageheight=null===(o=d.image)||void 0===o?void 0:o.height,u.objectalignment=null!==(a=d.objectalignment)&&void 0!==a?a:"unspecified",u.image=null===(l=d.image)||void 0===l?void 0:l.source,u.spacing=isNaN(d.spacing)?0:d.spacing,c(d,"tile",!0),d.tiles.forEach((t=>{var e;(null===(e=t.image)||void 0===e?void 0:e.source)&&(t.image=t.image.source),t.objectgroup&&(t.objectgroup.type="objectgroup",c(t.objectgroup,"object",!0))})),u.tiles=d.tiles;const g=Object.assign(Object.assign({},u),{tiles:[],firstGid:u.firstgid,tileWidth:u.tilewidth,tileHeight:u.tileheight,tileCount:u.tilecount,tileOffset:u.tileoffset,tiledVersion:u.tiledversion,backgroundColor:u.backgroundcolor,transparentColor:u.transparentcolor,wangSets:u.wangsets,imageWidth:u.imagewidth,imageHeight:u.imageheight,objectAlignment:null!==(A=u.objectalignment)&&void 0!==A?A:"unspecified",image:u.image,spacing:isNaN(u.spacing)?0:u.spacing,horizontalFlipTransform:s.Matrix.identity().translate(u.tilewidth,0).scale(-1,1),verticalFlipTransform:s.Matrix.identity().translate(0,u.tileheight).scale(1,-1),diagonalFlipTransform:s.Matrix.identity().translate(u.tilewidth,u.tileheight).rotate(-Math.PI/2).scale(-1,1)});return g.tiles=u.tiles.map((t=>h.parse(t,g))),g},A=(t,e,i)=>{var r,n;let o=[];t.tiles=null!==(r=t.tiles)&&void 0!==r?r:[],(0,s.vec)(t.tilewidth/2,t.tileheight/2);const a=Object.assign(Object.assign({},t),{source:i,tiles:o,firstGid:e,tileWidth:t.tilewidth,tileHeight:t.tileheight,tileCount:t.tilecount,tileOffset:t.tileoffset,tiledVersion:t.tiledversion,backgroundColor:t.backgroundcolor,transparentColor:t.transparentcolor,wangSets:t.wangsets,imageWidth:t.imagewidth,imageHeight:t.imageheight,spacing:isNaN(t.spacing)?0:t.spacing,objectAlignment:null!==(n=t.objectalignment)&&void 0!==n?n:"unspecified",image:t.image,horizontalFlipTransform:s.Matrix.identity().translate(t.tilewidth,0).scale(-1,1),verticalFlipTransform:s.Matrix.identity().translate(0,t.tileheight).scale(1,-1),diagonalFlipTransform:s.Matrix.identity().translate(t.tilewidth,t.tileheight).rotate(-Math.PI/2).scale(-1,1)});for(let e in t.tiles)o.push(h.parse(Object.assign(Object.assign({},t.tiles[e]),{id:+e}),a));return a}},"./src/tiled-types.ts":(t,e,i)=>{"use strict";i.r(e)},"./node_modules/zstddec/dist/zstddec.modern.js":(t,e,i)=>{"use strict";let s,r,n;i.r(e),i.d(e,{ZSTDDecoder:()=>a});const o={env:{emscripten_notify_memory_growth:function(t){n=new Uint8Array(r.exports.memory.buffer)}}};class a{init(){return s||(s="undefined"!=typeof fetch?fetch("data:application/wasm;base64,"+h).then((t=>t.arrayBuffer())).then((t=>WebAssembly.instantiate(t,o))).then(this._init):WebAssembly.instantiate(Buffer.from(h,"base64"),o).then(this._init),s)}_init(t){r=t.instance,o.env.emscripten_notify_memory_growth(0)}decode(t,e=0){if(!r)throw new Error("ZSTDDecoder: Await .init() before decoding.");const i=t.byteLength,s=r.exports.malloc(i);n.set(t,s),e=e||Number(r.exports.ZSTD_findDecompressedSize(s,i));const o=r.exports.malloc(e),a=r.exports.ZSTD_decompress(o,e,s,i),h=n.slice(o,o+a);return r.exports.free(s),r.exports.free(o),h}}const h="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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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"},excalibur:e=>{"use strict";e.exports=t}},i={};function s(t){var r=i[t];if(void 0!==r)return r.exports;var n=i[t]={exports:{}};return e[t](n,n.exports,s),n.exports}return s.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return s.d(e,{a:e}),e},s.d=(t,e)=>{for(var i in e)s.o(e,i)&&!s.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},s.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),s.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},s("./src/index.ts")})(),t.exports=s(i(882))},882:(t,e,i)=>{"use strict";i.r(e),i.d(e,{ActionContext:()=>a,ActionQueue:()=>h,ActionSequence:()=>l,ActionsComponent:()=>A,ActionsSystem:()=>c,ActivateEvent:()=>d,Actor:()=>u,AddedComponent:()=>g,AddedEntity:()=>p,AffineMatrix:()=>_,Animation:()=>f,AnimationDirection:()=>m,AnimationEvents:()=>C,AnimationStrategy:()=>y,ArcadeSolver:()=>v,AudioContextFactory:()=>w,Axes:()=>I,Axis:()=>x,BaseAlign:()=>E,Blink:()=>B,BodyComponent:()=>b,BoundingBox:()=>Q,BroadphaseStrategy:()=>S,BrowserComponent:()=>D,BrowserEvents:()=>T,Buttons:()=>F,Camera:()=>k,CameraEvents:()=>P,Canvas:()=>R,Circle:()=>M,CircleCollider:()=>L,Clock:()=>N,ClosestLine:()=>G,ClosestLineJumpTable:()=>U,Collider:()=>z,ColliderComponent:()=>O,CollisionContact:()=>H,CollisionEndEvent:()=>q,CollisionGroup:()=>V,CollisionGroupManager:()=>j,CollisionJumpTable:()=>Y,CollisionPostSolveEvent:()=>K,CollisionPreSolveEvent:()=>W,CollisionResolutionStrategy:()=>J,CollisionStartEvent:()=>X,CollisionSystem:()=>Z,CollisionType:()=>$,Color:()=>tt,ColorBlindFlags:()=>et,ColorBlindnessMode:()=>it,ColorBlindnessPostProcessor:()=>st,Component:()=>rt,CompositeCollider:()=>nt,Configurable:()=>ot,ConsoleAppender:()=>at,ContactConstraintPoint:()=>ht,ContactEndEvent:()=>lt,ContactStartEvent:()=>At,CoordPlane:()=>ct,DeactivateEvent:()=>dt,Debug:()=>ut,DebugGraphicsComponent:()=>gt,DebugSystem:()=>pt,DebugText:()=>_t,DegreeOfFreedom:()=>ft,Delay:()=>mt,Detector:()=>Ct,Die:()=>yt,Direction:()=>vt,DisplayMode:()=>wt,DynamicTree:()=>It,DynamicTreeCollisionProcessor:()=>xt,EX_VERSION:()=>Et,EaseBy:()=>Bt,EaseTo:()=>bt,EasingFunctions:()=>Qt,EdgeCollider:()=>St,ElasticToActorStrategy:()=>Dt,EmitterType:()=>Tt,Engine:()=>Ft,EngineEvents:()=>kt,EnterTriggerEvent:()=>Pt,EnterViewPortEvent:()=>Rt,Entity:()=>Mt,EntityEvents:()=>Lt,EntityManager:()=>Nt,EventDispatcher:()=>Gt,EventEmitter:()=>Ut,EventTypes:()=>zt,Events:()=>Ot,ExResponse:()=>Ht,ExcaliburGraphicsContext2DCanvas:()=>qt,ExcaliburGraphicsContextWebGL:()=>Vt,ExitTriggerEvent:()=>jt,ExitViewPortEvent:()=>Yt,Fade:()=>Kt,Flags:()=>Wt,Follow:()=>Jt,Font:()=>Xt,FontCache:()=>Zt,FontStyle:()=>$t,FontUnit:()=>te,FpsSampler:()=>ee,FrameStats:()=>ie,Future:()=>se,GameEvent:()=>re,GameStartEvent:()=>ne,GameStopEvent:()=>oe,Gamepad:()=>ae,GamepadAxisEvent:()=>he,GamepadButtonEvent:()=>le,GamepadConnectEvent:()=>Ae,GamepadDisconnectEvent:()=>ce,Gamepads:()=>de,Gif:()=>ue,GlobalCoordinates:()=>ge,Graphic:()=>pe,GraphicsComponent:()=>_e,GraphicsGroup:()=>fe,GraphicsLayer:()=>me,GraphicsLayers:()=>Ce,GraphicsSystem:()=>ye,HiddenEvent:()=>ve,ImageFiltering:()=>we,ImageSource:()=>Ie,InitializeEvent:()=>xe,Input:()=>Ee,InputMapper:()=>Be,Integrator:()=>be,IsometricEntityComponent:()=>Qe,IsometricEntitySystem:()=>Se,IsometricMap:()=>De,IsometricTile:()=>Te,KeyEvent:()=>Fe,Keyboard:()=>ke,Keys:()=>Pe,KillEvent:()=>Re,Label:()=>Me,LimitCameraBoundsStrategy:()=>Le,Line:()=>Ne,LineSegment:()=>Ge,Loader:()=>Ue,LoaderEvents:()=>ze,LockCameraToActorAxisStrategy:()=>Oe,LockCameraToActorStrategy:()=>He,LogLevel:()=>qe,Logger:()=>Ve,Material:()=>je,Matrix:()=>Ye,MatrixLocations:()=>Ke,MediaEvent:()=>We,Meet:()=>Je,MotionComponent:()=>Xe,MotionSystem:()=>Ze,MoveBy:()=>$e,MoveTo:()=>ti,NativePointerButton:()=>ei,NativeSoundEvent:()=>ii,NativeSoundProcessedEvent:()=>si,Observable:()=>ri,OffscreenSystem:()=>ni,Pair:()=>oi,ParallaxComponent:()=>ai,ParallelActions:()=>hi,ParseGif:()=>li,Particle:()=>Ai,ParticleEmitter:()=>ci,ParticleTransform:()=>di,Physics:()=>ui,PhysicsStats:()=>gi,PhysicsWorld:()=>pi,PointerButton:()=>_i,PointerComponent:()=>fi,PointerEvent:()=>mi,PointerEventReceiver:()=>Ci,PointerScope:()=>yi,PointerSystem:()=>vi,PointerType:()=>wi,Polygon:()=>Ii,PolygonCollider:()=>xi,Pool:()=>Ei,PostCollisionEvent:()=>Bi,PostDebugDrawEvent:()=>bi,PostDrawEvent:()=>Qi,PostFrameEvent:()=>Si,PostKillEvent:()=>Di,PostUpdateEvent:()=>Ti,PreCollisionEvent:()=>Fi,PreDebugDrawEvent:()=>ki,PreDrawEvent:()=>Pi,PreFrameEvent:()=>Ri,PreKillEvent:()=>Mi,PreUpdateEvent:()=>Li,Projection:()=>Ni,QuadIndexBuffer:()=>Gi,Query:()=>Ui,QueryManager:()=>zi,RadiusAroundActorStrategy:()=>Oi,Random:()=>Hi,Raster:()=>qi,Ray:()=>Vi,RealisticSolver:()=>ji,Rectangle:()=>Yi,RemovedComponent:()=>Ki,RemovedEntity:()=>Wi,Repeat:()=>Ji,RepeatForever:()=>Xi,Resolution:()=>Zi,Resource:()=>$i,ResourceEvents:()=>ts,RotateBy:()=>es,RotateTo:()=>is,RotationType:()=>ss,ScaleBy:()=>rs,ScaleTo:()=>ns,Scene:()=>os,SceneEvents:()=>as,Screen:()=>hs,ScreenAppender:()=>ls,ScreenElement:()=>As,ScreenShader:()=>cs,ScrollPreventionMode:()=>ds,Semaphore:()=>us,Shader:()=>gs,Shape:()=>ps,Side:()=>_s,Sound:()=>fs,SoundEvents:()=>ms,Sprite:()=>Cs,SpriteFont:()=>ys,SpriteSheet:()=>vs,StandardClock:()=>ws,StateMachine:()=>Is,StrategyContainer:()=>xs,Stream:()=>Es,System:()=>Bs,SystemManager:()=>bs,SystemType:()=>Qs,TagComponent:()=>Ss,TestClock:()=>Ds,Text:()=>Ts,TextAlign:()=>Fs,TextureLoader:()=>ks,Tile:()=>Ps,TileMap:()=>Rs,TileMapEvents:()=>Ms,Timer:()=>Ls,Toaster:()=>Ns,Transform:()=>Gs,TransformComponent:()=>Us,TreeNode:()=>zs,Trigger:()=>Os,TriggerEvents:()=>Hs,TwoPI:()=>qs,Util:()=>Vs,Vector:()=>js,VectorView:()=>Ys,VertexBuffer:()=>Ks,VertexLayout:()=>Ws,VisibleEvent:()=>Js,WebAudio:()=>Xs,WebAudioInstance:()=>Zs,WheelDeltaMode:()=>$s,WheelEvent:()=>tr,World:()=>er,canonicalizeAngle:()=>ir,clamp:()=>sr,createId:()=>rr,frac:()=>nr,hasGraphicsTick:()=>or,hasOnInitialize:()=>ar,hasOnPostUpdate:()=>hr,hasOnPreUpdate:()=>lr,hasPostDraw:()=>Ar,hasPreDraw:()=>cr,has_initialize:()=>dr,has_postupdate:()=>ur,has_preupdate:()=>gr,isAddedComponent:()=>pr,isAddedSystemEntity:()=>_r,isRemoveSystemEntity:()=>fr,isRemovedComponent:()=>mr,isScreenElement:()=>Cr,maxMessages:()=>yr,obsolete:()=>vr,pixelSnapEpsilon:()=>wr,randomInRange:()=>Ir,randomIntInRange:()=>xr,range:()=>Er,resetObsoleteCounter:()=>Br,sign:()=>br,toDegrees:()=>Qr,toRadians:()=>Sr,vec:()=>Dr,webgl:()=>Tr});var s={4662:(t,e,i)=>{i(3430);var s=i(8791);t.exports=s("Array","sort")},8343:(t,e,i)=>{i(4769);var s=i(9276);t.exports=s.Object.keys},7111:(t,e,i)=>{var s=i(6733),r=i(9821),n=TypeError;t.exports=function(t){if(s(t))return t;throw n(r(t)+" is not a function")}},1176:(t,e,i)=>{var s=i(5052),r=String,n=TypeError;t.exports=function(t){if(s(t))return t;throw n(r(t)+" is not an object")}},9540:(t,e,i)=>{var s=i(905),r=i(3231),n=i(9646),o=function(t){return function(e,i,o){var a,h=s(e),l=n(h),A=r(o,l);if(t&&i!=i){for(;l>A;)if((a=h[A++])!=a)return!0}else for(;l>A;A++)if((t||A in h)&&h[A]===i)return t||A||0;return!t&&-1}};t.exports={includes:o(!0),indexOf:o(!1)}},6038:(t,e,i)=>{var s=i(4229);t.exports=function(t,e){var i=[][t];return!!i&&s((function(){i.call(null,e||function(){return 1},1)}))}},9794:(t,e,i)=>{var s=i(3231),r=i(9646),n=i(2324),o=Array,a=Math.max;t.exports=function(t,e,i){for(var h=r(t),l=s(e,h),A=s(void 0===i?h:i,h),c=o(a(A-l,0)),d=0;l{var s=i(9794),r=Math.floor,n=function(t,e){var i=t.length,h=r(i/2);return i<8?o(t,e):a(t,n(s(t,0,h),e),n(s(t,h),e),e)},o=function(t,e){for(var i,s,r=t.length,n=1;n0;)t[s]=t[--s];s!==n++&&(t[s]=i)}return t},a=function(t,e,i,s){for(var r=e.length,n=i.length,o=0,a=0;o{var s=i(5968),r=s({}.toString),n=s("".slice);t.exports=function(t){return n(r(t),8,-1)}},1589:(t,e,i)=>{var s=i(1601),r=i(6733),n=i(7079),o=i(95)("toStringTag"),a=Object,h="Arguments"==n(function(){return arguments}());t.exports=s?n:function(t){var e,i,s;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(i=function(t,e){try{return t[e]}catch(t){}}(e=a(t),o))?i:h?n(e):"Object"==(s=n(e))&&r(e.callee)?"Arguments":s}},7081:(t,e,i)=>{var s=i(8270),r=i(4826),n=i(7933),o=i(1787);t.exports=function(t,e,i){for(var a=r(e),h=o.f,l=n.f,A=0;A{var s=i(7400),r=i(1787),n=i(5358);t.exports=s?function(t,e,i){return r.f(t,e,n(1,i))}:function(t,e,i){return t[e]=i,t}},5358:t=>{t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},2324:(t,e,i)=>{var s=i(9310),r=i(1787),n=i(5358);t.exports=function(t,e,i){var o=s(e);o in t?r.f(t,o,n(0,i)):t[o]=i}},4768:(t,e,i)=>{var s=i(6733),r=i(1787),n=i(6039),o=i(8400);t.exports=function(t,e,i,a){a||(a={});var h=a.enumerable,l=void 0!==a.name?a.name:e;if(s(i)&&n(i,l,a),a.global)h?t[e]=i:o(e,i);else{try{a.unsafe?t[e]&&(h=!0):delete t[e]}catch(t){}h?t[e]=i:r.f(t,e,{value:i,enumerable:!1,configurable:!a.nonConfigurable,writable:!a.nonWritable})}return t}},8400:(t,e,i)=>{var s=i(9859),r=Object.defineProperty;t.exports=function(t,e){try{r(s,t,{value:e,configurable:!0,writable:!0})}catch(i){s[t]=e}return e}},9563:(t,e,i)=>{var s=i(9821),r=TypeError;t.exports=function(t,e){if(!delete t[e])throw r("Cannot delete property "+s(e)+" of "+s(t))}},7400:(t,e,i)=>{var s=i(4229);t.exports=!s((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},3777:t=>{var e="object"==typeof document&&document.all,i=void 0===e&&void 0!==e;t.exports={all:e,IS_HTMLDDA:i}},2635:(t,e,i)=>{var s=i(9859),r=i(5052),n=s.document,o=r(n)&&r(n.createElement);t.exports=function(t){return o?n.createElement(t):{}}},2671:(t,e,i)=>{var s=i(598).match(/firefox\/(\d+)/i);t.exports=!!s&&+s[1]},8506:(t,e,i)=>{var s=i(598);t.exports=/MSIE|Trident/.test(s)},598:t=>{t.exports="undefined"!=typeof navigator&&String(navigator.userAgent)||""},5884:(t,e,i)=>{var s,r,n=i(9859),o=i(598),a=n.process,h=n.Deno,l=a&&a.versions||h&&h.version,A=l&&l.v8;A&&(r=(s=A.split("."))[0]>0&&s[0]<4?1:+(s[0]+s[1])),!r&&o&&(!(s=o.match(/Edge\/(\d+)/))||s[1]>=74)&&(s=o.match(/Chrome\/(\d+)/))&&(r=+s[1]),t.exports=r},9811:(t,e,i)=>{var s=i(598).match(/AppleWebKit\/(\d+)\./);t.exports=!!s&&+s[1]},8791:(t,e,i)=>{var s=i(9859),r=i(5968);t.exports=function(t,e){return r(s[t].prototype[e])}},3837:t=>{t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},3103:(t,e,i)=>{var s=i(9859),r=i(7933).f,n=i(5762),o=i(4768),a=i(8400),h=i(7081),l=i(6541);t.exports=function(t,e){var i,A,c,d,u,g=t.target,p=t.global,_=t.stat;if(i=p?s:_?s[g]||a(g,{}):(s[g]||{}).prototype)for(A in e){if(d=e[A],c=t.dontCallGetSet?(u=r(i,A))&&u.value:i[A],!l(p?A:g+(_?".":"#")+A,t.forced)&&void 0!==c){if(typeof d==typeof c)continue;h(d,c)}(t.sham||c&&c.sham)&&n(d,"sham",!0),o(i,A,d,t)}}},4229:t=>{t.exports=function(t){try{return!!t()}catch(t){return!0}}},7188:(t,e,i)=>{var s=i(4229);t.exports=!s((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")}))},266:(t,e,i)=>{var s=i(7188),r=Function.prototype.call;t.exports=s?r.bind(r):function(){return r.apply(r,arguments)}},1805:(t,e,i)=>{var s=i(7400),r=i(8270),n=Function.prototype,o=s&&Object.getOwnPropertyDescriptor,a=r(n,"name"),h=a&&"something"===function(){}.name,l=a&&(!s||s&&o(n,"name").configurable);t.exports={EXISTS:a,PROPER:h,CONFIGURABLE:l}},5968:(t,e,i)=>{var s=i(7188),r=Function.prototype,n=r.call,o=s&&r.bind.bind(n,n);t.exports=s?o:function(t){return function(){return n.apply(t,arguments)}}},1333:(t,e,i)=>{var s=i(9859),r=i(6733);t.exports=function(t,e){return arguments.length<2?(i=s[t],r(i)?i:void 0):s[t]&&s[t][e];var i}},5300:(t,e,i)=>{var s=i(7111),r=i(9650);t.exports=function(t,e){var i=t[e];return r(i)?void 0:s(i)}},9859:function(t,e,i){var s=function(t){return t&&t.Math==Math&&t};t.exports=s("object"==typeof globalThis&&globalThis)||s("object"==typeof window&&window)||s("object"==typeof self&&self)||s("object"==typeof i.g&&i.g)||function(){return this}()||this||Function("return this")()},8270:(t,e,i)=>{var s=i(5968),r=i(2991),n=s({}.hasOwnProperty);t.exports=Object.hasOwn||function(t,e){return n(r(t),e)}},5977:t=>{t.exports={}},4394:(t,e,i)=>{var s=i(7400),r=i(4229),n=i(2635);t.exports=!s&&!r((function(){return 7!=Object.defineProperty(n("div"),"a",{get:function(){return 7}}).a}))},9337:(t,e,i)=>{var s=i(5968),r=i(4229),n=i(7079),o=Object,a=s("".split);t.exports=r((function(){return!o("z").propertyIsEnumerable(0)}))?function(t){return"String"==n(t)?a(t,""):o(t)}:o},8511:(t,e,i)=>{var s=i(5968),r=i(6733),n=i(5353),o=s(Function.toString);r(n.inspectSource)||(n.inspectSource=function(t){return o(t)}),t.exports=n.inspectSource},6407:(t,e,i)=>{var s,r,n,o=i(1180),a=i(9859),h=i(5052),l=i(5762),A=i(8270),c=i(5353),d=i(4399),u=i(5977),g="Object already initialized",p=a.TypeError,_=a.WeakMap;if(o||c.state){var f=c.state||(c.state=new _);f.get=f.get,f.has=f.has,f.set=f.set,s=function(t,e){if(f.has(t))throw p(g);return e.facade=t,f.set(t,e),e},r=function(t){return f.get(t)||{}},n=function(t){return f.has(t)}}else{var m=d("state");u[m]=!0,s=function(t,e){if(A(t,m))throw p(g);return e.facade=t,l(t,m,e),e},r=function(t){return A(t,m)?t[m]:{}},n=function(t){return A(t,m)}}t.exports={set:s,get:r,has:n,enforce:function(t){return n(t)?r(t):s(t,{})},getterFor:function(t){return function(e){var i;if(!h(e)||(i=r(e)).type!==t)throw p("Incompatible receiver, "+t+" required");return i}}}},6733:(t,e,i)=>{var s=i(3777),r=s.all;t.exports=s.IS_HTMLDDA?function(t){return"function"==typeof t||t===r}:function(t){return"function"==typeof t}},6541:(t,e,i)=>{var s=i(4229),r=i(6733),n=/#|\.prototype\./,o=function(t,e){var i=h[a(t)];return i==A||i!=l&&(r(e)?s(e):!!e)},a=o.normalize=function(t){return String(t).replace(n,".").toLowerCase()},h=o.data={},l=o.NATIVE="N",A=o.POLYFILL="P";t.exports=o},9650:t=>{t.exports=function(t){return null==t}},5052:(t,e,i)=>{var s=i(6733),r=i(3777),n=r.all;t.exports=r.IS_HTMLDDA?function(t){return"object"==typeof t?null!==t:s(t)||t===n}:function(t){return"object"==typeof t?null!==t:s(t)}},4231:t=>{t.exports=!1},9395:(t,e,i)=>{var s=i(1333),r=i(6733),n=i(1321),o=i(6969),a=Object;t.exports=o?function(t){return"symbol"==typeof t}:function(t){var e=s("Symbol");return r(e)&&n(e.prototype,a(t))}},9646:(t,e,i)=>{var s=i(4237);t.exports=function(t){return s(t.length)}},6039:(t,e,i)=>{var s=i(5968),r=i(4229),n=i(6733),o=i(8270),a=i(7400),h=i(1805).CONFIGURABLE,l=i(8511),A=i(6407),c=A.enforce,d=A.get,u=String,g=Object.defineProperty,p=s("".slice),_=s("".replace),f=s([].join),m=a&&!r((function(){return 8!==g((function(){}),"length",{value:8}).length})),C=String(String).split("String"),y=t.exports=function(t,e,i){"Symbol("===p(u(e),0,7)&&(e="["+_(u(e),/^Symbol\(([^)]*)\)/,"$1")+"]"),i&&i.getter&&(e="get "+e),i&&i.setter&&(e="set "+e),(!o(t,"name")||h&&t.name!==e)&&(a?g(t,"name",{value:e,configurable:!0}):t.name=e),m&&i&&o(i,"arity")&&t.length!==i.arity&&g(t,"length",{value:i.arity});try{i&&o(i,"constructor")&&i.constructor?a&&g(t,"prototype",{writable:!1}):t.prototype&&(t.prototype=void 0)}catch(t){}var s=c(t);return o(s,"source")||(s.source=f(C,"string"==typeof e?e:"")),t};Function.prototype.toString=y((function(){return n(this)&&d(this).source||l(this)}),"toString")},917:t=>{var e=Math.ceil,i=Math.floor;t.exports=Math.trunc||function(t){var s=+t;return(s>0?i:e)(s)}},1787:(t,e,i)=>{var s=i(7400),r=i(4394),n=i(7137),o=i(1176),a=i(9310),h=TypeError,l=Object.defineProperty,A=Object.getOwnPropertyDescriptor,c="enumerable",d="configurable",u="writable";e.f=s?n?function(t,e,i){if(o(t),e=a(e),o(i),"function"==typeof t&&"prototype"===e&&"value"in i&&u in i&&!i[u]){var s=A(t,e);s&&s[u]&&(t[e]=i.value,i={configurable:d in i?i[d]:s[d],enumerable:c in i?i[c]:s[c],writable:!1})}return l(t,e,i)}:l:function(t,e,i){if(o(t),e=a(e),o(i),r)try{return l(t,e,i)}catch(t){}if("get"in i||"set"in i)throw h("Accessors not supported");return"value"in i&&(t[e]=i.value),t}},7933:(t,e,i)=>{var s=i(7400),r=i(266),n=i(9195),o=i(5358),a=i(905),h=i(9310),l=i(8270),A=i(4394),c=Object.getOwnPropertyDescriptor;e.f=s?c:function(t,e){if(t=a(t),e=h(e),A)try{return c(t,e)}catch(t){}if(l(t,e))return o(!r(n.f,t,e),t[e])}},8151:(t,e,i)=>{var s=i(140),r=i(3837).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return s(t,r)}},894:(t,e)=>{e.f=Object.getOwnPropertySymbols},1321:(t,e,i)=>{var s=i(5968);t.exports=s({}.isPrototypeOf)},140:(t,e,i)=>{var s=i(5968),r=i(8270),n=i(905),o=i(9540).indexOf,a=i(5977),h=s([].push);t.exports=function(t,e){var i,s=n(t),l=0,A=[];for(i in s)!r(a,i)&&r(s,i)&&h(A,i);for(;e.length>l;)r(s,i=e[l++])&&(~o(A,i)||h(A,i));return A}},5632:(t,e,i)=>{var s=i(140),r=i(3837);t.exports=Object.keys||function(t){return s(t,r)}},9195:(t,e)=>{var i={}.propertyIsEnumerable,s=Object.getOwnPropertyDescriptor,r=s&&!i.call({1:2},1);e.f=r?function(t){var e=s(this,t);return!!e&&e.enumerable}:i},2914:(t,e,i)=>{var s=i(266),r=i(6733),n=i(5052),o=TypeError;t.exports=function(t,e){var i,a;if("string"===e&&r(i=t.toString)&&!n(a=s(i,t)))return a;if(r(i=t.valueOf)&&!n(a=s(i,t)))return a;if("string"!==e&&r(i=t.toString)&&!n(a=s(i,t)))return a;throw o("Can't convert object to primitive value")}},4826:(t,e,i)=>{var s=i(1333),r=i(5968),n=i(8151),o=i(894),a=i(1176),h=r([].concat);t.exports=s("Reflect","ownKeys")||function(t){var e=n.f(a(t)),i=o.f;return i?h(e,i(t)):e}},9276:(t,e,i)=>{var s=i(9859);t.exports=s},8885:(t,e,i)=>{var s=i(9650),r=TypeError;t.exports=function(t){if(s(t))throw r("Can't call method on "+t);return t}},4399:(t,e,i)=>{var s=i(3036),r=i(1441),n=s("keys");t.exports=function(t){return n[t]||(n[t]=r(t))}},5353:(t,e,i)=>{var s=i(9859),r=i(8400),n="__core-js_shared__",o=s[n]||r(n,{});t.exports=o},3036:(t,e,i)=>{var s=i(4231),r=i(5353);(t.exports=function(t,e){return r[t]||(r[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.32.0",mode:s?"pure":"global",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.32.0/LICENSE",source:"https://github.com/zloirock/core-js"})},4860:(t,e,i)=>{var s=i(5884),r=i(4229),n=i(9859).String;t.exports=!!Object.getOwnPropertySymbols&&!r((function(){var t=Symbol();return!n(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&s&&s<41}))},3231:(t,e,i)=>{var s=i(3329),r=Math.max,n=Math.min;t.exports=function(t,e){var i=s(t);return i<0?r(i+e,0):n(i,e)}},905:(t,e,i)=>{var s=i(9337),r=i(8885);t.exports=function(t){return s(r(t))}},3329:(t,e,i)=>{var s=i(917);t.exports=function(t){var e=+t;return e!=e||0===e?0:s(e)}},4237:(t,e,i)=>{var s=i(3329),r=Math.min;t.exports=function(t){return t>0?r(s(t),9007199254740991):0}},2991:(t,e,i)=>{var s=i(8885),r=Object;t.exports=function(t){return r(s(t))}},2066:(t,e,i)=>{var s=i(266),r=i(5052),n=i(9395),o=i(5300),a=i(2914),h=i(95),l=TypeError,A=h("toPrimitive");t.exports=function(t,e){if(!r(t)||n(t))return t;var i,h=o(t,A);if(h){if(void 0===e&&(e="default"),i=s(h,t,e),!r(i)||n(i))return i;throw l("Can't convert object to primitive value")}return void 0===e&&(e="number"),a(t,e)}},9310:(t,e,i)=>{var s=i(2066),r=i(9395);t.exports=function(t){var e=s(t,"string");return r(e)?e:e+""}},1601:(t,e,i)=>{var s={};s[i(95)("toStringTag")]="z",t.exports="[object z]"===String(s)},3326:(t,e,i)=>{var s=i(1589),r=String;t.exports=function(t){if("Symbol"===s(t))throw TypeError("Cannot convert a Symbol value to a string");return r(t)}},9821:t=>{var e=String;t.exports=function(t){try{return e(t)}catch(t){return"Object"}}},1441:(t,e,i)=>{var s=i(5968),r=0,n=Math.random(),o=s(1..toString);t.exports=function(t){return"Symbol("+(void 0===t?"":t)+")_"+o(++r+n,36)}},6969:(t,e,i)=>{var s=i(4860);t.exports=s&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},7137:(t,e,i)=>{var s=i(7400),r=i(4229);t.exports=s&&r((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},1180:(t,e,i)=>{var s=i(9859),r=i(6733),n=s.WeakMap;t.exports=r(n)&&/native code/.test(String(n))},95:(t,e,i)=>{var s=i(9859),r=i(3036),n=i(8270),o=i(1441),a=i(4860),h=i(6969),l=s.Symbol,A=r("wks"),c=h?l.for||l:l&&l.withoutSetter||o;t.exports=function(t){return n(A,t)||(A[t]=a&&n(l,t)?l[t]:c("Symbol."+t)),A[t]}},3430:(t,e,i)=>{var s=i(3103),r=i(5968),n=i(7111),o=i(2991),a=i(9646),h=i(9563),l=i(3326),A=i(4229),c=i(3867),d=i(6038),u=i(2671),g=i(8506),p=i(5884),_=i(9811),f=[],m=r(f.sort),C=r(f.push),y=A((function(){f.sort(void 0)})),v=A((function(){f.sort(null)})),w=d("sort"),I=!A((function(){if(p)return p<70;if(!(u&&u>3)){if(g)return!0;if(_)return _<603;var t,e,i,s,r="";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:i=3;break;case 68:case 71:i=4;break;default:i=2}for(s=0;s<47;s++)f.push({k:e+s,v:i})}for(f.sort((function(t,e){return e.v-t.v})),s=0;sl(i)?1:-1}}(t)),i=a(r),s=0;s{var s=i(3103),r=i(2991),n=i(5632);s({target:"Object",stat:!0,forced:i(4229)((function(){n(1)}))},{keys:function(t){return n(r(t))}})},1388:(t,e,i)=>{i.d(e,{Z:()=>a});var s=i(272),r=i.n(s),n=i(2609),o=i.n(n)()(r());o.push([t.id,"/* Buttons styles start */\n\nbutton#excalibur-play {\n display: inline-block;\n position: relative;\n z-index: 999;\n border-radius: 6px;\n border: none;\n /*border: 3px solid;\n border-color: white;\n box-shadow: 0 0 10px #ccc;*/\n padding: 1rem 1.5rem 1rem 4rem;\n margin: 0;\n text-decoration: none;\n background: #00b233;\n color: #ffffff;\n font-family: sans-serif;\n font-size: 2rem;\n white-space: nowrap;\n line-height: 1;\n cursor: pointer;\n text-align: center;\n transition: background 250ms ease-in-out, transform 150ms ease;\n -webkit-appearance: none;\n -moz-appearance: none;\n\n -webkit-animation: excalibur-button-fadein 200ms; /* Safari, Chrome and Opera > 12.1 */\n -moz-animation: excalibur-button-fadein 200ms; /* Firefox < 16 */\n -ms-animation: excalibur-button-fadein 200ms; /* Internet Explorer */\n -o-animation: excalibur-button-fadein 200ms; /* Opera < 12.1 */\n animation: excalibur-button-fadein 200ms;\n}\n\n/*\nbutton#excalibur-play {\n display: none;\n}*/\n\nbutton#excalibur-play:after {\n position: absolute;\n content: '';\n border: 8px solid;\n border-color: transparent transparent transparent white;\n left: 35px;\n top: 24px;\n width: 0;\n height: 0;\n}\n\nbutton#excalibur-play:before {\n position: absolute;\n content: '';\n border: 3px solid;\n left: 19px;\n top: 14px;\n border-radius: 20px;\n width: 30px;\n height: 30px;\n}\n\nbutton#excalibur-play:hover,\nbutton#excalibur-play:focus {\n background: #00982c;\n}\n\nbutton#excalibur-play:focus {\n outline: 1px solid #fff;\n outline-offset: -4px;\n}\n\nbutton#excalibur-play:active {\n transform: scale(0.99);\n}\n\n@keyframes excalibur-button-fadein {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n/* Firefox < 16 */\n@-moz-keyframes excalibur-button-fadein {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n/* Safari, Chrome and Opera > 12.1 */\n@-webkit-keyframes excalibur-button-fadein {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n/* Internet Explorer */\n@-ms-keyframes excalibur-button-fadein {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n/* Opera < 12.1 */\n@-o-keyframes excalibur-button-fadein {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n","",{version:3,sources:["webpack://./Loader.css"],names:[],mappings:"AAAA,yBAAyB;;AAEzB;EACE,qBAAqB;EACrB,kBAAkB;EAClB,YAAY;EACZ,kBAAkB;EAClB,YAAY;EACZ;;+BAE6B;EAC7B,8BAA8B;EAC9B,SAAS;EACT,qBAAqB;EACrB,mBAAmB;EACnB,cAAc;EACd,uBAAuB;EACvB,eAAe;EACf,mBAAmB;EACnB,cAAc;EACd,eAAe;EACf,kBAAkB;EAClB,8DAA8D;EAC9D,wBAAwB;EACxB,qBAAqB;;EAErB,gDAAgD,EAAE,oCAAoC;EACtF,6CAA6C,EAAE,iBAAiB;EAChE,4CAA4C,EAAE,sBAAsB;EACpE,2CAA2C,EAAE,iBAAiB;EAC9D,wCAAwC;AAC1C;;AAEA;;;EAGE;;AAEF;EACE,kBAAkB;EAClB,WAAW;EACX,iBAAiB;EACjB,uDAAuD;EACvD,UAAU;EACV,SAAS;EACT,QAAQ;EACR,SAAS;AACX;;AAEA;EACE,kBAAkB;EAClB,WAAW;EACX,iBAAiB;EACjB,UAAU;EACV,SAAS;EACT,mBAAmB;EACnB,WAAW;EACX,YAAY;AACd;;AAEA;;EAEE,mBAAmB;AACrB;;AAEA;EACE,uBAAuB;EACvB,oBAAoB;AACtB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE;IACE,UAAU;EACZ;EACA;IACE,UAAU;EACZ;AACF;;AAEA,iBAAiB;AACjB;EACE;IACE,UAAU;EACZ;EACA;IACE,UAAU;EACZ;AACF;;AAEA,oCAAoC;AACpC;EACE;IACE,UAAU;EACZ;EACA;IACE,UAAU;EACZ;AACF;;AAEA,sBAAsB;AACtB;EACE;IACE,UAAU;EACZ;EACA;IACE,UAAU;EACZ;AACF;;AAEA,iBAAiB;AACjB;EACE;IACE,UAAU;EACZ;EACA;IACE,UAAU;EACZ;AACF",sourcesContent:["/* Buttons styles start */\r\n\r\nbutton#excalibur-play {\r\n display: inline-block;\r\n position: relative;\r\n z-index: 999;\r\n border-radius: 6px;\r\n border: none;\r\n /*border: 3px solid;\r\n border-color: white;\r\n box-shadow: 0 0 10px #ccc;*/\r\n padding: 1rem 1.5rem 1rem 4rem;\r\n margin: 0;\r\n text-decoration: none;\r\n background: #00b233;\r\n color: #ffffff;\r\n font-family: sans-serif;\r\n font-size: 2rem;\r\n white-space: nowrap;\r\n line-height: 1;\r\n cursor: pointer;\r\n text-align: center;\r\n transition: background 250ms ease-in-out, transform 150ms ease;\r\n -webkit-appearance: none;\r\n -moz-appearance: none;\r\n\r\n -webkit-animation: excalibur-button-fadein 200ms; /* Safari, Chrome and Opera > 12.1 */\r\n -moz-animation: excalibur-button-fadein 200ms; /* Firefox < 16 */\r\n -ms-animation: excalibur-button-fadein 200ms; /* Internet Explorer */\r\n -o-animation: excalibur-button-fadein 200ms; /* Opera < 12.1 */\r\n animation: excalibur-button-fadein 200ms;\r\n}\r\n\r\n/*\r\nbutton#excalibur-play {\r\n display: none;\r\n}*/\r\n\r\nbutton#excalibur-play:after {\r\n position: absolute;\r\n content: '';\r\n border: 8px solid;\r\n border-color: transparent transparent transparent white;\r\n left: 35px;\r\n top: 24px;\r\n width: 0;\r\n height: 0;\r\n}\r\n\r\nbutton#excalibur-play:before {\r\n position: absolute;\r\n content: '';\r\n border: 3px solid;\r\n left: 19px;\r\n top: 14px;\r\n border-radius: 20px;\r\n width: 30px;\r\n height: 30px;\r\n}\r\n\r\nbutton#excalibur-play:hover,\r\nbutton#excalibur-play:focus {\r\n background: #00982c;\r\n}\r\n\r\nbutton#excalibur-play:focus {\r\n outline: 1px solid #fff;\r\n outline-offset: -4px;\r\n}\r\n\r\nbutton#excalibur-play:active {\r\n transform: scale(0.99);\r\n}\r\n\r\n@keyframes excalibur-button-fadein {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n/* Firefox < 16 */\r\n@-moz-keyframes excalibur-button-fadein {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n/* Safari, Chrome and Opera > 12.1 */\r\n@-webkit-keyframes excalibur-button-fadein {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n/* Internet Explorer */\r\n@-ms-keyframes excalibur-button-fadein {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n/* Opera < 12.1 */\r\n@-o-keyframes excalibur-button-fadein {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n"],sourceRoot:""}]);const a=o},7379:(t,e,i)=>{i.d(e,{Z:()=>a});var s=i(272),r=i.n(s),n=i(2609),o=i.n(n)()(r());o.push([t.id,"\n#ex-toast-container {\n position: absolute;\n height: 0;\n min-width: 50%;\n left: 50%;\n top: 0;\n}\n\n.ex-toast-message {\n left: -50%;\n position: relative;\n display: flex;\n justify-content: space-between;\n\n\n padding: 10px;\n margin-top: 5px;\n font-size: 18px;\n font-family: sans-serif;\n border-radius: 6px;\n border: 3px solid #b7b779;\n background-color: rgb(253, 253, 192);\n}\n\n\n.ex-toast-message button {\n align-self: flex-start;\n}","",{version:3,sources:["webpack://./Util/Toaster.css"],names:[],mappings:";AACA;EACE,kBAAkB;EAClB,SAAS;EACT,cAAc;EACd,SAAS;EACT,MAAM;AACR;;AAEA;EACE,UAAU;EACV,kBAAkB;EAClB,aAAa;EACb,8BAA8B;;;EAG9B,aAAa;EACb,eAAe;EACf,eAAe;EACf,uBAAuB;EACvB,kBAAkB;EAClB,yBAAyB;EACzB,oCAAoC;AACtC;;;AAGA;EACE,sBAAsB;AACxB",sourcesContent:["\r\n#ex-toast-container {\r\n position: absolute;\r\n height: 0;\r\n min-width: 50%;\r\n left: 50%;\r\n top: 0;\r\n}\r\n\r\n.ex-toast-message {\r\n left: -50%;\r\n position: relative;\r\n display: flex;\r\n justify-content: space-between;\r\n\r\n\r\n padding: 10px;\r\n margin-top: 5px;\r\n font-size: 18px;\r\n font-family: sans-serif;\r\n border-radius: 6px;\r\n border: 3px solid #b7b779;\r\n background-color: rgb(253, 253, 192);\r\n}\r\n\r\n\r\n.ex-toast-message button {\r\n align-self: flex-start;\r\n}"],sourceRoot:""}]);const a=o},2609:t=>{t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var i="",s=void 0!==e[5];return e[4]&&(i+="@supports (".concat(e[4],") {")),e[2]&&(i+="@media ".concat(e[2]," {")),s&&(i+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),i+=t(e),s&&(i+="}"),e[2]&&(i+="}"),e[4]&&(i+="}"),i})).join("")},e.i=function(t,i,s,r,n){"string"==typeof t&&(t=[[null,t,void 0]]);var o={};if(s)for(var a=0;a0?" ".concat(A[5]):""," {").concat(A[1],"}")),A[5]=n),i&&(A[2]?(A[1]="@media ".concat(A[2]," {").concat(A[1],"}"),A[2]=i):A[2]=i),r&&(A[4]?(A[1]="@supports (".concat(A[4],") {").concat(A[1],"}"),A[4]=r):A[4]="".concat(r)),e.push(A))}},e}},272:t=>{t.exports=function(t){var e=t[1],i=t[3];if(!i)return e;if("function"==typeof btoa){var s=btoa(unescape(encodeURIComponent(JSON.stringify(i)))),r="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(s),n="/*# ".concat(r," */");return[e].concat([n]).join("\n")}return[e].join("\n")}}},r={};function n(t){var e=r[t];if(void 0!==e)return e.exports;var i=r[t]={id:t,exports:{}};return s[t].call(i.exports,i,i.exports,n),i.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var i in e)n.o(e,i)&&!n.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var o={};(()=>{n.d(o,{fWn:()=>fs,Ia8:()=>Yi,rqv:()=>hn,hLI:()=>ms,yyv:()=>wr,tX5:()=>j,vtX:()=>Is,r7K:()=>ki,lCh:()=>js,cE4:()=>kt,fwF:()=>cr,sce:()=>hr,AQ6:()=>Ar,_c7:()=>lr,KUs:()=>rr,Ajp:()=>Ie,dkO:()=>h,RDh:()=>ks,_H9:()=>es,mxs:()=>cs,OmD:()=>Fi,kBf:()=>xt,C4F:()=>$e,NQt:()=>Ur,JjN:()=>zr,EK_:()=>a,V1s:()=>Us,xHm:()=>Gs,Xz7:()=>Fe,Cdc:()=>qi,FKn:()=>Ii,SUY:()=>Kr,ab2:()=>vi,GfZ:()=>wi,YMS:()=>mi,oyv:()=>Di,aUb:()=>xi,SdD:()=>q,JUv:()=>ci,jEj:()=>An,TFq:()=>Bi,HDU:()=>O,R_y:()=>z,ydN:()=>Ze,t50:()=>H,s$$:()=>ar,v2G:()=>je,Ilk:()=>yt,s9i:()=>Mr,dxL:()=>Sr,LLX:()=>Rr,wA2:()=>oi,R_p:()=>Ci,IQ$:()=>ur,I5F:()=>et,X8$:()=>nr,FR6:()=>U,U8o:()=>G,kbG:()=>ei,iS_:()=>Y,cGG:()=>Lr,RPN:()=>Qs,skb:()=>yr,SLU:()=>Yt,RdJ:()=>Ti,cNu:()=>us,gU7:()=>Ve,LSk:()=>gs,Nmp:()=>ss,d1Y:()=>ye,xrL:()=>pi,sRW:()=>fi,cmV:()=>Qn,qWz:()=>As,N0Q:()=>ls,q8b:()=>ji,ynB:()=>bi,jT9:()=>Ms,wAz:()=>gr,D4V:()=>sn,NLr:()=>tn,N6H:()=>J,W1A:()=>W,JHW:()=>Ni,ZZ$:()=>Li,v2K:()=>Js,pBf:()=>rn,vpe:()=>_,GMl:()=>r,zW2:()=>t,B0K:()=>ke,Nv7:()=>Ce,C_p:()=>_e,MUA:()=>X,xqU:()=>K,pTp:()=>ds,vUK:()=>g,j9l:()=>ps,Zxw:()=>vs,v51:()=>ys,Hdx:()=>is,Z$d:()=>$i,iqV:()=>Yr,o$7:()=>Nr,olM:()=>Et,Zm$:()=>f,$QH:()=>v,i78:()=>w,nJg:()=>$,h6u:()=>P,hts:()=>k,j88:()=>T,VME:()=>F,fy2:()=>Z,nt:()=>Cn,Ukr:()=>Or,zsu:()=>Ut,oA6:()=>Oi,TVh:()=>dr,TwZ:()=>Ui,GTT:()=>zi,xxj:()=>Cr,XdK:()=>M,Jmb:()=>Ot,cXo:()=>qt,Dm5:()=>V,IIB:()=>s,ebW:()=>$r,zI0:()=>ti,LYD:()=>Ir,cEG:()=>xr,SEl:()=>an,t9V:()=>on,ez5:()=>rt,N1d:()=>nt,R8U:()=>A,SKZ:()=>m,__J:()=>nn,RI$:()=>Ns,x12:()=>xn,ccz:()=>yi,aNw:()=>He,XrL:()=>Oe,xwn:()=>Rs,dNK:()=>Ps,ini:()=>l,YdH:()=>tt,F5T:()=>de,y3G:()=>Ft,l57:()=>It,xn0:()=>Me,t2V:()=>_s,uxB:()=>Ai,cpd:()=>sr,fiy:()=>Ji,$XZ:()=>Xi,UG6:()=>Tr,uqK:()=>Le,STE:()=>Ne,y$z:()=>hi,mAD:()=>Er,sOq:()=>di,hUw:()=>bs,_0G:()=>ln,Sqs:()=>In,hpZ:()=>fr,Vol:()=>mr,vYX:()=>pr,wIZ:()=>ii,cBi:()=>Gr,c30:()=>Br,MPV:()=>Fr,RFv:()=>Vi,Ux6:()=>Hr,rxy:()=>jr,I$c:()=>c,kfC:()=>vr,VjY:()=>kr,mgq:()=>En,YVA:()=>Qi,Kgp:()=>Ae,HH$:()=>N,M_d:()=>B,rgh:()=>x,Ra6:()=>D,KhR:()=>y,BS5:()=>Q,xhz:()=>L,xOq:()=>E,a9j:()=>I,bHk:()=>S,CgK:()=>C,cuY:()=>b,kvE:()=>ui,SBu:()=>oe,AE_:()=>Zs,ctO:()=>$s,OLH:()=>Ls,kky:()=>at,nSF:()=>Te,zHn:()=>_i,zwx:()=>or,AeJ:()=>Hi,hLz:()=>Ri,D9g:()=>Ks,wA:()=>Ki,jhr:()=>Wi,GVs:()=>ve,_zO:()=>Lt,LXZ:()=>Mt,w6$:()=>ns,mhV:()=>rs,MOD:()=>Zi,kwd:()=>as,Lmr:()=>os,xsS:()=>Qr,K5l:()=>br,lLr:()=>we,Z$r:()=>it,IXb:()=>Es,SGH:()=>Pr,SMj:()=>en,L34:()=>bn,exe:()=>$t,bnF:()=>Si,MFA:()=>wt,$uU:()=>ze,Sap:()=>Ue,jyi:()=>zt,E03:()=>jt,V6q:()=>Vt,rg2:()=>Wr,DVW:()=>Pe,nVo:()=>Fs,F6N:()=>wn,xP7:()=>Vs,Odq:()=>tr,Zif:()=>qs,ZGJ:()=>ai,MJk:()=>Jr,xvT:()=>ws,PHM:()=>ts,dpR:()=>Ht,n9L:()=>Ts,KwO:()=>Ds,SxM:()=>Ss,B7y:()=>Bs,x7r:()=>Zr,wx7:()=>ni,Uvn:()=>li,OFT:()=>gi,xzN:()=>Hs,CcZ:()=>zs,M5Z:()=>ht,ZrN:()=>d,OWs:()=>mt,dF9:()=>si,oZy:()=>te,rD2:()=>ee,VHo:()=>R,ohE:()=>xe,R$E:()=>Re,xQN:()=>Dr,AdJ:()=>qr,q3I:()=>er,Pab:()=>dt,uZ5:()=>ct,McK:()=>p,F9c:()=>lt,k0b:()=>Gi,hnT:()=>dn,RSJ:()=>_n,Mku:()=>gn,h90:()=>mn,rms:()=>fn,ErP:()=>cn,aVg:()=>pn,lPc:()=>un,Z8E:()=>Pi,_N2:()=>Ys,yFn:()=>Ws,lNv:()=>Mi,cu9:()=>xs,MZQ:()=>Ye,FUM:()=>Xe,BxR:()=>ge,vdf:()=>_t,iaL:()=>ft,w6H:()=>pt,Q4c:()=>We,Xxe:()=>At,Uxb:()=>ut,Yr5:()=>gt,Bhw:()=>Ct,yOA:()=>e});var t={};n.r(t),n.d(t,{ActivateEvent:()=>j,CollisionEndEvent:()=>q,CollisionPostSolveEvent:()=>O,CollisionPreSolveEvent:()=>z,CollisionStartEvent:()=>H,ContactEndEvent:()=>U,ContactStartEvent:()=>G,DeactivateEvent:()=>Y,EnterTriggerEvent:()=>J,EnterViewPortEvent:()=>W,EventTypes:()=>r,ExitTriggerEvent:()=>X,ExitViewPortEvent:()=>K,GameEvent:()=>f,GameStartEvent:()=>v,GameStopEvent:()=>w,GamepadAxisEvent:()=>P,GamepadButtonEvent:()=>k,GamepadConnectEvent:()=>T,GamepadDisconnectEvent:()=>F,HiddenEvent:()=>M,InitializeEvent:()=>V,KillEvent:()=>m,PostCollisionEvent:()=>N,PostDebugDrawEvent:()=>B,PostDrawEvent:()=>x,PostFrameEvent:()=>D,PostKillEvent:()=>y,PostUpdateEvent:()=>Q,PreCollisionEvent:()=>L,PreDebugDrawEvent:()=>E,PreDrawEvent:()=>I,PreFrameEvent:()=>S,PreKillEvent:()=>C,PreUpdateEvent:()=>b,VisibleEvent:()=>R});var e={};n.r(e),n.d(e,{getAttributeComponentSize:()=>Xt,getAttributePointerType:()=>Zt,getGlTypeSizeBytes:()=>Jt});var i={};n.r(i),n.d(i,{circle:()=>Se,line:()=>Ee,point:()=>Be,roundRect:()=>Qe,vector:()=>be});var s={};n.r(s),n.d(s,{Axes:()=>h,Buttons:()=>a,Gamepad:()=>$,Gamepads:()=>Z,KeyEvent:()=>rt,Keyboard:()=>nt,Keys:()=>A,NativePointerButton:()=>Tr,PointerButton:()=>Fr,PointerComponent:()=>Vi,PointerEvent:()=>Hr,PointerEventReceiver:()=>jr,PointerScope:()=>c,PointerSystem:()=>vr,PointerType:()=>kr,WheelDeltaMode:()=>Dr,WheelEvent:()=>qr});var r,a,h,l,A,c,d={};function u(){if("undefined"==typeof window&&(window={audioContext:function(){}}),"undefined"==typeof window||window.requestAnimationFrame||(window.requestAnimationFrame=window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(t){window.setInterval(t,1e3/60)}),"undefined"==typeof window||window.cancelAnimationFrame||(window.cancelAnimationFrame=window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||function(){}),"undefined"!=typeof window&&!window.AudioContext){if(window.webkitAudioContext){const t=window.webkitAudioContext.prototype.decodeAudioData;window.webkitAudioContext.prototype.decodeAudioData=function(e){return new Promise(((i,s)=>{t.call(this,e,i,s)}))}}window.AudioContext=window.AudioContext||window.webkitAudioContext||window.mozAudioContext||window.msAudioContext||window.oAudioContext}"undefined"==typeof window||window.devicePixelRatio||(window.devicePixelRatio=window.devicePixelRatio||1)}n.r(d),n.d(d,{ConsoleAppender:()=>et,DrawUtil:()=>i,EasingFunctions:()=>ji,LogLevel:()=>l,Logger:()=>tt,Observable:()=>hi,ScreenAppender:()=>it,addItemToArray:()=>bt,contains:()=>St,delay:()=>Tt,fail:()=>Dt,getPosition:()=>Bt,removeItemFromArray:()=>Qt}),n(4662),n(8343);class g{static useCanvasGraphicsContext(){g.enable("use-canvas-context")}static freeze(){g._FROZEN=!0}static _reset(){g._FROZEN=!1,g._FLAGS={}}static enable(t){if(this._FROZEN)throw Error("Feature flags can only be enabled before Engine constructor time");g._FLAGS[t]=!0}static disable(t){if(this._FROZEN)throw Error("Feature flags can only be disabled before Engine constructor time");g._FLAGS[t]=!1}static isEnabled(t){return!!g._FLAGS[t]}static show(){return Object.keys(g._FLAGS)}}function p(t,e){return{type:t,value:e}}g._FROZEN=!1,g._FLAGS={};class _{constructor(){this._paused=!1,this._listeners={},this._listenersOnce={},this._pipes=[]}clear(){this._listeners={},this._listenersOnce={},this._pipes.length=0}on(t,e){var i;return this._listeners[t]=null!==(i=this._listeners[t])&&void 0!==i?i:[],this._listeners[t].push(e),{close:()=>this.off(t,e)}}once(t,e){var i;return this._listenersOnce[t]=null!==(i=this._listenersOnce[t])&&void 0!==i?i:[],this._listenersOnce[t].push(e),{close:()=>this.off(t,e)}}off(t,e){var i,s,r,n;if(e){const o=null===(i=this._listeners[t])||void 0===i?void 0:i.indexOf(e);o>-1&&(null===(s=this._listeners[t])||void 0===s||s.splice(o,1));const a=null===(r=this._listenersOnce[t])||void 0===r?void 0:r.indexOf(e);a>-1&&(null===(n=this._listenersOnce[t])||void 0===n||n.splice(a,1))}else delete this._listeners[t]}emit(t,e){var i;if(this._paused)return;null===(i=this._listeners[t])||void 0===i||i.forEach((t=>t(e)));const s=this._listenersOnce[t];this._listenersOnce[t]=[],s&&s.forEach((t=>t(e))),this._pipes.forEach((i=>{i.emit(t,e)}))}pipe(t){if(this===t)throw Error("Cannot pipe to self");return this._pipes.push(t),{close:()=>{const e=this._pipes.indexOf(t);e>-1&&this._pipes.splice(e,1)}}}unpipe(t){const e=this._pipes.indexOf(t);e>-1&&this._pipes.splice(e,1)}pause(){this._paused=!0}unpause(){this._paused=!1}}!function(t){t.Kill="kill",t.PreKill="prekill",t.PostKill="postkill",t.PreDraw="predraw",t.PostDraw="postdraw",t.PreDebugDraw="predebugdraw",t.PostDebugDraw="postdebugdraw",t.PreUpdate="preupdate",t.PostUpdate="postupdate",t.PreFrame="preframe",t.PostFrame="postframe",t.PreCollision="precollision",t.CollisionStart="collisionstart",t.CollisionEnd="collisionend",t.PostCollision="postcollision",t.Initialize="initialize",t.Activate="activate",t.Deactivate="deactivate",t.ExitViewport="exitviewport",t.EnterViewport="enterviewport",t.ExitTrigger="exit",t.EnterTrigger="enter",t.Connect="connect",t.Disconnect="disconnect",t.Button="button",t.Axis="axis",t.Visible="visible",t.Hidden="hidden",t.Start="start",t.Stop="stop",t.PointerUp="pointerup",t.PointerDown="pointerdown",t.PointerMove="pointermove",t.PointerEnter="pointerenter",t.PointerLeave="pointerleave",t.PointerCancel="pointercancel",t.PointerWheel="pointerwheel",t.Up="up",t.Down="down",t.Move="move",t.Enter="enter",t.Leave="leave",t.Cancel="cancel",t.Wheel="wheel",t.Press="press",t.Release="release",t.Hold="hold",t.PointerDragStart="pointerdragstart",t.PointerDragEnd="pointerdragend",t.PointerDragEnter="pointerdragenter",t.PointerDragLeave="pointerdragleave",t.PointerDragMove="pointerdragmove"}(r||(r={}));class f{constructor(){this._bubbles=!0}get bubbles(){return this._bubbles}set bubbles(t){this._bubbles=t}stopPropagation(){this.bubbles=!1}}class m extends f{constructor(t){super(),this.target=t}}class C extends f{constructor(t){super(),this.target=t}}class y extends f{constructor(t){super(),this.target=t}}class v extends f{constructor(t){super(),this.target=t}}class w extends f{constructor(t){super(),this.target=t}}class I extends f{constructor(t,e,i){super(),this.ctx=t,this.delta=e,this.target=i}}class x extends f{constructor(t,e,i){super(),this.ctx=t,this.delta=e,this.target=i}}class E extends f{constructor(t,e){super(),this.ctx=t,this.target=e}}class B extends f{constructor(t,e){super(),this.ctx=t,this.target=e}}class b extends f{constructor(t,e,i){super(),this.engine=t,this.delta=e,this.target=i}}class Q extends f{constructor(t,e,i){super(),this.engine=t,this.delta=e,this.target=i}}class S extends f{constructor(t,e){super(),this.engine=t,this.prevStats=e,this.target=t}}class D extends f{constructor(t,e){super(),this.engine=t,this.stats=e,this.target=t}}class T extends f{constructor(t,e){super(),this.index=t,this.gamepad=e,this.target=e}}class F extends f{constructor(t,e){super(),this.index=t,this.gamepad=e,this.target=e}}class k extends f{constructor(t,e,i){super(),this.button=t,this.value=e,this.target=i}}class P extends f{constructor(t,e,i){super(),this.axis=t,this.value=e,this.target=i}}class R extends f{constructor(t){super(),this.target=t}}class M extends f{constructor(t){super(),this.target=t}}class L extends f{constructor(t,e,i,s){super(),this.other=e,this.side=i,this.intersection=s,this.target=t}}class N extends f{constructor(t,e,i,s){super(),this.other=e,this.side=i,this.intersection=s,this.target=t}get actor(){return this.target}set actor(t){this.target=t}}class G{constructor(t,e,i){this.target=t,this.other=e,this.contact=i}}class U{constructor(t,e){this.target=t,this.other=e}}class z{constructor(t,e,i,s,r){this.target=t,this.other=e,this.side=i,this.intersection=s,this.contact=r}}class O{constructor(t,e,i,s,r){this.target=t,this.other=e,this.side=i,this.intersection=s,this.contact=r}}class H extends f{constructor(t,e,i){super(),this.other=e,this.contact=i,this.target=t}get actor(){return this.target}set actor(t){this.target=t}}class q extends f{constructor(t,e){super(),this.other=e,this.target=t}get actor(){return this.target}set actor(t){this.target=t}}class V extends f{constructor(t,e){super(),this.engine=t,this.target=e}}class j extends f{constructor(t,e){super(),this.context=t,this.target=e}}class Y extends f{constructor(t,e){super(),this.context=t,this.target=e}}class K extends f{constructor(t){super(),this.target=t}}class W extends f{constructor(t){super(),this.target=t}}class J extends f{constructor(t,e){super(),this.target=t,this.actor=e}}class X extends f{constructor(t,e){super(),this.target=t,this.actor=e}}class Z{constructor(){this.events=new _,this.enabled=!1,this.supported=!!navigator.getGamepads,this._gamePadTimeStamps=[0,0,0,0],this._oldPads=[],this._pads=[],this._initSuccess=!1,this._navigator=navigator,this._minimumConfiguration=null}init(){this.supported&&(this._initSuccess||(this._oldPads=this._clonePads(this._navigator.getGamepads()),this._oldPads.length&&this._oldPads[0]&&(this._initSuccess=!0)))}setMinimumGamepadConfiguration(t){this._enableAndUpdate(),this._minimumConfiguration=t}_enableAndUpdate(){this.enabled||(this.enabled=!0,this.update())}_isGamepadValid(t){if(!this._minimumConfiguration)return!0;if(!t)return!1;const e=t.axes.filter((t=>void 0!==typeof t)).length,i=t.buttons.filter((t=>void 0!==typeof t)).length;return e>=this._minimumConfiguration.axis&&i>=this._minimumConfiguration.buttons&&t.connected}emit(t,e){this.events.emit(t,e)}on(t,e){return this._enableAndUpdate(),this.events.on(t,e)}once(t,e){return this.events.once(t,e)}off(t,e){this._enableAndUpdate(),this.events.off(t,e)}update(){if(!this.enabled||!this.supported)return;this.init();const t=this._navigator.getGamepads();for(let e=0;e=this._pads.length)for(let e=this._pads.length-1,i=t;et.connected)).length}_clonePads(t){const e=[];for(let i=0,s=t.length;i=e}isButtonHeld(t,e=1){return this._buttons[t]>=e}wasButtonPressed(t,e=1){return this._buttonsDown[t]>=e}wasButtonReleased(t){return Boolean(this._buttonsUp[t])}getButton(t){return this._buttons[t]}getAxes(t){const e=this._axes[t];return Math.abs(e)=this.defaultLevel&&this._appenders[s].log(t,e)}debug(...t){this._log(l.Debug,t)}info(...t){this._log(l.Info,t)}warn(...t){this._log(l.Warn,t)}error(...t){this._log(l.Error,t)}fatal(...t){this._log(l.Fatal,t)}}tt._INSTANCE=null;class et{log(t,e){if(!console&&!console.log&&console.warn&&console.error)return;const i=[];i.unshift.apply(i,e),i.unshift("["+l[t]+"] : "),t0?r-.05:0}}function st(){try{const t=()=>{};window.top.addEventListener("blur",t),window.top.removeEventListener("blur",t)}catch(t){return!0}return!1}!function(t){t.Num0="Numpad0",t.Num1="Numpad1",t.Num2="Numpad2",t.Num3="Numpad3",t.Num4="Numpad4",t.Num5="Numpad5",t.Num6="Numpad6",t.Num7="Numpad7",t.Num8="Numpad8",t.Num9="Numpad9",t.NumAdd="NumpadAdd",t.NumSubtract="NumpadSubtract",t.NumMultiply="NumpadMultiply",t.NumDivide="NumpadDivide",t.NumDecimal="NumpadDecimal",t.Numpad0="Numpad0",t.Numpad1="Numpad1",t.Numpad2="Numpad2",t.Numpad3="Numpad3",t.Numpad4="Numpad4",t.Numpad5="Numpad5",t.Numpad6="Numpad6",t.Numpad7="Numpad7",t.Numpad8="Numpad8",t.Numpad9="Numpad9",t.NumpadAdd="NumpadAdd",t.NumpadSubtract="NumpadSubtract",t.NumpadMultiply="NumpadMultiply",t.NumpadDivide="NumpadDivide",t.NumpadDecimal="NumpadDecimal",t.NumLock="NumLock",t.ShiftLeft="ShiftLeft",t.ShiftRight="ShiftRight",t.AltLeft="AltLeft",t.AltRight="AltRight",t.ControlLeft="ControlLeft",t.ControlRight="ControlRight",t.MetaLeft="MetaLeft",t.MetaRight="MetaRight",t.Key0="Digit0",t.Key1="Digit1",t.Key2="Digit2",t.Key3="Digit3",t.Key4="Digit4",t.Key5="Digit5",t.Key6="Digit6",t.Key7="Digit7",t.Key8="Digit8",t.Key9="Digit9",t.Digit0="Digit0",t.Digit1="Digit1",t.Digit2="Digit2",t.Digit3="Digit3",t.Digit4="Digit4",t.Digit5="Digit5",t.Digit6="Digit6",t.Digit7="Digit7",t.Digit8="Digit8",t.Digit9="Digit9",t.F1="F1",t.F2="F2",t.F3="F3",t.F4="F4",t.F5="F5",t.F6="F6",t.F7="F7",t.F8="F8",t.F9="F9",t.F10="F10",t.F11="F11",t.F12="F12",t.A="KeyA",t.B="KeyB",t.C="KeyC",t.D="KeyD",t.E="KeyE",t.F="KeyF",t.G="KeyG",t.H="KeyH",t.I="KeyI",t.J="KeyJ",t.K="KeyK",t.L="KeyL",t.M="KeyM",t.N="KeyN",t.O="KeyO",t.P="KeyP",t.Q="KeyQ",t.R="KeyR",t.S="KeyS",t.T="KeyT",t.U="KeyU",t.V="KeyV",t.W="KeyW",t.X="KeyX",t.Y="KeyY",t.Z="KeyZ",t.KeyA="KeyA",t.KeyB="KeyB",t.KeyC="KeyC",t.KeyD="KeyD",t.KeyE="KeyE",t.KeyF="KeyF",t.KeyG="KeyG",t.KeyH="KeyH",t.KeyI="KeyI",t.KeyJ="KeyJ",t.KeyK="KeyK",t.KeyL="KeyL",t.KeyM="KeyM",t.KeyN="KeyN",t.KeyO="KeyO",t.KeyP="KeyP",t.KeyQ="KeyQ",t.KeyR="KeyR",t.KeyS="KeyS",t.KeyT="KeyT",t.KeyU="KeyU",t.KeyV="KeyV",t.KeyW="KeyW",t.KeyX="KeyX",t.KeyY="KeyY",t.KeyZ="KeyZ",t.Semicolon="Semicolon",t.Quote="Quote",t.Comma="Comma",t.Minus="Minus",t.Period="Period",t.Slash="Slash",t.Equal="Equal",t.BracketLeft="BracketLeft",t.Backslash="Backslash",t.BracketRight="BracketRight",t.Backquote="Backquote",t.Up="ArrowUp",t.Down="ArrowDown",t.Left="ArrowLeft",t.Right="ArrowRight",t.ArrowUp="ArrowUp",t.ArrowDown="ArrowDown",t.ArrowLeft="ArrowLeft",t.ArrowRight="ArrowRight",t.Space="Space",t.Backspace="Backspace",t.Delete="Delete",t.Esc="Escape",t.Escape="Escape",t.Enter="Enter",t.NumpadEnter="NumpadEnter",t.ContextMenu="ContextMenu"}(A||(A={}));class rt extends f{constructor(t,e,i){super(),this.key=t,this.value=e,this.originalEvent=i}}class nt{constructor(){this.events=new _,this._keys=[],this._keysUp=[],this._keysDown=[],this._releaseAllKeys=t=>{for(const e of this._keys){const i=new rt(e,t.key,t);this.events.emit("up",i),this.events.emit("release",i)}this._keysUp=Array.from(new Set(this._keys.concat(this._keysUp))),this._keys.length=0},this._handleKeyDown=t=>{t.metaKey||!this._keys.includes(A.MetaLeft)&&!this._keys.includes(A.MetaRight)||this._releaseAllKeys(t);const e=t.code;if(-1===this._keys.indexOf(e)){this._keys.push(e),this._keysDown.push(e);const i=new rt(e,t.key,t);this.events.emit("down",i),this.events.emit("press",i)}},this._handleKeyUp=t=>{const e=t.code,i=this._keys.indexOf(e);this._keys.splice(i,1),this._keysUp.push(e);const s=new rt(e,t.key,t);this.events.emit("up",s),this.events.emit("release",s),"Meta"===t.key&&this._releaseAllKeys(t)}}emit(t,e){this.events.emit(t,e)}on(t,e){return this.events.on(t,e)}once(t,e){return this.events.once(t,e)}off(t,e){this.events.off(t,e)}init(t){let{global:e}=t;const{grabWindowFocus:i}=t;e||(st()?(e=window,i&&window.focus(),tt.getInstance().warn("Excalibur might be in a cross-origin iframe, in order to receive keyboard events it must be in focus")):e=window.top),e.addEventListener("blur",(()=>{this._keys.length=0})),e.addEventListener("keyup",this._handleKeyUp),e.addEventListener("keydown",this._handleKeyDown)}update(){this._keysDown.length=0,this._keysUp.length=0;for(let t=0;t-1}isHeld(t){return this._keys.indexOf(t)>-1}wasReleased(t){return this._keysUp.indexOf(t)>-1}triggerEvent(t,e,i){"down"===t&&this._handleKeyDown(new KeyboardEvent("keydown",{code:e,key:null!=i?i:null})),"up"===t&&this._handleKeyUp(new KeyboardEvent("keyup",{code:e,key:null!=i?i:null}))}}!function(t){t.Canvas="Canvas",t.Document="Document"}(c||(c={}));const ot=4294967295;class at{constructor(t){this.seed=t,this._lowerMask=2147483647,this._upperMask=2147483648,this._w=32,this._n=624,this._m=397,this._a=2567483615,this._u=11,this._s=7,this._b=2636928640,this._t=15,this._c=4022730752,this._l=18,this._f=1812433253,this._mt=new Array(this._n),this._mt[0]=(t||Date.now())>>>0;for(let t=1;t>>this._w-2;this._mt[t]=(this._f*((4294901760&e)>>>16)<<16)+this._f*(65535&e)+t>>>0}this._index=this._n}_twist(){const t=[0,this._a];let e=0,i=0;for(;i>>1^t[1&e]&ot;for(;i>>1^t[1&e]&ot;e=this._mt[this._n-1]&this._upperMask|this._mt[0]&this._lowerMask,this._mt[this._n-1]=this._mt[this._m-1]^e>>>1^t[1&e]&ot,this._index=0}nextInt(){this._index>=this._n&&this._twist();let t=this._mt[this._index++];return t^=t>>>this._u,t^=t<>>this._l,t>>>0}next(){return this.nextInt()*(1/4294967296)}floating(t,e){return(e-t)*this.next()+t}integer(t,e){return Math.floor((e-t+1)*this.next()+t)}bool(t=.5){return this.next()<=t}pickOne(t){return t[this.integer(0,t.length-1)]}pickSet(t,e,i=!1){return i?this._pickSetWithDuplicates(t,e):this._pickSetWithoutDuplicates(t,e)}_pickSetWithoutDuplicates(t,e){if(e>t.length||e<0)throw new Error("Invalid number of elements to pick, must pick a value 0 < n <= length");if(e===t.length)return t;const i=new Array(e);let s=0;const r=t.slice(0);for(;s=0?t-Math.floor(t):t-Math.ceil(t)}function At(t){return 0===t?0:t<0?-1:1}function ct(t,e,i){return Math.min(Math.max(e,t),i)}function dt(t){let e=t;if(t>ht)for(;e>ht;)e-=ht;if(t<0)for(;e<0;)e+=ht;return e}function ut(t){return 180/Math.PI*t}function gt(t){return t/180*Math.PI}const pt=(t,e)=>Array.from(new Array(e-t+1),((e,i)=>i+t));function _t(t,e,i=new at){return i?i.floating(t,e):t+Math.random()*(e-t)}function ft(t,e,i=new at){return i?i.integer(t,e):Math.round(_t(t,e))}class mt{static get Zero(){return new mt(0,0)}static get One(){return new mt(1,1)}static get Half(){return new mt(.5,.5)}static get Up(){return new mt(0,-1)}static get Down(){return new mt(0,1)}static get Left(){return new mt(-1,0)}static get Right(){return new mt(1,0)}static fromAngle(t){return new mt(Math.cos(t),Math.sin(t))}static isValid(t){return null!=t&&!isNaN(t.x)&&!isNaN(t.y)&&t.x!==1/0&&t.y!==1/0&&t.x!==-1/0&&t.y!==-1/0}static distance(t,e){return Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2))}static min(t,e){return new mt(Math.min(t.x,e.x),Math.min(t.y,e.y))}static max(t,e){return new mt(Math.max(t.x,e.x),Math.max(t.y,e.y))}constructor(t,e){this._x=0,this._y=0,this._x=t,this._y=e}get x(){return this._x}set x(t){this._x=t}get y(){return this._y}set y(t){this._y=t}setTo(t,e){this.x=t,this.y=e}equals(t,e=.001){return Math.abs(this.x-t.x)<=e&&Math.abs(this.y-t.y)<=e}distance(t){if(!t)return Math.sqrt(this.x*this.x+this.y*this.y);const e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)}squareDistance(t){t||(t=mt.Zero);const e=this.x-t.x,i=this.y-t.y;return e*e+i*i}clampMagnitude(t){const e=ct(this.size,0,t);return this.size=e,this}get size(){return this.distance()}set size(t){const e=this.normalize().scale(t);this.setTo(e.x,e.y)}normalize(){const t=this.distance();return t>0?new mt(this.x/t,this.y/t):new mt(0,1)}average(t){return this.add(t).scale(.5)}scale(t,e){const i=e||new mt(0,0);return t instanceof mt?(i.x=this.x*t.x,i.y=this.y*t.y):(i.x=this.x*t,i.y=this.y*t),i}add(t,e){return e?(e.x=this.x+t.x,e.y=this.y+t.y,e):new mt(this.x+t.x,this.y+t.y)}sub(t){return new mt(this.x-t.x,this.y-t.y)}addEqual(t){return this.setTo(this.x+t.x,this.y+t.y),this}subEqual(t){return this.setTo(this.x-t.x,this.y-t.y),this}scaleEqual(t){return this.setTo(this.x*t,this.y*t),this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return t instanceof mt?this.x*t.y-this.y*t.x:"number"==typeof t?new mt(t*this.y,-t*this.x):void 0}static cross(t,e){return new mt(-t*e.y,t*e.x)}perpendicular(){return new mt(this.y,-this.x)}normal(){return this.perpendicular().normalize()}negate(){return this.scale(-1)}toAngle(){return Math.atan2(this.y,this.x)}rotate(t,e){e||(e=new mt(0,0));const i=Math.sin(t),s=Math.cos(t),r=s*(this.x-e.x)-i*(this.y-e.y)+e.x,n=i*(this.x-e.x)+s*(this.y-e.y)+e.y;return new mt(r,n)}clone(t){const e=null!=t?t:new mt(0,0);return e.x=this.x,e.y=this.y,e}toString(t){return t?`(${this.x.toFixed(t)}, ${this.y.toFixed(t)})`:`(${this.x}, ${this.y})`}}function Ct(t,e){return new mt(t,e)}class yt{constructor(t,e,i,s){this.r=t,this.g=e,this.b=i,this.a=null!=s?s:1}static fromRGB(t,e,i,s){return new yt(t,e,i,s)}static fromRGBString(t){let e=null;if(e=t.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+(?:\.\d+)?))?\)/i)){const t=parseInt(e[1],10),i=parseInt(e[2],10),s=parseInt(e[3],10);let r=1;return e[4]&&(r=parseFloat(e[4])),new yt(t,i,s,r)}throw new Error("Invalid rgb/a string: "+t)}static fromHex(t){let e=null;if(e=t.match(/^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})?$/i)){const t=parseInt(e[1],16),i=parseInt(e[2],16),s=parseInt(e[3],16);let r=1;return e[4]&&(r=parseInt(e[4],16)/255),new yt(t,i,s,r)}throw new Error("Invalid hex string: "+t)}static fromHSL(t,e,i,s=1){return new vt(t,e,i,s).toRGBA()}lighten(t=.1){const e=vt.fromRGBA(this.r,this.g,this.b,this.a);return e.l+=(1-e.l)*t,e.toRGBA()}darken(t=.1){const e=vt.fromRGBA(this.r,this.g,this.b,this.a);return e.l-=e.l*t,e.toRGBA()}saturate(t=.1){const e=vt.fromRGBA(this.r,this.g,this.b,this.a);return e.s+=e.s*t,e.toRGBA()}desaturate(t=.1){const e=vt.fromRGBA(this.r,this.g,this.b,this.a);return e.s-=e.s*t,e.toRGBA()}multiply(t){const e=t.r/255*this.r/255*255,i=t.g/255*this.g/255*255,s=t.b/255*this.b/255*255,r=t.a*this.a;return new yt(e,i,s,r)}screen(t){const e=t.invert(),i=t.invert();return e.multiply(i).invert()}invert(){return new yt(255-this.r,255-this.g,255-this.b,1-this.a)}average(t){const e=(t.r+this.r)/2,i=(t.g+this.g)/2,s=(t.b+this.b)/2,r=(t.a+this.a)/2;return new yt(e,i,s,r)}equal(t){return this.toString()===t.toString()}toString(t="rgb"){switch(t){case"rgb":return this.toRGBA();case"hsl":return this.toHSLA();case"hex":return this.toHex();default:throw new Error("Invalid Color format")}}_componentToHex(t){const e=t.toString(16);return 1===e.length?"0"+e:e}toHex(){return"#"+this._componentToHex(this.r)+this._componentToHex(this.g)+this._componentToHex(this.b)}toRGBA(){const t=String(this.r.toFixed(0))+", "+String(this.g.toFixed(0))+", "+String(this.b.toFixed(0));return void 0!==this.a||null!==this.a?"rgba("+t+", "+String(this.a)+")":"rgb("+t+")"}toHSLA(){return vt.fromRGBA(this.r,this.g,this.b,this.a).toString()}fillStyle(){return this.toString()}clone(){return new yt(this.r,this.g,this.b,this.a)}static get Black(){return yt.fromHex("#000000")}static get White(){return yt.fromHex("#FFFFFF")}static get Gray(){return yt.fromHex("#808080")}static get LightGray(){return yt.fromHex("#D3D3D3")}static get DarkGray(){return yt.fromHex("#A9A9A9")}static get Yellow(){return yt.fromHex("#FFFF00")}static get Orange(){return yt.fromHex("#FFA500")}static get Red(){return yt.fromHex("#FF0000")}static get Vermilion(){return yt.fromHex("#FF5B31")}static get Rose(){return yt.fromHex("#FF007F")}static get Magenta(){return yt.fromHex("#FF00FF")}static get Violet(){return yt.fromHex("#7F00FF")}static get Blue(){return yt.fromHex("#0000FF")}static get Azure(){return yt.fromHex("#007FFF")}static get Cyan(){return yt.fromHex("#00FFFF")}static get Viridian(){return yt.fromHex("#59978F")}static get Green(){return yt.fromHex("#00FF00")}static get Chartreuse(){return yt.fromHex("#7FFF00")}static get Transparent(){return yt.fromHex("#FFFFFF00")}static get ExcaliburBlue(){return yt.fromHex("#176BAA")}}class vt{constructor(t,e,i,s){this.h=t,this.s=e,this.l=i,this.a=s}static hue2rgb(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}static fromRGBA(t,e,i,s){t/=255,e/=255,i/=255;const r=Math.max(t,e,i),n=Math.min(t,e,i);let o,a;const h=(r+n)/2;if(r===n)o=a=0;else{const s=r-n;switch(a=h>.5?s/(2-r-n):s/(r+n),r){case t:o=(e-i)/s+(er&&(r=i[t].dot(e),n=t);return s[n]}}(wt||(wt={}));class xt{constructor(t=0,e=0,i=0,s=0){"object"==typeof t?(this.left=t.left,this.top=t.top,this.right=t.right,this.bottom=t.bottom):"number"==typeof t&&(this.left=t,this.top=e,this.right=i,this.bottom=s)}clone(){return new xt(this.left,this.top,this.right,this.bottom)}static getSideFromIntersection(t){return t&&t?Math.abs(t.x)>Math.abs(t.y)?t.x<0?wt.Right:wt.Left:t.y<0?wt.Bottom:wt.Top:wt.None}static fromPoints(t){let e=1/0,i=1/0,s=-1/0,r=-1/0;for(let n=0;ns&&(s=t[n].x),t[n].yr&&(r=t[n].y);return new xt(e,i,s,r)}static fromDimension(t,e,i=mt.Half,s=mt.Zero){return new xt(-t*i.x+s.x,-e*i.y+s.y,t-t*i.x+s.x,e-e*i.y+s.y)}get width(){return this.right-this.left}get height(){return this.bottom-this.top}hasZeroDimensions(){return 0===this.width||0===this.height}get center(){return new mt((this.left+this.right)/2,(this.top+this.bottom)/2)}translate(t){return new xt(this.left+t.x,this.top+t.y,this.right+t.x,this.bottom+t.y)}rotate(t,e=mt.Zero){const i=this.getPoints().map((i=>i.rotate(t,e)));return xt.fromPoints(i)}scale(t,e=mt.Zero){const i=this.translate(e);return new xt(i.left*t.x,i.top*t.y,i.right*t.x,i.bottom*t.y)}transform(t){const e=t.data[0]*this.left,i=t.data[1]*this.left,s=t.data[0]*this.right,r=t.data[1]*this.right,n=t.data[2]*this.top,o=t.data[3]*this.top,a=t.data[2]*this.bottom,h=t.data[3]*this.bottom,l=t.getPosition(),A=Math.min(e,s)+Math.min(n,a)+l.x,c=Math.min(i,r)+Math.min(o,h)+l.y,d=Math.max(e,s)+Math.max(n,a)+l.x,u=Math.max(i,r)+Math.max(o,h)+l.y;return new xt({left:A,top:c,right:d,bottom:u})}getPerimeter(){return 2*(this.width+this.height)}getPoints(){const t=[];return t.push(new mt(this.left,this.top)),t.push(new mt(this.right,this.top)),t.push(new mt(this.right,this.bottom)),t.push(new mt(this.left,this.bottom)),t}rayCast(t,e=1/0){let i=-1/0,s=1/0;const r=0===t.dir.x?Number.MAX_VALUE:1/t.dir.x,n=0===t.dir.y?Number.MAX_VALUE:1/t.dir.y,o=(this.left-t.pos.x)*r,a=(this.right-t.pos.x)*r;i=Math.min(o,a),s=Math.max(o,a);const h=(this.top-t.pos.y)*n,l=(this.bottom-t.pos.y)*n;return i=Math.max(i,Math.min(h,l)),s=Math.min(s,Math.max(h,l)),s>=Math.max(0,i)&&i=Math.max(0,i)&&i=t.y&&this.right>=t.x:t instanceof xt&&this.left<=t.left&&this.top<=t.top&&t.bottom<=this.bottom&&t.right<=this.right}combine(t){return new xt(Math.min(this.left,t.left),Math.min(this.top,t.top),Math.max(this.right,t.right),Math.max(this.bottom,t.bottom))}get dimensions(){return new mt(this.width,this.height)}overlaps(t,e){const i=e||0;if(t.hasZeroDimensions())return this.contains(t);if(this.hasZeroDimensions())return t.contains(this);const s=this.combine(t);return s.width+i=t.left&&this.right<=t.right?t.left-this.right:t.right-this.left;let i=0;return i=this.top<=t.bottom&&this.top>=t.top?t.bottom-this.top:t.top-this.bottom,Math.abs(e)=0?this.right-t.right<=t.left-this.left?t.left-this.right:t.right-this.left:t.right-this.right<=this.left-t.left?this.left-t.right:this.right-t.left;let i=0;return i=this.height-t.height>=0?this.bottom-t.bottom<=t.top-this.top?t.top-this.bottom:t.bottom-this.top:t.bottom-this.bottom<=this.top-t.top?this.top-t.bottom:this.bottom-t.top,Math.abs(e){this._resolver=t,this._rejecter=e}))}get isCompleted(){return this._isCompleted}resolve(t){this._isCompleted||(this._isCompleted=!0,this._resolver(t))}reject(t){this._isCompleted||(this._isCompleted=!0,this._rejecter(t))}}function Bt(t){let e=0,i=0;const s=t=>{e+=t.offsetLeft,t.offsetParent&&s(t.offsetParent)},r=t=>{i+=t.offsetTop,t.offsetParent&&r(t.offsetParent)};return s(t),r(t),new mt(e,i)}function bt(t,e){return-1===e.indexOf(t)&&(e.push(t),!0)}function Qt(t,e){let i=-1;return(i=e.indexOf(t))>-1&&(e.splice(i,1),!0)}function St(t,e){for(let i=0;i{s.resolve()}),t),s.promise}!function(t){t[t.X=12]="X",t[t.Y=13]="Y"}(It||(It={}));class Ft{constructor(){this.data=new Float32Array(16),this._scaleX=1,this._scaleSignX=1,this._scaleY=1,this._scaleSignY=1}static ortho(t,e,i,s,r,n){const o=new Ft;return o.data[0]=2/(e-t),o.data[1]=0,o.data[2]=0,o.data[3]=0,o.data[4]=0,o.data[5]=2/(s-i),o.data[6]=0,o.data[7]=0,o.data[8]=0,o.data[9]=0,o.data[10]=-2/(n-r),o.data[11]=0,o.data[12]=-(e+t)/(e-t),o.data[13]=-(s+i)/(s-i),o.data[14]=-(n+r)/(n-r),o.data[15]=1,o}clone(t){const e=t||new Ft;return e.data[0]=this.data[0],e.data[1]=this.data[1],e.data[2]=this.data[2],e.data[3]=this.data[3],e.data[4]=this.data[4],e.data[5]=this.data[5],e.data[6]=this.data[6],e.data[7]=this.data[7],e.data[8]=this.data[8],e.data[9]=this.data[9],e.data[10]=this.data[10],e.data[11]=this.data[11],e.data[12]=this.data[12],e.data[13]=this.data[13],e.data[14]=this.data[14],e.data[15]=this.data[15],e}toDOMMatrix(){return new DOMMatrix([...this.data])}static fromFloat32Array(t){const e=new Ft;return e.data=t,e}static identity(){const t=new Ft;return t.data[0]=1,t.data[1]=0,t.data[2]=0,t.data[3]=0,t.data[4]=0,t.data[5]=1,t.data[6]=0,t.data[7]=0,t.data[8]=0,t.data[9]=0,t.data[10]=1,t.data[11]=0,t.data[12]=0,t.data[13]=0,t.data[14]=0,t.data[15]=1,t}reset(){const t=this;return t.data[0]=1,t.data[1]=0,t.data[2]=0,t.data[3]=0,t.data[4]=0,t.data[5]=1,t.data[6]=0,t.data[7]=0,t.data[8]=0,t.data[9]=0,t.data[10]=1,t.data[11]=0,t.data[12]=0,t.data[13]=0,t.data[14]=0,t.data[15]=1,t}static translation(t,e){const i=Ft.identity();return i.data[12]=t,i.data[13]=e,i}static scale(t,e){const i=Ft.identity();return i.data[0]=t,i.data[5]=e,i.data[10]=1,i.data[15]=1,i}static rotation(t){const e=Ft.identity();return e.data[0]=Math.cos(t),e.data[4]=-Math.sin(t),e.data[1]=Math.sin(t),e.data[5]=Math.cos(t),e}multiply(t,e){if(t instanceof mt){const i=e||new mt(0,0),s=t,r=s.x*this.data[0]+s.y*this.data[4]+this.data[12],n=s.x*this.data[1]+s.y*this.data[5]+this.data[13];return i.x=r,i.y=n,i}{const i=e||new Ft,s=t,r=this.data[0],n=this.data[1],o=this.data[2],a=this.data[3],h=this.data[4],l=this.data[5],A=this.data[6],c=this.data[7],d=this.data[8],u=this.data[9],g=this.data[10],p=this.data[11],_=this.data[12],f=this.data[13],m=this.data[14],C=this.data[15],y=s.data[0],v=s.data[1],w=s.data[2],I=s.data[3],x=s.data[4],E=s.data[5],B=s.data[6],b=s.data[7],Q=s.data[8],S=s.data[9],D=s.data[10],T=s.data[11],F=s.data[12],k=s.data[13],P=s.data[14],R=s.data[15];i.data[0]=r*y+h*v+d*w+_*I,i.data[1]=n*y+l*v+u*w+f*I,i.data[2]=o*y+A*v+g*w+m*I,i.data[3]=a*y+c*v+p*w+C*I,i.data[4]=r*x+h*E+d*B+_*b,i.data[5]=n*x+l*E+u*B+f*b,i.data[6]=o*x+A*E+g*B+m*b,i.data[7]=a*x+c*E+p*B+C*b,i.data[8]=r*Q+h*S+d*D+_*T,i.data[9]=n*Q+l*S+u*D+f*T,i.data[10]=o*Q+A*S+g*D+m*T,i.data[11]=a*Q+c*S+p*D+C*T,i.data[12]=r*F+h*k+d*P+_*R,i.data[13]=n*F+l*k+u*P+f*R,i.data[14]=o*F+A*k+g*P+m*R,i.data[15]=a*F+c*k+p*P+C*R;const M=this.getScale();return i._scaleSignX=At(M.x)*At(i._scaleSignX),i._scaleSignY=At(M.y)*At(i._scaleSignY),i}}translate(t,e){const i=this.data[0],s=this.data[1],r=this.data[2],n=this.data[3],o=this.data[4],a=this.data[5],h=this.data[6],l=this.data[7],A=this.data[8],c=this.data[9],d=this.data[10],u=this.data[11],g=this.data[12],p=this.data[13],_=this.data[14],f=this.data[15];return this.data[12]=i*t+o*e+0*A+1*g,this.data[13]=s*t+a*e+0*c+1*p,this.data[14]=r*t+h*e+0*d+1*_,this.data[15]=n*t+l*e+0*u+1*f,this}setPosition(t,e){this.data[12]=t,this.data[13]=e}getPosition(){return Ct(this.data[12],this.data[13])}rotate(t){const e=this.data[0],i=this.data[1],s=this.data[2],r=this.data[3],n=this.data[4],o=this.data[5],a=this.data[6],h=this.data[7],l=Math.sin(t),A=Math.cos(t);return this.data[0]=A*e+l*n,this.data[1]=A*i+l*o,this.data[2]=A*s+l*a,this.data[3]=A*r+l*h,this.data[4]=A*n-l*e,this.data[5]=A*o-l*i,this.data[6]=A*a-l*s,this.data[7]=A*h-l*r,this}scale(t,e){const i=this.data[0],s=this.data[1],r=this.data[2],n=this.data[3],o=this.data[4],a=this.data[5],h=this.data[6],l=this.data[7];return this.data[0]=i*t,this.data[1]=s*t,this.data[2]=r*t,this.data[3]=n*t,this.data[4]=o*e,this.data[5]=a*e,this.data[6]=h*e,this.data[7]=l*e,this}setRotation(t){const e=this.getScale(),i=Math.sin(t),s=Math.cos(t);this.data[0]=s*e.x,this.data[1]=i*e.y,this.data[4]=-i*e.x,this.data[5]=s*e.y}getRotation(){return dt(Math.atan2(this.data[1]/this.getScaleY(),this.data[0]/this.getScaleX()))}getScaleX(){const t=Ct(this.data[0],this.data[4]).size;return this._scaleSignX*t}getScaleY(){const t=Ct(this.data[1],this.data[5]).size;return this._scaleSignY*t}getScale(){return Ct(this.getScaleX(),this.getScaleY())}setScaleX(t){if(this._scaleX===t)return;this._scaleSignX=At(t);const e=Ct(this.data[0]*this._scaleSignX,this.data[4]*this._scaleSignX).normalize();this.data[0]=e.x*t,this.data[4]=e.y*t,this._scaleX=t}setScaleY(t){if(this._scaleY===t)return;this._scaleSignY=At(t);const e=Ct(this.data[1]*this._scaleSignY,this.data[5]*this._scaleSignY).normalize();this.data[1]=e.x*t,this.data[5]=e.y*t,this._scaleY=t}setScale(t){this.setScaleX(t.x),this.setScaleY(t.y)}getBasisDeterminant(){return this.data[0]*this.data[5]-this.data[1]*this.data[4]}getAffineInverse(t){const e=1/this.getBasisDeterminant(),i=this.data[0],s=this.data[4],r=this.data[1],n=this.data[5],o=t||Ft.identity();o.data[0]=n*e,o.data[1]=-r*e,o.data[4]=-s*e,o.data[5]=i*e;const a=this.data[12],h=this.data[13];return o.data[12]=-(a*o.data[0]+h*o.data[4]),o.data[13]=-(a*o.data[1]+h*o.data[5]),o}isIdentity(){return 1===this.data[0]&&0===this.data[1]&&0===this.data[2]&&0===this.data[3]&&0===this.data[4]&&1===this.data[5]&&0===this.data[6]&&0===this.data[7]&&0===this.data[8]&&0===this.data[9]&&1===this.data[10]&&0===this.data[11]&&0===this.data[12]&&0===this.data[13]&&0===this.data[14]&&1===this.data[15]}toString(){return`\n[${this.data[0]} ${this.data[4]} ${this.data[8]} ${this.data[12]}]\n[${this.data[1]} ${this.data[5]} ${this.data[9]} ${this.data[13]}]\n[${this.data[2]} ${this.data[6]} ${this.data[10]} ${this.data[14]}]\n[${this.data[3]} ${this.data[7]} ${this.data[11]} ${this.data[15]}]\n`}}class kt{constructor(){this.data=new Float64Array(6),this._scale=new Float64Array([1,1]),this._scaleSignX=1,this._scaleSignY=1}toDOMMatrix(){return new DOMMatrix([...this.data])}static identity(){const t=new kt;return t.data[0]=1,t.data[1]=0,t.data[2]=0,t.data[3]=1,t.data[4]=0,t.data[5]=0,t}static translation(t,e){const i=kt.identity();return i.data[4]=t,i.data[5]=e,i}static scale(t,e){const i=kt.identity();return i.data[0]=t,i.data[3]=e,i._scale[0]=t,i._scale[1]=e,i}static rotation(t){const e=kt.identity();return e.data[0]=Math.cos(t),e.data[1]=Math.sin(t),e.data[2]=-Math.sin(t),e.data[3]=Math.cos(t),e}setPosition(t,e){this.data[4]=t,this.data[5]=e}getPosition(){return Ct(this.data[4],this.data[5])}rotate(t){const e=this.data[0],i=this.data[1],s=this.data[2],r=this.data[3],n=Math.sin(t),o=Math.cos(t);return this.data[0]=o*e+n*s,this.data[1]=o*i+n*r,this.data[2]=o*s-n*e,this.data[3]=o*r-n*i,this}translate(t,e){const i=this.data[0],s=this.data[1],r=this.data[2],n=this.data[3],o=this.data[4],a=this.data[5];return this.data[4]=i*t+r*e+o,this.data[5]=s*t+n*e+a,this}scale(t,e){const i=this.data[0],s=this.data[1],r=this.data[2],n=this.data[3];return this.data[0]=i*t,this.data[1]=s*t,this.data[2]=r*e,this.data[3]=n*e,this._scale[0]=t,this._scale[1]=e,this}determinant(){return this.data[0]*this.data[3]-this.data[1]*this.data[2]}inverse(t){const e=1/this.determinant(),i=this.data[0],s=this.data[2],r=this.data[1],n=this.data[3],o=t||kt.identity();o.data[0]=n*e,o.data[1]=-r*e,o.data[2]=-s*e,o.data[3]=i*e;const a=this.data[4],h=this.data[5];return o.data[4]=-(a*o.data[0]+h*o.data[2]),o.data[5]=-(a*o.data[1]+h*o.data[3]),o}multiply(t,e){if(t instanceof mt){const i=e||new mt(0,0),s=t,r=s.x*this.data[0]+s.y*this.data[2]+this.data[4],n=s.x*this.data[1]+s.y*this.data[3]+this.data[5];return i.x=r,i.y=n,i}{const i=e||new kt,s=t,r=this.data[0],n=this.data[1],o=this.data[2],a=this.data[3],h=this.data[4],l=this.data[5],A=s.data[0],c=s.data[1],d=s.data[2],u=s.data[3],g=s.data[4],p=s.data[5];i.data[0]=r*A+o*c,i.data[1]=n*A+a*c,i.data[2]=r*d+o*u,i.data[3]=n*d+a*u,i.data[4]=r*g+o*p+h,i.data[5]=n*g+a*p+l;const _=this.getScale();return i._scaleSignX=At(_.x)*At(i._scaleSignX),i._scaleSignY=At(_.y)*At(i._scaleSignY),i}}to4x4(){const t=new Ft;return t.data[0]=this.data[0],t.data[1]=this.data[1],t.data[2]=0,t.data[3]=0,t.data[4]=this.data[2],t.data[5]=this.data[3],t.data[6]=0,t.data[7]=0,t.data[8]=0,t.data[9]=0,t.data[10]=1,t.data[11]=0,t.data[12]=this.data[4],t.data[13]=this.data[5],t.data[14]=0,t.data[15]=1,t}setRotation(t){const e=this.getScale(),i=Math.sin(t),s=Math.cos(t);this.data[0]=s*e.x,this.data[1]=i*e.y,this.data[2]=-i*e.x,this.data[3]=s*e.y}getRotation(){return dt(Math.atan2(this.data[1]/this.getScaleY(),this.data[0]/this.getScaleX()))}getScaleX(){const t=Ct(this.data[0],this.data[2]).distance();return this._scaleSignX*t}getScaleY(){const t=Ct(this.data[1],this.data[3]).distance();return this._scaleSignY*t}getScale(){return Ct(this.getScaleX(),this.getScaleY())}setScaleX(t){if(t===this._scale[0])return;this._scaleSignX=At(t);const e=Ct(this.data[0]*this._scaleSignX,this.data[2]*this._scaleSignX).normalize();this.data[0]=e.x*t,this.data[2]=e.y*t,this._scale[0]=t}setScaleY(t){if(t===this._scale[1])return;this._scaleSignY=At(t);const e=Ct(this.data[1]*this._scaleSignY,this.data[3]*this._scaleSignY).normalize();this.data[1]=e.x*t,this.data[3]=e.y*t,this._scale[1]=t}setScale(t){this.setScaleX(t.x),this.setScaleY(t.y)}isIdentity(){return 1===this.data[0]&&0===this.data[1]&&0===this.data[2]&&1===this.data[3]&&0===this.data[4]&&0===this.data[5]}reset(){const t=this;return t.data[0]=1,t.data[1]=0,t.data[2]=0,t.data[3]=1,t.data[4]=0,t.data[5]=0,t}clone(t){const e=t||new kt;return e.data[0]=this.data[0],e.data[1]=this.data[1],e.data[2]=this.data[2],e.data[3]=this.data[3],e.data[4]=this.data[4],e.data[5]=this.data[5],e}toString(){return`\n[${this.data[0]} ${this.data[2]} ${this.data[4]}]\n[${this.data[1]} ${this.data[3]} ${this.data[5]}]\n[0 0 1]\n`}}class Pt{constructor(){this._transforms=[],this._currentTransform=kt.identity()}save(){this._transforms.push(this._currentTransform),this._currentTransform=this._currentTransform.clone()}restore(){this._currentTransform=this._transforms.pop()}translate(t,e){return this._currentTransform.translate(t,e)}rotate(t){return this._currentTransform.rotate(t)}scale(t,e){return this._currentTransform.scale(t,e)}set current(t){this._currentTransform=t}get current(){return this._currentTransform}}class Rt{constructor(){this._states=[],this._currentState=this._getDefaultState()}_getDefaultState(){return{opacity:1,z:0,tint:yt.White,material:null}}_cloneState(){return{opacity:this._currentState.opacity,z:this._currentState.z,tint:this._currentState.tint.clone(),material:this._currentState.material}}save(){this._states.push(this._currentState),this._currentState=this._cloneState()}restore(){this._currentState=this._states.pop()}get current(){return this._currentState}set current(t){this._currentState=t}}const Mt={Complete:"complete",Load:"load",LoadStart:"loadstart",Progress:"progress",Error:"error"};class Lt{constructor(t,e,i=!1){this.path=t,this.responseType=e,this.bustCache=i,this.data=null,this.logger=tt.getInstance(),this.events=new _}isLoaded(){return null!==this.data}_cacheBust(t){return/\?\w*=\w*/.test(t)?t+="&__="+Date.now():t+="?__="+Date.now(),t}load(){return new Promise(((t,e)=>{if(null!==this.data)return this.logger.debug("Already have data for resource",this.path),this.events.emit("complete",this.data),void t(this.data);const i=new XMLHttpRequest;i.open("GET",this.bustCache?this._cacheBust(this.path):this.path,!0),i.responseType=this.responseType,i.addEventListener("loadstart",(t=>this.events.emit("loadstart",t))),i.addEventListener("progress",(t=>this.events.emit("progress",t))),i.addEventListener("error",(t=>this.events.emit("error",t))),i.addEventListener("load",(t=>this.events.emit("load",t))),i.addEventListener("load",(()=>{if(0!==i.status&&200!==i.status)return this.logger.error("Failed to load resource ",this.path," server responded with error code",i.status),this.events.emit("error",i.response),void e(new Error(i.statusText));this.data=i.response,this.events.emit("complete",this.data),this.logger.debug("Completed loading resource",this.path),t(this.data)})),i.send()}))}}function Nt(t,e){return t&&void 0===t.__isProxy?new Proxy(t,{set:(t,i,s)=>(t[i]!==s&&(t[i]=s,"string"==typeof i&&"_"!==i[0]&&e(t)),!0),get:(t,e)=>"__isProxy"===e||t[e]}):t}function Gt(t,e){return t&&void 0===t.__isProxy?new Proxy(t,{set:(t,i,s)=>(t[i]=s,"string"==typeof i&&"_"!==i[0]&&e(t),!0),get:(t,e)=>"__isProxy"===e||t[e]}):t}class Ut{isStale(){return this._transformStale}get flipHorizontal(){return this._flipHorizontal}set flipHorizontal(t){this._flipHorizontal=t,this._transformStale=!0}get flipVertical(){return this._flipVertical}set flipVertical(t){this._flipVertical=t,this._transformStale=!0}get rotation(){return this._rotation}set rotation(t){this._rotation=t,this._transformStale=!0}get scale(){return this._scale}set scale(t){this._scale=Nt(t,(()=>{this._transformStale=!0})),this._transformStale=!0}get origin(){return this._origin}set origin(t){this._origin=Nt(t,(()=>{this._transformStale=!0})),this._transformStale=!0}constructor(t){var e,i,s,r,n,o;this.id=Ut._ID++,this.transform=kt.identity(),this.tint=null,this._transformStale=!0,this.showDebug=!1,this._flipHorizontal=!1,this._flipVertical=!1,this._rotation=0,this.opacity=1,this._scale=mt.One,this._origin=null,this._width=0,this._height=0,t&&(this.origin=null!==(e=t.origin)&&void 0!==e?e:this.origin,this.flipHorizontal=null!==(i=t.flipHorizontal)&&void 0!==i?i:this.flipHorizontal,this.flipVertical=null!==(s=t.flipVertical)&&void 0!==s?s:this.flipVertical,this.rotation=null!==(r=t.rotation)&&void 0!==r?r:this.rotation,this.opacity=null!==(n=t.opacity)&&void 0!==n?n:this.opacity,this.scale=null!==(o=t.scale)&&void 0!==o?o:this.scale)}cloneGraphicOptions(){return{origin:this.origin?this.origin.clone():null,flipHorizontal:this.flipHorizontal,flipVertical:this.flipVertical,rotation:this.rotation,opacity:this.opacity,scale:this.scale?this.scale.clone():null}}get width(){return Math.abs(this._width*this.scale.x)}get height(){return Math.abs(this._height*this.scale.y)}set width(t){this._width=t,this._transformStale=!0}set height(t){this._height=t,this._transformStale=!0}get localBounds(){return xt.fromDimension(this.width,this.height,mt.Zero)}draw(t,e,i){this._preDraw(t,e,i),this._drawImage(t,0,0),this._postDraw(t)}_preDraw(t,e,i){t.save(),t.translate(e,i),this._transformStale&&(this.transform.reset(),this.transform.scale(Math.abs(this.scale.x),Math.abs(this.scale.y)),this._rotate(this.transform),this._flip(this.transform),this._transformStale=!1),t.multiply(this.transform),t.opacity=t.opacity*this.opacity,this.tint&&(t.tint=this.tint)}_rotate(t){var e;const i=this.scale.x>0?1:-1,s=this.scale.y>0?1:-1,r=null!==(e=this.origin)&&void 0!==e?e:Ct(this.width/2,this.height/2);t.translate(r.x,r.y),t.rotate(this.rotation),t.scale(i,s),t.translate(-r.x,-r.y)}_flip(t){this.flipHorizontal&&(t.translate(this.width/this.scale.x,0),t.scale(-1,1)),this.flipVertical&&(t.translate(0,this.height/this.scale.y),t.scale(1,-1))}_postDraw(t){this.showDebug&&t.debug.drawRect(0,0,this.width,this.height),t.restore()}}Ut._ID=0;class zt extends Ut{static from(t){return new zt({image:t})}constructor(t){var e,i;super(t),this._logger=tt.getInstance(),this._dirty=!0,this._logNotLoadedWarning=!1,this.image=t.image;const{width:s,height:r}=t;this.sourceView=null!==(e=t.sourceView)&&void 0!==e?e:{x:0,y:0,width:null!=s?s:0,height:null!=r?r:0},this.destSize=null!==(i=t.destSize)&&void 0!==i?i:{width:null!=s?s:0,height:null!=r?r:0},this._updateSpriteDimensions(),this.image.ready.then((()=>{this._updateSpriteDimensions()}))}get width(){return Math.abs(this.destSize.width*this.scale.x)}get height(){return Math.abs(this.destSize.height*this.scale.y)}set width(t){t/=Math.abs(this.scale.x),this.destSize.width=t,super.width=Math.ceil(this.destSize.width)}set height(t){t/=Math.abs(this.scale.y),this.destSize.height=t,super.height=Math.ceil(this.destSize.height)}_updateSpriteDimensions(){var t,e,i,s,r,n;const{width:o,height:a}=this.image;this.sourceView.width=(null===(t=this.sourceView)||void 0===t?void 0:t.width)||o,this.sourceView.height=(null===(e=this.sourceView)||void 0===e?void 0:e.height)||a,this.destSize.width=(null===(i=this.destSize)||void 0===i?void 0:i.width)||(null===(s=this.sourceView)||void 0===s?void 0:s.width)||o,this.destSize.height=(null===(r=this.destSize)||void 0===r?void 0:r.height)||(null===(n=this.sourceView)||void 0===n?void 0:n.height)||a,this.width=Math.ceil(this.destSize.width)*this.scale.x,this.height=Math.ceil(this.destSize.height)*this.scale.y}_preDraw(t,e,i){this.image.isLoaded()&&this._dirty&&(this._dirty=!1,this._updateSpriteDimensions()),super._preDraw(t,e,i)}_drawImage(t,e,i){this.image.isLoaded()?t.drawImage(this.image.image,this.sourceView.x,this.sourceView.y,this.sourceView.width,this.sourceView.height,e,i,this.destSize.width,this.destSize.height):(this._logNotLoadedWarning||this._logger.warn(`ImageSource ${this.image.path} is not yet loaded and won't be drawn. Please call .load() or include in a Loader.\n\nRead https://excaliburjs.com/docs/imagesource for more information.`),this._logNotLoadedWarning=!0)}clone(){return new zt({image:this.image,sourceView:{...this.sourceView},destSize:{...this.destSize},...this.cloneGraphicOptions()})}}var Ot;!function(t){t.Pixel="Pixel",t.Blended="Blended"}(Ot||(Ot={}));class Ht{constructor(t){this._textureMap=new Map,this._gl=t,Ht._MAX_TEXTURE_SIZE=t.getParameter(t.MAX_TEXTURE_SIZE)}get(t){return this._textureMap.get(t)}has(t){return this._textureMap.has(t)}load(t,e,i=!1){const s=this._gl;if(!s)return null;let r=null;if(this.has(t)&&(r=this.get(t)),r)return i&&(s.bindTexture(s.TEXTURE_2D,r),s.texImage2D(s.TEXTURE_2D,0,s.RGBA,s.RGBA,s.UNSIGNED_BYTE,t)),r;r=s.createTexture(),Ht.checkImageSizeSupportedAndLog(t),s.bindTexture(s.TEXTURE_2D,r),s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,s.CLAMP_TO_EDGE);const n=null!=e?e:Ht.filtering;return s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,n===Ot.Pixel?s.NEAREST:s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,n===Ot.Pixel?s.NEAREST:s.LINEAR),s.texImage2D(s.TEXTURE_2D,0,s.RGBA,s.RGBA,s.UNSIGNED_BYTE,t),this._textureMap.set(t,r),r}delete(t){const e=this._gl;if(!e)return null;let i=null;this.has(t)&&(i=this.get(t),e.deleteTexture(i))}static checkImageSizeSupportedAndLog(t){var e;const i=null!==(e=t.dataset.originalSrc)&&void 0!==e?e:"internal canvas bitmap";return t.width>Ht._MAX_TEXTURE_SIZE||t.height>Ht._MAX_TEXTURE_SIZE?(Ht._LOGGER.error(`The image [${i}] provided to Excalibur is too large for the device's maximum texture size of (${Ht._MAX_TEXTURE_SIZE}x${Ht._MAX_TEXTURE_SIZE}) please resize to an image for excalibur to render properly.\n\nImages will likely render as black rectangles.\n\nRead more here: https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/WebGL_best_practices#understand_system_limits`),!1):((t.width>4096||t.height>4096)&&Ht._LOGGER.warn(`The image [${i}] provided to excalibur is too large may not work on all mobile devices, it is recommended you resize images to a maximum (4096x4096).\n\nImages will likely render as black rectangles on some mobile platforms.\n\nRead more here: https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/WebGL_best_practices#understand_system_limits`),!0)}}Ht._LOGGER=tt.getInstance(),Ht.filtering=Ot.Blended,Ht._MAX_TEXTURE_SIZE=4096;class qt{get width(){return this.image.naturalWidth}get height(){return this.image.naturalHeight}isLoaded(){return this._src||(this._src=this.data.src),!!this._src}get image(){return this.data}constructor(t,e=!1,i){this.path=t,this._logger=tt.getInstance(),this.data=new Image,this._readyFuture=new Et,this.ready=this._readyFuture.promise,this._resource=new Lt(t,"blob",e),this.filtering=i,(t.endsWith(".svg")||t.endsWith(".gif"))&&this._logger.warn(`Image type is not fully supported, you may have mixed results ${t}. Fully supported: jpg, bmp, and png`)}get bustCache(){return this._resource.bustCache}set bustCache(t){this._resource.bustCache=t}async load(){if(this.isLoaded())return this.data;try{let t;if(this.path.includes("data:image/"))t=this.path;else{const e=await this._resource.load();t=URL.createObjectURL(e)}const e=new Image,i=new Et;e.onload=()=>i.resolve(),e.src=t,e.setAttribute("data-original-src",this.path),await i.promise,this.data=e,Ht.checkImageSizeSupportedAndLog(this.data)}catch(t){throw`Error loading ImageSource from path '${this.path}' with error [${t.message}]`}return this.data.setAttribute("filtering",this.filtering),this._readyFuture.resolve(this.data),this.data}toSprite(){return zt.from(this)}unload(){this.data=new Image}}class Vt{constructor(t){this._logger=tt.getInstance(),this.sprites=[];const{sprites:e,rows:i,columns:s}=t;this.sprites=e,this.rows=null!=i?i:1,this.columns=null!=s?s:this.sprites.length}getSprite(t,e){if(t>=this.columns||t<0)return this._logger.warn(`No sprite exists in the SpriteSheet at (${t}, ${e}), x: ${t} should be between 0 and ${this.columns-1}`),null;if(e>=this.rows||e<0)return this._logger.warn(`No sprite exists in the SpriteSheet at (${t}, ${e}), y: ${e} should be between 0 and ${this.rows-1}`),null;const i=t+e*this.columns;return this.sprites[i]}static fromImageSourceWithSourceViews(t){const e=t.sourceViews.map((e=>new zt({image:t.image,sourceView:e})));return new Vt({sprites:e})}static fromImageSource(t){var e;const i=[];t.spacing=null!==(e=t.spacing)&&void 0!==e?e:{};const{image:s,grid:{rows:r,columns:n,spriteWidth:o,spriteHeight:a},spacing:{originOffset:h,margin:l}}=t,A={x:0,y:0,...h},c={x:0,y:0,...l};for(let t=0;tt.clone())),rows:this.rows,columns:this.columns})}}class jt extends Ut{constructor(t){super(t),this._text="",this.alphabet="",this.shadow=null,this.caseInsensitive=!1,this.spacing=0,this._logger=tt.getInstance(),this._alreadyWarnedAlphabet=!1,this._alreadyWarnedSpriteSheet=!1;const{alphabet:e,spriteSheet:i,caseInsensitive:s,spacing:r,shadow:n}=t;this.alphabet=e,this.spriteSheet=i,this.caseInsensitive=null!=s?s:this.caseInsensitive,this.spacing=null!=r?r:this.spacing,this.shadow=null!=n?n:this.shadow}_getCharacterSprites(t){const e=[],i=this.caseInsensitive?t.toLocaleLowerCase():t,s=this.caseInsensitive?this.alphabet.toLocaleLowerCase():this.alphabet;for(let t=0;tt.length>e.length?t:e)),r=this._getCharacterSprites(s);let n=0,o=0;for(const t of r)n+=t.width+this.spacing,o=Math.max(o,t.height);return xt.fromDimension(n,o*i.length,mt.Zero)}_drawImage(t,e,i,s){let r=0,n=0,o=0;const a=this._getLinesFromText(this._text,s);for(const s of a){for(const a of this._getCharacterSprites(s))a.draw(t,e+r,i+n),r+=a.width+this.spacing,o=Math.max(o,a.height);r=0,n+=o}}render(t,e,i,s,r,n){this._text=e;const o=this.measureText(e,n);this.width=o.width,this.height=o.height,this.shadow&&(t.save(),t.translate(this.shadow.offset.x,this.shadow.offset.y),this._preDraw(t,s,r),this._drawImage(t,0,0,n),this._postDraw(t),t.restore()),this._preDraw(t,s,r),this._drawImage(t,0,0,n),this._postDraw(t)}clone(){return new jt({alphabet:this.alphabet,spriteSheet:this.spriteSheet,spacing:this.spacing})}_getLinesFromText(t,e){if(this._cachedText===t&&this._cachedRenderWidth===e)return this._cachedLines;const i=t.split("\n");if(null==e)return i;for(let t=0;te){for(;this.measureText(s).width>e;)r=s[s.length-1]+r,s=s.slice(0,-1);i[t]=s,i[t+1]=r}}return this._cachedText=t,this._cachedLines=i,this._cachedRenderWidth=e,i}}class Yt{constructor(){this.fontSheet="data:image/png;base64,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",this.size=16,this.load()}load(){return this._imageSource=new qt(this.fontSheet),this._imageSource.load().then((()=>{this._spriteSheet=Vt.fromImageSource({image:this._imageSource,grid:{rows:3,columns:16,spriteWidth:16,spriteHeight:16}}),this._spriteFont=new jt({alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ,!'&.\"?-()+ ",caseInsensitive:!0,spriteSheet:this._spriteSheet,spacing:-6})}))}write(t,e,i){this._imageSource.isLoaded()&&this._spriteFont.render(t,e,null,i.x,i.y)}}class Kt{constructor(t,e){this._gl=t,this._texture=e}use(){const t=this._gl;t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,this._texture)}disable(){const t=this._gl;t.bindTexture(t.TEXTURE_2D,null)}}class Wt{constructor(t){this.width=t.width,this.height=t.height,this._gl=t.gl,this._setupFramebuffer()}setResolution(t,e){const i=this._gl;this.width=t,this.height=e,i.bindTexture(i.TEXTURE_2D,this._frameTexture),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,this.width,this.height,0,i.RGBA,i.UNSIGNED_BYTE,null)}get frameBuffer(){return this._frameBuffer}get frameTexture(){return this._frameTexture}_setupFramebuffer(){const t=this._gl;this._frameTexture=t.createTexture(),t.bindTexture(t.TEXTURE_2D,this._frameTexture),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,this.width,this.height,0,t.RGBA,t.UNSIGNED_BYTE,null),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE);const e=t.COLOR_ATTACHMENT0;this._frameBuffer=t.createFramebuffer(),t.bindFramebuffer(t.FRAMEBUFFER,this._frameBuffer),t.framebufferTexture2D(t.FRAMEBUFFER,e,t.TEXTURE_2D,this._frameTexture,0),this.disable()}toRenderSource(){return new Kt(this._gl,this._frameTexture)}use(){const t=this._gl;t.bindFramebuffer(t.FRAMEBUFFER,this._frameBuffer),t.viewport(0,0,this.width,this.height)}disable(){const t=this._gl;t.bindFramebuffer(t.FRAMEBUFFER,null),t.bindTexture(t.TEXTURE_2D,null)}}function Jt(t,e){switch(e){case t.FLOAT:return 4;case t.SHORT:case t.UNSIGNED_SHORT:return 2;case t.BYTE:case t.UNSIGNED_BYTE:default:return 1}}function Xt(t,e){switch(e){case t.LOW_FLOAT:case t.HIGH_FLOAT:case t.FLOAT:return 1;case t.FLOAT_VEC2:return 2;case t.FLOAT_VEC3:return 3;case t.FLOAT_VEC4:return 4;case t.BYTE:case t.UNSIGNED_BYTE:case t.UNSIGNED_SHORT:case t.SHORT:default:return 1}}function Zt(t,e){switch(e){case t.LOW_FLOAT:case t.HIGH_FLOAT:case t.FLOAT:case t.FLOAT_VEC2:case t.FLOAT_VEC3:case t.FLOAT_VEC4:return t.FLOAT;case t.BYTE:return t.BYTE;case t.UNSIGNED_BYTE:return t.UNSIGNED_BYTE;case t.SHORT:return t.SHORT;case t.UNSIGNED_SHORT:return t.UNSIGNED_SHORT;default:return t.FLOAT}}class $t{get compiled(){return this._compiled}constructor(t){this._logger=tt.getInstance(),this.uniforms={},this.attributes={},this._compiled=!1;const{gl:e,vertexSource:i,fragmentSource:s}=t;this._gl=e,this.vertexSource=i,this.fragmentSource=s}use(){this._gl.useProgram(this.program),$t._ACTIVE_SHADER_INSTANCE=this}isCurrentlyBound(){return $t._ACTIVE_SHADER_INSTANCE===this}compile(){const t=this._gl,e=this._compileShader(t,this.vertexSource,t.VERTEX_SHADER),i=this._compileShader(t,this.fragmentSource,t.FRAGMENT_SHADER);this.program=this._createProgram(t,e,i);const s=this.getAttributes();for(const t of s)this.attributes[t.name]=t;const r=this.getUniforms();for(const t of r)this.uniforms[t.name]=t;return this._compiled=!0,this.program}getUniforms(){const t=this._gl,e=t.getProgramParameter(this.program,t.ACTIVE_UNIFORMS),i=[];for(let s=0;sNumber(t)));for(let t=0;t=this._maxLines}hasPendingDraws(){return 0!==this._lineCount}flush(){if(0===this._lineCount)return;const t=this._gl;this._shader.use(),this._layout.use(!0),this._shader.setUniformMatrix("u_matrix",this._context.ortho),t.drawArrays(t.LINES,0,2*this._lineCount),ie.DrawnImagesCount+=this._lineCount,ie.DrawCallCount++,this._vertexIndex=0,this._lineCount=0}}class re{constructor(){this.type="ex.point",this.priority=0,this._maxPoints=10922,this._pointCount=0,this._vertexIndex=0}initialize(t,e){this._gl=t,this._context=e,this._shader=new $t({gl:t,vertexSource:"#version 300 es\r\nin vec2 a_position;\r\nin vec4 a_color;\r\nin float a_size;\r\nout lowp vec4 v_color;\r\nuniform mat4 u_matrix;\r\n\r\nvoid main() {\r\n gl_Position = u_matrix * vec4(a_position, 0.0, 1.0);\r\n gl_PointSize = a_size * 2.0;\r\n v_color = a_color;\r\n}",fragmentSource:'#version 300 es\r\n\r\nprecision mediump float;\r\nin lowp vec4 v_color;\r\n\r\nout vec4 fragColor;\r\n\r\nvoid main() {\r\n float r = 0.0, delta = 0.0, alpha = 1.0;\r\n vec2 cxy = 2.0 * gl_PointCoord - 1.0;\r\n r = dot(cxy, cxy);\r\n\r\n delta = fwidth(r);\r\n alpha = 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r);\r\n // "premultiply" the color by alpha\r\n vec4 color = v_color;\r\n color.a = color.a * alpha;\r\n color.rgb = color.rgb * color.a;\r\n fragColor = color;\r\n}'}),this._shader.compile(),this._shader.use(),this._shader.setUniformMatrix("u_matrix",this._context.ortho),this._buffer=new te({gl:t,size:7*this._maxPoints,type:"dynamic"}),this._layout=new ee({gl:t,shader:this._shader,vertexBuffer:this._buffer,attributes:[["a_position",2],["a_color",4],["a_size",1]]})}draw(t,e,i){this._isFull()&&this.flush(),this._pointCount++;const s=this._context.getTransform(),r=this._context.opacity,n=this._context.snapToPixel,o=s.multiply(t);n&&(o.x=~~(o.x+ge),o.y=~~(o.y+ge));const a=this._buffer.bufferData;a[this._vertexIndex++]=o.x,a[this._vertexIndex++]=o.y,a[this._vertexIndex++]=e.r/255,a[this._vertexIndex++]=e.g/255,a[this._vertexIndex++]=e.b/255,a[this._vertexIndex++]=e.a*r,a[this._vertexIndex++]=i*Math.max(s.getScaleX(),s.getScaleY())}_isFull(){return this._pointCount>=this._maxPoints}hasPendingDraws(){return 0!==this._pointCount}flush(){if(0===this._pointCount)return;const t=this._gl;this._shader.use(),this._layout.use(!0),this._shader.setUniformMatrix("u_matrix",this._context.ortho),t.drawArrays(t.POINTS,0,this._pointCount),ie.DrawnImagesCount+=this._pointCount,ie.DrawCallCount++,this._pointCount=0,this._vertexIndex=0}}class ne{constructor(t){this._gl=t,this._shader=new $t({gl:t,vertexSource:"#version 300 es\r\nin vec2 a_position;\r\n\r\nin vec2 a_texcoord;\r\nout vec2 v_texcoord;\r\n\r\nvoid main() {\r\n gl_Position = vec4(a_position, 0.0, 1.0);\r\n\r\n // Pass the texcoord to the fragment shader.\r\n v_texcoord = a_texcoord;\r\n}",fragmentSource:"#version 300 es\r\nprecision mediump float;\r\n\r\n// Passed in from the vertex shader.\r\nin vec2 v_texcoord;\r\n\r\n// The texture.\r\nuniform sampler2D u_texture;\r\n\r\nout vec4 fragColor;\r\n\r\nvoid main() {\r\n fragColor = texture(u_texture, v_texcoord);\r\n}"}),this._shader.compile(),this._buffer=new te({gl:t,type:"static",data:new Float32Array([-1,-1,0,0,-1,1,0,1,1,-1,1,0,1,-1,1,0,-1,1,0,1,1,1,1,1])}),this._layout=new ee({gl:t,shader:this._shader,vertexBuffer:this._buffer,attributes:[["a_position",2],["a_texcoord",2]]}),this._buffer.upload()}renderWithPostProcessor(t){const e=this._gl;t.getShader().use(),t.getLayout().use(),e.drawArrays(e.TRIANGLES,0,6)}renderToScreen(){const t=this._gl;this._shader.use(),this._layout.use(),t.drawArrays(t.TRIANGLES,0,6)}}class oe{constructor(t,e,i){this._logger=tt.getInstance(),this._gl=t,this.buffer=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.buffer);const s=6*e;if(i){const i=65535,r=Math.floor((i-1)/4);this.bufferGlType=t.UNSIGNED_SHORT,this.bufferData=new Uint16Array(s),e>r&&this._logger.warn(`Total quads exceeds hardware index buffer limit (uint16), max(${r}) requested quads(${e})`)}else this.bufferData=new Uint32Array(s);let r=0;for(let t=0;te))),this._buffer=new te({gl:t,size:40*this._maxImages,type:"dynamic"}),this._layout=new ee({gl:t,shader:this._shader,vertexBuffer:this._buffer,attributes:[["a_position",2],["a_opacity",1],["a_texcoord",2],["a_textureIndex",1],["a_tint",4]]}),this._quads=new oe(t,this._maxImages,!0)}_transformFragmentSource(t,e){let i=t.replace("%%count%%",e.toString()),s="";for(let t=0;t=this._maxImages||this._textures.length>=this._maxTextures}draw(t,e,i,s,r,n,o,a,h){var l,A,c,d;this._isFull()&&this.flush(),this._imageCount++,this._addImageAsTexture(t);let u=(null==t?void 0:t.width)||s||0,g=(null==t?void 0:t.height)||r||0,p=[0,0,null!==(l=null!=s?s:null==t?void 0:t.width)&&void 0!==l?l:0,null!==(A=null!=r?r:null==t?void 0:t.height)&&void 0!==A?A:0],_=[null!=e?e:1,null!=i?i:1];void 0!==n&&void 0!==o&&void 0!==a&&void 0!==h&&(p=[null!=e?e:1,null!=i?i:1,null!==(c=null!=s?s:null==t?void 0:t.width)&&void 0!==c?c:0,null!==(d=null!=r?r:null==t?void 0:t.height)&&void 0!==d?d:0],_=[n,o],u=a,g=h),e=p[0],i=p[1];const f=p[2],m=p[3],C=this._context.getTransform(),y=this._context.opacity,v=this._context.snapToPixel;let w=Ct(_[0],_[1]),I=Ct(_[0]+u,_[1]),x=Ct(_[0],_[1]+g),E=Ct(_[0]+u,_[1]+g);w=C.multiply(w),I=C.multiply(I),x=C.multiply(x),E=C.multiply(E),v&&(w.x=~~(w.x+ge),w.y=~~(w.y+ge),I.x=~~(I.x+ge),I.y=~~(I.y+ge),x.x=~~(x.x+ge),x.y=~~(x.y+ge),E.x=~~(E.x+ge),E.y=~~(E.y+ge));const B=this._context.tint,b=this._getTextureIdForImage(t),Q=t.width||u,S=t.height||g,D=e/Q,T=i/S,F=(e+f-.01)/Q,k=(i+m-.01)/S,P=this._layout.vertexBuffer.bufferData;P[this._vertexIndex++]=w.x,P[this._vertexIndex++]=w.y,P[this._vertexIndex++]=y,P[this._vertexIndex++]=D,P[this._vertexIndex++]=T,P[this._vertexIndex++]=b,P[this._vertexIndex++]=B.r/255,P[this._vertexIndex++]=B.g/255,P[this._vertexIndex++]=B.b/255,P[this._vertexIndex++]=B.a,P[this._vertexIndex++]=x.x,P[this._vertexIndex++]=x.y,P[this._vertexIndex++]=y,P[this._vertexIndex++]=D,P[this._vertexIndex++]=k,P[this._vertexIndex++]=b,P[this._vertexIndex++]=B.r/255,P[this._vertexIndex++]=B.g/255,P[this._vertexIndex++]=B.b/255,P[this._vertexIndex++]=B.a,P[this._vertexIndex++]=I.x,P[this._vertexIndex++]=I.y,P[this._vertexIndex++]=y,P[this._vertexIndex++]=F,P[this._vertexIndex++]=T,P[this._vertexIndex++]=b,P[this._vertexIndex++]=B.r/255,P[this._vertexIndex++]=B.g/255,P[this._vertexIndex++]=B.b/255,P[this._vertexIndex++]=B.a,P[this._vertexIndex++]=E.x,P[this._vertexIndex++]=E.y,P[this._vertexIndex++]=y,P[this._vertexIndex++]=F,P[this._vertexIndex++]=k,P[this._vertexIndex++]=b,P[this._vertexIndex++]=B.r/255,P[this._vertexIndex++]=B.g/255,P[this._vertexIndex++]=B.b/255,P[this._vertexIndex++]=B.a}hasPendingDraws(){return 0!==this._imageCount}flush(){if(0===this._imageCount)return;const t=this._gl;this._shader.use(),this._layout.use(!0,40*this._imageCount),this._shader.setUniformMatrix("u_matrix",this._context.ortho),this._bindTextures(t),this._quads.bind(),t.drawElements(t.TRIANGLES,6*this._imageCount,this._quads.bufferGlType,0),ie.DrawnImagesCount+=this._imageCount,ie.DrawCallCount++,this._imageCount=0,this._vertexIndex=0,this._textures.length=0}}class he{constructor(){this.type="ex.rectangle",this.priority=0,this._maxRectangles=10922,this._rectangleCount=0,this._vertexIndex=0}initialize(t,e){this._gl=t,this._context=e,this._shader=new $t({gl:t,fragmentSource:"#version 300 es\r\n\r\nprecision mediump float;\r\n\r\n// UV coord\r\nin vec2 v_uv;\r\n\r\nin vec2 v_size; // in pixels\r\n\r\n// Color coord to blend with image\r\nin lowp vec4 v_color;\r\n\r\n// Stroke color if used\r\nin lowp vec4 v_strokeColor;\r\n\r\n// Stroke thickness if used\r\nin lowp float v_strokeThickness; // in pixels\r\n\r\n// Opacity\r\nin float v_opacity;\r\n\r\nout vec4 fragColor;\r\n\r\nvoid main() {\r\n // modified from https://stackoverflow.com/questions/59197671/glsl-rounded-rectangle-with-variable-border\r\n vec2 uv = v_uv;\r\n vec2 fragCoord = uv * v_size;\r\n float maxX = v_size.x - v_strokeThickness;\r\n float minX = v_strokeThickness;\r\n float maxY = v_size.y - v_strokeThickness;\r\n float minY = v_strokeThickness;\r\n\r\n if (fragCoord.x < maxX && fragCoord.x > minX &&\r\n fragCoord.y < maxY && fragCoord.y > minY) {\r\n fragColor = v_color;\r\n } else {\r\n fragColor = v_strokeColor;\r\n }\r\n fragColor.a *= v_opacity;\r\n fragColor.rgb *= fragColor.a;\r\n\r\n // vec2 v2CenteredPos = abs(fragCoord - v_size.xy / 2.0);\r\n // vec2 v2HalfShapeSizePx = v_size.xy/2.0 - v_strokeThickness/2.0;\r\n\r\n // float fHalfBorderDist = 0.0;\r\n // float fHalfBorderThickness = 0.0;\r\n\r\n // if (fragCoord.x > max(v_radius, v_strokeThickness) && \r\n // fragCoord.x < v_size.x - max(v_radius, v_strokeThickness))\r\n // {\r\n // fHalfBorderDist = v2CenteredPos.y - v2HalfShapeSizePx.y;\r\n // fHalfBorderThickness = v_strokeThickness / 2.0;\r\n // }\r\n // else if (fragCoord.y > max(v_radius, v_strokeThickness) && \r\n // fragCoord.y < v_size.y - max(v_radius, v_strokeThickness))\r\n // {\r\n // fHalfBorderDist = v2CenteredPos.x - v2HalfShapeSizePx.x;\r\n // fHalfBorderThickness = v_strokeThickness / 2.0;\r\n // }\r\n // else\r\n // {\r\n // vec2 edgeVec = max(vec2(0.0), v_radius - vec2(\r\n // uv.x > 0.5 ? v_size.x - fragCoord.x : fragCoord.x,\r\n // uv.y > 0.5 ? v_size.y - fragCoord.y : fragCoord.y));\r\n \r\n // float ellipse_ab = v_radius-v_strokeThickness;\r\n // vec2 ellipse_isect = (v_strokeThickness > v_radius || v_strokeThickness > v_radius) ? vec2(0.0) :\r\n // edgeVec.xy * ellipse_ab*ellipse_ab / length(ellipse_ab*edgeVec.yx); \r\n \r\n // fHalfBorderThickness = (v_radius - length(ellipse_isect)) / 2.0;\r\n // fHalfBorderDist = length(edgeVec) - (v_radius - fHalfBorderThickness);\r\n // }\r\n\r\n // vec4 v4FromColor = v_strokeColor;\r\n // v4FromColor.rgb *= v4FromColor.a;\r\n // vec4 v4ToColor = vec4(0.0); // background color is transparent\r\n // if (fHalfBorderDist < 0.0) {\r\n // v4ToColor = v_color;\r\n // v4ToColor.rgb *= v4ToColor.a;\r\n // }\r\n\r\n // float mixPct = abs(fHalfBorderDist) - fHalfBorderThickness;\r\n\r\n // vec4 finalColor = mix(v4FromColor, v4ToColor, mixPct);\r\n // gl_FragColor = finalColor;\r\n}",vertexSource:"#version 300 es\r\nin vec2 a_position;\r\n\r\n// UV coordinate\r\nin vec2 a_uv;\r\nout vec2 v_uv;\r\n\r\nin vec2 a_size;\r\nout vec2 v_size;\r\n\r\n// Opacity \r\nin float a_opacity;\r\nout float v_opacity;\r\n\r\nin vec4 a_color;\r\nout vec4 v_color;\r\n\r\nin vec4 a_strokeColor;\r\nout vec4 v_strokeColor;\r\n\r\nin float a_strokeThickness;\r\nout float v_strokeThickness;\r\n\r\nuniform mat4 u_matrix;\r\n\r\n\r\nvoid main() {\r\n // Set the vertex position using the ortho transform matrix\r\n gl_Position = u_matrix * vec4(a_position, 0.0, 1.0);\r\n\r\n // Pass through UV coords\r\n v_uv = a_uv;\r\n // Pass through size\r\n v_size = a_size;\r\n // Pass through the Opacity to the fragment shader\r\n v_opacity = a_opacity;\r\n // Pass through the color to the fragment shader\r\n v_color = a_color;\r\n // Pass through the stroke color to the fragment shader\r\n v_strokeColor = a_strokeColor;\r\n // Pass through the stroke thickenss to the fragment shader\r\n v_strokeThickness = a_strokeThickness;\r\n}"}),this._shader.compile(),this._shader.use(),this._shader.setUniformMatrix("u_matrix",e.ortho),this._buffer=new te({gl:t,size:64*this._maxRectangles,type:"dynamic"}),this._layout=new ee({gl:t,shader:this._shader,vertexBuffer:this._buffer,attributes:[["a_position",2],["a_uv",2],["a_size",2],["a_opacity",1],["a_color",4],["a_strokeColor",4],["a_strokeThickness",1]]}),this._quads=new oe(t,this._maxRectangles,!0)}_isFull(){return this._rectangleCount>=this._maxRectangles}draw(...t){t[0]instanceof mt&&t[1]instanceof mt?this.drawLine.apply(this,t):this.drawRectangle.apply(this,t)}drawLine(t,e,i,s=1){this._isFull()&&this.flush(),this._rectangleCount++;const r=this._context.getTransform(),n=this._context.opacity,o=this._context.snapToPixel,a=e.sub(t),h=a.size,l=a.normalize().perpendicular(),A=s/2,c=r.multiply(l.scale(A).add(t)),d=r.multiply(l.scale(-A).add(t)),u=r.multiply(l.scale(A).add(e)),g=r.multiply(l.scale(-A).add(e));o&&(c.x=~~(c.x+ge),c.y=~~(c.y+ge),u.x=~~(u.x+ge),u.y=~~(u.y+ge),d.x=~~(d.x+ge),d.y=~~(d.y+ge),g.x=~~(g.x+ge),g.y=~~(g.y+ge));const p=yt.Transparent,_=this._layout.vertexBuffer.bufferData;_[this._vertexIndex++]=c.x,_[this._vertexIndex++]=c.y,_[this._vertexIndex++]=0,_[this._vertexIndex++]=0,_[this._vertexIndex++]=h,_[this._vertexIndex++]=s,_[this._vertexIndex++]=n,_[this._vertexIndex++]=i.r/255,_[this._vertexIndex++]=i.g/255,_[this._vertexIndex++]=i.b/255,_[this._vertexIndex++]=i.a,_[this._vertexIndex++]=p.r/255,_[this._vertexIndex++]=p.g/255,_[this._vertexIndex++]=p.b/255,_[this._vertexIndex++]=p.a,_[this._vertexIndex++]=0,_[this._vertexIndex++]=d.x,_[this._vertexIndex++]=d.y,_[this._vertexIndex++]=0,_[this._vertexIndex++]=1,_[this._vertexIndex++]=h,_[this._vertexIndex++]=s,_[this._vertexIndex++]=n,_[this._vertexIndex++]=i.r/255,_[this._vertexIndex++]=i.g/255,_[this._vertexIndex++]=i.b/255,_[this._vertexIndex++]=i.a,_[this._vertexIndex++]=p.r/255,_[this._vertexIndex++]=p.g/255,_[this._vertexIndex++]=p.b/255,_[this._vertexIndex++]=p.a,_[this._vertexIndex++]=0,_[this._vertexIndex++]=u.x,_[this._vertexIndex++]=u.y,_[this._vertexIndex++]=1,_[this._vertexIndex++]=0,_[this._vertexIndex++]=h,_[this._vertexIndex++]=s,_[this._vertexIndex++]=n,_[this._vertexIndex++]=i.r/255,_[this._vertexIndex++]=i.g/255,_[this._vertexIndex++]=i.b/255,_[this._vertexIndex++]=i.a,_[this._vertexIndex++]=p.r/255,_[this._vertexIndex++]=p.g/255,_[this._vertexIndex++]=p.b/255,_[this._vertexIndex++]=p.a,_[this._vertexIndex++]=0,_[this._vertexIndex++]=g.x,_[this._vertexIndex++]=g.y,_[this._vertexIndex++]=1,_[this._vertexIndex++]=1,_[this._vertexIndex++]=h,_[this._vertexIndex++]=s,_[this._vertexIndex++]=n,_[this._vertexIndex++]=i.r/255,_[this._vertexIndex++]=i.g/255,_[this._vertexIndex++]=i.b/255,_[this._vertexIndex++]=i.a,_[this._vertexIndex++]=p.r/255,_[this._vertexIndex++]=p.g/255,_[this._vertexIndex++]=p.b/255,_[this._vertexIndex++]=p.a,_[this._vertexIndex++]=0}drawRectangle(t,e,i,s,r=yt.Transparent,n=0){this._isFull()&&this.flush(),this._rectangleCount++;const o=this._context.getTransform(),a=this._context.opacity,h=this._context.snapToPixel,l=o.multiply(t.add(Ct(0,0))),A=o.multiply(t.add(Ct(e,0))),c=o.multiply(t.add(Ct(e,i))),d=o.multiply(t.add(Ct(0,i)));h&&(l.x=~~(l.x+ge),l.y=~~(l.y+ge),A.x=~~(A.x+ge),A.y=~~(A.y+ge),d.x=~~(d.x+ge),d.y=~~(d.y+ge),c.x=~~(c.x+ge),c.y=~~(c.y+ge));const u=this._layout.vertexBuffer.bufferData;u[this._vertexIndex++]=l.x,u[this._vertexIndex++]=l.y,u[this._vertexIndex++]=0,u[this._vertexIndex++]=0,u[this._vertexIndex++]=e,u[this._vertexIndex++]=i,u[this._vertexIndex++]=a,u[this._vertexIndex++]=s.r/255,u[this._vertexIndex++]=s.g/255,u[this._vertexIndex++]=s.b/255,u[this._vertexIndex++]=s.a,u[this._vertexIndex++]=r.r/255,u[this._vertexIndex++]=r.g/255,u[this._vertexIndex++]=r.b/255,u[this._vertexIndex++]=r.a,u[this._vertexIndex++]=n,u[this._vertexIndex++]=d.x,u[this._vertexIndex++]=d.y,u[this._vertexIndex++]=0,u[this._vertexIndex++]=1,u[this._vertexIndex++]=e,u[this._vertexIndex++]=i,u[this._vertexIndex++]=a,u[this._vertexIndex++]=s.r/255,u[this._vertexIndex++]=s.g/255,u[this._vertexIndex++]=s.b/255,u[this._vertexIndex++]=s.a,u[this._vertexIndex++]=r.r/255,u[this._vertexIndex++]=r.g/255,u[this._vertexIndex++]=r.b/255,u[this._vertexIndex++]=r.a,u[this._vertexIndex++]=n,u[this._vertexIndex++]=A.x,u[this._vertexIndex++]=A.y,u[this._vertexIndex++]=1,u[this._vertexIndex++]=0,u[this._vertexIndex++]=e,u[this._vertexIndex++]=i,u[this._vertexIndex++]=a,u[this._vertexIndex++]=s.r/255,u[this._vertexIndex++]=s.g/255,u[this._vertexIndex++]=s.b/255,u[this._vertexIndex++]=s.a,u[this._vertexIndex++]=r.r/255,u[this._vertexIndex++]=r.g/255,u[this._vertexIndex++]=r.b/255,u[this._vertexIndex++]=r.a,u[this._vertexIndex++]=n,u[this._vertexIndex++]=c.x,u[this._vertexIndex++]=c.y,u[this._vertexIndex++]=1,u[this._vertexIndex++]=1,u[this._vertexIndex++]=e,u[this._vertexIndex++]=i,u[this._vertexIndex++]=a,u[this._vertexIndex++]=s.r/255,u[this._vertexIndex++]=s.g/255,u[this._vertexIndex++]=s.b/255,u[this._vertexIndex++]=s.a,u[this._vertexIndex++]=r.r/255,u[this._vertexIndex++]=r.g/255,u[this._vertexIndex++]=r.b/255,u[this._vertexIndex++]=r.a,u[this._vertexIndex++]=n}hasPendingDraws(){return 0!==this._rectangleCount}flush(){if(0===this._rectangleCount)return;const t=this._gl;this._shader.use(),this._layout.use(!0),this._shader.setUniformMatrix("u_matrix",this._context.ortho),this._quads.bind(),t.drawElements(t.TRIANGLES,6*this._rectangleCount,this._quads.bufferGlType,0),ie.DrawnImagesCount+=this._rectangleCount,ie.DrawCallCount++,this._rectangleCount=0,this._vertexIndex=0}}class le{constructor(){this.type="ex.circle",this.priority=0,this._maxCircles=10922,this._circleCount=0,this._vertexIndex=0}initialize(t,e){this._gl=t,this._context=e,this._shader=new $t({gl:t,fragmentSource:"#version 300 es\r\nprecision highp float;\r\n\r\n// UV coord\r\nin vec2 v_uv;\r\n\r\n// Color coord to blend with image\r\nin lowp vec4 v_color;\r\n\r\n// Stroke color if used\r\nin lowp vec4 v_strokeColor;\r\n\r\n// Stroke thickness if used\r\nin lowp float v_strokeThickness;\r\n\r\n// Opacity\r\nin float v_opacity;\r\n\r\nout vec4 fragColor;\r\n\r\nvoid main() {\r\n // make (0, 0) the center the uv \r\n vec2 uv = v_uv * 2.0 - 1.0;\r\n\r\n vec4 color = v_color;\r\n vec4 strokeColor = v_strokeColor;\r\n\r\n // circle border is at radius 1.0 \r\n // dist is > 0 when inside the circle \r\n float d = length(uv);\r\n float dist = 1.0 - length(uv);\r\n\r\n // Fade based on fwidth\r\n float fade = fwidth(dot(uv, uv));\r\n\r\n // if dist is greater than 0 step to 1;\r\n // when we cross this 0 threshold add a smooth fade\r\n float fill = smoothstep(-fade/2.0, fade/2.0, dist);\r\n\r\n // if dist is greater than the stroke thickness step to 1\r\n float stroke = 1.0 - smoothstep(v_strokeThickness, v_strokeThickness + fade, dist);\r\n\r\n strokeColor.a *= fill * stroke;\r\n strokeColor.rgb *= strokeColor.a;\r\n\r\n color.a *= fill * (1.0 - stroke);\r\n color.rgb *= color.a;\r\n\r\n vec4 finalColor = mix(vec4(0.0), (color + strokeColor), fill);\r\n finalColor.rgb = finalColor.rgb * v_opacity;\r\n finalColor.a = finalColor.a * v_opacity;\r\n fragColor = finalColor;\r\n}",vertexSource:"#version 300 es\r\nin vec2 a_position;\r\n\r\n// UV coordinate\r\nin vec2 a_uv;\r\nout vec2 v_uv;\r\n\r\n// Opacity \r\nin float a_opacity;\r\nout float v_opacity;\r\n\r\nin vec4 a_color;\r\nout vec4 v_color;\r\n\r\nin vec4 a_strokeColor;\r\nout vec4 v_strokeColor;\r\n\r\nin float a_strokeThickness;\r\nout float v_strokeThickness;\r\n\r\nuniform mat4 u_matrix;\r\n\r\n\r\nvoid main() {\r\n // Set the vertex position using the ortho transform matrix\r\n gl_Position = u_matrix * vec4(a_position, 0.0, 1.0);\r\n\r\n // Pass through UV coords\r\n v_uv = a_uv;\r\n // Pass through the Opacity to the fragment shader\r\n v_opacity = a_opacity;\r\n // Pass through the color to the fragment shader\r\n v_color = a_color;\r\n // Pass through the stroke color to the fragment shader\r\n v_strokeColor = a_strokeColor;\r\n // Pass through the stroke thickenss to the fragment shader\r\n v_strokeThickness = a_strokeThickness;\r\n}"}),this._shader.compile(),this._shader.use(),this._shader.setUniformMatrix("u_matrix",e.ortho),this._buffer=new te({gl:t,size:56*this._maxCircles,type:"dynamic"}),this._layout=new ee({gl:t,shader:this._shader,vertexBuffer:this._buffer,attributes:[["a_position",2],["a_uv",2],["a_opacity",1],["a_color",4],["a_strokeColor",4],["a_strokeThickness",1]]}),this._quads=new oe(t,this._maxCircles,!0)}_isFull(){return this._circleCount>=this._maxCircles}draw(t,e,i,s=yt.Transparent,r=0){this._isFull()&&this.flush(),this._circleCount++;const n=this._context.getTransform(),o=this._context.opacity,a=this._context.snapToPixel,h=n.multiply(t.add(Ct(-e,-e))),l=n.multiply(t.add(Ct(e,-e))),A=n.multiply(t.add(Ct(e,e))),c=n.multiply(t.add(Ct(-e,e)));a&&(h.x=~~(h.x+ge),h.y=~~(h.y+ge),l.x=~~(l.x+ge),l.y=~~(l.y+ge),c.x=~~(c.x+ge),c.y=~~(c.y+ge),A.x=~~(A.x+ge),A.y=~~(A.y+ge));const d=this._layout.vertexBuffer.bufferData;d[this._vertexIndex++]=h.x,d[this._vertexIndex++]=h.y,d[this._vertexIndex++]=0,d[this._vertexIndex++]=0,d[this._vertexIndex++]=o,d[this._vertexIndex++]=i.r/255,d[this._vertexIndex++]=i.g/255,d[this._vertexIndex++]=i.b/255,d[this._vertexIndex++]=i.a,d[this._vertexIndex++]=s.r/255,d[this._vertexIndex++]=s.g/255,d[this._vertexIndex++]=s.b/255,d[this._vertexIndex++]=s.a,d[this._vertexIndex++]=r/e,d[this._vertexIndex++]=c.x,d[this._vertexIndex++]=c.y,d[this._vertexIndex++]=0,d[this._vertexIndex++]=1,d[this._vertexIndex++]=o,d[this._vertexIndex++]=i.r/255,d[this._vertexIndex++]=i.g/255,d[this._vertexIndex++]=i.b/255,d[this._vertexIndex++]=i.a,d[this._vertexIndex++]=s.r/255,d[this._vertexIndex++]=s.g/255,d[this._vertexIndex++]=s.b/255,d[this._vertexIndex++]=s.a,d[this._vertexIndex++]=r/e,d[this._vertexIndex++]=l.x,d[this._vertexIndex++]=l.y,d[this._vertexIndex++]=1,d[this._vertexIndex++]=0,d[this._vertexIndex++]=o,d[this._vertexIndex++]=i.r/255,d[this._vertexIndex++]=i.g/255,d[this._vertexIndex++]=i.b/255,d[this._vertexIndex++]=i.a,d[this._vertexIndex++]=s.r/255,d[this._vertexIndex++]=s.g/255,d[this._vertexIndex++]=s.b/255,d[this._vertexIndex++]=s.a,d[this._vertexIndex++]=r/e,d[this._vertexIndex++]=A.x,d[this._vertexIndex++]=A.y,d[this._vertexIndex++]=1,d[this._vertexIndex++]=1,d[this._vertexIndex++]=o,d[this._vertexIndex++]=i.r/255,d[this._vertexIndex++]=i.g/255,d[this._vertexIndex++]=i.b/255,d[this._vertexIndex++]=i.a,d[this._vertexIndex++]=s.r/255,d[this._vertexIndex++]=s.g/255,d[this._vertexIndex++]=s.b/255,d[this._vertexIndex++]=s.a,d[this._vertexIndex++]=r/e}hasPendingDraws(){return 0!==this._circleCount}flush(){if(0===this._circleCount)return;const t=this._gl;this._shader.use(),this._layout.use(!0),this._shader.setUniformMatrix("u_matrix",this._context.ortho),this._quads.bind(),t.drawElements(t.TRIANGLES,6*this._circleCount,this._quads.bufferGlType,0),ie.DrawnImagesCount+=this._circleCount,ie.DrawCallCount++,this._circleCount=0,this._vertexIndex=0}}class Ae{constructor(t,e,i=100){this.builder=t,this.recycler=e,this.maxObjects=i,this.totalAllocations=0,this.index=0,this.objects=[],this.disableWarnings=!1,this._logger=tt.getInstance()}preallocate(){for(let t=0;t4096||t.height>4096)&&(e=!1),e}constructor(t){this._logger=tt.getInstance(),this._renderers=new Map,this._isDrawLifecycle=!1,this.useDrawSorting=!0,this._drawCallPool=new Ae((()=>new ce),(t=>(t.priority=0,t.z=0,t.renderer=void 0,t.args=void 0,t)),4e3),this._drawCalls=[],this._postProcessTargets=[],this._postprocessors=[],this._transform=new Pt,this._state=new Rt,this.snapToPixel=!1,this.smoothing=!1,this.backgroundColor=yt.ExcaliburBlue,this._alreadyWarnedDrawLifecycle=!1,this.debug=new pe(this),this._totalPostProcessorTime=0;const{canvasElement:e,enableTransparency:i,smoothing:s,snapToPixel:r,backgroundColor:n,useDrawSorting:o}=t;if(this.__gl=e.getContext("webgl2",{antialias:null!=s?s:this.smoothing,premultipliedAlpha:!1,alpha:null==i||i,depth:!0,powerPreference:"high-performance"}),!this.__gl)throw Error("Failed to retrieve webgl context from browser");this.textureLoader=new Ht(this.__gl),this.snapToPixel=null!=r?r:this.snapToPixel,this.smoothing=null!=s?s:this.smoothing,this.backgroundColor=null!=n?n:this.backgroundColor,this.useDrawSorting=null!=o?o:this.useDrawSorting,this._drawCallPool.disableWarnings=!0,this._drawCallPool.preallocate(),this._init()}_init(){const t=this.__gl;this._ortho=Ft.ortho(0,t.canvas.width,t.canvas.height,0,400,-400),t.viewport(0,0,t.canvas.width,t.canvas.height),t.clearColor(this.backgroundColor.r/255,this.backgroundColor.g/255,this.backgroundColor.b/255,this.backgroundColor.a),t.clear(t.COLOR_BUFFER_BIT),t.enable(t.BLEND),t.blendEquation(t.FUNC_ADD),t.blendFunc(t.ONE,t.ONE_MINUS_SRC_ALPHA),t.blendEquationSeparate(t.FUNC_ADD,t.FUNC_ADD),t.blendFuncSeparate(t.ONE,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA),this.register(new ae),this.register(new ue),this.register(new he),this.register(new le),this.register(new re),this.register(new se),this._screenRenderer=new ne(t),this._renderTarget=new Wt({gl:t,width:t.canvas.width,height:t.canvas.height}),this._postProcessTargets=[new Wt({gl:t,width:t.canvas.width,height:t.canvas.height}),new Wt({gl:t,width:t.canvas.width,height:t.canvas.height})]}register(t){this._renderers.set(t.type,t),t.initialize(this.__gl,this)}get(t){return this._renderers.get(t)}_isCurrentRenderer(t){return!this._currentRenderer||this._currentRenderer===t}beginDrawLifecycle(){this._isDrawLifecycle=!0}endDrawLifecycle(){this._isDrawLifecycle=!1}draw(t,...e){this._isDrawLifecycle||this._alreadyWarnedDrawLifecycle||(this._logger.warn("Attempting to draw outside the the drawing lifecycle (preDraw/postDraw) is not supported and is a source of bugs/errors.\nIf you want to do custom drawing, use Actor.graphics, or any onPreDraw or onPostDraw handler."),this._alreadyWarnedDrawLifecycle=!0);const i=this._renderers.get(t);if(!i)throw Error(`No renderer with name ${t} has been registered`);if(this.useDrawSorting){const s=this._drawCallPool.get();s.z=this._state.current.z,s.priority=i.priority,s.renderer=t,this.getTransform().clone(s.transform),s.state.z=this._state.current.z,s.state.opacity=this._state.current.opacity,s.state.tint=this._state.current.tint,s.state.material=this._state.current.material,s.args=e,this._drawCalls.push(s)}else this._currentRenderer||(this._currentRenderer=i),this._isCurrentRenderer(i)||this._currentRenderer.flush(),i.draw(...e),this._currentRenderer=i}resetTransform(){this._transform.current=kt.identity()}updateViewport(t){const e=this.__gl;this._ortho=this._ortho=Ft.ortho(0,t.width,t.height,0,400,-400),this._renderTarget.setResolution(e.canvas.width,e.canvas.height),this._postProcessTargets[0].setResolution(e.canvas.width,e.canvas.height),this._postProcessTargets[1].setResolution(e.canvas.width,e.canvas.height)}drawImage(t,e,i,s,r,n,o,a,h){if(0!==s&&0!==r&&0!==a&&0!==h&&0!==t.width&&0!==t.height)return t?void(this._state.current.material?this.draw("ex.material",t,e,i,s,r,n,o,a,h):this.draw("ex.image",t,e,i,s,r,n,o,a,h)):(tt.getInstance().warn("Cannot draw a null or undefined image"),void(console.trace&&console.trace()))}drawLine(t,e,i,s=1){this.draw("ex.rectangle",t,e,i,s)}drawRectangle(t,e,i,s,r,n){this.draw("ex.rectangle",t,e,i,s,r,n)}drawCircle(t,e,i,s,r){this.draw("ex.circle",t,e,i,s,r)}save(){this._transform.save(),this._state.save()}restore(){this._transform.restore(),this._state.restore()}translate(t,e){this._transform.translate(this.snapToPixel?~~(t+ge):t,this.snapToPixel?~~(e+ge):e)}rotate(t){this._transform.rotate(t)}scale(t,e){this._transform.scale(t,e)}transform(t){this._transform.current=t}getTransform(){return this._transform.current}multiply(t){this._transform.current.multiply(t,this._transform.current)}addPostProcessor(t){this._postprocessors.push(t),t.initialize(this.__gl)}removePostProcessor(t){const e=this._postprocessors.indexOf(t);-1!==e&&this._postprocessors.splice(e,1)}clearPostProcessors(){this._postprocessors.length=0}updatePostProcessors(t){for(const e of this._postprocessors){const i=e.getShader();i.use();const s=i.getUniforms();this._totalPostProcessorTime+=t,s.find((t=>"u_time_ms"===t.name))&&i.setUniformFloat("u_time_ms",this._totalPostProcessorTime),s.find((t=>"u_elapsed_ms"===t.name))&&i.setUniformFloat("u_elapsed_ms",t),s.find((t=>"u_resolution"===t.name))&&i.setUniformFloatVector("u_resolution",Ct(this.width,this.height)),e.onUpdate&&e.onUpdate(t)}}set material(t){this._state.current.material=t}get material(){return this._state.current.material}createMaterial(t){const e=new de(t);return e.initialize(this.__gl,this),e}createShader(t){const e=this.__gl,{vertexSource:i,fragmentSource:s}=t,r=new $t({gl:e,vertexSource:i,fragmentSource:s});return r.compile(),r}clear(){const t=this.__gl;this._renderTarget.use(),t.clearColor(this.backgroundColor.r/255,this.backgroundColor.g/255,this.backgroundColor.b/255,this.backgroundColor.a),t.clear(t.COLOR_BUFFER_BIT)}flush(){const t=this.__gl;if(this._renderTarget.use(),this.useDrawSorting){const t=new Map;for(const[e]of this._renderers){const i=this._drawCalls.findIndex((t=>t.renderer===e));t.set(e,i)}this._drawCalls.sort(((e,i)=>{const s=e.z-i.z,r=t.get(e.renderer)-t.get(i.renderer),n=e.priority-i.priority;return 0===s?0===n?r:n:s}));const e=this._transform.current,i=this._state.current;if(this._drawCalls.length){let t=this._drawCalls[0].renderer,e=this._renderers.get(t);for(let i=0;ivoid 0!==t)).map((t=>"number"==typeof t&&this.snapToPixel?~~t:t));this.__ctx.drawImage.apply(this.__ctx,l),ie.DrawCallCount++,ie.DrawnImagesCount=1}drawLine(t,e,i,s=1){this.__ctx.save(),this.__ctx.beginPath(),this.__ctx.strokeStyle=i.toString(),this.__ctx.moveTo(this.snapToPixel?~~(t.x+fe):t.x,this.snapToPixel?~~(t.y+fe):t.y),this.__ctx.lineTo(this.snapToPixel?~~(e.x+fe):e.x,this.snapToPixel?~~(e.y+fe):e.y),this.__ctx.lineWidth=s,this.__ctx.stroke(),this.__ctx.closePath(),this.__ctx.restore()}drawRectangle(t,e,i,s){this.__ctx.save(),this.__ctx.fillStyle=s.toString(),this.__ctx.fillRect(this.snapToPixel?~~(t.x+fe):t.x,this.snapToPixel?~~(t.y+fe):t.y,this.snapToPixel?~~(e+fe):e,this.snapToPixel?~~(i+fe):i),this.__ctx.restore()}drawCircle(t,e,i,s,r){this.__ctx.save(),this.__ctx.beginPath(),s&&(this.__ctx.strokeStyle=s.toString()),r&&(this.__ctx.lineWidth=r),this.__ctx.fillStyle=i.toString(),this.__ctx.arc(this.snapToPixel?~~(t.x+fe):t.x,this.snapToPixel?~~(t.y+fe):t.y,e,0,2*Math.PI),this.__ctx.fill(),s&&this.__ctx.stroke(),this.__ctx.closePath(),this.__ctx.restore()}save(){this.__ctx.save()}restore(){this.__ctx.restore()}translate(t,e){this.__ctx.translate(this.snapToPixel?~~(t+fe):t,this.snapToPixel?~~(e+fe):e)}rotate(t){this.__ctx.rotate(t)}scale(t,e){this.__ctx.scale(t,e)}getTransform(){throw new Error("Not implemented")}multiply(t){this.__ctx.setTransform(this.__ctx.getTransform().multiply(t.toDOMMatrix()))}addPostProcessor(t){}removePostProcessor(t){}clearPostProcessors(){}updatePostProcessors(t){}beginDrawLifecycle(){}endDrawLifecycle(){}set material(t){this._state.current.material=t}get material(){return this._state.current.material}createMaterial(t){return null}clear(){this.__ctx.clearRect(0,0,this.width,this.height),this.__ctx.fillStyle=this.backgroundColor.toString(),this.__ctx.fillRect(0,0,this.width,this.height),ie.clear()}flush(){}}var ye;!function(t){t.Fixed="Fixed",t.FitContainerAndFill="FitContainerAndFill",t.FitScreenAndFill="FitScreenAndFill",t.FitContainerAndZoom="FitContainerAndZoom",t.FitScreenAndZoom="FitScreenAndZoom",t.FitScreen="FitScreen",t.FillScreen="FillScreen",t.FitContainer="FitContainer",t.FillContainer="FillContainer"}(ye||(ye={}));class ve{static get SVGA(){return{width:800,height:600}}static get Standard(){return{width:1920,height:1080}}static get Atari2600(){return{width:160,height:192}}static get GameBoy(){return{width:160,height:144}}static get GameBoyAdvance(){return{width:240,height:160}}static get NintendoDS(){return{width:256,height:192}}static get NES(){return{width:256,height:224}}static get SNES(){return{width:256,height:244}}}class we{constructor(t){var e,i,s;this._antialiasing=!0,this._resolutionStack=[],this._viewportStack=[],this._pixelRatioOverride=null,this._isFullScreen=!1,this._isDisposed=!1,this._logger=tt.getInstance(),this._fullscreenChangeHandler=()=>{this._isFullScreen=!this._isFullScreen,this._logger.debug("Fullscreen Change",this._isFullScreen)},this._pixelRatioChangeHandler=()=>{this._logger.debug("Pixel Ratio Change",window.devicePixelRatio),this._listenForPixelRatio(),this._devicePixelRatio=this._calculateDevicePixelRatio(),this.applyResolutionAndViewport()},this._resizeHandler=()=>{const t=this.parent;this._logger.debug("View port resized"),this._setResolutionAndViewportByDisplayMode(t),this.applyResolutionAndViewport()},this._devicePixelRatio=this._calculateDevicePixelRatio(),this._alreadyWarned=!1,this._contentArea=new xt,this.viewport=t.viewport,this.resolution=null!==(e=t.resolution)&&void 0!==e?e:{...this.viewport},this._contentResolution=this.resolution,this._displayMode=null!==(i=t.displayMode)&&void 0!==i?i:ye.Fixed,this._canvas=t.canvas,this.graphicsContext=t.context,this._antialiasing=null!==(s=t.antialiasing)&&void 0!==s?s:this._antialiasing,this._browser=t.browser,this._pixelRatioOverride=t.pixelRatio,this._applyDisplayMode(),this._listenForPixelRatio(),this._canvas.addEventListener("fullscreenchange",this._fullscreenChangeHandler),this.applyResolutionAndViewport()}_listenForPixelRatio(){this._mediaQueryList&&!this._mediaQueryList.addEventListener&&this._mediaQueryList.removeListener(this._pixelRatioChangeHandler),this._mediaQueryList=this._browser.window.nativeComponent.matchMedia(`(resolution: ${window.devicePixelRatio}dppx)`),this._mediaQueryList.addEventListener?this._mediaQueryList.addEventListener("change",this._pixelRatioChangeHandler,{once:!0}):this._mediaQueryList.addListener(this._pixelRatioChangeHandler)}dispose(){this._isDisposed||(this._isDisposed=!0,this._browser.window.off("resize",this._resizeHandler),this._resizeObserver&&this._resizeObserver.disconnect(),this.parent.removeEventListener("resize",this._resizeHandler),this._mediaQueryList.removeEventListener?this._mediaQueryList.removeEventListener("change",this._pixelRatioChangeHandler):this._mediaQueryList.removeListener(this._pixelRatioChangeHandler),this._canvas.removeEventListener("fullscreenchange",this._fullscreenChangeHandler))}_calculateDevicePixelRatio(){return window.devicePixelRatio<1?1:window.devicePixelRatio||1}get pixelRatio(){return this._pixelRatioOverride?this._pixelRatioOverride:this._devicePixelRatio}get isHiDpi(){return 1!==this.pixelRatio}get displayMode(){return this._displayMode}get canvas(){return this._canvas}get parent(){switch(this.displayMode){case ye.FillContainer:case ye.FitContainer:case ye.FitContainerAndFill:case ye.FitContainerAndZoom:return this.canvas.parentElement||document.body;default:return window}}get resolution(){return this._resolution}set resolution(t){this._resolution=t}get viewport(){return this._viewport?this._viewport:this._resolution}set viewport(t){this._viewport=t}get aspectRatio(){return this._resolution.width/this._resolution.height}get scaledWidth(){return this._resolution.width*this.pixelRatio}get scaledHeight(){return this._resolution.height*this.pixelRatio}setCurrentCamera(t){this._camera=t}pushResolutionAndViewport(){this._resolutionStack.push(this.resolution),this._viewportStack.push(this.viewport),this.resolution={...this.resolution},this.viewport={...this.viewport}}peekViewport(){return this._viewportStack[this._viewportStack.length-1]}peekResolution(){return this._resolutionStack[this._resolutionStack.length-1]}popResolutionAndViewport(){this.resolution=this._resolutionStack.pop(),this.viewport=this._viewportStack.pop()}applyResolutionAndViewport(){this._canvas.width=this.scaledWidth,this._canvas.height=this.scaledHeight,this.graphicsContext instanceof _e&&(this.graphicsContext.checkIfResolutionSupported({width:this.scaledWidth,height:this.scaledHeight})||this._alreadyWarned||(this._alreadyWarned=!0,this._logger.warn(`The currently configured resolution (${this.resolution.width}x${this.resolution.height}) and pixel ratio (${this.pixelRatio}) are too large for the platform WebGL implementation, this may work but cause WebGL rendering to behave oddly. Try reducing the resolution or disabling Hi DPI scaling to avoid this (read more here https://excaliburjs.com/docs/screens#understanding-viewport--resolution).`))),this._antialiasing?this._canvas.style.imageRendering="auto":(this._canvas.style.imageRendering="pixelated",""===this._canvas.style.imageRendering&&(this._canvas.style.imageRendering="crisp-edges")),this._canvas.style.width=this.viewport.width+"px",this._canvas.style.height=this.viewport.height+"px",this.graphicsContext.updateViewport(this.resolution),this.graphicsContext.resetTransform(),this.graphicsContext.smoothing=this._antialiasing,this.graphicsContext instanceof Ce&&this.graphicsContext.scale(this.pixelRatio,this.pixelRatio)}get antialiasing(){return this._antialiasing}set antialiasing(t){this._antialiasing=t,this.graphicsContext.smoothing=this._antialiasing}get isFullScreen(){return this._isFullScreen}goFullScreen(t){if(t){const e=document.getElementById(t);if(e)return e.requestFullscreen()}return this._canvas.requestFullscreen()}exitFullScreen(){return document.exitFullscreen()}pageToScreenCoordinates(t){let e=t.x,i=t.y;if(this._isFullScreen||(e-=Bt(this._canvas).x,i-=Bt(this._canvas).y),this._isFullScreen)if(window.innerWidth/this.aspectRatiot?-(h-t)/2+"px":"",this.canvas.style.top=l>e?-(l-e)/2+"px":"",this.viewport={width:h,height:l};const A=xt.fromDimension(this.viewport.width,this.viewport.height,mt.Zero);if(this.viewport.width>t){const e=(this.viewport.width-t)/this.viewport.width*this.resolution.width;A.top=0,A.left=e/2,A.right=this.resolution.width-e/2,A.bottom=this.resolution.height}if(this.viewport.height>e){const t=(this.viewport.height-e)/this.viewport.height*this.resolution.height;A.top=t/2,A.left=0,A.bottom=this.resolution.height-t/2,A.right=this.resolution.width}this._contentArea=A}_computeFitContainer(){const t=this.aspectRatio;let e=0,i=0;const s=this.canvas.parentElement;s.clientWidth/t{this._resizeHandler()})),this._resizeObserver.observe(this.parent)),this.parent.addEventListener("resize",this._resizeHandler)}_setResolutionAndViewportByDisplayMode(t){this.displayMode===ye.FillContainer&&(this.resolution={width:t.clientWidth,height:t.clientHeight},this.viewport=this.resolution),this.displayMode===ye.FillScreen&&(document.body.style.margin="0px",document.body.style.overflow="hidden",this.resolution={width:t.innerWidth,height:t.innerHeight},this.viewport=this.resolution),this._contentArea=xt.fromDimension(this.resolution.width,this.resolution.height,mt.Zero),this.displayMode===ye.FitScreen&&this._computeFit(),this.displayMode===ye.FitContainer&&this._computeFitContainer(),this.displayMode===ye.FitScreenAndFill&&this._computeFitScreenAndFill(),this.displayMode===ye.FitContainerAndFill&&this._computeFitContainerAndFill(),this.displayMode===ye.FitScreenAndZoom&&this._computeFitScreenAndZoom(),this.displayMode===ye.FitContainerAndZoom&&this._computeFitContainerAndZoom()}}class Ie{static create(){return this._INSTANCE||(window.AudioContext||window.webkitAudioContext)&&(this._INSTANCE=new AudioContext),this._INSTANCE}}Ie._INSTANCE=null;class xe{static unlock(){return new Promise(((t,e)=>{if(xe._UNLOCKED||!Ie.create())return t(!0);const i=setTimeout((()=>{tt.getInstance().warn("Excalibur was unable to unlock the audio context, audio probably will not play in this browser."),t(!1)}),200),s=Ie.create();s.resume().then((()=>{const e=s.createBuffer(1,1,22050),r=s.createBufferSource();let n=!1;r.buffer=e,r.connect(s.destination),r.onended=()=>n=!0,r.start(0),setTimeout((()=>{!function(t){return!!t.playbackState}(r)?(s.currentTime>0||n)&&(xe._UNLOCKED=!0):r.playbackState!==r.PLAYING_STATE&&r.playbackState!==r.FINISHED_STATE||(xe._UNLOCKED=!0)}),0),clearTimeout(i),t(!0)}),(()=>{e()}))}))}static isUnlocked(){return this._UNLOCKED}}function Ee(t,e=yt.Red,i,s,r,n,o=1,a="butt"){t.save(),t.beginPath(),t.lineWidth=o,t.lineCap=a,t.strokeStyle=e.toString(),t.moveTo(i,s),t.lineTo(r,n),t.closePath(),t.stroke(),t.restore()}function Be(t,e=yt.Red,i){t.beginPath(),t.strokeStyle=e.toString(),t.arc(i.x,i.y,5,0,2*Math.PI),t.closePath(),t.stroke()}function be(t,e,i,s,r=1){const n=e?e.toString():"blue",o=s.scale(r);t.beginPath(),t.strokeStyle=n,t.moveTo(i.x,i.y),t.lineTo(i.x+o.x,i.y+o.y),t.closePath(),t.stroke()}function Qe(t,e,i,s,r,n=5,o=yt.White,a=null){let h;if("number"==typeof n)h={tl:n,tr:n,br:n,bl:n};else{const t={tl:0,tr:0,br:0,bl:0};for(const e in t)if(t.hasOwnProperty(e)){const i=e;h[i]=n[i]||t[i]}}t.beginPath(),t.moveTo(e+h.tl,i),t.lineTo(e+s-h.tr,i),t.quadraticCurveTo(e+s,i,e+s,i+h.tr),t.lineTo(e+s,i+r-h.br),t.quadraticCurveTo(e+s,i+r,e+s-h.br,i+r),t.lineTo(e+h.bl,i+r),t.quadraticCurveTo(e,i+r,e,i+r-h.bl),t.lineTo(e,i+h.tl),t.quadraticCurveTo(e,i,e+h.tl,i),t.closePath(),a&&(t.fillStyle=a.toString(),t.fill()),o&&(t.strokeStyle=o.toString(),t.stroke())}function Se(t,e,i,s,r=yt.White,n=null){t.beginPath(),t.arc(e,i,s,0,2*Math.PI),t.closePath(),n&&(t.fillStyle=n.toString(),t.fill()),r&&(t.strokeStyle=r.toString(),t.stroke())}xe._UNLOCKED=!1;var De=n(1388);class Te extends Ut{constructor(t){var e,i,s,r,n,o,a,h,l,A;super(t),this.filtering=null,this.lineCap="butt",this.quality=1,this._dirty=!0,this._smoothing=!1,this._color=Nt(yt.Black,(()=>this.flagDirty())),this._lineWidth=1,this._lineDash=[],this._padding=0,t&&(this.quality=null!==(e=t.quality)&&void 0!==e?e:this.quality,this.color=null!==(i=t.color)&&void 0!==i?i:yt.Black,this.strokeColor=null==t?void 0:t.strokeColor,this.smoothing=null!==(s=t.smoothing)&&void 0!==s?s:this.smoothing,this.lineWidth=null!==(r=t.lineWidth)&&void 0!==r?r:this.lineWidth,this.lineDash=null!==(n=t.lineDash)&&void 0!==n?n:this.lineDash,this.lineCap=null!==(o=t.lineCap)&&void 0!==o?o:this.lineCap,this.padding=null!==(a=t.padding)&&void 0!==a?a:this.padding,this.filtering=null!==(h=t.filtering)&&void 0!==h?h:this.filtering),this._bitmap=document.createElement("canvas");const c=null!==(l=null==t?void 0:t.width)&&void 0!==l?l:this._bitmap.width,d=null!==(A=null==t?void 0:t.height)&&void 0!==A?A:this._bitmap.height;this.width=c,this.height=d;const u=this._bitmap.getContext("2d");if(!u)throw new Error("Browser does not support 2d canvas drawing, cannot create Raster graphic");this._ctx=u}cloneRasterOptions(){return{color:this.color?this.color.clone():null,strokeColor:this.strokeColor?this.strokeColor.clone():null,smoothing:this.smoothing,lineWidth:this.lineWidth,lineDash:this.lineDash,lineCap:this.lineCap,quality:this.quality,padding:this.padding}}get dirty(){return this._dirty}flagDirty(){this._dirty=!0}get width(){return Math.abs(this._getTotalWidth()*this.scale.x)}set width(t){t/=Math.abs(this.scale.x),this._bitmap.width=t,this._originalWidth=t,this.flagDirty()}get height(){return Math.abs(this._getTotalHeight()*this.scale.y)}set height(t){t/=Math.abs(this.scale.y),this._bitmap.height=t,this._originalHeight=t,this.flagDirty()}_getTotalWidth(){var t;return 1*((null!==(t=this._originalWidth)&&void 0!==t?t:this._bitmap.width)+2*this.padding)}_getTotalHeight(){var t;return 1*((null!==(t=this._originalHeight)&&void 0!==t?t:this._bitmap.height)+2*this.padding)}get localBounds(){return xt.fromDimension(this._getTotalWidth()*this.scale.x,this._getTotalHeight()*this.scale.y,mt.Zero)}get smoothing(){return this._smoothing}set smoothing(t){this._smoothing=t,this.flagDirty()}get color(){return this._color}set color(t){this.flagDirty(),this._color=Nt(t,(()=>this.flagDirty()))}get strokeColor(){return this._strokeColor}set strokeColor(t){this.flagDirty(),this._strokeColor=Nt(t,(()=>this.flagDirty()))}get lineWidth(){return this._lineWidth}set lineWidth(t){this._lineWidth=t,this.flagDirty()}get lineDash(){return this._lineDash}set lineDash(t){this._lineDash=t,this.flagDirty()}get padding(){return this._padding}set padding(t){this._padding=t,this.flagDirty()}rasterize(){this._dirty=!1,this._ctx.clearRect(0,0,this._getTotalWidth(),this._getTotalHeight()),this._ctx.save(),this._applyRasterProperties(this._ctx),this.execute(this._ctx),this._ctx.restore()}_applyRasterProperties(t){var e,i,s;this._bitmap.width=this._getTotalWidth()*this.quality,this._bitmap.height=this._getTotalHeight()*this.quality,this._bitmap.setAttribute("filtering",this.filtering),this._bitmap.setAttribute("forceUpload","true"),t.scale(this.quality,this.quality),t.translate(this.padding,this.padding),t.imageSmoothingEnabled=this.smoothing,t.lineWidth=this.lineWidth,t.setLineDash(null!==(e=this.lineDash)&&void 0!==e?e:t.getLineDash()),t.lineCap=this.lineCap,t.strokeStyle=null===(i=this.strokeColor)||void 0===i?void 0:i.toString(),t.fillStyle=null===(s=this.color)||void 0===s?void 0:s.toString()}_drawImage(t,e,i){this._dirty&&this.rasterize(),t.scale(1/this.quality,1/this.quality),t.drawImage(this._bitmap,e,i)}}class Fe extends Te{get ctx(){return this._ctx}constructor(t){super(t),this._options=t}clone(){return new Fe({...this._options,...this.cloneGraphicOptions(),...this.cloneRasterOptions()})}execute(t){var e,i;(null===(e=this._options)||void 0===e?void 0:e.draw)&&(null===(i=this._options)||void 0===i||i.draw(t)),this._options.cache||this.flagDirty()}}class ke{}ke.type={any:"",blob:"blob",json:"json",text:"text",document:"document",arraybuffer:"arraybuffer"};class Pe{constructor(){this.states=new Map}get currentState(){return this._currentState}set currentState(t){this._currentState=t}static create(t,e){const i=new Pe;i.data=e;for(const e in t.states)i.states.set(e,{name:e,...t.states[e]});for(const t of i.states.values())for(const e of t.transitions)if("*"!==e&&!i.states.has(e))throw Error(`Invalid state machine, state [${t.name}] has a transition to another state that doesn't exist [${e}]`);return i.currentState=i.startState=i.states.get(t.start),i}in(t){return this.currentState.name===t}go(t,e){var i,s;if(this.currentState.transitions.includes(t)||this.currentState.transitions.includes("*")){const r=this.states.get(t);return(!this.currentState.onExit||!1!==(null===(i=this.currentState)||void 0===i?void 0:i.onExit({to:r.name,data:this.data})))&&((!(null==r?void 0:r.onEnter)||!1!==(null==r?void 0:r.onEnter({from:this.currentState.name,eventData:e,data:this.data})))&&(this.currentState=r,(null===(s=this.currentState)||void 0===s?void 0:s.onState)&&this.currentState.onState(),!0))}return!1}update(t){this.currentState.onUpdate&&this.currentState.onUpdate(this.data,t)}save(t){localStorage.setItem(t,JSON.stringify({currentState:this.currentState.name,data:this.data}))}restore(t){const e=JSON.parse(localStorage.getItem(t));this.currentState=this.states.get(e.currentState),this.data=e.data}}class Re{_createNewBufferSource(){this._instance=this._audioContext.createBufferSource(),this._instance.buffer=this._src,this._instance.loop=this.loop,this._instance.playbackRate.value=this._playbackRate,this._instance.connect(this._volumeNode),this._volumeNode.connect(this._audioContext.destination)}_handleEnd(){this.loop||(this._instance.onended=()=>{this._playingResolve(!0)})}set loop(t){this._loop=t,this._instance&&(this._instance.loop=t,this.loop||(this._instance.onended=()=>{this._playingResolve(!0)}))}get loop(){return this._loop}set volume(t){t=ct(t,0,1),this._volume=t,this._stateMachine.in("PLAYING")&&this._volumeNode.gain.setTargetAtTime?this._volumeNode.gain.setTargetAtTime(t,this._audioContext.currentTime,.1):this._volumeNode.gain.value=t}get volume(){return this._volume}get duration(){var t;return null!==(t=this._duration)&&void 0!==t?t:this.getTotalPlaybackDuration()}set duration(t){this._duration=t}constructor(t){this._src=t,this._audioContext=Ie.create(),this._volumeNode=this._audioContext.createGain(),this._playingPromise=new Promise((t=>{this._playingResolve=t})),this._stateMachine=Pe.create({start:"STOPPED",states:{PLAYING:{onEnter:({data:t})=>{this._createNewBufferSource(),this._handleEnd(),this.loop?this._instance.start(0,t.pausedAt*this._playbackRate):this._instance.start(0,t.pausedAt*this._playbackRate,this.duration),t.startedAt=this._audioContext.currentTime-t.pausedAt,t.pausedAt=0},onState:()=>this._playStarted(),onExit:({to:t})=>{"STOPPED"===t&&this._playingResolve(!0),this._instance.onended=null,this._instance.disconnect(),this._instance.stop(0),this._instance=null},transitions:["STOPPED","PAUSED","SEEK"]},SEEK:{onEnter:({eventData:t,data:e})=>{e.pausedAt=(null!=t?t:0)/this._playbackRate,e.startedAt=0},transitions:["*"]},STOPPED:{onEnter:({data:t})=>{t.pausedAt=0,t.startedAt=0,this._playingResolve(!0)},transitions:["PLAYING","PAUSED","SEEK"]},PAUSED:{onEnter:({data:t})=>{t.pausedAt=this._audioContext.currentTime-t.startedAt},transitions:["PLAYING","STOPPED","SEEK"]}}},{startedAt:0,pausedAt:0}),this._volume=1,this._loop=!1,this._playStarted=()=>{},this._playbackRate=1,this._createNewBufferSource()}isPlaying(){return this._stateMachine.in("PLAYING")}isPaused(){return this._stateMachine.in("PAUSED")||this._stateMachine.in("SEEK")}play(t=(()=>{})){return this._playStarted=t,this._stateMachine.go("PLAYING"),this._playingPromise}pause(){this._stateMachine.go("PAUSED")}stop(){this._stateMachine.go("STOPPED")}seek(t){this._stateMachine.go("PAUSED"),this._stateMachine.go("SEEK",t)}getTotalPlaybackDuration(){return this._src.duration}getPlaybackPosition(){const{pausedAt:t,startedAt:e}=this._stateMachine.data;return t?t*this._playbackRate:e?(this._audioContext.currentTime-e)*this._playbackRate:0}set playbackRate(t){this._instance.playbackRate.value=this._playbackRate=t}get playbackRate(){return this._instance.playbackRate.value}}class Me extends f{set bubbles(t){}get bubbles(){return!1}get _path(){return null}set _path(t){}constructor(t,e="MediaEvent"){super(),this.target=t,this._name=e}stopPropagation(){}action(){}propagate(){}layPath(t){}}class Le extends Me{constructor(t,e){super(t,"NativeSoundEvent"),this.track=e}}class Ne extends Me{constructor(t,e){super(t,"NativeSoundProcessedEvent"),this._processedData=e,this.data=this._processedData}}function Ge(t){try{const e=new Audio,i=/.*\.([A-Za-z0-9]+)(?:(?:\?|\#).*)*$/,s=t.match(i)[1];return!!e.canPlayType("audio/"+s)}catch(t){return tt.getInstance().warn("Cannot determine audio support, assuming no support for the Audio Tag",t),!1}}const Ue={VolumeChange:"volumechange",Processed:"processed",Pause:"pause",Stop:"stop",PlaybackEnd:"playbackend",Resume:"resume",PlaybackStart:"playbackstart"};class ze{set loop(t){this._loop=t;for(const t of this._tracks)t.loop=this._loop;this.logger.debug("Set loop for all instances of sound",this.path,"to",this._loop)}get loop(){return this._loop}set volume(t){this._volume=t;for(const t of this._tracks)t.volume=this._volume;this.events.emit("volumechange",new Le(this)),this.logger.debug("Set loop for all instances of sound",this.path,"to",this._volume)}get volume(){return this._volume}get duration(){return this._duration}set duration(t){this._duration=t}get instances(){return this._tracks}get path(){return this._resource.path}set path(t){this._resource.path=t}get bustCache(){return this._resource.bustCache}set bustCache(t){this._resource.bustCache=t}constructor(...t){this.events=new _,this.logger=tt.getInstance(),this._loop=!1,this._volume=1,this._isStopped=!1,this._tracks=[],this._wasPlayingOnHidden=!1,this._playbackRate=1,this._audioContext=Ie.create(),this._resource=new Lt("",ke.type.arraybuffer);for(const e of t)if(Ge(e)){this.path=e;break}this.path||(this.logger.warn("This browser does not support any of the audio files specified:",t.join(", ")),this.logger.warn("Attempting to use",t[0]),this.path=t[0])}isLoaded(){return!!this.data}async load(){var t,e;if(this.data)return this.data;const i=await this._resource.load(),s=await this.decodeAudio(i.slice(0));return this._duration=null!==(e=null!==(t=this._duration)&&void 0!==t?t:null==s?void 0:s.duration)&&void 0!==e?e:void 0,this.events.emit("processed",new Ne(this,s)),this.data=s}async decodeAudio(t){try{return await this._audioContext.decodeAudioData(t.slice(0))}catch(t){return this.logger.error("Unable to decode this browser may not fully support this format, or the file may be corrupt, if this is an mp3 try removing id3 tags and album art from the file."),await Promise.reject()}}wireEngine(t){t&&(this._engine=t,this._engine.on("hidden",(()=>{t.pauseAudioWhenHidden&&this.isPlaying()&&(this._wasPlayingOnHidden=!0,this.pause())})),this._engine.on("visible",(()=>{t.pauseAudioWhenHidden&&this._wasPlayingOnHidden&&(this.play(),this._wasPlayingOnHidden=!1)})),this._engine.on("start",(()=>{this._isStopped=!1})),this._engine.on("stop",(()=>{this.stop(),this._isStopped=!0})))}instanceCount(){return this._tracks.length}isPlaying(){return this._tracks.some((t=>t.isPlaying()))}isPaused(){return this._tracks.some((t=>t.isPaused()))}play(t){return this.isLoaded()?this._isStopped?(this.logger.warn("Cannot start playing. Engine is in a stopped state."),Promise.resolve(!1)):(this.volume=t||this.volume,this.isPaused()?this._resumePlayback():this._startPlayback()):(this.logger.warn("Cannot start playing. Resource",this.path,"is not loaded yet"),Promise.resolve(!0))}pause(){if(this.isPlaying()){for(const t of this._tracks)t.pause();this.events.emit("pause",new Le(this)),this.logger.debug("Paused all instances of sound",this.path)}}stop(){for(const t of this._tracks)t.stop();this.events.emit("stop",new Le(this)),this._tracks.length=0,this.logger.debug("Stopped all instances of sound",this.path)}get playbackRate(){return this._playbackRate}set playbackRate(t){this._playbackRate=t,this._tracks.forEach((t=>{t.playbackRate=this._playbackRate}))}seek(t,e=0){0===this._tracks.length&&this._getTrackInstance(this.data),this._tracks[e].seek(t)}getTotalPlaybackDuration(){return this.data.duration}getPlaybackPosition(t=0){return this._tracks.length?this._tracks[t].getPlaybackPosition():0}getTrackId(t){return this._tracks.indexOf(t)}async _resumePlayback(){if(this.isPaused){const t=[];for(const e of this._tracks)t.push(e.play().then((()=>(this.events.emit("playbackend",new Le(this,e)),this._tracks.splice(this.getTrackId(e),1),!0))));this.events.emit("resume",new Le(this)),this.logger.debug("Resuming paused instances for sound",this.path,this._tracks),await Promise.all(t)}return!0}async _startPlayback(){const t=await this._getTrackInstance(this.data),e=await t.play((()=>{this.events.emit("playbackstart",new Le(this,t)),this.logger.debug("Playing new instance for sound",this.path)}));return this.events.emit("playbackend",new Le(this,t)),this._tracks.splice(this.getTrackId(t),1),e}_getTrackInstance(t){const e=new Re(t);return e.loop=this.loop,e.volume=this.volume,e.duration=this.duration,e.playbackRate=this._playbackRate,this._tracks.push(e),e}emit(t,e){this.events.emit(t,e)}on(t,e){return this.events.on(t,e)}once(t,e){return this.events.once(t,e)}off(t,e){this.events.off(t,e)}}const Oe={};class He{get _image(){return this._imageElement||(this._imageElement=new Image,this._imageElement.src=this.logo),this._imageElement}get playButtonRootElement(){return this._playButtonRootElement}get playButtonElement(){return this._playButtonElement}get _playButton(){const t=document.getElementById("excalibur-play-root");return t&&(this._playButtonRootElement=t),this._playButtonRootElement||(this._playButtonRootElement=document.createElement("div"),this._playButtonRootElement.id="excalibur-play-root",this._playButtonRootElement.style.position="absolute",document.body.appendChild(this._playButtonRootElement)),this._styleBlock||(this._styleBlock=document.createElement("style"),this._styleBlock.textContent=this._playButtonStyles,document.head.appendChild(this._styleBlock)),this._playButtonElement||(this._playButtonElement=this.startButtonFactory(),this._playButtonRootElement.appendChild(this._playButtonElement)),this._playButtonElement}constructor(t){this.events=new _,this.canvas=new Fe({filtering:Ot.Blended,smoothing:!0,cache:!0,draw:this.draw.bind(this)}),this._resourceList=[],this._index=0,this._playButtonShown=!1,this._resourceCount=0,this._numLoaded=0,this._progressCounts={},this._totalCounts={},this.logo="data:image/png;base64,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",this.logoWidth=468,this.logoHeight=118,this.loadingBarColor=yt.White,this.backgroundColor="#176BAA",this.suppressPlayButton=!1,this._playButtonStyles=De.Z.toString(),this.playButtonText="Play game",this.startButtonFactory=()=>{let t=document.getElementById("excalibur-play");return t||(t=document.createElement("button")),t.id="excalibur-play",t.textContent=this.playButtonText,t.style.display="none",t},this._loadingFuture=new Et,t&&this.addResources(t)}wireEngine(t){this._engine=t,this.canvas.width=this._engine.canvas.width,this.canvas.height=this._engine.canvas.height}addResource(t){const e=this._index++;this._resourceList.push(t),this._progressCounts[e]=0,this._totalCounts[e]=1,this._resourceCount++}addResources(t){let e=0;const i=t.length;for(;e{this._positionPlayButton()};(null===(e=this._engine)||void 0===e?void 0:e.browser)&&this._engine.browser.window.on("resize",t),this._playButtonShown=!0,this._playButton.style.display="block",document.body.addEventListener("keyup",(t=>{"Enter"===t.key&&this._playButton.click()})),this._positionPlayButton();const i=new Promise((e=>{const i=i=>{var s;i.stopPropagation(),this.hidePlayButton(),(null===(s=this._engine)||void 0===s?void 0:s.browser)&&this._engine.browser.window.off("resize",t),e()};this._playButton.addEventListener("click",i),this._playButton.addEventListener("touchend",i),this._playButton.addEventListener("pointerup",i)}));return await i}this.hidePlayButton(),await Tt(500,null===(t=this._engine)||void 0===t?void 0:t.clock)}hidePlayButton(){this._playButtonShown=!1,this._playButton.style.display="none"}dispose(){this._playButtonRootElement.parentElement&&(this._playButtonRootElement.removeChild(this._playButtonElement),document.body.removeChild(this._playButtonRootElement),document.head.removeChild(this._styleBlock),this._playButtonRootElement=null,this._playButtonElement=null,this._styleBlock=null)}update(t,e){}areResourcesLoaded(){return this._loadingFuture.promise}async load(){var t,e;await(null===(t=this._image)||void 0===t?void 0:t.decode()),this.canvas.flagDirty(),await Promise.all(this._resourceList.map((async t=>{await t.load().finally((()=>{this._numLoaded++,this.canvas.flagDirty()}))})));for(const t of this._resourceList)t instanceof ze&&t.wireEngine(this._engine);return this._loadingFuture.resolve(),await Tt(200,null===(e=this._engine)||void 0===e?void 0:e.clock),this.canvas.flagDirty(),await this.showPlayButton(),await xe.unlock(),this.data=this._resourceList}markResourceComplete(){this._numLoaded++}get progress(){return this._resourceCount>0?ct(this._numLoaded,0,this._resourceCount)/this._resourceCount:1}_positionPlayButton(){if(this._engine){const t=this._engine.screen.viewport.height,e=this._engine.screen.viewport.width;if(this._playButtonRootElement){const i=this._engine.canvas.offsetLeft,s=this._engine.canvas.offsetTop,r=this._playButton.clientWidth,n=this._playButton.clientHeight;this.playButtonPosition?(this._playButtonRootElement.style.left=`${this.playButtonPosition.x}px`,this._playButtonRootElement.style.top=`${this.playButtonPosition.y}px`):(this._playButtonRootElement.style.left=i+e/2-r/2+"px",this._playButtonRootElement.style.top=s+t/2-n/2+100+"px")}}}draw(t){const e=this._engine.canvasHeight/this._engine.pixelRatio,i=this._engine.canvasWidth/this._engine.pixelRatio;this._positionPlayButton(),t.fillStyle=this.backgroundColor,t.fillRect(0,0,i,e);let s=e/2;const r=Math.min(this.logoWidth,.75*i);let n=i/2-r/2;this.logoPosition&&(n=this.logoPosition.x,s=this.logoPosition.y);const o=Math.floor(r*(this.logoHeight/this.logoWidth)),a=this._engine.getAntialiasing();if(this._engine.setAntialiasing(!0),this.logoPosition?t.drawImage(this._image,0,0,this.logoWidth,this.logoHeight,n,s,r,o):t.drawImage(this._image,0,0,this.logoWidth,this.logoHeight,n,s-o-20,r,o),!this.suppressPlayButton&&this._playButtonShown)return void this._engine.setAntialiasing(a);let h=n,l=s;this.loadingBarPosition&&(h=this.loadingBarPosition.x,l=this.loadingBarPosition.y),t.lineWidth=2,Qe(t,h,l,r,20,10,this.loadingBarColor);const A=r*this.progress-10;Qe(t,h+5,l+5,A>10?A:10,10,5,null,this.loadingBarColor),this._engine.setAntialiasing(a)}emit(t,e){this.events.emit(t,e)}on(t,e){return this.events.on(t,e)}once(t,e){return this.events.once(t,e)}off(t,e){this.events.off(t,e)}}const qe={webgl:"WebGL",webaudio:"WebAudio",gamepadapi:"Gamepad API"};class Ve{constructor(){this._features=null,this.failedTests=[],this._criticalTests={canvasSupport:function(){const t=document.createElement("canvas");return!(!t.getContext||!t.getContext("2d"))},arrayBufferSupport:function(){const t=new XMLHttpRequest;t.open("GET","/");try{t.responseType="arraybuffer"}catch(t){return!1}return"arraybuffer"===t.responseType},dataUrlSupport:function(){return 0===document.createElement("canvas").toDataURL("image/png").indexOf("data:image/png")},objectUrlSupport:function(){return"URL"in window&&"revokeObjectURL"in URL&&"createObjectURL"in URL},rgbaSupport:function(){const t=document.createElement("a").style;return t.cssText="background-color:rgba(150,255,150,.5)",(""+t.backgroundColor).indexOf("rgba")>-1}},this._warningTest={webAudioSupport:function(){return!!(window.AudioContext||window.webkitAudioContext||window.mozAudioContext||window.msAudioContext||window.oAudioContext)},webglSupport:function(){const t=document.createElement("canvas");return!(!t.getContext||!t.getContext("webgl"))}},this._features=this._loadBrowserFeatures()}getBrowserFeatures(){return null===this._features&&(this._features=this._loadBrowserFeatures()),this._features}logBrowserFeatures(){let t="%cSUPPORTED BROWSER FEATURES\n==========================%c\n";const e=["font-weight: bold; color: navy","font-weight: normal; color: inherit"],i=this.getBrowserFeatures();for(const s of Object.keys(qe))i[s]?(t+="(%c✓%c)",e.push("font-weight: bold; color: green"),e.push("font-weight: normal; color: inherit")):(t+="(%c✗%c)",e.push("font-weight: bold; color: red"),e.push("font-weight: normal; color: inherit")),t+=" "+qe[s]+"\n";e.unshift(t),console.log.apply(console,e)}_loadBrowserFeatures(){return{canvas:(()=>this._criticalTests.canvasSupport())(),arraybuffer:(()=>this._criticalTests.arrayBufferSupport())(),dataurl:(()=>this._criticalTests.dataUrlSupport())(),objecturl:(()=>this._criticalTests.objectUrlSupport())(),rgba:(()=>this._criticalTests.rgbaSupport())(),webaudio:(()=>this._warningTest.webAudioSupport())(),webgl:(()=>this._warningTest.webglSupport())(),gamepadapi:!!navigator.getGamepads}}test(){let t=!1;for(const e in this._criticalTests)this._criticalTests[e].call(this)||(this.failedTests.push(e),tt.getInstance().error("Critical browser feature missing, Excalibur requires:",e),t=!0);if(t)return!1;for(const t in this._warningTest)this._warningTest[t]()||tt.getInstance().warn("Warning browser feature missing, Excalibur will have reduced performance:",t);return!0}}var je;!function(t){t.PreventCollision="PreventCollision",t.Passive="Passive",t.Active="Active",t.Fixed="Fixed"}(je||(je={}));const Ye=5,Ke={},We=()=>{for(const t in Ke)Ke[t]=0},Je=(t,e)=>{const i=g.isEnabled("suppress-obsolete-message");Ke[t]=0;a--)(r=t[a])&&(o=(n<3?r(o):n>3?r(e,i,o):r(e,i))||o);n>3&&o&&Object.defineProperty(e,i,o)}([Xe({message:"Alias for incorrect spelling used in older versions, will be removed in v0.25.0",alternateMethod:"dynamicTreeVelocityMultiplier"})],ii,"dynamicTreeVelocityMultiplyer",null),function(t){t.World="world",t.Screen="screen"}(ei||(ei={}));class si extends mt{constructor(t){super(0,0),this._getX=t.getX,this._getY=t.getY,this._setX=t.setX,this._setY=t.setY}get x(){return this._x=this._getX()}set x(t){this._setX(t),this._x=t}get y(){return this._y=this._getY()}set y(t){this._setY(t),this._y=t}}class ri extends mt{constructor(t,e){super(t.x,t.y),this.original=t,this.change=e}get x(){return this._x=this.original.x}set x(t){this.change(t,this._y),this._x=this.original.x=t}get y(){return this._y=this.original.y}set y(t){this.change(this._x,t),this._y=this.original.y=t}}class ni{constructor(){this._parent=null,this._children=[],this._pos=Ct(0,0),this._rotation=0,this._scale=Ct(1,1),this._isDirty=!1,this._isInverseDirty=!1,this._matrix=kt.identity(),this._inverse=kt.identity()}get parent(){return this._parent}set parent(t){if(this._parent){const t=this._parent._children.indexOf(this);t>-1&&this._parent._children.splice(t,1)}this._parent=t,this._parent&&this._parent._children.push(this),this.flagDirty()}get children(){return this._children}set pos(t){t.equals(this._pos)||(this._pos.x=t.x,this._pos.y=t.y,this.flagDirty())}get pos(){return new ri(this._pos,((t,e)=>{t===this._pos.x&&e===this._pos.y||this.flagDirty()}))}set globalPos(t){let e=t.clone();this.parent&&(e=this.parent.inverse.multiply(t)),e.equals(this._pos)||(this._pos=e,this.flagDirty())}get globalPos(){return new si({getX:()=>this.matrix.data[4],getY:()=>this.matrix.data[5],setX:t=>{if(this.parent){const{x:e}=this.parent.inverse.multiply(Ct(t,this.pos.y));this.pos.x=e}else this.pos.x=t;t!==this.matrix.data[4]&&this.flagDirty()},setY:t=>{if(this.parent){const{y:e}=this.parent.inverse.multiply(Ct(this.pos.x,t));this.pos.y=e}else this.pos.y=t;t!==this.matrix.data[5]&&this.flagDirty()}})}set rotation(t){const e=dt(t);e!==this._rotation&&this.flagDirty(),this._rotation=e}get rotation(){return this._rotation}set globalRotation(t){let e=0;this.parent&&(e=this.parent.globalRotation);const i=dt(t+e);i!==this._rotation&&this.flagDirty(),this._rotation=i}get globalRotation(){return this.parent?this.matrix.getRotation():this.rotation}set scale(t){t.equals(this._scale)||(this._scale.x=t.x,this._scale.y=t.y,this.flagDirty())}get scale(){return new ri(this._scale,((t,e)=>{t===this._scale.x&&e===this._scale.y||this.flagDirty()}))}set globalScale(t){let e=Ct(1,1);this.parent&&(e=this.parent.globalScale),this.scale=t.scale(Ct(1/e.x,1/e.y))}get globalScale(){return new si({getX:()=>this.parent?this.matrix.getScaleX():this.scale.x,getY:()=>this.parent?this.matrix.getScaleY():this.scale.y,setX:t=>{if(this.parent){const e=this.parent.globalScale.x;this.scale.x=t/e}else this.scale.x=t},setY:t=>{if(this.parent){const e=this.parent.globalScale.y;this.scale.y=t/e}else this.scale.y=t}})}get matrix(){return this._isDirty&&(null===this.parent?this._matrix=this._calculateMatrix():this._matrix=this.parent.matrix.multiply(this._calculateMatrix()),this._isDirty=!1),this._matrix}get inverse(){return this._isInverseDirty&&(this._inverse=this.matrix.inverse(),this._isInverseDirty=!1),this._inverse}_calculateMatrix(){return kt.identity().translate(this.pos.x,this.pos.y).rotate(this.rotation).scale(this.scale.x,this.scale.y)}flagDirty(){this._isDirty=!0,this._isInverseDirty=!0;for(let t=0;t{const e=t.get(li);e&&(e._transform.parent=this._transform)},this.zIndexChanged$=new hi,this._z=0,this.coordPlane=ei.World}get(){return this._transform}onAdd(t){for(const e of t.children)this._addChildTransform(e);t.childrenAdded$.subscribe((t=>this._addChildTransform(t))),t.childrenRemoved$.subscribe((t=>{const e=t.get(li);e&&(e._transform.parent=null)}))}onRemove(t){this._transform.parent=null}get z(){return this._z}set z(t){const e=this._z;this._z=t,e!==t&&this.zIndexChanged$.notifyAll(t)}get pos(){return this._transform.pos}set pos(t){this._transform.pos=t}get globalPos(){return this._transform.globalPos}set globalPos(t){this._transform.globalPos=t}get rotation(){return this._transform.rotation}set rotation(t){this._transform.rotation=t}get globalRotation(){return this._transform.globalRotation}set globalRotation(t){this._transform.globalRotation=t}get scale(){return this._transform.scale}set scale(t){this._transform.scale=t}get globalScale(){return this._transform.globalScale}set globalScale(t){this._transform.globalScale=t}applyInverse(t){return this._transform.applyInverse(t)}apply(t){return this._transform.apply(t)}clone(){const t=new li;return t._transform=this._transform.clone(),t._z=this._z,t}}class Ai extends oi{constructor(){super(...arguments),this.type="ex.motion",this.vel=mt.Zero,this.acc=mt.Zero,this.scaleFactor=mt.Zero,this.angularVelocity=0,this.torque=0,this.inertia=1}}class ci{constructor(t,e,i){this._name=t,this._category=e,this._mask=i}get name(){return this._name}get category(){return this._category}get mask(){return this._mask}canCollide(t){return 0!=(this.category&t.mask)&&0!=(t.category&this.mask)}invert(){return new ci("~("+this.name+")",~this.category,~this.mask)}static combine(t){const e=t.map((t=>t.name)).join("+"),i=t.reduce(((t,e)=>e.category|t),0);return new ci(e,i,~i)}static collidesWith(t){return ci.combine(t).invert()}}ci.All=new ci("Collide with all groups",-1,-1);class di{constructor(t,e){this.colliderA=t,this.colliderB=e,this.id=null,this.id=di.calculatePairHash(t.id,e.id)}static canCollide(t,e){var i,s;const r=null===(i=null==t?void 0:t.owner)||void 0===i?void 0:i.get(Fi),n=null===(s=null==e?void 0:e.owner)||void 0===s?void 0:s.get(Fi);return!(t.id===e.id||t.owner&&e.owner&&t.owner.id===e.owner.id||t.localBounds.hasZeroDimensions()||e.localBounds.hasZeroDimensions()||!r||!n||!r.group.canCollide(n.group)||r.collisionType===je.Fixed&&n.collisionType===je.Fixed||n.collisionType===je.PreventCollision||r.collisionType===je.PreventCollision||!r.active||!n.active)}get canCollide(){const t=this.colliderA,e=this.colliderB;return di.canCollide(t,e)}collide(){return this.colliderA.collide(this.colliderB)}hasCollider(t){return t===this.colliderA||t===this.colliderB}static calculatePairHash(t,e){return t.valuet.min&&t.max>this.min}getOverlap(t){return this.overlaps(t)?this.max>t.max?t.max-this.min:this.max-t.min:0}}class gi{constructor(t){this.parent=t,this.parent=t||null,this.data=null,this.bounds=new xt,this.left=null,this.right=null,this.height=0}isLeaf(){return!this.left&&!this.right}}class pi{constructor(t=new xt(-Number.MAX_VALUE,-Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE)){this.worldBounds=t,this.root=null,this.nodes={}}_insert(t){if(null===this.root)return this.root=t,void(this.root.parent=null);const e=t.bounds;let i=this.root;for(;!i.isLeaf();){const t=i.left,s=i.right,r=i.bounds.getPerimeter(),n=i.bounds.combine(e).getPerimeter(),o=2*n,a=2*(n-r);let h=0;const l=e.combine(t.bounds);let A,c;t.isLeaf()?h=l.getPerimeter()+a:(c=t.bounds.getPerimeter(),A=l.getPerimeter(),h=A-c+a);let d=0;const u=e.combine(s.bounds);if(s.isLeaf()?d=u.getPerimeter()+a:(c=s.bounds.getPerimeter(),A=u.getPerimeter(),d=A-c+a),o1)return n.left=s,n.parent=s.parent,s.parent=n,n.parent?n.parent.left===s?n.parent.left=n:n.parent.right=n:this.root=n,h.height>l.height?(n.right=h,s.right=l,l.parent=s,s.bounds=r.bounds.combine(l.bounds),n.bounds=s.bounds.combine(h.bounds),s.height=1+Math.max(r.height,l.height),n.height=1+Math.max(s.height,h.height)):(n.right=l,s.right=h,h.parent=s,s.bounds=r.bounds.combine(h.bounds),n.bounds=s.bounds.combine(l.bounds),s.height=1+Math.max(r.height,h.height),n.height=1+Math.max(s.height,l.height)),n;if(A<-1){if(r.left=s,r.parent=s.parent,s.parent=r,r.parent)if(r.parent.left===s)r.parent.left=r;else{if(r.parent.right!==s)throw"Error rotating Dynamic Tree";r.parent.right=r}else this.root=r;return o.height>a.height?(r.right=o,s.left=a,a.parent=s,s.bounds=n.bounds.combine(a.bounds),r.bounds=s.bounds.combine(o.bounds),s.height=1+Math.max(n.height,a.height),r.height=1+Math.max(s.height,o.height)):(r.right=a,s.left=o,o.parent=s,s.bounds=n.bounds.combine(o.bounds),r.bounds=s.bounds.combine(a.bounds),s.height=1+Math.max(n.height,o.height),r.height=1+Math.max(s.height,a.height)),r}return t}getHeight(){return null===this.root?0:this.root.height}query(t,e){const i=t.bounds,s=r=>{if(r&&r.bounds.overlaps(i)){if(!r.isLeaf()||r.data===t)return s(r.left)||s(r.right);if(e.call(t,r.data))return!0}return!1};s(this.root)}rayCastQuery(t,e=1/0,i){const s=r=>{if(r&&r.bounds.rayCast(t,e)){if(!r.isLeaf())return s(r.left)||s(r.right);if(i.call(t,r.data))return!0}return!1};s(this.root)}getNodes(){const t=e=>e?[e].concat(t(e.left),t(e.right)):[];return t(this.root)}debug(t){const e=i=>{i&&(i.isLeaf()?i.bounds.draw(t,yt.Green):i.bounds.draw(t,yt.White),i.left&&e(i.left),i.right&&e(i.right))};e(this.root)}}class _i{constructor(t,e){this.pos=t,this.dir=e.normalize()}intersect(t){const e=t.begin.sub(this.pos);if(0===this.dir.cross(t.getSlope())&&0!==e.cross(this.dir))return-1;const i=this.dir.cross(t.getSlope());if(0===i)return-1;const s=e.cross(t.getSlope())/i;if(s>=0){const r=e.cross(this.dir)/i/t.getLength();if(r>=0&&r<=1)return s}return-1}intersectPoint(t){const e=this.intersect(t);return e<0?null:this.getPoint(e)}getPoint(t){return this.pos.add(this.dir.scale(t))}}class fi{constructor(){this._dynamicCollisionTree=new pi,this._pairs=new Set,this._collisionPairCache=[],this._colliders=[]}getColliders(){return this._colliders}rayCast(t,e){var i,s,r;const n=[],o=null!==(i=null==e?void 0:e.maxDistance)&&void 0!==i?i:1/0,a=null!==(s=null==e?void 0:e.collisionGroup)&&void 0!==s?s:ci.All,h=null!==(r=null==e?void 0:e.searchAllColliders)&&void 0!==r&&r;return this._dynamicCollisionTree.rayCastQuery(t,o,(e=>{var i;const s=e.owner.get(Fi);if(a.mask!==ci.All.mask&&(null===(i=null==s?void 0:s.group)||void 0===i?void 0:i.mask)!==a.mask)return!1;const r=e.rayCast(t,o);return!(!r||(n.push({distance:r.sub(t.pos).distance(),point:r,collider:e,body:s}),h))})),n}track(t){if(t)if(t instanceof Ci){const e=t.getColliders();for(const i of e)i.owner=t.owner,this._colliders.push(i),this._dynamicCollisionTree.trackCollider(i)}else this._colliders.push(t),this._dynamicCollisionTree.trackCollider(t);else tt.getInstance().warn("Cannot track null collider")}untrack(t){if(t)if(t instanceof Ci){const e=t.getColliders();for(const t of e){const e=this._colliders.indexOf(t);-1!==e&&this._colliders.splice(e,1),this._dynamicCollisionTree.untrackCollider(t)}}else{const e=this._colliders.indexOf(t);-1!==e&&this._colliders.splice(e,1),this._dynamicCollisionTree.untrackCollider(t)}else tt.getInstance().warn("Cannot untrack a null collider")}_pairExists(t,e){const i=di.calculatePairHash(t.id,e.id);return this._pairs.has(i)}broadphase(t,e,i){const s=e/1e3,r=t.filter((t=>{var e,i;const s=null===(e=t.owner)||void 0===e?void 0:e.get(Fi);return(null===(i=t.owner)||void 0===i?void 0:i.active)&&s.collisionType!==je.PreventCollision}));let n;this._collisionPairCache=[],this._pairs.clear();for(let t=0,e=r.length;t{if(!this._pairExists(n,t)&&di.canCollide(n,t)){const e=new di(n,t);this._pairs.add(e.id),this._collisionPairCache.push(e)}return!1}));if(i&&(i.physics.pairs=this._collisionPairCache.length),ii.checkForFastBodies)for(const t of r){const e=t.owner.get(Fi);if(e.collisionType!==je.Active)continue;const r=e.vel.size*s+.5*e.acc.size*s*s,n=Math.min(t.bounds.height,t.bounds.width);if(ii.disableMinimumSpeedForFastBody||r>n/2){i&&i.physics.fastBodies++;const s=e.globalPos.sub(e.oldPos),n=t.center,o=t.getFurthestPoint(e.vel),a=o.sub(s),h=new _i(a,e.vel);let l;h.pos=h.pos.add(h.dir.scale(-2*ii.surfaceEpsilon));let A=new mt(1/0,1/0);if(this._dynamicCollisionTree.rayCastQuery(h,r+2*ii.surfaceEpsilon,(e=>{if(!this._pairExists(t,e)&&di.canCollide(t,e)){const t=e.rayCast(h,r+10*ii.surfaceEpsilon);if(t){const i=t.sub(a);i.size0)for(const t of r)e.physics.contacts.set(t.id,t)}return e&&(e.physics.collisions+=i.length),i}update(t){let e=0;const i=t.length;for(let s=0;st.combine(e.bounds)),null!==(e=null===(t=i[0])||void 0===t?void 0:t.bounds)&&void 0!==e?e:(new xt).translate(this.worldPos))}get localBounds(){var t,e;const i=this.getColliders();return i.reduce(((t,e)=>t.combine(e.localBounds)),null!==(e=null===(t=i[0])||void 0===t?void 0:t.localBounds)&&void 0!==e?e:new xt)}get axes(){const t=this.getColliders();let e=[];for(const i of t)e=e.concat(i.axes);return e}getFurthestPoint(t){const e=this.getColliders(),i=[];for(const s of e)i.push(s.getFurthestPoint(t));let s=i[0],r=-Number.MAX_VALUE;for(const e of i){const i=e.dot(t);i>r&&(s=e,r=i)}return s}getInertia(t){const e=this.getColliders();let i=0;for(const s of e)i+=s.getInertia(t);return i}collide(t){let e=[t];t instanceof Ci&&(e=t.getColliders());const i=[];for(const t of e)this._dynamicAABBTree.query(t,(e=>(i.push(new di(t,e)),!1)));let s=[];for(const t of i)s=s.concat(t.collide());return s}getClosestLineBetween(t){const e=this.getColliders(),i=[];if(t instanceof Ci){const s=t.getColliders();for(const t of e)for(const e of s){const s=t.getClosestLineBetween(e);s&&i.push(s)}}else for(const s of e){const e=t.getClosestLineBetween(s);e&&i.push(e)}if(i.length){let t=i[0].getLength(),e=i[0];for(const s of i){const i=s.getLength();it.clone())))}}class yi{constructor(t,e){this.begin=t,this.end=e}get slope(){return(this.end.y-this.begin.y)/(this.end.x-this.begin.x)}get intercept(){return this.begin.y-this.slope*this.begin.x}normal(){return this._normal?this._normal:this._normal=this.end.sub(this.begin).normal()}dir(){return this._dir?this._dir:this._dir=this.end.sub(this.begin)}getPoints(){return[this.begin,this.end]}getSlope(){if(this._slope)return this._slope;const t=this.begin,e=this.end,i=t.distance(e);return this._slope=e.sub(t).scale(1/i)}getEdge(){const t=this.begin;return this.end.sub(t)}getLength(){if(this._length)return this._length;const t=this.begin,e=this.end,i=t.distance(e);return this._length=i}get midpoint(){return this.begin.add(this.end).scale(.5)}flip(){return new yi(this.end,this.begin)}below(t){return(this.end.x-this.begin.x)*(t.y-this.begin.y)-(this.end.y-this.begin.y)*(t.x-this.begin.x)>=0}clip(t,e){let i=t;i=i.normalize();const s=i.dot(this.begin)-e,r=i.dot(this.end)-e,n=[];if(s<=0&&n.push(this.begin),r<=0&&n.push(this.end),s*r<0){const t=s/(s-r);n.push(this.begin.add(this.end.sub(this.begin).scale(t)))}return 2!==n.length?null:new yi(n[0],n[1])}distanceToPoint(t,e=!1){const i=t.x,s=t.y,r=this.getLength(),n=((this.end.y-this.begin.y)*i-(this.end.x-this.begin.x)*s+this.end.x*this.begin.y-this.end.y*this.begin.x)/r;return e?n:Math.abs(n)}findVectorToPoint(t){const e=this.begin.sub(t),i=this.getSlope();return e.sub(i.scale(e.dot(i)))}findPoint(t=null,e=null){const i=this.slope,s=this.intercept;if(null!==t)return new mt(t,i*t+s);if(null!==e)return new mt((e-s)/i,e);throw new Error("You must provide an X or a Y value")}hasPoint(){let t,e=0;if("number"==typeof arguments[0]&&"number"==typeof arguments[1])t=new mt(arguments[0],arguments[1]),e=arguments[2]||0;else{if(!(arguments[0]instanceof mt))throw"Could not determine the arguments for Vector.hasPoint";t=arguments[0],e=arguments[1]||0}const i=t.x-this.begin.x,s=t.y-this.begin.y,r=this.end.x-this.begin.x,n=this.end.y-this.begin.y,o=i*n-s*r;return!(Math.abs(o)>e)&&(Math.abs(r)>=Math.abs(n)?r>0?this.begin.x<=t.x&&t.x<=this.end.x:this.end.x<=t.x&&t.x<=this.begin.x:n>0?this.begin.y<=t.y&&t.y<=this.end.y:this.end.y<=t.y&&t.y<=this.begin.y)}}function vi(t,e,i,s){const r=t.sub(i),n=e.dot(e),o=e.dot(s),a=s.dot(s),h=e.dot(r),l=s.dot(r),A=n*a-o*o;let c=A,d=A;if(0===A||A<=.01){const e=h/o;return new yi(t,i.add(s.scale(e)))}let u=o*l-a*h,g=n*l-o*h;return u<0?(u=0,g=l,d=a):u>c&&(u=c,g=l+o,d=a),g<0?(g=0,-h<0?u=0:-h>n?u=c:(u=-h,c=n)):g>d&&(g=d,-h+o<0?u=0:-h+o>n?u=c:(u=-h+o,c=n)),u=Math.abs(u)<.001?0:u/c,g=Math.abs(g)<.001?0:g/d,new yi(t.add(e.scale(u)),i.add(s.scale(g)))}const wi={PolygonPolygonClosestLine(t,e){const i=e.worldPos,s=i.sub(t.worldPos),r=s.negate(),n=new _i(t.worldPos,s),o=new _i(i,r),a=t.rayCast(n).add(n.dir.scale(.1)),h=e.rayCast(o).add(o.dir.scale(.1)),l=t.getClosestFace(a),A=e.getClosestFace(h);return vi(l.face.begin,l.face.getEdge(),A.face.begin,A.face.getEdge())},PolygonEdgeClosestLine(t,e){const i=e.worldPos.sub(t.worldPos),s=new _i(t.worldPos,i),r=t.rayCast(s).add(s.dir.scale(.1)),n=t.getClosestFace(r),o=n.face.begin,a=n.face.getEdge(),h=e.asLine();return vi(o,a,h.begin,h.getEdge())},PolygonCircleClosestLine(t,e){const i=e.worldPos,s=i.sub(t.worldPos),r=new _i(t.worldPos,s.normalize()),n=t.rayCast(r).add(r.dir.scale(.1)),o=t.getClosestFace(n),a=o.face.begin,h=o.face.getEdge();let l=(h.x*(i.x-a.x)+h.y*(i.y-a.y))/(h.x*h.x+h.y*h.y);l>1?l=1:l<0&&(l=0);const A=Math.sqrt(Math.pow(a.x+h.x*l-i.x,2)+Math.pow(a.y+h.y*l-i.y,2))-e.radius,c=(a.x+h.x*l-i.x)*e.radius/(e.radius+A),d=(a.y+h.y*l-i.y)*e.radius/(e.radius+A);return new yi(h.scale(l).add(a),new mt(i.x+c,i.y+d))},CircleCircleClosestLine(t,e){const i=e.worldPos.sub(t.worldPos),s=t.worldPos.sub(e.worldPos),r=new _i(t.worldPos,i),n=new _i(e.worldPos,s),o=t.rayCast(r),a=e.rayCast(n);return new yi(o,a)},CircleEdgeClosestLine(t,e){const i=t.worldPos,s=e.asLine(),r=s.begin,n=s.getEdge();let o=(n.x*(i.x-r.x)+n.y*(i.y-r.y))/(n.x*n.x+n.y*n.y);o>1?o=1:o<0&&(o=0);const a=Math.sqrt(Math.pow(r.x+n.x*o-i.x,2)+Math.pow(r.y+n.y*o-i.y,2))-t.radius,h=(r.x+n.x*o-i.x)*t.radius/(t.radius+a),l=(r.y+n.y*o-i.y)*t.radius/(t.radius+a);return new yi(n.scale(o).add(r),new mt(i.x+h,i.y+l))},EdgeEdgeClosestLine(t,e){const i=t.asLine(),s=i.begin,r=i.getEdge(),n=e.asLine();return vi(s,r,n.begin,n.getEdge())}};class Ii extends mi{get worldPos(){return this._globalMatrix.getPosition()}get radius(){var t;const e=this._transform,i=null!==(t=null==e?void 0:e.globalScale)&&void 0!==t?t:mt.One;return this._naturalRadius*Math.min(i.x,i.y)}set radius(t){var e;const i=this._transform,s=null!==(e=null==i?void 0:i.globalScale)&&void 0!==e?e:mt.One;this._naturalRadius=t/Math.min(s.x,s.y)}constructor(t){super(),this.offset=mt.Zero,this._globalMatrix=kt.identity(),this.offset=t.offset||mt.Zero,this.radius=t.radius||0,this._globalMatrix.translate(this.offset.x,this.offset.y)}clone(){return new Ii({offset:this.offset.clone(),radius:this.radius})}get center(){return this._globalMatrix.getPosition()}contains(t){var e,i;return(null!==(i=null===(e=this._transform)||void 0===e?void 0:e.pos)&&void 0!==i?i:this.offset).distance(t)<=this.radius}rayCast(t,e=1/0){const i=this.center,s=t.dir,r=t.pos,n=Math.sqrt(Math.pow(s.dot(r.sub(i)),2)-Math.pow(r.sub(i).distance(),2)+Math.pow(this.radius,2));if(n<0)return null;{let o=0;if(0===n)return o=-s.dot(r.sub(i)),o>0&&o=0&&h.push(o),a>=0&&h.push(a);const l=Math.min(...h);return l<=e?t.getPoint(l):null}}}getClosestLineBetween(t){if(t instanceof Ii)return wi.CircleCircleClosestLine(this,t);if(t instanceof Qi)return wi.PolygonCircleClosestLine(t,this).flip();if(t instanceof bi)return wi.CircleEdgeClosestLine(this,t).flip();throw new Error("Polygon could not collide with unknown CollisionShape "+typeof t)}collide(t){if(t instanceof Ii)return Bi.CollideCircleCircle(this,t);if(t instanceof Qi)return Bi.CollideCirclePolygon(this,t);if(t instanceof bi)return Bi.CollideCircleEdge(this,t);throw new Error("Circle could not collide with unknown CollisionShape "+typeof t)}getFurthestPoint(t){return this.center.add(t.normalize().scale(this.radius))}getFurthestLocalPoint(t){return t.normalize().scale(this.radius)}get bounds(){var t,e,i;const s=this._transform,r=null!==(t=null==s?void 0:s.globalScale)&&void 0!==t?t:mt.One,n=null!==(e=null==s?void 0:s.globalRotation)&&void 0!==e?e:0,o=null!==(i=null==s?void 0:s.globalPos)&&void 0!==i?i:mt.Zero;return new xt(this.offset.x-this._naturalRadius,this.offset.y-this._naturalRadius,this.offset.x+this._naturalRadius,this.offset.y+this._naturalRadius).rotate(n).scale(r).translate(o)}get localBounds(){return new xt(this.offset.x-this._naturalRadius,this.offset.y-this._naturalRadius,this.offset.x+this._naturalRadius,this.offset.y+this._naturalRadius)}get axes(){return[]}getInertia(t){return t*this.radius*this.radius/2}update(t){var e;this._transform=t,(null!==(e=t.matrix)&&void 0!==e?e:this._globalMatrix).clone(this._globalMatrix),this._globalMatrix.translate(this.offset.x,this.offset.y)}project(t){const e=[],i=this.center.dot(t);return e.push(i),e.push(i+this.radius),e.push(i-this.radius),new ui(Math.min.apply(Math,e),Math.max.apply(Math,e))}debug(t,e){var i,s,r,n;const o=this._transform,a=null!==(i=null==o?void 0:o.globalScale)&&void 0!==i?i:mt.One,h=null!==(s=null==o?void 0:o.globalRotation)&&void 0!==s?s:0,l=null!==(r=null==o?void 0:o.globalPos)&&void 0!==r?r:mt.Zero;t.save(),t.translate(l.x,l.y),t.rotate(h),t.scale(a.x,a.y),t.drawCircle(null!==(n=this.offset)&&void 0!==n?n:mt.Zero,this._naturalRadius,yt.Transparent,e,2),t.restore()}}class xi{constructor(t,e,i,s,r,n,o,a){var h,l;this._canceled=!1,this.colliderA=t,this.colliderB=e,this.mtv=i,this.normal=s,this.tangent=r,this.points=n,this.localPoints=o,this.info=a,this.id=di.calculatePairHash(t.id,e.id),(t.__compositeColliderId||e.__compositeColliderId)&&(this.id+="|"+di.calculatePairHash(null!==(h=t.__compositeColliderId)&&void 0!==h?h:t.id,null!==(l=e.__compositeColliderId)&&void 0!==l?l:e.id))}matchAwake(){const t=this.colliderA.owner.get(Fi),e=this.colliderB.owner.get(Fi);t&&e&&t.sleeping!==e.sleeping&&(t.sleeping&&t.collisionType!==je.Fixed&&e.sleepMotion>=ii.wakeThreshold&&t.setSleeping(!1),e.sleeping&&e.collisionType!==je.Fixed&&t.sleepMotion>=ii.wakeThreshold&&e.setSleeping(!1))}isCanceled(){return this._canceled}cancel(){this._canceled=!0}}class Ei{static findPolygonPolygonSeparation(t,e){let i=-Number.MAX_VALUE,s=null,r=null,n=-1,o=null;const a=t.getSides(),h=t.getLocalSides();for(let t=0;ti&&(i=c,s=h,r=l,n=t,o=A)}return{collider:t,separation:r?i:99,axis:r,side:s,localSide:h[n],sideId:n,point:o,localPoint:r?e.getFurthestLocalPoint(r.negate()):null}}static findCirclePolygonSeparation(t,e){const i=e.axes,s=e.center.sub(t.worldPos),r=e.getFurthestPoint(s.negate());i.push(r.sub(t.worldPos).normalize());let n=Number.MAX_VALUE,o=null,a=-1;for(let s=0;sr)return[];const o=r-n,a=s.sub(i).normalize(),h=a.perpendicular(),l=a.scale(o),A=t.getFurthestPoint(a),c=t.getFurthestLocalPoint(a);return[new xi(t,e,l,a,h,[A],[c],{collider:t,separation:o,axis:a,point:A})]},CollideCirclePolygon(t,e){var i,s;let r=Ei.findCirclePolygonSeparation(t,e);if(!r)return[];const n=r.dot(e.center.sub(t.center));r=n<0?r.negate():r;const o=t.getFurthestPoint(r),a=(null!==(s=null===(i=t.owner)||void 0===i?void 0:i.get(li))&&void 0!==s?s:new li).applyInverse(o),h=r.normalize(),l={collider:t,separation:-r.size,axis:h,point:o,localPoint:a,side:e.findSide(h.negate()),localSide:e.findLocalSide(h.negate())};return[new xi(t,e,r,h,h.perpendicular(),[o],[a],l)]},CollideCircleEdge(t,e){const i=t.center,s=e.asLine(),r=s.end.sub(s.begin),n=r.dot(s.end.sub(i)),o=r.dot(i.sub(s.begin)),a=e.asLine(),h=e.asLocalLine();if(o<=0){const r=s.begin.sub(i),n=r.dot(r);if(n>t.radius*t.radius)return[];const o=r.normalize(),l=t.radius-Math.sqrt(n),A={collider:t,separation:l,axis:o,point:a.begin,side:a,localSide:h};return[new xi(t,e,o.scale(l),o,o.perpendicular(),[a.begin],[h.begin],A)]}if(n<=0){const r=s.end.sub(i),n=r.dot(r);if(n>t.radius*t.radius)return[];const o=r.normalize(),l=t.radius-Math.sqrt(n),A={collider:t,separation:l,axis:o,point:a.end,side:a,localSide:h};return[new xi(t,e,o.scale(l),o,o.perpendicular(),[a.end],[h.end],A)]}const l=r.dot(r),A=s.begin.scale(n).add(s.end.scale(o)).scale(1/l),c=i.sub(A),d=c.dot(c);if(d>t.radius*t.radius)return[];let u=r.perpendicular();u.dot(i.sub(s.begin))<0&&(u.x=-u.x,u.y=-u.y),u=u.normalize();const g=t.radius-Math.sqrt(d),p=u.scale(g),_={collider:t,separation:g,axis:u,point:A,side:a,localSide:h};return[new xi(t,e,p,u.negate(),u.negate().perpendicular(),[A],[A.sub(e.worldPos)],_)]},CollideEdgeEdge:()=>[],CollidePolygonEdge(t,e){var i;const s=t.center,r=e.center.sub(s).normalize(),n=new Qi({points:[e.begin,e.end,e.end.add(r.scale(100)),e.begin.add(r.scale(100))],offset:e.offset});n.owner=e.owner,(null===(i=e.owner)||void 0===i?void 0:i.get(li))&&n.update(e.owner.get(li).get());const o=this.CollidePolygonPolygon(t,n);return o.length&&(o[0].colliderB=e,o[0].id=di.calculatePairHash(t.id,e.id)),o},CollidePolygonPolygon(t,e){var i,s,r,n;const o=Ei.findPolygonPolygonSeparation(t,e);if(o.separation>0)return[];const a=Ei.findPolygonPolygonSeparation(e,t);if(a.separation>0)return[];const h=o.separation>a.separation?o:a,l=(h.collider===t?e:t).findSide(h.axis.negate()),A=h.side,c=A.dir().normalize(),d=l.clip(c.negate(),-c.dot(A.begin));let u=null;if(d&&(u=d.clip(c,c.dot(A.end))),u){const o=u.getPoints().filter((t=>A.below(t)));let a=h.axis,l=a.perpendicular();e.center.sub(t.center).dot(a)<0&&(a=a.negate(),l=a.perpendicular());let c=[];if(h.collider===t){const t=null!==(s=null===(i=e.owner)||void 0===i?void 0:i.get(li))&&void 0!==s?s:new li;c=o.map((e=>t.applyInverse(e)))}else{const e=null!==(n=null===(r=t.owner)||void 0===r?void 0:r.get(li))&&void 0!==n?n:new li;c=o.map((t=>e.applyInverse(t)))}return[new xi(t,e,a.scale(-h.separation),a,l,o,c,h)]}return[]},FindContactSeparation(t,e){var i,s,r,n;const o=t.colliderA,a=null!==(s=null===(i=t.colliderA.owner)||void 0===i?void 0:i.get(li))&&void 0!==s?s:new li,h=t.colliderB,l=null!==(n=null===(r=t.colliderB.owner)||void 0===r?void 0:r.get(li))&&void 0!==n?n:new li;if(o instanceof Ii&&h instanceof Ii)return-(o.radius+h.radius-a.pos.distance(l.pos));if(o instanceof Qi&&h instanceof Qi&&t.info.localSide){let i,s;return t.info.collider===o?(i=new yi(a.apply(t.info.localSide.begin),a.apply(t.info.localSide.end)),s=l.apply(e)):(i=new yi(l.apply(t.info.localSide.begin),l.apply(t.info.localSide.end)),s=a.apply(e)),i.distanceToPoint(s,!0)}if(o instanceof Qi&&h instanceof Ii||h instanceof Qi&&o instanceof Ii){const i=a.apply(e);if(t.info.side)return t.info.side.distanceToPoint(i,!0)}if(o instanceof bi&&h instanceof Qi||h instanceof bi&&o instanceof Qi){let i;if(i=t.info.collider===o?l.apply(e):a.apply(e),t.info.side)return t.info.side.distanceToPoint(i,!0)}if(o instanceof Ii&&h instanceof bi||h instanceof Ii&&o instanceof bi){const i=l.apply(e);let s;o instanceof Ii&&(s=o.getFurthestPoint(t.normal));const r=i.distance(s);if(t.info.side)return r>0?-r:0}return 0}};class bi extends mi{constructor(t){var e;super(),this._globalMatrix=kt.identity(),this.begin=t.begin||mt.Zero,this.end=t.end||mt.Zero,this.offset=null!==(e=t.offset)&&void 0!==e?e:mt.Zero}clone(){return new bi({begin:this.begin.clone(),end:this.end.clone()})}get worldPos(){var t;const e=this._transform;return null!==(t=null==e?void 0:e.globalPos.add(this.offset))&&void 0!==t?t:this.offset}get center(){const t=this._getTransformedBegin(),e=this._getTransformedEnd();return t.average(e)}_getTransformedBegin(){return this._globalMatrix.multiply(this.begin)}_getTransformedEnd(){return this._globalMatrix.multiply(this.end)}getSlope(){const t=this._getTransformedBegin(),e=this._getTransformedEnd(),i=t.distance(e);return e.sub(t).scale(1/i)}getLength(){const t=this._getTransformedBegin(),e=this._getTransformedEnd();return t.distance(e)}contains(){return!1}rayCast(t,e=1/0){const i=this._getTransformedBegin().sub(t.pos);if(0===t.dir.cross(this.getSlope())&&0!==i.cross(t.dir))return null;const s=t.dir.cross(this.getSlope());if(0===s)return null;const r=i.cross(this.getSlope())/s;if(r>=0&&r<=e){const e=i.cross(t.dir)/s/this.getLength();if(e>=0&&e<=1)return t.getPoint(r)}return null}getClosestLineBetween(t){if(t instanceof Ii)return wi.CircleEdgeClosestLine(t,this);if(t instanceof Qi)return wi.PolygonEdgeClosestLine(t,this).flip();if(t instanceof bi)return wi.EdgeEdgeClosestLine(this,t);throw new Error("Polygon could not collide with unknown CollisionShape "+typeof t)}collide(t){if(t instanceof Ii)return Bi.CollideCircleEdge(t,this);if(t instanceof Qi)return Bi.CollidePolygonEdge(t,this);if(t instanceof bi)return Bi.CollideEdgeEdge();throw new Error("Edge could not collide with unknown CollisionShape "+typeof t)}getFurthestPoint(t){const e=this._getTransformedBegin(),i=this._getTransformedEnd();return t.dot(e)>0?e:i}_boundsFromBeginEnd(t,e,i=10){return new xt(Math.min(t.x,e.x)-i,Math.min(t.y,e.y)-i,Math.max(t.x,e.x)+i,Math.max(t.y,e.y)+i)}get bounds(){const t=this._getTransformedBegin(),e=this._getTransformedEnd();return this._boundsFromBeginEnd(t,e)}get localBounds(){return this._boundsFromBeginEnd(this.begin,this.end)}asLine(){return new yi(this._getTransformedBegin(),this._getTransformedEnd())}asLocalLine(){return new yi(this.begin,this.end)}get axes(){const t=this._getTransformedEnd().sub(this._getTransformedBegin()).normal(),e=[];return e.push(t),e.push(t.negate()),e.push(t.normal()),e.push(t.normal().negate()),e}getInertia(t){const e=this.end.sub(this.begin).distance()/2;return t*e*e}update(t){var e;this._transform=t,(null!==(e=t.matrix)&&void 0!==e?e:this._globalMatrix).clone(this._globalMatrix),this._globalMatrix.translate(this.offset.x,this.offset.y)}project(t){const e=[],i=[this._getTransformedBegin(),this._getTransformedEnd()],s=i.length;for(let r=0;rMath.PI&&(h-=2*Math.PI),0===o){if(0===h)return!1;r=h>0?1:-1}else if(r*h<=0)return!1;n+=h}return 1===Math.abs(Math.round(n/(2*Math.PI)))}tessellate(){const t=[];for(let e=1;eSi.Polygon(t))))}triangulate(){if(this.points.length<3)throw Error("Invalid polygon");function t(t,e){return t>=e.length?e[t%e.length]:t<0?e[t%e.length+e.length]:e[t]}function e(t,e,i,s){const r=i.sub(e),n=s.sub(i),o=e.sub(s),a=t.sub(e),h=t.sub(i),l=t.sub(s),A=r.cross(a),c=n.cross(h),d=o.cross(l);return!(A>0||c>0||d>0)}const i=[],s=[...this.points],r=pt(0,this.points.length-1);for(;r.length>3;)for(let n=0;n0))continue;let u=!0;for(let t=0;tSi.Polygon(t))))}clone(){return new Qi({offset:this.offset.clone(),points:this.points.map((t=>t.clone()))})}get worldPos(){return this._transform?this._transform.pos.add(this.offset):this.offset}get center(){return this.bounds.center}_calculateTransformation(){const t=this.points,e=t.length;this._transformedPoints.length=0;for(let i=0;is&&(i=n,s=o)}return i}findLocalSide(t){const e=this.getLocalSides();let i=e[0],s=-Number.MAX_VALUE;for(let r=0;rs&&(i=n,s=o)}return i}get axes(){const t=[],e=this.getSides();for(let i=0;i=0?t+1:t}),0)%2!=0}getClosestLineBetween(t){if(t instanceof Ii)return wi.PolygonCircleClosestLine(this,t);if(t instanceof Qi)return wi.PolygonPolygonClosestLine(this,t);if(t instanceof bi)return wi.PolygonEdgeClosestLine(this,t);throw new Error("Polygon could not collide with unknown CollisionShape "+typeof t)}collide(t){if(t instanceof Ii)return Bi.CollideCirclePolygon(t,this);if(t instanceof Qi)return Bi.CollidePolygonPolygon(this,t);if(t instanceof bi)return Bi.CollidePolygonEdge(this,t);throw new Error("Polygon could not collide with unknown CollisionShape "+typeof t)}getFurthestPoint(t){const e=this.getTransformedPoints();let i=null,s=-Number.MAX_VALUE;for(let r=0;rs&&(s=n,i=e[r])}return i}getFurthestLocalPoint(t){const e=this.points;let i=e[0],s=-Number.MAX_VALUE;for(let r=0;rs&&(s=n,i=e[r])}return i}getClosestFace(t){const e=this.getSides();let i=Number.POSITIVE_INFINITY,s=-1,r=-1;for(let n=0;n=0&&s=0?t.getPoint(r):null}project(t){const e=this.getTransformedPoints(),i=e.length;let s=Number.MAX_VALUE,r=-Number.MAX_VALUE;for(let n=0;n=t?[Si.Circle(t/2,Ct(0,-e/2+t/2).add(i)),Si.Box(t,e-t,mt.Half,i),Si.Circle(t/2,Ct(0,e/2-t/2).add(i))]:[Si.Circle(e/2,Ct(-t/2+e/2,0).add(i)),Si.Box(t-e,e,mt.Half,i),Si.Circle(e/2,Ct(t/2-e/2,0).add(i))])}}class Di extends oi{constructor(t){super(),this.type="ex.collider",this.events=new _,this.$colliderAdded=new hi,this.$colliderRemoved=new hi,this.set(t)}get(){return this._collider}set(t){return this.clear(),t&&(this._collider=t,this._collider.owner=this.owner,t.events.pipe(this.events),this.$colliderAdded.notifyAll(t),this.update()),t}clear(){this._collider&&(this._collider.events.unpipe(this.events),this.$colliderRemoved.notifyAll(this._collider),this._collider.owner=null,this._collider=null)}clone(){return new Di(this._collider.clone())}get bounds(){var t,e;return null!==(e=null===(t=this._collider)||void 0===t?void 0:t.bounds)&&void 0!==e?e:new xt}get localBounds(){var t,e;return null!==(e=null===(t=this._collider)||void 0===t?void 0:t.localBounds)&&void 0!==e?e:new xt}update(){var t;const e=null===(t=this.owner)||void 0===t?void 0:t.get(li);this._collider&&(this._collider.owner=this.owner,e&&this._collider.update(e.get()))}collide(t){let e=this._collider,i=t._collider;if(!e||!i)return[];let s=!1;if(i instanceof Ci&&(e=i,i=this._collider,s=!0),this._collider){const r=e.collide(i);return r?(s&&r.forEach((e=>{e.mtv=e.mtv.negate(),e.normal=e.normal.negate(),e.tangent=e.normal.perpendicular(),e.colliderA=this._collider,e.colliderB=t._collider})),r):[]}return[]}onAdd(t){this._collider&&this.update(),this.events.on("precollision",(e=>{const i=e;t.events.emit("precollision",new L(i.target.owner,i.other.owner,i.side,i.intersection))})),this.events.on("postcollision",(e=>{const i=e;t.events.emit("postcollision",new N(i.target.owner,i.other.owner,i.side,i.intersection))})),this.events.on("collisionstart",(e=>{const i=e;t.events.emit("collisionstart",new H(i.target.owner,i.other.owner,i.contact))})),this.events.on("collisionend",(e=>{const i=e;t.events.emit("collisionend",new q(i.target.owner,i.other.owner))}))}onRemove(){this.events.clear(),this.$colliderRemoved.notifyAll(this._collider)}useBoxCollider(t,e,i=mt.Half,s=mt.Zero){const r=Si.Box(t,e,i,s);return this.set(r)}usePolygonCollider(t,e=mt.Zero){const i=Si.Polygon(t,e);return this.set(i)}useCircleCollider(t,e=mt.Zero){const i=Si.Circle(t,e);return this.set(i)}useEdgeCollider(t,e){const i=Si.Edge(t,e);return this.set(i)}useCompositeCollider(t){return this.set(new Ci(t))}}var Ti;!function(t){t.Rotation="rotation",t.X="x",t.Y="y"}(Ti||(Ti={}));class Fi extends oi{constructor(t){var e,i,s;super(),this.type="ex.body",this.dependencies=[li,Ai],this.id=p("body",Fi._ID++),this.events=new _,this._oldTransform=new ni,this.__oldTransformCaptured=!1,this.enableFixedUpdateInterpolate=!0,this.collisionType=je.PreventCollision,this.group=ci.All,this._mass=ii.defaultMass,this.sleepMotion=5*ii.sleepEpsilon,this.canSleep=ii.bodiesCanSleepByDefault,this._sleeping=!1,this.bounciness=.2,this.friction=.99,this.useGravity=!0,this.limitDegreeOfFreedom=[],this.oldVel=new mt(0,0),this.oldAcc=mt.Zero,t&&(this.collisionType=null!==(e=t.type)&&void 0!==e?e:this.collisionType,this.group=null!==(i=t.group)&&void 0!==i?i:this.group,this.useGravity=null!==(s=t.useGravity)&&void 0!==s?s:this.useGravity)}get matrix(){return this.transform.get().matrix}get mass(){return this._mass}set mass(t){this._mass=t,this._cachedInertia=void 0,this._cachedInverseInertia=void 0}get inverseMass(){return this.collisionType===je.Fixed?0:1/this.mass}get sleeping(){return this._sleeping}setSleeping(t){this._sleeping=t,t?(this.vel=mt.Zero,this.acc=mt.Zero,this.angularVelocity=0,this.sleepMotion=0):this.sleepMotion=5*ii.sleepEpsilon}updateMotion(){this._sleeping&&this.setSleeping(!0);const t=this.vel.size*this.vel.size+Math.abs(this.angularVelocity*this.angularVelocity),e=ii.sleepBias;this.sleepMotion=e*this.sleepMotion+(1-e)*t,this.sleepMotion=ct(this.sleepMotion,0,10*ii.sleepEpsilon),this.canSleep&&this.sleepMotion{this._cachedInertia=null})),t.$colliderRemoved.subscribe((()=>{this._cachedInertia=null}));const e=t.get();if(e)return this._cachedInertia=e.getInertia(this.mass)}return 0}get inverseInertia(){return this._cachedInverseInertia?this._cachedInverseInertia:this._cachedInverseInertia=this.collisionType===je.Fixed?0:1/this.inertia}get active(){var t;return!!(null===(t=this.owner)||void 0===t?void 0:t.active)}get center(){return this.globalPos}get transform(){var t;return null===(t=this.owner)||void 0===t?void 0:t.get(li)}get motion(){var t;return null===(t=this.owner)||void 0===t?void 0:t.get(Ai)}get pos(){return this.transform.pos}set pos(t){this.transform.pos=t}get globalPos(){return this.transform.globalPos}set globalPos(t){this.transform.globalPos=t}get oldPos(){return this._oldTransform.pos}get vel(){return this.motion.vel}set vel(t){this.motion.vel=t}get acc(){return this.motion.acc}set acc(t){this.motion.acc=t}get torque(){return this.motion.torque}set torque(t){this.motion.torque=t}get oldRotation(){return this._oldTransform.rotation}get rotation(){return this.transform.globalRotation}set rotation(t){this.transform.globalRotation=t}get scale(){return this.transform.globalScale}set scale(t){this.transform.globalScale=t}get oldScale(){return this._oldTransform.scale}get scaleFactor(){return this.motion.scaleFactor}set scaleFactor(t){this.motion.scaleFactor=t}get angularVelocity(){return this.motion.angularVelocity}set angularVelocity(t){this.motion.angularVelocity=t}applyImpulse(t,e){if(this.collisionType!==je.Active)return;const i=e.scale(this.inverseMass);if(this.limitDegreeOfFreedom.includes(Ti.X)&&(i.x=0),this.limitDegreeOfFreedom.includes(Ti.Y)&&(i.y=0),this.vel.addEqual(i),!this.limitDegreeOfFreedom.includes(Ti.Rotation)){const i=t.sub(this.globalPos);this.angularVelocity+=this.inverseInertia*i.cross(e)}}applyLinearImpulse(t){if(this.collisionType!==je.Active)return;const e=t.scale(this.inverseMass);this.limitDegreeOfFreedom.includes(Ti.X)&&(e.x=0),this.limitDegreeOfFreedom.includes(Ti.Y)&&(e.y=0),this.vel=this.vel.add(e)}applyAngularImpulse(t,e){if(this.collisionType===je.Active&&!this.limitDegreeOfFreedom.includes(Ti.Rotation)){const i=t.sub(this.globalPos);this.angularVelocity+=this.inverseInertia*i.cross(e)}}captureOldTransform(){this.__oldTransformCaptured=!0,this.transform.get().clone(this._oldTransform),this.oldVel.setTo(this.vel.x,this.vel.y),this.oldAcc.setTo(this.acc.x,this.acc.y)}clone(){return super.clone()}}Fi._ID=0;class ki{constructor(t){this.data=t,this.type="Component Added"}}function Pi(t){return!!t&&"Component Added"===t.type}class Ri{constructor(t){this.data=t,this.type="Component Removed"}}function Mi(t){return!!t&&"Component Removed"===t.type}const Li={Initialize:"initialize",PreUpdate:"preupdate",PostUpdate:"postupdate"};class Ni{constructor(t,e){if(this.events=new _,this.id=Ni._ID++,this.scene=null,this._name="anonymous",this.active=!0,this._componentsToRemove=[],this._componentTypeToInstance=new Map,this._componentStringToInstance=new Map,this._tagsMemo=[],this._typesMemo=[],this.componentAdded$=new hi,this.componentRemoved$=new hi,this._parent=null,this.childrenAdded$=new hi,this.childrenRemoved$=new hi,this._children=[],this._isInitialized=!1,this._setName(e),t)for(const e of t)this.addComponent(e)}_setName(t){t&&(this._name=t)}get name(){return this._name}kill(){this.active&&(this.active=!1,this.unparent())}isKilled(){return!this.active}get tags(){return this._tagsMemo}hasTag(t){return this.tags.includes(t)}addTag(t){return this.addComponent(new ai(t))}removeTag(t,e=!1){return this.removeComponent(t,e)}get types(){return this._typesMemo}_rebuildMemos(){this._tagsMemo=Array.from(this._componentStringToInstance.values()).filter((t=>t instanceof ai)).map((t=>t.type)),this._typesMemo=Array.from(this._componentStringToInstance.keys())}getComponents(){return Array.from(this._componentStringToInstance.values())}_notifyAddComponent(t){this._rebuildMemos();const e=new ki({component:t,entity:this});this.componentAdded$.notifyAll(e)}_notifyRemoveComponent(t){const e=new Ri({component:t,entity:this});this.componentRemoved$.notifyAll(e),this._rebuildMemos()}get parent(){return this._parent}get children(){return this._children}unparent(){this._parent&&(this._parent.removeChild(this),this._parent=null)}addChild(t){if(null!==t.parent)throw new Error("Entity already has a parent, cannot add without unparenting");if(this.getAncestors().includes(t))throw new Error("Cycle detected, cannot add entity");return this._children.push(t),t._parent=this,this.childrenAdded$.notifyAll(t),this}removeChild(t){return t.parent===this&&(Qt(t,this._children),t._parent=null,this.childrenRemoved$.notifyAll(t)),this}removeAllChildren(){for(let t=this.children.length-1;t>=0;t--)this.removeChild(this.children[t]);return this}getAncestors(){const t=[this];let e=this.parent;for(;e;)t.push(e),e=e.parent;return t.reverse()}getDescendants(){let t=[this],e=[this];for(;e.length>0;){const i=e.pop();e=e.concat(i.children),t=t.concat(i.children)}return t}clone(){const t=new Ni;for(const e of this.types)t.addComponent(this.get(e).clone());for(const e of this.children)t.addChild(e.clone());return t}addTemplate(t,e=!1){for(const i of t.getComponents())this.addComponent(i.clone(),e);for(const e of t.children)this.addChild(e.clone().addTemplate(e));return this}addComponent(t,e=!1){if(this.has(t.type)){if(!e)return this;this.removeComponent(t,!0)}if(t.dependencies&&t.dependencies.length)for(const e of t.dependencies)this.addComponent(new e);t.owner=this;const i=t.constructor;return this._componentTypeToInstance.set(i,t),this._componentStringToInstance.set(t.type,t),t.onAdd&&t.onAdd(this),this._notifyAddComponent(t),this}removeComponent(t,e=!1){return e?"string"==typeof t?this._removeComponentByType(t):t instanceof oi&&this._removeComponentByType(t.type):this._componentsToRemove.push(t),this}clearComponents(){const t=this.getComponents();for(const e of t)this.removeComponent(e)}_removeComponentByType(t){if(this.has(t)){const e=this.get(t);e.owner=null,e.onRemove&&e.onRemove(this);const i=e.constructor;this._componentTypeToInstance.delete(i),this._componentStringToInstance.delete(e.type),this._notifyRemoveComponent(e)}}processComponentRemoval(){for(const t of this._componentsToRemove){const e="string"==typeof t?t:t.type;this._removeComponentByType(e)}this._componentsToRemove.length=0}has(t){return"string"==typeof t?this._componentStringToInstance.has(t):this._componentTypeToInstance.has(t)}get(t){return"string"==typeof t?this._componentStringToInstance.get(t):this._componentTypeToInstance.get(t)}get isInitialized(){return this._isInitialized}_initialize(t){this.isInitialized||(this.onInitialize(t),this.events.emit("initialize",new V(t,this)),this._isInitialized=!0)}_preupdate(t,e){this.events.emit("preupdate",new b(t,e,this)),this.onPreUpdate(t,e)}_postupdate(t,e){this.events.emit("postupdate",new Q(t,e,this)),this.onPostUpdate(t,e)}onInitialize(t){}onPreUpdate(t,e){}onPostUpdate(t,e){}update(t,e){this._initialize(t),this._preupdate(t,e);for(const i of this.children)i.update(t,e);this._postupdate(t,e)}emit(t,e){this.events.emit(t,e)}on(t,e){return this.events.on(t,e)}once(t,e){return this.events.once(t,e)}off(t,e){this.events.off(t,e)}}function Gi(t){return!!t.tick}Ni._ID=0;class Ui{constructor(t,e){this._options=t,this._graphics=e,this.graphics=[]}get name(){return this._options.name}hide(t){if(t){let e=null;e=t instanceof Ut?t:this._graphics.getGraphic(t),this.graphics=this.graphics.filter((t=>t.graphic!==e)),this._graphics.recalculateBounds()}else this.graphics.length=0}show(t,e){let i;return e={...e},t instanceof Ut?i=this._graphics.copyGraphics?t.clone():t:(i=this._graphics.getGraphic(t),i||tt.getInstance().error(`No such graphic added to component named ${t}. These named graphics are available: `,this._graphics.getNames())),i?(this.graphics.push({graphic:i,options:e}),this._graphics.recalculateBounds(),i):null}use(t,e){return e={...e},this.hide(),this.show(t,e)}get order(){return this._options.order}set order(t){this._options.order=t}get offset(){var t;return null!==(t=this._options.offset)&&void 0!==t?t:mt.Zero}set offset(t){this._options.offset=t}get currentKeys(){var t;return null!==(t=this.name)&&void 0!==t?t:"anonymous"}clone(t){const e=new Ui({...this._options},t);return e.graphics=[...this.graphics.map((t=>({graphic:t.graphic.clone(),options:{...t.options}})))],e}}class zi{constructor(t){this._component=t,this._layers=[],this._layerMap={},this.default=new Ui({name:"default",order:0},t),this._maybeAddLayer(this.default)}create(t){const e=new Ui(t,this._component);return this._maybeAddLayer(e)}get(t){return t?this._getLayer(t):this._layers}currentKeys(){const t=[];for(const e of this._layers)t.push(e.currentKeys);return t}has(t){return t in this._layerMap}_maybeAddLayer(t){return this._layerMap[t.name]?this._layerMap[t.name]:(this._layerMap[t.name]=t,this._layers.push(t),this._layers.sort(((t,e)=>t.order-e.order)),t)}_getLayer(t){return this._layerMap[t]}clone(t){const e=new zi(t);return e._layerMap={},e._layers=[],e.default=this.default.clone(t),e._maybeAddLayer(e.default),this._layers.filter((t=>"default"!==t.name)).map((e=>e.clone(t))).forEach((t=>e._maybeAddLayer(t))),e}}class Oi extends oi{getGraphic(t){return this._graphics[t]}getNames(){return Object.keys(this._graphics)}constructor(t){super(),this.type="ex.graphics",this._graphics={},this.visible=!0,this.opacity=1,this.offset=mt.Zero,this.anchor=mt.Half,this.flipHorizontal=!1,this.flipVertical=!1,this.copyGraphics=!1,this._localBounds=null,t={visible:this.visible,...t};const{current:e,anchor:i,opacity:s,visible:r,graphics:n,offset:o,copyGraphics:a,onPreDraw:h,onPostDraw:l}=t;this._graphics=n||{},this.offset=null!=o?o:this.offset,this.opacity=null!=s?s:this.opacity,this.anchor=null!=i?i:this.anchor,this.copyGraphics=null!=a?a:this.copyGraphics,this.onPreDraw=null!=h?h:this.onPreDraw,this.onPostDraw=null!=l?l:this.onPostDraw,this.visible=!!r,this.layers=new zi(this),e&&this._graphics[e]&&this.show(this._graphics[e])}get current(){return this.layers.default.graphics}get graphics(){return this._graphics}add(t,e){let i="default",s=null;return"string"==typeof t?(i=t,s=e):s=t,this._graphics[i]=this.copyGraphics?s.clone():s,"default"===i&&this.show("default"),s}show(t,e){const i=this.layers.default.show(t,e);return this.recalculateBounds(),i}use(t,e){const i=this.layers.default.use(t,e);return this.recalculateBounds(),i}hide(t){this.layers.default.hide(t)}set localBounds(t){this._localBounds=t}recalculateBounds(){let t=new xt;for(const e of this.layers.get())for(const{graphic:i,options:s}of e.graphics){let r=this.anchor,n=this.offset;(null==s?void 0:s.anchor)&&(r=s.anchor),(null==s?void 0:s.offset)&&(n=s.offset);const o=i.localBounds,a=-o.width*r.x+n.x,h=-o.height*r.y+n.y;t=null==i?void 0:i.localBounds.translate(Ct(a+e.offset.x,h+e.offset.y)).combine(t)}this._localBounds=t}get localBounds(){return this._localBounds&&!this._localBounds.hasZeroDimensions()||this.recalculateBounds(),this._localBounds}update(t,e=0){for(const i of this.layers.get())for(const{graphic:s}of i.graphics)Gi(s)&&(null==s||s.tick(t,e))}clone(){const t=new Oi;return t._graphics={...this._graphics},t.offset=this.offset.clone(),t.opacity=this.opacity,t.anchor=this.anchor.clone(),t.copyGraphics=this.copyGraphics,t.onPreDraw=this.onPreDraw,t.onPostDraw=this.onPostDraw,t.visible=this.visible,t.layers=this.layers.clone(t),t}}class Hi extends Te{constructor(t){super(t),this.width=t.width,this.height=t.height,this.rasterize()}clone(){return new Hi({width:this.width,height:this.height,...this.cloneGraphicOptions(),...this.cloneRasterOptions()})}execute(t){this.color&&t.fillRect(0,0,this.width,this.height),this.strokeColor&&t.strokeRect(0,0,this.width,this.height)}}class qi extends Te{get radius(){return this._radius}set radius(t){this._radius=t,this.width=2*this._radius,this.height=2*this._radius,this.flagDirty()}constructor(t){var e,i,s;super(t),this._radius=0;const r=null!==(e=t.lineWidth)&&void 0!==e?e:t.strokeColor?1:0;this.padding=null!==(i=t.padding)&&void 0!==i?i:2+r/2,this.radius=t.radius,this.filtering=null!==(s=t.filtering)&&void 0!==s?s:Ot.Blended,this.rasterize()}clone(){return new qi({radius:this.radius,...this.cloneGraphicOptions(),...this.cloneRasterOptions()})}execute(t){this.radius>0&&(t.beginPath(),t.arc(this.radius,this.radius,this.radius,0,2*Math.PI),this.color&&t.fill(),this.strokeColor&&t.stroke())}}class Vi extends oi{constructor(){super(...arguments),this.type="ex.pointer",this.useColliderShape=!0,this.useGraphicsBounds=!1}}class ji{static CreateReversibleEasingFunction(t){return(e,i,s,r)=>snew mt(t(e,i.x,s.x,r),t(e,i.y,s.y,r))}}ji.Linear=ji.CreateReversibleEasingFunction(((t,e,i,s)=>(i-=e)*t/s+e)),ji.EaseInQuad=ji.CreateReversibleEasingFunction(((t,e,i,s)=>(i-=e)*(t/=s)*t+e)),ji.EaseOutQuad=ji.CreateReversibleEasingFunction(((t,e,i,s)=>-(i-=e)*(t/=s)*(t-2)+e)),ji.EaseInOutQuad=ji.CreateReversibleEasingFunction(((t,e,i,s)=>(i-=e,(t/=s/2)<1?i/2*t*t+e:-i/2*(--t*(t-2)-1)+e))),ji.EaseInCubic=ji.CreateReversibleEasingFunction(((t,e,i,s)=>(i-=e)*(t/=s)*t*t+e)),ji.EaseOutCubic=ji.CreateReversibleEasingFunction(((t,e,i,s)=>(t/=s,(i-=e)*(--t*t*t+1)+e))),ji.EaseInOutCubic=ji.CreateReversibleEasingFunction(((t,e,i,s)=>(i-=e,(t/=s/2)<1?i/2*t*t*t+e:i/2*((t-=2)*t*t+2)+e)));class Yi{constructor(t){this._actions=[],this._completedActions=[],this._entity=t}add(t){this._actions.push(t)}remove(t){const e=this._actions.indexOf(t);this._actions.splice(e,1)}clearActions(){this._actions.length=0,this._completedActions.length=0,this._currentAction&&this._currentAction.stop()}getActions(){return this._actions.concat(this._completedActions)}hasNext(){return this._actions.length>0}isComplete(){return 0===this._actions.length}reset(){this._actions=this.getActions();const t=this._actions.length;for(let e=0;e0&&(this._currentAction=this._actions[0],this._currentAction.update(t),this._currentAction.isComplete(this._entity)&&this._completedActions.push(this._actions.shift()))}}class Ki{constructor(t,e,i){this._stopped=!1,this._repeatBuilder=e,this._repeatContext=new fs(t),this._actionQueue=this._repeatContext.getQueue(),this._repeat=i,this._originalRepeat=i,this._repeatBuilder(this._repeatContext),this._repeat--}update(t){this._actionQueue.isComplete()&&(this._actionQueue.clearActions(),this._repeatBuilder(this._repeatContext),this._repeat--),this._actionQueue.update(t)}isComplete(){return this._stopped||this._repeat<=0&&this._actionQueue.isComplete()}stop(){this._stopped=!0}reset(){this._repeat=this._originalRepeat}}class Wi{constructor(t,e){this._stopped=!1,this._repeatBuilder=e,this._repeatContext=new fs(t),this._actionQueue=this._repeatContext.getQueue(),this._repeatBuilder(this._repeatContext)}update(t){this._stopped||(this._actionQueue.isComplete()&&(this._actionQueue.clearActions(),this._repeatBuilder(this._repeatContext)),this._actionQueue.update(t))}isComplete(){return this._stopped}stop(){this._stopped=!0,this._actionQueue.clearActions()}reset(){}}class Ji{constructor(t,e,i,s){if(this._started=!1,this._stopped=!1,this._entity=t,this._tx=t.get(li),this._motion=t.get(Ai),this._speed=s,this._offset=new mt(e,i),s<=0)throw tt.getInstance().error("Attempted to moveBy with speed less than or equal to zero : "+s),new Error("Speed must be greater than 0 pixels per second")}update(t){this._started||(this._started=!0,this._start=new mt(this._tx.pos.x,this._tx.pos.y),this._end=this._start.add(this._offset),this._distance=this._offset.size,this._dir=this._end.sub(this._start).normalize()),this.isComplete(this._entity)?(this._tx.pos=Ct(this._end.x,this._end.y),this._motion.vel=Ct(0,0)):this._motion.vel=this._dir.scale(this._speed)}isComplete(t){const e=t.get(li);return this._stopped||e.pos.distance(this._start)>=this._distance}stop(){this._motion.vel=Ct(0,0),this._stopped=!0}reset(){this._started=!1,this._stopped=!1}}class Xi{constructor(t,e,i,s){this.entity=t,this._started=!1,this._stopped=!1,this._tx=t.get(li),this._motion=t.get(Ai),this._end=new mt(e,i),this._speed=s}update(t){this._started||(this._started=!0,this._start=new mt(this._tx.pos.x,this._tx.pos.y),this._distance=this._start.distance(this._end),this._dir=this._end.sub(this._start).normalize());const e=this._dir.scale(this._speed);this._motion.vel=Ct(e.x,e.y),this.isComplete(this.entity)&&(this._tx.pos=Ct(this._end.x,this._end.y),this._motion.vel=Ct(0,0))}isComplete(t){const e=t.get(li);return this._stopped||new mt(e.pos.x,e.pos.y).distance(this._start)>=this._distance}stop(){this._motion.vel=Ct(0,0),this._stopped=!0}reset(){this._started=!1,this._stopped=!1}}var Zi,$i,ts,es,is,ss;!function(t){t[t.ShortestPath=0]="ShortestPath",t[t.LongestPath=1]="LongestPath",t[t.Clockwise=2]="Clockwise",t[t.CounterClockwise=3]="CounterClockwise"}(Zi||(Zi={}));class rs{constructor(t,e,i,s){this._started=!1,this._stopped=!1,this._tx=t.get(li),this._motion=t.get(Ai),this._end=e,this._speed=i,this._rotationType=s||Zi.ShortestPath}update(t){if(!this._started){this._started=!0,this._start=this._tx.rotation,this._currentNonCannonAngle=this._tx.rotation;const t=Math.abs(this._end-this._start),e=ht-t;switch(t>e?(this._shortDistance=e,this._longDistance=t):(this._shortDistance=t,this._longDistance=e),this._shortestPathIsPositive=(this._start-this._end+ht)%ht>=Math.PI,this._rotationType){case Zi.ShortestPath:this._distance=this._shortDistance,this._shortestPathIsPositive?this._direction=1:this._direction=-1;break;case Zi.LongestPath:this._distance=this._longDistance,this._shortestPathIsPositive?this._direction=-1:this._direction=1;break;case Zi.Clockwise:this._direction=1,this._shortestPathIsPositive?this._distance=this._shortDistance:this._distance=this._longDistance;break;case Zi.CounterClockwise:this._direction=-1,this._shortestPathIsPositive?this._distance=this._longDistance:this._distance=this._shortDistance}}this._motion.angularVelocity=this._direction*this._speed,this._currentNonCannonAngle+=this._direction*this._speed*(t/1e3),this.isComplete()&&(this._tx.rotation=this._end,this._motion.angularVelocity=0,this._stopped=!0)}isComplete(){const t=Math.abs(this._currentNonCannonAngle-this._start);return this._stopped||t>=Math.abs(this._distance)}stop(){this._motion.angularVelocity=0,this._stopped=!0}reset(){this._started=!1,this._stopped=!1}}class ns{constructor(t,e,i,s){this._started=!1,this._stopped=!1,this._tx=t.get(li),this._motion=t.get(Ai),this._speed=i,this._offset=e,this._rotationType=s||Zi.ShortestPath}update(t){if(!this._started){this._started=!0,this._start=this._tx.rotation,this._currentNonCannonAngle=this._tx.rotation,this._end=this._start+this._offset;const t=Math.abs(this._end-this._start),e=ht-t;switch(t>e?(this._shortDistance=e,this._longDistance=t):(this._shortDistance=t,this._longDistance=e),this._shortestPathIsPositive=(this._start-this._end+ht)%ht>=Math.PI,this._rotationType){case Zi.ShortestPath:this._distance=this._shortDistance,this._shortestPathIsPositive?this._direction=1:this._direction=-1;break;case Zi.LongestPath:this._distance=this._longDistance,this._shortestPathIsPositive?this._direction=-1:this._direction=1;break;case Zi.Clockwise:this._direction=1,this._shortDistance>=0?this._distance=this._shortDistance:this._distance=this._longDistance;break;case Zi.CounterClockwise:this._direction=-1,this._shortDistance<=0?this._distance=this._shortDistance:this._distance=this._longDistance}}this._motion.angularVelocity=this._direction*this._speed,this._currentNonCannonAngle+=this._direction*this._speed*(t/1e3),this.isComplete()&&(this._tx.rotation=this._end,this._motion.angularVelocity=0,this._stopped=!0)}isComplete(){const t=Math.abs(this._currentNonCannonAngle-this._start);return this._stopped||t>=Math.abs(this._distance)}stop(){this._motion.angularVelocity=0,this._stopped=!0}reset(){this._started=!1,this._stopped=!1,this._start=void 0,this._currentNonCannonAngle=void 0,this._distance=void 0}}class os{constructor(t,e,i,s,r){this._started=!1,this._stopped=!1,this._tx=t.get(li),this._motion=t.get(Ai),this._endX=e,this._endY=i,this._speedX=s,this._speedY=r}update(t){if(this._started||(this._started=!0,this._startX=this._tx.scale.x,this._startY=this._tx.scale.y,this._distanceX=Math.abs(this._endX-this._startX),this._distanceY=Math.abs(this._endY-this._startY)),Math.abs(this._tx.scale.x-this._startX)>=this._distanceX)this._motion.scaleFactor.x=0;else{const t=this._endY=this._distanceY)this._motion.scaleFactor.y=0;else{const t=this._endY=this._distanceX-.01&&Math.abs(this._tx.scale.y-this._startY)>=this._distanceY-.01}stop(){this._motion.scaleFactor.x=0,this._motion.scaleFactor.y=0,this._stopped=!0}reset(){this._started=!1,this._stopped=!1}}class as{constructor(t,e,i,s){this._started=!1,this._stopped=!1,this._tx=t.get(li),this._motion=t.get(Ai),this._offset=new mt(e,i),this._speedX=this._speedY=s}update(t){this._started||(this._started=!0,this._startScale=this._tx.scale.clone(),this._endScale=this._startScale.add(this._offset),this._distanceX=Math.abs(this._endScale.x-this._startScale.x),this._distanceY=Math.abs(this._endScale.y-this._startScale.y),this._directionX=this._endScale.x=this._distanceX-.01&&Math.abs(this._tx.scale.y-this._startScale.y)>=this._distanceY-.01}stop(){this._motion.scaleFactor.x=0,this._motion.scaleFactor.y=0,this._stopped=!0}reset(){this._started=!1,this._stopped=!1}}class hs{constructor(t){this._method=null,this._hasBeenCalled=!1,this._method=t}update(t){this._method(),this._hasBeenCalled=!0}isComplete(){return this._hasBeenCalled}reset(){this._hasBeenCalled=!1}stop(){this._hasBeenCalled=!0}}class ls{constructor(t,e,i,s,r){this.easingFcn=r,this._currentLerpTime=0,this._lerpDuration=1e3,this._lerpStart=new mt(0,0),this._lerpEnd=new mt(0,0),this._initialized=!1,this._stopped=!1,this._tx=t.get(li),this._motion=t.get(Ai),this._lerpDuration=s,this._lerpEnd=new mt(e,i)}_initialize(){this._lerpStart=new mt(this._tx.pos.x,this._tx.pos.y),this._currentLerpTime=0}update(t){this._initialized||(this._initialize(),this._initialized=!0),this._currentLerpTime+=t;let e=this._tx.pos.x,i=this._tx.pos.y;this._currentLerpTime=this._lerpDuration}reset(){this._initialized=!1,this._stopped=!1,this._currentLerpTime=0}stop(){this._motion.vel=Ct(0,0),this._stopped=!0}}class As{constructor(t,e,i,s,r){this.easingFcn=r,this._currentLerpTime=0,this._lerpDuration=1e3,this._lerpStart=new mt(0,0),this._lerpEnd=new mt(0,0),this._initialized=!1,this._stopped=!1,this._tx=t.get(li),this._motion=t.get(Ai),this._lerpDuration=s,this._offset=new mt(e,i)}_initialize(){this._lerpStart=new mt(this._tx.pos.x,this._tx.pos.y),this._currentLerpTime=0,this._lerpEnd=this._lerpStart.add(this._offset)}update(t){this._initialized||(this._initialize(),this._initialized=!0),this._currentLerpTime+=t;let e=this._tx.pos.x,i=this._tx.pos.y;this._currentLerpTime=this._lerpDuration}reset(){this._initialized=!1,this._stopped=!1,this._currentLerpTime=0}stop(){this._motion.vel=Ct(0,0),this._stopped=!0}}class cs{constructor(t,e,i,s=1){this._timeVisible=0,this._timeNotVisible=0,this._elapsedTime=0,this._totalTime=0,this._stopped=!1,this._started=!1,this._graphics=t.get(Oi),this._timeVisible=e,this._timeNotVisible=i,this._duration=(e+i)*s}update(t){this._started||(this._started=!0,this._elapsedTime=0,this._totalTime=0),this._graphics&&(this._elapsedTime+=t,this._totalTime+=t,this._graphics.visible&&this._elapsedTime>=this._timeVisible&&(this._graphics.visible=!1,this._elapsedTime=0),!this._graphics.visible&&this._elapsedTime>=this._timeNotVisible&&(this._graphics.visible=!0,this._elapsedTime=0),this.isComplete()&&(this._graphics.visible=!0))}isComplete(){return this._stopped||this._totalTime>=this._duration}stop(){this._graphics&&(this._graphics.visible=!0),this._stopped=!0}reset(){this._started=!1,this._stopped=!1,this._elapsedTime=0,this._totalTime=0}}class ds{constructor(t,e,i){this._multiplier=1,this._started=!1,this._stopped=!1,this._graphics=t.get(Oi),this._endOpacity=e,this._speed=this._ogspeed=i}update(t){this._graphics&&(this._started||(this._started=!0,this._speed=this._ogspeed,this._endOpacity0&&(this._graphics.opacity+=this._multiplier*(Math.abs(this._graphics.opacity-this._endOpacity)*t)/this._speed),this._speed-=t,this.isComplete()&&(this._graphics.opacity=this._endOpacity),tt.getInstance().debug("[Action fade] Actor opacity:",this._graphics.opacity))}isComplete(){return this._stopped||Math.abs(this._graphics.opacity-this._endOpacity)<.05}stop(){this._stopped=!0}reset(){this._started=!1,this._stopped=!1}}class us{constructor(t){this._elapsedTime=0,this._started=!1,this._stopped=!1,this._delay=t}update(t){this._started||(this._started=!0),this._elapsedTime+=t}isComplete(){return this._stopped||this._elapsedTime>=this._delay}stop(){this._stopped=!0}reset(){this._elapsedTime=0,this._started=!1,this._stopped=!1}}class gs{constructor(t){this._stopped=!1,this._entity=t}update(t){this._entity.get(ms).clearActions(),this._entity.kill(),this._stopped=!0}isComplete(){return this._stopped}stop(){}reset(){}}class ps{constructor(t,e,i){this._started=!1,this._stopped=!1,this._tx=t.get(li),this._motion=t.get(Ai),this._followTx=e.get(li),this._followMotion=e.get(Ai),this._current=new mt(this._tx.pos.x,this._tx.pos.y),this._end=new mt(this._followTx.pos.x,this._followTx.pos.y),this._maximumDistance=void 0!==i?i:this._current.distance(this._end),this._speed=0}update(t){this._started||(this._started=!0,this._distanceBetween=this._current.distance(this._end),this._dir=this._end.sub(this._current).normalize());const e=Math.sqrt(Math.pow(this._followMotion.vel.x,2)+Math.pow(this._followMotion.vel.y,2));if(0!==e&&(this._speed=e),this._current=Ct(this._tx.pos.x,this._tx.pos.y),this._end=Ct(this._followTx.pos.x,this._followTx.pos.y),this._distanceBetween=this._current.distance(this._end),this._dir=this._end.sub(this._current).normalize(),this._distanceBetween>=this._maximumDistance){const t=this._dir.scale(this._speed);this._motion.vel=Ct(t.x,t.y)}else this._motion.vel=Ct(0,0);this.isComplete()&&(this._tx.pos=Ct(this._end.x,this._end.y),this._motion.vel=Ct(0,0))}stop(){this._motion.vel=Ct(0,0),this._stopped=!0}isComplete(){return this._stopped}reset(){this._started=!1,this._stopped=!1}}class _s{constructor(t,e,i){this._started=!1,this._stopped=!1,this._speedWasSpecified=!1,this._tx=t.get(li),this._motion=t.get(Ai),this._meetTx=e.get(li),this._meetMotion=e.get(Ai),this._current=new mt(this._tx.pos.x,this._tx.pos.y),this._end=new mt(this._meetTx.pos.x,this._meetTx.pos.y),this._speed=i||0,void 0!==i&&(this._speedWasSpecified=!0)}update(t){this._started||(this._started=!0,this._distanceBetween=this._current.distance(this._end),this._dir=this._end.sub(this._current).normalize());const e=Math.sqrt(Math.pow(this._meetMotion.vel.x,2)+Math.pow(this._meetMotion.vel.y,2));0===e||this._speedWasSpecified||(this._speed=e),this._current=Ct(this._tx.pos.x,this._tx.pos.y),this._end=Ct(this._meetTx.pos.x,this._meetTx.pos.y),this._distanceBetween=this._current.distance(this._end),this._dir=this._end.sub(this._current).normalize();const i=this._dir.scale(this._speed);this._motion.vel=Ct(i.x,i.y),this.isComplete()&&(this._tx.pos=Ct(this._end.x,this._end.y),this._motion.vel=Ct(0,0))}isComplete(){return this._stopped||this._distanceBetween<=1}stop(){this._motion.vel=Ct(0,0),this._stopped=!0}reset(){this._started=!1,this._stopped=!1,this._distanceBetween=void 0}}class fs{constructor(t){this._entity=t,this._queue=new Yi(t)}getQueue(){return this._queue}update(t){this._queue.update(t)}clearActions(){this._queue.clearActions()}runAction(t){return t.reset(),this._queue.add(t),this}easeTo(...t){var e,i;let s=0,r=0,n=0,o=ji.Linear;return t[0]instanceof mt?(s=t[0].x,r=t[0].y,n=t[1],o=null!==(e=t[2])&&void 0!==e?e:o):(s=t[0],r=t[1],n=t[2],o=null!==(i=t[3])&&void 0!==i?i:o),this._queue.add(new ls(this._entity,s,r,n,o)),this}easeBy(...t){var e,i;let s=0,r=0,n=0,o=ji.Linear;return t[0]instanceof mt?(s=t[0].x,r=t[0].y,n=t[1],o=null!==(e=t[2])&&void 0!==e?e:o):(s=t[0],r=t[1],n=t[2],o=null!==(i=t[3])&&void 0!==i?i:o),this._queue.add(new As(this._entity,s,r,n,o)),this}moveTo(t,e,i){let s=0,r=0,n=0;return t instanceof mt?(s=t.x,r=t.y,n=e):(s=t,r=e,n=i),this._queue.add(new Xi(this._entity,s,r,n)),this}moveBy(t,e,i){let s=0,r=0,n=0;return t instanceof mt?(s=t.x,r=t.y,n=e):(s=t,r=e,n=i),this._queue.add(new Ji(this._entity,s,r,n)),this}rotateTo(t,e,i){return this._queue.add(new rs(this._entity,t,e,i)),this}rotateBy(t,e,i){return this._queue.add(new ns(this._entity,t,e,i)),this}scaleTo(t,e,i,s){let r=1,n=1,o=0,a=0;return t instanceof mt&&e instanceof mt&&(r=t.x,n=t.y,o=e.x,a=e.y),"number"==typeof t&&"number"==typeof e&&(r=t,n=e,o=i,a=s),this._queue.add(new os(this._entity,r,n,o,a)),this}scaleBy(t,e,i){let s=1,r=1;return t instanceof mt&&(s=t.x,r=t.y,i=e),"number"==typeof t&&"number"==typeof e&&(s=t,r=e),this._queue.add(new as(this._entity,s,r,i)),this}blink(t,e,i=1){return this._queue.add(new cs(this._entity,t,e,i)),this}fade(t,e){return this._queue.add(new ds(this._entity,t,e)),this}delay(t){return this._queue.add(new us(t)),this}die(){return this._queue.add(new gs(this._entity)),this}callMethod(t){return this._queue.add(new hs(t)),this}repeat(t,e){return e?(this._queue.add(new Ki(this._entity,t,e)),this):(this.repeatForever(t),this)}repeatForever(t){return this._queue.add(new Wi(this._entity,t)),this}follow(t,e){return void 0===e?this._queue.add(new ps(this._entity,t)):this._queue.add(new ps(this._entity,t,e)),this}meet(t,e){return void 0===e?this._queue.add(new _s(this._entity,t)):this._queue.add(new _s(this._entity,t,e)),this}toPromise(){return new Promise((t=>{this._queue.add(new hs((()=>{t()})))}))}}class ms extends oi{constructor(){super(...arguments),this.type="ex.actions",this.dependencies=[li,Ai]}onAdd(t){this._ctx=new fs(t)}onRemove(){this._ctx=null}getQueue(){var t;return null===(t=this._ctx)||void 0===t?void 0:t.getQueue()}runAction(t){var e;return null===(e=this._ctx)||void 0===e?void 0:e.runAction(t)}update(t){var e;return null===(e=this._ctx)||void 0===e?void 0:e.update(t)}clearActions(){var t;null===(t=this._ctx)||void 0===t||t.clearActions()}easeTo(...t){return this._ctx.easeTo.apply(this._ctx,t)}easeBy(...t){return this._ctx.easeBy.apply(this._ctx,t)}moveTo(t,e,i){return this._ctx.moveTo.apply(this._ctx,[t,e,i])}moveBy(t,e,i){return this._ctx.moveBy.apply(this._ctx,[t,e,i])}rotateTo(t,e,i){return this._ctx.rotateTo(t,e,i)}rotateBy(t,e,i){return this._ctx.rotateBy(t,e,i)}scaleTo(t,e,i,s){return this._ctx.scaleTo.apply(this._ctx,[t,e,i,s])}scaleBy(t,e,i){return this._ctx.scaleBy.apply(this._ctx,[t,e,i])}blink(t,e,i){return this._ctx.blink(t,e,i)}fade(t,e){return this._ctx.fade(t,e)}delay(t){return this._ctx.delay(t)}die(){return this._ctx.die()}callMethod(t){return this._ctx.callMethod(t)}repeat(t,e){return this._ctx.repeat(t,e)}repeatForever(t){return this._ctx.repeatForever(t)}follow(t,e){return this._ctx.follow(t,e)}meet(t,e){return this._ctx.meet(t,e)}toPromise(){return this._ctx.toPromise()}}!function(t){t.Em="em",t.Rem="rem",t.Px="px",t.Pt="pt",t.Percent="%"}($i||($i={})),function(t){t.Left="left",t.Right="right",t.Center="center",t.Start="start",t.End="end"}(ts||(ts={})),function(t){t.Top="top",t.Hanging="hanging",t.Middle="middle",t.Alphabetic="alphabetic",t.Ideographic="ideographic",t.Bottom="bottom"}(es||(es={})),function(t){t.Normal="normal",t.Italic="italic",t.Oblique="oblique"}(is||(is={})),function(t){t.LeftToRight="ltr",t.RightToLeft="rtl"}(ss||(ss={}));class Cs{constructor(t,e,i,s){this.font=t,this.text=e,this.color=i,this.maxWidth=s,this._textFragments=[],this.disposed=!1,this._dirty=!0,this.canvas=document.createElement("canvas"),this.ctx=this.canvas.getContext("2d"),this.dimensions=this.measureText(e),this._setDimension(this.dimensions,this.ctx),this._lastHashCode=this.getHashCode()}measureText(t,e){if(this.disposed)throw Error("Accessing disposed text instance! "+this.text);let i=null;i=null!=e?this._getLinesFromText(t,e):t.split("\n");const s=i.reduce(((t,e)=>t.length>e.length?t:e));this._applyFont(this.ctx);const r=this.ctx.measureText(s);let n=Math.abs(r.actualBoundingBoxAscent)+Math.abs(r.actualBoundingBoxDescent);const o=n*i.length;n=o;const a=o-Math.abs(r.actualBoundingBoxAscent);return new xt({left:0-Math.abs(r.actualBoundingBoxLeft)-this.font.padding,top:0-Math.abs(r.actualBoundingBoxAscent)-this.font.padding,bottom:0+a+this.font.padding,right:0+Math.abs(r.actualBoundingBoxRight)+this.font.padding})}_setDimension(t,e){e.canvas.width=2*(t.width+2*this.font.padding)*this.font.quality,e.canvas.height=2*(t.height+2*this.font.padding)*this.font.quality}static getHashCode(t,e,i){var s;return e+"__hashcode__"+t.fontString+t.showDebug+t.textAlign+t.baseAlign+t.direction+JSON.stringify(t.shadow)+(t.padding.toString()+t.smoothing.toString()+t.lineWidth.toString()+t.lineDash.toString()+(null===(s=t.strokeColor)||void 0===s?void 0:s.toString())+(i?i.toString():t.color.toString()))}getHashCode(t=!0){return Cs.getHashCode(this.font,this.text,t?this.color:void 0)}_applyRasterProperties(t){var e,i;t.translate(this.font.padding,this.font.padding),t.imageSmoothingEnabled=this.font.smoothing,t.lineWidth=this.font.lineWidth,t.setLineDash(null!==(e=this.font.lineDash)&&void 0!==e?e:t.getLineDash()),t.strokeStyle=null===(i=this.font.strokeColor)||void 0===i?void 0:i.toString(),t.fillStyle=this.color.toString()}_applyFont(t){t.resetTransform(),t.translate(this.font.padding+t.canvas.width/2,this.font.padding+t.canvas.height/2),t.scale(this.font.quality,this.font.quality),t.textAlign=this.font.textAlign,t.textBaseline=this.font.baseAlign,t.font=this.font.fontString,t.direction=this.font.direction,this.font.shadow&&(t.shadowColor=this.font.shadow.color.toString(),t.shadowBlur=this.font.shadow.blur,t.shadowOffsetX=this.font.shadow.offset.x,t.shadowOffsetY=this.font.shadow.offset.y)}_drawText(t,e,i){this._applyRasterProperties(t),this._applyFont(t);for(let s=0;se){for(;this.measureText(s).width>e;)r=s[s.length-1]+r,s=s.slice(0,-1);i[t]=s,i[t+1]=r}}return this._chachedText=t,this._chachedLines=i,this._cachedRenderWidth=e,i}}class ys{static measureText(t,e,i){const s=Cs.getHashCode(e,t);if(ys._MEASURE_CACHE.has(s))return ys._MEASURE_CACHE.get(s);ys._LOGGER.debug("Font text measurement cache miss");const r=e.measureTextWithoutCache(t,i);return ys._MEASURE_CACHE.set(s,r),r}static getTextInstance(t,e,i){const s=Cs.getHashCode(e,t,i);let r=ys._TEXT_CACHE.get(s);return r||(r=new Cs(e,t,i),ys._TEXT_CACHE.set(s,r),ys._LOGGER.debug("Font text instance cache miss")),ys._TEXT_USAGE.set(r,performance.now()),r}static checkAndClearCache(){const t=[],e=new Set;for(const[i,s]of ys._TEXT_USAGE.entries())if(s+100{ys._TEXT_USAGE.delete(t)})),this._TEXT_CACHE.clear();for(const[t]of this._TEXT_USAGE.entries())this._TEXT_CACHE.set(t.getHashCode(),t);const i=new Map;for(const t of e)ys._MEASURE_CACHE.has(t)&&i.set(t,ys._MEASURE_CACHE.get(t));this._MEASURE_CACHE.clear(),this._MEASURE_CACHE=i}static get cacheSize(){return ys._TEXT_USAGE.size}static clearCache(){for(const[t]of ys._TEXT_USAGE.entries())t.dispose();ys._TEXT_USAGE.clear(),ys._TEXT_CACHE.clear(),ys._MEASURE_CACHE.clear()}}ys._LOGGER=tt.getInstance(),ys._TEXT_USAGE=new Map,ys._TEXT_CACHE=new Map,ys._MEASURE_CACHE=new Map;class vs extends Ut{constructor(t={}){var e,i,s,r,n,o,a,h,l,A,c,d,u,g,p,_,f,m,C;super(t),this.filtering=Ot.Blended,this.quality=2,this.padding=2,this.smoothing=!1,this.lineWidth=1,this.lineDash=[],this.color=yt.Black,this.family="sans-serif",this.style=is.Normal,this.bold=!1,this.unit=$i.Px,this.textAlign=ts.Left,this.baseAlign=es.Alphabetic,this.direction=ss.LeftToRight,this.size=10,this.shadow=null,this._textBounds=new xt,this._textMeasurement=new Cs(this,"",yt.Black),this.smoothing=null!==(e=null==t?void 0:t.smoothing)&&void 0!==e?e:this.smoothing,this.padding=null!==(i=null==t?void 0:t.padding)&&void 0!==i?i:this.padding,this.color=null!==(s=null==t?void 0:t.color)&&void 0!==s?s:this.color,this.strokeColor=null!==(r=null==t?void 0:t.strokeColor)&&void 0!==r?r:this.strokeColor,this.lineDash=null!==(n=null==t?void 0:t.lineDash)&&void 0!==n?n:this.lineDash,this.lineWidth=null!==(o=null==t?void 0:t.lineWidth)&&void 0!==o?o:this.lineWidth,this.filtering=null!==(a=null==t?void 0:t.filtering)&&void 0!==a?a:this.filtering,this.family=null!==(h=null==t?void 0:t.family)&&void 0!==h?h:this.family,this.style=null!==(l=null==t?void 0:t.style)&&void 0!==l?l:this.style,this.bold=null!==(A=null==t?void 0:t.bold)&&void 0!==A?A:this.bold,this.size=null!==(c=null==t?void 0:t.size)&&void 0!==c?c:this.size,this.unit=null!==(d=null==t?void 0:t.unit)&&void 0!==d?d:this.unit,this.textAlign=null!==(u=null==t?void 0:t.textAlign)&&void 0!==u?u:this.textAlign,this.baseAlign=null!==(g=null==t?void 0:t.baseAlign)&&void 0!==g?g:this.baseAlign,this.direction=null!==(p=null==t?void 0:t.direction)&&void 0!==p?p:this.direction,this.quality=null!==(_=null==t?void 0:t.quality)&&void 0!==_?_:this.quality,(null==t?void 0:t.shadow)&&(this.shadow={},this.shadow.blur=null!==(f=t.shadow.blur)&&void 0!==f?f:this.shadow.blur,this.shadow.offset=null!==(m=t.shadow.offset)&&void 0!==m?m:this.shadow.offset,this.shadow.color=null!==(C=t.shadow.color)&&void 0!==C?C:this.shadow.color)}clone(){return new vs({...this.cloneGraphicOptions(),size:this.size,unit:this.unit,family:this.family,style:this.style,bold:this.bold,textAlign:this.textAlign,baseAlign:this.baseAlign,direction:this.direction,shadow:this.shadow?{blur:this.shadow.blur,offset:this.shadow.offset,color:this.shadow.color}:null})}get fontString(){return`${this.style} ${this.bold?"bold":""} ${this.size}${this.unit} ${this.family}`}get localBounds(){return this._textBounds}_drawImage(t,e,i){}_rotate(t){var e;const i=null!==(e=this.origin)&&void 0!==e?e:this._textBounds.center;t.translate(i.x,i.y),t.rotate(this.rotation),t.translate(-i.x,-i.y)}_flip(t){this.flipHorizontal&&(t.translate(this._textBounds.width/this.scale.x,0),t.scale(-1,1)),this.flipVertical&&(t.translate(0,-this._textBounds.height/2/this.scale.y),t.scale(1,-1))}measureTextWithoutCache(t,e){return this._textMeasurement.measureText(t,e)}measureText(t,e){return ys.measureText(t,this,e)}_postDraw(t){t.restore()}render(t,e,i,s,r,n){const o=ys.getTextInstance(e,this,i);this._textBounds=o.dimensions,this._preDraw(t,s,r),o.render(t,s,r,n),this._postDraw(t)}}class ws extends Ut{constructor(t){var e,i;super(t),this._text="",this._textWidth=0,this._textHeight=0,this.font=null!==(e=t.font)&&void 0!==e?e:new vs,this.color=null!==(i=t.color)&&void 0!==i?i:this.color,this.text=t.text,this.maxWidth=t.maxWidth}clone(){var t,e;return new ws({text:this.text.slice(),color:null!==(e=null===(t=this.color)||void 0===t?void 0:t.clone())&&void 0!==e?e:yt.Black,font:this.font.clone(),maxWidth:this.maxWidth})}get text(){return this._text}set text(t){this._text=t,this._calculateDimension()}get font(){return this._font}set font(t){this._font=t}get width(){return 0===this._textWidth&&this._calculateDimension(),this._textWidth*this.scale.x}get height(){return 0===this._textHeight&&this._calculateDimension(),this._textHeight*this.scale.y}_calculateDimension(){const{width:t,height:e}=this.font.measureText(this._text,this.maxWidth);this._textWidth=t,this._textHeight=e}get localBounds(){return this.font.measureText(this._text,this.maxWidth).scale(this.scale)}_rotate(t){}_flip(t){}_preDraw(t,e,i){(this.isStale()||this.font.isStale())&&(this.font.flipHorizontal=this.flipHorizontal,this.font.flipVertical=this.flipVertical,this.font.rotation=this.rotation,this.font.origin=this.origin,this.font.opacity=this.opacity),this.font.tint=this.tint,super._preDraw(t,e,i)}_drawImage(t,e,i){var s;let r=yt.Black;this.font instanceof vs&&(r=null!==(s=this.color)&&void 0!==s?s:this.font.color);const{width:n,height:o}=this.font.measureText(this._text,this.maxWidth);this._textWidth=n,this._textHeight=o,this.font.render(t,this._text,r,e,i,this.maxWidth),this.font.showDebug&&(t.debug.drawRect(e-n,i-o,2*n,2*o),null!=this.maxWidth&&t.debug.drawRect(e,i,this.maxWidth,this.height,{color:yt.Yellow}))}}class Is extends Ni{get body(){return this.get(Fi)}get transform(){return this.get(li)}get motion(){return this.get(Ai)}get graphics(){return this.get(Oi)}get collider(){return this.get(Di)}get pointer(){return this.get(Vi)}get actions(){return this.get(ms)}get pos(){return this.transform.pos}set pos(t){this.transform.pos=t.clone()}get oldPos(){return this.body.oldPos}set oldPos(t){this.body.oldPos.setTo(t.x,t.y)}get vel(){return this.motion.vel}set vel(t){this.motion.vel=t.clone()}get oldVel(){return this.body.oldVel}set oldVel(t){this.body.oldVel.setTo(t.x,t.y)}get acc(){return this.motion.acc}set acc(t){this.motion.acc=t.clone()}set oldAcc(t){this.body.oldAcc.setTo(t.x,t.y)}get oldAcc(){return this.body.oldAcc}get rotation(){return this.transform.rotation}set rotation(t){this.transform.rotation=t}get angularVelocity(){return this.motion.angularVelocity}set angularVelocity(t){this.motion.angularVelocity=t}get scale(){return this.get(li).scale}set scale(t){this.get(li).scale=t}get anchor(){return this._anchor}set anchor(t){this._anchor=Nt(t,(t=>this._handleAnchorChange(t))),this._handleAnchorChange(t)}_handleAnchorChange(t){this.graphics&&(this.graphics.anchor=t)}get isOffScreen(){return this.hasTag("ex.offscreen")}get draggable(){return this._draggable}set draggable(t){t&&(t&&!this._draggable?(this.events.on("pointerdragstart",this._pointerDragStartHandler),this.events.on("pointerdragend",this._pointerDragEndHandler),this.events.on("pointerdragmove",this._pointerDragMoveHandler),this.events.on("pointerdragleave",this._pointerDragLeaveHandler)):!t&&this._draggable&&(this.events.off("pointerdragstart",this._pointerDragStartHandler),this.events.off("pointerdragend",this._pointerDragEndHandler),this.events.off("pointerdragmove",this._pointerDragMoveHandler),this.events.off("pointerdragleave",this._pointerDragLeaveHandler)),this._draggable=t)}get color(){return this._color}set color(t){var e;this._color=t.clone();const i=null===(e=this.graphics.layers.default.graphics[0])||void 0===e?void 0:e.graphic;(i instanceof Te||i instanceof ws)&&(i.color=this._color)}constructor(t){super(),this.events=new _,this._anchor=Nt(mt.Half,(t=>this._handleAnchorChange(t))),this.logger=tt.getInstance(),this._draggable=!1,this._dragging=!1,this._pointerDragStartHandler=()=>{this._dragging=!0},this._pointerDragEndHandler=()=>{this._dragging=!1},this._pointerDragMoveHandler=t=>{this._dragging&&(this.pos=t.worldPos)},this._pointerDragLeaveHandler=t=>{this._dragging&&(this.pos=t.worldPos)};const{name:e,x:i,y:s,pos:r,coordPlane:n,scale:o,width:a,height:h,radius:l,collider:A,vel:c,acc:d,rotation:u,angularVelocity:g,z:p,color:f,visible:m,anchor:C,collisionType:y,collisionGroup:v}={...t};this._setName(e),this.anchor=null!=C?C:Is.defaults.anchor.clone();const w=new li;this.addComponent(w),this.pos=null!=r?r:Ct(null!=i?i:0,null!=s?s:0),this.rotation=null!=u?u:0,this.scale=null!=o?o:Ct(1,1),this.z=null!=p?p:0,w.coordPlane=null!=n?n:ei.World,this.addComponent(new Vi),this.addComponent(new Oi({anchor:this.anchor})),this.addComponent(new Ai),this.vel=null!=c?c:mt.Zero,this.acc=null!=d?d:mt.Zero,this.angularVelocity=null!=g?g:0,this.addComponent(new ms),this.addComponent(new Fi),this.body.collisionType=null!=y?y:je.Passive,v&&(this.body.group=v),A?this.addComponent(new Di(A)):l?this.addComponent(new Di(Si.Circle(l))):a>0&&h>0?this.addComponent(new Di(Si.Box(a,h,this.anchor))):this.addComponent(new Di),this.graphics.visible=null==m||m,f&&(this.color=f,a&&h?this.graphics.add(new Hi({color:f,width:a,height:h})):l&&this.graphics.add(new qi({color:f,radius:l})))}clone(){const t=new Is({color:this.color.clone(),anchor:this.anchor.clone()});t.clearComponents(),t.processComponentRemoval();const e=this.getComponents();for(const i of e)t.addComponent(i.clone(),!0);return t}onInitialize(t){}_initialize(t){super._initialize(t);for(const e of this.children)e._initialize(t)}emit(t,e){this.events.emit(t,e)}on(t,e){return this.events.on(t,e)}once(t,e){return this.events.once(t,e)}off(t,e){this.events.off(t,e)}_prekill(t){this.events.emit("prekill",new C(this)),this.onPreKill(t)}onPreKill(t){}_postkill(t){this.events.emit("postkill",new y(this)),this.onPostKill(t)}onPostKill(t){}kill(){this.scene?(this._prekill(this.scene),this.events.emit("kill",new m(this)),super.kill(),this._postkill(this.scene)):this.logger.warn(`Cannot kill actor named "${this.name}", it was never added to the Scene`)}unkill(){this.active=!0}isKilled(){return!this.active}get z(){return this.get(li).z}set z(t){this.get(li).z=t}get center(){const t=this.getGlobalPos();return new mt(t.x+this.width/2-this.anchor.x*this.width,t.y+this.height/2-this.anchor.y*this.height)}get localCenter(){return new mt(this.pos.x+this.width/2-this.anchor.x*this.width,this.pos.y+this.height/2-this.anchor.y*this.height)}get width(){return this.collider.localBounds.width*this.getGlobalScale().x}get height(){return this.collider.localBounds.height*this.getGlobalScale().y}getGlobalRotation(){return this.get(li).globalRotation}getGlobalPos(){return this.get(li).globalPos}getGlobalScale(){return this.get(li).globalScale}contains(t,e,i=!1){const s=Ct(t,e),r=this.get(Di);r.update();const n=r.get();if(!n)return!1;const o=n.contains(s);return i?o||this.children.some((i=>i.contains(t,e,!0))):o}within(t,e){const i=this.get(Di),s=t.get(Di),r=i.get(),n=s.get();return!(!r||!n)&&r.getClosestLineBetween(n).getLength()<=e}update(t,e){this._initialize(t),this._preupdate(t,e),this._postupdate(t,e)}onPreUpdate(t,e){}onPostUpdate(t,e){}_preupdate(t,e){this.events.emit("preupdate",new b(t,e,this)),this.onPreUpdate(t,e)}_postupdate(t,e){this.events.emit("postupdate",new Q(t,e,this)),this.onPostUpdate(t,e)}}function xs(t){return t instanceof Es}Is.defaults={anchor:mt.Half};class Es extends Is{constructor(t){var e,i;super({...t}),this.get(li).coordPlane=ei.Screen,this.anchor=null!==(e=null==t?void 0:t.anchor)&&void 0!==e?e:Ct(0,0),this.body.collisionType=null!==(i=null==t?void 0:t.collisionType)&&void 0!==i?i:je.PreventCollision,this.pointer.useGraphicsBounds=!0,this.pointer.useColliderShape=!1,!(null==t?void 0:t.collider)&&(null==t?void 0:t.width)>0&&(null==t?void 0:t.height)>0&&this.collider.useBoxCollider(this.width,this.height,this.anchor)}_initialize(t){this._engine=t,super._initialize(t)}contains(t,e,i=!0){if(i)return super.contains(t,e);const s=this._engine.worldToScreenCoordinates(new mt(t,e));return super.contains(s.x,s.y)}}class Bs{get complete(){return this._complete}constructor(t,e,i,s,r,n){if(this._logger=tt.getInstance(),this.id=0,this._elapsedTime=0,this._totalTimeAlive=0,this._running=!1,this._numberOfTicks=0,this.interval=10,this.repeats=!1,this.maxNumberOfRepeats=-1,this.randomRange=[0,0],this._baseInterval=10,this._generateRandomInterval=()=>this._baseInterval+this.random.integer(this.randomRange[0],this.randomRange[1]),this._complete=!1,this.scene=null,"function"!=typeof t){const o=t;t=o.fcn,e=o.interval,i=o.repeats,s=o.numberOfRepeats,r=o.randomRange,n=o.random}if(s&&s>=0&&(this.maxNumberOfRepeats=s,!i))throw new Error("repeats must be set to true if numberOfRepeats is set");if(this.id=Bs._MAX_ID++,this._callbacks=[],this._baseInterval=this.interval=e,r){if(r[0]>r[1])throw new Error("min value must be lower than max value for range");this.random=null!=n?n:new at,this.randomRange=r,this.interval=this._generateRandomInterval(),this.on((()=>{this.interval=this._generateRandomInterval()}))}this.repeats=i||this.repeats,t&&this.on(t)}on(t){this._callbacks.push(t)}off(t){const e=this._callbacks.indexOf(t);this._callbacks.splice(e,1)}update(t){this._running&&(this._totalTimeAlive+=t,this._elapsedTime+=t,this.maxNumberOfRepeats>-1&&this._numberOfTicks>=this.maxNumberOfRepeats&&(this._complete=!0,this._running=!1,this._elapsedTime=0),!this.complete&&this._elapsedTime>=this.interval&&(this._callbacks.forEach((t=>{t.call(this)})),this._numberOfTicks++,this.repeats||(this._complete=!0,this._running=!1),this._elapsedTime=0))}reset(t,e){if(t&&t>=0&&(this._baseInterval=this.interval=t),this.maxNumberOfRepeats&&this.maxNumberOfRepeats>=0&&(this.maxNumberOfRepeats=e,!this.repeats))throw new Error("repeats must be set to true if numberOfRepeats is set");this._complete=!1,this._elapsedTime=0,this._numberOfTicks=0}get timesRepeated(){return this._numberOfTicks}getTimeRunning(){return this._totalTimeAlive}get timeToNextAction(){return this.complete?0:this.interval-this._elapsedTime}get timeElapsedTowardNextAction(){return this._elapsedTime}get isRunning(){return this._running}pause(){return this._running=!1,this}resume(){return this._running=!0,this}start(){return this.scene||this._logger.warn("Cannot start a timer not part of a scene, timer wont start until added"),this._running=!0,this.complete&&(this._complete=!1,this._elapsedTime=0,this._numberOfTicks=0),this}stop(){return this._running=!1,this._elapsedTime=0,this._numberOfTicks=0,this}cancel(){this.pause(),this.scene&&this.scene.cancelTimer(this)}}Bs._MAX_ID=0;class bs extends oi{constructor(t){super(),this.type="ex.parallax",this.parallaxFactor=Ct(1,1),this.parallaxFactor=null!=t?t:this.parallaxFactor}}class Qs extends oi{constructor(t,e=!0){super(),this.draw=t,this.useTransform=e,this.type="ex.debuggraphics"}}const Ss={PreUpdate:"preupdate",PostUpdate:"postupdate",PreDraw:"predraw",PostDraw:"postdraw"};class Ds extends Ni{flagCollidersDirty(){this._collidersDirty=!0}flagTilesDirty(){for(let t=0;tthis.draw(t,e)})),this.addComponent(new Qs((t=>this.debug(t)))),this.addComponent(new Di),this._graphics=this.get(Oi),this._transform=this.get(li),this._motion=this.get(Ai),this._collider=this.get(Di),this._composite=this._collider.useCompositeCollider([]),this._transform.pos=null!==(e=t.pos)&&void 0!==e?e:mt.Zero,this._oldPos=this._transform.pos.clone(),this._oldScale=this._transform.scale.clone(),this.renderFromTopOfGraphic=null!==(i=t.renderFromTopOfGraphic)&&void 0!==i?i:this.renderFromTopOfGraphic,this.tileWidth=t.tileWidth,this.tileHeight=t.tileHeight,this.rows=t.rows,this.columns=t.columns,this.tiles=new Array(this.rows*this.columns),this._rows=new Array(this.rows),this._cols=new Array(this.columns);let s=[];for(let t=0;t0){for(const t of r.getColliders()){const e=this._getOrSetColliderOriginalOffset(t);t.offset=Ct(r.x*this.tileWidth*this.scale.x,r.y*this.tileHeight*this.scale.y).add(e),t.owner=this,this._composite.addCollider(t)}e&&t.push(e),e=null}else e=e?e.combine(r.bounds):r.bounds;else e&&t.push(e),e=null}if(e){const i=t[t.length-1];i&&i.top===e.top&&i.bottom===e.bottom?t[t.length-1]=i.combine(e):t.push(e)}}for(const e of t){const t=Si.Box(e.width,e.height,mt.Zero,Ct(e.left-this.pos.x,e.top-this.pos.y));t.owner=this,this._composite.addCollider(t)}this._collider.update(),this._collider.$colliderAdded.notifyAll(this._composite)}getTileByIndex(t){return this.tiles[t]}getTile(t,e){return t<0||e<0||t>=this.columns||e>=this.rows?null:this.tiles[t+e*this.columns]}getTileByPoint(t){const e=Math.floor((t.x-this.pos.x)/(this.tileWidth*this.scale.x)),i=Math.floor((t.y-this.pos.y)/(this.tileHeight*this.scale.y)),s=this.getTile(e,i);return e>=0&&i>=0&&e-1&&this._colliders.splice(e,1),this.map.flagCollidersDirty()}clearColliders(){this._colliders.length=0,this.map.flagCollidersDirty()}constructor(t){var e,i;super(),this._posDirty=!1,this._solid=!1,this._graphics=[],this._colliders=[],this.data=new Map,this.x=t.x,this.y=t.y,this.map=t.map,this._width=t.map.tileWidth*this.map.scale.x,this._height=t.map.tileHeight*this.map.scale.y,this.solid=null!==(e=t.solid)&&void 0!==e?e:this.solid,this._graphics=null!==(i=t.graphics)&&void 0!==i?i:[],this._recalculate()}flagDirty(){return this._posDirty=!0}_recalculate(){this._width=this.map.tileWidth*this.map.scale.x,this._height=this.map.tileHeight*this.map.scale.y,this._pos=this.map.pos.add(Ct(this.x*this._width,this.y*this._height)),this._bounds=new xt(this._pos.x,this._pos.y,this._pos.x+this._width,this._pos.y+this._height),this._posDirty=!1}get bounds(){return this._posDirty&&this._recalculate(),this._bounds}get center(){return this._posDirty&&this._recalculate(),new mt(this._pos.x+this._width/2,this._pos.y+this._height/2)}}class Fs{constructor(t){this.camera=t}lockToActor(t){this.camera.addStrategy(new Ps(t))}lockToActorAxis(t,e){this.camera.addStrategy(new Rs(t,e))}elasticToActor(t,e,i){this.camera.addStrategy(new Ms(t,e,i))}radiusAroundActor(t,e){this.camera.addStrategy(new Ls(t,e))}limitCameraBounds(t){this.camera.addStrategy(new Ns(t))}}var ks;!function(t){t[t.X=0]="X",t[t.Y=1]="Y"}(ks||(ks={}));class Ps{constructor(t){this.target=t,this.action=(t,e,i,s)=>t.center}}class Rs{constructor(t,e){this.target=t,this.axis=e,this.action=(t,e,i,s)=>{const r=t.center,n=e.getFocus();return this.axis===ks.X?new mt(r.x,n.y):new mt(n.x,r.y)}}}class Ms{constructor(t,e,i){this.target=t,this.cameraElasticity=e,this.cameraFriction=i,this.action=(t,e,i,s)=>{const r=t.center;let n=e.getFocus(),o=e.vel.clone();const a=r.sub(n).scale(this.cameraElasticity);o=o.add(a);const h=o.scale(-1).scale(this.cameraFriction);return o=o.add(h),n=n.add(o),n}}}class Ls{constructor(t,e){this.target=t,this.radius=e,this.action=(t,e,i,s)=>{const r=t.center,n=e.getFocus(),o=r.sub(n),a=o.size;if(a>=this.radius){const t=a-this.radius;return n.add(o.normalize().scale(t))}return n}}}class Ns{constructor(t){this.target=t,this.boundSizeChecked=!1,this.action=(t,e,i,s)=>{const r=e.getFocus();this.boundSizeChecked||((t.bottom-t.topt.right-i.halfDrawWidth&&(n=t.right-i.halfDrawWidth),r.yt.bottom-i.halfDrawHeight&&(o=t.bottom-i.halfDrawHeight),Ct(n,o)}}}const Gs={Initialize:"initialize",PreUpdate:"preupdate",PostUpdate:"postupdate"};class Us{constructor(){this.events=new _,this.transform=kt.identity(),this.inverse=kt.identity(),this._cameraStrategies=[],this.strategy=new Fs(this),this._z=1,this.dz=0,this.az=0,this.rotation=0,this._angularVelocity=0,this._posChanged=!1,this._pos=Gt(mt.Zero,(()=>this._posChanged=!0)),this.vel=mt.Zero,this.acc=mt.Zero,this._cameraMoving=!1,this._currentLerpTime=0,this._lerpDuration=1e3,this._lerpStart=null,this._lerpEnd=null,this._isShaking=!1,this._shakeMagnitudeX=0,this._shakeMagnitudeY=0,this._shakeDuration=0,this._elapsedShakeTime=0,this._xShake=0,this._yShake=0,this._isZooming=!1,this._zoomStart=1,this._zoomEnd=1,this._currentZoomTime=0,this._zoomDuration=0,this._zoomEasing=ji.EaseInOutCubic,this._easing=ji.EaseInOutCubic,this._halfWidth=0,this._halfHeight=0,this._viewport=null,this._isInitialized=!1}get zoom(){return this._z}set zoom(t){this._z=t,this._engine&&(this._halfWidth=this._engine.halfDrawWidth,this._halfHeight=this._engine.halfDrawHeight)}get angularVelocity(){return this._angularVelocity}set angularVelocity(t){this._angularVelocity=t}get pos(){return this._pos}set pos(t){this._pos=Gt(t,(()=>this._posChanged=!0)),this._posChanged=!0}get x(){return this.pos.x}set x(t){this._follow||this._cameraMoving||(this.pos=Ct(t,this.pos.y))}get y(){return this.pos.y}set y(t){this._follow||this._cameraMoving||(this.pos=Ct(this.pos.x,t))}get dx(){return this.vel.x}set dx(t){this.vel=Ct(t,this.vel.y)}get dy(){return this.vel.y}set dy(t){this.vel=Ct(this.vel.x,t)}get ax(){return this.acc.x}set ax(t){this.acc=Ct(t,this.acc.y)}get ay(){return this.acc.y}set ay(t){this.acc=Ct(this.acc.x,t)}getFocus(){return this.pos}move(t,e,i=ji.EaseInOutCubic){if("function"!=typeof i)throw"Please specify an EasingFunction";return this._follow?Promise.reject(t):(this._lerpPromise&&this._lerpResolve&&this._lerpResolve(t),this._lerpPromise=new Promise((t=>{this._lerpResolve=t})),this._lerpStart=this.getFocus().clone(),this._lerpDuration=e,this._lerpEnd=t,this._currentLerpTime=0,this._cameraMoving=!0,this._easing=i,this._lerpPromise)}shake(t,e,i){this._isShaking=!0,this._shakeMagnitudeX=t,this._shakeMagnitudeY=e,this._shakeDuration=i}zoomOverTime(t,e=0,i=ji.EaseInOutCubic){return this._zoomPromise=new Promise((t=>{this._zoomResolve=t})),e?(this._isZooming=!0,this._zoomEasing=i,this._currentZoomTime=0,this._zoomDuration=e,this._zoomStart=this.zoom,this._zoomEnd=t,this._zoomPromise):(this._isZooming=!1,this.zoom=t,Promise.resolve(!0))}get viewport(){return this._viewport?this._viewport:new xt(0,0,0,0)}addStrategy(t){this._cameraStrategies.push(t)}removeStrategy(t){Qt(t,this._cameraStrategies)}clearAllStrategies(){this._cameraStrategies.length=0}_preupdate(t,e){this.events.emit("preupdate",new b(t,e,this)),this.onPreUpdate(t,e)}onPreUpdate(t,e){}_postupdate(t,e){this.events.emit("postupdate",new Q(t,e,this)),this.onPostUpdate(t,e)}onPostUpdate(t,e){}get isInitialized(){return this._isInitialized}_initialize(t){if(!this.isInitialized){this._engine=t,this._screen=t.screen;const e=this._screen.contentArea;let i=Ct(e.width/2,e.height/2);if(!this._engine.loadingComplete){const t=this._screen.peekResolution();t&&(i=Ct(t.width/2,t.height/2))}this._halfWidth=i.x,this._halfHeight=i.y,this._posChanged||(this.pos=i),this.updateTransform(),this.runStrategies(t,t.clock.elapsed()),this.updateViewport(),this.updateTransform(),this.onInitialize(t),this.events.emit("initialize",new V(t,this)),this._isInitialized=!0}}onInitialize(t){}emit(t,e){this.events.emit(t,e)}on(t,e){return this.events.on(t,e)}once(t,e){return this.events.once(t,e)}off(t,e){this.events.off(t,e)}runStrategies(t,e){for(const i of this._cameraStrategies)this.pos=i.action.call(i,i.target,this,t,e)}updateViewport(){this._viewport=new xt(this.x-this._halfWidth,this.y-this._halfHeight,this.x+this._halfWidth,this.y+this._halfHeight)}update(t,e){if(this._initialize(t),this._preupdate(t,e),this.pos=this.pos.add(this.vel.scale(e/1e3)),this.zoom+=this.dz*e/1e3,this.vel=this.vel.add(this.acc.scale(e/1e3)),this.dz+=this.az*e/1e3,this.rotation+=this.angularVelocity*e/1e3,this._isZooming)if(this._currentZoomTime=this._shakeDuration}}const zs={ExitTrigger:"exittrigger",EnterTrigger:"entertrigger"},Os={pos:mt.Zero,width:10,height:10,visible:!1,action:()=>{},filter:()=>!0,repeat:-1};class Hs extends Is{constructor(t){super({x:t.pos.x,y:t.pos.y,width:t.width,height:t.height}),this.events=new _,this.action=()=>{},this.filter=()=>!0,this.repeat=-1,t={...Os,...t},this.filter=t.filter||this.filter,this.repeat=t.repeat||this.repeat,this.action=t.action||this.action,t.target&&(this.target=t.target),this.graphics.visible=t.visible,this.body.collisionType=je.Passive,this.events.on("collisionstart",(t=>{this.filter(t.other)&&(this.emit("enter",new J(this,t.other)),this._dispatchAction(),0===this.repeat&&this.kill())})),this.events.on("collisionend",(t=>{this.filter(t.other)&&this.emit("exit",new X(this,t.other))}))}set target(t){this._target=t,this.filter=e=>e===t}get target(){return this._target}_initialize(t){super._initialize(t)}_dispatchAction(){0!==this.repeat&&(this.action.call(this),this.repeat--)}}var qs;!function(t){t.Update="update",t.Draw="draw"}(qs||(qs={}));class Vs{constructor(){this.priority=0}notify(t){}}class js{constructor(t){this.data=t,this.type="Entity Added"}}function Ys(t){return!!t&&"Entity Added"===t.type}class Ks{constructor(t){this.data=t,this.type="Entity Removed"}}function Ws(t){return!!t&&"Entity Removed"===t.type}class Js{constructor(t){this._world=t,this.entities=[],this._entityIndex={},this._entitiesToRemove=[]}updateEntities(t,e){for(const i of this.entities)i.update(t.engine,e),i.active||this.removeEntity(i)}findEntitiesForRemoval(){for(const t of this.entities)t.active||this.removeEntity(t)}notify(t){Pi(t)&&this._world.queryManager.addEntity(t.data.entity),Mi(t)&&this._world.queryManager.removeComponent(t.data.entity,t.data.component)}addEntity(t){t.active=!0,t.scene=this._world.context,t&&!this._entityIndex[t.id]&&(this._entityIndex[t.id]=t,this.entities.push(t),this._world.queryManager.addEntity(t),t.componentAdded$.register(this),t.componentRemoved$.register(this),t.children.forEach((e=>{e.scene=t.scene,this.addEntity(e)})),t.childrenAdded$.register({notify:t=>{this.addEntity(t)}}),t.childrenRemoved$.register({notify:t=>{this.removeEntity(t,!1)}}))}removeEntity(t,e=!0){var i;let s=0;s=t instanceof Ni?t.id:t;const r=this._entityIndex[s];r&&r.active&&(r.active=!1),r&&e?this._entitiesToRemove.push(r):(delete this._entityIndex[s],r&&(r.scene=null,Qt(r,this.entities),this._world.queryManager.removeEntity(r),r.componentAdded$.unregister(this),r.componentRemoved$.unregister(this),r.children.forEach((t=>{t.scene=null,this.removeEntity(t,e)})),r.childrenAdded$.clear(),r.childrenRemoved$.clear(),(null===(i=this._world.context)||void 0===i?void 0:i.engine)&&this._world.context.engine.stats.currFrame.actors.killed++))}processEntityRemovals(){for(const t of this._entitiesToRemove)t.active||this.removeEntity(t,!1);this._entitiesToRemove.length=0}processComponentRemovals(){for(const t of this.entities)t.processComponentRemoval()}getById(t){return this._entityIndex[t]}getByName(t){return this.entities.filter((e=>e.name===t))}clear(){for(const t of this.entities)this.removeEntity(t)}}const Xs=t=>[...t].sort(((t,e)=>t.localeCompare(e))).join("+");class Zs extends hi{get key(){return this._key?this._key:this._key=Xs(this.types)}constructor(t){super(),this._entities=[],t[0]instanceof Function?this.types=t.map((t=>(new t).type)):this.types=t}getEntities(t){return t&&this._entities.sort(t),this._entities}addEntity(t){!St(this._entities,t)&&this.matches(t)&&(this._entities.push(t),this.notifyAll(new js(t)))}removeEntity(t){Qt(t,this._entities)&&this.notifyAll(new Ks(t))}clear(){this._entities.length=0;for(const t of this.observers)this.unregister(t)}matches(t){let e=[];e=t instanceof Ni?t.types:t;let i=!0;for(const t of this.types)if(i=i&&e.indexOf(t)>-1,!i)return!1;return i}contain(t){return this.types.indexOf(t)>-1}}class $s{constructor(t){this._world=t,this._queries={}}_addQuery(t){this._queries[Xs(t.types)]=t;for(const e of this._world.entityManager.entities)t.addEntity(e)}maybeRemoveQuery(t){0===t.observers.length&&(t.clear(),delete this._queries[Xs(t.types)])}addEntity(t){for(const e in this._queries)this._queries[e]&&this._queries[e].addEntity(t)}removeComponent(t,e){for(const i in this._queries)this._queries[i].contain(e.type)&&this._queries[i].removeEntity(t)}removeEntity(t){for(const e in this._queries)this._queries[e].removeEntity(t)}createQuery(t){const e=this.getQuery(t);if(e)return e;const i=new Zs(t);return this._addQuery(i),i}getQuery(t){const e=Xs(t);return this._queries[e]?this._queries[e]:null}}class tr{constructor(t){this._world=t,this.systems=[],this.initialized=!1}get(t){return this.systems.find((e=>e instanceof t))}addSystem(t){if(!t.types||0===t.types.length)throw new Error("Attempted to add a System without any types");const e=this._world.queryManager.createQuery(t.types);this.systems.push(t),this.systems.sort(((t,e)=>t.priority-e.priority)),e.register(t),this.initialized&&t.initialize&&t.initialize(this._world.context)}removeSystem(t){Qt(t,this.systems);const e=this._world.queryManager.getQuery(t.types);e&&(e.unregister(t),this._world.queryManager.maybeRemoveQuery(e))}initialize(){if(!this.initialized){this.initialized=!0;for(const t of this.systems)t.initialize&&t.initialize(this._world.context)}}updateSystems(t,e,i){const s=this.systems.filter((e=>e.systemType===t));for(const t of s)t.preupdate&&t.preupdate(e,i);for(const t of s){const s=this._world.queryManager.getQuery(t.types).getEntities(t.sort);if(e instanceof Qr)for(const t of s)t._initialize(null==e?void 0:e.engine);t.update(s,i)}for(const t of s)t.postupdate&&t.postupdate(e,i)}clear(){for(const t of this.systems)this.removeSystem(t)}}class er{constructor(t){this.context=t,this.queryManager=new $s(this),this.entityManager=new Js(this),this.systemManager=new tr(this)}update(t,e){t===qs.Update&&this.entityManager.updateEntities(this.context,e),this.systemManager.updateSystems(t,this.context,e),this.entityManager.findEntitiesForRemoval(),this.entityManager.processComponentRemovals(),this.entityManager.processEntityRemovals()}add(t){t instanceof Ni&&this.entityManager.addEntity(t),t instanceof Vs&&this.systemManager.addSystem(t)}remove(t,e=!0){t instanceof Ni&&this.entityManager.removeEntity(t,e),t instanceof Vs&&this.systemManager.removeSystem(t)}clearEntities(){this.entityManager.clear()}clearSystems(){this.systemManager.clear()}}class ir{static integrate(t,e,i,s){const r=s/1e3;e.vel.addEqual(i.scale(r,ir._ACC)),t.pos.add(e.vel.scale(r,ir._VEL),ir._POS).addEqual(i.scale(.5*r*r,ir._VEL_ACC)),e.angularVelocity+=e.torque*(1/e.inertia)*r;const n=t.rotation+e.angularVelocity*r;t.scale.add(e.scaleFactor.scale(r,this._SCALE_FACTOR),ir._SCALE),t.get().setTransform(ir._POS,n,ir._SCALE)}}ir._POS=new mt(0,0),ir._SCALE=new mt(1,1),ir._ACC=new mt(0,0),ir._VEL=new mt(0,0),ir._VEL_ACC=new mt(0,0),ir._SCALE_FACTOR=new mt(0,0);class sr extends Vs{constructor(){super(...arguments),this.types=["ex.transform","ex.motion"],this.systemType=qs.Update,this.priority=-1}update(t,e){let i,s;for(let r=0;r!t.isCanceled()))).sort(((t,e)=>this.distanceMap.get(t.id)-this.distanceMap.get(e.id)));for(const e of t)this.solvePosition(e),this.solveVelocity(e);return this.postSolve(t),t}preSolve(t){const e=1e-4;for(const i of t){if(Math.abs(i.mtv.x)!t.isCanceled())),this.solveVelocity(t),this.solvePosition(t),this.postSolve(t),t}preSolve(t){var e,i,s;const r=1e-4;for(const e of t){if(Math.abs(e.mtv.x)-1&&n.splice(t,1);const o=null!==(e=this.idToContactConstraint.get(r.id))&&void 0!==e?e:[];let a=0;const h=r.colliderA.owner.get(Fi),l=r.colliderB.owner.get(Fi);if(h&&l)for(const t of r.points){const e=r.normal,n=r.tangent,A=t.sub(h.globalPos),c=t.sub(l.globalPos),d=A.cross(e),u=c.cross(e),g=h.inverseMass+l.inverseMass+h.inverseInertia*d*d+l.inverseInertia*u*u,p=A.cross(n),_=c.cross(n),f=h.inverseMass+l.inverseMass+h.inverseInertia*p*p+l.inverseInertia*_*_;o[a]&&(null===(s=null===(i=o[a])||void 0===i?void 0:i.point)||void 0===s?void 0:s.squareDistance(t))<4?(o[a].point=t,o[a].local=r.localPoints[a]):o[a]=new nr(t,r.localPoints[a],r),o[a].aToContact=A,o[a].bToContact=c,o[a].normalMass=1/g,o[a].tangentMass=1/f;const m=h.bounciness>l.bounciness?h.bounciness:l.bounciness,C=r.normal.dot(o[a].getRelativeVelocity());o[a].originalVelocityAndRestitution=0,C<-.1&&(o[a].originalVelocityAndRestitution=-m*C),a++}this.idToContactConstraint.set(r.id,o)}for(const t of n)this.idToContactConstraint.delete(t);if(ii.warmStart)this.warmStart(t);else for(const e of t){const t=this.getContactConstraints(e.id);for(const e of t)e.normalImpulse=0,e.tangentImpulse=0}}postSolve(t){for(const e of t){const t=e.colliderA.owner.get(Fi),i=e.colliderB.owner.get(Fi);if(t&&i){if(t.collisionType===je.Passive||i.collisionType===je.Passive)continue;t.updateMotion(),i.updateMotion()}const s=wt.fromDirection(e.mtv);e.colliderA.events.emit("postcollision",new N(e.colliderA,e.colliderB,s,e.mtv)),e.colliderA.events.emit("aftercollisionresolve",new O(e.colliderA,e.colliderB,s,e.mtv,e)),e.colliderB.events.emit("postcollision",new N(e.colliderB,e.colliderA,wt.getOpposite(s),e.mtv.negate())),e.colliderB.events.emit("aftercollisionresolve",new O(e.colliderB,e.colliderA,wt.getOpposite(s),e.mtv.negate(),e))}this.lastFrameContacts.clear();for(const e of t)this.lastFrameContacts.set(e.id,e)}warmStart(t){var e,i,s;for(const r of t){const t=null===(e=r.colliderA.owner)||void 0===e?void 0:e.get(Fi),n=null===(i=r.colliderB.owner)||void 0===i?void 0:i.get(Fi);if(t&&n){const e=null!==(s=this.idToContactConstraint.get(r.id))&&void 0!==s?s:[];for(const i of e)if(ii.warmStart){const e=r.normal.scale(i.normalImpulse),s=r.tangent.scale(i.tangentImpulse),o=e.add(s);t.applyImpulse(i.point,o.negate()),n.applyImpulse(i.point,o)}else i.normalImpulse=0,i.tangentImpulse=0}}}solvePosition(t){var e,i,s;for(let r=0;rthis._processor.track(t),this._untrackCollider=t=>this._processor.untrack(t)}notify(t){if(Ys(t)){const e=t.data.get(Di);e.$colliderAdded.subscribe(this._trackCollider),e.$colliderRemoved.subscribe(this._untrackCollider);const i=e.get();i&&this._processor.track(i)}else{const e=t.data.get(Di),i=e.get();e&&i&&this._processor.untrack(i)}}initialize(t){this._engine=t.engine}update(t,e){var i,s,r,n;if(!ii.enabled)return;let o=[];for(const e of t){const t=e.get(Di),s=null==t?void 0:t.get();if(t&&(null===(i=t.owner)||void 0===i?void 0:i.active)&&s)if(t.update(),s instanceof Ci){const t=s.getColliders();o=o.concat(t)}else o.push(s)}this._processor.update(o);const a=this._processor.broadphase(o,e);this._currentFrameContacts.clear();let h=this._processor.narrowphase(a,null===(n=null===(r=null===(s=this._engine)||void 0===s?void 0:s.debug)||void 0===r?void 0:r.stats)||void 0===n?void 0:n.currFrame);h=this.getSolver().solve(h);for(const t of h){const e=t.id.indexOf("|");if(e>0){const i=t.id.substring(e+1);this._currentFrameContacts.set(i,t)}else this._currentFrameContacts.set(t.id,t)}this.runContactStartEnd(),this._lastFrameContacts.clear(),this._lastFrameContacts=new Map(this._currentFrameContacts)}getSolver(){return ii.collisionResolutionStrategy===Ze.Realistic?this._realisticSolver:this._arcadeSolver}debug(t){this._processor.debug(t)}runContactStartEnd(){for(const[t,e]of this._currentFrameContacts)if(!this._lastFrameContacts.has(t)){const t=e.colliderA,i=e.colliderB;t.events.emit("collisionstart",new H(t,i,e)),t.events.emit("contactstart",new G(t,i,e)),i.events.emit("collisionstart",new H(i,t,e)),i.events.emit("contactstart",new G(i,t,e))}for(const[t,e]of this._lastFrameContacts)if(!this._currentFrameContacts.has(t)){const t=e.colliderA,i=e.colliderB;t.events.emit("collisionend",new q(t,i)),t.events.emit("contactend",new U(t,i)),i.events.emit("collisionend",new q(i,t)),i.events.emit("contactend",new U(i,t))}}}var hr,lr;!function(t){t.Forward="forward",t.Backward="backward"}(hr||(hr={})),function(t){t.End="end",t.Loop="loop",t.PingPong="pingpong",t.Freeze="freeze"}(lr||(lr={}));const Ar={Frame:"frame",Loop:"loop",Ended:"ended"};class cr extends Ut{constructor(t){var e,i;super(t),this.events=new _,this.frames=[],this.strategy=lr.Loop,this.frameDuration=100,this.timeScale=1,this._idempotencyToken=-1,this._firstTick=!0,this._currentFrame=0,this._timeLeftInFrame=0,this._pingPongDirection=1,this._done=!1,this._playing=!0,this._reversed=!1,this.frames=t.frames,this.strategy=null!==(e=t.strategy)&&void 0!==e?e:this.strategy,this.frameDuration=t.totalDuration?t.totalDuration/this.frames.length:null!==(i=t.frameDuration)&&void 0!==i?i:this.frameDuration,t.reverse&&this.reverse(),this.goToFrame(0)}clone(){return new cr({frames:this.frames.map((t=>({...t}))),frameDuration:this.frameDuration,reverse:this._reversed,strategy:this.strategy,...this.cloneGraphicOptions()})}get width(){const t=this.currentFrame;return t?Math.abs(t.graphic.width*this.scale.x):0}get height(){const t=this.currentFrame;return t?Math.abs(t.graphic.height*this.scale.y):0}static fromSpriteSheet(t,e,i,s=lr.Loop){const r=t.sprites.length-1,n=e.filter((t=>t<0||t>r));return n.length&&cr._LOGGER.warn(`Indices into SpriteSheet were provided that don't exist: ${n.join(",")} no frame will be shown`),new cr({frames:t.sprites.filter(((t,i)=>e.indexOf(i)>-1)).map((t=>({graphic:t,duration:i}))),strategy:s})}static fromSpriteSheetCoordinates(t){const{spriteSheet:e,frameCoordinates:i,durationPerFrameMs:s,strategy:r,reverse:n}=t,o=null!=s?s:100,a=[];for(const t of i){const{x:i,y:s,duration:r}=t,n=e.getSprite(i,s);n?a.push({graphic:n,duration:null!=r?r:o}):cr._LOGGER.warn(`Skipping frame! SpriteSheet does not have coordinate (${i}, ${s}), please check your SpriteSheet to confirm that sprite exists`)}return new cr({frames:a,strategy:r,reverse:n})}get currentFrame(){return this._currentFrame>=0&&this._currentFrame=this.frames.length&&(this._done=!0,this._currentFrame=this.frames.length,this.events.emit("end",this));break;case lr.Freeze:e=ct(t+1,0,this.frames.length-1),e>=this.frames.length-1&&(this._done=!0,this.events.emit("end",this));break;case lr.PingPong:t+this._pingPongDirection>=this.frames.length&&(this._pingPongDirection=-1,this.events.emit("loop",this)),t+this._pingPongDirection<0&&(this._pingPongDirection=1,this.events.emit("loop",this)),e=t+this._pingPongDirection%this.frames.length}return e}tick(t,e=0){this._idempotencyToken!==e&&(this._idempotencyToken=e,this._playing&&(this._firstTick&&(this._firstTick=!1,this.events.emit("frame",{...this.currentFrame,frameIndex:this.currentFrameIndex})),this._timeLeftInFrame-=t*this.timeScale,this._timeLeftInFrame<=0&&this.goToFrame(this._nextFrame())))}_drawImage(t,e,i){this.currentFrame&&this.currentFrame.graphic.draw(t,e,i)}}cr._LOGGER=tt.getInstance();class dr extends Ut{constructor(t){super(t),this.members=[],this.members=t.members,this._updateDimensions()}clone(){return new dr({members:[...this.members],...this.cloneGraphicOptions()})}_updateDimensions(){let t=new xt;for(const{graphic:e,pos:i}of this.members)t=e.localBounds.translate(i).combine(t);return this.width=t.width,this.height=t.height,t}get localBounds(){let t=new xt;for(const{graphic:e,pos:i}of this.members)t=e.localBounds.translate(i).combine(t);return t}_isAnimationOrGroup(t){return t instanceof cr||t instanceof dr}tick(t,e){for(const i of this.members){const s=i.graphic;this._isAnimationOrGroup(s)&&s.tick(t,e)}}reset(){for(const t of this.members){const e=t.graphic;this._isAnimationOrGroup(e)&&e.reset()}}_preDraw(t,e,i){this._updateDimensions(),super._preDraw(t,e,i)}_drawImage(t,e,i){for(const s of this.members)t.save(),t.translate(e,i),s.graphic.draw(t,s.pos.x,s.pos.y),this.showDebug&&t.debug.drawRect(0,0,this.width,this.height),t.restore()}}function ur(t){return class extends t{assign(t){for(const e in t)"function"!=typeof this[e]&&(this[e]=t[e])}constructor(...t){super(...t),1!==t.filter((function(t){return void 0!==t})).length||!t[0]||"object"!=typeof t[0]||t[0]instanceof Array||this.assign(t[0])}}}var gr,pr;!function(t){t[t.Circle=0]="Circle",t[t.Rectangle=1]="Rectangle"}(gr||(gr={}));class _r extends Ni{constructor(t,e,i,s,r,n,o,a,h,l){super(),this.position=new mt(0,0),this.velocity=new mt(0,0),this.acceleration=new mt(0,0),this.particleRotationalVelocity=0,this.currentRotation=0,this.focus=null,this.focusAccel=0,this.opacity=1,this.beginColor=yt.White,this.endColor=yt.White,this.life=300,this.fadeFlag=!1,this._rRate=1,this._gRate=1,this._bRate=1,this._aRate=0,this._currentColor=yt.White,this.emitter=null,this.particleSize=5,this.particleSprite=null,this.sizeRate=0,this.elapsedMultiplier=0,this.visible=!0,this.isOffscreen=!1;let A=t;if(A&&!(t instanceof mr)){const c=t;A=c.emitter,e=c.life,i=c.opacity,r=c.endColor,s=c.beginColor,n=c.position,o=c.velocity,a=c.acceleration,h=c.startSize,l=c.endSize}if(this.emitter=A,this.life=e||this.life,this.opacity=i||this.opacity,this.endColor=r||this.endColor.clone(),this.beginColor=s||this.beginColor.clone(),this._currentColor=this.beginColor.clone(),this.emitter.particleTransform===pr.Global){const t=this.emitter.transform.globalPos;this.position=(n||this.position).add(t),this.velocity=(o||this.velocity).rotate(this.emitter.transform.globalRotation)}else this.velocity=o||this.velocity,this.position=n||this.position;this.acceleration=a||this.acceleration,this._rRate=(this.endColor.r-this.beginColor.r)/this.life,this._gRate=(this.endColor.g-this.beginColor.g)/this.life,this._bRate=(this.endColor.b-this.beginColor.b)/this.life,this._aRate=this.opacity/this.life,this.startSize=h||0,this.endSize=l||0,this.endSize>0&&this.startSize>0&&(this.sizeRate=(this.endSize-this.startSize)/this.life,this.particleSize=this.startSize),this.addComponent(this.transform=new li),this.addComponent(this.graphics=new Oi),this.transform.pos=this.position,this.transform.rotation=this.currentRotation,this.transform.scale=Ct(1,1),this.particleSprite?(this.graphics.opacity=this.opacity,this.graphics.use(this.particleSprite)):(this.graphics.localBounds=xt.fromDimension(this.particleSize,this.particleSize,mt.Half),this.graphics.onPostDraw=t=>{t.save(),this.graphics.opacity=this.opacity;const e=this._currentColor.clone();e.a=1,t.debug.drawPoint(Ct(0,0),{color:e,size:this.particleSize}),t.restore()})}kill(){this.emitter.removeParticle(this)}update(t,e){if(this.life=this.life-e,this.elapsedMultiplier=this.elapsedMultiplier+e,this.life<0&&this.kill(),this.fadeFlag&&(this.opacity=ct(this._aRate*this.life,1e-4,1)),this.startSize>0&&this.endSize>0&&(this.particleSize=ct(this.sizeRate*e+this.particleSize,Math.min(this.startSize,this.endSize),Math.max(this.startSize,this.endSize))),this._currentColor.r=ct(this._currentColor.r+this._rRate*e,0,255),this._currentColor.g=ct(this._currentColor.g+this._gRate*e,0,255),this._currentColor.b=ct(this._currentColor.b+this._bRate*e,0,255),this._currentColor.a=ct(this.opacity,1e-4,1),this.focus){const t=this.focus.sub(this.position).normalize().scale(this.focusAccel).scale(e/1e3);this.velocity=this.velocity.add(t)}else this.velocity=this.velocity.add(this.acceleration.scale(e/1e3));this.position=this.position.add(this.velocity.scale(e/1e3)),this.particleRotationalVelocity&&(this.currentRotation=(this.currentRotation+this.particleRotationalVelocity*e/1e3)%(2*Math.PI)),this.transform.pos=this.position,this.transform.rotation=this.currentRotation,this.transform.scale=Ct(1,1),this.graphics.opacity=this.opacity}}class fr extends(ur(_r)){constructor(t,e,i,s,r,n,o,a,h,l){super(t,e,i,s,r,n,o,a,h,l)}}!function(t){t.Global="global",t.Local="local"}(pr||(pr={}));class mr extends Is{get opacity(){return super.graphics.opacity}set opacity(t){super.graphics.opacity=t}get particleSprite(){return this._sprite}set particleSprite(t){t&&(this._sprite=t)}constructor(t){var e,i;super({width:null!==(e=t.width)&&void 0!==e?e:0,height:null!==(i=t.height)&&void 0!==i?i:0}),this._particlesToEmit=0,this.numParticles=0,this.isEmitting=!0,this.particles=[],this.deadParticles=[],this.minVel=0,this.maxVel=0,this.acceleration=new mt(0,0),this.minAngle=0,this.maxAngle=0,this.emitRate=1,this.particleLife=2e3,this.fadeFlag=!1,this.focus=null,this.focusAccel=null,this.startSize=null,this.endSize=null,this.minSize=5,this.maxSize=5,this.beginColor=yt.White,this.endColor=yt.White,this._sprite=null,this.emitterType=gr.Rectangle,this.radius=0,this.particleRotationalVelocity=0,this.randomRotation=!1,this.particleTransform=pr.Global;const{x:s,y:r,pos:n,isEmitting:o,minVel:a,maxVel:h,acceleration:l,minAngle:A,maxAngle:c,emitRate:d,particleLife:u,opacity:g,fadeFlag:p,focus:_,focusAccel:f,startSize:m,endSize:C,minSize:y,maxSize:v,beginColor:w,endColor:I,particleSprite:x,emitterType:E,radius:B,particleRotationalVelocity:b,particleTransform:Q,randomRotation:S,random:D}={...t};this.pos=null!=n?n:Ct(null!=s?s:0,null!=r?r:0),this.isEmitting=null!=o?o:this.isEmitting,this.minVel=null!=a?a:this.minVel,this.maxVel=null!=h?h:this.maxVel,this.acceleration=null!=l?l:this.acceleration,this.minAngle=null!=A?A:this.minAngle,this.maxAngle=null!=c?c:this.maxAngle,this.emitRate=null!=d?d:this.emitRate,this.particleLife=null!=u?u:this.particleLife,this.opacity=null!=g?g:this.opacity,this.fadeFlag=null!=p?p:this.fadeFlag,this.focus=null!=_?_:this.focus,this.focusAccel=null!=f?f:this.focusAccel,this.startSize=null!=m?m:this.startSize,this.endSize=null!=C?C:this.endSize,this.minSize=null!=y?y:this.minSize,this.maxSize=null!=v?v:this.maxSize,this.beginColor=null!=w?w:this.beginColor,this.endColor=null!=I?I:this.endColor,this.particleSprite=null!=x?x:this.particleSprite,this.emitterType=null!=E?E:this.emitterType,this.radius=null!=B?B:this.radius,this.particleRotationalVelocity=null!=b?b:this.particleRotationalVelocity,this.randomRotation=null!=S?S:this.randomRotation,this.particleTransform=null!=Q?Q:this.particleTransform,this.body.collisionType=je.PreventCollision,this.random=null!=D?D:new at}removeParticle(t){this.deadParticles.push(t)}emitParticles(t){var e;for(let i=0;i1&&(this.emitParticles(Math.floor(this._particlesToEmit)),this._particlesToEmit=this._particlesToEmit-Math.floor(this._particlesToEmit)));for(let t=0;t{this._zHasChanged=!0}}get sortedTransforms(){return this._sortedTransforms}initialize(t){this._camera=t.camera,this._engine=t.engine}preupdate(){this._graphicsContext=this._engine.graphicsContext,this._zHasChanged&&(this._sortedTransforms.sort(((t,e)=>t.z-e.z)),this._zHasChanged=!1)}notify(t){if(Ys(t)){const e=t.data.get(li);this._sortedTransforms.push(e),e.zIndexChanged$.subscribe(this._zIndexUpdate),this._zHasChanged=!0}else{const e=t.data.get(li);e.zIndexChanged$.unsubscribe(this._zIndexUpdate);const i=this._sortedTransforms.indexOf(e);i>-1&&this._sortedTransforms.splice(i,1)}}update(t,e){let i;this._token++,ys.checkAndClearCache(),this._graphicsContext.save(),this._camera&&this._camera.draw(this._graphicsContext);for(const t of this._sortedTransforms){const s=t.owner;if(s.hasTag("ex.offscreen"))continue;if(i=s.get(Oi),!i.visible)continue;t.coordPlane===ei.Screen&&this._graphicsContext.restore(),this._graphicsContext.save(),t.coordPlane===ei.Screen&&this._graphicsContext.translate(this._engine.screen.contentArea.left,this._engine.screen.contentArea.top),i.update(e,this._token);const r=s.get(bs);if(r){const t=mt.One.sub(r.parallaxFactor),e=this._camera.pos.scale(t);this._graphicsContext.translate(e.x,e.y)}this._applyTransform(s),i.material&&(this._graphicsContext.material=i.material),i.onPreDraw&&i.onPreDraw(this._graphicsContext,e);const n=s instanceof fr?s.opacity:1;this._graphicsContext.opacity*=i.opacity*n,this._drawGraphicsComponent(i),i.onPostDraw&&i.onPostDraw(this._graphicsContext,e),this._graphicsContext.restore(),t.coordPlane===ei.Screen&&(this._graphicsContext.save(),this._camera&&this._camera.draw(this._graphicsContext))}this._graphicsContext.restore()}_drawGraphicsComponent(t){var e,i;if(t.visible){const s=t.flipHorizontal,r=t.flipVertical;for(const n of t.layers.get())for(const{graphic:o,options:a}of n.graphics){let h=t.anchor,l=t.offset;(null==a?void 0:a.anchor)&&(h=a.anchor),(null==a?void 0:a.offset)&&(l=a.offset);const A=-o.width*h.x+l.x,c=-o.height*h.y+l.y,d=o.flipHorizontal,u=o.flipVertical;if((s||r)&&(o.flipHorizontal=s?!d:d,o.flipVertical=r?!u:u),null==o||o.draw(this._graphicsContext,A+n.offset.x,c+n.offset.y),(s||r)&&(o.flipHorizontal=d,o.flipVertical=u),(null===(e=this._engine)||void 0===e?void 0:e.isDebug)&&this._engine.debug.graphics.showBounds){const t=Ct(A+n.offset.x,c+n.offset.y);if(o instanceof dr)for(const e of o.members)null===(i=e.graphic)||void 0===i||i.localBounds.translate(t.add(e.pos)).draw(this._graphicsContext,this._engine.debug.graphics.boundsColor);else null==o||o.localBounds.translate(t).draw(this._graphicsContext,this._engine.debug.graphics.boundsColor)}}}}_applyTransform(t){const e=t.getAncestors();for(const t of e){const e=null==t?void 0:t.get(li),i=null==t?void 0:t.get(Fi);let s=e.pos,r=e.scale,n=e.rotation;if(i&&this._engine.fixedUpdateFps&&i.__oldTransformCaptured&&i.enableFixedUpdateInterpolate){const t=this._engine.currentFrameLagMs/(1e3/this._engine.fixedUpdateFps);s=e.pos.scale(t).add(i.oldPos.scale(1-t)),r=e.scale.scale(t).add(i.oldScale.scale(1-t));const o=(1-t)*Math.cos(i.oldRotation)+t*Math.cos(e.rotation),a=(1-t)*Math.sin(i.oldRotation)+t*Math.sin(e.rotation);n=Math.atan2(a,o)}e&&(this._graphicsContext.z=e.z,this._graphicsContext.translate(s.x,s.y),this._graphicsContext.scale(r.x,r.y),this._graphicsContext.rotate(n))}}}class yr extends Vs{constructor(){super(...arguments),this.types=["ex.transform"],this.systemType=qs.Draw,this.priority=999}initialize(t){this._graphicsContext=t.engine.graphicsContext,this._camera=t.camera,this._engine=t.engine,this._collisionSystem=t.world.systemManager.get(ar)}update(t,e){var i;if(!this._engine.isDebug)return;const s=this._engine.debug.filter;let r,n;const o=this._engine.debug.entity;let a;const h=this._engine.debug.transform;let l;const A=this._engine.debug.motion;let c;const d=this._engine.debug.collider,u=this._engine.debug.physics;let g;const p=this._engine.debug.graphics;let _,f;const m=this._engine.debug.body,C=this._engine.debug.camera;for(const e of t){if(e.hasTag("offscreen"))continue;if(e instanceof fr)continue;if(s.useFilter){if(0!==s.ids.length&&!s.ids.includes(e.id))continue;if(""!==s.nameQuery&&!e.name.includes(s.nameQuery))continue}let t=mt.Zero;const u=Ct(0,16);if(r=e.id,n=e.name,a=e.get(li),this._pushCameraTransform(a),this._graphicsContext.save(),this._applyTransform(e),a&&((h.showAll||h.showPosition)&&this._graphicsContext.debug.drawPoint(mt.Zero,{size:4,color:h.positionColor}),(h.showAll||h.showPositionLabel)&&(this._graphicsContext.debug.drawText(`pos${a.pos.toString(2)}`,t),t=t.add(u)),(h.showAll||h.showZIndex)&&(this._graphicsContext.debug.drawText(`z(${a.z.toFixed(1)})`,t),t=t.add(u)),(o.showAll||o.showId)&&(this._graphicsContext.debug.drawText(`id(${r}) ${e.parent?"child of id("+(null===(i=e.parent)||void 0===i?void 0:i.id)+")":""}`,t),t=t.add(u)),(o.showAll||o.showName)&&(this._graphicsContext.debug.drawText(`name(${n})`,t),t=t.add(u)),(h.showAll||h.showRotation)&&(this._graphicsContext.drawLine(mt.Zero,mt.fromAngle(a.rotation).scale(50).add(mt.Zero),h.rotationColor,2),this._graphicsContext.debug.drawText(`rot deg(${ut(a.rotation).toFixed(2)})`,t),t=t.add(u)),(h.showAll||h.showScale)&&this._graphicsContext.drawLine(mt.Zero,a.scale.add(mt.Zero),h.scaleColor,2)),g=e.get(Oi),g&&(p.showAll||p.showBounds)&&g.localBounds.draw(this._graphicsContext,p.boundsColor),_=e.get(Qs),_&&(_.useTransform||this._graphicsContext.restore(),_.draw(this._graphicsContext),_.useTransform||(this._graphicsContext.save(),this._applyTransform(e))),f=e.get(Fi),f&&((m.showAll||m.showCollisionGroup)&&(this._graphicsContext.debug.drawText(`collision group(${f.group.name})`,t),t=t.add(u)),(m.showAll||m.showCollisionType)&&(this._graphicsContext.debug.drawText(`collision type(${f.collisionType})`,t),t=t.add(u)),(m.showAll||m.showMass)&&(this._graphicsContext.debug.drawText(`mass(${f.mass})`,t),t=t.add(u)),(m.showAll||m.showMotion)&&(this._graphicsContext.debug.drawText(`motion(${f.sleepMotion})`,t),t=t.add(u)),(m.showAll||m.showSleeping)&&(this._graphicsContext.debug.drawText(`sleeping(${f.canSleep?f.sleeping:"cant sleep"})`,t),t=t.add(u))),this._graphicsContext.restore(),l=e.get(Ai),l&&((A.showAll||A.showVelocity)&&(this._graphicsContext.debug.drawText(`vel${l.vel.toString(2)}`,t.add(a.globalPos)),this._graphicsContext.drawLine(a.globalPos,a.globalPos.add(l.vel),A.velocityColor,2),t=t.add(u)),(A.showAll||A.showAcceleration)&&this._graphicsContext.drawLine(a.globalPos,a.globalPos.add(l.acc),A.accelerationColor,2)),c=e.get(Di),c){const t=c.get();if((d.showAll||d.showGeometry)&&t&&t.debug(this._graphicsContext,d.geometryColor),d.showAll||d.showBounds)if(t instanceof Ci){const e=t.getColliders();for(const t of e){const e=t.bounds,i=Ct(e.left,e.top);this._graphicsContext.debug.drawRect(i.x,i.y,e.width,e.height,{color:d.boundsColor}),(d.showAll||d.showOwner)&&this._graphicsContext.debug.drawText(`owner id(${t.owner.id})`,i)}c.bounds.draw(this._graphicsContext,d.boundsColor)}else if(t){const t=c.bounds,e=Ct(t.left,t.top);this._graphicsContext.debug.drawRect(e.x,e.y,t.width,t.height,{color:d.boundsColor}),(d.showAll||d.showOwner)&&this._graphicsContext.debug.drawText(`owner id(${c.owner.id})`,e)}}this._popCameraTransform(a)}if(this._graphicsContext.save(),this._camera.draw(this._graphicsContext),(u.showAll||u.showBroadphaseSpacePartitionDebug)&&this._collisionSystem.debug(this._graphicsContext),u.showAll||u.showCollisionContacts||u.showCollisionNormals)for(const[t,e]of this._engine.debug.stats.currFrame.physics.contacts){if(u.showAll||u.showCollisionContacts)for(const t of e.points)this._graphicsContext.debug.drawPoint(t,{size:5,color:u.collisionContactColor});if(u.showAll||u.showCollisionNormals)for(const t of e.points)this._graphicsContext.debug.drawLine(t,e.normal.scale(30).add(t),{color:u.collisionNormalColor})}this._graphicsContext.restore(),C&&(this._graphicsContext.save(),this._camera.draw(this._graphicsContext),(C.showAll||C.showFocus)&&this._graphicsContext.drawCircle(this._camera.pos,4,C.focusColor),(C.showAll||C.showZoom)&&this._graphicsContext.debug.drawText(`zoom(${this._camera.zoom})`,this._camera.pos),this._graphicsContext.restore()),this._graphicsContext.flush()}_applyTransform(t){const e=t.getAncestors();for(const t of e){const e=null==t?void 0:t.get(li);e&&(this._graphicsContext.translate(e.pos.x,e.pos.y),this._graphicsContext.scale(e.scale.x,e.scale.y),this._graphicsContext.rotate(e.rotation))}}_pushCameraTransform(t){t.coordPlane===ei.World&&(this._graphicsContext.save(),this._camera&&this._camera.draw(this._graphicsContext))}_popCameraTransform(t){t.coordPlane===ei.World&&this._graphicsContext.restore()}}class vr extends Vs{constructor(){super(...arguments),this.types=["ex.transform","ex.pointer"],this.systemType=qs.Update,this.priority=-1,this.overrideUseColliderShape=!1,this.overrideUseGraphicsBounds=!1,this.lastFrameEntityToPointers=new Map,this.currentFrameEntityToPointers=new Map,this._sortedTransforms=[],this._sortedEntities=[],this._zHasChanged=!1,this._zIndexUpdate=()=>{this._zHasChanged=!0}}initialize(t){this._engine=t.engine}preupdate(){this._receiver=this._engine.input.pointers,this._zHasChanged&&(this._sortedTransforms.sort(((t,e)=>e.z-t.z)),this._sortedEntities=this._sortedTransforms.map((t=>t.owner)),this._zHasChanged=!1)}notify(t){if(Ys(t)){const e=t.data.get(li);this._sortedTransforms.push(e),this._sortedEntities.push(e.owner),e.zIndexChanged$.subscribe(this._zIndexUpdate),this._zHasChanged=!0}else{const e=t.data.get(li);e.zIndexChanged$.unsubscribe(this._zIndexUpdate);const i=this._sortedTransforms.indexOf(e);i>-1&&(this._sortedTransforms.splice(i,1),this._sortedEntities.splice(i,1))}}entityCurrentlyUnderPointer(t,e){return this.currentFrameEntityToPointers.has(t.id)&&this.currentFrameEntityToPointers.get(t.id).includes(e)}entityWasUnderPointer(t,e){return this.lastFrameEntityToPointers.has(t.id)&&this.lastFrameEntityToPointers.get(t.id).includes(e)}entered(t,e){return this.entityCurrentlyUnderPointer(t,e)&&!this.lastFrameEntityToPointers.has(t.id)}left(t,e){return!this.currentFrameEntityToPointers.has(t.id)&&this.entityWasUnderPointer(t,e)}addPointerToEntity(t,e){if(!this.currentFrameEntityToPointers.has(t.id))return void this.currentFrameEntityToPointers.set(t.id,[e]);const i=this.currentFrameEntityToPointers.get(t.id);this.currentFrameEntityToPointers.set(t.id,i.concat(e))}update(t){this._processPointerToEntity(this._sortedEntities),this._dispatchEvents(this._sortedEntities),this._receiver.update(),this.lastFrameEntityToPointers.clear(),this.lastFrameEntityToPointers=new Map(this.currentFrameEntityToPointers),this.currentFrameEntityToPointers.clear(),this._receiver.clear()}_processPointerToEntity(t){var e;let i,s,r,n;for(const o of t){if(i=o.get(li),n=null!==(e=o.get(Vi))&&void 0!==e?e:new Vi,s=o.get(Di),s&&(n.useColliderShape||this.overrideUseColliderShape)){s.update();const t=s.get();if(t)for(const[e,s]of this._receiver.currentFramePointerCoords.entries())t.contains(i.coordPlane===ei.World?s.worldPos:s.screenPos)&&this.addPointerToEntity(o,e)}if(r=o.get(Oi),r&&(n.useGraphicsBounds||this.overrideUseGraphicsBounds)){const t=r.localBounds.transform(i.get().matrix);for(const[e,s]of this._receiver.currentFramePointerCoords.entries())t.contains(i.coordPlane===ei.World?s.worldPos:s.screenPos)&&this.addPointerToEntity(o,e)}}}_processDownAndEmit(t){const e=new Map;for(const i of this._receiver.currentFrameDown)i.active&&t.active&&this.entityCurrentlyUnderPointer(t,i.pointerId)&&(t.events.emit("pointerdown",i),this._receiver.isDragStart(i.pointerId)&&t.events.emit("pointerdragstart",i)),e.set(i.pointerId,i);return e}_processUpAndEmit(t){const e=new Map;for(const i of this._receiver.currentFrameUp)i.active&&t.active&&this.entityCurrentlyUnderPointer(t,i.pointerId)&&(t.events.emit("pointerup",i),this._receiver.isDragEnd(i.pointerId)&&t.events.emit("pointerdragend",i)),e.set(i.pointerId,i);return e}_processMoveAndEmit(t){const e=new Map;for(const i of this._receiver.currentFrameMove)i.active&&t.active&&this.entityCurrentlyUnderPointer(t,i.pointerId)&&(t.events.emit("pointermove",i),this._receiver.isDragging(i.pointerId)&&t.events.emit("pointerdragmove",i)),e.set(i.pointerId,i);return e}_processEnterLeaveAndEmit(t,e){for(const i of e){if(i.active&&t.active&&this.entered(t,i.pointerId)){t.events.emit("pointerenter",i),this._receiver.isDragging(i.pointerId)&&t.events.emit("pointerdragenter",i);break}if(i.active&&t.active&&(this.left(t,i.pointerId)||this.entityCurrentlyUnderPointer(t,i.pointerId)&&"up"===i.type)){t.events.emit("pointerleave",i),this._receiver.isDragging(i.pointerId)&&t.events.emit("pointerdragleave",i);break}}}_processCancelAndEmit(t){for(const e of this._receiver.currentFrameCancel)e.active&&t.active&&this.entityCurrentlyUnderPointer(t,e.pointerId)&&t.events.emit("pointercancel",e)}_processWheelAndEmit(t){for(const e of this._receiver.currentFrameWheel)e.active&&t.active&&this.entityCurrentlyUnderPointer(t,0)&&t.events.emit("pointerwheel",e)}_dispatchEvents(t){const e=new Set(this.lastFrameEntityToPointers.keys()),i=new Set(this.currentFrameEntityToPointers.keys()),s=t.filter((t=>e.has(t.id)||i.has(t.id)));let r,n,o;for(const t of s){o=this._processDownAndEmit(t),n=this._processUpAndEmit(t),r=this._processMoveAndEmit(t);const e=[...r.values(),...o.values(),...n.values()];this._processEnterLeaveAndEmit(t,e),this._processCancelAndEmit(t),this._processWheelAndEmit(t)}}}class wr extends Vs{constructor(){super(...arguments),this.types=["ex.actions"],this.systemType=qs.Update,this.priority=-1,this._actions=[]}notify(t){if(Ys(t)){const e=t.data.get(ms);this._actions.push(e)}else{const e=t.data.get(ms),i=this._actions.indexOf(e);i>-1&&this._actions.splice(i,1)}}update(t,e){for(const t of this._actions)t.update(e)}}class Ir extends oi{constructor(t){super(),this.type="ex.isometricentity",this.elevation=0,this.map=t}}class xr extends Vs{constructor(){super(...arguments),this.types=["ex.transform","ex.isometricentity"],this.systemType=qs.Update,this.priority=99}update(t,e){let i,s;for(const e of t){i=e.get(li),s=e.get(Ir);const t=Math.max(s.map.columns*s.map.tileWidth,s.map.rows*s.map.tileHeight)*s.elevation+i.pos.y;i.z=t}}}class Er extends Vs{constructor(){super(...arguments),this.types=["ex.transform","ex.graphics"],this.systemType=qs.Draw,this.priority=-1}initialize(t){this._camera=t.camera,this._screen=t.engine.screen}update(t){let e,i,s;this._worldBounds=this._screen.getWorldBounds();for(const r of t){let t;if(i=r.get(Oi),e=r.get(li),s=r.get(bs),s){const e=mt.One.sub(s.parallaxFactor);t=this._camera.pos.scale(e)}const n=this._isOffscreen(e,i,t);n&&!r.hasTag("ex.offscreen")&&(r.events.emit("exitviewport",new K(r)),r.addTag("ex.offscreen")),!n&&r.hasTag("ex.offscreen")&&(r.events.emit("enterviewport",new W(r)),r.removeTag("ex.offscreen"))}}_isOffscreen(t,e,i){if(t.coordPlane===ei.World){let s=e.localBounds;i&&(s=s.translate(i));const r=s.transform(t.get().matrix);return!this._worldBounds.overlaps(r)}return!1}}class Br{constructor(){this.collisionProcessor=new fi}rayCast(t,e){return this.collisionProcessor.rayCast(t,e)}}const br={Initialize:"initialize",Activate:"activate",Deactivate:"deactivate",PreUpdate:"preupdate",PostUpdate:"postupdate",PreDraw:"predraw",PostDraw:"postdraw",PreDebugDraw:"predebugdraw",PostDebugDraw:"postdebugdraw"};class Qr{get actors(){return this.world.entityManager.entities.filter((t=>t instanceof Is))}get entities(){return this.world.entityManager.entities}get triggers(){return this.world.entityManager.entities.filter((t=>t instanceof Hs))}get tileMaps(){return this.world.entityManager.entities.filter((t=>t instanceof Ds))}get timers(){return this._timers}constructor(){this._logger=tt.getInstance(),this.events=new _,this.camera=new Us,this.world=new er(this),this.physics=new Br,this._isInitialized=!1,this._timers=[],this._cancelQueue=[],this.world.add(new wr),this.world.add(new sr),this.world.add(new ar(this.physics)),this.world.add(new vr),this.world.add(new xr),this.world.add(new Er),this.world.add(new Cr),this.world.add(new yr)}emit(t,e){this.events.emit(t,e)}on(t,e){return this.events.on(t,e)}once(t,e){return this.events.once(t,e)}off(t,e){this.events.off(t,e)}onInitialize(t){}onActivate(t){}onDeactivate(t){}onPreUpdate(t,e){}onPostUpdate(t,e){}onPreDraw(t,e){}onPostDraw(t,e){}_initializeChildren(){for(const t of this.entities)t._initialize(this.engine)}get isInitialized(){return this._isInitialized}_initialize(t){this.isInitialized||(this.engine=t,this.camera._initialize(t),this.world.systemManager.initialize(),this.onInitialize.call(this,t),this._initializeChildren(),this._logger.debug("Scene.onInitialize",this,t),this.events.emit("initialize",new V(t,this)),this._isInitialized=!0)}_activate(t){this._logger.debug("Scene.onActivate",this),this.onActivate(t)}_deactivate(t){this._logger.debug("Scene.onDeactivate",this),this.onDeactivate(t)}_preupdate(t,e){this.emit("preupdate",new b(t,e,this)),this.onPreUpdate(t,e)}_postupdate(t,e){this.emit("postupdate",new Q(t,e,this)),this.onPostUpdate(t,e)}_predraw(t,e){this.emit("predraw",new I(t,e,this)),this.onPreDraw(t,e)}_postdraw(t,e){this.emit("postdraw",new x(t,e,this)),this.onPostDraw(t,e)}update(t,e){let i,s;for(this._preupdate(t,e),i=0,s=this._cancelQueue.length;i-1}add(t){this.emit("entityadded",{target:t}),this.world.add(t),t.scene=this,t instanceof Bs&&(St(this._timers,t)||this.addTimer(t))}transfer(t){let e;t instanceof Ni&&t.scene&&t.scene!==this&&(e=t.scene,t.scene.world.remove(t,!1)),t instanceof Bs&&t.scene&&(e=t.scene,t.scene.removeTimer(t)),null==e||e.emit("entityremoved",{target:t}),this.add(t)}remove(t){t instanceof Ni&&(this.emit("entityremoved",{target:t}),t.active&&t.kill(),this.world.remove(t)),t instanceof Bs&&this.removeTimer(t)}clear(t=!0){for(const e of this.entities)this.world.remove(e,t);for(const t of this.timers)this.removeTimer(t)}addTimer(t){return this._timers.push(t),t.scene=this,t}removeTimer(t){const e=this._timers.indexOf(t);return-1!==e&&this._timers.splice(e,1),t}cancelTimer(t){return this._cancelQueue.push(t),t}isTimerActive(t){return this._timers.indexOf(t)>-1&&!t.complete}isCurrentScene(){return!!this.engine&&this.engine.currentScene===this}_collectActorStats(t){const e=this.actors.filter((t=>t instanceof Es));for(const i of e)t.stats.currFrame.actors.ui++;for(const e of this.actors){t.stats.currFrame.actors.alive++;for(const i of e.children)xs(i)?t.stats.currFrame.actors.ui++:t.stats.currFrame.actors.alive++}}}var Sr,Dr,Tr,Fr,kr;!function(t){t.Protanope="Protanope",t.Deuteranope="Deuteranope",t.Tritanope="Tritanope"}(Sr||(Sr={}));class Pr{constructor(t,e){this._shader=new $t({gl:t,vertexSource:"#version 300 es\n in vec2 a_position;\n in vec2 a_texcoord;\n out vec2 v_texcoord;\n\n void main() {\n gl_Position = vec4(a_position, 0.0, 1.0);\n // Pass the texcoord to the fragment shader.\n v_texcoord = a_texcoord;\n }",fragmentSource:e}),this._shader.compile(),this._buffer=new te({gl:t,type:"static",data:new Float32Array([-1,-1,0,0,-1,1,0,1,1,-1,1,0,1,-1,1,0,-1,1,0,1,1,1,1,1])}),this._layout=new ee({gl:t,shader:this._shader,vertexBuffer:this._buffer,attributes:[["a_position",2],["a_texcoord",2]]}),this._buffer.upload()}getShader(){return this._shader}getLayout(){return this._layout}}class Rr{constructor(t,e=!1){this._colorBlindnessMode=t,this._simulate=!1,this._simulate=e}initialize(t){this._shader=new Pr(t,"#version 300 es\r\nprecision mediump float;\r\n// our texture\r\nuniform sampler2D u_image;\r\n// the texCoords passed in from the vertex shader.\r\nin vec2 v_texcoord;\r\n\r\n// color blind type\r\nuniform int u_type;\r\n\r\n// simulation?\r\nuniform bool u_simulate;\r\n\r\nout vec4 fragColor;\r\n\r\nvoid main() {\r\n vec4 o = texture(u_image, v_texcoord);\r\n // RGB to LMS matrix conversion\r\n float L = (17.8824 * o.r) + (43.5161 * o.g) + (4.11935 * o.b);\r\n float M = (3.45565 * o.r) + (27.1554 * o.g) + (3.86714 * o.b);\r\n float S = (0.0299566 * o.r) + (0.184309 * o.g) + (1.46709 * o.b);\r\n // Simulate color blindness\r\n float l;\r\n float m;\r\n float s;\r\n //MODE CODE//\r\n if (u_type == 0) {\r\n // Protanope\r\n l = 0.0 * L + 2.02344 * M + -2.52581 * S;\r\n m = 0.0 * L + 1.0 * M + 0.0 * S;\r\n s = 0.0 * L + 0.0 * M + 1.0 * S;;\r\n } else if (u_type == 1) {\r\n // Deuteranope\r\n l = 1.0 * L + 0.0 * M + 0.0 * S;\r\n m = 0.494207 * L + 0.0 * M + 1.24827 * S;\r\n s = 0.0 * L + 0.0 * M + 1.0 * S;\r\n } else if (u_type == 2) {\r\n // Tritanope\r\n l = 1.0 * L + 0.0 * M + 0.0 * S;\r\n m = 0.0 * L + 1.0 * M + 0.0 * S;\r\n s = -0.395913 * L + 0.801109 * M + 0.0 * S;\r\n }\r\n\r\n // LMS to RGB matrix conversion\r\n vec4 error; // simulate the colors\r\n error.r = (0.0809444479 * l) + (-0.130504409 * m) + (0.116721066 * s);\r\n error.g = (-0.0102485335 * l) + (0.0540193266 * m) + (-0.113614708 * s);\r\n error.b = (-0.000365296938 * l) + (-0.00412161469 * m) + (0.693511405 * s);\r\n error.a = 1.0;\r\n vec4 diff = o - error;\r\n vec4 correction; // correct the colors\r\n correction.r = 0.0;\r\n correction.g = (diff.r * 0.7) + (diff.g * 1.0);\r\n correction.b = (diff.r * 0.7) + (diff.b * 1.0);\r\n correction = o + correction;\r\n correction.a = o.a;\r\n //SIMULATE//\r\n\r\n // sim \r\n if (u_simulate) {\r\n fragColor = error.rgba;\r\n } else {\r\n fragColor = correction.rgba;\r\n }\r\n}"),this.simulate=this._simulate,this.colorBlindnessMode=this._colorBlindnessMode}getShader(){return this._shader.getShader()}getLayout(){return this._shader.getLayout()}set colorBlindnessMode(t){if(this._colorBlindnessMode=t,this._shader){const t=this._shader.getShader();t.use(),this._colorBlindnessMode===Sr.Protanope?t.setUniformInt("u_type",0):this._colorBlindnessMode===Sr.Deuteranope?t.setUniformInt("u_type",1):this._colorBlindnessMode===Sr.Tritanope&&t.setUniformInt("u_type",2)}}get colorBlindnessMode(){return this._colorBlindnessMode}set simulate(t){if(this._simulate=t,this._shader){const e=this._shader.getShader();e.use(),e.setUniformBoolean("u_simulate",t)}}get simulate(){return this._simulate}}class Mr{constructor(t){this._engine=t,this._colorBlindPostProcessor=new Rr(Sr.Protanope)}correct(t){this._engine.graphicsContext instanceof _e&&(this.clear(),this._colorBlindPostProcessor.colorBlindnessMode=t,this._colorBlindPostProcessor.simulate=!1,this._engine.graphicsContext.addPostProcessor(this._colorBlindPostProcessor))}simulate(t){this._engine.graphicsContext instanceof _e&&(this.clear(),this._colorBlindPostProcessor.colorBlindnessMode=t,this._colorBlindPostProcessor.simulate=!0,this._engine.graphicsContext.addPostProcessor(this._colorBlindPostProcessor))}clear(){this._engine.graphicsContext.removePostProcessor(this._colorBlindPostProcessor)}}class Lr{constructor(t){this.stats={currFrame:new Nr,prevFrame:new Nr},this.filter={useFilter:!1,nameQuery:"",ids:[]},this.entity={showAll:!1,showId:!0,showName:!1},this.transform={showAll:!1,showPosition:!1,showPositionLabel:!1,positionColor:yt.Yellow,showZIndex:!1,showScale:!1,scaleColor:yt.Green,showRotation:!1,rotationColor:yt.Blue},this.graphics={showAll:!1,showBounds:!0,boundsColor:yt.Yellow},this.collider={showAll:!1,showBounds:!0,boundsColor:yt.Blue,showOwner:!1,showGeometry:!0,geometryColor:yt.Green},this.physics={showAll:!1,showBroadphaseSpacePartitionDebug:!1,showCollisionNormals:!1,collisionNormalColor:yt.Cyan,showCollisionContacts:!0,collisionContactColor:yt.Red},this.motion={showAll:!1,showVelocity:!1,velocityColor:yt.Yellow,showAcceleration:!1,accelerationColor:yt.Red},this.body={showAll:!1,showCollisionGroup:!1,showCollisionType:!1,showSleeping:!1,showMotion:!1,showMass:!1},this.camera={showAll:!1,showFocus:!1,focusColor:yt.Red,showZoom:!1},this._engine=t,this.colorBlindMode=new Mr(this._engine)}useTestClock(){const t=this._engine.clock,e=t.isRunning();t.stop();const i=t.toTestClock();return e&&i.start(),this._engine.clock=i,i}useStandardClock(){const t=this._engine.clock,e=t.isRunning();t.stop();const i=t.toStandardClock();return e&&i.start(),this._engine.clock=i,i}}class Nr{constructor(){this._id=0,this._delta=0,this._fps=0,this._actorStats={alive:0,killed:0,ui:0,get remaining(){return this.alive-this.killed},get total(){return this.remaining+this.ui}},this._durationStats={update:0,draw:0,get total(){return this.update+this.draw}},this._physicsStats=new Gr,this._graphicsStats={drawCalls:0,drawnImages:0}}reset(t){t?(this.id=t.id,this.delta=t.delta,this.fps=t.fps,this.actors.alive=t.actors.alive,this.actors.killed=t.actors.killed,this.actors.ui=t.actors.ui,this.duration.update=t.duration.update,this.duration.draw=t.duration.draw,this._physicsStats.reset(t.physics),this.graphics.drawCalls=t.graphics.drawCalls,this.graphics.drawnImages=t.graphics.drawnImages):(this.id=this.delta=this.fps=0,this.actors.alive=this.actors.killed=this.actors.ui=0,this.duration.update=this.duration.draw=0,this._physicsStats.reset(),this.graphics.drawnImages=this.graphics.drawCalls=0)}clone(){const t=new Nr;return t.reset(this),t}get id(){return this._id}set id(t){this._id=t}get delta(){return this._delta}set delta(t){this._delta=t}get fps(){return this._fps}set fps(t){this._fps=t}get actors(){return this._actorStats}get duration(){return this._durationStats}get physics(){return this._physicsStats}get graphics(){return this._graphicsStats}}class Gr{constructor(){this._pairs=0,this._collisions=0,this._contacts=new Map,this._fastBodies=0,this._fastBodyCollisions=0,this._broadphase=0,this._narrowphase=0}reset(t){t?(this.pairs=t.pairs,this.collisions=t.collisions,this.contacts=t.contacts,this.fastBodies=t.fastBodies,this.fastBodyCollisions=t.fastBodyCollisions,this.broadphase=t.broadphase,this.narrowphase=t.narrowphase):(this.pairs=this.collisions=this.fastBodies=0,this.fastBodyCollisions=this.broadphase=this.narrowphase=0,this.contacts.clear())}clone(){const t=new Gr;return t.reset(this),t}get pairs(){return this._pairs}set pairs(t){this._pairs=t}get collisions(){return this._collisions}set collisions(t){this._collisions=t}get contacts(){return this._contacts}set contacts(t){this._contacts=t}get fastBodies(){return this._fastBodies}set fastBodies(t){this._fastBodies=t}get fastBodyCollisions(){return this._fastBodyCollisions}set fastBodyCollisions(t){this._fastBodyCollisions=t}get broadphase(){return this._broadphase}set broadphase(t){this._broadphase=t}get narrowphase(){return this._narrowphase}set narrowphase(t){this._narrowphase=t}}class Ur{on(t,e){this._nativeHandlers[t]&&this.off(t,this._nativeHandlers[t]),this._nativeHandlers[t]=this._decorate(e),this.nativeComponent.addEventListener(t,this._nativeHandlers[t])}off(t,e){e||(e=this._nativeHandlers[t]),this.nativeComponent.removeEventListener(t,e),this._nativeHandlers[t]=null}_decorate(t){return e=>{this._paused||t(e)}}pause(){this._paused=!0}resume(){this._paused=!1}clear(){for(const t in this._nativeHandlers)this.off(t)}constructor(t){this.nativeComponent=t,this._paused=!1,this._nativeHandlers={}}}class zr{constructor(t,e){this._windowGlobal=t,this._documentGlobal=e,this._windowComponent=new Ur(this._windowGlobal),this._documentComponent=new Ur(this._documentGlobal)}get window(){return this._windowComponent}get document(){return this._documentComponent}pause(){this.window.pause(),this.document.pause()}resume(){this.window.resume(),this.document.resume()}clear(){this.window.clear(),this.document.clear()}}class Or{static fromPagePosition(t,e,i){let s,r,n,o;3===arguments.length?(s=t,r=e,n=new mt(s,r),o=i):(n=t,s=n.x,r=n.y,o=e);const a=o.screen.pageToScreenCoordinates(n),h=o.screen.screenToWorldCoordinates(a);return new Or(h,n,a)}constructor(t,e,i){this.worldPos=t,this.pagePos=e,this.screenPos=i}}class Hr{cancel(){this.active=!1}get pagePos(){return this.coordinates.pagePos}get screenPos(){return this.coordinates.screenPos}get worldPos(){return this.coordinates.worldPos}constructor(t,e,i,s,r,n){this.type=t,this.pointerId=e,this.button=i,this.pointerType=s,this.coordinates=r,this.nativeEvent=n,this.active=!0}}class qr{cancel(){this.active=!1}constructor(t,e,i,s,r,n,o,a,h,l,A,c){this.x=t,this.y=e,this.pageX=i,this.pageY=s,this.screenX=r,this.screenY=n,this.index=o,this.deltaX=a,this.deltaY=h,this.deltaZ=l,this.deltaMode=A,this.ev=c,this.active=!0}}class Vr{constructor(){this.events=new _,this.lastPagePos=mt.Zero,this.lastScreenPos=mt.Zero,this.lastWorldPos=mt.Zero,this._onPointerMove=t=>{this.lastPagePos=new mt(t.pagePos.x,t.pagePos.y),this.lastScreenPos=new mt(t.screenPos.x,t.screenPos.y),this.lastWorldPos=new mt(t.worldPos.x,t.worldPos.y)},this._onPointerDown=t=>{this.lastPagePos=new mt(t.pagePos.x,t.pagePos.y),this.lastScreenPos=new mt(t.screenPos.x,t.screenPos.y),this.lastWorldPos=new mt(t.worldPos.x,t.worldPos.y)},this.on("move",this._onPointerMove),this.on("down",this._onPointerDown)}emit(t,e){this.events.emit(t,e)}on(t,e){return this.events.on(t,e)}once(t,e){return this.events.once(t,e)}off(t,e){this.events.off(t,e)}}!function(t){t.Pixel="Pixel",t.Line="Line",t.Page="Page"}(Dr||(Dr={})),function(t){t[t.NoButton=-1]="NoButton",t[t.Left=0]="Left",t[t.Middle=1]="Middle",t[t.Right=2]="Right",t[t.Unknown=3]="Unknown"}(Tr||(Tr={})),function(t){t.Left="Left",t.Middle="Middle",t.Right="Right",t.Unknown="Unknown",t.NoButton="NoButton"}(Fr||(Fr={})),function(t){t.Touch="Touch",t.Mouse="Mouse",t.Pen="Pen",t.Unknown="Unknown"}(kr||(kr={}));class jr{constructor(t,e){this.target=t,this.engine=e,this.events=new _,this.primary=new Vr,this._activeNativePointerIdsToNormalized=new Map,this.lastFramePointerCoords=new Map,this.currentFramePointerCoords=new Map,this.currentFramePointerDown=new Map,this.lastFramePointerDown=new Map,this.currentFrameDown=[],this.currentFrameUp=[],this.currentFrameMove=[],this.currentFrameCancel=[],this.currentFrameWheel=[],this._pointers=[this.primary],this._boundHandle=this._handle.bind(this),this._boundWheel=this._handleWheel.bind(this)}recreate(t,e){const i=new jr(t,e);return i.primary=this.primary,i._pointers=this._pointers,i}at(t){if(t>=this._pointers.length)for(let e=this._pointers.length-1,i=t;e{window.focus()};window.PointerEvent?this.target.addEventListener("pointerdown",t):(this.target.addEventListener("touchstart",t),this.target.addEventListener("mousedown",t))}}detach(){window.PointerEvent?(this.target.removeEventListener("pointerdown",this._boundHandle),this.target.removeEventListener("pointerup",this._boundHandle),this.target.removeEventListener("pointermove",this._boundHandle),this.target.removeEventListener("pointercancel",this._boundHandle)):(this.target.removeEventListener("touchstart",this._boundHandle),this.target.removeEventListener("touchend",this._boundHandle),this.target.removeEventListener("touchmove",this._boundHandle),this.target.removeEventListener("touchcancel",this._boundHandle),this.target.removeEventListener("mousedown",this._boundHandle),this.target.removeEventListener("mouseup",this._boundHandle),this.target.removeEventListener("mousemove",this._boundHandle)),"onwheel"in document.createElement("div")?this.target.removeEventListener("wheel",this._boundWheel):void 0!==document.onmousewheel?this.target.addEventListener("mousewheel",this._boundWheel):this.target.addEventListener("MozMousePixelScroll",this._boundWheel)}_normalizePointerId(t){this._activeNativePointerIdsToNormalized.set(t,-1);const e=Array.from(this._activeNativePointerIdsToNormalized.keys()).sort(((t,e)=>t-e)).findIndex((e=>e===t));return this._activeNativePointerIdsToNormalized.set(t,e),e}_handle(t){t.preventDefault();const e=new Map;let i,s;if(r=t,globalThis.TouchEvent&&r instanceof globalThis.TouchEvent){i=Fr.Unknown,s=kr.Touch;for(let i=0;i=this._previousSampleTime+this._samplePeriod&&(this._fps=1e3*this._frames/(t-this._previousSampleTime),this._previousSampleTime=t,this._frames=0)}get fps(){return this._fps}get instant(){return 1e3/this._currentFrameTime}}class Kr{constructor(t){var e,i,s;this._onFatalException=()=>{},this._maxFps=1/0,this._lastTime=0,this._elapsed=1,this._scheduledCbs=[],this._totalElapsed=0,this._options=t,this.tick=t.tick,this._lastTime=null!==(e=this.now())&&void 0!==e?e:0,this._maxFps=null!==(i=t.maxFps)&&void 0!==i?i:this._maxFps,this._onFatalException=null!==(s=t.onFatalException)&&void 0!==s?s:this._onFatalException,this.fpsSampler=new Yr({initialFps:60,nowFn:()=>this.now()})}elapsed(){return this._elapsed}now(){return performance.now()}toTestClock(){return new Jr({...this._options,defaultUpdateMs:16.6})}toStandardClock(){return new Wr({...this._options})}setFatalExceptionHandler(t){this._onFatalException=t}schedule(t,e=0){const i=this._totalElapsed+e;this._scheduledCbs.push([t,i])}_runScheduledCbs(){for(let t=this._scheduledCbs.length-1;t>-1;t--)this._scheduledCbs[t][1]<=this._totalElapsed&&(this._scheduledCbs[t][0](),this._scheduledCbs.splice(t,1))}update(t){try{this.fpsSampler.start();const e=this.now();let i=e-this._lastTime||1;const s=1e3/this._maxFps;if(i>=s){let r=0;0!==s&&(r=i%s,i-=r),i>200&&(i=1),this._elapsed=t||i,this._totalElapsed+=this._elapsed,this._runScheduledCbs(),this.tick(t||i),this._lastTime=0!==s?e-r:e,this.fpsSampler.end()}}catch(t){this._onFatalException(t),this.stop()}}}class Wr extends Kr{constructor(t){super(t),this._running=!1}isRunning(){return this._running}start(){if(this._running)return;this._running=!0;const t=()=>{if(this._running)try{this._requestId=window.requestAnimationFrame(t),this.update()}catch(t){throw window.cancelAnimationFrame(this._requestId),t}};t()}stop(){this._running=!1}}class Jr extends Kr{constructor(t){super({...t}),this._logger=tt.getInstance(),this._running=!1,this._currentTime=0,this._updateMs=t.defaultUpdateMs}now(){var t;return null!==(t=this._currentTime)&&void 0!==t?t:0}isRunning(){return this._running}start(){this._running=!0}stop(){this._running=!1}step(t){const e=null!=t?t:this._updateMs;this._running?(this.update(e),this._currentTime+=e):this._logger.warn("The clock is not running, no step will be performed")}run(t,e){for(let i=0;ithis._createFragment(t)));if(e){const t=document.createElement("a");t.href=e,t.innerText=i||e,r.splice(1,0,t)}const n=document.createElement("div");r.forEach((t=>{n.appendChild(t)})),s.appendChild(n);const o=document.createElement("button");o.innerText="x",o.addEventListener("click",(()=>{this._container.removeChild(s)})),s.appendChild(o);const a=t=>{if("Escape"===t.key)try{this._container.removeChild(s)}catch(t){}document.removeEventListener("keydown",a)};document.addEventListener("keydown",a);const h=this._container.firstChild;this._container.insertBefore(s,h)}}class $r{constructor(t){this.inputs=t,this._handlers=new Map}execute(){for(const[t,e]of this._handlers.entries()){const i=t(this.inputs);i&&e(i)}}on(t,e){this._handlers.set(t,e)}}u();const tn={FallbackGraphicsContext:"fallbackgraphicscontext",Initialize:"initialize",Visible:"visible",Hidden:"hidden",Start:"start",Stop:"stop",PreUpdate:"preupdate",PostUpdate:"postupdate",PreFrame:"preframe",PostFrame:"postframe",PreDraw:"predraw",PostDraw:"postdraw"};var en;!function(t){t[t.None=0]="None",t[t.Canvas=1]="Canvas",t[t.All=2]="All"}(en||(en={}));class sn{get canvasWidth(){return this.screen.canvasWidth}get halfCanvasWidth(){return this.screen.halfCanvasWidth}get canvasHeight(){return this.screen.canvasHeight}get halfCanvasHeight(){return this.screen.halfCanvasHeight}get drawWidth(){return this.screen.drawWidth}get halfDrawWidth(){return this.screen.halfDrawWidth}get drawHeight(){return this.screen.drawHeight}get halfDrawHeight(){return this.screen.halfDrawHeight}get isHiDpi(){return this.screen.isHiDpi}get stats(){return this.debug.stats}get isFullscreen(){return this.screen.isFullScreen}get displayMode(){return this.screen.displayMode}get pixelRatio(){return this.screen.pixelRatio}get isDebug(){return this._isDebug}get snapToPixel(){return this.graphicsContext.snapToPixel}set snapToPixel(t){this.graphicsContext.snapToPixel=t}emit(t,e){this.events.emit(t,e)}on(t,e){return this.events.on(t,e)}once(t,e){return this.events.once(t,e)}off(t,e){this.events.off(t,e)}constructor(t){var e,i,s,r,n,o;this.events=new _,this.maxFps=Number.POSITIVE_INFINITY,this.scenes={},this._suppressPlayButton=!1,this.pauseAudioWhenHidden=!0,this._isDebug=!1,this.enableCanvasTransparency=!0,this.onFatalException=t=>{tt.getInstance().fatal(t)},this._toaster=new Zr,this._timescale=1,this._isInitialized=!1,this._deferredGoTo=null,this._originalOptions={},this._performanceThresholdTriggered=!1,this._fpsSamples=[],this._loadingComplete=!1,this._isReady=!1,this._isReadyPromise=new Promise((t=>{this._isReadyResolve=t})),this.currentFrameElapsedMs=0,this.currentFrameLagMs=0,this._lagMs=0,this._screenShotRequests=[],t={...sn._DEFAULT_ENGINE_OPTIONS,...t},this._originalOptions=t,g.freeze(),this.browser=new zr(window,document);const a=new Ve;if(!t.suppressMinimumBrowserFeatureDetection&&!(this._compatible=a.test())){const e=document.createElement("div");if(e.innerText="Sorry, your browser does not support all the features needed for Excalibur",document.body.appendChild(e),a.failedTests.forEach((function(t){const e=document.createElement("div");e.innerText="Browser feature missing "+t,document.body.appendChild(e)})),t.canvasElementId){const e=document.getElementById(t.canvasElementId);e&&e.parentElement.removeChild(e)}return}this._compatible=!0,console.log&&!t.suppressConsoleBootMessage&&(console.log(`%cPowered by Excalibur.js (v${Qn})`,"background: #176BAA; color: white; border-radius: 5px; padding: 15px; font-size: 1.5em; line-height: 80px;"),console.log("\n /| ________________\nO|===|* >________________>\n \\|"),console.log("Visit","http://excaliburjs.com","for more information")),t.suppressPlayButton&&(this._suppressPlayButton=!0),this._logger=tt.getInstance(),this._logger.defaultLevel===l.Debug&&a.logBrowserFeatures(),this._logger.debug("Building engine..."),this.canvasElementId=t.canvasElementId,t.canvasElementId?(this._logger.debug("Using Canvas element specified: "+t.canvasElementId),this.canvas=document.getElementById(t.canvasElementId)):t.canvasElement?(this._logger.debug("Using Canvas element specified:",t.canvasElement),this.canvas=t.canvasElement):(this._logger.debug("Using generated canvas element"),this.canvas=document.createElement("canvas"));let h=null!==(e=t.displayMode)&&void 0!==e?e:ye.Fixed;t.width&&t.height||t.viewport?(void 0===t.displayMode&&(h=ye.Fixed),this._logger.debug("Engine viewport is size "+t.width+" x "+t.height)):t.displayMode||(this._logger.debug("Engine viewport is fit"),h=ye.FitScreen),this._originalDisplayMode=h;let A=g.isEnabled("use-canvas-context");if(!A)try{this.graphicsContext=new _e({canvasElement:this.canvas,enableTransparency:this.enableCanvasTransparency,smoothing:t.antialiasing,backgroundColor:t.backgroundColor,snapToPixel:t.snapToPixel,useDrawSorting:t.useDrawSorting})}catch(t){this._logger.warn(`Excalibur could not load webgl for some reason (${t.message}) and loaded a Canvas 2D fallback. Some features of Excalibur will not work in this mode. \n\nRead more about this issue at https://excaliburjs.com/docs/webgl`),A=!0}A&&(this.graphicsContext=new Ce({canvasElement:this.canvas,enableTransparency:this.enableCanvasTransparency,smoothing:t.antialiasing,backgroundColor:t.backgroundColor,snapToPixel:t.snapToPixel,useDrawSorting:t.useDrawSorting})),this.screen=new we({canvas:this.canvas,context:this.graphicsContext,antialiasing:null===(i=t.antialiasing)||void 0===i||i,browser:this.browser,viewport:null!==(s=t.viewport)&&void 0!==s?s:t.width&&t.height?{width:t.width,height:t.height}:ve.SVGA,resolution:t.resolution,displayMode:h,pixelRatio:t.suppressHiDPIScaling?1:null!==(r=t.pixelRatio)&&void 0!==r?r:null}),Ht.filtering=t.antialiasing?Ot.Blended:Ot.Pixel,t.backgroundColor&&(this.backgroundColor=t.backgroundColor.clone()),this.maxFps=null!==(n=t.maxFps)&&void 0!==n?n:this.maxFps,this.fixedUpdateFps=null!==(o=t.fixedUpdateFps)&&void 0!==o?o:this.fixedUpdateFps,this.clock=new Wr({maxFps:this.maxFps,tick:this._mainloop.bind(this),onFatalException:t=>this.onFatalException(t)}),this.enableCanvasTransparency=t.enableCanvasTransparency,this._loader=new He,this._loader.wireEngine(this),this.debug=new Lr(this),this._initialize(t),this.rootScene=this.currentScene=new Qr,this.addScene("root",this.rootScene),window.___EXCALIBUR_DEVTOOL=this}_monitorPerformanceThresholdAndTriggerFallback(){const{allow:t}=this._originalOptions.configurePerformanceCanvas2DFallback;let{threshold:e,showPlayerMessage:i}=this._originalOptions.configurePerformanceCanvas2DFallback;if(void 0===e&&(e=sn._DEFAULT_ENGINE_OPTIONS.configurePerformanceCanvas2DFallback.threshold),void 0===i&&(i=sn._DEFAULT_ENGINE_OPTIONS.configurePerformanceCanvas2DFallback.showPlayerMessage),!g.isEnabled("use-canvas-context")&&t&&this.ready&&!this._performanceThresholdTriggered){this._fpsSamples.length===e.numberOfFrames&&this._fpsSamples.splice(0,1),this._fpsSamples.push(this.clock.fpsSampler.fps);let t=0;for(let e=0;e Advanced > System, and ensure "Use Hardware Acceleration" is checked.\n * Visit chrome://flags/#ignore-gpu-blocklist and ensure "Override software rendering list" is "enabled"\nIf in Firefox, visit about:config\n * Ensure webgl.disabled = false\n * Ensure webgl.force-enabled = true\n * Ensure layers.acceleration.force-enabled = true\n\nRead more about this issue at https://excaliburjs.com/docs/performance'),i&&this._toaster.toast("Excalibur is encountering performance issues. It's possible that your browser doesn't have hardware acceleration enabled. Visit [LINK] for more information and potential solutions.","https://excaliburjs.com/docs/performance"),this.useCanvas2DFallback(),this.emit("fallbackgraphicscontext",this.graphicsContext))}}useCanvas2DFallback(){var t,e,i;const s=this.canvas.cloneNode(!1);this.canvas.parentNode.replaceChild(s,this.canvas),this.canvas=s;const r=this._originalOptions,n=this._originalDisplayMode;this.graphicsContext=new Ce({canvasElement:this.canvas,enableTransparency:this.enableCanvasTransparency,smoothing:r.antialiasing,backgroundColor:r.backgroundColor,snapToPixel:r.snapToPixel,useDrawSorting:r.useDrawSorting}),this.screen&&this.screen.dispose(),this.screen=new we({canvas:this.canvas,context:this.graphicsContext,antialiasing:null===(t=r.antialiasing)||void 0===t||t,browser:this.browser,viewport:null!==(e=r.viewport)&&void 0!==e?e:r.width&&r.height?{width:r.width,height:r.height}:ve.SVGA,resolution:r.resolution,displayMode:n,pixelRatio:r.suppressHiDPIScaling?1:null!==(i=r.pixelRatio)&&void 0!==i?i:null}),this.screen.setCurrentCamera(this.currentScene.camera),this.input.pointers.detach();const o=r&&r.pointerScope===c.Document?document:this.canvas;this.input.pointers=this.input.pointers.recreate(o,this),this.input.pointers.init()}getWorldBounds(){return this.screen.getWorldBounds()}get timescale(){return this._timescale}set timescale(t){t<=0?tt.getInstance().error("Cannot set engine.timescale to a value of 0 or less than 0."):this._timescale=t}addTimer(t){return this.currentScene.addTimer(t)}removeTimer(t){return this.currentScene.removeTimer(t)}addScene(t,e){this.scenes[t]&&this._logger.warn("Scene",t,"already exists overwriting"),this.scenes[t]=e}removeScene(t){if(t instanceof Qr)for(const e in this.scenes)this.scenes.hasOwnProperty(e)&&this.scenes[e]===t&&delete this.scenes[e];"string"==typeof t&&delete this.scenes[t]}add(t){2!==arguments.length?this._deferredGoTo&&this.scenes[this._deferredGoTo]?this.scenes[this._deferredGoTo].add(t):this.currentScene.add(t):this.addScene(arguments[0],arguments[1])}remove(t){t instanceof Ni&&this.currentScene.remove(t),t instanceof Qr&&this.removeScene(t),"string"==typeof t&&this.removeScene(t)}goToScene(t,e){if(this.isInitialized)if(this.scenes[t]){const i=this.currentScene,s=this.scenes[t];if(this._logger.debug("Going to scene:",t),this.currentScene.isInitialized){const t={engine:this,previousScene:i,nextScene:s};this.currentScene._deactivate.apply(this.currentScene,[t,s]),this.currentScene.events.emit("deactivate",new Y(t,this.currentScene))}this.currentScene=s,this.screen.setCurrentCamera(s.camera),this.currentScene._initialize(this);const r={engine:this,previousScene:i,nextScene:s,data:e};this.currentScene._activate.apply(this.currentScene,[r,s]),this.currentScene.events.emit("activate",new j(r,this.currentScene))}else this._logger.error("Scene",t,"does not exist!");else this._deferredGoTo=t}screenToWorldCoordinates(t){return this.screen.screenToWorldCoordinates(t)}worldToScreenCoordinates(t){return this.screen.worldToScreenCoordinates(t)}_initialize(t){var e,i,s,r;this.pageScrollPreventionMode=t.scrollPreventionMode;const n=t&&t.pointerScope===c.Document?document:this.canvas;this.input={keyboard:new nt,pointers:new jr(n,this),gamepads:new Z},this.input.keyboard.init({grabWindowFocus:null===(i=null===(e=this._originalOptions)||void 0===e?void 0:e.grabWindowFocus)||void 0===i||i}),this.input.pointers.init({grabWindowFocus:null===(r=null===(s=this._originalOptions)||void 0===s?void 0:s.grabWindowFocus)||void 0===r||r}),this.input.gamepads.init(),this.inputMapper=new $r(this.input),this.browser.document.on("visibilitychange",(()=>{"hidden"===document.visibilityState?(this.events.emit("hidden",new M(this)),this._logger.debug("Window hidden")):"visible"===document.visibilityState&&(this.events.emit("visible",new R(this)),this._logger.debug("Window visible"))})),this.canvasElementId||t.canvasElement||document.body.appendChild(this.canvas)}onInitialize(t){}setAntialiasing(t){this.screen.antialiasing=t}getAntialiasing(){return this.screen.antialiasing}get isInitialized(){return this._isInitialized}_overrideInitialize(t){if(!this.isInitialized)if(this.onInitialize(t),this.events.emit("initialize",new V(t,this)),this._isInitialized=!0,this._deferredGoTo){const t=this._deferredGoTo;this._deferredGoTo=null,this.goToScene(t)}else this.goToScene("root")}_update(t){if(!this.ready)return this._loader.update(this,t),this.input.keyboard.update(),this.input.gamepads.update(),void this.inputMapper.execute();this._preupdate(t),this.currentScene.update(this,t),this.graphicsContext.updatePostProcessors(t),this._postupdate(t),this.input.keyboard.update(),this.input.gamepads.update(),this.inputMapper.execute()}_preupdate(t){this.emit("preupdate",new b(this,t,this)),this.onPreUpdate(this,t)}onPreUpdate(t,e){}_postupdate(t){this.emit("postupdate",new Q(this,t,this)),this.onPostUpdate(this,t)}onPostUpdate(t,e){}_draw(t){if(this.graphicsContext.beginDrawLifecycle(),this.graphicsContext.clear(),this._predraw(this.graphicsContext,t),!this._isReady)return this._loader.canvas.draw(this.graphicsContext,0,0),void this.graphicsContext.flush();this.graphicsContext.backgroundColor=this.backgroundColor,this.currentScene.draw(this.graphicsContext,t),this._postdraw(this.graphicsContext,t),this.graphicsContext.flush(),this.graphicsContext.endDrawLifecycle(),this._checkForScreenShots()}_predraw(t,e){this.emit("predraw",new I(t,e,this)),this.onPreDraw(t,e)}onPreDraw(t,e){}_postdraw(t,e){this.emit("postdraw",new x(t,e,this)),this.onPostDraw(t,e)}onPostDraw(t,e){}showDebug(t){this._isDebug=t}toggleDebug(){return this._isDebug=!this._isDebug,this._isDebug}get loadingComplete(){return this._loadingComplete}get ready(){return this._isReady}isReady(){return this._isReadyPromise}async start(t){if(!this._compatible)throw new Error("Excalibur is incompatible with your browser");return t&&(this.screen.pushResolutionAndViewport(),this.screen.resolution=this.screen.viewport,this.screen.applyResolutionAndViewport(),this._loader=t,this._loader.suppressPlayButton=this._suppressPlayButton||this._loader.suppressPlayButton,this._loader.wireEngine(this)),this._logger.debug("Starting game clock..."),this.browser.resume(),this.clock.start(),this._logger.debug("Game clock started"),t&&(await this.load(this._loader),this._loadingComplete=!0,this.screen.popResolutionAndViewport(),this.screen.applyResolutionAndViewport()),this._loadingComplete=!0,this._overrideInitialize(this),this._isReady=!0,this._isReadyResolve(),this.emit("start",new v(this)),this._isReadyPromise}_mainloop(t){this.emit("preframe",new S(this,this.stats.prevFrame));const e=t*this.timescale;this.currentFrameElapsedMs=e;const i=this.stats.prevFrame.id+1;this.stats.currFrame.reset(),this.stats.currFrame.id=i,this.stats.currFrame.delta=e,this.stats.currFrame.fps=this.clock.fpsSampler.fps,ie.clear();const s=this.clock.now(),r=1e3/this.fixedUpdateFps;if(this.fixedUpdateFps)for(this._lagMs+=e;this._lagMs>=r;)this._update(r),this._lagMs-=r;else this._update(e);const n=this.clock.now();this.currentFrameLagMs=this._lagMs,this._draw(e);const o=this.clock.now();this.stats.currFrame.duration.update=n-s,this.stats.currFrame.duration.draw=o-n,this.stats.currFrame.graphics.drawnImages=ie.DrawnImagesCount,this.stats.currFrame.graphics.drawCalls=ie.DrawCallCount,this.emit("postframe",new D(this,this.stats.currFrame)),this.stats.prevFrame.reset(this.stats.currFrame),this._monitorPerformanceThresholdAndTriggerFallback()}stop(){this.clock.isRunning()&&(this.emit("stop",new w(this)),this.browser.pause(),this.clock.stop(),this._logger.debug("Game stopped"))}isRunning(){return this.clock.isRunning()}screenshot(t=!1){return new Promise((e=>{this._screenShotRequests.push({preserveHiDPIResolution:t,resolve:e})}))}_checkForScreenShots(){for(const t of this._screenShotRequests){const e=t.preserveHiDPIResolution?this.canvas.width:this.screen.resolution.width,i=t.preserveHiDPIResolution?this.canvas.height:this.screen.resolution.height,s=document.createElement("canvas");s.width=e,s.height=i;const r=s.getContext("2d");r.imageSmoothingEnabled=this.screen.antialiasing,r.drawImage(this.canvas,0,0,e,i);const n=new Image,o=s.toDataURL("image/png");n.src=o,t.resolve(n)}this._screenShotRequests.length=0}async load(t){try{await t.load()}catch(t){this._logger.error("Error loading resources, things may not behave properly",t),await Promise.resolve()}}}sn._DEFAULT_ENGINE_OPTIONS={width:0,height:0,enableCanvasTransparency:!0,useDrawSorting:!0,configurePerformanceCanvas2DFallback:{allow:!0,showPlayerMessage:!1,threshold:{fps:20,numberOfFrames:100}},canvasElementId:"",canvasElement:void 0,snapToPixel:!1,pointerScope:c.Canvas,suppressConsoleBootMessage:null,suppressMinimumBrowserFeatureDetection:null,suppressHiDPIScaling:null,suppressPlayButton:null,grabWindowFocus:!0,scrollPreventionMode:en.Canvas,backgroundColor:yt.fromHex("#2185d0")};class rn{constructor(){this._handlers={},this._wiredEventDispatchers=[],this._deferedHandlerRemovals=[]}clear(){this._handlers={},this._wiredEventDispatchers=[]}_processDeferredHandlerRemovals(){for(const t of this._deferedHandlerRemovals)this._removeHandler(t.name,t.handler);this._deferedHandlerRemovals.length=0}emit(t,e){if(this._processDeferredHandlerRemovals(),!t)return;let i,s;if(t=t.toLowerCase(),null==e&&(e=new f),this._handlers[t])for(i=0,s=this._handlers[t].length;i-1&&this._handlers[t].splice(s,1)}else this._handlers[t].length=0}once(t,e){this._processDeferredHandlerRemovals();const i=s=>{const r=s||new f;this.off(t,i),e(r)};this.on(t,i)}wire(t){t._wiredEventDispatchers.push(this)}unwire(t){const e=t._wiredEventDispatchers.indexOf(this);e>-1&&t._wiredEventDispatchers.splice(e,1)}}class nn extends Is{get font(){return this._font}set font(t){this._font=t,this._text.font=t}get text(){return this._text.text}set text(t){this._text.text=t}get color(){return this._text.color}set color(t){this._text&&(this._text.color=t)}get opacity(){return this._text.opacity}set opacity(t){this._text.opacity=t}get spriteFont(){return this._spriteFont}set spriteFont(t){t&&(this._spriteFont=t,this._text.font=this._spriteFont)}constructor(t){super(t),this._font=new vs,this._text=new ws({text:"",font:this._font});const{text:e,pos:i,x:s,y:r,spriteFont:n,font:o,color:a}=t;this.pos=null!=i?i:s&&r?Ct(s,r):this.pos,this.text=null!=e?e:this.text,this.font=null!=o?o:this.font,this.spriteFont=null!=n?n:this.spriteFont,this._text.color=null!=a?a:this.color;const h=this.get(Oi);h.anchor=mt.Zero,h.use(this._text)}_initialize(t){super._initialize(t)}getTextWidth(){return this._text.width}}class on extends Ni{getGraphics(){return this._graphics}addGraphic(t){this._graphics.push(t),this._gfx.visible=!0,this._gfx.localBounds=this._recalculateBounds()}_recalculateBounds(){let t=this._tileBounds.clone();for(const e of this._graphics){const i=Ct(this.map.graphicsOffset.x-this.map.tileWidth/2,this.map.graphicsOffset.y-(this.map.renderFromTopOfGraphic?0:e.height-this.map.tileHeight));t=t.combine(e.localBounds.translate(i))}return t}removeGraphic(t){const e=this._graphics.indexOf(t);e>-1&&this._graphics.splice(e,1),this._gfx.localBounds=this._recalculateBounds()}clearGraphics(){this._graphics.length=0,this._gfx.visible=!1,this._gfx.localBounds=this._recalculateBounds()}getColliders(){return this._colliders}addCollider(t){this._colliders.push(t),this.map.flagCollidersDirty()}removeCollider(t){const e=this._colliders.indexOf(t);e>-1&&this._colliders.splice(e,1),this.map.flagCollidersDirty()}clearColliders(){this._colliders.length=0,this.map.flagCollidersDirty()}get pos(){return this.map.tileToWorld(Ct(this.x,this.y))}get center(){return this.pos.add(Ct(0,this.map.tileHeight/2))}constructor(t,e,i,s){super([new li,new Oi({offset:null!=i?i:mt.Zero,onPostDraw:(t,e)=>this.draw(t,e)}),new Ir(s)]),this.solid=!1,this._tileBounds=new xt,this._graphics=[],this._colliders=[],this.x=t,this.y=e,this.map=s,this._transform=this.get(li),this._isometricEntityComponent=this.get(Ir);const r=this.map.tileWidth/2,n=this.map.tileHeight/2,o=(this.x-this.y)*r,a=(this.x+this.y)*n;this._transform.pos=Ct(o,a),this._isometricEntityComponent.elevation=0,this._gfx=this.get(Oi),this._gfx.visible=!1;const h=this.map.tileWidth,l=this.map.tileHeight,A=Ct(0,this.map.renderFromTopOfGraphic?l:0);this._gfx.localBounds=this._tileBounds=new xt({left:-h/2,top:-l,right:h/2,bottom:l}).translate(A)}draw(t,e){const i=this.map.tileWidth/2;t.save(),t.translate(-i,0);for(const e of this._graphics)e.draw(t,this.map.graphicsOffset.x,this.map.graphicsOffset.y-(this.map.renderFromTopOfGraphic?0:e.height-this.map.tileHeight));t.restore()}}class an extends Ni{constructor(t){super([new li,new Fi({type:je.Fixed}),new Di,new Qs((t=>this.debug(t)),!1)],t.name),this.renderFromTopOfGraphic=!1,this.graphicsOffset=Ct(0,0),this._collidersDirty=!1,this._originalOffsets=new WeakMap;const{pos:e,tileWidth:i,tileHeight:s,columns:r,rows:n,renderFromTopOfGraphic:o,graphicsOffset:a}=t;this.transform=this.get(li),e&&(this.transform.pos=e),this.collider=this.get(Di),this.collider&&this.collider.set(this._composite=new Ci([])),this.renderFromTopOfGraphic=null!=o?o:this.renderFromTopOfGraphic,this.graphicsOffset=null!=a?a:this.graphicsOffset,this.tileWidth=i,this.tileHeight=s,this.columns=r,this.rows=n,this.tiles=new Array(r*n);for(let t=0;t=this.columns||e>=this.rows?null:this.tiles[t+e*this.columns]}getTileByPoint(t){const e=this.worldToTile(t);return this.getTile(e.x,e.y)}_getMaxZIndex(){let t=Number.NEGATIVE_INFINITY;for(const e of this.tiles){const i=e.get(li).z;i>t&&(t=i)}return t}debug(t){t.save(),t.z=this._getMaxZIndex()+.5;for(let e=0;ee.isComplete(t)))}reset(){this._actions.forEach((t=>t.reset()))}stop(){this._actions.forEach((t=>t.stop()))}}class An{static create(t,e){if(this._CURRENT_GROUP>this._MAX_GROUPS)throw new Error(`Cannot have more than ${this._MAX_GROUPS} collision groups`);if(this._GROUPS.get(t))throw new Error(`Collision group ${t} already exists`);const i=new ci(t,this._CURRENT_BIT,void 0!==e?e:~this._CURRENT_BIT);return this._CURRENT_BIT=this._CURRENT_BIT<<1|0,this._CURRENT_GROUP++,this._GROUPS.set(t,i),i}static get groups(){return Array.from(this._GROUPS.values())}static groupByName(t){return this._GROUPS.get(t)}static reset(){this._GROUPS=new Map,this._CURRENT_BIT=this._STARTING_BIT,this._CURRENT_GROUP=1}}function cn(t){return!!t._initialize}function dn(t){return!!t.onInitialize}function un(t){return!!t._preupdate}function gn(t){return!!t.onPreUpdate}function pn(t){return!!t.onPostUpdate}function _n(t){return!!t.onPostUpdate}function fn(t){return!!t.onPreDraw}function mn(t){return!!t.onPostDraw}An._STARTING_BIT=1,An._MAX_GROUPS=32,An._CURRENT_GROUP=1,An._CURRENT_BIT=An._STARTING_BIT,An._GROUPS=new Map;class Cn{constructor(t,e=yt.Magenta,i=!1){this.path=t,this.color=e,this._stream=null,this._gif=null,this._textures=[],this._animation=null,this._transparentColor=null,this._resource=new Lt(t,"arraybuffer",i),this._transparentColor=e}get bustCache(){return this._resource.bustCache}set bustCache(t){this._resource.bustCache=t}async load(){const t=await this._resource.load();this._stream=new wn(t),this._gif=new In(this._stream,this._transparentColor);const e=this._gif.images.map((t=>new qt(t.src,!1)));return await Promise.all(e.map((t=>t.load()))),this.data=this._textures=e}isLoaded(){return!!this.data}toSprite(t=0){return this._textures[t].toSprite()}toSpriteSheet(){const t=this._textures.map((t=>t.toSprite()));return new Vt({sprites:t})}toAnimation(t){const e=this.toSpriteSheet(),i=e.sprites.length;return this._animation=cr.fromSpriteSheet(e,pt(0,i),t),this._animation}get readCheckBytes(){return this._gif.checkBytes}}const yn=t=>t.reduce((function(t,e){return 2*t+e}),0),vn=t=>{const e=[];for(let i=7;i>=0;i--)e.push(!!(t&1<{if(this.position>=this.data.byteLength)throw new Error("Attempted to read past end of stream.");return this.data[this.position++]},this.readBytes=t=>{const e=[];for(let i=0;i{let e="";for(let i=0;i{const t=this.readBytes(2);return(t[1]<<8)+t[0]},this.data=new Uint8Array(t),this.len=this.data.byteLength,0===this.len)throw new Error("No data loaded from file")}}class In{constructor(t,e=yt.Magenta){this._st=null,this._handler={},this._transparentColor=null,this.frames=[],this.images=[],this.globalColorTable=[],this.checkBytes=[],this.parseColorTable=t=>{const e=[];for(let i=0;i{const e=t.toString(16);return 1===e.length?"0"+e:e})).join("");e.push(t)}return e},this.readSubBlocks=()=>{let t,e;e="";do{t=this._st.readByte(),e+=this._st.read(t)}while(0!==t);return e},this.parseHeader=()=>{const t={sig:null,ver:null,width:null,height:null,colorRes:null,globalColorTableSize:null,gctFlag:null,sorted:null,globalColorTable:[],bgColor:null,pixelAspectRatio:null};if(t.sig=this._st.read(3),t.ver=this._st.read(3),"GIF"!==t.sig)throw new Error("Not a GIF file.");t.width=this._st.readUnsigned(),t.height=this._st.readUnsigned();const e=vn(this._st.readByte());t.gctFlag=e.shift(),t.colorRes=yn(e.splice(0,3)),t.sorted=e.shift(),t.globalColorTableSize=yn(e.splice(0,3)),t.bgColor=this._st.readByte(),t.pixelAspectRatio=this._st.readByte(),t.gctFlag&&(t.globalColorTable=this.parseColorTable(1<{const e=t=>{this.checkBytes.push(this._st.readByte());const e=vn(this._st.readByte());t.reserved=e.splice(0,3),t.disposalMethod=yn(e.splice(0,3)),t.userInput=e.shift(),t.transparencyGiven=e.shift(),t.delayTime=this._st.readUnsigned(),t.transparencyIndex=this._st.readByte(),t.terminator=this._st.readByte(),this._handler.gce&&this._handler.gce(t)&&this.checkBytes.push(this._handler.gce)},i=t=>{t.comment=this.readSubBlocks(),this._handler.com&&this._handler.com(t)&&this.checkBytes.push(this._handler.com)},s=t=>{this.checkBytes.push(this._st.readByte()),t.ptHeader=this._st.readBytes(12),t.ptData=this.readSubBlocks(),this._handler.pte&&this._handler.pte(t)&&this.checkBytes.push(this._handler.pte)},r=t=>{this.checkBytes.push(this._st.readByte()),t.identifier=this._st.read(8),t.authCode=this._st.read(3),"NETSCAPE"===t.identifier?(t=>{this.checkBytes.push(this._st.readByte()),t.unknown=this._st.readByte(),t.iterations=this._st.readUnsigned(),t.terminator=this._st.readByte(),this._handler.app&&this._handler.app.NETSCAPE&&this._handler.app.NETSCAPE(t)&&this.checkBytes.push(this._handler.app)})(t):(t=>{t.appData=this.readSubBlocks(),this._handler.app&&this._handler.app[t.identifier]&&this._handler.app[t.identifier](t)&&this.checkBytes.push(this._handler.app[t.identifier])})(t)},n=t=>{t.data=this.readSubBlocks(),this._handler.unknown&&this._handler.unknown(t)&&this.checkBytes.push(this._handler.unknown)};switch(t.label=this._st.readByte(),t.label){case 249:t.extType="gce",e(t);break;case 254:t.extType="com",i(t);break;case 1:t.extType="pte",s(t);break;case 255:t.extType="app",r(t);break;default:t.extType="unknown",n(t)}},this.parseImg=t=>{t.leftPos=this._st.readUnsigned(),t.topPos=this._st.readUnsigned(),t.width=this._st.readUnsigned(),t.height=this._st.readUnsigned();const e=vn(this._st.readByte());t.lctFlag=e.shift(),t.interlaced=e.shift(),t.sorted=e.shift(),t.reserved=e.splice(0,2),t.lctSize=yn(e.splice(0,3)),t.lctFlag&&(t.lct=this.parseColorTable(1<>3)&1<<(7&i)&&(s|=1<{const i=new Array(t.length),s=t.length/e,r=(s,r)=>{const n=t.slice(r*e,(r+1)*e);i.splice.apply(i,[s*e,e].concat(n))},n=[0,4,2,1],o=[8,8,4,2];let a=0;for(let t=0;t<4;t++)for(let e=n[t];e{const t={sentinel:this._st.readByte(),type:""};switch(String.fromCharCode(t.sentinel)){case"!":t.type="ext",this.parseExt(t);break;case",":t.type="img",this.parseImg(t);break;case";":t.type="eof",this._handler.eof&&this._handler.eof(t)&&this.checkBytes.push(this._handler.eof);break;default:throw new Error("Unknown block: 0x"+t.sentinel.toString(16))}"eof"!==t.type&&this.parseBlock()},this.arrayToImage=t=>{let e=0;const i=document.createElement("canvas");i.id=e.toString(),i.width=t.width,i.height=t.height,e++;const s=i.getContext("2d");let r=0,n=0;for(let e=0;eMath.max(e.x,t)),0)-e.x,this.height=this._points.reduce(((t,e)=>Math.max(e.y,t)),0)-e.y,this.flagDirty()}get minPoint(){return Ct(this._points.reduce(((t,e)=>Math.min(e.x,t)),1/0),this._points.reduce(((t,e)=>Math.min(e.y,t)),1/0))}constructor(t){super(t),this.points=t.points,this.filtering=Ot.Blended,this.rasterize()}clone(){return new En({points:this.points.map((t=>t.clone())),...this.cloneGraphicOptions(),...this.cloneRasterOptions()})}execute(t){if(this.points&&this.points.length){t.beginPath();const e=this.minPoint.negate(),i=this.points[0].add(e);t.moveTo(i.x,i.y),this.points.forEach((i=>{t.lineTo(i.x+e.x,i.y+e.y)})),t.lineTo(i.x,i.y),t.closePath(),this.color&&t.fill(),this.strokeColor&&t.stroke()}}}class Bn{constructor(){this._queue=[]}get length(){return this._queue.length}enqueue(){const t=new Et;return this._queue.push(t),t.promise}dequeue(t){this._queue.shift().resolve(t)}}class bn{constructor(t){this._count=t,this._waitQueue=new Bn}get count(){return this._count}get waiting(){return this._waitQueue.length}async enter(){return 0!==this._count?(this._count--,Promise.resolve()):this._waitQueue.enqueue()}exit(t=1){if(0!==t){for(;0!==t&&0!==this._waitQueue.length;)this._waitQueue.dequeue(null),t--;this._count+=t}}}const Qn="0.28.0";u()})();var a=o.fWn,h=o.Ia8,l=o.rqv,A=o.hLI,c=o.yyv,d=o.tX5,u=o.vtX,g=o.r7K,p=o.lCh,_=o.cE4,f=o.fwF,m=o.sce,C=o.AQ6,y=o._c7,v=o.KUs,w=o.Ajp,I=o.dkO,x=o.RDh,E=o._H9,B=o.mxs,b=o.OmD,Q=o.kBf,S=o.C4F,D=o.NQt,T=o.JjN,F=o.EK_,k=o.V1s,P=o.xHm,R=o.Xz7,M=o.Cdc,L=o.FKn,N=o.SUY,G=o.ab2,U=o.GfZ,z=o.YMS,O=o.oyv,H=o.aUb,q=o.SdD,V=o.JUv,j=o.jEj,Y=o.TFq,K=o.HDU,W=o.R_y,J=o.ydN,X=o.t50,Z=o.s$$,$=o.v2G,tt=o.Ilk,et=o.s9i,it=o.dxL,st=o.LLX,rt=o.wA2,nt=o.R_p,ot=o.IQ$,at=o.I5F,ht=o.X8$,lt=o.FR6,At=o.U8o,ct=o.kbG,dt=o.iS_,ut=o.cGG,gt=o.RPN,pt=o.skb,_t=o.SLU,ft=o.RdJ,mt=o.cNu,Ct=o.gU7,yt=o.LSk,vt=o.Nmp,wt=o.d1Y,It=o.xrL,xt=o.sRW,Et=o.cmV,Bt=o.qWz,bt=o.N0Q,Qt=o.q8b,St=o.ynB,Dt=o.jT9,Tt=o.wAz,Ft=o.D4V,kt=o.NLr,Pt=o.N6H,Rt=o.W1A,Mt=o.JHW,Lt=o.ZZ$,Nt=o.v2K,Gt=o.pBf,Ut=o.vpe,zt=o.GMl,Ot=o.zW2,Ht=o.B0K,qt=o.Nv7,Vt=o.C_p,jt=o.MUA,Yt=o.xqU,Kt=o.pTp,Wt=o.vUK,Jt=o.j9l,Xt=o.Zxw,Zt=o.v51,$t=o.Hdx,te=o.Z$d,ee=o.iqV,ie=o.o$7,se=o.olM,re=o.Zm$,ne=o.$QH,oe=o.i78,ae=o.nJg,he=o.h6u,le=o.hts,Ae=o.j88,ce=o.VME,de=o.fy2,ue=o.nt,ge=o.Ukr,pe=o.zsu,_e=o.oA6,fe=o.TVh,me=o.TwZ,Ce=o.GTT,ye=o.xxj,ve=o.XdK,we=o.Jmb,Ie=o.cXo,xe=o.Dm5,Ee=o.IIB,Be=o.ebW,be=o.zI0,Qe=o.LYD,Se=o.cEG,De=o.SEl,Te=o.t9V,Fe=o.ez5,ke=o.N1d,Pe=o.R8U,Re=o.SKZ,Me=o.__J,Le=o.RI$,Ne=o.x12,Ge=o.ccz,Ue=o.aNw,ze=o.XrL,Oe=o.xwn,He=o.dNK,qe=o.ini,Ve=o.YdH,je=o.F5T,Ye=o.y3G,Ke=o.l57,We=o.xn0,Je=o.t2V,Xe=o.uxB,Ze=o.cpd,$e=o.fiy,ti=o.$XZ,ei=o.UG6,ii=o.uqK,si=o.STE,ri=o.y$z,ni=o.mAD,oi=o.sOq,ai=o.hUw,hi=o._0G,li=o.Sqs,Ai=o.hpZ,ci=o.Vol,di=o.vYX,ui=o.wIZ,gi=o.cBi,pi=o.c30,_i=o.MPV,fi=o.RFv,mi=o.Ux6,Ci=o.rxy,yi=o.I$c,vi=o.kfC,wi=o.VjY,Ii=o.mgq,xi=o.YVA,Ei=o.Kgp,Bi=o.HH$,bi=o.M_d,Qi=o.rgh,Si=o.Ra6,Di=o.KhR,Ti=o.BS5,Fi=o.xhz,ki=o.xOq,Pi=o.a9j,Ri=o.bHk,Mi=o.CgK,Li=o.cuY,Ni=o.kvE,Gi=o.SBu,Ui=o.AE_,zi=o.ctO,Oi=o.OLH,Hi=o.kky,qi=o.nSF,Vi=o.zHn,ji=o.zwx,Yi=o.AeJ,Ki=o.hLz,Wi=o.D9g,Ji=o.wA,Xi=o.jhr,Zi=o.GVs,$i=o._zO,ts=o.LXZ,es=o.w6$,is=o.mhV,ss=o.MOD,rs=o.kwd,ns=o.Lmr,os=o.xsS,as=o.K5l,hs=o.lLr,ls=o.Z$r,As=o.IXb,cs=o.SGH,ds=o.SMj,us=o.L34,gs=o.exe,ps=o.bnF,_s=o.MFA,fs=o.$uU,ms=o.Sap,Cs=o.jyi,ys=o.E03,vs=o.V6q,ws=o.rg2,Is=o.DVW,xs=o.nVo,Es=o.F6N,Bs=o.xP7,bs=o.Odq,Qs=o.Zif,Ss=o.ZGJ,Ds=o.MJk,Ts=o.xvT,Fs=o.PHM,ks=o.dpR,Ps=o.n9L,Rs=o.KwO,Ms=o.SxM,Ls=o.B7y,Ns=o.x7r,Gs=o.wx7,Us=o.Uvn,zs=o.OFT,Os=o.xzN,Hs=o.CcZ,qs=o.M5Z,Vs=o.ZrN,js=o.OWs,Ys=o.dF9,Ks=o.oZy,Ws=o.rD2,Js=o.VHo,Xs=o.ohE,Zs=o.R$E,$s=o.xQN,tr=o.AdJ,er=o.q3I,ir=o.Pab,sr=o.uZ5,rr=o.McK,nr=o.F9c,or=o.k0b,ar=o.hnT,hr=o.RSJ,lr=o.Mku,Ar=o.h90,cr=o.rms,dr=o.ErP,ur=o.aVg,gr=o.lPc,pr=o.Z8E,_r=o._N2,fr=o.yFn,mr=o.lNv,Cr=o.cu9,yr=o.MZQ,vr=o.FUM,wr=o.BxR,Ir=o.vdf,xr=o.iaL,Er=o.w6H,Br=o.Q4c,br=o.Xxe,Qr=o.Uxb,Sr=o.Yr5,Dr=o.Bhw,Tr=o.yOA},913:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Config=void 0,e.Config={PlayerSpeed:32,PlayerFrameSpeed:200}},519:function(t,e,i){"use strict";var s=this&&this.__createBinding||(Object.create?function(t,e,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(e,i);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[i]}}),Object.defineProperty(t,s,r)}:function(t,e,i,s){void 0===s&&(s=i),t[s]=e[i]}),r=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),n=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)"default"!==i&&Object.prototype.hasOwnProperty.call(t,i)&&s(e,t,i);return r(e,t),e};Object.defineProperty(e,"__esModule",{value:!0});const o=n(i(882)),a=i(512),h=i(251),l=new o.Engine({width:800,height:600,canvasElementId:"game",antialiasing:!1});l.start(a.loader).then((()=>{var t,e;const i=a.Resources.TiledMap.data.getObjectLayerByName("Objects"),s=i.getObjectByName("Camera");s&&(l.currentScene.camera.pos=o.vec(s.x,s.y),l.currentScene.camera.zoom=null!==(e=null===(t=s.getProperty("zoom"))||void 0===t?void 0:t.value)&&void 0!==e?e:1);const r=i.getObjectByName("Player");if(r){const t=new h.Player(o.vec(r.x,r.y));l.currentScene.add(t),t.z=100}a.Resources.TiledMap.addTiledMapToScene(l.currentScene)}))},251:function(t,e,i){"use strict";var s=this&&this.__createBinding||(Object.create?function(t,e,i,s){void 0===s&&(s=i);var r=Object.getOwnPropertyDescriptor(e,i);r&&!("get"in r?!e.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return e[i]}}),Object.defineProperty(t,s,r)}:function(t,e,i,s){void 0===s&&(s=i),t[s]=e[i]}),r=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),n=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)"default"!==i&&Object.prototype.hasOwnProperty.call(t,i)&&s(e,t,i);return r(e,t),e};Object.defineProperty(e,"__esModule",{value:!0}),e.Player=void 0;const o=n(i(882)),a=i(512),h=i(913);class l extends o.Actor{constructor(t){super({pos:t,width:16,height:16,collisionType:o.CollisionType.Active})}onInitialize(t){const e=o.SpriteSheet.fromImageSource({image:a.Resources.HeroSpriteSheetPng,grid:{spriteWidth:16,spriteHeight:16,rows:8,columns:8}}),i=new o.Animation({frames:[{graphic:e.getSprite(0,1),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(1,1),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(2,1),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(3,1),duration:h.Config.PlayerFrameSpeed}]});this.graphics.add("left-idle",i);const s=new o.Animation({frames:[{graphic:e.getSprite(0,2),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(1,2),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(2,2),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(3,2),duration:h.Config.PlayerFrameSpeed}]});this.graphics.add("right-idle",s);const r=new o.Animation({frames:[{graphic:e.getSprite(0,3),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(1,3),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(2,3),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(3,3),duration:h.Config.PlayerFrameSpeed}]});this.graphics.add("up-idle",r);const n=new o.Animation({frames:[{graphic:e.getSprite(0,0),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(1,0),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(2,0),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(3,0),duration:h.Config.PlayerFrameSpeed}]});this.graphics.add("down-idle",n);const l=new o.Animation({frames:[{graphic:e.getSprite(0,5),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(1,5),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(2,5),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(3,5),duration:h.Config.PlayerFrameSpeed}]});this.graphics.add("left-walk",l);const A=new o.Animation({frames:[{graphic:e.getSprite(0,6),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(1,6),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(2,6),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(3,6),duration:h.Config.PlayerFrameSpeed}]});this.graphics.add("right-walk",A);const c=new o.Animation({frames:[{graphic:e.getSprite(0,7),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(1,7),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(2,7),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(3,7),duration:h.Config.PlayerFrameSpeed}]});this.graphics.add("up-walk",c);const d=new o.Animation({frames:[{graphic:e.getSprite(0,4),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(1,4),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(2,4),duration:h.Config.PlayerFrameSpeed},{graphic:e.getSprite(3,4),duration:h.Config.PlayerFrameSpeed}]});this.graphics.add("down-walk",d)}onPreUpdate(t,e){this.vel=o.Vector.Zero,this.graphics.use("down-idle"),t.input.keyboard.isHeld(o.Input.Keys.ArrowRight)&&(this.vel=o.vec(h.Config.PlayerSpeed,0),this.graphics.use("right-walk")),t.input.keyboard.isHeld(o.Input.Keys.ArrowLeft)&&(this.vel=o.vec(-h.Config.PlayerSpeed,0),this.graphics.use("left-walk")),t.input.keyboard.isHeld(o.Input.Keys.ArrowUp)&&(this.vel=o.vec(0,-h.Config.PlayerSpeed),this.graphics.use("up-walk")),t.input.keyboard.isHeld(o.Input.Keys.ArrowDown)&&(this.vel=o.vec(0,h.Config.PlayerSpeed),this.graphics.use("down-walk"))}}e.Player=l},512:(t,e,i)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.loader=e.Resources=void 0;const s=i(882),r=i(268);e.Resources={HeroSpriteSheetPng:new s.ImageSource("../img/Solaria Demo Pack Update 03/Solaria Demo Pack Update 03/16x16/Sprites/Hero 01.png",!1,s.ImageFiltering.Pixel),TiledMap:new r.TiledMapResource("../res/first-level.tmx")},e.loader=new s.Loader;for(let t of Object.values(e.Resources))e.loader.addResource(t)}},e={};function i(s){var r=e[s];if(void 0!==r)return r.exports;var n=e[s]={exports:{}};return t[s].call(n.exports,n,n.exports,i),n.exports}i.d=(t,e)=>{for(var s in e)i.o(e,s)&&!i.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:e[s]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i(519)})(); //# sourceMappingURL=main.js.map \ No newline at end of file diff --git a/main.js.LICENSE.txt b/main.js.LICENSE.txt index 93138c7..afd3078 100644 --- a/main.js.LICENSE.txt +++ b/main.js.LICENSE.txt @@ -1,7 +1,7 @@ /*! - * excalibur - 0.27.0 - 2022-7-8 + * excalibur - 0.28.0 - 2023-8-10 * https://github.com/excaliburjs/Excalibur - * Copyright (c) 2022 Excalibur.js + * Copyright (c) 2023 Excalibur.js * Licensed BSD-2-Clause * @preserve */ diff --git a/main.js.map b/main.js.map index 544a36c..9329ce5 100644 --- a/main.js.map +++ b/main.js.map @@ -1 +1 @@ -{"version":3,"file":"main.js","mappings":"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AAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,EACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,EACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,EACb,IAAO,IAAM,EACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,EACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,EACb,IAAO,IAAM,EACb,IAAO,IAAM,EACb,IAAO,IAAM,EACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,GAAM,IAAM,GACZ,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,EACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,EACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,EACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,EACb,IAAO,IAAM,EACb,IAAO,IAAM,EACb,IAAO,IAAM,EACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,EACb,IAAO,IAAM,GACb,IAAO,IAAM,EACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,EACb,IAAO,IAAM,GACb,IAAO,IAAM,EACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,EACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,GAAM,IAAM,GACZ,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,IAAM,GACb,IAAO,I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","sources":["webpack://sample-tiled-webpack/./node_modules/@excaliburjs/plugin-tiled/dist/excalibur-tiled.min.js","webpack://sample-tiled-webpack/./node_modules/excalibur/build/esm/excalibur.js","webpack://sample-tiled-webpack/./src/config.ts","webpack://sample-tiled-webpack/./src/main.ts","webpack://sample-tiled-webpack/./src/player.ts","webpack://sample-tiled-webpack/./src/resources.ts","webpack://sample-tiled-webpack/webpack/bootstrap","webpack://sample-tiled-webpack/webpack/runtime/define property getters","webpack://sample-tiled-webpack/webpack/runtime/hasOwnProperty shorthand","webpack://sample-tiled-webpack/webpack/runtime/make namespace object","webpack://sample-tiled-webpack/webpack/startup"],"sourcesContent":["/*! For license information please see excalibur-tiled.min.js.LICENSE.txt */\n!function(A,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t(require(\"excalibur\")):\"function\"==typeof define&&define.amd?define([\"excalibur\"],t):\"object\"==typeof exports?exports.ex=t(require(\"excalibur\")):(A.ex=A.ex||{},A.ex.Plugin=A.ex.Plugin||{},A.ex.Plugin.Tiled=t(A.ex))}(self,(A=>(()=>{var t={\"./node_modules/fast-xml-parser/src/json2xml.js\":(A,t,e)=>{\"use strict\";const i=e(\"./node_modules/fast-xml-parser/src/util.js\").buildOptions,a={attributeNamePrefix:\"@_\",attrNodeName:!1,textNodeName:\"#text\",ignoreAttributes:!0,cdataTagName:!1,cdataPositionChar:\"\\\\c\",format:!1,indentBy:\" \",supressEmptyNode:!1,tagValueProcessor:function(A){return A},attrValueProcessor:function(A){return A}},s=[\"attributeNamePrefix\",\"attrNodeName\",\"textNodeName\",\"ignoreAttributes\",\"cdataTagName\",\"cdataPositionChar\",\"format\",\"indentBy\",\"supressEmptyNode\",\"tagValueProcessor\",\"attrValueProcessor\",\"rootNodeName\"];function o(A){this.options=i(A,a,s),this.options.ignoreAttributes||this.options.attrNodeName?this.isAttribute=function(){return!1}:(this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=E),this.options.cdataTagName?this.isCDATA=d:this.isCDATA=function(){return!1},this.replaceCDATAstr=g,this.replaceCDATAarr=n,this.processTextOrObjNode=r,this.options.format?(this.indentate=Q,this.tagEndChar=\">\\n\",this.newLine=\"\\n\"):(this.indentate=function(){return\"\"},this.tagEndChar=\">\",this.newLine=\"\"),this.options.supressEmptyNode?(this.buildTextNode=C,this.buildObjNode=l):(this.buildTextNode=B,this.buildObjNode=I),this.buildTextValNode=B,this.buildObjectNode=I}function r(A,t,e){const i=this.j2x(A,e+1);return void 0!==A[this.options.textNodeName]&&1===Object.keys(A).length?this.buildTextNode(i.val,t,i.attrStr,e):this.buildObjNode(i.val,t,i.attrStr,e)}function g(A,t){return A=this.options.tagValueProcessor(\"\"+A),\"\"===this.options.cdataPositionChar||\"\"===A?A+\"\");return A+this.newLine}function I(A,t,e,i){return e&&-1===A.indexOf(\"<\")?this.indentate(i)+\"<\"+t+e+\">\"+A+\"\"+this.options.tagValueProcessor(A)+\"1&&(A={[this.options.rootNodeName]:A}),this.j2x(A,0).val},o.prototype.j2x=function(A,t){let e=\"\",i=\"\";for(let a in A)if(void 0===A[a]);else if(null===A[a])i+=this.indentate(t)+\"<\"+a+\"/\"+this.tagEndChar;else if(A[a]instanceof Date)i+=this.buildTextNode(A[a],a,\"\",t);else if(\"object\"!=typeof A[a]){const s=this.isAttribute(a);s?e+=\" \"+s+'=\"'+this.options.attrValueProcessor(\"\"+A[a])+'\"':this.isCDATA(a)?A[this.options.textNodeName]?i+=this.replaceCDATAstr(A[this.options.textNodeName],A[a]):i+=this.replaceCDATAstr(\"\",A[a]):a===this.options.textNodeName?A[this.options.cdataTagName]||(i+=this.options.tagValueProcessor(\"\"+A[a])):i+=this.buildTextNode(A[a],a,\"\",t)}else if(Array.isArray(A[a]))if(this.isCDATA(a))i+=this.indentate(t),A[this.options.textNodeName]?i+=this.replaceCDATAarr(A[this.options.textNodeName],A[a]):i+=this.replaceCDATAarr(\"\",A[a]);else{const e=A[a].length;for(let s=0;s{\"use strict\";const i=function(A){return String.fromCharCode(A)},a={nilChar:i(176),missingChar:i(201),nilPremitive:i(175),missingPremitive:i(200),emptyChar:i(178),emptyValue:i(177),boundryChar:i(179),objStart:i(198),arrStart:i(204),arrayEnd:i(185)},s=[a.nilChar,a.nilPremitive,a.missingChar,a.missingPremitive,a.boundryChar,a.emptyChar,a.emptyValue,a.arrayEnd,a.objStart,a.arrStart],o=function(A,t,e){if(\"string\"==typeof t)return A&&A[0]&&void 0!==A[0].val?r(A[0].val,t):r(A,t);{const s=void 0===(i=A)?a.missingChar:null===i?a.nilChar:!(i.child&&0===Object.keys(i.child).length&&(!i.attrsMap||0===Object.keys(i.attrsMap).length))||a.emptyChar;if(!0===s){let i=\"\";if(Array.isArray(t)){i+=a.arrStart;const s=t[0],n=A.length;if(\"string\"==typeof s)for(let t=0;t{\"use strict\";const i=e(\"./node_modules/fast-xml-parser/src/util.js\"),a=function(A,t,e){const s={};if(!t.alwaysCreateTextNode&&(!A.child||i.isEmptyObject(A.child))&&(!A.attrsMap||i.isEmptyObject(A.attrsMap)))return i.isExist(A.val)?A.val:\"\";if(i.isExist(A.val)&&(\"string\"!=typeof A.val||\"\"!==A.val&&A.val!==t.cdataPositionChar)){const a=i.isTagNameInArrayMode(A.tagname,t.arrayMode,e);s[t.textNodeName]=a?[A.val]:A.val}i.merge(s,A.attrsMap,t.arrayMode);const o=Object.keys(A.child);for(let r=0;r1){s[g]=[];for(let e in A.child[g])A.child[g].hasOwnProperty(e)&&s[g].push(a(A.child[g][e],t,g))}else{const o=a(A.child[g][0],t,g),r=!0===t.arrayMode&&\"object\"==typeof o||i.isTagNameInArrayMode(g,t.arrayMode,e);s[g]=r?[o]:o}}return s};t.convertToJson=a},\"./node_modules/fast-xml-parser/src/node2json_str.js\":(A,t,e)=>{\"use strict\";const i=e(\"./node_modules/fast-xml-parser/src/util.js\"),a=e(\"./node_modules/fast-xml-parser/src/util.js\").buildOptions,s=e(\"./node_modules/fast-xml-parser/src/xmlstr2xmlnode.js\"),o=function(A,t,e){let a=\"{\";const s=Object.keys(A.child);for(let e=0;e1){a+='\"'+i+'\" : [ ';for(let e in A.child[i])a+=o(A.child[i][e],t)+\" , \";a=a.substr(0,a.length-1)+\" ] \"}else a+='\"'+i+'\" : '+o(A.child[i][0],t)+\" ,\"}return i.merge(a,A.attrsMap),i.isEmptyObject(a)?i.isExist(A.val)?A.val:\"\":(i.isExist(A.val)&&(\"string\"!=typeof A.val||\"\"!==A.val&&A.val!==t.cdataPositionChar)&&(a+='\"'+t.textNodeName+'\" : '+(!0!==(r=A.val)&&!1!==r&&isNaN(r)?'\"'+r+'\"':r)),\",\"===a[a.length-1]&&(a=a.substr(0,a.length-2)),a+\"}\");var r};t.convertToJsonString=function(A,t){return(t=a(t,s.defaultOptions,s.props)).indentBy=t.indentBy||\"\",o(A,t,0)}},\"./node_modules/fast-xml-parser/src/parser.js\":(A,t,e)=>{\"use strict\";const i=e(\"./node_modules/fast-xml-parser/src/node2json.js\"),a=e(\"./node_modules/fast-xml-parser/src/xmlstr2xmlnode.js\"),s=e(\"./node_modules/fast-xml-parser/src/xmlstr2xmlnode.js\"),o=e(\"./node_modules/fast-xml-parser/src/util.js\").buildOptions,r=e(\"./node_modules/fast-xml-parser/src/validator.js\");t.parse=function(A,t={},e){if(e){!0===e&&(e={});const t=r.validate(A,e);if(!0!==t)throw Error(t.err.msg)}t.parseTrueNumberOnly&&!1!==t.parseNodeValue&&!t.numParseOptions&&(t.numParseOptions={leadingZeros:!1});let g=o(t,s.defaultOptions,s.props);const n=a.getTraversalObj(A,g);return i.convertToJson(n,g)},t.convertTonimn=e(\"./node_modules/fast-xml-parser/src/nimndata.js\").convert2nimn,t.getTraversalObj=a.getTraversalObj,t.convertToJson=i.convertToJson,t.convertToJsonString=e(\"./node_modules/fast-xml-parser/src/node2json_str.js\").convertToJsonString,t.validate=r.validate,t.j2xParser=e(\"./node_modules/fast-xml-parser/src/json2xml.js\"),t.parseToNimn=function(A,e,i){return t.convertTonimn(t.getTraversalObj(A,i),e,i)}},\"./node_modules/fast-xml-parser/src/util.js\":(A,t)=>{\"use strict\";const e=\"[:A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD][:A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*\",i=new RegExp(\"^\"+e+\"$\");t.isExist=function(A){return void 0!==A},t.isEmptyObject=function(A){return 0===Object.keys(A).length},t.merge=function(A,t,e){if(t){const i=Object.keys(t),a=i.length;for(let s=0;s{\"use strict\";const i=e(\"./node_modules/fast-xml-parser/src/util.js\"),a={allowBooleanAttributes:!1},s=[\"allowBooleanAttributes\"];function o(A,t){const e=t;for(;t5&&\"xml\"===i)return B(\"InvalidXml\",\"XML declaration allowed only at the start of the document.\",Q(A,t));if(\"?\"==A[t]&&\">\"==A[t+1]){t++;break}}return t}function r(A,t){if(A.length>t+5&&\"-\"===A[t+1]&&\"-\"===A[t+2]){for(t+=3;t\"===A[t+2]){t+=2;break}}else if(A.length>t+8&&\"D\"===A[t+1]&&\"O\"===A[t+2]&&\"C\"===A[t+3]&&\"T\"===A[t+4]&&\"Y\"===A[t+5]&&\"P\"===A[t+6]&&\"E\"===A[t+7]){let e=1;for(t+=8;t\"===A[t]&&(e--,0===e))break}else if(A.length>t+9&&\"[\"===A[t+1]&&\"C\"===A[t+2]&&\"D\"===A[t+3]&&\"A\"===A[t+4]&&\"T\"===A[t+5]&&\"A\"===A[t+6]&&\"[\"===A[t+7])for(t+=8;t\"===A[t+2]){t+=2;break}return t}function g(A,t){let e=\"\",i=\"\",a=!1;for(;t\"===A[t]&&\"\"===i){a=!0;break}e+=A[t]}return\"\"===i&&{value:e,index:t,tagClosed:a}}t.validate=function(A,t){t=i.buildOptions(t,a,s);const e=[];let n=!1,C=!1;\"\\ufeff\"===A[0]&&(A=A.substr(1));for(let a=0;a\"!==A[a]&&\" \"!==A[a]&&\"\\t\"!==A[a]&&\"\\n\"!==A[a]&&\"\\r\"!==A[a];a++)h+=A[a];if(h=h.trim(),\"/\"===h[h.length-1]&&(h=h.substring(0,h.length-1),a--),E=h,!i.isName(E)){let t;return t=0===h.trim().length?\"Invalid space after '<'.\":\"Tag '\"+h+\"' is an invalid name.\",B(\"InvalidTag\",t,Q(A,a))}const c=g(A,a);if(!1===c)return B(\"InvalidAttr\",\"Attributes for '\"+h+\"' have open quote.\",Q(A,a));let u=c.value;if(a=c.index,\"/\"===u[u.length-1]){const e=a-u.length;u=u.substring(0,u.length-1);const i=I(u,t);if(!0!==i)return B(i.err.code,i.err.msg,Q(A,e+i.err.line));n=!0}else if(d){if(!c.tagClosed)return B(\"InvalidTag\",\"Closing tag '\"+h+\"' doesn't have proper closing.\",Q(A,a));if(u.trim().length>0)return B(\"InvalidTag\",\"Closing tag '\"+h+\"' can't have attributes or invalid starting.\",Q(A,s));{const t=e.pop();if(h!==t.tagName){let e=Q(A,t.tagStartPos);return B(\"InvalidTag\",\"Expected closing tag '\"+t.tagName+\"' (opened in line \"+e.line+\", col \"+e.col+\") instead of closing tag '\"+h+\"'.\",Q(A,s))}0==e.length&&(C=!0)}}else{const i=I(u,t);if(!0!==i)return B(i.err.code,i.err.msg,Q(A,a-u.length+i.err.line));if(!0===C)return B(\"InvalidXml\",\"Multiple possible root nodes found.\",Q(A,a));e.push({tagName:h,tagStartPos:s}),n=!0}for(a++;a0)||B(\"InvalidXml\",\"Invalid '\"+JSON.stringify(e.map((A=>A.tagName)),null,4).replace(/\\r?\\n/g,\"\")+\"' found.\",{line:1,col:1}):B(\"InvalidXml\",\"Start tag expected.\",1)};const n=new RegExp(\"(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*(['\\\"])(([\\\\s\\\\S])*?)\\\\5)?\",\"g\");function I(A,t){const e=i.getAllMatches(A,n),a={};for(let A=0;A{\"use strict\";A.exports=function(A,t,e){this.tagname=A,this.parent=t,this.child={},this.attrsMap={},this.val=e,this.addChild=function(A){Array.isArray(this.child[A.tagname])?this.child[A.tagname].push(A):this.child[A.tagname]=[A]}}},\"./node_modules/fast-xml-parser/src/xmlstr2xmlnode.js\":(A,t,e)=>{\"use strict\";const i=e(\"./node_modules/fast-xml-parser/src/util.js\"),a=e(\"./node_modules/fast-xml-parser/src/util.js\").buildOptions,s=e(\"./node_modules/fast-xml-parser/src/xmlNode.js\"),o=e(\"./node_modules/strnum/strnum.js\");\"<((!\\\\[CDATA\\\\[([\\\\s\\\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\\\/)(NAME)\\\\s*>))([^<]*)\".replace(/NAME/g,i.nameRegexp),!Number.parseInt&&window.parseInt&&(Number.parseInt=window.parseInt),!Number.parseFloat&&window.parseFloat&&(Number.parseFloat=window.parseFloat);const r={attributeNamePrefix:\"@_\",attrNodeName:!1,textNodeName:\"#text\",ignoreAttributes:!0,ignoreNameSpace:!1,allowBooleanAttributes:!1,parseNodeValue:!0,parseAttributeValue:!1,arrayMode:!1,trimValues:!0,cdataTagName:!1,cdataPositionChar:\"\\\\c\",numParseOptions:{hex:!0,leadingZeros:!0},tagValueProcessor:function(A,t){return A},attrValueProcessor:function(A,t){return A},stopNodes:[],alwaysCreateTextNode:!1};t.defaultOptions=r;const g=[\"attributeNamePrefix\",\"attrNodeName\",\"textNodeName\",\"ignoreAttributes\",\"ignoreNameSpace\",\"allowBooleanAttributes\",\"parseNodeValue\",\"parseAttributeValue\",\"arrayMode\",\"trimValues\",\"cdataTagName\",\"cdataPositionChar\",\"tagValueProcessor\",\"attrValueProcessor\",\"parseTrueNumberOnly\",\"numParseOptions\",\"stopNodes\",\"alwaysCreateTextNode\"];function n(A,t,e){return t&&(e.trimValues&&(t=t.trim()),t=l(t=e.tagValueProcessor(t,A),e.parseNodeValue,e.numParseOptions)),t}function I(A,t){if(t.ignoreNameSpace){const t=A.split(\":\"),e=\"/\"===A.charAt(0)?\"/\":\"\";if(\"xmlns\"===t[0])return\"\";2===t.length&&(A=e+t[1])}return A}function l(A,t,e){if(t&&\"string\"==typeof A){const t=A.trim();return\"true\"===t||\"false\"!==t&&o(A,e)}return i.isExist(A)?A:\"\"}t.props=g;const B=new RegExp(\"([^\\\\s=]+)\\\\s*(=\\\\s*(['\\\"])(.*?)\\\\3)?\",\"g\");function C(A,t){if(!t.ignoreAttributes&&\"string\"==typeof A){A=A.replace(/\\r?\\n/g,\" \");const e=i.getAllMatches(A,B),a=e.length,s={};for(let A=0;A\"===t)return{data:i,index:a};\"\\t\"===t&&(t=\" \")}i+=t}}function E(A,t,e,i){const a=A.indexOf(t,e);if(-1===a)throw new Error(i);return a+t.length-1}t.getTraversalObj=function(A,t){A=A.replace(/\\r\\n?/g,\"\\n\"),t=a(t,r,g);const e=new s(\"!xml\");let o=e,I=\"\";for(let e=0;e\",e,\"Closing Tag is not closed.\");let s=A.substring(e+2,a).trim();if(t.ignoreNameSpace){const A=s.indexOf(\":\");-1!==A&&(s=s.substr(A+1))}o&&(o.val?o.val=i.getValue(o.val)+\"\"+n(s,I,t):o.val=n(s,I,t)),t.stopNodes.length&&t.stopNodes.includes(o.tagname)&&(o.child=[],null==o.attrsMap&&(o.attrsMap={}),o.val=A.substr(o.startIndex+1,e-o.startIndex-1)),o=o.parent,I=\"\",e=a}else if(\"?\"===A[e+1])e=E(A,\"?>\",e,\"Pi Tag is not closed.\");else if(\"!--\"===A.substr(e+1,3))e=E(A,\"--\\x3e\",e,\"Comment is not closed.\");else if(\"!D\"===A.substr(e+1,2)){const t=E(A,\">\",e,\"DOCTYPE is not closed.\");e=A.substring(e,t).indexOf(\"[\")>=0?A.indexOf(\"]>\",e)+1:t}else if(\"![\"===A.substr(e+1,2)){const a=E(A,\"]]>\",e,\"CDATA is not closed.\")-2,r=A.substring(e+9,a);if(I&&(o.val=i.getValue(o.val)+\"\"+n(o.tagname,I,t),I=\"\"),t.cdataTagName){const A=new s(t.cdataTagName,o,r);o.addChild(A),o.val=i.getValue(o.val)+t.cdataPositionChar,r&&(A.val=r)}else o.val=(o.val||\"\")+(r||\"\");e=a+2}else{const a=Q(A,e+1);let r=a.data;const g=a.index,l=r.indexOf(\" \");let B=r,E=!0;if(-1!==l&&(B=r.substr(0,l).replace(/\\s\\s*$/,\"\"),r=r.substr(l+1)),t.ignoreNameSpace){const A=B.indexOf(\":\");-1!==A&&(B=B.substr(A+1),E=B!==a.data.substr(A+1))}if(o&&I&&\"!xml\"!==o.tagname&&(o.val=i.getValue(o.val)+\"\"+n(o.tagname,I,t)),r.length>0&&r.lastIndexOf(\"/\")===r.length-1){\"/\"===B[B.length-1]?(B=B.substr(0,B.length-1),r=B):r=r.substr(0,r.length-1);const A=new s(B,o,\"\");B!==r&&(A.attrsMap=C(r,t)),o.addChild(A)}else{const A=new s(B,o);t.stopNodes.length&&t.stopNodes.includes(A.tagname)&&(A.startIndex=g),B!==r&&E&&(A.attrsMap=C(r,t)),o.addChild(A),o=A}I=\"\",e=g}else I+=A[e];return e}},\"./node_modules/pako/index.js\":(A,t,e)=>{\"use strict\";var i={};(0,e(\"./node_modules/pako/lib/utils/common.js\").assign)(i,e(\"./node_modules/pako/lib/deflate.js\"),e(\"./node_modules/pako/lib/inflate.js\"),e(\"./node_modules/pako/lib/zlib/constants.js\")),A.exports=i},\"./node_modules/pako/lib/deflate.js\":(A,t,e)=>{\"use strict\";var i=e(\"./node_modules/pako/lib/zlib/deflate.js\"),a=e(\"./node_modules/pako/lib/utils/common.js\"),s=e(\"./node_modules/pako/lib/utils/strings.js\"),o=e(\"./node_modules/pako/lib/zlib/messages.js\"),r=e(\"./node_modules/pako/lib/zlib/zstream.js\"),g=Object.prototype.toString;function n(A){if(!(this instanceof n))return new n(A);this.options=a.assign({level:-1,method:8,chunkSize:16384,windowBits:15,memLevel:8,strategy:0,to:\"\"},A||{});var t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new r,this.strm.avail_out=0;var e=i.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(0!==e)throw new Error(o[e]);if(t.header&&i.deflateSetHeader(this.strm,t.header),t.dictionary){var I;if(I=\"string\"==typeof t.dictionary?s.string2buf(t.dictionary):\"[object ArrayBuffer]\"===g.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,0!==(e=i.deflateSetDictionary(this.strm,I)))throw new Error(o[e]);this._dict_set=!0}}function I(A,t){var e=new n(t);if(e.push(A,!0),e.err)throw e.msg||o[e.err];return e.result}n.prototype.push=function(A,t){var e,o,r=this.strm,n=this.options.chunkSize;if(this.ended)return!1;o=t===~~t?t:!0===t?4:0,\"string\"==typeof A?r.input=s.string2buf(A):\"[object ArrayBuffer]\"===g.call(A)?r.input=new Uint8Array(A):r.input=A,r.next_in=0,r.avail_in=r.input.length;do{if(0===r.avail_out&&(r.output=new a.Buf8(n),r.next_out=0,r.avail_out=n),1!==(e=i.deflate(r,o))&&0!==e)return this.onEnd(e),this.ended=!0,!1;0!==r.avail_out&&(0!==r.avail_in||4!==o&&2!==o)||(\"string\"===this.options.to?this.onData(s.buf2binstring(a.shrinkBuf(r.output,r.next_out))):this.onData(a.shrinkBuf(r.output,r.next_out)))}while((r.avail_in>0||0===r.avail_out)&&1!==e);return 4===o?(e=i.deflateEnd(this.strm),this.onEnd(e),this.ended=!0,0===e):2!==o||(this.onEnd(0),r.avail_out=0,!0)},n.prototype.onData=function(A){this.chunks.push(A)},n.prototype.onEnd=function(A){0===A&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=a.flattenChunks(this.chunks)),this.chunks=[],this.err=A,this.msg=this.strm.msg},t.Deflate=n,t.deflate=I,t.deflateRaw=function(A,t){return(t=t||{}).raw=!0,I(A,t)},t.gzip=function(A,t){return(t=t||{}).gzip=!0,I(A,t)}},\"./node_modules/pako/lib/inflate.js\":(A,t,e)=>{\"use strict\";var i=e(\"./node_modules/pako/lib/zlib/inflate.js\"),a=e(\"./node_modules/pako/lib/utils/common.js\"),s=e(\"./node_modules/pako/lib/utils/strings.js\"),o=e(\"./node_modules/pako/lib/zlib/constants.js\"),r=e(\"./node_modules/pako/lib/zlib/messages.js\"),g=e(\"./node_modules/pako/lib/zlib/zstream.js\"),n=e(\"./node_modules/pako/lib/zlib/gzheader.js\"),I=Object.prototype.toString;function l(A){if(!(this instanceof l))return new l(A);this.options=a.assign({chunkSize:16384,windowBits:0,to:\"\"},A||{});var t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||A&&A.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new g,this.strm.avail_out=0;var e=i.inflateInit2(this.strm,t.windowBits);if(e!==o.Z_OK)throw new Error(r[e]);if(this.header=new n,i.inflateGetHeader(this.strm,this.header),t.dictionary&&(\"string\"==typeof t.dictionary?t.dictionary=s.string2buf(t.dictionary):\"[object ArrayBuffer]\"===I.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(e=i.inflateSetDictionary(this.strm,t.dictionary))!==o.Z_OK))throw new Error(r[e])}function B(A,t){var e=new l(t);if(e.push(A,!0),e.err)throw e.msg||r[e.err];return e.result}l.prototype.push=function(A,t){var e,r,g,n,l,B=this.strm,C=this.options.chunkSize,Q=this.options.dictionary,E=!1;if(this.ended)return!1;r=t===~~t?t:!0===t?o.Z_FINISH:o.Z_NO_FLUSH,\"string\"==typeof A?B.input=s.binstring2buf(A):\"[object ArrayBuffer]\"===I.call(A)?B.input=new Uint8Array(A):B.input=A,B.next_in=0,B.avail_in=B.input.length;do{if(0===B.avail_out&&(B.output=new a.Buf8(C),B.next_out=0,B.avail_out=C),(e=i.inflate(B,o.Z_NO_FLUSH))===o.Z_NEED_DICT&&Q&&(e=i.inflateSetDictionary(this.strm,Q)),e===o.Z_BUF_ERROR&&!0===E&&(e=o.Z_OK,E=!1),e!==o.Z_STREAM_END&&e!==o.Z_OK)return this.onEnd(e),this.ended=!0,!1;B.next_out&&(0!==B.avail_out&&e!==o.Z_STREAM_END&&(0!==B.avail_in||r!==o.Z_FINISH&&r!==o.Z_SYNC_FLUSH)||(\"string\"===this.options.to?(g=s.utf8border(B.output,B.next_out),n=B.next_out-g,l=s.buf2string(B.output,g),B.next_out=n,B.avail_out=C-n,n&&a.arraySet(B.output,B.output,g,n,0),this.onData(l)):this.onData(a.shrinkBuf(B.output,B.next_out)))),0===B.avail_in&&0===B.avail_out&&(E=!0)}while((B.avail_in>0||0===B.avail_out)&&e!==o.Z_STREAM_END);return e===o.Z_STREAM_END&&(r=o.Z_FINISH),r===o.Z_FINISH?(e=i.inflateEnd(this.strm),this.onEnd(e),this.ended=!0,e===o.Z_OK):r!==o.Z_SYNC_FLUSH||(this.onEnd(o.Z_OK),B.avail_out=0,!0)},l.prototype.onData=function(A){this.chunks.push(A)},l.prototype.onEnd=function(A){A===o.Z_OK&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=a.flattenChunks(this.chunks)),this.chunks=[],this.err=A,this.msg=this.strm.msg},t.Inflate=l,t.inflate=B,t.inflateRaw=function(A,t){return(t=t||{}).raw=!0,B(A,t)},t.ungzip=B},\"./node_modules/pako/lib/utils/common.js\":(A,t)=>{\"use strict\";var e=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;function i(A,t){return Object.prototype.hasOwnProperty.call(A,t)}t.assign=function(A){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var e=t.shift();if(e){if(\"object\"!=typeof e)throw new TypeError(e+\"must be non-object\");for(var a in e)i(e,a)&&(A[a]=e[a])}}return A},t.shrinkBuf=function(A,t){return A.length===t?A:A.subarray?A.subarray(0,t):(A.length=t,A)};var a={arraySet:function(A,t,e,i,a){if(t.subarray&&A.subarray)A.set(t.subarray(e,e+i),a);else for(var s=0;s{\"use strict\";var i=e(\"./node_modules/pako/lib/utils/common.js\"),a=!0,s=!0;try{String.fromCharCode.apply(null,[0])}catch(A){a=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(A){s=!1}for(var o=new i.Buf8(256),r=0;r<256;r++)o[r]=r>=252?6:r>=248?5:r>=240?4:r>=224?3:r>=192?2:1;function g(A,t){if(t<65534&&(A.subarray&&s||!A.subarray&&a))return String.fromCharCode.apply(null,i.shrinkBuf(A,t));for(var e=\"\",o=0;o>>6,t[o++]=128|63&e):e<65536?(t[o++]=224|e>>>12,t[o++]=128|e>>>6&63,t[o++]=128|63&e):(t[o++]=240|e>>>18,t[o++]=128|e>>>12&63,t[o++]=128|e>>>6&63,t[o++]=128|63&e);return t},t.buf2binstring=function(A){return g(A,A.length)},t.binstring2buf=function(A){for(var t=new i.Buf8(A.length),e=0,a=t.length;e4)n[i++]=65533,e+=s-1;else{for(a&=2===s?31:3===s?15:7;s>1&&e1?n[i++]=65533:a<65536?n[i++]=a:(a-=65536,n[i++]=55296|a>>10&1023,n[i++]=56320|1023&a)}return g(n,i)},t.utf8border=function(A,t){var e;for((t=t||A.length)>A.length&&(t=A.length),e=t-1;e>=0&&128==(192&A[e]);)e--;return e<0||0===e?t:e+o[A[e]]>t?e:t}},\"./node_modules/pako/lib/zlib/adler32.js\":A=>{\"use strict\";A.exports=function(A,t,e,i){for(var a=65535&A|0,s=A>>>16&65535|0,o=0;0!==e;){e-=o=e>2e3?2e3:e;do{s=s+(a=a+t[i++]|0)|0}while(--o);a%=65521,s%=65521}return a|s<<16|0}},\"./node_modules/pako/lib/zlib/constants.js\":A=>{\"use strict\";A.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},\"./node_modules/pako/lib/zlib/crc32.js\":A=>{\"use strict\";var t=function(){for(var A,t=[],e=0;e<256;e++){A=e;for(var i=0;i<8;i++)A=1&A?3988292384^A>>>1:A>>>1;t[e]=A}return t}();A.exports=function(A,e,i,a){var s=t,o=a+i;A^=-1;for(var r=a;r>>8^s[255&(A^e[r])];return-1^A}},\"./node_modules/pako/lib/zlib/deflate.js\":(A,t,e)=>{\"use strict\";var i,a=e(\"./node_modules/pako/lib/utils/common.js\"),s=e(\"./node_modules/pako/lib/zlib/trees.js\"),o=e(\"./node_modules/pako/lib/zlib/adler32.js\"),r=e(\"./node_modules/pako/lib/zlib/crc32.js\"),g=e(\"./node_modules/pako/lib/zlib/messages.js\"),n=-2,I=258,l=262,B=103,C=113,Q=666;function E(A,t){return A.msg=g[t],t}function d(A){return(A<<1)-(A>4?9:0)}function h(A){for(var t=A.length;--t>=0;)A[t]=0}function c(A){var t=A.state,e=t.pending;e>A.avail_out&&(e=A.avail_out),0!==e&&(a.arraySet(A.output,t.pending_buf,t.pending_out,e,A.next_out),A.next_out+=e,t.pending_out+=e,A.total_out+=e,A.avail_out-=e,t.pending-=e,0===t.pending&&(t.pending_out=0))}function u(A,t){s._tr_flush_block(A,A.block_start>=0?A.block_start:-1,A.strstart-A.block_start,t),A.block_start=A.strstart,c(A.strm)}function f(A,t){A.pending_buf[A.pending++]=t}function p(A,t){A.pending_buf[A.pending++]=t>>>8&255,A.pending_buf[A.pending++]=255&t}function w(A,t){var e,i,a=A.max_chain_length,s=A.strstart,o=A.prev_length,r=A.nice_match,g=A.strstart>A.w_size-l?A.strstart-(A.w_size-l):0,n=A.window,B=A.w_mask,C=A.prev,Q=A.strstart+I,E=n[s+o-1],d=n[s+o];A.prev_length>=A.good_match&&(a>>=2),r>A.lookahead&&(r=A.lookahead);do{if(n[(e=t)+o]===d&&n[e+o-1]===E&&n[e]===n[s]&&n[++e]===n[s+1]){s+=2,e++;do{}while(n[++s]===n[++e]&&n[++s]===n[++e]&&n[++s]===n[++e]&&n[++s]===n[++e]&&n[++s]===n[++e]&&n[++s]===n[++e]&&n[++s]===n[++e]&&n[++s]===n[++e]&&so){if(A.match_start=t,o=i,i>=r)break;E=n[s+o-1],d=n[s+o]}}}while((t=C[t&B])>g&&0!=--a);return o<=A.lookahead?o:A.lookahead}function m(A){var t,e,i,s,g,n,I,B,C,Q,E=A.w_size;do{if(s=A.window_size-A.lookahead-A.strstart,A.strstart>=E+(E-l)){a.arraySet(A.window,A.window,E,E,0),A.match_start-=E,A.strstart-=E,A.block_start-=E,t=e=A.hash_size;do{i=A.head[--t],A.head[t]=i>=E?i-E:0}while(--e);t=e=E;do{i=A.prev[--t],A.prev[t]=i>=E?i-E:0}while(--e);s+=E}if(0===A.strm.avail_in)break;if(n=A.strm,I=A.window,B=A.strstart+A.lookahead,C=s,Q=void 0,(Q=n.avail_in)>C&&(Q=C),e=0===Q?0:(n.avail_in-=Q,a.arraySet(I,n.input,n.next_in,Q,B),1===n.state.wrap?n.adler=o(n.adler,I,Q,B):2===n.state.wrap&&(n.adler=r(n.adler,I,Q,B)),n.next_in+=Q,n.total_in+=Q,Q),A.lookahead+=e,A.lookahead+A.insert>=3)for(g=A.strstart-A.insert,A.ins_h=A.window[g],A.ins_h=(A.ins_h<=3&&(A.ins_h=(A.ins_h<=3)if(i=s._tr_tally(A,A.strstart-A.match_start,A.match_length-3),A.lookahead-=A.match_length,A.match_length<=A.max_lazy_match&&A.lookahead>=3){A.match_length--;do{A.strstart++,A.ins_h=(A.ins_h<=3&&(A.ins_h=(A.ins_h<4096)&&(A.match_length=2)),A.prev_length>=3&&A.match_length<=A.prev_length){a=A.strstart+A.lookahead-3,i=s._tr_tally(A,A.strstart-1-A.prev_match,A.prev_length-3),A.lookahead-=A.prev_length-1,A.prev_length-=2;do{++A.strstart<=a&&(A.ins_h=(A.ins_h<15&&(r=2,i-=16),s<1||s>9||8!==e||i<8||i>15||t<0||t>9||o<0||o>4)return E(A,n);8===i&&(i=9);var g=new b;return A.state=g,g.strm=A,g.wrap=r,g.gzhead=null,g.w_bits=i,g.w_size=1<A.pending_buf_size-5&&(e=A.pending_buf_size-5);;){if(A.lookahead<=1){if(m(A),0===A.lookahead&&0===t)return 1;if(0===A.lookahead)break}A.strstart+=A.lookahead,A.lookahead=0;var i=A.block_start+e;if((0===A.strstart||A.strstart>=i)&&(A.lookahead=A.strstart-i,A.strstart=i,u(A,!1),0===A.strm.avail_out))return 1;if(A.strstart-A.block_start>=A.w_size-l&&(u(A,!1),0===A.strm.avail_out))return 1}return A.insert=0,4===t?(u(A,!0),0===A.strm.avail_out?3:4):(A.strstart>A.block_start&&(u(A,!1),A.strm.avail_out),1)})),new _(4,4,8,4,y),new _(4,5,16,8,y),new _(4,6,32,32,y),new _(4,4,16,16,D),new _(8,16,32,32,D),new _(8,16,128,128,D),new _(8,32,128,256,D),new _(32,128,258,1024,D),new _(32,258,258,4096,D)],t.deflateInit=function(A,t){return v(A,t,8,15,8,0)},t.deflateInit2=v,t.deflateReset=F,t.deflateResetKeep=k,t.deflateSetHeader=function(A,t){return A&&A.state?2!==A.state.wrap?n:(A.state.gzhead=t,0):n},t.deflate=function(A,t){var e,a,o,g;if(!A||!A.state||t>5||t<0)return A?E(A,n):n;if(a=A.state,!A.output||!A.input&&0!==A.avail_in||a.status===Q&&4!==t)return E(A,0===A.avail_out?-5:n);if(a.strm=A,e=a.last_flush,a.last_flush=t,42===a.status)if(2===a.wrap)A.adler=0,f(a,31),f(a,139),f(a,8),a.gzhead?(f(a,(a.gzhead.text?1:0)+(a.gzhead.hcrc?2:0)+(a.gzhead.extra?4:0)+(a.gzhead.name?8:0)+(a.gzhead.comment?16:0)),f(a,255&a.gzhead.time),f(a,a.gzhead.time>>8&255),f(a,a.gzhead.time>>16&255),f(a,a.gzhead.time>>24&255),f(a,9===a.level?2:a.strategy>=2||a.level<2?4:0),f(a,255&a.gzhead.os),a.gzhead.extra&&a.gzhead.extra.length&&(f(a,255&a.gzhead.extra.length),f(a,a.gzhead.extra.length>>8&255)),a.gzhead.hcrc&&(A.adler=r(A.adler,a.pending_buf,a.pending,0)),a.gzindex=0,a.status=69):(f(a,0),f(a,0),f(a,0),f(a,0),f(a,0),f(a,9===a.level?2:a.strategy>=2||a.level<2?4:0),f(a,3),a.status=C);else{var l=8+(a.w_bits-8<<4)<<8;l|=(a.strategy>=2||a.level<2?0:a.level<6?1:6===a.level?2:3)<<6,0!==a.strstart&&(l|=32),l+=31-l%31,a.status=C,p(a,l),0!==a.strstart&&(p(a,A.adler>>>16),p(a,65535&A.adler)),A.adler=1}if(69===a.status)if(a.gzhead.extra){for(o=a.pending;a.gzindex<(65535&a.gzhead.extra.length)&&(a.pending!==a.pending_buf_size||(a.gzhead.hcrc&&a.pending>o&&(A.adler=r(A.adler,a.pending_buf,a.pending-o,o)),c(A),o=a.pending,a.pending!==a.pending_buf_size));)f(a,255&a.gzhead.extra[a.gzindex]),a.gzindex++;a.gzhead.hcrc&&a.pending>o&&(A.adler=r(A.adler,a.pending_buf,a.pending-o,o)),a.gzindex===a.gzhead.extra.length&&(a.gzindex=0,a.status=73)}else a.status=73;if(73===a.status)if(a.gzhead.name){o=a.pending;do{if(a.pending===a.pending_buf_size&&(a.gzhead.hcrc&&a.pending>o&&(A.adler=r(A.adler,a.pending_buf,a.pending-o,o)),c(A),o=a.pending,a.pending===a.pending_buf_size)){g=1;break}g=a.gzindexo&&(A.adler=r(A.adler,a.pending_buf,a.pending-o,o)),0===g&&(a.gzindex=0,a.status=91)}else a.status=91;if(91===a.status)if(a.gzhead.comment){o=a.pending;do{if(a.pending===a.pending_buf_size&&(a.gzhead.hcrc&&a.pending>o&&(A.adler=r(A.adler,a.pending_buf,a.pending-o,o)),c(A),o=a.pending,a.pending===a.pending_buf_size)){g=1;break}g=a.gzindexo&&(A.adler=r(A.adler,a.pending_buf,a.pending-o,o)),0===g&&(a.status=B)}else a.status=B;if(a.status===B&&(a.gzhead.hcrc?(a.pending+2>a.pending_buf_size&&c(A),a.pending+2<=a.pending_buf_size&&(f(a,255&A.adler),f(a,A.adler>>8&255),A.adler=0,a.status=C)):a.status=C),0!==a.pending){if(c(A),0===A.avail_out)return a.last_flush=-1,0}else if(0===A.avail_in&&d(t)<=d(e)&&4!==t)return E(A,-5);if(a.status===Q&&0!==A.avail_in)return E(A,-5);if(0!==A.avail_in||0!==a.lookahead||0!==t&&a.status!==Q){var w=2===a.strategy?function(A,t){for(var e;;){if(0===A.lookahead&&(m(A),0===A.lookahead)){if(0===t)return 1;break}if(A.match_length=0,e=s._tr_tally(A,0,A.window[A.strstart]),A.lookahead--,A.strstart++,e&&(u(A,!1),0===A.strm.avail_out))return 1}return A.insert=0,4===t?(u(A,!0),0===A.strm.avail_out?3:4):A.last_lit&&(u(A,!1),0===A.strm.avail_out)?1:2}(a,t):3===a.strategy?function(A,t){for(var e,i,a,o,r=A.window;;){if(A.lookahead<=I){if(m(A),A.lookahead<=I&&0===t)return 1;if(0===A.lookahead)break}if(A.match_length=0,A.lookahead>=3&&A.strstart>0&&(i=r[a=A.strstart-1])===r[++a]&&i===r[++a]&&i===r[++a]){o=A.strstart+I;do{}while(i===r[++a]&&i===r[++a]&&i===r[++a]&&i===r[++a]&&i===r[++a]&&i===r[++a]&&i===r[++a]&&i===r[++a]&&aA.lookahead&&(A.match_length=A.lookahead)}if(A.match_length>=3?(e=s._tr_tally(A,1,A.match_length-3),A.lookahead-=A.match_length,A.strstart+=A.match_length,A.match_length=0):(e=s._tr_tally(A,0,A.window[A.strstart]),A.lookahead--,A.strstart++),e&&(u(A,!1),0===A.strm.avail_out))return 1}return A.insert=0,4===t?(u(A,!0),0===A.strm.avail_out?3:4):A.last_lit&&(u(A,!1),0===A.strm.avail_out)?1:2}(a,t):i[a.level].func(a,t);if(3!==w&&4!==w||(a.status=Q),1===w||3===w)return 0===A.avail_out&&(a.last_flush=-1),0;if(2===w&&(1===t?s._tr_align(a):5!==t&&(s._tr_stored_block(a,0,0,!1),3===t&&(h(a.head),0===a.lookahead&&(a.strstart=0,a.block_start=0,a.insert=0))),c(A),0===A.avail_out))return a.last_flush=-1,0}return 4!==t?0:a.wrap<=0?1:(2===a.wrap?(f(a,255&A.adler),f(a,A.adler>>8&255),f(a,A.adler>>16&255),f(a,A.adler>>24&255),f(a,255&A.total_in),f(a,A.total_in>>8&255),f(a,A.total_in>>16&255),f(a,A.total_in>>24&255)):(p(a,A.adler>>>16),p(a,65535&A.adler)),c(A),a.wrap>0&&(a.wrap=-a.wrap),0!==a.pending?0:1)},t.deflateEnd=function(A){var t;return A&&A.state?42!==(t=A.state.status)&&69!==t&&73!==t&&91!==t&&t!==B&&t!==C&&t!==Q?E(A,n):(A.state=null,t===C?E(A,-3):0):n},t.deflateSetDictionary=function(A,t){var e,i,s,r,g,I,l,B,C=t.length;if(!A||!A.state)return n;if(2===(r=(e=A.state).wrap)||1===r&&42!==e.status||e.lookahead)return n;for(1===r&&(A.adler=o(A.adler,t,C,0)),e.wrap=0,C>=e.w_size&&(0===r&&(h(e.head),e.strstart=0,e.block_start=0,e.insert=0),B=new a.Buf8(e.w_size),a.arraySet(B,t,C-e.w_size,e.w_size,0),t=B,C=e.w_size),g=A.avail_in,I=A.next_in,l=A.input,A.avail_in=C,A.next_in=0,A.input=t,m(e);e.lookahead>=3;){i=e.strstart,s=e.lookahead-2;do{e.ins_h=(e.ins_h<{\"use strict\";A.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1}},\"./node_modules/pako/lib/zlib/inffast.js\":A=>{\"use strict\";A.exports=function(A,t){var e,i,a,s,o,r,g,n,I,l,B,C,Q,E,d,h,c,u,f,p,w,m,y,D,_;e=A.state,i=A.next_in,D=A.input,a=i+(A.avail_in-5),s=A.next_out,_=A.output,o=s-(t-A.avail_out),r=s+(A.avail_out-257),g=e.dmax,n=e.wsize,I=e.whave,l=e.wnext,B=e.window,C=e.hold,Q=e.bits,E=e.lencode,d=e.distcode,h=(1<>>=f=u>>>24,Q-=f,0==(f=u>>>16&255))_[s++]=65535&u;else{if(!(16&f)){if(0==(64&f)){u=E[(65535&u)+(C&(1<>>=f,Q-=f),Q<15&&(C+=D[i++]<>>=f=u>>>24,Q-=f,!(16&(f=u>>>16&255))){if(0==(64&f)){u=d[(65535&u)+(C&(1<g){A.msg=\"invalid distance too far back\",e.mode=30;break A}if(C>>>=f,Q-=f,w>(f=s-o)){if((f=w-f)>I&&e.sane){A.msg=\"invalid distance too far back\",e.mode=30;break A}if(m=0,y=B,0===l){if(m+=n-f,f2;)_[s++]=y[m++],_[s++]=y[m++],_[s++]=y[m++],p-=3;p&&(_[s++]=y[m++],p>1&&(_[s++]=y[m++]))}else{m=s-w;do{_[s++]=_[m++],_[s++]=_[m++],_[s++]=_[m++],p-=3}while(p>2);p&&(_[s++]=_[m++],p>1&&(_[s++]=_[m++]))}break}}break}}while(i>3,C&=(1<<(Q-=p<<3))-1,A.next_in=i,A.next_out=s,A.avail_in=i{\"use strict\";var i=e(\"./node_modules/pako/lib/utils/common.js\"),a=e(\"./node_modules/pako/lib/zlib/adler32.js\"),s=e(\"./node_modules/pako/lib/zlib/crc32.js\"),o=e(\"./node_modules/pako/lib/zlib/inffast.js\"),r=e(\"./node_modules/pako/lib/zlib/inftrees.js\"),g=-2,n=12,I=30;function l(A){return(A>>>24&255)+(A>>>8&65280)+((65280&A)<<8)+((255&A)<<24)}function B(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new i.Buf16(320),this.work=new i.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function C(A){var t;return A&&A.state?(t=A.state,A.total_in=A.total_out=t.total=0,A.msg=\"\",t.wrap&&(A.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new i.Buf32(852),t.distcode=t.distdyn=new i.Buf32(592),t.sane=1,t.back=-1,0):g}function Q(A){var t;return A&&A.state?((t=A.state).wsize=0,t.whave=0,t.wnext=0,C(A)):g}function E(A,t){var e,i;return A&&A.state?(i=A.state,t<0?(e=0,t=-t):(e=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?g:(null!==i.window&&i.wbits!==t&&(i.window=null),i.wrap=e,i.wbits=t,Q(A))):g}function d(A,t){var e,i;return A?(i=new B,A.state=i,i.window=null,0!==(e=E(A,t))&&(A.state=null),e):g}var h,c,u=!0;function f(A){if(u){var t;for(h=new i.Buf32(512),c=new i.Buf32(32),t=0;t<144;)A.lens[t++]=8;for(;t<256;)A.lens[t++]=9;for(;t<280;)A.lens[t++]=7;for(;t<288;)A.lens[t++]=8;for(r(1,A.lens,0,288,h,0,A.work,{bits:9}),t=0;t<32;)A.lens[t++]=5;r(2,A.lens,0,32,c,0,A.work,{bits:5}),u=!1}A.lencode=h,A.lenbits=9,A.distcode=c,A.distbits=5}function p(A,t,e,a){var s,o=A.state;return null===o.window&&(o.wsize=1<=o.wsize?(i.arraySet(o.window,t,e-o.wsize,o.wsize,0),o.wnext=0,o.whave=o.wsize):((s=o.wsize-o.wnext)>a&&(s=a),i.arraySet(o.window,t,e-a,s,o.wnext),(a-=s)?(i.arraySet(o.window,t,e-a,a,0),o.wnext=a,o.whave=o.wsize):(o.wnext+=s,o.wnext===o.wsize&&(o.wnext=0),o.whave>>8&255,e.check=s(e.check,U,2,0),c=0,u=0,e.mode=2;break}if(e.flags=0,e.head&&(e.head.done=!1),!(1&e.wrap)||(((255&c)<<8)+(c>>8))%31){A.msg=\"incorrect header check\",e.mode=I;break}if(8!=(15&c)){A.msg=\"unknown compression method\",e.mode=I;break}if(u-=4,x=8+(15&(c>>>=4)),0===e.wbits)e.wbits=x;else if(x>e.wbits){A.msg=\"invalid window size\",e.mode=I;break}e.dmax=1<>8&1),512&e.flags&&(U[0]=255&c,U[1]=c>>>8&255,e.check=s(e.check,U,2,0)),c=0,u=0,e.mode=3;case 3:for(;u<32;){if(0===d)break A;d--,c+=B[Q++]<>>8&255,U[2]=c>>>16&255,U[3]=c>>>24&255,e.check=s(e.check,U,4,0)),c=0,u=0,e.mode=4;case 4:for(;u<16;){if(0===d)break A;d--,c+=B[Q++]<>8),512&e.flags&&(U[0]=255&c,U[1]=c>>>8&255,e.check=s(e.check,U,2,0)),c=0,u=0,e.mode=5;case 5:if(1024&e.flags){for(;u<16;){if(0===d)break A;d--,c+=B[Q++]<>>8&255,e.check=s(e.check,U,2,0)),c=0,u=0}else e.head&&(e.head.extra=null);e.mode=6;case 6:if(1024&e.flags&&((y=e.length)>d&&(y=d),y&&(e.head&&(x=e.head.extra_len-e.length,e.head.extra||(e.head.extra=new Array(e.head.extra_len)),i.arraySet(e.head.extra,B,Q,y,x)),512&e.flags&&(e.check=s(e.check,B,y,Q)),d-=y,Q+=y,e.length-=y),e.length))break A;e.length=0,e.mode=7;case 7:if(2048&e.flags){if(0===d)break A;y=0;do{x=B[Q+y++],e.head&&x&&e.length<65536&&(e.head.name+=String.fromCharCode(x))}while(x&&y>9&1,e.head.done=!0),A.adler=e.check=0,e.mode=n;break;case 10:for(;u<32;){if(0===d)break A;d--,c+=B[Q++]<>>=7&u,u-=7&u,e.mode=27;break}for(;u<3;){if(0===d)break A;d--,c+=B[Q++]<>>=1)){case 0:e.mode=14;break;case 1:if(f(e),e.mode=20,6===t){c>>>=2,u-=2;break A}break;case 2:e.mode=17;break;case 3:A.msg=\"invalid block type\",e.mode=I}c>>>=2,u-=2;break;case 14:for(c>>>=7&u,u-=7&u;u<32;){if(0===d)break A;d--,c+=B[Q++]<>>16^65535)){A.msg=\"invalid stored block lengths\",e.mode=I;break}if(e.length=65535&c,c=0,u=0,e.mode=15,6===t)break A;case 15:e.mode=16;case 16:if(y=e.length){if(y>d&&(y=d),y>h&&(y=h),0===y)break A;i.arraySet(C,B,Q,y,E),d-=y,Q+=y,h-=y,E+=y,e.length-=y;break}e.mode=n;break;case 17:for(;u<14;){if(0===d)break A;d--,c+=B[Q++]<>>=5,u-=5,e.ndist=1+(31&c),c>>>=5,u-=5,e.ncode=4+(15&c),c>>>=4,u-=4,e.nlen>286||e.ndist>30){A.msg=\"too many length or distance symbols\",e.mode=I;break}e.have=0,e.mode=18;case 18:for(;e.have>>=3,u-=3}for(;e.have<19;)e.lens[J[e.have++]]=0;if(e.lencode=e.lendyn,e.lenbits=7,L={bits:e.lenbits},S=r(0,e.lens,0,19,e.lencode,0,e.work,L),e.lenbits=L.bits,S){A.msg=\"invalid code lengths set\",e.mode=I;break}e.have=0,e.mode=19;case 19:for(;e.have>>16&255,F=65535&M,!((b=M>>>24)<=u);){if(0===d)break A;d--,c+=B[Q++]<>>=b,u-=b,e.lens[e.have++]=F;else{if(16===F){for(R=b+2;u>>=b,u-=b,0===e.have){A.msg=\"invalid bit length repeat\",e.mode=I;break}x=e.lens[e.have-1],y=3+(3&c),c>>>=2,u-=2}else if(17===F){for(R=b+3;u>>=b)),c>>>=3,u-=3}else{for(R=b+7;u>>=b)),c>>>=7,u-=7}if(e.have+y>e.nlen+e.ndist){A.msg=\"invalid bit length repeat\",e.mode=I;break}for(;y--;)e.lens[e.have++]=x}}if(e.mode===I)break;if(0===e.lens[256]){A.msg=\"invalid code -- missing end-of-block\",e.mode=I;break}if(e.lenbits=9,L={bits:e.lenbits},S=r(1,e.lens,0,e.nlen,e.lencode,0,e.work,L),e.lenbits=L.bits,S){A.msg=\"invalid literal/lengths set\",e.mode=I;break}if(e.distbits=6,e.distcode=e.distdyn,L={bits:e.distbits},S=r(2,e.lens,e.nlen,e.ndist,e.distcode,0,e.work,L),e.distbits=L.bits,S){A.msg=\"invalid distances set\",e.mode=I;break}if(e.mode=20,6===t)break A;case 20:e.mode=21;case 21:if(d>=6&&h>=258){A.next_out=E,A.avail_out=h,A.next_in=Q,A.avail_in=d,e.hold=c,e.bits=u,o(A,m),E=A.next_out,C=A.output,h=A.avail_out,Q=A.next_in,B=A.input,d=A.avail_in,c=e.hold,u=e.bits,e.mode===n&&(e.back=-1);break}for(e.back=0;k=(M=e.lencode[c&(1<>>16&255,F=65535&M,!((b=M>>>24)<=u);){if(0===d)break A;d--,c+=B[Q++]<>v)])>>>16&255,F=65535&M,!(v+(b=M>>>24)<=u);){if(0===d)break A;d--,c+=B[Q++]<>>=v,u-=v,e.back+=v}if(c>>>=b,u-=b,e.back+=b,e.length=F,0===k){e.mode=26;break}if(32&k){e.back=-1,e.mode=n;break}if(64&k){A.msg=\"invalid literal/length code\",e.mode=I;break}e.extra=15&k,e.mode=22;case 22:if(e.extra){for(R=e.extra;u>>=e.extra,u-=e.extra,e.back+=e.extra}e.was=e.length,e.mode=23;case 23:for(;k=(M=e.distcode[c&(1<>>16&255,F=65535&M,!((b=M>>>24)<=u);){if(0===d)break A;d--,c+=B[Q++]<>v)])>>>16&255,F=65535&M,!(v+(b=M>>>24)<=u);){if(0===d)break A;d--,c+=B[Q++]<>>=v,u-=v,e.back+=v}if(c>>>=b,u-=b,e.back+=b,64&k){A.msg=\"invalid distance code\",e.mode=I;break}e.offset=F,e.extra=15&k,e.mode=24;case 24:if(e.extra){for(R=e.extra;u>>=e.extra,u-=e.extra,e.back+=e.extra}if(e.offset>e.dmax){A.msg=\"invalid distance too far back\",e.mode=I;break}e.mode=25;case 25:if(0===h)break A;if(y=m-h,e.offset>y){if((y=e.offset-y)>e.whave&&e.sane){A.msg=\"invalid distance too far back\",e.mode=I;break}y>e.wnext?(y-=e.wnext,D=e.wsize-y):D=e.wnext-y,y>e.length&&(y=e.length),_=e.window}else _=C,D=E-e.offset,y=e.length;y>h&&(y=h),h-=y,e.length-=y;do{C[E++]=_[D++]}while(--y);0===e.length&&(e.mode=21);break;case 26:if(0===h)break A;C[E++]=e.length,h--,e.mode=21;break;case 27:if(e.wrap){for(;u<32;){if(0===d)break A;d--,c|=B[Q++]<{\"use strict\";var i=e(\"./node_modules/pako/lib/utils/common.js\"),a=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],s=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],o=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],r=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];A.exports=function(A,t,e,g,n,I,l,B){var C,Q,E,d,h,c,u,f,p,w=B.bits,m=0,y=0,D=0,_=0,b=0,k=0,F=0,v=0,G=0,N=0,x=null,S=0,L=new i.Buf16(16),R=new i.Buf16(16),M=null,U=0;for(m=0;m<=15;m++)L[m]=0;for(y=0;y=1&&0===L[_];_--);if(b>_&&(b=_),0===_)return n[I++]=20971520,n[I++]=20971520,B.bits=1,0;for(D=1;D<_&&0===L[D];D++);for(b0&&(0===A||1!==_))return-1;for(R[1]=0,m=1;m<15;m++)R[m+1]=R[m]+L[m];for(y=0;y852||2===A&&G>592)return 1;for(;;){u=m-F,l[y]c?(f=M[U+l[y]],p=x[S+l[y]]):(f=96,p=0),C=1<>F)+(Q-=C)]=u<<24|f<<16|p|0}while(0!==Q);for(C=1<>=1;if(0!==C?(N&=C-1,N+=C):N=0,y++,0==--L[m]){if(m===_)break;m=t[e+l[y]]}if(m>b&&(N&d)!==E){for(0===F&&(F=b),h+=D,v=1<<(k=m-F);k+F<_&&!((v-=L[k+F])<=0);)k++,v<<=1;if(G+=1<852||2===A&&G>592)return 1;n[E=N&d]=b<<24|k<<16|h-I|0}}return 0!==N&&(n[h+N]=m-F<<24|64<<16|0),B.bits=b,0}},\"./node_modules/pako/lib/zlib/messages.js\":A=>{\"use strict\";A.exports={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"}},\"./node_modules/pako/lib/zlib/trees.js\":(A,t,e)=>{\"use strict\";var i=e(\"./node_modules/pako/lib/utils/common.js\");function a(A){for(var t=A.length;--t>=0;)A[t]=0}var s=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],o=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],r=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],g=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],n=new Array(576);a(n);var I=new Array(60);a(I);var l=new Array(512);a(l);var B=new Array(256);a(B);var C=new Array(29);a(C);var Q,E,d,h=new Array(30);function c(A,t,e,i,a){this.static_tree=A,this.extra_bits=t,this.extra_base=e,this.elems=i,this.max_length=a,this.has_stree=A&&A.length}function u(A,t){this.dyn_tree=A,this.max_code=0,this.stat_desc=t}function f(A){return A<256?l[A]:l[256+(A>>>7)]}function p(A,t){A.pending_buf[A.pending++]=255&t,A.pending_buf[A.pending++]=t>>>8&255}function w(A,t,e){A.bi_valid>16-e?(A.bi_buf|=t<>16-A.bi_valid,A.bi_valid+=e-16):(A.bi_buf|=t<>>=1,e<<=1}while(--t>0);return e>>>1}function D(A,t,e){var i,a,s=new Array(16),o=0;for(i=1;i<=15;i++)s[i]=o=o+e[i-1]<<1;for(a=0;a<=t;a++){var r=A[2*a+1];0!==r&&(A[2*a]=y(s[r]++,r))}}function _(A){var t;for(t=0;t<286;t++)A.dyn_ltree[2*t]=0;for(t=0;t<30;t++)A.dyn_dtree[2*t]=0;for(t=0;t<19;t++)A.bl_tree[2*t]=0;A.dyn_ltree[512]=1,A.opt_len=A.static_len=0,A.last_lit=A.matches=0}function b(A){A.bi_valid>8?p(A,A.bi_buf):A.bi_valid>0&&(A.pending_buf[A.pending++]=A.bi_buf),A.bi_buf=0,A.bi_valid=0}function k(A,t,e,i){var a=2*t,s=2*e;return A[a]>1;e>=1;e--)F(A,s,e);a=g;do{e=A.heap[1],A.heap[1]=A.heap[A.heap_len--],F(A,s,1),i=A.heap[1],A.heap[--A.heap_max]=e,A.heap[--A.heap_max]=i,s[2*a]=s[2*e]+s[2*i],A.depth[a]=(A.depth[e]>=A.depth[i]?A.depth[e]:A.depth[i])+1,s[2*e+1]=s[2*i+1]=a,A.heap[1]=a++,F(A,s,1)}while(A.heap_len>=2);A.heap[--A.heap_max]=A.heap[1],function(A,t){var e,i,a,s,o,r,g=t.dyn_tree,n=t.max_code,I=t.stat_desc.static_tree,l=t.stat_desc.has_stree,B=t.stat_desc.extra_bits,C=t.stat_desc.extra_base,Q=t.stat_desc.max_length,E=0;for(s=0;s<=15;s++)A.bl_count[s]=0;for(g[2*A.heap[A.heap_max]+1]=0,e=A.heap_max+1;e<573;e++)(s=g[2*g[2*(i=A.heap[e])+1]+1]+1)>Q&&(s=Q,E++),g[2*i+1]=s,i>n||(A.bl_count[s]++,o=0,i>=C&&(o=B[i-C]),r=g[2*i],A.opt_len+=r*(s+o),l&&(A.static_len+=r*(I[2*i+1]+o)));if(0!==E){do{for(s=Q-1;0===A.bl_count[s];)s--;A.bl_count[s]--,A.bl_count[s+1]+=2,A.bl_count[Q]--,E-=2}while(E>0);for(s=Q;0!==s;s--)for(i=A.bl_count[s];0!==i;)(a=A.heap[--e])>n||(g[2*a+1]!==s&&(A.opt_len+=(s-g[2*a+1])*g[2*a],g[2*a+1]=s),i--)}}(A,t),D(s,n,A.bl_count)}function N(A,t,e){var i,a,s=-1,o=t[1],r=0,g=7,n=4;for(0===o&&(g=138,n=3),t[2*(e+1)+1]=65535,i=0;i<=e;i++)a=o,o=t[2*(i+1)+1],++r>=7;i<30;i++)for(h[i]=a<<7,A=0;A<1<0?(2===A.strm.data_type&&(A.strm.data_type=function(A){var t,e=4093624447;for(t=0;t<=31;t++,e>>>=1)if(1&e&&0!==A.dyn_ltree[2*t])return 0;if(0!==A.dyn_ltree[18]||0!==A.dyn_ltree[20]||0!==A.dyn_ltree[26])return 1;for(t=32;t<256;t++)if(0!==A.dyn_ltree[2*t])return 1;return 0}(A)),G(A,A.l_desc),G(A,A.d_desc),o=function(A){var t;for(N(A,A.dyn_ltree,A.l_desc.max_code),N(A,A.dyn_dtree,A.d_desc.max_code),G(A,A.bl_desc),t=18;t>=3&&0===A.bl_tree[2*g[t]+1];t--);return A.opt_len+=3*(t+1)+5+5+4,t}(A),a=A.opt_len+3+7>>>3,(s=A.static_len+3+7>>>3)<=a&&(a=s)):a=s=e+5,e+4<=a&&-1!==t?L(A,t,e,i):4===A.strategy||s===a?(w(A,2+(i?1:0),3),v(A,n,I)):(w(A,4+(i?1:0),3),function(A,t,e,i){var a;for(w(A,t-257,5),w(A,e-1,5),w(A,i-4,4),a=0;a>>8&255,A.pending_buf[A.d_buf+2*A.last_lit+1]=255&t,A.pending_buf[A.l_buf+A.last_lit]=255&e,A.last_lit++,0===t?A.dyn_ltree[2*e]++:(A.matches++,t--,A.dyn_ltree[2*(B[e]+256+1)]++,A.dyn_dtree[2*f(t)]++),A.last_lit===A.lit_bufsize-1},t._tr_align=function(A){w(A,2,3),m(A,256,n),function(A){16===A.bi_valid?(p(A,A.bi_buf),A.bi_buf=0,A.bi_valid=0):A.bi_valid>=8&&(A.pending_buf[A.pending++]=255&A.bi_buf,A.bi_buf>>=8,A.bi_valid-=8)}(A)}},\"./node_modules/pako/lib/zlib/zstream.js\":A=>{\"use strict\";A.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},\"./node_modules/strnum/strnum.js\":A=>{const t=/^[-+]?0x[a-fA-F0-9]+$/,e=/^([\\-\\+])?(0*)(\\.[0-9]+([eE]\\-?[0-9]+)?|[0-9]+(\\.[0-9]+([eE]\\-?[0-9]+)?)?)$/,i={hex:!0,leadingZeros:!0,decimalPoint:\".\"};A.exports=function(A,a={}){if(a=Object.assign({},i,a),!A||\"string\"!=typeof A)return A;let s=A.trim();if(void 0!==a.skipLike&&a.skipLike.test(s))return A;if(a.hex&&t.test(s))return Number.parseInt(s,16);{const t=e.exec(s);if(t){t[1];const e=t[2],i=t[3];return t[4]||t[6],1===e.length&&\".\"===i[0]?Number(A):!a.leadingZeros&&e.length>0?A:Number(s)}return A}}},\"./src/index.ts\":(A,t,e)=>{\"use strict\";e.r(t),e.d(t,{FLIPPED_DIAGONALLY_FLAG:()=>o.FLIPPED_DIAGONALLY_FLAG,FLIPPED_HORIZONTALLY_FLAG:()=>o.FLIPPED_HORIZONTALLY_FLAG,FLIPPED_VERTICALLY_FLAG:()=>o.FLIPPED_VERTICALLY_FLAG,TiledEntity:()=>s.TiledEntity,TiledLayer:()=>o.TiledLayer,TiledLayerComponent:()=>I.TiledLayerComponent,TiledMap:()=>a.TiledMap,TiledMapFormat:()=>i.TiledMapFormat,TiledMapResource:()=>i.TiledMapResource,TiledObject:()=>r.TiledObject,TiledObjectComponent:()=>n.TiledObjectComponent,TiledObjectGroup:()=>r.TiledObjectGroup,TiledTileset:()=>g.TiledTileset,TiledTilesetTile:()=>g.TiledTilesetTile,getCanonicalGid:()=>o.getCanonicalGid,getProperty:()=>s.getProperty,isFlippedDiagonally:()=>o.isFlippedDiagonally,isFlippedHorizontally:()=>o.isFlippedHorizontally,isFlippedVertically:()=>o.isFlippedVertically,parseExternalJson:()=>g.parseExternalJson,parseExternalTsx:()=>g.parseExternalTsx}),e(\"./src/tiled-types.ts\");var i=e(\"./src/tiled-map-resource.ts\"),a=e(\"./src/tiled-map-parser.ts\"),s=e(\"./src/tiled-entity.ts\"),o=e(\"./src/tiled-layer.ts\"),r=e(\"./src/tiled-object.ts\"),g=e(\"./src/tiled-tileset.ts\"),n=e(\"./src/tiled-object-component.ts\"),I=e(\"./src/tiled-layer-component.ts\");e(\"./src/raw-tiled-layer.ts\"),e(\"./src/raw-tiled-map.ts\"),e(\"./src/raw-tiled-object.ts\"),e(\"./src/raw-tiled-text.ts\"),e(\"./src/raw-tiled-tileset.ts\"),e(\"./src/raw-tileset-tile.ts\")},\"./src/raw-tiled-layer.ts\":(A,t,e)=>{\"use strict\";e.r(t)},\"./src/raw-tiled-map.ts\":(A,t,e)=>{\"use strict\";e.r(t)},\"./src/raw-tiled-object.ts\":(A,t,e)=>{\"use strict\";e.r(t)},\"./src/raw-tiled-text.ts\":(A,t,e)=>{\"use strict\";e.r(t)},\"./src/raw-tiled-tileset.ts\":(A,t,e)=>{\"use strict\";e.r(t)},\"./src/raw-tileset-tile.ts\":(A,t,e)=>{\"use strict\";e.r(t)},\"./src/tiled-entity.ts\":(A,t,e)=>{\"use strict\";e.r(t),e.d(t,{TiledEntity:()=>a,getProperty:()=>i});const i=(A,t)=>{if(Array.isArray(A))return null==A?void 0:A.filter((A=>{var e;return(null===(e=A.name)||void 0===e?void 0:e.toLocaleLowerCase())===t.toLocaleLowerCase()}))[0]};class a{constructor(){this.properties=[]}getProperty(A){return i(this.properties,A)}}},\"./src/tiled-layer-component.ts\":(A,t,e)=>{\"use strict\";e.r(t),e.d(t,{TiledLayerComponent:()=>a});var i=e(\"excalibur\");class a extends i.Component{constructor(A){super(),this.layer=A,this.type=\"ex.tiledlayer\"}}},\"./src/tiled-layer.ts\":(A,t,e)=>{\"use strict\";e.r(t),e.d(t,{FLIPPED_DIAGONALLY_FLAG:()=>r,FLIPPED_HORIZONTALLY_FLAG:()=>s,FLIPPED_VERTICALLY_FLAG:()=>o,TiledLayer:()=>B,getCanonicalGid:()=>l,isFlippedDiagonally:()=>I,isFlippedHorizontally:()=>g,isFlippedVertically:()=>n});var i=e(\"./src/tiled-entity.ts\"),a=e(\"excalibur\");const s=2147483648,o=1073741824,r=536870912,g=A=>!!(A&s),n=A=>!!(A&o),I=A=>!!(A&r),l=A=>A&~(s|o|r);class B extends i.TiledEntity{constructor(){super(...arguments),this.offset=a.Vector.Zero,this.parallaxFactor=null,this.encoding=\"csv\"}static parse(A){var t,e,i,s,o,r;if(\"tilelayer\"!==A.type)throw Error(\"Cannot parse a non tilelayer type layer\");const g=new B;return g.id=+A.id,g.name=A.name,g.data=A.data,g.offset=(0,a.vec)(null!==(t=A.offsetx)&&void 0!==t?t:0,null!==(e=A.offsety)&&void 0!==e?e:0),g.parallaxFactor=A.parallaxx||A.parallaxy?(0,a.vec)(null!==(i=A.parallaxx)&&void 0!==i?i:1,null!==(s=A.parallaxy)&&void 0!==s?s:1):null,g.width=A.width,g.height=A.height,g.encoding=null!==(o=A.encoding)&&void 0!==o?o:\"csv\",g.compression=A.compression,g.order=A.order,g.properties=null!==(r=A.properties)&&void 0!==r?r:[],g.rawLayer=A,g}}},\"./src/tiled-map-parser.ts\":(A,t,e)=>{\"use strict\";e.r(t),e.d(t,{TiledMap:()=>I});var i=e(\"./node_modules/fast-xml-parser/src/parser.js\"),a=e(\"./node_modules/pako/index.js\"),s=e(\"./node_modules/zstddec/dist/zstddec.modern.js\"),o=e(\"./src/tiled-layer.ts\"),r=e(\"./src/tiled-object.ts\"),g=e(\"./src/tiled-tileset.ts\"),n=function(A,t,e,i){return new(e||(e=Promise))((function(a,s){function o(A){try{g(i.next(A))}catch(A){s(A)}}function r(A){try{g(i.throw(A))}catch(A){s(A)}}function g(A){var t;A.done?a(A.value):(t=A.value,t instanceof e?t:new e((function(A){A(t)}))).then(o,r)}g((i=i.apply(A,t||[])).next())}))};class I{constructor(){this.layers=[],this.tileSets=[],this.objectGroups=[]}getExcaliburObjects(){return this.getObjectLayerByProperty(\"excalibur\",!0)}getObjectLayerByName(A){return this.objectGroups.filter((t=>t.name===A))[0]}getObjectLayerByProperty(A,t){return this.objectGroups.filter((e=>{var i;return(null===(i=e.getProperty(A))||void 0===i?void 0:i.value)===t}))}getTileLayerByName(A){return this.layers.filter((t=>t.name===A))[0]}getTileLayersByProperty(A,t){return this.layers.filter((e=>{var i;return(null===(i=e.getProperty(A))||void 0===i?void 0:i.value)===t}))}static fromTmx(A){var t,e,a,s,o,r,g,l,B,C,Q,E,d,h,c,u;return n(this,void 0,void 0,(function*(){const n=(A,t,e=!1)=>{A[t]?(A[t+(e?\"s\":\"\")]=Array.isArray(A[t])?A[t]:[A[t]],e&&delete A[t]):A[t+(e?\"s\":\"\")]=[]},f=i.parse(A,{attributeNamePrefix:\"\",textNodeName:\"#text\",ignoreAttributes:!1,ignoreNameSpace:!1,allowBooleanAttributes:!0,parseNodeValue:!0,parseAttributeValue:!0,trimValues:!0,parseTrueNumberOnly:!1,arrayMode:!1,stopNodes:[\"parse-me-as-string\"]}).map;n(f,\"layer\",!0);for(let A of f.layers)A.type=null!==(t=A.type)&&void 0!==t?t:\"tilelayer\",A.encoding=A.data.encoding,A.compression=A.data.compression,\"csv\"===A.encoding?A.data=A.data[\"#text\"].split(\",\").map((A=>+A)):A.data=A.data[\"#text\"],A.properties=null!==(a=null===(e=A.properties)||void 0===e?void 0:e.property)&&void 0!==a?a:[],n(A,\"properties\");f.objectgroup=null!==(s=f.objectgroup)&&void 0!==s?s:[];let p=Array.isArray(f.objectgroup)?f.objectgroup:[f.objectgroup];for(let A of p){A.type=null!==(o=A.type)&&void 0!==o?o:\"objectgroup\",A.objects=Array.isArray(A.object)?A.object:[A.object],A.objects.forEach((A=>{var t,e;return A.properties=null!==(e=null===(t=A.properties)||void 0===t?void 0:t.property)&&void 0!==e?e:[]})),A.objects.forEach((A=>n(A,\"properties\"))),A.properties=null!==(g=null===(r=A.properties)||void 0===r?void 0:r.property)&&void 0!==g?g:[],n(A,\"properties\"),delete A.object;for(let t of A.objects)t.text&&(t.text.text=t.text[\"#text\"],t.text.halign=null!==(l=t.text.halign)&&void 0!==l?l:\"left\",t.text.valign=null!==(B=t.text.valign)&&void 0!==B?B:\"top\",t.text.fontfamily=null!==(C=t.text.fontfamily)&&void 0!==C?C:\"sans-serif\",t.text.pixelsize=+(null!==(Q=t.text.pixelsize)&&void 0!==Q?Q:16),t.text.kerning=!!t.text.kerning,t.text.italic=!!t.text.italic,t.text.bold=!!t.text.bold,t.text.underline=!!t.text.underline,t.text.strikeout=!!t.text.strikeout,t.text.color=null!==(E=t.text.color)&&void 0!==E?E:\"#000000\"),\"\"===t.point&&(t.point=!0),\"\"===t.ellipse&&(t.ellipse=!0),t.polyline&&(t.polyline=t.polyline.points.split(\" \").map((A=>{const t=A.split(\",\");return{x:+t[0],y:+t[1]}}))),t.polygon&&(t.polygon=t.polygon.points.split(\" \").map((A=>{const t=A.split(\",\");return{x:+t[0],y:+t[1]}})));f.layers.push(A)}delete f.objectgroup,n(f,\"imagelayer\",!0);for(let A of f.imagelayers)A.type=null!==(d=A.type)&&void 0!==d?d:\"imagelayer\",A.image=A.image.source,A.properties=null!==(c=null===(h=A.properties)||void 0===h?void 0:h.property)&&void 0!==c?c:[],n(A,\"properties\"),f.layers.push(A);delete f.imagelayer,n(f,\"tileset\",!0);for(let A of f.tilesets)A.source||(A.image&&(A.imagewidth=A.image.width,A.imageheight=A.image.height,A.image=A.image.source),A.objectalignment=null!==(u=A.objectalignment)&&void 0!==u?u:\"unspecified\",n(A,\"tile\",!0),A.tiles.forEach((A=>{var t;(null===(t=A.image)||void 0===t?void 0:t.source)&&(A.image=A.image.source),A.objectgroup&&(A.objectgroup.type=\"objectgroup\",n(A.objectgroup,\"object\",!0))})));return yield I._fromRawTiledMap(f)}))}static fromJson(A){return n(this,void 0,void 0,(function*(){return yield I._fromRawTiledMap(A)}))}static _fromRawTiledMap(A){return n(this,void 0,void 0,(function*(){yield I._decompresslayers(A);const t=new I;t.orientation=A.orientation,t.rawMap=A,t.width=+A.width,t.height=+A.height,t.tileWidth=+A.tilewidth,t.tileHeight=+A.tileheight,l(A);for(let e of A.layers)\"tilelayer\"==e.type&&t.layers.push(o.TiledLayer.parse(e)),\"objectgroup\"==e.type&&t.objectGroups.push(r.TiledObjectGroup.parse(e));for(let e of A.tilesets)e.source||t.tileSets.push(g.TiledTileset.parse(e));return t}))}static _decompresslayers(A){var t;return n(this,void 0,void 0,(function*(){if(A.layers)for(var e of A.layers)\"string\"==typeof e.data?\"base64\"===e.encoding&&(e.data=yield B.decompressBase64(e.data,e.encoding,null!==(t=e.compression)&&void 0!==t?t:\"\")):e.data=B.decompressCsv(e.data);return A}))}}const l=A=>{let t=0;for(let e of A.layers)e.order=t++},B={decompressCsv:A=>A,decompressBase64:(A,t,e)=>{var i,o,r,g,n,I;if(A.length%4>0)throw new Error(\"Invalid string. Length must be a multiple of 4\");var l=\"+\".charCodeAt(0),B=\"/\".charCodeAt(0),C=\"0\".charCodeAt(0),Q=\"a\".charCodeAt(0),E=\"A\".charCodeAt(0),d=\"-\".charCodeAt(0),h=\"_\".charCodeAt(0);function c(A){var t=A.charCodeAt(0);if(t===l||t===d)return 62;if(t===B||t===h)return 63;if(t0?A.length-4:A.length;var f=0;function p(A){I[f++]=A}for(i=0,o=0;i>16),p((65280&g)>>8),p(255&g);return 2===n?p(255&(g=c(A.charAt(i))<<2|c(A.charAt(i+1))>>4)):1===n&&(p((g=c(A.charAt(i))<<10|c(A.charAt(i+1))<<4|c(A.charAt(i+2))>>2)>>8&255),p(255&g)),new Promise((A=>{const t=function(A){for(var t=0,e=A.length-1;e>=0;e--)t=256*t+1*A[e];return t};if(\"zlib\"===e||\"gzip\"===e){var o=(I=(0,a.inflate)(I)).length/4,r=new Array(o);for(i=0;i{var a=(I=e.decode(I)).length/4,s=new Array(a);for(i=0;i{\"use strict\";e.r(t),e.d(t,{TiledMapFormat:()=>i,TiledMapResource:()=>B});var i,a=e(\"excalibur\"),s=e(\"./src/tiled-map-parser.ts\"),o=e(\"./src/tiled-tileset.ts\"),r=e(\"./src/tiled-layer.ts\"),g=e(\"./src/tiled-entity.ts\"),n=e(\"./src/tiled-object-component.ts\"),I=e(\"./src/tiled-layer-component.ts\"),l=function(A,t,e,i){return new(e||(e=Promise))((function(a,s){function o(A){try{g(i.next(A))}catch(A){s(A)}}function r(A){try{g(i.throw(A))}catch(A){s(A)}}function g(A){var t;A.done?a(A.value):(t=A.value,t instanceof e?t:new e((function(A){A(t)}))).then(o,r)}g((i=i.apply(A,t||[])).next())}))};!function(A){A.TMX=\"TMX\",A.JSON=\"JSON\"}(i||(i={}));class B{constructor(A,t){this.path=A,this.layers=[],this.isoLayers=[],this._layerZIndexStart=-1,this._mapToRawLayer=new Map;const{mapFormatOverride:e,startingLayerZIndex:s}=Object.assign({},t);this._layerZIndexStart=null!=s?s:this._layerZIndexStart;const o=null!=e?e:A.includes(\".tmx\")?i.TMX:i.JSON;switch(o){case i.TMX:this._resource=new a.Resource(A,\"text\");break;case i.JSON:this._resource=new a.Resource(A,\"json\");break;default:throw`The format ${o} is not currently supported. Please export Tiled map as JSON.`}this.mapFormat=o,this.ex={},this.imageMap={},this.sheetMap={},this.tileImageMap={},this.convertPath=(A,t)=>{if(0===t.indexOf(\"/\"))return t;const e=A.split(\"/\"),i=t.split(\"/\");return e[e.length-1].includes(\".\")&&e.pop(),e.concat(i).join(\"/\")}}_addTiledCamera(A){const t=this.ex.camera;t&&(A.camera.x=t.x,A.camera.y=t.y,A.camera.zoom=t.zoom)}_addTiledColliders(A){var t;const e=this.ex.colliders;if(e)for(let i of e){const e=new a.Actor({pos:(0,a.vec)(i.x,i.y),name:i.name,collisionType:null!==(t=i.collisionType)&&void 0!==t?t:a.CollisionType.Fixed});i.color&&(e.color=a.Color.fromHex(i.color.value)),\"box\"===i.type&&e.collider.useBoxCollider(i.width,i.height,a.Vector.Zero),\"circle\"===i.type&&e.collider.useCircleCollider(i.radius),e.addComponent(new n.TiledObjectComponent(i.tiled)),A.add(e),i.zIndex&&(e.z=i.zIndex)}}_addTiledText(A){var t,e,i,s,o,r,g,I,l,B,C,Q;const E=null===(t=this.data)||void 0===t?void 0:t.getExcaliburObjects();if(E.length>0)for(const t of E){const E=t.getText();for(const d of E){const E=new a.Label({x:d.x,y:d.y+((null!==(e=d.height)&&void 0!==e?e:0)-(null!==(s=null===(i=d.text)||void 0===i?void 0:i.pixelSize)&&void 0!==s?s:0)),text:null!==(r=null===(o=d.text)||void 0===o?void 0:o.text)&&void 0!==r?r:\"\",name:this._getEntityName(d),font:new a.Font({family:null===(g=d.text)||void 0===g?void 0:g.fontFamily,size:null===(I=d.text)||void 0===I?void 0:I.pixelSize,unit:a.FontUnit.Px})});E.font.textAlign=a.TextAlign.Left,E.font.baseAlign=a.BaseAlign.Top,E.rotation=d.rotation,E.color=a.Color.fromHex(null!==(B=null===(l=d.text)||void 0===l?void 0:l.color)&&void 0!==B?B:\"#000000\"),E.collider.set(a.Shape.Box(null!==(C=d.width)&&void 0!==C?C:0,null!==(Q=d.height)&&void 0!==Q?Q:0)),E.addComponent(new n.TiledObjectComponent(d)),A.add(E),E.z=this._calculateZIndex(d,t)}}}_addTiledInsertedTiles(A){var t;const e=null===(t=this.data)||void 0===t?void 0:t.getExcaliburObjects();if(e.length>0)for(const t of e){const e=t.getInsertedTiles();for(const i of e){const e=i.getProperty(\"collisionType\");let s=a.CollisionType.PreventCollision;if(e&&(s=e.value),i.gid){const e=this.getSpriteForGid(i.gid),o=this.getCollidersForGid(i.gid),r=new a.Actor({x:i.x,y:i.y,width:i.width,height:i.height,anchor:(0,a.vec)(0,1),rotation:i.rotation,collisionType:s,name:this._getEntityName(i)});o.length&&(r.collider.clear(),r.collider.set(new a.CompositeCollider(o))),r.addComponent(new n.TiledObjectComponent(i)),r.graphics.anchor=(0,a.vec)(0,1),r.graphics.use(e),A.add(r),r.z=this._calculateZIndex(i,t)}}}}useSolidLayers(){var A,t,e;let i=this.getTileMapLayers();i=i.concat(this.isoLayers);for(const a of i){const i=this._mapToRawLayer.get(a);if(i&&null!==(t=null===(A=(0,g.getProperty)(i.properties,\"solid\"))||void 0===A?void 0:A.value)&&void 0!==t&&t)for(let A=0;A0){B.camera=null===(t=l.find((A=>A.getObjectByClass(\"camera\"))))||void 0===t?void 0:t.getCamera(),B.colliders=[];for(let A of l){const t=A.getObjectsByClass(\"boxcollider\");for(let o of t){const t=o.getProperty(\"collisiontype\"),r=o.getProperty(\"color\"),g=this._calculateZIndex(o,A);B.colliders.push(Object.assign(Object.assign({},o),{width:+(null!==(e=o.width)&&void 0!==e?e:0),height:+(null!==(i=o.height)&&void 0!==i?i:0),collisionType:null!==(s=null==t?void 0:t.value)&&void 0!==s?s:a.CollisionType.Fixed,color:r,zIndex:g,radius:0,type:\"box\",tiled:o,name:this._getEntityName(o)}))}const l=A.getObjectsByClass(\"circlecollider\");for(let t of l){const e=t.getProperty(\"collisiontype\"),i=t.getProperty(\"color\"),s=this._calculateZIndex(t,A);B.colliders.push({x:t.x,y:t.y,radius:Math.max(null!==(o=t.width)&&void 0!==o?o:0,null!==(r=t.height)&&void 0!==r?r:0),collisionType:null!==(g=null==e?void 0:e.value)&&void 0!==g?g:a.CollisionType.Fixed,color:i,zIndex:s,width:null!==(n=t.width)&&void 0!==n?n:0,height:null!==(I=t.height)&&void 0!==I?I:0,type:\"circle\",tiled:t,name:this._getEntityName(t)})}}}this.ex=B}isLoaded(){return!!this.data}load(){return l(this,void 0,void 0,(function*(){const A=yield this._resource.load(),t=yield this._importMapData(A);let e=[];return t.rawMap.tilesets.forEach((A=>{if(A.source){const s=A.source.includes(\".tsx\")?\"text\":\"json\";var i=new a.Resource(this.convertPath(this.path,A.source),s);e.push(i.load().then((e=>{e=\"text\"===s?(0,o.parseExternalTsx)(e,A.firstgid,A.source):(0,o.parseExternalJson)(e,A.firstgid,A.source),Object.assign(A,e),t.tileSets.push(e)}),(()=>{a.Logger.getInstance().error(`[Tiled] Error loading external tileset file ${i.path}`)})))}})),yield Promise.all(e).then((()=>{let A=[];return t.rawMap.tilesets.forEach((t=>{let e=[];if(t.image){e=t.source?[this.convertPath(t.source,t.image)]:[this.convertPath(this.path,t.image)];for(let i of e){const e=new a.ImageSource(i);this.imageMap[t.firstgid]=e,A.push(e.load()),a.Logger.getInstance().debug(\"[Tiled] Loading associated tileset image: \"+t.image)}}else for(let e of t.tiles){let i;i=t.source?this.convertPath(t.source,e.image):this.convertPath(this.path,e.image);const s=new a.ImageSource(i);A.push(s.load()),this.tileImageMap[t.firstgid]||(this.tileImageMap[t.firstgid]=[]),this.tileImageMap[t.firstgid].push([e,s]),a.Logger.getInstance().debug(\"[Tiled] Loading associated tileset image: \"+i)}})),Promise.all(A).then((()=>{this._createTileMap()}),(()=>{a.Logger.getInstance().error(\"[Tiled] Error loading tileset images\")}))})),this._parseExcaliburInfo(),t}))}_importMapData(A){return l(this,void 0,void 0,(function*(){if(void 0===A)throw`Tiled map resource ${this.path} is empty`;switch(this.mapFormat){case i.TMX:return this.data=yield s.TiledMap.fromTmx(A);case i.JSON:return this.data=yield s.TiledMap.fromJson(A);default:throw new Error(\"Unknown map format: \"+this.mapFormat)}}))}getTilesetForTile(A){if(this.data)for(var t=this.data.tileSets.length-1;t>=0;t--){var e=this.data.tileSets[t];if(A>=e.firstGid&&A<=e.firstGid+e.tileCount-1)return e}throw Error(`No tileset exists for tiled gid [${A}]!`)}getSpriteForGid(A){const t=(0,r.isFlippedHorizontally)(A),e=(0,r.isFlippedVertically)(A),i=(0,r.isFlippedDiagonally)(A),s=(0,r.getCanonicalGid)(A),o=this.getTilesetForTile(s),g=s-o.firstGid,n=this.sheetMap[o.firstGid.toString()];if(n){let A=n.sprites[g];return(i||t||e)&&(A=A.clone()),i&&(A.rotation=-Math.PI/2,A.scale=(0,a.vec)(-1,1)),t&&(A.scale=(0,a.vec)((i?1:-1)*A.scale.x,(i?-1:1)*A.scale.y)),e&&(A.scale=(0,a.vec)((i?-1:1)*A.scale.x,(i?1:-1)*A.scale.y)),A}throw new Error(`Could not find sprite for gid: [${A}] normalized gid: [${s}]`)}_transformPoints(A,t,e){const i=(0,r.isFlippedHorizontally)(e),a=(0,r.isFlippedVertically)(e);return(0,r.isFlippedDiagonally)(e)&&(A=A.map((A=>t.diagonalFlipTransform.multiply(A)))),i&&(A=A.map((A=>t.horizontalFlipTransform.multiply(A)))),a&&(A=A.map((A=>t.verticalFlipTransform.multiply(A)))),A}getCollidersForGid(A){const t=(0,r.getCanonicalGid)(A),e=this.getTilesetForTile(t),i=t-e.firstGid,s=e.tiles.find((A=>A.id===i));if(s&&s.objectgroup){const t=[];for(const i of s.objectgroup.getPolygons()){const s=(0,a.vec)(i.x,i.y),o=i.polygon.points.split(\" \").map((A=>{const t=A.split(\",\");return(0,a.vec)(Number.parseFloat(t[0]),Number.parseFloat(t[1])).add(s)})),r=a.Shape.Polygon(o);r.points=this._transformPoints(r.points,e,A),t.push(r)}for(const i of s.objectgroup.getBoxes()){const s=a.Shape.Box(i.width,i.height,a.Vector.Zero);s.points=s.points.map((A=>A.add((0,a.vec)(i.x,i.y)))),s.points=this._transformPoints(s.points,e,A),t.push(s)}for(const A of s.objectgroup.getEllipses()){const e=a.Shape.Circle(Math.min(A.width/2,A.height/2),(0,a.vec)(A.width/2,A.height/2).add((0,a.vec)(A.x,A.y)));t.push(e)}return t}return[]}getAnimationForGid(A){const t=(0,r.getCanonicalGid)(A),e=this.getTilesetForTile(t),i=t-e.firstGid,a=e.tiles.find((A=>A.id===i));return a&&a.hasAnimation()?a.getAnimation(this):null}_calculateZIndex(A,t){var e,i,a;let s=null!==(i=null===(e=A.getProperty(\"z\"))||void 0===e?void 0:e.value)&&void 0!==i?i:null===(a=A.getProperty(\"zindex\"))||void 0===a?void 0:a.value;return null!=s||(s=t.order+this._layerZIndexStart),+s}_getEntityName(A){return A.name}_createTileMap(){var A,t,e,i,s,o,r;for(const i of this.data.rawMap.tilesets){const s=null!==(A=i.spacing)&&void 0!==A?A:0,o=Math.floor((i.imagewidth+s)/(i.tilewidth+s)),r=Math.floor((i.imageheight+s)/(i.tileheight+s));if(this.imageMap[i.firstgid]){const A=a.SpriteSheet.fromImageSource({image:this.imageMap[i.firstgid],grid:{columns:o,rows:r,spriteWidth:i.tilewidth,spriteHeight:i.tileheight},spacing:{margin:{x:null!==(t=i.spacing)&&void 0!==t?t:0,y:null!==(e=i.spacing)&&void 0!==e?e:0}}});this.sheetMap[i.firstgid.toString()]=A}else{const A=this.tileImageMap[i.firstgid].map((([A,t])=>t.toSprite())),t=new a.SpriteSheet({sprites:A});this.sheetMap[i.firstgid.toString()]=t}}for(var g of this.data.layers)if(\"tilelayer\"===g.rawLayer.type){if(\"orthogonal\"===this.data.orientation){const A=g.rawLayer,t=new a.TileMap({name:g.rawLayer.name,pos:(0,a.vec)(g.offset.x,g.offset.y),tileWidth:this.data.rawMap.tilewidth,tileHeight:this.data.rawMap.tileheight,columns:this.data.width,rows:this.data.height});if(t.addComponent(new I.TiledLayerComponent(g)),g.rawLayer.parallaxx||g.rawLayer.parallaxy){const A=(0,a.vec)(null!==(i=g.rawLayer.parallaxx)&&void 0!==i?i:1,null!==(s=g.rawLayer.parallaxy)&&void 0!==s?s:1);t.addComponent(new a.ParallaxComponent(A))}t.z=this._calculateZIndex(g,g);for(let e=0;e{\"use strict\";e.r(t),e.d(t,{TiledObjectComponent:()=>a});var i=e(\"excalibur\");class a extends i.Component{constructor(A){super(),this.object=A,this.type=\"ex.tiledobject\"}}},\"./src/tiled-object.ts\":(A,t,e)=>{\"use strict\";e.r(t),e.d(t,{TiledObject:()=>o,TiledObjectGroup:()=>s});var i=e(\"./src/tiled-entity.ts\"),a=e(\"excalibur\");class s extends i.TiledEntity{constructor(){super(...arguments),this.objects=[]}getCamera(){var A;const t=this.getObjectByClass(\"camera\");if(t){const e=t.getProperty(\"zoom\");return{x:t.x,y:t.y,zoom:e?+(null!==(A=null==e?void 0:e.value)&&void 0!==A?A:1):1}}}getObjectByType(A){return this.getObjectsByType(A)[0]}getObjectByClass(A){return this.getObjectsByClass(A)[0]}getObjectsByType(A){return this.objects.filter((t=>{var e;return(null===(e=t.type)||void 0===e?void 0:e.toLocaleLowerCase())===A.toLocaleLowerCase()}))}getObjectsByClass(A){return this.objects.filter((t=>{var e;return(null===(e=t.class)||void 0===e?void 0:e.toLocaleLowerCase())===A.toLocaleLowerCase()}))}getObjectByName(A){return this.getObjectsByName(A)[0]}getObjectsByName(A){return this.objects.filter((t=>{var e;return(null===(e=t.name)||void 0===e?void 0:e.toLocaleLowerCase())===A.toLocaleLowerCase()}))}getPoints(){return this.objects.filter((A=>!!A.point))}getEllipses(){return this.objects.filter((A=>!!A.ellipse))}getText(){return this.objects.filter((A=>!!A.text))}getPolyLines(){return this.objects.filter((A=>!!A.polyline))}getPolygons(){return this.objects.filter((A=>!!A.polygon))}getBoxes(){return this.objects.filter((A=>!!A.width&&!!A.height&&!A.ellipse))}getInsertedTiles(){return this.objects.filter((A=>!!A.gid))}static parse(A){var t;if(\"objectgroup\"!==A.type)throw Error(\"Cannot parse non objectgroup type layer\");const e=new s;e.id=+A.id,e.name=A.name,e.properties=null!==(t=A.properties)&&void 0!==t?t:[],e.rawObjectGroup=A,e.order=A.order;for(let t of A.objects)e.objects.push(o.parse(t));return e}}class o extends i.TiledEntity{static parse(A){var t,e,i,s;const r=new o;return r.id=+A.id,r.gid=A.gid,r.visible=null===(t=A.visible)||void 0===t||t,r.name=A.name,r.type=A.type,r.class=A.class,r.x=+A.x,r.y=+A.y,r.rotation=A.rotation?(0,a.toRadians)(A.rotation):0,r.width=null!==(e=A.width)&&void 0!==e?e:0,r.height=null!==(i=A.height)&&void 0!==i?i:0,r.point=A.point,r.ellipse=!0===A.ellipse||\"\"===A.ellipse,r.polyline=A.polyline,r.polygon=A.polygon,r.rawObject=A,A.text&&(r.text=Object.assign(Object.assign({},A.text),{pixelSize:A.text.pixelsize,fontFamily:A.text.fontfamily})),r.properties=null!==(s=A.properties)&&void 0!==s?s:[],r}}},\"./src/tiled-tileset.ts\":(A,t,e)=>{\"use strict\";e.r(t),e.d(t,{TiledTileset:()=>r,TiledTilesetTile:()=>g,parseExternalJson:()=>I,parseExternalTsx:()=>n});var i=e(\"excalibur\"),a=e(\"./node_modules/fast-xml-parser/src/parser.js\"),s=e(\"./src/index.ts\"),o=e(\"./src/tiled-entity.ts\");class r{constructor(){this.tiles=[]}static parse(A){var t,e;const a=new r;let s=[];if(Array.isArray(A.tiles))s=(null!==(t=A.tiles)&&void 0!==t?t:[]).map((A=>g.parse(A,a)));else for(let t in A.tiles)s.push(g.parse(Object.assign(Object.assign({},A.tiles[t]),{id:+t}),a));return a.tiles=s,a.firstGid=A.firstgid,a.tileWidth=A.tilewidth,a.tileHeight=A.tileheight,a.tileCount=A.tilecount,a.tileOffset=A.tileoffset,a.tiledVersion=A.tiledversion,a.backgroundColor=A.backgroundcolor,a.transparentColor=A.transparentcolor,a.wangSets=A.wangsets,a.imageWidth=A.imagewidth,a.imageHeight=A.imageheight,a.objectAlignment=null!==(e=A.objectalignment)&&void 0!==e?e:\"unspecified\",a.image=A.image,a.spacing=isNaN(A.spacing)?0:A.spacing,a.horizontalFlipTransform=i.Matrix.identity().translate(a.tileWidth,0).scale(-1,1),a.verticalFlipTransform=i.Matrix.identity().translate(0,a.tileHeight).scale(1,-1),a.diagonalFlipTransform=i.Matrix.identity().translate(0,0).rotate(-Math.PI/2).scale(-1,1),a}}class g{hasAnimation(){return!!this.animation}getAnimation(A){var t;if(this.animation){let e=[];for(let t of this.animation)e.push({graphic:A.getSpriteForGid(t.tileid+this.tileset.firstGid),duration:t.duration});return new i.Animation({frames:e,strategy:null!==(t=this.animationStrategy)&&void 0!==t?t:i.AnimationStrategy.Loop})}return null}static parse(A,t){var e,a,r;const n=new g;if(n.id=+A.id,n.image=A.image,n.tileset=t,n.properties=Array.isArray(A.properties)?A.properties:null!==(a=null===(e=A.properties)||void 0===e?void 0:e.property)&&void 0!==a?a:[],A.objectgroup&&(n.objectgroup=s.TiledObjectGroup.parse(A.objectgroup)),A.terrain&&(n.terrain=A.terrain),A.animation&&(n.animation=Array.isArray(A.animation)?A.animation:[...A.animation.frame],n.properties)){const A=null===(r=(0,o.getProperty)(n.properties,\"animationstrategy\"))||void 0===r?void 0:r.value;switch(null==A?void 0:A.toLowerCase()){case i.AnimationStrategy.End.toLowerCase():n.animationStrategy=i.AnimationStrategy.End;break;case i.AnimationStrategy.Freeze.toLowerCase():n.animationStrategy=i.AnimationStrategy.Freeze;break;case i.AnimationStrategy.Loop.toLowerCase():n.animationStrategy=i.AnimationStrategy.Loop;break;case i.AnimationStrategy.PingPong.toLowerCase():n.animationStrategy=i.AnimationStrategy.PingPong;break;default:n.animationStrategy=i.AnimationStrategy.Loop}}return n}}const n=(A,t,e)=>{var s,o,r,n,I;const l=(A,t,e=!1)=>{A[t]?(A[t+(e?\"s\":\"\")]=Array.isArray(A[t])?A[t]:[A[t]],e&&delete A[t]):A[t+(e?\"s\":\"\")]=[]},B=a.parse(A,{attributeNamePrefix:\"\",textNodeName:\"#text\",ignoreAttributes:!1,ignoreNameSpace:!1,allowBooleanAttributes:!0,parseNodeValue:!0,parseAttributeValue:!0,trimValues:!0,parseTrueNumberOnly:!1,arrayMode:!1,stopNodes:[\"parse-me-as-string\"]}).tileset,C=B;C.firstgid=t,C.source=e,C.imagewidth=null===(s=B.image)||void 0===s?void 0:s.width,C.imageheight=null===(o=B.image)||void 0===o?void 0:o.height,C.objectalignment=null!==(r=B.objectalignment)&&void 0!==r?r:\"unspecified\",C.image=null===(n=B.image)||void 0===n?void 0:n.source,C.spacing=isNaN(B.spacing)?0:B.spacing,l(B,\"tile\",!0),B.tiles.forEach((A=>{var t;(null===(t=A.image)||void 0===t?void 0:t.source)&&(A.image=A.image.source),A.objectgroup&&(A.objectgroup.type=\"objectgroup\",l(A.objectgroup,\"object\",!0))})),C.tiles=B.tiles;const Q=Object.assign(Object.assign({},C),{tiles:[],firstGid:C.firstgid,tileWidth:C.tilewidth,tileHeight:C.tileheight,tileCount:C.tilecount,tileOffset:C.tileoffset,tiledVersion:C.tiledversion,backgroundColor:C.backgroundcolor,transparentColor:C.transparentcolor,wangSets:C.wangsets,imageWidth:C.imagewidth,imageHeight:C.imageheight,objectAlignment:null!==(I=C.objectalignment)&&void 0!==I?I:\"unspecified\",image:C.image,spacing:isNaN(C.spacing)?0:C.spacing,horizontalFlipTransform:i.Matrix.identity().translate(C.tilewidth,0).scale(-1,1),verticalFlipTransform:i.Matrix.identity().translate(0,C.tileheight).scale(1,-1),diagonalFlipTransform:i.Matrix.identity().translate(C.tilewidth,C.tileheight).rotate(-Math.PI/2).scale(-1,1)});return Q.tiles=C.tiles.map((A=>g.parse(A,Q))),Q},I=(A,t,e)=>{var a,s;let o=[];A.tiles=null!==(a=A.tiles)&&void 0!==a?a:[],(0,i.vec)(A.tilewidth/2,A.tileheight/2);const r=Object.assign(Object.assign({},A),{source:e,tiles:o,firstGid:t,tileWidth:A.tilewidth,tileHeight:A.tileheight,tileCount:A.tilecount,tileOffset:A.tileoffset,tiledVersion:A.tiledversion,backgroundColor:A.backgroundcolor,transparentColor:A.transparentcolor,wangSets:A.wangsets,imageWidth:A.imagewidth,imageHeight:A.imageheight,spacing:isNaN(A.spacing)?0:A.spacing,objectAlignment:null!==(s=A.objectalignment)&&void 0!==s?s:\"unspecified\",image:A.image,horizontalFlipTransform:i.Matrix.identity().translate(A.tilewidth,0).scale(-1,1),verticalFlipTransform:i.Matrix.identity().translate(0,A.tileheight).scale(1,-1),diagonalFlipTransform:i.Matrix.identity().translate(A.tilewidth,A.tileheight).rotate(-Math.PI/2).scale(-1,1)});for(let t in A.tiles)o.push(g.parse(Object.assign(Object.assign({},A.tiles[t]),{id:+t}),r));return r}},\"./src/tiled-types.ts\":(A,t,e)=>{\"use strict\";e.r(t)},\"./node_modules/zstddec/dist/zstddec.modern.js\":(A,t,e)=>{\"use strict\";let i,a,s;e.r(t),e.d(t,{ZSTDDecoder:()=>r});const o={env:{emscripten_notify_memory_growth:function(A){s=new Uint8Array(a.exports.memory.buffer)}}};class r{init(){return i||(i=\"undefined\"!=typeof fetch?fetch(\"data:application/wasm;base64,\"+g).then((A=>A.arrayBuffer())).then((A=>WebAssembly.instantiate(A,o))).then(this._init):WebAssembly.instantiate(Buffer.from(g,\"base64\"),o).then(this._init),i)}_init(A){a=A.instance,o.env.emscripten_notify_memory_growth(0)}decode(A,t=0){if(!a)throw new Error(\"ZSTDDecoder: Await .init() before decoding.\");const e=A.byteLength,i=a.exports.malloc(e);s.set(A,i),t=t||Number(a.exports.ZSTD_findDecompressedSize(i,e));const o=a.exports.malloc(t),r=a.exports.ZSTD_decompress(o,t,i,e),g=s.slice(o,o+r);return a.exports.free(i),a.exports.free(o),g}}const g=\"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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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\"},excalibur:t=>{\"use strict\";t.exports=A}},e={};function i(A){var a=e[A];if(void 0!==a)return a.exports;var s=e[A]={exports:{}};return t[A](s,s.exports,i),s.exports}return i.n=A=>{var t=A&&A.__esModule?()=>A.default:()=>A;return i.d(t,{a:t}),t},i.d=(A,t)=>{for(var e in t)i.o(t,e)&&!i.o(A,e)&&Object.defineProperty(A,e,{enumerable:!0,get:t[e]})},i.o=(A,t)=>Object.prototype.hasOwnProperty.call(A,t),i.r=A=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(A,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(A,\"__esModule\",{value:!0})},i(\"./src/index.ts\")})()));\n//# sourceMappingURL=excalibur-tiled.min.js.map","/*!\n * excalibur - 0.27.0 - 2022-7-8\n * https://github.com/excaliburjs/Excalibur\n * Copyright (c) 2022 Excalibur.js \n * Licensed BSD-2-Clause\n * @preserve\n */\n/******/ var __webpack_modules__ = ({\n\n/***/ 4662:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n__webpack_require__(3430);\nvar entryUnbind = __webpack_require__(8791);\n\nmodule.exports = entryUnbind('Array', 'sort');\n\n\n/***/ }),\n\n/***/ 8343:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n__webpack_require__(4769);\nvar path = __webpack_require__(9276);\n\nmodule.exports = path.Object.keys;\n\n\n/***/ }),\n\n/***/ 7111:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar isCallable = __webpack_require__(6733);\nvar tryToString = __webpack_require__(9821);\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw $TypeError(tryToString(argument) + ' is not a function');\n};\n\n\n/***/ }),\n\n/***/ 1176:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar isObject = __webpack_require__(5052);\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw $TypeError($String(argument) + ' is not an object');\n};\n\n\n/***/ }),\n\n/***/ 9540:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar toIndexedObject = __webpack_require__(905);\nvar toAbsoluteIndex = __webpack_require__(3231);\nvar lengthOfArrayLike = __webpack_require__(9646);\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n\n\n/***/ }),\n\n/***/ 6038:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar fails = __webpack_require__(4229);\n\nmodule.exports = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call -- required for testing\n method.call(null, argument || function () { return 1; }, 1);\n });\n};\n\n\n/***/ }),\n\n/***/ 9794:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar toAbsoluteIndex = __webpack_require__(3231);\nvar lengthOfArrayLike = __webpack_require__(9646);\nvar createProperty = __webpack_require__(2324);\n\nvar $Array = Array;\nvar max = Math.max;\n\nmodule.exports = function (O, start, end) {\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n var result = $Array(max(fin - k, 0));\n for (var n = 0; k < fin; k++, n++) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n};\n\n\n/***/ }),\n\n/***/ 3867:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar arraySlice = __webpack_require__(9794);\n\nvar floor = Math.floor;\n\nvar mergeSort = function (array, comparefn) {\n var length = array.length;\n var middle = floor(length / 2);\n return length < 8 ? insertionSort(array, comparefn) : merge(\n array,\n mergeSort(arraySlice(array, 0, middle), comparefn),\n mergeSort(arraySlice(array, middle), comparefn),\n comparefn\n );\n};\n\nvar insertionSort = function (array, comparefn) {\n var length = array.length;\n var i = 1;\n var element, j;\n\n while (i < length) {\n j = i;\n element = array[i];\n while (j && comparefn(array[j - 1], element) > 0) {\n array[j] = array[--j];\n }\n if (j !== i++) array[j] = element;\n } return array;\n};\n\nvar merge = function (array, left, right, comparefn) {\n var llength = left.length;\n var rlength = right.length;\n var lindex = 0;\n var rindex = 0;\n\n while (lindex < llength || rindex < rlength) {\n array[lindex + rindex] = (lindex < llength && rindex < rlength)\n ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]\n : lindex < llength ? left[lindex++] : right[rindex++];\n } return array;\n};\n\nmodule.exports = mergeSort;\n\n\n/***/ }),\n\n/***/ 7079:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar uncurryThis = __webpack_require__(5968);\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n\n\n/***/ }),\n\n/***/ 1589:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar TO_STRING_TAG_SUPPORT = __webpack_require__(1601);\nvar isCallable = __webpack_require__(6733);\nvar classofRaw = __webpack_require__(7079);\nvar wellKnownSymbol = __webpack_require__(95);\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar $Object = Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n\n\n/***/ }),\n\n/***/ 7081:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar hasOwn = __webpack_require__(8270);\nvar ownKeys = __webpack_require__(4826);\nvar getOwnPropertyDescriptorModule = __webpack_require__(7933);\nvar definePropertyModule = __webpack_require__(1787);\n\nmodule.exports = function (target, source, exceptions) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n }\n};\n\n\n/***/ }),\n\n/***/ 5762:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar DESCRIPTORS = __webpack_require__(7400);\nvar definePropertyModule = __webpack_require__(1787);\nvar createPropertyDescriptor = __webpack_require__(5358);\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\n\n/***/ }),\n\n/***/ 5358:\n/***/ ((module) => {\n\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\n\n/***/ }),\n\n/***/ 2324:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar toPropertyKey = __webpack_require__(9310);\nvar definePropertyModule = __webpack_require__(1787);\nvar createPropertyDescriptor = __webpack_require__(5358);\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n\n\n/***/ }),\n\n/***/ 4768:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar isCallable = __webpack_require__(6733);\nvar definePropertyModule = __webpack_require__(1787);\nvar makeBuiltIn = __webpack_require__(6039);\nvar defineGlobalProperty = __webpack_require__(8400);\n\nmodule.exports = function (O, key, value, options) {\n if (!options) options = {};\n var simple = options.enumerable;\n var name = options.name !== undefined ? options.name : key;\n if (isCallable(value)) makeBuiltIn(value, name, options);\n if (options.global) {\n if (simple) O[key] = value;\n else defineGlobalProperty(key, value);\n } else {\n try {\n if (!options.unsafe) delete O[key];\n else if (O[key]) simple = true;\n } catch (error) { /* empty */ }\n if (simple) O[key] = value;\n else definePropertyModule.f(O, key, {\n value: value,\n enumerable: false,\n configurable: !options.nonConfigurable,\n writable: !options.nonWritable\n });\n } return O;\n};\n\n\n/***/ }),\n\n/***/ 8400:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar global = __webpack_require__(9859);\n\n// eslint-disable-next-line es-x/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n\n\n/***/ }),\n\n/***/ 9563:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar tryToString = __webpack_require__(9821);\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (O, P) {\n if (!delete O[P]) throw $TypeError('Cannot delete property ' + tryToString(P) + ' of ' + tryToString(O));\n};\n\n\n/***/ }),\n\n/***/ 7400:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar fails = __webpack_require__(4229);\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es-x/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n\n\n/***/ }),\n\n/***/ 2635:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar global = __webpack_require__(9859);\nvar isObject = __webpack_require__(5052);\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n\n\n/***/ }),\n\n/***/ 2671:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar userAgent = __webpack_require__(598);\n\nvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\nmodule.exports = !!firefox && +firefox[1];\n\n\n/***/ }),\n\n/***/ 8506:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar UA = __webpack_require__(598);\n\nmodule.exports = /MSIE|Trident/.test(UA);\n\n\n/***/ }),\n\n/***/ 598:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar getBuiltIn = __webpack_require__(1333);\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n\n\n/***/ }),\n\n/***/ 6358:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar global = __webpack_require__(9859);\nvar userAgent = __webpack_require__(598);\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n\n\n/***/ }),\n\n/***/ 9811:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar userAgent = __webpack_require__(598);\n\nvar webkit = userAgent.match(/AppleWebKit\\/(\\d+)\\./);\n\nmodule.exports = !!webkit && +webkit[1];\n\n\n/***/ }),\n\n/***/ 8791:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar global = __webpack_require__(9859);\nvar uncurryThis = __webpack_require__(5968);\n\nmodule.exports = function (CONSTRUCTOR, METHOD) {\n return uncurryThis(global[CONSTRUCTOR].prototype[METHOD]);\n};\n\n\n/***/ }),\n\n/***/ 3837:\n/***/ ((module) => {\n\n// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n\n\n/***/ }),\n\n/***/ 3103:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar global = __webpack_require__(9859);\nvar getOwnPropertyDescriptor = (__webpack_require__(7933).f);\nvar createNonEnumerableProperty = __webpack_require__(5762);\nvar defineBuiltIn = __webpack_require__(4768);\nvar defineGlobalProperty = __webpack_require__(8400);\nvar copyConstructorProperties = __webpack_require__(7081);\nvar isForced = __webpack_require__(6541);\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.dontCallGetSet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || defineGlobalProperty(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.dontCallGetSet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty == typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n defineBuiltIn(target, key, sourceProperty, options);\n }\n};\n\n\n/***/ }),\n\n/***/ 4229:\n/***/ ((module) => {\n\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n\n\n/***/ }),\n\n/***/ 7188:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar fails = __webpack_require__(4229);\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es-x/no-function-prototype-bind -- safe\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n\n\n/***/ }),\n\n/***/ 266:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar NATIVE_BIND = __webpack_require__(7188);\n\nvar call = Function.prototype.call;\n\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n\n\n/***/ }),\n\n/***/ 1805:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar DESCRIPTORS = __webpack_require__(7400);\nvar hasOwn = __webpack_require__(8270);\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n\n\n/***/ }),\n\n/***/ 5968:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar NATIVE_BIND = __webpack_require__(7188);\n\nvar FunctionPrototype = Function.prototype;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nvar uncurryThis = NATIVE_BIND && bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? function (fn) {\n return fn && uncurryThis(fn);\n} : function (fn) {\n return fn && function () {\n return call.apply(fn, arguments);\n };\n};\n\n\n/***/ }),\n\n/***/ 1333:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar global = __webpack_require__(9859);\nvar isCallable = __webpack_require__(6733);\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n\n\n/***/ }),\n\n/***/ 5300:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar aCallable = __webpack_require__(7111);\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return func == null ? undefined : aCallable(func);\n};\n\n\n/***/ }),\n\n/***/ 9859:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es-x/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof __webpack_require__.g == 'object' && __webpack_require__.g) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n\n\n/***/ }),\n\n/***/ 8270:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar uncurryThis = __webpack_require__(5968);\nvar toObject = __webpack_require__(2991);\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es-x/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n\n\n/***/ }),\n\n/***/ 5977:\n/***/ ((module) => {\n\nmodule.exports = {};\n\n\n/***/ }),\n\n/***/ 4394:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar DESCRIPTORS = __webpack_require__(7400);\nvar fails = __webpack_require__(4229);\nvar createElement = __webpack_require__(2635);\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es-x/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n\n\n/***/ }),\n\n/***/ 9337:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar uncurryThis = __webpack_require__(5968);\nvar fails = __webpack_require__(4229);\nvar classof = __webpack_require__(7079);\n\nvar $Object = Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !$Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split(it, '') : $Object(it);\n} : $Object;\n\n\n/***/ }),\n\n/***/ 8511:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar uncurryThis = __webpack_require__(5968);\nvar isCallable = __webpack_require__(6733);\nvar store = __webpack_require__(5353);\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n\n\n/***/ }),\n\n/***/ 6407:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar NATIVE_WEAK_MAP = __webpack_require__(8694);\nvar global = __webpack_require__(9859);\nvar uncurryThis = __webpack_require__(5968);\nvar isObject = __webpack_require__(5052);\nvar createNonEnumerableProperty = __webpack_require__(5762);\nvar hasOwn = __webpack_require__(8270);\nvar shared = __webpack_require__(5353);\nvar sharedKey = __webpack_require__(4399);\nvar hiddenKeys = __webpack_require__(5977);\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = uncurryThis(store.get);\n var wmhas = uncurryThis(store.has);\n var wmset = uncurryThis(store.set);\n set = function (it, metadata) {\n if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget(store, it) || {};\n };\n has = function (it) {\n return wmhas(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n\n\n/***/ }),\n\n/***/ 6733:\n/***/ ((module) => {\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = function (argument) {\n return typeof argument == 'function';\n};\n\n\n/***/ }),\n\n/***/ 6541:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar fails = __webpack_require__(4229);\nvar isCallable = __webpack_require__(6733);\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n\n\n/***/ }),\n\n/***/ 5052:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar isCallable = __webpack_require__(6733);\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n\n\n/***/ }),\n\n/***/ 4231:\n/***/ ((module) => {\n\nmodule.exports = false;\n\n\n/***/ }),\n\n/***/ 9395:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar getBuiltIn = __webpack_require__(1333);\nvar isCallable = __webpack_require__(6733);\nvar isPrototypeOf = __webpack_require__(1321);\nvar USE_SYMBOL_AS_UID = __webpack_require__(6969);\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n\n\n/***/ }),\n\n/***/ 9646:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar toLength = __webpack_require__(4237);\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n\n\n/***/ }),\n\n/***/ 6039:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar fails = __webpack_require__(4229);\nvar isCallable = __webpack_require__(6733);\nvar hasOwn = __webpack_require__(8270);\nvar DESCRIPTORS = __webpack_require__(7400);\nvar CONFIGURABLE_FUNCTION_NAME = (__webpack_require__(1805).CONFIGURABLE);\nvar inspectSource = __webpack_require__(8511);\nvar InternalStateModule = __webpack_require__(6407);\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\n// eslint-disable-next-line es-x/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n if (String(name).slice(0, 7) === 'Symbol(') {\n name = '[' + String(name).replace(/^Symbol\\(([^)]*)\\)/, '$1') + ']';\n }\n if (options && options.getter) name = 'get ' + name;\n if (options && options.setter) name = 'set ' + name;\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });\n else value.name = name;\n }\n if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\n defineProperty(value, 'length', { value: options.arity });\n }\n try {\n if (options && hasOwn(options, 'constructor') && options.constructor) {\n if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });\n // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable\n } else if (value.prototype) value.prototype = undefined;\n } catch (error) { /* empty */ }\n var state = enforceInternalState(value);\n if (!hasOwn(state, 'source')) {\n state.source = TEMPLATE.join(typeof name == 'string' ? name : '');\n } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString');\n\n\n/***/ }),\n\n/***/ 917:\n/***/ ((module) => {\n\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `Math.trunc` method\n// https://tc39.es/ecma262/#sec-math.trunc\n// eslint-disable-next-line es-x/no-math-trunc -- safe\nmodule.exports = Math.trunc || function trunc(x) {\n var n = +x;\n return (n > 0 ? floor : ceil)(n);\n};\n\n\n/***/ }),\n\n/***/ 3839:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n/* eslint-disable es-x/no-symbol -- required for testing */\nvar V8_VERSION = __webpack_require__(6358);\nvar fails = __webpack_require__(4229);\n\n// eslint-disable-next-line es-x/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n\n\n/***/ }),\n\n/***/ 8694:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar global = __webpack_require__(9859);\nvar isCallable = __webpack_require__(6733);\nvar inspectSource = __webpack_require__(8511);\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));\n\n\n/***/ }),\n\n/***/ 1787:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\nvar DESCRIPTORS = __webpack_require__(7400);\nvar IE8_DOM_DEFINE = __webpack_require__(4394);\nvar V8_PROTOTYPE_DEFINE_BUG = __webpack_require__(7137);\nvar anObject = __webpack_require__(1176);\nvar toPropertyKey = __webpack_require__(9310);\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es-x/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw $TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n\n\n/***/ }),\n\n/***/ 7933:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\nvar DESCRIPTORS = __webpack_require__(7400);\nvar call = __webpack_require__(266);\nvar propertyIsEnumerableModule = __webpack_require__(9195);\nvar createPropertyDescriptor = __webpack_require__(5358);\nvar toIndexedObject = __webpack_require__(905);\nvar toPropertyKey = __webpack_require__(9310);\nvar hasOwn = __webpack_require__(8270);\nvar IE8_DOM_DEFINE = __webpack_require__(4394);\n\n// eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n\n\n/***/ }),\n\n/***/ 8151:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\nvar internalObjectKeys = __webpack_require__(140);\nvar enumBugKeys = __webpack_require__(3837);\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es-x/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n\n\n/***/ }),\n\n/***/ 894:\n/***/ ((__unused_webpack_module, exports) => {\n\n// eslint-disable-next-line es-x/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n\n\n/***/ }),\n\n/***/ 1321:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar uncurryThis = __webpack_require__(5968);\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n\n\n/***/ }),\n\n/***/ 140:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar uncurryThis = __webpack_require__(5968);\nvar hasOwn = __webpack_require__(8270);\nvar toIndexedObject = __webpack_require__(905);\nvar indexOf = (__webpack_require__(9540).indexOf);\nvar hiddenKeys = __webpack_require__(5977);\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n\n\n/***/ }),\n\n/***/ 5632:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar internalObjectKeys = __webpack_require__(140);\nvar enumBugKeys = __webpack_require__(3837);\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es-x/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n\n\n/***/ }),\n\n/***/ 9195:\n/***/ ((__unused_webpack_module, exports) => {\n\n\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n\n\n/***/ }),\n\n/***/ 2914:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar call = __webpack_require__(266);\nvar isCallable = __webpack_require__(6733);\nvar isObject = __webpack_require__(5052);\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw $TypeError(\"Can't convert object to primitive value\");\n};\n\n\n/***/ }),\n\n/***/ 4826:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar getBuiltIn = __webpack_require__(1333);\nvar uncurryThis = __webpack_require__(5968);\nvar getOwnPropertyNamesModule = __webpack_require__(8151);\nvar getOwnPropertySymbolsModule = __webpack_require__(894);\nvar anObject = __webpack_require__(1176);\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n\n\n/***/ }),\n\n/***/ 9276:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar global = __webpack_require__(9859);\n\nmodule.exports = global;\n\n\n/***/ }),\n\n/***/ 8885:\n/***/ ((module) => {\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw $TypeError(\"Can't call method on \" + it);\n return it;\n};\n\n\n/***/ }),\n\n/***/ 4399:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar shared = __webpack_require__(3036);\nvar uid = __webpack_require__(1441);\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n\n\n/***/ }),\n\n/***/ 5353:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar global = __webpack_require__(9859);\nvar defineGlobalProperty = __webpack_require__(8400);\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || defineGlobalProperty(SHARED, {});\n\nmodule.exports = store;\n\n\n/***/ }),\n\n/***/ 3036:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar IS_PURE = __webpack_require__(4231);\nvar store = __webpack_require__(5353);\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.23.3',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2022 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.23.3/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n\n\n/***/ }),\n\n/***/ 3231:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar toIntegerOrInfinity = __webpack_require__(3329);\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n\n\n/***/ }),\n\n/***/ 905:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = __webpack_require__(9337);\nvar requireObjectCoercible = __webpack_require__(8885);\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n\n\n/***/ }),\n\n/***/ 3329:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar trunc = __webpack_require__(917);\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- NaN check\n return number !== number || number === 0 ? 0 : trunc(number);\n};\n\n\n/***/ }),\n\n/***/ 4237:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar toIntegerOrInfinity = __webpack_require__(3329);\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n\n\n/***/ }),\n\n/***/ 2991:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar requireObjectCoercible = __webpack_require__(8885);\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return $Object(requireObjectCoercible(argument));\n};\n\n\n/***/ }),\n\n/***/ 2066:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar call = __webpack_require__(266);\nvar isObject = __webpack_require__(5052);\nvar isSymbol = __webpack_require__(9395);\nvar getMethod = __webpack_require__(5300);\nvar ordinaryToPrimitive = __webpack_require__(2914);\nvar wellKnownSymbol = __webpack_require__(95);\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw $TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n\n\n/***/ }),\n\n/***/ 9310:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar toPrimitive = __webpack_require__(2066);\nvar isSymbol = __webpack_require__(9395);\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n\n\n/***/ }),\n\n/***/ 1601:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar wellKnownSymbol = __webpack_require__(95);\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n\n\n/***/ }),\n\n/***/ 3326:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar classof = __webpack_require__(1589);\n\nvar $String = String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n return $String(argument);\n};\n\n\n/***/ }),\n\n/***/ 9821:\n/***/ ((module) => {\n\nvar $String = String;\n\nmodule.exports = function (argument) {\n try {\n return $String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n\n\n/***/ }),\n\n/***/ 1441:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar uncurryThis = __webpack_require__(5968);\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n\n\n/***/ }),\n\n/***/ 6969:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n/* eslint-disable es-x/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = __webpack_require__(3839);\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n\n\n/***/ }),\n\n/***/ 7137:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar DESCRIPTORS = __webpack_require__(7400);\nvar fails = __webpack_require__(4229);\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es-x/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype != 42;\n});\n\n\n/***/ }),\n\n/***/ 95:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nvar global = __webpack_require__(9859);\nvar shared = __webpack_require__(3036);\nvar hasOwn = __webpack_require__(8270);\nvar uid = __webpack_require__(1441);\nvar NATIVE_SYMBOL = __webpack_require__(3839);\nvar USE_SYMBOL_AS_UID = __webpack_require__(6969);\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar symbolFor = Symbol && Symbol['for'];\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n var description = 'Symbol.' + name;\n if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else if (USE_SYMBOL_AS_UID && symbolFor) {\n WellKnownSymbolsStore[name] = symbolFor(description);\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol(description);\n }\n } return WellKnownSymbolsStore[name];\n};\n\n\n/***/ }),\n\n/***/ 3430:\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar $ = __webpack_require__(3103);\nvar uncurryThis = __webpack_require__(5968);\nvar aCallable = __webpack_require__(7111);\nvar toObject = __webpack_require__(2991);\nvar lengthOfArrayLike = __webpack_require__(9646);\nvar deletePropertyOrThrow = __webpack_require__(9563);\nvar toString = __webpack_require__(3326);\nvar fails = __webpack_require__(4229);\nvar internalSort = __webpack_require__(3867);\nvar arrayMethodIsStrict = __webpack_require__(6038);\nvar FF = __webpack_require__(2671);\nvar IE_OR_EDGE = __webpack_require__(8506);\nvar V8 = __webpack_require__(6358);\nvar WEBKIT = __webpack_require__(9811);\n\nvar test = [];\nvar un$Sort = uncurryThis(test.sort);\nvar push = uncurryThis(test.push);\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n test.sort(null);\n});\n// Old WebKit\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\nvar STABLE_SORT = !fails(function () {\n // feature detection can be too slow, so check engines versions\n if (V8) return V8 < 70;\n if (FF && FF > 3) return;\n if (IE_OR_EDGE) return true;\n if (WEBKIT) return WEBKIT < 603;\n\n var result = '';\n var code, chr, value, index;\n\n // generate an array with more 512 elements (Chakra and old V8 fails only in this case)\n for (code = 65; code < 76; code++) {\n chr = String.fromCharCode(code);\n\n switch (code) {\n case 66: case 69: case 70: case 72: value = 3; break;\n case 68: case 71: value = 4; break;\n default: value = 2;\n }\n\n for (index = 0; index < 47; index++) {\n test.push({ k: chr + index, v: value });\n }\n }\n\n test.sort(function (a, b) { return b.v - a.v; });\n\n for (index = 0; index < test.length; index++) {\n chr = test[index].k.charAt(0);\n if (result.charAt(result.length - 1) !== chr) result += chr;\n }\n\n return result !== 'DGBEFHACIJK';\n});\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;\n\nvar getSortCompare = function (comparefn) {\n return function (x, y) {\n if (y === undefined) return -1;\n if (x === undefined) return 1;\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\n return toString(x) > toString(y) ? 1 : -1;\n };\n};\n\n// `Array.prototype.sort` method\n// https://tc39.es/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n sort: function sort(comparefn) {\n if (comparefn !== undefined) aCallable(comparefn);\n\n var array = toObject(this);\n\n if (STABLE_SORT) return comparefn === undefined ? un$Sort(array) : un$Sort(array, comparefn);\n\n var items = [];\n var arrayLength = lengthOfArrayLike(array);\n var itemsLength, index;\n\n for (index = 0; index < arrayLength; index++) {\n if (index in array) push(items, array[index]);\n }\n\n internalSort(items, getSortCompare(comparefn));\n\n itemsLength = items.length;\n index = 0;\n\n while (index < itemsLength) array[index] = items[index++];\n while (index < arrayLength) deletePropertyOrThrow(array, index++);\n\n return array;\n }\n});\n\n\n/***/ }),\n\n/***/ 4769:\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {\n\nvar $ = __webpack_require__(3103);\nvar toObject = __webpack_require__(2991);\nvar nativeKeys = __webpack_require__(5632);\nvar fails = __webpack_require__(4229);\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n keys: function keys(it) {\n return nativeKeys(toObject(it));\n }\n});\n\n\n/***/ }),\n\n/***/ 1388:\n/***/ ((module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Z\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(272);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2609);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/* Buttons styles start */\\r\\n\\r\\nbutton#excalibur-play {\\r\\n display: inline-block;\\r\\n position: relative;\\r\\n z-index: 999;\\r\\n border-radius: 6px;\\r\\n border: none;\\r\\n /*border: 3px solid;\\r\\n border-color: white;\\r\\n box-shadow: 0 0 10px #ccc;*/\\r\\n padding: 1rem 1.5rem 1rem 4rem;\\r\\n margin: 0;\\r\\n text-decoration: none;\\r\\n background: #00b233;\\r\\n color: #ffffff;\\r\\n font-family: sans-serif;\\r\\n font-size: 2rem;\\r\\n white-space: nowrap;\\r\\n line-height: 1;\\r\\n cursor: pointer;\\r\\n text-align: center;\\r\\n transition: background 250ms ease-in-out, transform 150ms ease;\\r\\n -webkit-appearance: none;\\r\\n -moz-appearance: none;\\r\\n\\r\\n -webkit-animation: excalibur-button-fadein 200ms; /* Safari, Chrome and Opera > 12.1 */\\r\\n -moz-animation: excalibur-button-fadein 200ms; /* Firefox < 16 */\\r\\n -ms-animation: excalibur-button-fadein 200ms; /* Internet Explorer */\\r\\n -o-animation: excalibur-button-fadein 200ms; /* Opera < 12.1 */\\r\\n animation: excalibur-button-fadein 200ms;\\r\\n}\\r\\n\\r\\n/*\\r\\nbutton#excalibur-play {\\r\\n display: none;\\r\\n}*/\\r\\n\\r\\nbutton#excalibur-play:after {\\r\\n position: absolute;\\r\\n content: '';\\r\\n border: 8px solid;\\r\\n border-color: transparent transparent transparent white;\\r\\n left: 35px;\\r\\n top: 24px;\\r\\n width: 0;\\r\\n height: 0;\\r\\n}\\r\\n\\r\\nbutton#excalibur-play:before {\\r\\n position: absolute;\\r\\n content: '';\\r\\n border: 3px solid;\\r\\n left: 19px;\\r\\n top: 14px;\\r\\n border-radius: 20px;\\r\\n width: 30px;\\r\\n height: 30px;\\r\\n}\\r\\n\\r\\nbutton#excalibur-play:hover,\\r\\nbutton#excalibur-play:focus {\\r\\n background: #00982c;\\r\\n}\\r\\n\\r\\nbutton#excalibur-play:focus {\\r\\n outline: 1px solid #fff;\\r\\n outline-offset: -4px;\\r\\n}\\r\\n\\r\\nbutton#excalibur-play:active {\\r\\n transform: scale(0.99);\\r\\n}\\r\\n\\r\\n@keyframes excalibur-button-fadein {\\r\\n from {\\r\\n opacity: 0;\\r\\n }\\r\\n to {\\r\\n opacity: 1;\\r\\n }\\r\\n}\\r\\n\\r\\n/* Firefox < 16 */\\r\\n@-moz-keyframes excalibur-button-fadein {\\r\\n from {\\r\\n opacity: 0;\\r\\n }\\r\\n to {\\r\\n opacity: 1;\\r\\n }\\r\\n}\\r\\n\\r\\n/* Safari, Chrome and Opera > 12.1 */\\r\\n@-webkit-keyframes excalibur-button-fadein {\\r\\n from {\\r\\n opacity: 0;\\r\\n }\\r\\n to {\\r\\n opacity: 1;\\r\\n }\\r\\n}\\r\\n\\r\\n/* Internet Explorer */\\r\\n@-ms-keyframes excalibur-button-fadein {\\r\\n from {\\r\\n opacity: 0;\\r\\n }\\r\\n to {\\r\\n opacity: 1;\\r\\n }\\r\\n}\\r\\n\\r\\n/* Opera < 12.1 */\\r\\n@-o-keyframes excalibur-button-fadein {\\r\\n from {\\r\\n opacity: 0;\\r\\n }\\r\\n to {\\r\\n opacity: 1;\\r\\n }\\r\\n}\\r\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./Loader.css\"],\"names\":[],\"mappings\":\"AAAA,yBAAyB;;AAEzB;EACE,qBAAqB;EACrB,kBAAkB;EAClB,YAAY;EACZ,kBAAkB;EAClB,YAAY;EACZ;;+BAE6B;EAC7B,8BAA8B;EAC9B,SAAS;EACT,qBAAqB;EACrB,mBAAmB;EACnB,cAAc;EACd,uBAAuB;EACvB,eAAe;EACf,mBAAmB;EACnB,cAAc;EACd,eAAe;EACf,kBAAkB;EAClB,8DAA8D;EAC9D,wBAAwB;EACxB,qBAAqB;;EAErB,gDAAgD,EAAE,oCAAoC;EACtF,6CAA6C,EAAE,iBAAiB;EAChE,4CAA4C,EAAE,sBAAsB;EACpE,2CAA2C,EAAE,iBAAiB;EAC9D,wCAAwC;AAC1C;;AAEA;;;EAGE;;AAEF;EACE,kBAAkB;EAClB,WAAW;EACX,iBAAiB;EACjB,uDAAuD;EACvD,UAAU;EACV,SAAS;EACT,QAAQ;EACR,SAAS;AACX;;AAEA;EACE,kBAAkB;EAClB,WAAW;EACX,iBAAiB;EACjB,UAAU;EACV,SAAS;EACT,mBAAmB;EACnB,WAAW;EACX,YAAY;AACd;;AAEA;;EAEE,mBAAmB;AACrB;;AAEA;EACE,uBAAuB;EACvB,oBAAoB;AACtB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE;IACE,UAAU;EACZ;EACA;IACE,UAAU;EACZ;AACF;;AAEA,iBAAiB;AACjB;EACE;IACE,UAAU;EACZ;EACA;IACE,UAAU;EACZ;AACF;;AAEA,oCAAoC;AACpC;EACE;IACE,UAAU;EACZ;EACA;IACE,UAAU;EACZ;AACF;;AAEA,sBAAsB;AACtB;EACE;IACE,UAAU;EACZ;EACA;IACE,UAAU;EACZ;AACF;;AAEA,iBAAiB;AACjB;EACE;IACE,UAAU;EACZ;EACA;IACE,UAAU;EACZ;AACF\",\"sourcesContent\":[\"/* Buttons styles start */\\r\\n\\r\\nbutton#excalibur-play {\\r\\n display: inline-block;\\r\\n position: relative;\\r\\n z-index: 999;\\r\\n border-radius: 6px;\\r\\n border: none;\\r\\n /*border: 3px solid;\\r\\n border-color: white;\\r\\n box-shadow: 0 0 10px #ccc;*/\\r\\n padding: 1rem 1.5rem 1rem 4rem;\\r\\n margin: 0;\\r\\n text-decoration: none;\\r\\n background: #00b233;\\r\\n color: #ffffff;\\r\\n font-family: sans-serif;\\r\\n font-size: 2rem;\\r\\n white-space: nowrap;\\r\\n line-height: 1;\\r\\n cursor: pointer;\\r\\n text-align: center;\\r\\n transition: background 250ms ease-in-out, transform 150ms ease;\\r\\n -webkit-appearance: none;\\r\\n -moz-appearance: none;\\r\\n\\r\\n -webkit-animation: excalibur-button-fadein 200ms; /* Safari, Chrome and Opera > 12.1 */\\r\\n -moz-animation: excalibur-button-fadein 200ms; /* Firefox < 16 */\\r\\n -ms-animation: excalibur-button-fadein 200ms; /* Internet Explorer */\\r\\n -o-animation: excalibur-button-fadein 200ms; /* Opera < 12.1 */\\r\\n animation: excalibur-button-fadein 200ms;\\r\\n}\\r\\n\\r\\n/*\\r\\nbutton#excalibur-play {\\r\\n display: none;\\r\\n}*/\\r\\n\\r\\nbutton#excalibur-play:after {\\r\\n position: absolute;\\r\\n content: '';\\r\\n border: 8px solid;\\r\\n border-color: transparent transparent transparent white;\\r\\n left: 35px;\\r\\n top: 24px;\\r\\n width: 0;\\r\\n height: 0;\\r\\n}\\r\\n\\r\\nbutton#excalibur-play:before {\\r\\n position: absolute;\\r\\n content: '';\\r\\n border: 3px solid;\\r\\n left: 19px;\\r\\n top: 14px;\\r\\n border-radius: 20px;\\r\\n width: 30px;\\r\\n height: 30px;\\r\\n}\\r\\n\\r\\nbutton#excalibur-play:hover,\\r\\nbutton#excalibur-play:focus {\\r\\n background: #00982c;\\r\\n}\\r\\n\\r\\nbutton#excalibur-play:focus {\\r\\n outline: 1px solid #fff;\\r\\n outline-offset: -4px;\\r\\n}\\r\\n\\r\\nbutton#excalibur-play:active {\\r\\n transform: scale(0.99);\\r\\n}\\r\\n\\r\\n@keyframes excalibur-button-fadein {\\r\\n from {\\r\\n opacity: 0;\\r\\n }\\r\\n to {\\r\\n opacity: 1;\\r\\n }\\r\\n}\\r\\n\\r\\n/* Firefox < 16 */\\r\\n@-moz-keyframes excalibur-button-fadein {\\r\\n from {\\r\\n opacity: 0;\\r\\n }\\r\\n to {\\r\\n opacity: 1;\\r\\n }\\r\\n}\\r\\n\\r\\n/* Safari, Chrome and Opera > 12.1 */\\r\\n@-webkit-keyframes excalibur-button-fadein {\\r\\n from {\\r\\n opacity: 0;\\r\\n }\\r\\n to {\\r\\n opacity: 1;\\r\\n }\\r\\n}\\r\\n\\r\\n/* Internet Explorer */\\r\\n@-ms-keyframes excalibur-button-fadein {\\r\\n from {\\r\\n opacity: 0;\\r\\n }\\r\\n to {\\r\\n opacity: 1;\\r\\n }\\r\\n}\\r\\n\\r\\n/* Opera < 12.1 */\\r\\n@-o-keyframes excalibur-button-fadein {\\r\\n from {\\r\\n opacity: 0;\\r\\n }\\r\\n to {\\r\\n opacity: 1;\\r\\n }\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n/***/ }),\n\n/***/ 7379:\n/***/ ((module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Z\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(272);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2609);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\r\\n#ex-toast-container {\\r\\n position: absolute;\\r\\n height: 0;\\r\\n min-width: 50%;\\r\\n left: 50%;\\r\\n top: 0;\\r\\n}\\r\\n\\r\\n.ex-toast-message {\\r\\n left: -50%;\\r\\n position: relative;\\r\\n display: flex;\\r\\n justify-content: space-between;\\r\\n\\r\\n\\r\\n padding: 10px;\\r\\n margin-top: 5px;\\r\\n font-size: 18px;\\r\\n font-family: sans-serif;\\r\\n border-radius: 6px;\\r\\n border: 3px solid #b7b779;\\r\\n background-color: rgb(253, 253, 192);\\r\\n}\\r\\n\\r\\n\\r\\n.ex-toast-message button {\\r\\n align-self: flex-start;\\r\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./Util/Toaster.css\"],\"names\":[],\"mappings\":\";AACA;EACE,kBAAkB;EAClB,SAAS;EACT,cAAc;EACd,SAAS;EACT,MAAM;AACR;;AAEA;EACE,UAAU;EACV,kBAAkB;EAClB,aAAa;EACb,8BAA8B;;;EAG9B,aAAa;EACb,eAAe;EACf,eAAe;EACf,uBAAuB;EACvB,kBAAkB;EAClB,yBAAyB;EACzB,oCAAoC;AACtC;;;AAGA;EACE,sBAAsB;AACxB\",\"sourcesContent\":[\"\\r\\n#ex-toast-container {\\r\\n position: absolute;\\r\\n height: 0;\\r\\n min-width: 50%;\\r\\n left: 50%;\\r\\n top: 0;\\r\\n}\\r\\n\\r\\n.ex-toast-message {\\r\\n left: -50%;\\r\\n position: relative;\\r\\n display: flex;\\r\\n justify-content: space-between;\\r\\n\\r\\n\\r\\n padding: 10px;\\r\\n margin-top: 5px;\\r\\n font-size: 18px;\\r\\n font-family: sans-serif;\\r\\n border-radius: 6px;\\r\\n border: 3px solid #b7b779;\\r\\n background-color: rgb(253, 253, 192);\\r\\n}\\r\\n\\r\\n\\r\\n.ex-toast-message button {\\r\\n align-self: flex-start;\\r\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n/***/ }),\n\n/***/ 2609:\n/***/ ((module) => {\n\n\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n\n content += cssWithMappingToString(item);\n\n if (needLayer) {\n content += \"}\";\n }\n\n if (item[2]) {\n content += \"}\";\n }\n\n if (item[4]) {\n content += \"}\";\n }\n\n return content;\n }).join(\"\");\n }; // import a list of modules into the list\n\n\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};\n\n/***/ }),\n\n/***/ 272:\n/***/ ((module) => {\n\n\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || \"\").concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join(\"\\n\");\n }\n\n return [content].join(\"\\n\");\n};\n\n/***/ })\n\n/******/ });\n/************************************************************************/\n/******/ // The module cache\n/******/ var __webpack_module_cache__ = {};\n/******/ \n/******/ // The require function\n/******/ function __webpack_require__(moduleId) {\n/******/ \t// Check if module is in cache\n/******/ \tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \tif (cachedModule !== undefined) {\n/******/ \t\treturn cachedModule.exports;\n/******/ \t}\n/******/ \t// Create a new module (and put it into the cache)\n/******/ \tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\tid: moduleId,\n/******/ \t\t// no module.loaded needed\n/******/ \t\texports: {}\n/******/ \t};\n/******/ \n/******/ \t// Execute the module function\n/******/ \t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \n/******/ \t// Return the exports of the module\n/******/ \treturn module.exports;\n/******/ }\n/******/ \n/************************************************************************/\n/******/ /* webpack/runtime/compat get default export */\n/******/ (() => {\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = (module) => {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t() => (module['default']) :\n/******/ \t\t\t() => (module);\n/******/ \t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\treturn getter;\n/******/ \t};\n/******/ })();\n/******/ \n/******/ /* webpack/runtime/define property getters */\n/******/ (() => {\n/******/ \t// define getter functions for harmony exports\n/******/ \t__webpack_require__.d = (exports, definition) => {\n/******/ \t\tfor(var key in definition) {\n/******/ \t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t};\n/******/ })();\n/******/ \n/******/ /* webpack/runtime/global */\n/******/ (() => {\n/******/ \t__webpack_require__.g = (function() {\n/******/ \t\tif (typeof globalThis === 'object') return globalThis;\n/******/ \t\ttry {\n/******/ \t\t\treturn this || new Function('return this')();\n/******/ \t\t} catch (e) {\n/******/ \t\t\tif (typeof window === 'object') return window;\n/******/ \t\t}\n/******/ \t})();\n/******/ })();\n/******/ \n/******/ /* webpack/runtime/hasOwnProperty shorthand */\n/******/ (() => {\n/******/ \t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ })();\n/******/ \n/******/ /* webpack/runtime/make namespace object */\n/******/ (() => {\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = (exports) => {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/ })();\n/******/ \n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n(() => {\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"fWn\": () => (/* reexport */ ActionContext),\n \"Ia8\": () => (/* reexport */ ActionQueue),\n \"rqv\": () => (/* reexport */ ActionSequence),\n \"hLI\": () => (/* reexport */ ActionsComponent),\n \"yyv\": () => (/* reexport */ ActionsSystem),\n \"tX5\": () => (/* reexport */ ActivateEvent),\n \"vtX\": () => (/* reexport */ Actor),\n \"r7K\": () => (/* reexport */ AddedComponent),\n \"lCh\": () => (/* reexport */ AddedEntity),\n \"cE4\": () => (/* reexport */ AffineMatrix),\n \"fwF\": () => (/* reexport */ Animation),\n \"sce\": () => (/* reexport */ AnimationDirection),\n \"_c7\": () => (/* reexport */ AnimationStrategy),\n \"KUs\": () => (/* reexport */ ArcadeSolver),\n \"Ajp\": () => (/* reexport */ AudioContextFactory),\n \"RDh\": () => (/* reexport */ Axis),\n \"_H9\": () => (/* reexport */ BaseAlign),\n \"mxs\": () => (/* reexport */ Blink),\n \"OmD\": () => (/* reexport */ BodyComponent),\n \"kBf\": () => (/* reexport */ BoundingBox),\n \"C4F\": () => (/* reexport */ BroadphaseStrategy),\n \"NQt\": () => (/* reexport */ BrowserComponent),\n \"JjN\": () => (/* reexport */ BrowserEvents),\n \"V1s\": () => (/* reexport */ Camera),\n \"Xz7\": () => (/* reexport */ Canvas),\n \"Cdc\": () => (/* reexport */ Circle),\n \"FKn\": () => (/* reexport */ CircleCollider),\n \"wTW\": () => (/* reexport */ Class),\n \"SUY\": () => (/* reexport */ Clock),\n \"ab2\": () => (/* reexport */ ClosestLine),\n \"GfZ\": () => (/* reexport */ ClosestLineJumpTable),\n \"YMS\": () => (/* reexport */ Collider),\n \"oyv\": () => (/* reexport */ ColliderComponent),\n \"aUb\": () => (/* reexport */ CollisionContact),\n \"SdD\": () => (/* reexport */ CollisionEndEvent),\n \"JUv\": () => (/* reexport */ CollisionGroup),\n \"jEj\": () => (/* reexport */ CollisionGroupManager),\n \"TFq\": () => (/* reexport */ CollisionJumpTable),\n \"HDU\": () => (/* reexport */ CollisionPostSolveEvent),\n \"R_y\": () => (/* reexport */ CollisionPreSolveEvent),\n \"ydN\": () => (/* reexport */ CollisionResolutionStrategy),\n \"t50\": () => (/* reexport */ CollisionStartEvent),\n \"s$$\": () => (/* reexport */ CollisionSystem),\n \"v2G\": () => (/* reexport */ CollisionType),\n \"Ilk\": () => (/* reexport */ Color),\n \"s9i\": () => (/* reexport */ ColorBlindFlags),\n \"dxL\": () => (/* reexport */ ColorBlindnessMode),\n \"LLX\": () => (/* reexport */ ColorBlindnessPostProcessor),\n \"wA2\": () => (/* reexport */ Component),\n \"R_p\": () => (/* reexport */ CompositeCollider),\n \"IQ$\": () => (/* reexport */ Configurable),\n \"I5F\": () => (/* reexport */ ConsoleAppender),\n \"X8$\": () => (/* reexport */ ContactConstraintPoint),\n \"FR6\": () => (/* reexport */ ContactEndEvent),\n \"U8o\": () => (/* reexport */ ContactStartEvent),\n \"kbG\": () => (/* reexport */ CoordPlane),\n \"iS_\": () => (/* reexport */ DeactivateEvent),\n \"cGG\": () => (/* reexport */ Debug),\n \"RPN\": () => (/* reexport */ DebugGraphicsComponent),\n \"skb\": () => (/* reexport */ DebugSystem),\n \"SLU\": () => (/* reexport */ DebugText),\n \"RdJ\": () => (/* reexport */ DegreeOfFreedom),\n \"cNu\": () => (/* reexport */ Delay),\n \"gU7\": () => (/* reexport */ Detector),\n \"LSk\": () => (/* reexport */ Die),\n \"Nmp\": () => (/* reexport */ Direction),\n \"d1Y\": () => (/* reexport */ DisplayMode),\n \"xrL\": () => (/* reexport */ DynamicTree),\n \"sRW\": () => (/* reexport */ DynamicTreeCollisionProcessor),\n \"cmV\": () => (/* binding */ EX_VERSION),\n \"qWz\": () => (/* reexport */ EaseBy),\n \"N0Q\": () => (/* reexport */ EaseTo),\n \"q8b\": () => (/* reexport */ EasingFunctions),\n \"ynB\": () => (/* reexport */ EdgeCollider),\n \"jT9\": () => (/* reexport */ ElasticToActorStrategy),\n \"wAz\": () => (/* reexport */ EmitterType),\n \"D4V\": () => (/* reexport */ Engine),\n \"N6H\": () => (/* reexport */ EnterTriggerEvent),\n \"W1A\": () => (/* reexport */ EnterViewPortEvent),\n \"JHW\": () => (/* reexport */ Entity),\n \"v2K\": () => (/* reexport */ EntityManager),\n \"pBf\": () => (/* reexport */ EventDispatcher),\n \"GMl\": () => (/* reexport */ EventTypes),\n \"zW2\": () => (/* reexport */ Events_namespaceObject),\n \"B0K\": () => (/* reexport */ ExResponse),\n \"Nv7\": () => (/* reexport */ ExcaliburGraphicsContext2DCanvas),\n \"C_p\": () => (/* reexport */ ExcaliburGraphicsContextWebGL),\n \"iqw\": () => (/* reexport */ ExcaliburWebGLContextAccessor),\n \"MUA\": () => (/* reexport */ ExitTriggerEvent),\n \"xqU\": () => (/* reexport */ ExitViewPortEvent),\n \"pTp\": () => (/* reexport */ Fade),\n \"vUK\": () => (/* reexport */ Flags),\n \"j9l\": () => (/* reexport */ Follow),\n \"Zxw\": () => (/* reexport */ Font),\n \"Hdx\": () => (/* reexport */ FontStyle),\n \"Z$d\": () => (/* reexport */ FontUnit),\n \"iqV\": () => (/* reexport */ FpsSampler),\n \"o$7\": () => (/* reexport */ FrameStats),\n \"olM\": () => (/* reexport */ Future),\n \"Zm$\": () => (/* reexport */ GameEvent),\n \"$QH\": () => (/* reexport */ GameStartEvent),\n \"i78\": () => (/* reexport */ GameStopEvent),\n \"h6u\": () => (/* reexport */ GamepadAxisEvent),\n \"hts\": () => (/* reexport */ GamepadButtonEvent),\n \"j88\": () => (/* reexport */ GamepadConnectEvent),\n \"VME\": () => (/* reexport */ GamepadDisconnectEvent),\n \"nt\": () => (/* reexport */ Gif),\n \"Ukr\": () => (/* reexport */ GlobalCoordinates),\n \"zsu\": () => (/* reexport */ Graphic),\n \"oA6\": () => (/* reexport */ GraphicsComponent),\n \"TVh\": () => (/* reexport */ GraphicsGroup),\n \"TwZ\": () => (/* reexport */ GraphicsLayer),\n \"GTT\": () => (/* reexport */ GraphicsLayers),\n \"xxj\": () => (/* reexport */ GraphicsSystem),\n \"XdK\": () => (/* reexport */ HiddenEvent),\n \"Jmb\": () => (/* reexport */ ImageFiltering),\n \"cXo\": () => (/* reexport */ ImageSource),\n \"Dm5\": () => (/* reexport */ InitializeEvent),\n \"IIB\": () => (/* reexport */ Input_Index_namespaceObject),\n \"zI0\": () => (/* reexport */ Integrator),\n \"LYD\": () => (/* reexport */ IsometricEntityComponent),\n \"cEG\": () => (/* reexport */ IsometricEntitySystem),\n \"SEl\": () => (/* reexport */ IsometricMap),\n \"t9V\": () => (/* reexport */ IsometricTile),\n \"SKZ\": () => (/* reexport */ KillEvent),\n \"__J\": () => (/* reexport */ Label),\n \"RI$\": () => (/* reexport */ LimitCameraBoundsStrategy),\n \"x12\": () => (/* reexport */ Line),\n \"ccz\": () => (/* reexport */ LineSegment),\n \"aNw\": () => (/* reexport */ Loader),\n \"xwn\": () => (/* reexport */ LockCameraToActorAxisStrategy),\n \"dNK\": () => (/* reexport */ LockCameraToActorStrategy),\n \"ini\": () => (/* reexport */ LogLevel),\n \"YdH\": () => (/* reexport */ Logger),\n \"y3G\": () => (/* reexport */ Matrix),\n \"l57\": () => (/* reexport */ MatrixLocations),\n \"xn0\": () => (/* reexport */ MediaEvent),\n \"t2V\": () => (/* reexport */ Meet),\n \"uxB\": () => (/* reexport */ MotionComponent),\n \"cpd\": () => (/* reexport */ MotionSystem),\n \"fiy\": () => (/* reexport */ MoveBy),\n \"$XZ\": () => (/* reexport */ MoveTo),\n \"uqK\": () => (/* reexport */ NativeSoundEvent),\n \"STE\": () => (/* reexport */ NativeSoundProcessedEvent),\n \"y$z\": () => (/* reexport */ Observable),\n \"mAD\": () => (/* reexport */ OffscreenSystem),\n \"sOq\": () => (/* reexport */ Pair),\n \"hUw\": () => (/* reexport */ ParallaxComponent),\n \"_0G\": () => (/* reexport */ ParallelActions),\n \"Sqs\": () => (/* reexport */ ParseGif),\n \"hpZ\": () => (/* reexport */ Particle),\n \"Vol\": () => (/* reexport */ ParticleEmitter),\n \"wIZ\": () => (/* reexport */ Physics),\n \"cBi\": () => (/* reexport */ PhysicsStats),\n \"RFv\": () => (/* reexport */ PointerComponent),\n \"kfC\": () => (/* reexport */ PointerSystem),\n \"mgq\": () => (/* reexport */ Polygon),\n \"YVA\": () => (/* reexport */ PolygonCollider),\n \"Kgp\": () => (/* reexport */ Pool),\n \"HH$\": () => (/* reexport */ PostCollisionEvent),\n \"M_d\": () => (/* reexport */ PostDebugDrawEvent),\n \"rgh\": () => (/* reexport */ PostDrawEvent),\n \"Ra6\": () => (/* reexport */ PostFrameEvent),\n \"KhR\": () => (/* reexport */ PostKillEvent),\n \"BS5\": () => (/* reexport */ PostUpdateEvent),\n \"xhz\": () => (/* reexport */ PreCollisionEvent),\n \"xOq\": () => (/* reexport */ PreDebugDrawEvent),\n \"a9j\": () => (/* reexport */ PreDrawEvent),\n \"bHk\": () => (/* reexport */ PreFrameEvent),\n \"CgK\": () => (/* reexport */ PreKillEvent),\n \"cuY\": () => (/* reexport */ PreUpdateEvent),\n \"kvE\": () => (/* reexport */ Projection),\n \"SBu\": () => (/* reexport */ QuadIndexBuffer),\n \"AE_\": () => (/* reexport */ Query),\n \"ctO\": () => (/* reexport */ QueryManager),\n \"OLH\": () => (/* reexport */ RadiusAroundActorStrategy),\n \"kky\": () => (/* reexport */ Random),\n \"nSF\": () => (/* reexport */ Raster),\n \"zHn\": () => (/* reexport */ Ray),\n \"zwx\": () => (/* reexport */ RealisticSolver),\n \"AeJ\": () => (/* reexport */ Rectangle),\n \"hLz\": () => (/* reexport */ RemovedComponent),\n \"D9g\": () => (/* reexport */ RemovedEntity),\n \"wA\": () => (/* reexport */ Repeat),\n \"jhr\": () => (/* reexport */ RepeatForever),\n \"GVs\": () => (/* reexport */ Resolution),\n \"_zO\": () => (/* reexport */ Resource),\n \"w6$\": () => (/* reexport */ RotateBy),\n \"mhV\": () => (/* reexport */ RotateTo),\n \"MOD\": () => (/* reexport */ RotationType),\n \"kwd\": () => (/* reexport */ ScaleBy),\n \"Lmr\": () => (/* reexport */ ScaleTo),\n \"xsS\": () => (/* reexport */ Scene),\n \"lLr\": () => (/* reexport */ Screen),\n \"Z$r\": () => (/* reexport */ ScreenAppender),\n \"IXb\": () => (/* reexport */ ScreenElement),\n \"SGH\": () => (/* reexport */ ScreenShader),\n \"SMj\": () => (/* reexport */ ScrollPreventionMode),\n \"L34\": () => (/* reexport */ Semaphore),\n \"exe\": () => (/* reexport */ Shader),\n \"bnF\": () => (/* reexport */ Shape),\n \"MFA\": () => (/* reexport */ Side),\n \"$uU\": () => (/* reexport */ Sound),\n \"jyi\": () => (/* reexport */ Sprite),\n \"E03\": () => (/* reexport */ SpriteFont),\n \"V6q\": () => (/* reexport */ SpriteSheet),\n \"rg2\": () => (/* reexport */ StandardClock),\n \"DVW\": () => (/* reexport */ StateMachine),\n \"nVo\": () => (/* reexport */ StrategyContainer),\n \"F6N\": () => (/* reexport */ Stream),\n \"xP7\": () => (/* reexport */ System),\n \"Odq\": () => (/* reexport */ SystemManager),\n \"Zif\": () => (/* reexport */ SystemType),\n \"ZGJ\": () => (/* reexport */ TagComponent),\n \"MJk\": () => (/* reexport */ TestClock),\n \"xvT\": () => (/* reexport */ Text),\n \"PHM\": () => (/* reexport */ TextAlign),\n \"dpR\": () => (/* reexport */ TextureLoader),\n \"n9L\": () => (/* reexport */ Tile),\n \"KwO\": () => (/* reexport */ TileMap),\n \"B7y\": () => (/* reexport */ Timer),\n \"x7r\": () => (/* reexport */ Toaster),\n \"wx7\": () => (/* reexport */ Transform),\n \"Uvn\": () => (/* reexport */ TransformComponent),\n \"OFT\": () => (/* reexport */ TreeNode),\n \"xzN\": () => (/* reexport */ Trigger),\n \"M5Z\": () => (/* reexport */ TwoPI),\n \"ZrN\": () => (/* reexport */ Util_Index_namespaceObject),\n \"OWs\": () => (/* reexport */ Vector),\n \"dF9\": () => (/* reexport */ VectorView),\n \"oZy\": () => (/* reexport */ VertexBuffer),\n \"rD2\": () => (/* reexport */ VertexLayout),\n \"VHo\": () => (/* reexport */ VisibleEvent),\n \"ohE\": () => (/* reexport */ WebAudio),\n \"R$E\": () => (/* reexport */ WebAudioInstance),\n \"q3I\": () => (/* reexport */ World),\n \"Pab\": () => (/* reexport */ canonicalizeAngle),\n \"uZ5\": () => (/* reexport */ clamp),\n \"McK\": () => (/* reexport */ createId),\n \"F9c\": () => (/* reexport */ frac),\n \"k0b\": () => (/* reexport */ hasGraphicsTick),\n \"hnT\": () => (/* reexport */ hasOnInitialize),\n \"RSJ\": () => (/* reexport */ hasOnPostUpdate),\n \"Mku\": () => (/* reexport */ hasOnPreUpdate),\n \"h90\": () => (/* reexport */ hasPostDraw),\n \"rms\": () => (/* reexport */ hasPreDraw),\n \"ErP\": () => (/* reexport */ has_initialize),\n \"aVg\": () => (/* reexport */ has_postupdate),\n \"lPc\": () => (/* reexport */ has_preupdate),\n \"Z8E\": () => (/* reexport */ isAddedComponent),\n \"_N2\": () => (/* reexport */ isAddedSystemEntity),\n \"yFn\": () => (/* reexport */ isRemoveSystemEntity),\n \"lNv\": () => (/* reexport */ isRemovedComponent),\n \"cu9\": () => (/* reexport */ isScreenElement),\n \"MZQ\": () => (/* reexport */ maxMessages),\n \"FUM\": () => (/* reexport */ obsolete),\n \"BxR\": () => (/* reexport */ pixelSnapEpsilon),\n \"vdf\": () => (/* reexport */ randomInRange),\n \"iaL\": () => (/* reexport */ randomIntInRange),\n \"w6H\": () => (/* reexport */ range),\n \"Q4c\": () => (/* reexport */ resetObsoleteCounter),\n \"Xxe\": () => (/* reexport */ sign),\n \"Uxb\": () => (/* reexport */ toDegrees),\n \"Yr5\": () => (/* reexport */ toRadians),\n \"Bhw\": () => (/* reexport */ vec),\n \"yOA\": () => (/* reexport */ webgl_util_namespaceObject)\n});\n\n// NAMESPACE OBJECT: ./Events.ts\nvar Events_namespaceObject = {};\n__webpack_require__.r(Events_namespaceObject);\n__webpack_require__.d(Events_namespaceObject, {\n \"ActivateEvent\": () => (ActivateEvent),\n \"CollisionEndEvent\": () => (CollisionEndEvent),\n \"CollisionPostSolveEvent\": () => (CollisionPostSolveEvent),\n \"CollisionPreSolveEvent\": () => (CollisionPreSolveEvent),\n \"CollisionStartEvent\": () => (CollisionStartEvent),\n \"ContactEndEvent\": () => (ContactEndEvent),\n \"ContactStartEvent\": () => (ContactStartEvent),\n \"DeactivateEvent\": () => (DeactivateEvent),\n \"EnterTriggerEvent\": () => (EnterTriggerEvent),\n \"EnterViewPortEvent\": () => (EnterViewPortEvent),\n \"EventTypes\": () => (EventTypes),\n \"ExitTriggerEvent\": () => (ExitTriggerEvent),\n \"ExitViewPortEvent\": () => (ExitViewPortEvent),\n \"GameEvent\": () => (GameEvent),\n \"GameStartEvent\": () => (GameStartEvent),\n \"GameStopEvent\": () => (GameStopEvent),\n \"GamepadAxisEvent\": () => (GamepadAxisEvent),\n \"GamepadButtonEvent\": () => (GamepadButtonEvent),\n \"GamepadConnectEvent\": () => (GamepadConnectEvent),\n \"GamepadDisconnectEvent\": () => (GamepadDisconnectEvent),\n \"HiddenEvent\": () => (HiddenEvent),\n \"InitializeEvent\": () => (InitializeEvent),\n \"KillEvent\": () => (KillEvent),\n \"PostCollisionEvent\": () => (PostCollisionEvent),\n \"PostDebugDrawEvent\": () => (PostDebugDrawEvent),\n \"PostDrawEvent\": () => (PostDrawEvent),\n \"PostFrameEvent\": () => (PostFrameEvent),\n \"PostKillEvent\": () => (PostKillEvent),\n \"PostUpdateEvent\": () => (PostUpdateEvent),\n \"PreCollisionEvent\": () => (PreCollisionEvent),\n \"PreDebugDrawEvent\": () => (PreDebugDrawEvent),\n \"PreDrawEvent\": () => (PreDrawEvent),\n \"PreFrameEvent\": () => (PreFrameEvent),\n \"PreKillEvent\": () => (PreKillEvent),\n \"PreUpdateEvent\": () => (PreUpdateEvent),\n \"VisibleEvent\": () => (VisibleEvent)\n});\n\n// NAMESPACE OBJECT: ./Graphics/Context/webgl-util.ts\nvar webgl_util_namespaceObject = {};\n__webpack_require__.r(webgl_util_namespaceObject);\n__webpack_require__.d(webgl_util_namespaceObject, {\n \"getAttributeComponentSize\": () => (getAttributeComponentSize),\n \"getAttributePointerType\": () => (getAttributePointerType),\n \"getGlTypeSizeBytes\": () => (getGlTypeSizeBytes)\n});\n\n// NAMESPACE OBJECT: ./Util/DrawUtil.ts\nvar DrawUtil_namespaceObject = {};\n__webpack_require__.r(DrawUtil_namespaceObject);\n__webpack_require__.d(DrawUtil_namespaceObject, {\n \"circle\": () => (circle),\n \"line\": () => (line),\n \"point\": () => (point),\n \"roundRect\": () => (roundRect),\n \"vector\": () => (vector)\n});\n\n// NAMESPACE OBJECT: ./Input/Index.ts\nvar Input_Index_namespaceObject = {};\n__webpack_require__.r(Input_Index_namespaceObject);\n__webpack_require__.d(Input_Index_namespaceObject, {\n \"Axes\": () => (Axes),\n \"Buttons\": () => (Buttons),\n \"Gamepad\": () => (Gamepad),\n \"Gamepads\": () => (Gamepads),\n \"KeyEvent\": () => (KeyEvent),\n \"Keyboard\": () => (Keyboard),\n \"Keys\": () => (Keys),\n \"NativePointerButton\": () => (NativePointerButton),\n \"PointerButton\": () => (PointerButton),\n \"PointerComponent\": () => (PointerComponent),\n \"PointerEvent\": () => (PointerEvent),\n \"PointerEventReceiver\": () => (PointerEventReceiver),\n \"PointerScope\": () => (PointerScope),\n \"PointerSystem\": () => (PointerSystem),\n \"PointerType\": () => (PointerType),\n \"WheelDeltaMode\": () => (WheelDeltaMode),\n \"WheelEvent\": () => (WheelEvent)\n});\n\n// NAMESPACE OBJECT: ./Util/Index.ts\nvar Util_Index_namespaceObject = {};\n__webpack_require__.r(Util_Index_namespaceObject);\n__webpack_require__.d(Util_Index_namespaceObject, {\n \"ConsoleAppender\": () => (ConsoleAppender),\n \"DrawUtil\": () => (DrawUtil_namespaceObject),\n \"EasingFunctions\": () => (EasingFunctions),\n \"LogLevel\": () => (LogLevel),\n \"Logger\": () => (Logger),\n \"Observable\": () => (Observable),\n \"ScreenAppender\": () => (ScreenAppender),\n \"addItemToArray\": () => (addItemToArray),\n \"contains\": () => (contains),\n \"delay\": () => (delay),\n \"fail\": () => (fail),\n \"getPosition\": () => (getPosition),\n \"removeItemFromArray\": () => (removeItemFromArray)\n});\n\n// EXTERNAL MODULE: ../../node_modules/core-js/es/array/sort.js\nvar sort = __webpack_require__(4662);\n// EXTERNAL MODULE: ../../node_modules/core-js/es/object/keys.js\nvar keys = __webpack_require__(8343);\n;// CONCATENATED MODULE: ./Polyfill.ts\n\r\n\r\n/**\r\n * Polyfill adding function\r\n */\r\nfunction polyfill() {\r\n /* istanbul ignore next */\r\n if (typeof window === 'undefined') {\r\n window = {\r\n audioContext: function () {\r\n return;\r\n }\r\n };\r\n }\r\n /* istanbul ignore next */\r\n if (typeof window !== 'undefined' && !window.requestAnimationFrame) {\r\n window.requestAnimationFrame =\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n function (callback) {\r\n window.setInterval(callback, 1000 / 60);\r\n };\r\n }\r\n /* istanbul ignore next */\r\n if (typeof window !== 'undefined' && !window.cancelAnimationFrame) {\r\n window.cancelAnimationFrame =\r\n window.webkitCancelAnimationFrame ||\r\n window.mozCancelAnimationFrame ||\r\n function () {\r\n return;\r\n };\r\n }\r\n /* istanbul ignore next */\r\n if (typeof window !== 'undefined' && !window.AudioContext) {\r\n if (window.webkitAudioContext) {\r\n const ctx = window.webkitAudioContext;\r\n const replaceMe = ctx.prototype.decodeAudioData;\r\n window.webkitAudioContext.prototype.decodeAudioData = function (arrayBuffer) {\r\n return new Promise((resolve, reject) => {\r\n replaceMe.call(this, arrayBuffer, resolve, reject);\r\n });\r\n };\r\n }\r\n window.AudioContext =\r\n window.AudioContext ||\r\n window.webkitAudioContext ||\r\n window.mozAudioContext ||\r\n window.msAudioContext ||\r\n window.oAudioContext;\r\n }\r\n /* istanbul ignore next */\r\n if (typeof window !== 'undefined' && !window.devicePixelRatio) {\r\n window.devicePixelRatio = window.devicePixelRatio || 1;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Flags.ts\n/**\r\n * Flags is a feature flag implementation for Excalibur. They can only be operated **before [[Engine]] construction**\r\n * after which they are frozen and are read-only.\r\n *\r\n * Flags are used to enable experimental or preview features in Excalibur.\r\n */\r\nclass Flags {\r\n /**\r\n * Force excalibur to load the Canvas 2D graphics context fallback\r\n *\r\n * @warning not all features of excalibur are supported in the Canvas 2D fallback\r\n */\r\n static useCanvasGraphicsContext() {\r\n Flags.enable('use-canvas-context');\r\n }\r\n /**\r\n * Freeze all flag modifications making them readonly\r\n */\r\n static freeze() {\r\n Flags._FROZEN = true;\r\n }\r\n /**\r\n * Resets internal flag state, not meant to be called by users. Only used for testing.\r\n *\r\n * Calling this in your game is UNSUPPORTED\r\n * @internal\r\n */\r\n static _reset() {\r\n Flags._FROZEN = false;\r\n Flags._FLAGS = {};\r\n }\r\n /**\r\n * Enable a specific feature flag by name. **Note: can only be set before [[Engine]] constructor time**\r\n * @param flagName\r\n */\r\n static enable(flagName) {\r\n if (this._FROZEN) {\r\n throw Error('Feature flags can only be enabled before Engine constructor time');\r\n }\r\n Flags._FLAGS[flagName] = true;\r\n }\r\n /**\r\n * Disable a specific feature flag by name. **Note: can only be set before [[Engine]] constructor time**\r\n * @param flagName\r\n */\r\n static disable(flagName) {\r\n if (this._FROZEN) {\r\n throw Error('Feature flags can only be disabled before Engine constructor time');\r\n }\r\n Flags._FLAGS[flagName] = false;\r\n }\r\n /**\r\n * Check if a flag is enabled. If the flag is disabled or does not exist `false` is returned\r\n * @param flagName\r\n */\r\n static isEnabled(flagName) {\r\n return !!Flags._FLAGS[flagName];\r\n }\r\n /**\r\n * Show a list of currently known flags\r\n */\r\n static show() {\r\n return Object.keys(Flags._FLAGS);\r\n }\r\n}\r\nFlags._FROZEN = false;\r\nFlags._FLAGS = {};\r\n\n;// CONCATENATED MODULE: ./Id.ts\n/**\r\n * Create a branded ID type from a number\r\n */\r\nfunction createId(type, value) {\r\n return { type, value };\r\n}\r\n;\r\n\n;// CONCATENATED MODULE: ./Math/Random.ts\n/**\r\n * @module\r\n * Pseudo-Random Utility\r\n *\r\n * A pseudo-random utility to add seeded random support for help in\r\n * generating things like terrain or reproducible randomness. Uses the\r\n * [Mersenne Twister](https://en.wikipedia.org/wiki/Mersenne_Twister) algorithm.\r\n */\r\n/**\r\n * 32-bit mask\r\n */\r\nconst BITMASK32 = 0xffffffff;\r\n/**\r\n * Pseudo-random number generator following the Mersenne_Twister algorithm. Given a seed this generator will produce the same sequence\r\n * of numbers each time it is called.\r\n * See https://en.wikipedia.org/wiki/Mersenne_Twister for more details.\r\n * Uses the MT19937-32 (2002) implementation documented here http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html\r\n *\r\n * Api inspired by http://chancejs.com/# https://github.com/chancejs/chancejs\r\n */\r\nclass Random {\r\n /**\r\n * If no seed is specified, the Date.now() is used\r\n */\r\n constructor(seed) {\r\n this.seed = seed;\r\n // Separation point of one one word, the number of bits in the lower bitmask 0 <= r <= w-1\r\n this._lowerMask = 0x7fffffff; // 31 bits same as _r\r\n this._upperMask = 0x80000000; // 34 high bits\r\n // Word size, 64 bits\r\n this._w = 32;\r\n // Degree of recurrence\r\n this._n = 624;\r\n // Middle word, an offset used in the recurrence defining the series x, 1<=m>> 0;\r\n for (let i = 1; i < this._n; i++) {\r\n const s = this._mt[i - 1] ^ (this._mt[i - 1] >>> (this._w - 2));\r\n // numbers are bigger than the JS max safe int, add in 16-bit chunks to prevent IEEE rounding errors on high bits\r\n this._mt[i] = (((this._f * ((s & 0xffff0000) >>> 16)) << 16) + this._f * (s & 0xffff) + i) >>> 0;\r\n }\r\n this._index = this._n;\r\n }\r\n /**\r\n * Apply the twist\r\n */\r\n _twist() {\r\n const mag01 = [0x0, this._a];\r\n let y = 0, i = 0;\r\n for (; i < this._n - this._m; i++) {\r\n y = (this._mt[i] & this._upperMask) | (this._mt[i + 1] & this._lowerMask);\r\n this._mt[i] = this._mt[i + this._m] ^ (y >>> 1) ^ (mag01[y & 0x1] & BITMASK32);\r\n }\r\n for (; i < this._n - 1; i++) {\r\n y = (this._mt[i] & this._upperMask) | (this._mt[i + 1] & this._lowerMask);\r\n this._mt[i] = this._mt[i + (this._m - this._n)] ^ (y >>> 1) ^ (mag01[y & 0x1] & BITMASK32);\r\n }\r\n y = (this._mt[this._n - 1] & this._upperMask) | (this._mt[0] & this._lowerMask);\r\n this._mt[this._n - 1] = this._mt[this._m - 1] ^ (y >>> 1) ^ (mag01[y & 0x1] & BITMASK32);\r\n this._index = 0;\r\n }\r\n /**\r\n * Return next 32 bit integer number in sequence\r\n */\r\n nextInt() {\r\n if (this._index >= this._n) {\r\n this._twist();\r\n }\r\n let y = this._mt[this._index++];\r\n y ^= y >>> this._u;\r\n y ^= (y << this._s) & this._b;\r\n y ^= (y << this._t) & this._c;\r\n y ^= y >>> this._l;\r\n return y >>> 0;\r\n }\r\n /**\r\n * Return a random floating point number between [0, 1)\r\n */\r\n next() {\r\n return this.nextInt() * (1.0 / 4294967296.0); // divided by 2^32\r\n }\r\n /**\r\n * Return a random floating point in range [min, max) min is included, max is not included\r\n */\r\n floating(min, max) {\r\n return (max - min) * this.next() + min;\r\n }\r\n /**\r\n * Return a random integer in range [min, max] min is included, max is included.\r\n * Implemented with rejection sampling, see https://medium.com/@betable/tifu-by-using-math-random-f1c308c4fd9d#.i13tdiu5a\r\n */\r\n integer(min, max) {\r\n return Math.floor((max - min + 1) * this.next() + min);\r\n }\r\n /**\r\n * Returns true or false randomly with 50/50 odds by default.\r\n * By default the likelihood of returning a true is .5 (50%).\r\n * @param likelihood takes values between [0, 1]\r\n */\r\n bool(likelihood = 0.5) {\r\n return this.next() <= likelihood;\r\n }\r\n /**\r\n * Returns one element from an array at random\r\n */\r\n pickOne(array) {\r\n return array[this.integer(0, array.length - 1)];\r\n }\r\n /**\r\n * Returns a new array random picking elements from the original\r\n * @param array Original array to pick from\r\n * @param numPicks can be any positive number\r\n * @param allowDuplicates indicates whether the returned set is allowed duplicates (it does not mean there will always be duplicates\r\n * just that it is possible)\r\n */\r\n pickSet(array, numPicks, allowDuplicates = false) {\r\n if (allowDuplicates) {\r\n return this._pickSetWithDuplicates(array, numPicks);\r\n }\r\n else {\r\n return this._pickSetWithoutDuplicates(array, numPicks);\r\n }\r\n }\r\n /**\r\n * Returns a new array randomly picking elements in the original (not reused)\r\n * @param array Array to pick elements out of\r\n * @param numPicks must be less than or equal to the number of elements in the array.\r\n */\r\n _pickSetWithoutDuplicates(array, numPicks) {\r\n if (numPicks > array.length || numPicks < 0) {\r\n throw new Error('Invalid number of elements to pick, must pick a value 0 < n <= length');\r\n }\r\n if (numPicks === array.length) {\r\n return array;\r\n }\r\n const result = new Array(numPicks);\r\n let currentPick = 0;\r\n const tempArray = array.slice(0);\r\n while (currentPick < numPicks) {\r\n const index = this.integer(0, tempArray.length - 1);\r\n result[currentPick++] = tempArray[index];\r\n tempArray.splice(index, 1);\r\n }\r\n return result;\r\n }\r\n /**\r\n * Returns a new array random picking elements from the original allowing duplicates\r\n * @param array Array to pick elements out of\r\n * @param numPicks can be any positive number\r\n */\r\n _pickSetWithDuplicates(array, numPicks) {\r\n // Typescript numbers are all floating point, so do we add check for int? (or floor the input?)\r\n if (numPicks < 0) {\r\n throw new Error('Invalid number of elements to pick, must pick a value 0 <= n < MAX_INT');\r\n }\r\n const result = new Array(numPicks);\r\n for (let i = 0; i < numPicks; i++) {\r\n result[i] = this.pickOne(array);\r\n }\r\n return result;\r\n }\r\n /**\r\n * Returns a new array that has its elements shuffled. Using the Fisher/Yates method\r\n * https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle\r\n */\r\n shuffle(array) {\r\n const tempArray = array.slice(0);\r\n let swap = null;\r\n for (let i = 0; i < tempArray.length - 2; i++) {\r\n const randomIndex = this.integer(i, tempArray.length - 1);\r\n swap = tempArray[i];\r\n tempArray[i] = tempArray[randomIndex];\r\n tempArray[randomIndex] = swap;\r\n }\r\n return tempArray;\r\n }\r\n /**\r\n * Generate a list of random integer numbers\r\n * @param length the length of the final array\r\n * @param min the minimum integer number to generate inclusive\r\n * @param max the maximum integer number to generate inclusive\r\n */\r\n range(length, min, max) {\r\n const result = new Array(length);\r\n for (let i = 0; i < length; i++) {\r\n result[i] = this.integer(min, max);\r\n }\r\n return result;\r\n }\r\n /**\r\n * Returns the result of a d4 dice roll\r\n */\r\n d4() {\r\n return this.integer(1, 4);\r\n }\r\n /**\r\n * Returns the result of a d6 dice roll\r\n */\r\n d6() {\r\n return this.integer(1, 6);\r\n }\r\n /**\r\n * Returns the result of a d8 dice roll\r\n */\r\n d8() {\r\n return this.integer(1, 8);\r\n }\r\n /**\r\n * Returns the result of a d10 dice roll\r\n */\r\n d10() {\r\n return this.integer(1, 10);\r\n }\r\n /**\r\n * Returns the result of a d12 dice roll\r\n */\r\n d12() {\r\n return this.integer(1, 12);\r\n }\r\n /**\r\n * Returns the result of a d20 dice roll\r\n */\r\n d20() {\r\n return this.integer(1, 20);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Math/util.ts\n\r\n/**\r\n * Two PI constant\r\n */\r\nconst TwoPI = Math.PI * 2;\r\n/**\r\n * Returns the fractional part of a number\r\n * @param x\r\n */\r\nfunction frac(x) {\r\n if (x >= 0) {\r\n return x - Math.floor(x);\r\n }\r\n else {\r\n return x - Math.ceil(x);\r\n }\r\n}\r\n/**\r\n * Returns the sign of a number, if 0 returns 0\r\n */\r\nfunction sign(val) {\r\n if (val === 0) {\r\n return 0;\r\n }\r\n return val < 0 ? -1 : 1;\r\n}\r\n;\r\n/**\r\n * Clamps a value between a min and max inclusive\r\n */\r\nfunction clamp(val, min, max) {\r\n return Math.min(Math.max(min, val), max);\r\n}\r\n/**\r\n * Convert an angle to be the equivalent in the range [0, 2PI]\r\n */\r\nfunction canonicalizeAngle(angle) {\r\n let tmpAngle = angle;\r\n if (angle > TwoPI) {\r\n while (tmpAngle > TwoPI) {\r\n tmpAngle -= TwoPI;\r\n }\r\n }\r\n if (angle < 0) {\r\n while (tmpAngle < 0) {\r\n tmpAngle += TwoPI;\r\n }\r\n }\r\n return tmpAngle;\r\n}\r\n/**\r\n * Convert radians to degrees\r\n */\r\nfunction toDegrees(radians) {\r\n return (180 / Math.PI) * radians;\r\n}\r\n/**\r\n * Convert degrees to radians\r\n */\r\nfunction toRadians(degrees) {\r\n return (degrees / 180) * Math.PI;\r\n}\r\n/**\r\n * Generate a range of numbers\r\n * For example: range(0, 5) -> [0, 1, 2, 3, 4, 5]\r\n * @param from inclusive\r\n * @param to inclusive\r\n */\r\nconst range = (from, to) => Array.from(new Array(to - from + 1), (_x, i) => i + from);\r\n/**\r\n * Find a random floating point number in range\r\n */\r\nfunction randomInRange(min, max, random = new Random()) {\r\n return random ? random.floating(min, max) : min + Math.random() * (max - min);\r\n}\r\n/**\r\n * Find a random integer in a range\r\n */\r\nfunction randomIntInRange(min, max, random = new Random()) {\r\n return random ? random.integer(min, max) : Math.round(randomInRange(min, max));\r\n}\r\n\n;// CONCATENATED MODULE: ./Math/vector.ts\n\r\n/**\r\n * A 2D vector on a plane.\r\n */\r\nclass Vector {\r\n /**\r\n * @param x X component of the Vector\r\n * @param y Y component of the Vector\r\n */\r\n constructor(x, y) {\r\n this._x = 0;\r\n this._y = 0;\r\n this._x = x;\r\n this._y = y;\r\n }\r\n /**\r\n * A (0, 0) vector\r\n */\r\n static get Zero() {\r\n return new Vector(0, 0);\r\n }\r\n /**\r\n * A (1, 1) vector\r\n */\r\n static get One() {\r\n return new Vector(1, 1);\r\n }\r\n /**\r\n * A (0.5, 0.5) vector\r\n */\r\n static get Half() {\r\n return new Vector(0.5, 0.5);\r\n }\r\n /**\r\n * A unit vector pointing up (0, -1)\r\n */\r\n static get Up() {\r\n return new Vector(0, -1);\r\n }\r\n /**\r\n * A unit vector pointing down (0, 1)\r\n */\r\n static get Down() {\r\n return new Vector(0, 1);\r\n }\r\n /**\r\n * A unit vector pointing left (-1, 0)\r\n */\r\n static get Left() {\r\n return new Vector(-1, 0);\r\n }\r\n /**\r\n * A unit vector pointing right (1, 0)\r\n */\r\n static get Right() {\r\n return new Vector(1, 0);\r\n }\r\n /**\r\n * Returns a vector of unit length in the direction of the specified angle in Radians.\r\n * @param angle The angle to generate the vector\r\n */\r\n static fromAngle(angle) {\r\n return new Vector(Math.cos(angle), Math.sin(angle));\r\n }\r\n /**\r\n * Checks if vector is not null, undefined, or if any of its components are NaN or Infinity.\r\n */\r\n static isValid(vec) {\r\n if (vec === null || vec === undefined) {\r\n return false;\r\n }\r\n if (isNaN(vec.x) || isNaN(vec.y)) {\r\n return false;\r\n }\r\n if (vec.x === Infinity || vec.y === Infinity || vec.x === -Infinity || vec.y === -Infinity) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n /**\r\n * Calculates distance between two Vectors\r\n * @param vec1\r\n * @param vec2\r\n */\r\n static distance(vec1, vec2) {\r\n return Math.sqrt(Math.pow(vec1.x - vec2.x, 2) + Math.pow(vec1.y - vec2.y, 2));\r\n }\r\n static min(vec1, vec2) {\r\n return new Vector(Math.min(vec1.x, vec2.x), Math.min(vec1.y, vec2.y));\r\n }\r\n static max(vec1, vec2) {\r\n return new Vector(Math.max(vec1.x, vec2.x), Math.max(vec1.y, vec2.y));\r\n }\r\n /**\r\n * Get the x component of the vector\r\n */\r\n get x() {\r\n return this._x;\r\n }\r\n /**\r\n * Set the x component, THIS MUTATES the current vector. It is usually better to create a new vector.\r\n * @warning **Be very careful setting components on shared vectors, mutating shared vectors can cause hard to find bugs**\r\n */\r\n set x(val) {\r\n this._x = val;\r\n }\r\n /**\r\n * Get the y component of the vector\r\n */\r\n get y() {\r\n return this._y;\r\n }\r\n /**\r\n * Set the y component, THIS MUTATES the current vector. It is usually better to create a new vector.\r\n * @warning **Be very careful setting components on shared vectors, mutating shared vectors can cause hard to find bugs**\r\n */\r\n set y(val) {\r\n this._y = val;\r\n }\r\n /**\r\n * Sets the x and y components at once, THIS MUTATES the current vector. It is usually better to create a new vector.\r\n *\r\n * @warning **Be very careful using this, mutating vectors can cause hard to find bugs**\r\n */\r\n setTo(x, y) {\r\n this.x = x;\r\n this.y = y;\r\n }\r\n /**\r\n * Compares this point against another and tests for equality\r\n * @param vector The other point to compare to\r\n * @param tolerance Amount of euclidean distance off we are willing to tolerate\r\n */\r\n equals(vector, tolerance = 0.001) {\r\n return Math.abs(this.x - vector.x) <= tolerance && Math.abs(this.y - vector.y) <= tolerance;\r\n }\r\n /**\r\n * The distance to another vector. If no other Vector is specified, this will return the [[magnitude]].\r\n * @param v The other vector. Leave blank to use origin vector.\r\n */\r\n distance(v) {\r\n if (!v) {\r\n return Math.sqrt(this.x * this.x + this.y * this.y);\r\n }\r\n const deltaX = this.x - v.x;\r\n const deltaY = this.y - v.y;\r\n return Math.sqrt(deltaX * deltaX + deltaY * deltaY);\r\n }\r\n squareDistance(v) {\r\n if (!v) {\r\n v = Vector.Zero;\r\n }\r\n const deltaX = this.x - v.x;\r\n const deltaY = this.y - v.y;\r\n return deltaX * deltaX + deltaY * deltaY;\r\n }\r\n /**\r\n * Clamps the current vector's magnitude mutating it\r\n * @param magnitude\r\n */\r\n clampMagnitude(magnitude) {\r\n const size = this.size;\r\n const newSize = clamp(size, 0, magnitude);\r\n this.size = newSize;\r\n return this;\r\n }\r\n /**\r\n * The size (magnitude) of the Vector\r\n */\r\n get size() {\r\n return this.distance();\r\n }\r\n /**\r\n * Setting the size mutates the current vector\r\n *\r\n * @warning Can be used to set the size of the vector, **be very careful using this, mutating vectors can cause hard to find bugs**\r\n */\r\n set size(newLength) {\r\n const v = this.normalize().scale(newLength);\r\n this.setTo(v.x, v.y);\r\n }\r\n /**\r\n * Normalizes a vector to have a magnitude of 1.\r\n */\r\n normalize() {\r\n const d = this.distance();\r\n if (d > 0) {\r\n return new Vector(this.x / d, this.y / d);\r\n }\r\n else {\r\n return new Vector(0, 1);\r\n }\r\n }\r\n /**\r\n * Returns the average (midpoint) between the current point and the specified\r\n */\r\n average(vec) {\r\n return this.add(vec).scale(0.5);\r\n }\r\n scale(sizeOrScale, dest) {\r\n const result = dest || new Vector(0, 0);\r\n if (sizeOrScale instanceof Vector) {\r\n result.x = this.x * sizeOrScale.x;\r\n result.y = this.y * sizeOrScale.y;\r\n }\r\n else {\r\n result.x = this.x * sizeOrScale;\r\n result.y = this.y * sizeOrScale;\r\n }\r\n return result;\r\n }\r\n /**\r\n * Adds one vector to another\r\n * @param v The vector to add\r\n * @param dest Optionally copy the result into a provided vector\r\n */\r\n add(v, dest) {\r\n if (dest) {\r\n dest.x = this.x + v.x;\r\n dest.y = this.y + v.y;\r\n return dest;\r\n }\r\n return new Vector(this.x + v.x, this.y + v.y);\r\n }\r\n /**\r\n * Subtracts a vector from another, if you subtract vector `B.sub(A)` the resulting vector points from A -> B\r\n * @param v The vector to subtract\r\n */\r\n sub(v) {\r\n return new Vector(this.x - v.x, this.y - v.y);\r\n }\r\n /**\r\n * Adds one vector to this one modifying the original\r\n * @param v The vector to add\r\n * @warning Be very careful using this, mutating vectors can cause hard to find bugs\r\n */\r\n addEqual(v) {\r\n this.setTo(this.x + v.x, this.y + v.y);\r\n return this;\r\n }\r\n /**\r\n * Subtracts a vector from this one modifying the original\r\n * @param v The vector to subtract\r\n * @warning Be very careful using this, mutating vectors can cause hard to find bugs\r\n */\r\n subEqual(v) {\r\n this.setTo(this.x - v.x, this.y - v.y);\r\n return this;\r\n }\r\n /**\r\n * Scales this vector by a factor of size and modifies the original\r\n * @warning Be very careful using this, mutating vectors can cause hard to find bugs\r\n */\r\n scaleEqual(size) {\r\n this.setTo(this.x * size, this.y * size);\r\n return this;\r\n }\r\n /**\r\n * Performs a dot product with another vector\r\n * @param v The vector to dot\r\n */\r\n dot(v) {\r\n return this.x * v.x + this.y * v.y;\r\n }\r\n cross(v) {\r\n if (v instanceof Vector) {\r\n return this.x * v.y - this.y * v.x;\r\n }\r\n else if (typeof v === 'number') {\r\n return new Vector(v * this.y, -v * this.x);\r\n }\r\n }\r\n static cross(num, vec) {\r\n return new Vector(-num * vec.y, num * vec.x);\r\n }\r\n /**\r\n * Returns the perpendicular vector to this one\r\n */\r\n perpendicular() {\r\n return new Vector(this.y, -this.x);\r\n }\r\n /**\r\n * Returns the normal vector to this one, same as the perpendicular of length 1\r\n */\r\n normal() {\r\n return this.perpendicular().normalize();\r\n }\r\n /**\r\n * Negate the current vector\r\n */\r\n negate() {\r\n return this.scale(-1);\r\n }\r\n /**\r\n * Returns the angle of this vector.\r\n */\r\n toAngle() {\r\n return Math.atan2(this.y, this.x);\r\n }\r\n /**\r\n * Rotates the current vector around a point by a certain number of\r\n * degrees in radians\r\n */\r\n rotate(angle, anchor) {\r\n if (!anchor) {\r\n anchor = new Vector(0, 0);\r\n }\r\n const sinAngle = Math.sin(angle);\r\n const cosAngle = Math.cos(angle);\r\n const x = cosAngle * (this.x - anchor.x) - sinAngle * (this.y - anchor.y) + anchor.x;\r\n const y = sinAngle * (this.x - anchor.x) + cosAngle * (this.y - anchor.y) + anchor.y;\r\n return new Vector(x, y);\r\n }\r\n /**\r\n * Creates new vector that has the same values as the previous.\r\n */\r\n clone(dest) {\r\n const v = dest !== null && dest !== void 0 ? dest : new Vector(0, 0);\r\n v.x = this.x;\r\n v.y = this.y;\r\n return v;\r\n }\r\n /**\r\n * Returns a string representation of the vector.\r\n */\r\n toString(fixed) {\r\n if (fixed) {\r\n return `(${this.x.toFixed(fixed)}, ${this.y.toFixed(fixed)})`;\r\n }\r\n return `(${this.x}, ${this.y})`;\r\n }\r\n}\r\n/**\r\n * Shorthand for creating new Vectors - returns a new Vector instance with the\r\n * provided X and Y components.\r\n *\r\n * @param x X component of the Vector\r\n * @param y Y component of the Vector\r\n */\r\nfunction vec(x, y) {\r\n return new Vector(x, y);\r\n}\r\n\n;// CONCATENATED MODULE: ./Util/Log.ts\n/* eslint-disable no-console */\r\n/**\r\n * Logging level that Excalibur will tag\r\n */\r\nvar LogLevel;\r\n(function (LogLevel) {\r\n LogLevel[LogLevel[\"Debug\"] = 0] = \"Debug\";\r\n LogLevel[LogLevel[\"Info\"] = 1] = \"Info\";\r\n LogLevel[LogLevel[\"Warn\"] = 2] = \"Warn\";\r\n LogLevel[LogLevel[\"Error\"] = 3] = \"Error\";\r\n LogLevel[LogLevel[\"Fatal\"] = 4] = \"Fatal\";\r\n})(LogLevel || (LogLevel = {}));\r\n/**\r\n * Static singleton that represents the logging facility for Excalibur.\r\n * Excalibur comes built-in with a [[ConsoleAppender]] and [[ScreenAppender]].\r\n * Derive from [[Appender]] to create your own logging appenders.\r\n */\r\nclass Logger {\r\n constructor() {\r\n this._appenders = [];\r\n /**\r\n * Gets or sets the default logging level. Excalibur will only log\r\n * messages if equal to or above this level. Default: [[LogLevel.Info]]\r\n */\r\n this.defaultLevel = LogLevel.Info;\r\n if (Logger._INSTANCE) {\r\n throw new Error('Logger is a singleton');\r\n }\r\n Logger._INSTANCE = this;\r\n // Default console appender\r\n Logger._INSTANCE.addAppender(new ConsoleAppender());\r\n return Logger._INSTANCE;\r\n }\r\n /**\r\n * Gets the current static instance of Logger\r\n */\r\n static getInstance() {\r\n if (Logger._INSTANCE == null) {\r\n Logger._INSTANCE = new Logger();\r\n }\r\n return Logger._INSTANCE;\r\n }\r\n /**\r\n * Adds a new [[Appender]] to the list of appenders to write to\r\n */\r\n addAppender(appender) {\r\n this._appenders.push(appender);\r\n }\r\n /**\r\n * Clears all appenders from the logger\r\n */\r\n clearAppenders() {\r\n this._appenders.length = 0;\r\n }\r\n /**\r\n * Logs a message at a given LogLevel\r\n * @param level The LogLevel`to log the message at\r\n * @param args An array of arguments to write to an appender\r\n */\r\n _log(level, args) {\r\n if (level == null) {\r\n level = this.defaultLevel;\r\n }\r\n const len = this._appenders.length;\r\n for (let i = 0; i < len; i++) {\r\n if (level >= this.defaultLevel) {\r\n this._appenders[i].log(level, args);\r\n }\r\n }\r\n }\r\n /**\r\n * Writes a log message at the [[LogLevel.Debug]] level\r\n * @param args Accepts any number of arguments\r\n */\r\n debug(...args) {\r\n this._log(LogLevel.Debug, args);\r\n }\r\n /**\r\n * Writes a log message at the [[LogLevel.Info]] level\r\n * @param args Accepts any number of arguments\r\n */\r\n info(...args) {\r\n this._log(LogLevel.Info, args);\r\n }\r\n /**\r\n * Writes a log message at the [[LogLevel.Warn]] level\r\n * @param args Accepts any number of arguments\r\n */\r\n warn(...args) {\r\n this._log(LogLevel.Warn, args);\r\n }\r\n /**\r\n * Writes a log message at the [[LogLevel.Error]] level\r\n * @param args Accepts any number of arguments\r\n */\r\n error(...args) {\r\n this._log(LogLevel.Error, args);\r\n }\r\n /**\r\n * Writes a log message at the [[LogLevel.Fatal]] level\r\n * @param args Accepts any number of arguments\r\n */\r\n fatal(...args) {\r\n this._log(LogLevel.Fatal, args);\r\n }\r\n}\r\nLogger._INSTANCE = null;\r\n/**\r\n * Console appender for browsers (i.e. `console.log`)\r\n */\r\nclass ConsoleAppender {\r\n /**\r\n * Logs a message at the given [[LogLevel]]\r\n * @param level Level to log at\r\n * @param args Arguments to log\r\n */\r\n log(level, args) {\r\n // Check for console support\r\n if (!console && !console.log && console.warn && console.error) {\r\n // todo maybe do something better than nothing\r\n return;\r\n }\r\n // Create a new console args array\r\n const consoleArgs = [];\r\n consoleArgs.unshift.apply(consoleArgs, args);\r\n consoleArgs.unshift('[' + LogLevel[level] + '] : ');\r\n if (level < LogLevel.Warn) {\r\n // Call .log for Debug/Info\r\n if (console.log.apply) {\r\n // this is required on some older browsers that don't support apply on console.log :(\r\n console.log.apply(console, consoleArgs);\r\n }\r\n else {\r\n console.log(consoleArgs.join(' '));\r\n }\r\n }\r\n else if (level < LogLevel.Error) {\r\n // Call .warn for Warn\r\n if (console.warn.apply) {\r\n console.warn.apply(console, consoleArgs);\r\n }\r\n else {\r\n console.warn(consoleArgs.join(' '));\r\n }\r\n }\r\n else {\r\n // Call .error for Error/Fatal\r\n if (console.error.apply) {\r\n console.error.apply(console, consoleArgs);\r\n }\r\n else {\r\n console.error(consoleArgs.join(' '));\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * On-screen (canvas) appender\r\n */\r\nclass ScreenAppender {\r\n /**\r\n * @param width Width of the screen appender in pixels\r\n * @param height Height of the screen appender in pixels\r\n */\r\n constructor(width, height) {\r\n // @todo Clean this up\r\n this._messages = [];\r\n this._canvas = document.createElement('canvas');\r\n this._canvas.width = width || window.innerWidth;\r\n this._canvas.height = height || window.innerHeight;\r\n this._canvas.style.position = 'absolute';\r\n // eslint-disable-next-line\r\n this._ctx = this._canvas.getContext('2d'); // eslint-disable-line\r\n document.body.appendChild(this._canvas);\r\n }\r\n /**\r\n * Logs a message at the given [[LogLevel]]\r\n * @param level Level to log at\r\n * @param args Arguments to log\r\n */\r\n log(level, args) {\r\n const message = args.join(',');\r\n this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\r\n this._messages.unshift('[' + LogLevel[level] + '] : ' + message);\r\n let pos = 10;\r\n let opacity = 1.0;\r\n for (let i = 0; i < this._messages.length; i++) {\r\n this._ctx.fillStyle = 'rgba(255,255,255,' + opacity.toFixed(2) + ')';\r\n this._ctx.fillText(this._messages[i], 200, pos);\r\n pos += 10;\r\n opacity = opacity > 0 ? opacity - 0.05 : 0;\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Color.ts\n/**\r\n * Provides standard colors (e.g. [[Color.Black]])\r\n * but you can also create custom colors using RGB, HSL, or Hex. Also provides\r\n * useful color operations like [[Color.lighten]], [[Color.darken]], and more.\r\n */\r\nclass Color {\r\n /**\r\n * Creates a new instance of Color from an r, g, b, a\r\n *\r\n * @param r The red component of color (0-255)\r\n * @param g The green component of color (0-255)\r\n * @param b The blue component of color (0-255)\r\n * @param a The alpha component of color (0-1.0)\r\n */\r\n constructor(r, g, b, a) {\r\n this.r = r;\r\n this.g = g;\r\n this.b = b;\r\n this.a = a != null ? a : 1;\r\n }\r\n /**\r\n * Creates a new instance of Color from an r, g, b, a\r\n *\r\n * @param r The red component of color (0-255)\r\n * @param g The green component of color (0-255)\r\n * @param b The blue component of color (0-255)\r\n * @param a The alpha component of color (0-1.0)\r\n */\r\n static fromRGB(r, g, b, a) {\r\n return new Color(r, g, b, a);\r\n }\r\n /**\r\n * Creates a new instance of Color from a rgb string\r\n *\r\n * @param string CSS color string of the form rgba(255, 255, 255, 1) or rgb(255, 255, 255)\r\n */\r\n static fromRGBString(string) {\r\n const rgbaRegEx = /^rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*(\\d+(?:\\.\\d+)?))?\\)/i;\r\n let match = null;\r\n if ((match = string.match(rgbaRegEx))) {\r\n const r = parseInt(match[1], 10);\r\n const g = parseInt(match[2], 10);\r\n const b = parseInt(match[3], 10);\r\n let a = 1;\r\n if (match[4]) {\r\n a = parseFloat(match[4]);\r\n }\r\n return new Color(r, g, b, a);\r\n }\r\n else {\r\n throw new Error('Invalid rgb/a string: ' + string);\r\n }\r\n }\r\n /**\r\n * Creates a new instance of Color from a hex string\r\n *\r\n * @param hex CSS color string of the form #ffffff, the alpha component is optional\r\n */\r\n static fromHex(hex) {\r\n const hexRegEx = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})?$/i;\r\n let match = null;\r\n if ((match = hex.match(hexRegEx))) {\r\n const r = parseInt(match[1], 16);\r\n const g = parseInt(match[2], 16);\r\n const b = parseInt(match[3], 16);\r\n let a = 1;\r\n if (match[4]) {\r\n a = parseInt(match[4], 16) / 255;\r\n }\r\n return new Color(r, g, b, a);\r\n }\r\n else {\r\n throw new Error('Invalid hex string: ' + hex);\r\n }\r\n }\r\n /**\r\n * Creates a new instance of Color from hsla values\r\n *\r\n * @param h Hue is represented [0-1]\r\n * @param s Saturation is represented [0-1]\r\n * @param l Luminance is represented [0-1]\r\n * @param a Alpha is represented [0-1]\r\n */\r\n static fromHSL(h, s, l, a = 1.0) {\r\n const temp = new HSLColor(h, s, l, a);\r\n return temp.toRGBA();\r\n }\r\n /**\r\n * Lightens the current color by a specified amount\r\n *\r\n * @param factor The amount to lighten by [0-1]\r\n */\r\n lighten(factor = 0.1) {\r\n const temp = HSLColor.fromRGBA(this.r, this.g, this.b, this.a);\r\n temp.l += (1 - temp.l) * factor;\r\n return temp.toRGBA();\r\n }\r\n /**\r\n * Darkens the current color by a specified amount\r\n *\r\n * @param factor The amount to darken by [0-1]\r\n */\r\n darken(factor = 0.1) {\r\n const temp = HSLColor.fromRGBA(this.r, this.g, this.b, this.a);\r\n temp.l -= temp.l * factor;\r\n return temp.toRGBA();\r\n }\r\n /**\r\n * Saturates the current color by a specified amount\r\n *\r\n * @param factor The amount to saturate by [0-1]\r\n */\r\n saturate(factor = 0.1) {\r\n const temp = HSLColor.fromRGBA(this.r, this.g, this.b, this.a);\r\n temp.s += temp.s * factor;\r\n return temp.toRGBA();\r\n }\r\n /**\r\n * Desaturates the current color by a specified amount\r\n *\r\n * @param factor The amount to desaturate by [0-1]\r\n */\r\n desaturate(factor = 0.1) {\r\n const temp = HSLColor.fromRGBA(this.r, this.g, this.b, this.a);\r\n temp.s -= temp.s * factor;\r\n return temp.toRGBA();\r\n }\r\n /**\r\n * Multiplies a color by another, results in a darker color\r\n *\r\n * @param color The other color\r\n */\r\n multiply(color) {\r\n const newR = (((color.r / 255) * this.r) / 255) * 255;\r\n const newG = (((color.g / 255) * this.g) / 255) * 255;\r\n const newB = (((color.b / 255) * this.b) / 255) * 255;\r\n const newA = color.a * this.a;\r\n return new Color(newR, newG, newB, newA);\r\n }\r\n /**\r\n * Screens a color by another, results in a lighter color\r\n *\r\n * @param color The other color\r\n */\r\n screen(color) {\r\n const color1 = color.invert();\r\n const color2 = color.invert();\r\n return color1.multiply(color2).invert();\r\n }\r\n /**\r\n * Inverts the current color\r\n */\r\n invert() {\r\n return new Color(255 - this.r, 255 - this.g, 255 - this.b, 1.0 - this.a);\r\n }\r\n /**\r\n * Averages the current color with another\r\n *\r\n * @param color The other color\r\n */\r\n average(color) {\r\n const newR = (color.r + this.r) / 2;\r\n const newG = (color.g + this.g) / 2;\r\n const newB = (color.b + this.b) / 2;\r\n const newA = (color.a + this.a) / 2;\r\n return new Color(newR, newG, newB, newA);\r\n }\r\n equal(color) {\r\n return this.toString() === color.toString();\r\n }\r\n /**\r\n * Returns a CSS string representation of a color.\r\n *\r\n * @param format Color representation, accepts: rgb, hsl, or hex\r\n */\r\n toString(format = 'rgb') {\r\n switch (format) {\r\n case 'rgb':\r\n return this.toRGBA();\r\n case 'hsl':\r\n return this.toHSLA();\r\n case 'hex':\r\n return this.toHex();\r\n default:\r\n throw new Error('Invalid Color format');\r\n }\r\n }\r\n /**\r\n * Returns Hex Value of a color component\r\n * @param c color component\r\n * @see https://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb\r\n */\r\n _componentToHex(c) {\r\n const hex = c.toString(16);\r\n return hex.length === 1 ? '0' + hex : hex;\r\n }\r\n /**\r\n * Return Hex representation of a color.\r\n */\r\n toHex() {\r\n return '#' + this._componentToHex(this.r) + this._componentToHex(this.g) + this._componentToHex(this.b);\r\n }\r\n /**\r\n * Return RGBA representation of a color.\r\n */\r\n toRGBA() {\r\n const result = String(this.r.toFixed(0)) + ', ' + String(this.g.toFixed(0)) + ', ' + String(this.b.toFixed(0));\r\n if (this.a !== undefined || this.a !== null) {\r\n return 'rgba(' + result + ', ' + String(this.a) + ')';\r\n }\r\n return 'rgb(' + result + ')';\r\n }\r\n /**\r\n * Return HSLA representation of a color.\r\n */\r\n toHSLA() {\r\n return HSLColor.fromRGBA(this.r, this.g, this.b, this.a).toString();\r\n }\r\n /**\r\n * Returns a CSS string representation of a color.\r\n */\r\n fillStyle() {\r\n return this.toString();\r\n }\r\n /**\r\n * Returns a clone of the current color.\r\n */\r\n clone() {\r\n return new Color(this.r, this.g, this.b, this.a);\r\n }\r\n /**\r\n * Black (#000000)\r\n */\r\n static get Black() {\r\n return Color.fromHex('#000000');\r\n }\r\n /**\r\n * White (#FFFFFF)\r\n */\r\n static get White() {\r\n return Color.fromHex('#FFFFFF');\r\n }\r\n /**\r\n * Gray (#808080)\r\n */\r\n static get Gray() {\r\n return Color.fromHex('#808080');\r\n }\r\n /**\r\n * Light gray (#D3D3D3)\r\n */\r\n static get LightGray() {\r\n return Color.fromHex('#D3D3D3');\r\n }\r\n /**\r\n * Dark gray (#A9A9A9)\r\n */\r\n static get DarkGray() {\r\n return Color.fromHex('#A9A9A9');\r\n }\r\n /**\r\n * Yellow (#FFFF00)\r\n */\r\n static get Yellow() {\r\n return Color.fromHex('#FFFF00');\r\n }\r\n /**\r\n * Orange (#FFA500)\r\n */\r\n static get Orange() {\r\n return Color.fromHex('#FFA500');\r\n }\r\n /**\r\n * Red (#FF0000)\r\n */\r\n static get Red() {\r\n return Color.fromHex('#FF0000');\r\n }\r\n /**\r\n * Vermilion (#FF5B31)\r\n */\r\n static get Vermilion() {\r\n return Color.fromHex('#FF5B31');\r\n }\r\n /**\r\n * Rose (#FF007F)\r\n */\r\n static get Rose() {\r\n return Color.fromHex('#FF007F');\r\n }\r\n /**\r\n * Magenta (#FF00FF)\r\n */\r\n static get Magenta() {\r\n return Color.fromHex('#FF00FF');\r\n }\r\n /**\r\n * Violet (#7F00FF)\r\n */\r\n static get Violet() {\r\n return Color.fromHex('#7F00FF');\r\n }\r\n /**\r\n * Blue (#0000FF)\r\n */\r\n static get Blue() {\r\n return Color.fromHex('#0000FF');\r\n }\r\n /**\r\n * Azure (#007FFF)\r\n */\r\n static get Azure() {\r\n return Color.fromHex('#007FFF');\r\n }\r\n /**\r\n * Cyan (#00FFFF)\r\n */\r\n static get Cyan() {\r\n return Color.fromHex('#00FFFF');\r\n }\r\n /**\r\n * Viridian (#59978F)\r\n */\r\n static get Viridian() {\r\n return Color.fromHex('#59978F');\r\n }\r\n /**\r\n * Green (#00FF00)\r\n */\r\n static get Green() {\r\n return Color.fromHex('#00FF00');\r\n }\r\n /**\r\n * Chartreuse (#7FFF00)\r\n */\r\n static get Chartreuse() {\r\n return Color.fromHex('#7FFF00');\r\n }\r\n /**\r\n * Transparent (#FFFFFF00)\r\n */\r\n static get Transparent() {\r\n return Color.fromHex('#FFFFFF00');\r\n }\r\n /**\r\n * ExcaliburBlue (#176BAA)\r\n */\r\n static get ExcaliburBlue() {\r\n return Color.fromHex('#176BAA');\r\n }\r\n}\r\n/**\r\n * Internal HSL Color representation\r\n *\r\n * http://en.wikipedia.org/wiki/HSL_and_HSV\r\n * http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c\r\n */\r\nclass HSLColor {\r\n constructor(h, s, l, a) {\r\n this.h = h;\r\n this.s = s;\r\n this.l = l;\r\n this.a = a;\r\n }\r\n static hue2rgb(p, q, t) {\r\n if (t < 0) {\r\n t += 1;\r\n }\r\n if (t > 1) {\r\n t -= 1;\r\n }\r\n if (t < 1 / 6) {\r\n return p + (q - p) * 6 * t;\r\n }\r\n if (t < 1 / 2) {\r\n return q;\r\n }\r\n if (t < 2 / 3) {\r\n return p + (q - p) * (2 / 3 - t) * 6;\r\n }\r\n return p;\r\n }\r\n static fromRGBA(r, g, b, a) {\r\n r /= 255;\r\n g /= 255;\r\n b /= 255;\r\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\r\n let h, s;\r\n const l = (max + min) / 2;\r\n if (max === min) {\r\n h = s = 0; // achromatic\r\n }\r\n else {\r\n const d = max - min;\r\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n switch (max) {\r\n case r:\r\n h = (g - b) / d + (g < b ? 6 : 0);\r\n break;\r\n case g:\r\n h = (b - r) / d + 2;\r\n break;\r\n case b:\r\n h = (r - g) / d + 4;\r\n break;\r\n }\r\n h /= 6;\r\n }\r\n return new HSLColor(h, s, l, a);\r\n }\r\n toRGBA() {\r\n let r, g, b;\r\n if (this.s === 0) {\r\n r = g = b = this.l; // achromatic\r\n }\r\n else {\r\n const q = this.l < 0.5 ? this.l * (1 + this.s) : this.l + this.s - this.l * this.s;\r\n const p = 2 * this.l - q;\r\n r = HSLColor.hue2rgb(p, q, this.h + 1 / 3);\r\n g = HSLColor.hue2rgb(p, q, this.h);\r\n b = HSLColor.hue2rgb(p, q, this.h - 1 / 3);\r\n }\r\n return new Color(r * 255, g * 255, b * 255, this.a);\r\n }\r\n toString() {\r\n const h = this.h.toFixed(0), s = this.s.toFixed(0), l = this.l.toFixed(0), a = this.a.toFixed(0);\r\n return `hsla(${h}, ${s}, ${l}, ${a})`;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Side.ts\n\r\n/**\r\n * An enum that describes the sides of an axis aligned box for collision\r\n */\r\nvar Side;\r\n(function (Side) {\r\n Side[\"None\"] = \"None\";\r\n Side[\"Top\"] = \"Top\";\r\n Side[\"Bottom\"] = \"Bottom\";\r\n Side[\"Left\"] = \"Left\";\r\n Side[\"Right\"] = \"Right\";\r\n})(Side || (Side = {}));\r\n(function (Side) {\r\n /**\r\n * Returns the opposite side from the current\r\n */\r\n function getOpposite(side) {\r\n if (side === Side.Top) {\r\n return Side.Bottom;\r\n }\r\n if (side === Side.Bottom) {\r\n return Side.Top;\r\n }\r\n if (side === Side.Left) {\r\n return Side.Right;\r\n }\r\n if (side === Side.Right) {\r\n return Side.Left;\r\n }\r\n return Side.None;\r\n }\r\n Side.getOpposite = getOpposite;\r\n /**\r\n * Given a vector, return the Side most in that direction (via dot product)\r\n */\r\n function fromDirection(direction) {\r\n const directions = [Vector.Left, Vector.Right, Vector.Up, Vector.Down];\r\n const directionEnum = [Side.Left, Side.Right, Side.Top, Side.Bottom];\r\n let max = -Number.MAX_VALUE;\r\n let maxIndex = -1;\r\n for (let i = 0; i < directions.length; i++) {\r\n if (directions[i].dot(direction) > max) {\r\n max = directions[i].dot(direction);\r\n maxIndex = i;\r\n }\r\n }\r\n return directionEnum[maxIndex];\r\n }\r\n Side.fromDirection = fromDirection;\r\n})(Side || (Side = {}));\r\n\n;// CONCATENATED MODULE: ./Collision/BoundingBox.ts\n\r\n\r\n\r\n/**\r\n * Axis Aligned collision primitive for Excalibur.\r\n */\r\nclass BoundingBox {\r\n /**\r\n * Constructor allows passing of either an object with all coordinate components,\r\n * or the coordinate components passed separately.\r\n * @param leftOrOptions Either x coordinate of the left edge or an options object\r\n * containing the four coordinate components.\r\n * @param top y coordinate of the top edge\r\n * @param right x coordinate of the right edge\r\n * @param bottom y coordinate of the bottom edge\r\n */\r\n constructor(leftOrOptions = 0, top = 0, right = 0, bottom = 0) {\r\n if (typeof leftOrOptions === 'object') {\r\n this.left = leftOrOptions.left;\r\n this.top = leftOrOptions.top;\r\n this.right = leftOrOptions.right;\r\n this.bottom = leftOrOptions.bottom;\r\n }\r\n else if (typeof leftOrOptions === 'number') {\r\n this.left = leftOrOptions;\r\n this.top = top;\r\n this.right = right;\r\n this.bottom = bottom;\r\n }\r\n }\r\n /**\r\n * Returns a new instance of [[BoundingBox]] that is a copy of the current instance\r\n */\r\n clone() {\r\n return new BoundingBox(this.left, this.top, this.right, this.bottom);\r\n }\r\n /**\r\n * Given bounding box A & B, returns the side relative to A when intersection is performed.\r\n * @param intersection Intersection vector between 2 bounding boxes\r\n */\r\n static getSideFromIntersection(intersection) {\r\n if (!intersection) {\r\n return Side.None;\r\n }\r\n if (intersection) {\r\n if (Math.abs(intersection.x) > Math.abs(intersection.y)) {\r\n if (intersection.x < 0) {\r\n return Side.Right;\r\n }\r\n return Side.Left;\r\n }\r\n else {\r\n if (intersection.y < 0) {\r\n return Side.Bottom;\r\n }\r\n return Side.Top;\r\n }\r\n }\r\n return Side.None;\r\n }\r\n static fromPoints(points) {\r\n let minX = Infinity;\r\n let minY = Infinity;\r\n let maxX = -Infinity;\r\n let maxY = -Infinity;\r\n for (let i = 0; i < points.length; i++) {\r\n if (points[i].x < minX) {\r\n minX = points[i].x;\r\n }\r\n if (points[i].x > maxX) {\r\n maxX = points[i].x;\r\n }\r\n if (points[i].y < minY) {\r\n minY = points[i].y;\r\n }\r\n if (points[i].y > maxY) {\r\n maxY = points[i].y;\r\n }\r\n }\r\n return new BoundingBox(minX, minY, maxX, maxY);\r\n }\r\n static fromDimension(width, height, anchor = Vector.Half, pos = Vector.Zero) {\r\n return new BoundingBox(-width * anchor.x + pos.x, -height * anchor.y + pos.y, width - width * anchor.x + pos.x, height - height * anchor.y + pos.y);\r\n }\r\n /**\r\n * Returns the calculated width of the bounding box\r\n */\r\n get width() {\r\n return this.right - this.left;\r\n }\r\n /**\r\n * Returns the calculated height of the bounding box\r\n */\r\n get height() {\r\n return this.bottom - this.top;\r\n }\r\n /**\r\n * Return whether the bounding box has zero dimensions in height,width or both\r\n */\r\n hasZeroDimensions() {\r\n return this.width === 0 || this.height === 0;\r\n }\r\n /**\r\n * Returns the center of the bounding box\r\n */\r\n get center() {\r\n return new Vector((this.left + this.right) / 2, (this.top + this.bottom) / 2);\r\n }\r\n translate(pos) {\r\n return new BoundingBox(this.left + pos.x, this.top + pos.y, this.right + pos.x, this.bottom + pos.y);\r\n }\r\n /**\r\n * Rotates a bounding box by and angle and around a point, if no point is specified (0, 0) is used by default. The resulting bounding\r\n * box is also axis-align. This is useful when a new axis-aligned bounding box is needed for rotated geometry.\r\n */\r\n rotate(angle, point = Vector.Zero) {\r\n const points = this.getPoints().map((p) => p.rotate(angle, point));\r\n return BoundingBox.fromPoints(points);\r\n }\r\n /**\r\n * Scale a bounding box by a scale factor, optionally provide a point\r\n * @param scale\r\n * @param point\r\n */\r\n scale(scale, point = Vector.Zero) {\r\n const shifted = this.translate(point);\r\n return new BoundingBox(shifted.left * scale.x, shifted.top * scale.y, shifted.right * scale.x, shifted.bottom * scale.y);\r\n }\r\n /**\r\n * Transform the axis aligned bounding box by a [[Matrix]], producing a new axis aligned bounding box\r\n * @param matrix\r\n */\r\n transform(matrix) {\r\n // inlined these calculations to not use vectors would speed it up slightly\r\n // const matFirstColumn = vec(matrix.data[0], matrix.data[1]);\r\n // const xa = matFirstColumn.scale(this.left);\r\n const xa1 = matrix.data[0] * this.left;\r\n const xa2 = matrix.data[1] * this.left;\r\n // const xb = matFirstColumn.scale(this.right);\r\n const xb1 = matrix.data[0] * this.right;\r\n const xb2 = matrix.data[1] * this.right;\r\n // const matSecondColumn = vec(matrix.data[2], matrix.data[3]);\r\n // const ya = matSecondColumn.scale(this.top);\r\n const ya1 = matrix.data[2] * this.top;\r\n const ya2 = matrix.data[3] * this.top;\r\n // const yb = matSecondColumn.scale(this.bottom);\r\n const yb1 = matrix.data[2] * this.bottom;\r\n const yb2 = matrix.data[3] * this.bottom;\r\n const matrixPos = matrix.getPosition();\r\n // const topLeft = Vector.min(xa, xb).add(Vector.min(ya, yb)).add(matrixPos);\r\n // const bottomRight = Vector.max(xa, xb).add(Vector.max(ya, yb)).add(matrixPos);\r\n const left = Math.min(xa1, xb1) + Math.min(ya1, yb1) + matrixPos.x;\r\n const top = Math.min(xa2, xb2) + Math.min(ya2, yb2) + matrixPos.y;\r\n const right = Math.max(xa1, xb1) + Math.max(ya1, yb1) + matrixPos.x;\r\n const bottom = Math.max(xa2, xb2) + Math.max(ya2, yb2) + matrixPos.y;\r\n return new BoundingBox({\r\n left,\r\n top,\r\n right,\r\n bottom //: bottomRight.y\r\n });\r\n }\r\n /**\r\n * Returns the perimeter of the bounding box\r\n */\r\n getPerimeter() {\r\n const wx = this.width;\r\n const wy = this.height;\r\n return 2 * (wx + wy);\r\n }\r\n getPoints() {\r\n const results = [];\r\n results.push(new Vector(this.left, this.top));\r\n results.push(new Vector(this.right, this.top));\r\n results.push(new Vector(this.right, this.bottom));\r\n results.push(new Vector(this.left, this.bottom));\r\n return results;\r\n }\r\n /**\r\n * Determines whether a ray intersects with a bounding box\r\n */\r\n rayCast(ray, farClipDistance = Infinity) {\r\n // algorithm from https://tavianator.com/fast-branchless-raybounding-box-intersections/\r\n let tmin = -Infinity;\r\n let tmax = +Infinity;\r\n const xinv = ray.dir.x === 0 ? Number.MAX_VALUE : 1 / ray.dir.x;\r\n const yinv = ray.dir.y === 0 ? Number.MAX_VALUE : 1 / ray.dir.y;\r\n const tx1 = (this.left - ray.pos.x) * xinv;\r\n const tx2 = (this.right - ray.pos.x) * xinv;\r\n tmin = Math.min(tx1, tx2);\r\n tmax = Math.max(tx1, tx2);\r\n const ty1 = (this.top - ray.pos.y) * yinv;\r\n const ty2 = (this.bottom - ray.pos.y) * yinv;\r\n tmin = Math.max(tmin, Math.min(ty1, ty2));\r\n tmax = Math.min(tmax, Math.max(ty1, ty2));\r\n return tmax >= Math.max(0, tmin) && tmin < farClipDistance;\r\n }\r\n rayCastTime(ray, farClipDistance = Infinity) {\r\n // algorithm from https://tavianator.com/fast-branchless-raybounding-box-intersections/\r\n let tmin = -Infinity;\r\n let tmax = +Infinity;\r\n const xinv = ray.dir.x === 0 ? Number.MAX_VALUE : 1 / ray.dir.x;\r\n const yinv = ray.dir.y === 0 ? Number.MAX_VALUE : 1 / ray.dir.y;\r\n const tx1 = (this.left - ray.pos.x) * xinv;\r\n const tx2 = (this.right - ray.pos.x) * xinv;\r\n tmin = Math.min(tx1, tx2);\r\n tmax = Math.max(tx1, tx2);\r\n const ty1 = (this.top - ray.pos.y) * yinv;\r\n const ty2 = (this.bottom - ray.pos.y) * yinv;\r\n tmin = Math.max(tmin, Math.min(ty1, ty2));\r\n tmax = Math.min(tmax, Math.max(ty1, ty2));\r\n if (tmax >= Math.max(0, tmin) && tmin < farClipDistance) {\r\n return tmin;\r\n }\r\n return -1;\r\n }\r\n contains(val) {\r\n if (val instanceof Vector) {\r\n return this.left <= val.x && this.top <= val.y && this.bottom >= val.y && this.right >= val.x;\r\n }\r\n else if (val instanceof BoundingBox) {\r\n if (this.left <= val.left && this.top <= val.top && val.bottom <= this.bottom && val.right <= this.right) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n return false;\r\n }\r\n /**\r\n * Combines this bounding box and another together returning a new bounding box\r\n * @param other The bounding box to combine\r\n */\r\n combine(other) {\r\n const compositeBB = new BoundingBox(Math.min(this.left, other.left), Math.min(this.top, other.top), Math.max(this.right, other.right), Math.max(this.bottom, other.bottom));\r\n return compositeBB;\r\n }\r\n get dimensions() {\r\n return new Vector(this.width, this.height);\r\n }\r\n /**\r\n * Returns true if the bounding boxes overlap.\r\n * @param other\r\n * @param epsilon Optionally specify a small epsilon (default 0) as amount of overlap to ignore as overlap.\r\n * This epsilon is useful in stable collision simulations.\r\n */\r\n overlaps(other, epsilon) {\r\n const e = epsilon || 0;\r\n if (other.hasZeroDimensions()) {\r\n return this.contains(other);\r\n }\r\n if (this.hasZeroDimensions()) {\r\n return other.contains(this);\r\n }\r\n const totalBoundingBox = this.combine(other);\r\n return totalBoundingBox.width + e < other.width + this.width &&\r\n totalBoundingBox.height + e < other.height + this.height;\r\n }\r\n /**\r\n * Test wether this bounding box intersects with another returning\r\n * the intersection vector that can be used to resolve the collision. If there\r\n * is no intersection null is returned.\r\n *\r\n * @param other Other [[BoundingBox]] to test intersection with\r\n * @returns A Vector in the direction of the current BoundingBox, this <- other\r\n */\r\n intersect(other) {\r\n const totalBoundingBox = this.combine(other);\r\n // If the total bounding box is less than or equal the sum of the 2 bounds then there is collision\r\n if (totalBoundingBox.width < other.width + this.width &&\r\n totalBoundingBox.height < other.height + this.height &&\r\n !totalBoundingBox.dimensions.equals(other.dimensions) &&\r\n !totalBoundingBox.dimensions.equals(this.dimensions)) {\r\n // collision\r\n let overlapX = 0;\r\n // right edge is between the other's left and right edge\r\n /**\r\n * +-this-+\r\n * | |\r\n * | +-other-+\r\n * +----|-+ |\r\n * | |\r\n * +-------+\r\n * <---\r\n * ^ overlap\r\n */\r\n if (this.right >= other.left && this.right <= other.right) {\r\n overlapX = other.left - this.right;\r\n // right edge is past the other's right edge\r\n /**\r\n * +-other-+\r\n * | |\r\n * | +-this-+\r\n * +----|--+ |\r\n * | |\r\n * +------+\r\n * --->\r\n * ^ overlap\r\n */\r\n }\r\n else {\r\n overlapX = other.right - this.left;\r\n }\r\n let overlapY = 0;\r\n // top edge is between the other's top and bottom edge\r\n /**\r\n * +-other-+\r\n * | |\r\n * | +-this-+ | <- overlap\r\n * +----|--+ | |\r\n * | | \\ /\r\n * +------+ '\r\n */\r\n if (this.top <= other.bottom && this.top >= other.top) {\r\n overlapY = other.bottom - this.top;\r\n // top edge is above the other top edge\r\n /**\r\n * +-this-+ .\r\n * | | / \\\r\n * | +-other-+ | <- overlap\r\n * +----|-+ | |\r\n * | |\r\n * +-------+\r\n */\r\n }\r\n else {\r\n overlapY = other.top - this.bottom;\r\n }\r\n if (Math.abs(overlapX) < Math.abs(overlapY)) {\r\n return new Vector(overlapX, 0);\r\n }\r\n else {\r\n return new Vector(0, overlapY);\r\n }\r\n // Case of total containment of one bounding box by another\r\n }\r\n else if (totalBoundingBox.dimensions.equals(other.dimensions) || totalBoundingBox.dimensions.equals(this.dimensions)) {\r\n let overlapX = 0;\r\n // this is wider than the other\r\n if (this.width - other.width >= 0) {\r\n // This right edge is closest to the others right edge\r\n if (this.right - other.right <= other.left - this.left) {\r\n overlapX = other.left - this.right;\r\n // This left edge is closest to the others left edge\r\n }\r\n else {\r\n overlapX = other.right - this.left;\r\n }\r\n // other is wider than this\r\n }\r\n else {\r\n // This right edge is closest to the others right edge\r\n if (other.right - this.right <= this.left - other.left) {\r\n overlapX = this.left - other.right;\r\n // This left edge is closest to the others left edge\r\n }\r\n else {\r\n overlapX = this.right - other.left;\r\n }\r\n }\r\n let overlapY = 0;\r\n // this is taller than other\r\n if (this.height - other.height >= 0) {\r\n // The bottom edge is closest to the others bottom edge\r\n if (this.bottom - other.bottom <= other.top - this.top) {\r\n overlapY = other.top - this.bottom;\r\n }\r\n else {\r\n overlapY = other.bottom - this.top;\r\n }\r\n // other is taller than this\r\n }\r\n else {\r\n // The bottom edge is closest to the others bottom edge\r\n if (other.bottom - this.bottom <= this.top - other.top) {\r\n overlapY = this.top - other.bottom;\r\n }\r\n else {\r\n overlapY = this.bottom - other.top;\r\n }\r\n }\r\n if (Math.abs(overlapX) < Math.abs(overlapY)) {\r\n return new Vector(overlapX, 0);\r\n }\r\n else {\r\n return new Vector(0, overlapY);\r\n }\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n /**\r\n * Test whether the bounding box has intersected with another bounding box, returns the side of the current bb that intersected.\r\n * @param bb The other actor to test\r\n */\r\n intersectWithSide(bb) {\r\n const intersect = this.intersect(bb);\r\n return BoundingBox.getSideFromIntersection(intersect);\r\n }\r\n /**\r\n * Draw a debug bounding box\r\n * @param ex\r\n * @param color\r\n */\r\n draw(ex, color = Color.Yellow) {\r\n ex.debug.drawRect(this.left, this.top, this.width, this.height, { color });\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Util/Future.ts\n/**\r\n * Future is a wrapper around a native browser Promise to allow resolving/rejecting at any time\r\n */\r\nclass Future {\r\n constructor() {\r\n this._isCompleted = false;\r\n this.promise = new Promise((resolve, reject) => {\r\n this._resolver = resolve;\r\n this._rejecter = reject;\r\n });\r\n }\r\n get isCompleted() {\r\n return this._isCompleted;\r\n }\r\n resolve(value) {\r\n if (this._isCompleted) {\r\n return;\r\n }\r\n this._isCompleted = true;\r\n this._resolver(value);\r\n }\r\n reject(error) {\r\n if (this._isCompleted) {\r\n return;\r\n }\r\n this._isCompleted = true;\r\n this._rejecter(error);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Util/Util.ts\n\r\n\r\n/**\r\n * Find the screen position of an HTML element\r\n */\r\nfunction getPosition(el) {\r\n let oLeft = 0, oTop = 0;\r\n const calcOffsetLeft = (parent) => {\r\n oLeft += parent.offsetLeft;\r\n if (parent.offsetParent) {\r\n calcOffsetLeft(parent.offsetParent);\r\n }\r\n };\r\n const calcOffsetTop = (parent) => {\r\n oTop += parent.offsetTop;\r\n if (parent.offsetParent) {\r\n calcOffsetTop(parent.offsetParent);\r\n }\r\n };\r\n calcOffsetLeft(el);\r\n calcOffsetTop(el);\r\n return new Vector(oLeft, oTop);\r\n}\r\n/**\r\n * Add an item to an array list if it doesn't already exist. Returns true if added, false if not and already exists in the array.\r\n * @deprecated Will be removed in v0.26.0\r\n */\r\nfunction addItemToArray(item, array) {\r\n if (array.indexOf(item) === -1) {\r\n array.push(item);\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Remove an item from an list\r\n * @deprecated Will be removed in v0.26.0\r\n */\r\nfunction removeItemFromArray(item, array) {\r\n let index = -1;\r\n if ((index = array.indexOf(item)) > -1) {\r\n array.splice(index, 1);\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * See if an array contains something\r\n */\r\nfunction contains(array, obj) {\r\n for (let i = 0; i < array.length; i++) {\r\n if (array[i] === obj) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n/**\r\n * Used for exhaustive checks at compile time\r\n */\r\nfunction fail(message) {\r\n throw new Error(message);\r\n}\r\n/**\r\n * Create a promise that resolves after a certain number of milliseconds\r\n *\r\n * It is strongly recommended you pass the excalibur clock so delays are bound to the\r\n * excalibur clock which would be unaffected by stop/pause.\r\n * @param milliseconds\r\n * @param clock\r\n */\r\nfunction delay(milliseconds, clock) {\r\n var _a;\r\n const future = new Future();\r\n const schedule = (_a = clock === null || clock === void 0 ? void 0 : clock.schedule.bind(clock)) !== null && _a !== void 0 ? _a : setTimeout;\r\n schedule(() => {\r\n future.resolve();\r\n }, milliseconds);\r\n return future.promise;\r\n}\r\n\n;// CONCATENATED MODULE: ./Math/matrix.ts\n\r\n\r\n\r\nvar MatrixLocations;\r\n(function (MatrixLocations) {\r\n MatrixLocations[MatrixLocations[\"X\"] = 12] = \"X\";\r\n MatrixLocations[MatrixLocations[\"Y\"] = 13] = \"Y\";\r\n})(MatrixLocations || (MatrixLocations = {}));\r\n/**\r\n * Excalibur Matrix helper for 4x4 matrices\r\n *\r\n * Useful for webgl 4x4 matrices\r\n */\r\nclass Matrix {\r\n constructor() {\r\n /**\r\n * 4x4 matrix in column major order\r\n *\r\n * | | | | |\r\n * | ------- | ------- | -------- | -------- |\r\n * | data[0] | data[4] | data[8] | data[12] |\r\n * | data[1] | data[5] | data[9] | data[13] |\r\n * | data[2] | data[6] | data[10] | data[14] |\r\n * | data[3] | data[7] | data[11] | data[15] |\r\n *\r\n */\r\n this.data = new Float32Array(16);\r\n this._scaleX = 1;\r\n this._scaleSignX = 1;\r\n this._scaleY = 1;\r\n this._scaleSignY = 1;\r\n }\r\n /**\r\n * Creates an orthographic (flat non-perspective) projection\r\n * https://en.wikipedia.org/wiki/Orthographic_projection\r\n * @param left\r\n * @param right\r\n * @param bottom\r\n * @param top\r\n * @param near\r\n * @param far\r\n */\r\n static ortho(left, right, bottom, top, near, far) {\r\n const mat = new Matrix();\r\n mat.data[0] = 2 / (right - left);\r\n mat.data[1] = 0;\r\n mat.data[2] = 0;\r\n mat.data[3] = 0;\r\n mat.data[4] = 0;\r\n mat.data[5] = 2 / (top - bottom);\r\n mat.data[6] = 0;\r\n mat.data[7] = 0;\r\n mat.data[8] = 0;\r\n mat.data[9] = 0;\r\n mat.data[10] = -2 / (far - near);\r\n mat.data[11] = 0;\r\n mat.data[12] = -(right + left) / (right - left);\r\n mat.data[13] = -(top + bottom) / (top - bottom);\r\n mat.data[14] = -(far + near) / (far - near);\r\n mat.data[15] = 1;\r\n return mat;\r\n }\r\n /**\r\n * Creates a new Matrix with the same data as the current 4x4\r\n */\r\n clone(dest) {\r\n const mat = dest || new Matrix();\r\n mat.data[0] = this.data[0];\r\n mat.data[1] = this.data[1];\r\n mat.data[2] = this.data[2];\r\n mat.data[3] = this.data[3];\r\n mat.data[4] = this.data[4];\r\n mat.data[5] = this.data[5];\r\n mat.data[6] = this.data[6];\r\n mat.data[7] = this.data[7];\r\n mat.data[8] = this.data[8];\r\n mat.data[9] = this.data[9];\r\n mat.data[10] = this.data[10];\r\n mat.data[11] = this.data[11];\r\n mat.data[12] = this.data[12];\r\n mat.data[13] = this.data[13];\r\n mat.data[14] = this.data[14];\r\n mat.data[15] = this.data[15];\r\n return mat;\r\n }\r\n /**\r\n * Converts the current matrix into a DOMMatrix\r\n *\r\n * This is useful when working with the browser Canvas context\r\n * @returns {DOMMatrix} DOMMatrix\r\n */\r\n toDOMMatrix() {\r\n return new DOMMatrix([...this.data]);\r\n }\r\n static fromFloat32Array(data) {\r\n const matrix = new Matrix();\r\n matrix.data = data;\r\n return matrix;\r\n }\r\n /**\r\n * Creates a new identity matrix (a matrix that when applied does nothing)\r\n */\r\n static identity() {\r\n const mat = new Matrix();\r\n mat.data[0] = 1;\r\n mat.data[1] = 0;\r\n mat.data[2] = 0;\r\n mat.data[3] = 0;\r\n mat.data[4] = 0;\r\n mat.data[5] = 1;\r\n mat.data[6] = 0;\r\n mat.data[7] = 0;\r\n mat.data[8] = 0;\r\n mat.data[9] = 0;\r\n mat.data[10] = 1;\r\n mat.data[11] = 0;\r\n mat.data[12] = 0;\r\n mat.data[13] = 0;\r\n mat.data[14] = 0;\r\n mat.data[15] = 1;\r\n return mat;\r\n }\r\n /**\r\n * Resets the current matrix to the identity matrix, mutating it\r\n * @returns {Matrix} Current matrix as identity\r\n */\r\n reset() {\r\n const mat = this;\r\n mat.data[0] = 1;\r\n mat.data[1] = 0;\r\n mat.data[2] = 0;\r\n mat.data[3] = 0;\r\n mat.data[4] = 0;\r\n mat.data[5] = 1;\r\n mat.data[6] = 0;\r\n mat.data[7] = 0;\r\n mat.data[8] = 0;\r\n mat.data[9] = 0;\r\n mat.data[10] = 1;\r\n mat.data[11] = 0;\r\n mat.data[12] = 0;\r\n mat.data[13] = 0;\r\n mat.data[14] = 0;\r\n mat.data[15] = 1;\r\n return mat;\r\n }\r\n /**\r\n * Creates a brand new translation matrix at the specified 3d point\r\n * @param x\r\n * @param y\r\n */\r\n static translation(x, y) {\r\n const mat = Matrix.identity();\r\n mat.data[12] = x;\r\n mat.data[13] = y;\r\n return mat;\r\n }\r\n /**\r\n * Creates a brand new scaling matrix with the specified scaling factor\r\n * @param sx\r\n * @param sy\r\n */\r\n static scale(sx, sy) {\r\n const mat = Matrix.identity();\r\n mat.data[0] = sx;\r\n mat.data[5] = sy;\r\n mat.data[10] = 1;\r\n mat.data[15] = 1;\r\n return mat;\r\n }\r\n /**\r\n * Creates a brand new rotation matrix with the specified angle\r\n * @param angleRadians\r\n */\r\n static rotation(angleRadians) {\r\n const mat = Matrix.identity();\r\n mat.data[0] = Math.cos(angleRadians);\r\n mat.data[4] = -Math.sin(angleRadians);\r\n mat.data[1] = Math.sin(angleRadians);\r\n mat.data[5] = Math.cos(angleRadians);\r\n return mat;\r\n }\r\n multiply(vectorOrMatrix, dest) {\r\n if (vectorOrMatrix instanceof Vector) {\r\n const result = dest || new Vector(0, 0);\r\n const vector = vectorOrMatrix;\r\n // these shenanigans are to allow dest and vector to be the same instance\r\n const resultX = vector.x * this.data[0] + vector.y * this.data[4] + this.data[12];\r\n const resultY = vector.x * this.data[1] + vector.y * this.data[5] + this.data[13];\r\n result.x = resultX;\r\n result.y = resultY;\r\n return result;\r\n }\r\n else {\r\n const result = dest || new Matrix();\r\n const other = vectorOrMatrix;\r\n const a11 = this.data[0];\r\n const a21 = this.data[1];\r\n const a31 = this.data[2];\r\n const a41 = this.data[3];\r\n const a12 = this.data[4];\r\n const a22 = this.data[5];\r\n const a32 = this.data[6];\r\n const a42 = this.data[7];\r\n const a13 = this.data[8];\r\n const a23 = this.data[9];\r\n const a33 = this.data[10];\r\n const a43 = this.data[11];\r\n const a14 = this.data[12];\r\n const a24 = this.data[13];\r\n const a34 = this.data[14];\r\n const a44 = this.data[15];\r\n const b11 = other.data[0];\r\n const b21 = other.data[1];\r\n const b31 = other.data[2];\r\n const b41 = other.data[3];\r\n const b12 = other.data[4];\r\n const b22 = other.data[5];\r\n const b32 = other.data[6];\r\n const b42 = other.data[7];\r\n const b13 = other.data[8];\r\n const b23 = other.data[9];\r\n const b33 = other.data[10];\r\n const b43 = other.data[11];\r\n const b14 = other.data[12];\r\n const b24 = other.data[13];\r\n const b34 = other.data[14];\r\n const b44 = other.data[15];\r\n result.data[0] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\r\n result.data[1] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\r\n result.data[2] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\r\n result.data[3] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\r\n result.data[4] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\r\n result.data[5] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\r\n result.data[6] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\r\n result.data[7] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\r\n result.data[8] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\r\n result.data[9] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\r\n result.data[10] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\r\n result.data[11] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\r\n result.data[12] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\r\n result.data[13] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\r\n result.data[14] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\r\n result.data[15] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\r\n const s = this.getScale();\r\n result._scaleSignX = sign(s.x) * sign(result._scaleSignX);\r\n result._scaleSignY = sign(s.y) * sign(result._scaleSignY);\r\n return result;\r\n }\r\n }\r\n /**\r\n * Applies translation to the current matrix mutating it\r\n * @param x\r\n * @param y\r\n */\r\n translate(x, y) {\r\n const a11 = this.data[0];\r\n const a21 = this.data[1];\r\n const a31 = this.data[2];\r\n const a41 = this.data[3];\r\n const a12 = this.data[4];\r\n const a22 = this.data[5];\r\n const a32 = this.data[6];\r\n const a42 = this.data[7];\r\n const a13 = this.data[8];\r\n const a23 = this.data[9];\r\n const a33 = this.data[10];\r\n const a43 = this.data[11];\r\n const a14 = this.data[12];\r\n const a24 = this.data[13];\r\n const a34 = this.data[14];\r\n const a44 = this.data[15];\r\n // Doesn't change z\r\n const z = 0;\r\n const w = 1;\r\n this.data[12] = a11 * x + a12 * y + a13 * z + a14 * w;\r\n this.data[13] = a21 * x + a22 * y + a23 * z + a24 * w;\r\n this.data[14] = a31 * x + a32 * y + a33 * z + a34 * w;\r\n this.data[15] = a41 * x + a42 * y + a43 * z + a44 * w;\r\n return this;\r\n }\r\n setPosition(x, y) {\r\n this.data[12] = x;\r\n this.data[13] = y;\r\n }\r\n getPosition() {\r\n return vec(this.data[12], this.data[13]);\r\n }\r\n /**\r\n * Applies rotation to the current matrix mutating it\r\n * @param angle in Radians\r\n */\r\n rotate(angle) {\r\n const a11 = this.data[0];\r\n const a21 = this.data[1];\r\n const a31 = this.data[2];\r\n const a41 = this.data[3];\r\n const a12 = this.data[4];\r\n const a22 = this.data[5];\r\n const a32 = this.data[6];\r\n const a42 = this.data[7];\r\n const sine = Math.sin(angle);\r\n const cosine = Math.cos(angle);\r\n this.data[0] = cosine * a11 + sine * a12;\r\n this.data[1] = cosine * a21 + sine * a22;\r\n this.data[2] = cosine * a31 + sine * a32;\r\n this.data[3] = cosine * a41 + sine * a42;\r\n this.data[4] = cosine * a12 - sine * a11;\r\n this.data[5] = cosine * a22 - sine * a21;\r\n this.data[6] = cosine * a32 - sine * a31;\r\n this.data[7] = cosine * a42 - sine * a41;\r\n return this;\r\n }\r\n /**\r\n * Applies scaling to the current matrix mutating it\r\n * @param x\r\n * @param y\r\n */\r\n scale(x, y) {\r\n const a11 = this.data[0];\r\n const a21 = this.data[1];\r\n const a31 = this.data[2];\r\n const a41 = this.data[3];\r\n const a12 = this.data[4];\r\n const a22 = this.data[5];\r\n const a32 = this.data[6];\r\n const a42 = this.data[7];\r\n this.data[0] = a11 * x;\r\n this.data[1] = a21 * x;\r\n this.data[2] = a31 * x;\r\n this.data[3] = a41 * x;\r\n this.data[4] = a12 * y;\r\n this.data[5] = a22 * y;\r\n this.data[6] = a32 * y;\r\n this.data[7] = a42 * y;\r\n return this;\r\n }\r\n setRotation(angle) {\r\n const currentScale = this.getScale();\r\n const sine = Math.sin(angle);\r\n const cosine = Math.cos(angle);\r\n this.data[0] = cosine * currentScale.x;\r\n this.data[1] = sine * currentScale.y;\r\n this.data[4] = -sine * currentScale.x;\r\n this.data[5] = cosine * currentScale.y;\r\n }\r\n getRotation() {\r\n const angle = Math.atan2(this.data[1] / this.getScaleY(), this.data[0] / this.getScaleX());\r\n return canonicalizeAngle(angle);\r\n }\r\n getScaleX() {\r\n // absolute scale of the matrix (we lose sign so need to add it back)\r\n const xscale = vec(this.data[0], this.data[4]).size;\r\n return this._scaleSignX * xscale;\r\n }\r\n getScaleY() {\r\n // absolute scale of the matrix (we lose sign so need to add it back)\r\n const yscale = vec(this.data[1], this.data[5]).size;\r\n return this._scaleSignY * yscale;\r\n }\r\n /**\r\n * Get the scale of the matrix\r\n */\r\n getScale() {\r\n return vec(this.getScaleX(), this.getScaleY());\r\n }\r\n setScaleX(val) {\r\n if (this._scaleX === val) {\r\n return;\r\n }\r\n this._scaleSignX = sign(val);\r\n // negative scale acts like a 180 rotation, so flip\r\n const xscale = vec(this.data[0] * this._scaleSignX, this.data[4] * this._scaleSignX).normalize();\r\n this.data[0] = xscale.x * val;\r\n this.data[4] = xscale.y * val;\r\n this._scaleX = val;\r\n }\r\n setScaleY(val) {\r\n if (this._scaleY === val) {\r\n return;\r\n }\r\n this._scaleSignY = sign(val);\r\n // negative scale acts like a 180 rotation, so flip\r\n const yscale = vec(this.data[1] * this._scaleSignY, this.data[5] * this._scaleSignY).normalize();\r\n this.data[1] = yscale.x * val;\r\n this.data[5] = yscale.y * val;\r\n this._scaleY = val;\r\n }\r\n setScale(scale) {\r\n this.setScaleX(scale.x);\r\n this.setScaleY(scale.y);\r\n }\r\n /**\r\n * Determinant of the upper left 2x2 matrix\r\n */\r\n getBasisDeterminant() {\r\n return this.data[0] * this.data[5] - this.data[1] * this.data[4];\r\n }\r\n /**\r\n * Return the affine inverse, optionally store it in a target matrix.\r\n *\r\n * It's recommended you call .reset() the target unless you know what you're doing\r\n * @param target\r\n */\r\n getAffineInverse(target) {\r\n // See http://negativeprobability.blogspot.com/2011/11/affine-transformations-and-their.html\r\n // See https://www.mathsisfun.com/algebra/matrix-inverse.html\r\n // Since we are actually only doing 2D transformations we can use this hack\r\n // We don't actually use the 3rd or 4th dimension\r\n const det = this.getBasisDeterminant();\r\n const inverseDet = 1 / det; // todo zero check\r\n const a = this.data[0];\r\n const b = this.data[4];\r\n const c = this.data[1];\r\n const d = this.data[5];\r\n const m = target || Matrix.identity();\r\n // inverts rotation and scale\r\n m.data[0] = d * inverseDet;\r\n m.data[1] = -c * inverseDet;\r\n m.data[4] = -b * inverseDet;\r\n m.data[5] = a * inverseDet;\r\n const tx = this.data[12];\r\n const ty = this.data[13];\r\n // invert translation\r\n // transform translation into the matrix basis created by rot/scale\r\n m.data[12] = -(tx * m.data[0] + ty * m.data[4]);\r\n m.data[13] = -(tx * m.data[1] + ty * m.data[5]);\r\n return m;\r\n }\r\n isIdentity() {\r\n return (this.data[0] === 1 &&\r\n this.data[1] === 0 &&\r\n this.data[2] === 0 &&\r\n this.data[3] === 0 &&\r\n this.data[4] === 0 &&\r\n this.data[5] === 1 &&\r\n this.data[6] === 0 &&\r\n this.data[7] === 0 &&\r\n this.data[8] === 0 &&\r\n this.data[9] === 0 &&\r\n this.data[10] === 1 &&\r\n this.data[11] === 0 &&\r\n this.data[12] === 0 &&\r\n this.data[13] === 0 &&\r\n this.data[14] === 0 &&\r\n this.data[15] === 1);\r\n }\r\n toString() {\r\n return `\r\n[${this.data[0]} ${this.data[4]} ${this.data[8]} ${this.data[12]}]\r\n[${this.data[1]} ${this.data[5]} ${this.data[9]} ${this.data[13]}]\r\n[${this.data[2]} ${this.data[6]} ${this.data[10]} ${this.data[14]}]\r\n[${this.data[3]} ${this.data[7]} ${this.data[11]} ${this.data[15]}]\r\n`;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Math/affine-matrix.ts\n\r\n\r\n\r\nclass AffineMatrix {\r\n constructor() {\r\n /**\r\n * | | | |\r\n * | ------- | ------- | -------- |\r\n * | data[0] | data[2] | data[4] |\r\n * | data[1] | data[3] | data[5] |\r\n * | 0 | 0 | 1 |\r\n */\r\n this.data = new Float64Array(6);\r\n this._scale = new Float64Array([1, 1]);\r\n this._scaleSignX = 1;\r\n this._scaleSignY = 1;\r\n }\r\n /**\r\n * Converts the current matrix into a DOMMatrix\r\n *\r\n * This is useful when working with the browser Canvas context\r\n * @returns {DOMMatrix} DOMMatrix\r\n */\r\n toDOMMatrix() {\r\n return new DOMMatrix([...this.data]);\r\n }\r\n static identity() {\r\n const mat = new AffineMatrix();\r\n mat.data[0] = 1;\r\n mat.data[1] = 0;\r\n mat.data[2] = 0;\r\n mat.data[3] = 1;\r\n mat.data[4] = 0;\r\n mat.data[5] = 0;\r\n return mat;\r\n }\r\n /**\r\n * Creates a brand new translation matrix at the specified 3d point\r\n * @param x\r\n * @param y\r\n */\r\n static translation(x, y) {\r\n const mat = AffineMatrix.identity();\r\n mat.data[4] = x;\r\n mat.data[5] = y;\r\n return mat;\r\n }\r\n /**\r\n * Creates a brand new scaling matrix with the specified scaling factor\r\n * @param sx\r\n * @param sy\r\n */\r\n static scale(sx, sy) {\r\n const mat = AffineMatrix.identity();\r\n mat.data[0] = sx;\r\n mat.data[3] = sy;\r\n mat._scale[0] = sx;\r\n mat._scale[1] = sy;\r\n return mat;\r\n }\r\n /**\r\n * Creates a brand new rotation matrix with the specified angle\r\n * @param angleRadians\r\n */\r\n static rotation(angleRadians) {\r\n const mat = AffineMatrix.identity();\r\n mat.data[0] = Math.cos(angleRadians);\r\n mat.data[1] = Math.sin(angleRadians);\r\n mat.data[2] = -Math.sin(angleRadians);\r\n mat.data[3] = Math.cos(angleRadians);\r\n return mat;\r\n }\r\n setPosition(x, y) {\r\n this.data[4] = x;\r\n this.data[5] = y;\r\n }\r\n getPosition() {\r\n return vec(this.data[4], this.data[5]);\r\n }\r\n /**\r\n * Applies rotation to the current matrix mutating it\r\n * @param angle in Radians\r\n */\r\n rotate(angle) {\r\n const a11 = this.data[0];\r\n const a21 = this.data[1];\r\n const a12 = this.data[2];\r\n const a22 = this.data[3];\r\n const sine = Math.sin(angle);\r\n const cosine = Math.cos(angle);\r\n this.data[0] = cosine * a11 + sine * a12;\r\n this.data[1] = cosine * a21 + sine * a22;\r\n this.data[2] = cosine * a12 - sine * a11;\r\n this.data[3] = cosine * a22 - sine * a21;\r\n return this;\r\n }\r\n /**\r\n * Applies translation to the current matrix mutating it\r\n * @param x\r\n * @param y\r\n */\r\n translate(x, y) {\r\n const a11 = this.data[0];\r\n const a21 = this.data[1];\r\n // const a31 = 0;\r\n const a12 = this.data[2];\r\n const a22 = this.data[3];\r\n // const a32 = 0;\r\n const a13 = this.data[4];\r\n const a23 = this.data[5];\r\n // const a33 = 1;\r\n // Doesn't change z\r\n this.data[4] = a11 * x + a12 * y + a13;\r\n this.data[5] = a21 * x + a22 * y + a23;\r\n return this;\r\n }\r\n /**\r\n * Applies scaling to the current matrix mutating it\r\n * @param x\r\n * @param y\r\n */\r\n scale(x, y) {\r\n const a11 = this.data[0];\r\n const a21 = this.data[1];\r\n const a12 = this.data[2];\r\n const a22 = this.data[3];\r\n this.data[0] = a11 * x;\r\n this.data[1] = a21 * x;\r\n this.data[2] = a12 * y;\r\n this.data[3] = a22 * y;\r\n this._scale[0] = x;\r\n this._scale[1] = y;\r\n return this;\r\n }\r\n determinant() {\r\n return this.data[0] * this.data[3] - this.data[1] * this.data[2];\r\n }\r\n /**\r\n * Return the affine inverse, optionally store it in a target matrix.\r\n *\r\n * It's recommended you call .reset() the target unless you know what you're doing\r\n * @param target\r\n */\r\n inverse(target) {\r\n // See http://negativeprobability.blogspot.com/2011/11/affine-transformations-and-their.html\r\n // See https://www.mathsisfun.com/algebra/matrix-inverse.html\r\n // Since we are actually only doing 2D transformations we can use this hack\r\n // We don't actually use the 3rd or 4th dimension\r\n const det = this.determinant();\r\n const inverseDet = 1 / det; // TODO zero check\r\n const a = this.data[0];\r\n const b = this.data[2];\r\n const c = this.data[1];\r\n const d = this.data[3];\r\n const m = target || AffineMatrix.identity();\r\n // inverts rotation and scale\r\n m.data[0] = d * inverseDet;\r\n m.data[1] = -c * inverseDet;\r\n m.data[2] = -b * inverseDet;\r\n m.data[3] = a * inverseDet;\r\n const tx = this.data[4];\r\n const ty = this.data[5];\r\n // invert translation\r\n // transform translation into the matrix basis created by rot/scale\r\n m.data[4] = -(tx * m.data[0] + ty * m.data[2]);\r\n m.data[5] = -(tx * m.data[1] + ty * m.data[3]);\r\n return m;\r\n }\r\n multiply(vectorOrMatrix, dest) {\r\n if (vectorOrMatrix instanceof Vector) {\r\n const result = dest || new Vector(0, 0);\r\n const vector = vectorOrMatrix;\r\n // these shenanigans are to allow dest and vector to be the same instance\r\n const resultX = vector.x * this.data[0] + vector.y * this.data[2] + this.data[4];\r\n const resultY = vector.x * this.data[1] + vector.y * this.data[3] + this.data[5];\r\n result.x = resultX;\r\n result.y = resultY;\r\n return result;\r\n }\r\n else {\r\n const result = dest || new AffineMatrix();\r\n const other = vectorOrMatrix;\r\n const a11 = this.data[0];\r\n const a21 = this.data[1];\r\n // const a31 = 0;\r\n const a12 = this.data[2];\r\n const a22 = this.data[3];\r\n // const a32 = 0;\r\n const a13 = this.data[4];\r\n const a23 = this.data[5];\r\n // const a33 = 1;\r\n const b11 = other.data[0];\r\n const b21 = other.data[1];\r\n // const b31 = 0;\r\n const b12 = other.data[2];\r\n const b22 = other.data[3];\r\n // const b32 = 0;\r\n const b13 = other.data[4];\r\n const b23 = other.data[5];\r\n // const b33 = 1;\r\n result.data[0] = a11 * b11 + a12 * b21; // + a13 * b31; // zero\r\n result.data[1] = a21 * b11 + a22 * b21; // + a23 * b31; // zero\r\n result.data[2] = a11 * b12 + a12 * b22; // + a13 * b32; // zero\r\n result.data[3] = a21 * b12 + a22 * b22; // + a23 * b32; // zero\r\n result.data[4] = a11 * b13 + a12 * b23 + a13; // * b33; // one\r\n result.data[5] = a21 * b13 + a22 * b23 + a23; // * b33; // one\r\n const s = this.getScale();\r\n result._scaleSignX = sign(s.x) * sign(result._scaleSignX);\r\n result._scaleSignY = sign(s.y) * sign(result._scaleSignY);\r\n return result;\r\n }\r\n }\r\n to4x4() {\r\n const mat = new Matrix();\r\n mat.data[0] = this.data[0];\r\n mat.data[1] = this.data[1];\r\n mat.data[2] = 0;\r\n mat.data[3] = 0;\r\n mat.data[4] = this.data[2];\r\n mat.data[5] = this.data[3];\r\n mat.data[6] = 0;\r\n mat.data[7] = 0;\r\n mat.data[8] = 0;\r\n mat.data[9] = 0;\r\n mat.data[10] = 1;\r\n mat.data[11] = 0;\r\n mat.data[12] = this.data[4];\r\n mat.data[13] = this.data[5];\r\n mat.data[14] = 0;\r\n mat.data[15] = 1;\r\n return mat;\r\n }\r\n setRotation(angle) {\r\n const currentScale = this.getScale();\r\n const sine = Math.sin(angle);\r\n const cosine = Math.cos(angle);\r\n this.data[0] = cosine * currentScale.x;\r\n this.data[1] = sine * currentScale.y;\r\n this.data[2] = -sine * currentScale.x;\r\n this.data[3] = cosine * currentScale.y;\r\n }\r\n getRotation() {\r\n const angle = Math.atan2(this.data[1] / this.getScaleY(), this.data[0] / this.getScaleX());\r\n return canonicalizeAngle(angle);\r\n }\r\n getScaleX() {\r\n // absolute scale of the matrix (we lose sign so need to add it back)\r\n const xscale = vec(this.data[0], this.data[2]).distance();\r\n return this._scaleSignX * xscale;\r\n }\r\n getScaleY() {\r\n // absolute scale of the matrix (we lose sign so need to add it back)\r\n const yscale = vec(this.data[1], this.data[3]).distance();\r\n return this._scaleSignY * yscale;\r\n }\r\n /**\r\n * Get the scale of the matrix\r\n */\r\n getScale() {\r\n return vec(this.getScaleX(), this.getScaleY());\r\n }\r\n setScaleX(val) {\r\n if (val === this._scale[0]) {\r\n return;\r\n }\r\n this._scaleSignX = sign(val);\r\n // negative scale acts like a 180 rotation, so flip\r\n const xscale = vec(this.data[0] * this._scaleSignX, this.data[2] * this._scaleSignX).normalize();\r\n this.data[0] = xscale.x * val;\r\n this.data[2] = xscale.y * val;\r\n this._scale[0] = val;\r\n }\r\n setScaleY(val) {\r\n if (val === this._scale[1]) {\r\n return;\r\n }\r\n this._scaleSignY = sign(val);\r\n // negative scale acts like a 180 rotation, so flip\r\n const yscale = vec(this.data[1] * this._scaleSignY, this.data[3] * this._scaleSignY).normalize();\r\n this.data[1] = yscale.x * val;\r\n this.data[3] = yscale.y * val;\r\n this._scale[1] = val;\r\n }\r\n setScale(scale) {\r\n this.setScaleX(scale.x);\r\n this.setScaleY(scale.y);\r\n }\r\n isIdentity() {\r\n return (this.data[0] === 1 &&\r\n this.data[1] === 0 &&\r\n this.data[2] === 0 &&\r\n this.data[3] === 1 &&\r\n this.data[4] === 0 &&\r\n this.data[5] === 0);\r\n }\r\n /**\r\n * Resets the current matrix to the identity matrix, mutating it\r\n * @returns {AffineMatrix} Current matrix as identity\r\n */\r\n reset() {\r\n const mat = this;\r\n mat.data[0] = 1;\r\n mat.data[1] = 0;\r\n mat.data[2] = 0;\r\n mat.data[3] = 1;\r\n mat.data[4] = 0;\r\n mat.data[5] = 0;\r\n return mat;\r\n }\r\n /**\r\n * Creates a new Matrix with the same data as the current 4x4\r\n */\r\n clone(dest) {\r\n const mat = dest || new AffineMatrix();\r\n mat.data[0] = this.data[0];\r\n mat.data[1] = this.data[1];\r\n mat.data[2] = this.data[2];\r\n mat.data[3] = this.data[3];\r\n mat.data[4] = this.data[4];\r\n mat.data[5] = this.data[5];\r\n return mat;\r\n }\r\n toString() {\r\n return `\r\n[${this.data[0]} ${this.data[2]} ${this.data[4]}]\r\n[${this.data[1]} ${this.data[3]} ${this.data[5]}]\r\n[0 0 1]\r\n`;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/transform-stack.ts\n\r\nclass TransformStack {\r\n constructor() {\r\n this._transforms = [];\r\n this._currentTransform = AffineMatrix.identity();\r\n }\r\n save() {\r\n this._transforms.push(this._currentTransform);\r\n this._currentTransform = this._currentTransform.clone();\r\n }\r\n restore() {\r\n this._currentTransform = this._transforms.pop();\r\n }\r\n translate(x, y) {\r\n return this._currentTransform.translate(x, y);\r\n }\r\n rotate(angle) {\r\n return this._currentTransform.rotate(angle);\r\n }\r\n scale(x, y) {\r\n return this._currentTransform.scale(x, y);\r\n }\r\n set current(matrix) {\r\n this._currentTransform = matrix;\r\n }\r\n get current() {\r\n return this._currentTransform;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/state-stack.ts\n\r\nclass StateStack {\r\n constructor() {\r\n this._states = [];\r\n this._currentState = this._getDefaultState();\r\n }\r\n _getDefaultState() {\r\n return {\r\n opacity: 1,\r\n z: 0,\r\n tint: Color.White\r\n };\r\n }\r\n _cloneState() {\r\n return {\r\n opacity: this._currentState.opacity,\r\n z: this._currentState.z,\r\n tint: this._currentState.tint.clone()\r\n };\r\n }\r\n save() {\r\n this._states.push(this._currentState);\r\n this._currentState = this._cloneState();\r\n }\r\n restore() {\r\n this._currentState = this._states.pop();\r\n }\r\n get current() {\r\n return this._currentState;\r\n }\r\n set current(val) {\r\n this._currentState = val;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Events.ts\nvar EventTypes;\r\n(function (EventTypes) {\r\n EventTypes[\"Kill\"] = \"kill\";\r\n EventTypes[\"PreKill\"] = \"prekill\";\r\n EventTypes[\"PostKill\"] = \"postkill\";\r\n EventTypes[\"PreDraw\"] = \"predraw\";\r\n EventTypes[\"PostDraw\"] = \"postdraw\";\r\n EventTypes[\"PreDebugDraw\"] = \"predebugdraw\";\r\n EventTypes[\"PostDebugDraw\"] = \"postdebugdraw\";\r\n EventTypes[\"PreUpdate\"] = \"preupdate\";\r\n EventTypes[\"PostUpdate\"] = \"postupdate\";\r\n EventTypes[\"PreFrame\"] = \"preframe\";\r\n EventTypes[\"PostFrame\"] = \"postframe\";\r\n EventTypes[\"PreCollision\"] = \"precollision\";\r\n EventTypes[\"CollisionStart\"] = \"collisionstart\";\r\n EventTypes[\"CollisionEnd\"] = \"collisionend\";\r\n EventTypes[\"PostCollision\"] = \"postcollision\";\r\n EventTypes[\"Initialize\"] = \"initialize\";\r\n EventTypes[\"Activate\"] = \"activate\";\r\n EventTypes[\"Deactivate\"] = \"deactivate\";\r\n EventTypes[\"ExitViewport\"] = \"exitviewport\";\r\n EventTypes[\"EnterViewport\"] = \"enterviewport\";\r\n EventTypes[\"ExitTrigger\"] = \"exit\";\r\n EventTypes[\"EnterTrigger\"] = \"enter\";\r\n EventTypes[\"Connect\"] = \"connect\";\r\n EventTypes[\"Disconnect\"] = \"disconnect\";\r\n EventTypes[\"Button\"] = \"button\";\r\n EventTypes[\"Axis\"] = \"axis\";\r\n EventTypes[\"Visible\"] = \"visible\";\r\n EventTypes[\"Hidden\"] = \"hidden\";\r\n EventTypes[\"Start\"] = \"start\";\r\n EventTypes[\"Stop\"] = \"stop\";\r\n EventTypes[\"PointerUp\"] = \"pointerup\";\r\n EventTypes[\"PointerDown\"] = \"pointerdown\";\r\n EventTypes[\"PointerMove\"] = \"pointermove\";\r\n EventTypes[\"PointerEnter\"] = \"pointerenter\";\r\n EventTypes[\"PointerLeave\"] = \"pointerleave\";\r\n EventTypes[\"PointerCancel\"] = \"pointercancel\";\r\n EventTypes[\"PointerWheel\"] = \"pointerwheel\";\r\n EventTypes[\"Up\"] = \"up\";\r\n EventTypes[\"Down\"] = \"down\";\r\n EventTypes[\"Move\"] = \"move\";\r\n EventTypes[\"Enter\"] = \"enter\";\r\n EventTypes[\"Leave\"] = \"leave\";\r\n EventTypes[\"Cancel\"] = \"cancel\";\r\n EventTypes[\"Wheel\"] = \"wheel\";\r\n EventTypes[\"Press\"] = \"press\";\r\n EventTypes[\"Release\"] = \"release\";\r\n EventTypes[\"Hold\"] = \"hold\";\r\n EventTypes[\"PointerDragStart\"] = \"pointerdragstart\";\r\n EventTypes[\"PointerDragEnd\"] = \"pointerdragend\";\r\n EventTypes[\"PointerDragEnter\"] = \"pointerdragenter\";\r\n EventTypes[\"PointerDragLeave\"] = \"pointerdragleave\";\r\n EventTypes[\"PointerDragMove\"] = \"pointerdragmove\";\r\n})(EventTypes || (EventTypes = {}));\r\n/**\r\n * Base event type in Excalibur that all other event types derive from. Not all event types are thrown on all Excalibur game objects,\r\n * some events are unique to a type, others are not.\r\n *\r\n */\r\nclass GameEvent {\r\n constructor() {\r\n this._bubbles = true;\r\n }\r\n /**\r\n * If set to false, prevents event from propagating to other actors. If true it will be propagated\r\n * to all actors that apply.\r\n */\r\n get bubbles() {\r\n return this._bubbles;\r\n }\r\n set bubbles(value) {\r\n this._bubbles = value;\r\n }\r\n /**\r\n * Prevents event from bubbling\r\n */\r\n stopPropagation() {\r\n this.bubbles = false;\r\n }\r\n}\r\n/**\r\n * The 'kill' event is emitted on actors when it is killed. The target is the actor that was killed.\r\n */\r\nclass KillEvent extends GameEvent {\r\n constructor(target) {\r\n super();\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * The 'prekill' event is emitted directly before an actor is killed.\r\n */\r\nclass PreKillEvent extends GameEvent {\r\n constructor(target) {\r\n super();\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * The 'postkill' event is emitted directly after the actor is killed.\r\n */\r\nclass PostKillEvent extends GameEvent {\r\n constructor(target) {\r\n super();\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * The 'start' event is emitted on engine when has started and is ready for interaction.\r\n */\r\nclass GameStartEvent extends GameEvent {\r\n constructor(target) {\r\n super();\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * The 'stop' event is emitted on engine when has been stopped and will no longer take input, update or draw.\r\n */\r\nclass GameStopEvent extends GameEvent {\r\n constructor(target) {\r\n super();\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * The 'predraw' event is emitted on actors, scenes, and engine before drawing starts. Actors' predraw happens inside their graphics\r\n * transform so that all drawing takes place with the actor as the origin.\r\n *\r\n */\r\nclass PreDrawEvent extends GameEvent {\r\n constructor(ctx, delta, target) {\r\n super();\r\n this.ctx = ctx;\r\n this.delta = delta;\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * The 'postdraw' event is emitted on actors, scenes, and engine after drawing finishes. Actors' postdraw happens inside their graphics\r\n * transform so that all drawing takes place with the actor as the origin.\r\n *\r\n */\r\nclass PostDrawEvent extends GameEvent {\r\n constructor(ctx, delta, target) {\r\n super();\r\n this.ctx = ctx;\r\n this.delta = delta;\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * The 'predebugdraw' event is emitted on actors, scenes, and engine before debug drawing starts.\r\n */\r\nclass PreDebugDrawEvent extends GameEvent {\r\n constructor(ctx, target) {\r\n super();\r\n this.ctx = ctx;\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * The 'postdebugdraw' event is emitted on actors, scenes, and engine after debug drawing starts.\r\n */\r\nclass PostDebugDrawEvent extends GameEvent {\r\n constructor(ctx, target) {\r\n super();\r\n this.ctx = ctx;\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * The 'preupdate' event is emitted on actors, scenes, camera, and engine before the update starts.\r\n */\r\nclass PreUpdateEvent extends GameEvent {\r\n constructor(engine, delta, target) {\r\n super();\r\n this.engine = engine;\r\n this.delta = delta;\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * The 'postupdate' event is emitted on actors, scenes, camera, and engine after the update ends.\r\n */\r\nclass PostUpdateEvent extends GameEvent {\r\n constructor(engine, delta, target) {\r\n super();\r\n this.engine = engine;\r\n this.delta = delta;\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * The 'preframe' event is emitted on the engine, before the frame begins.\r\n */\r\nclass PreFrameEvent extends GameEvent {\r\n constructor(engine, prevStats) {\r\n super();\r\n this.engine = engine;\r\n this.prevStats = prevStats;\r\n this.target = engine;\r\n }\r\n}\r\n/**\r\n * The 'postframe' event is emitted on the engine, after a frame ends.\r\n */\r\nclass PostFrameEvent extends GameEvent {\r\n constructor(engine, stats) {\r\n super();\r\n this.engine = engine;\r\n this.stats = stats;\r\n this.target = engine;\r\n }\r\n}\r\n/**\r\n * Event received when a gamepad is connected to Excalibur. [[Gamepads]] receives this event.\r\n */\r\nclass GamepadConnectEvent extends GameEvent {\r\n constructor(index, gamepad) {\r\n super();\r\n this.index = index;\r\n this.gamepad = gamepad;\r\n this.target = gamepad;\r\n }\r\n}\r\n/**\r\n * Event received when a gamepad is disconnected from Excalibur. [[Gamepads]] receives this event.\r\n */\r\nclass GamepadDisconnectEvent extends GameEvent {\r\n constructor(index, gamepad) {\r\n super();\r\n this.index = index;\r\n this.gamepad = gamepad;\r\n this.target = gamepad;\r\n }\r\n}\r\n/**\r\n * Gamepad button event. See [[Gamepads]] for information on responding to controller input. [[Gamepad]] instances receive this event;\r\n */\r\nclass GamepadButtonEvent extends GameEvent {\r\n /**\r\n * @param button The Gamepad button\r\n * @param value A numeric value between 0 and 1\r\n */\r\n constructor(button, value, target) {\r\n super();\r\n this.button = button;\r\n this.value = value;\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * Gamepad axis event. See [[Gamepads]] for information on responding to controller input. [[Gamepad]] instances receive this event;\r\n */\r\nclass GamepadAxisEvent extends GameEvent {\r\n /**\r\n * @param axis The Gamepad axis\r\n * @param value A numeric value between -1 and 1\r\n */\r\n constructor(axis, value, target) {\r\n super();\r\n this.axis = axis;\r\n this.value = value;\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * Event received by the [[Engine]] when the browser window is visible on a screen.\r\n */\r\nclass VisibleEvent extends GameEvent {\r\n constructor(target) {\r\n super();\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * Event received by the [[Engine]] when the browser window is hidden from all screens.\r\n */\r\nclass HiddenEvent extends GameEvent {\r\n constructor(target) {\r\n super();\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * Event thrown on an [[Actor|actor]] when a collision will occur this frame if it resolves\r\n */\r\nclass PreCollisionEvent extends GameEvent {\r\n /**\r\n * @param actor The actor the event was thrown on\r\n * @param other The actor that will collided with the current actor\r\n * @param side The side that will be collided with the current actor\r\n * @param intersection Intersection vector\r\n */\r\n constructor(actor, other, side, intersection) {\r\n super();\r\n this.other = other;\r\n this.side = side;\r\n this.intersection = intersection;\r\n this.target = actor;\r\n }\r\n}\r\n/**\r\n * Event thrown on an [[Actor|actor]] when a collision has been resolved (body reacted) this frame\r\n */\r\nclass PostCollisionEvent extends GameEvent {\r\n /**\r\n * @param actor The actor the event was thrown on\r\n * @param other The actor that did collide with the current actor\r\n * @param side The side that did collide with the current actor\r\n * @param intersection Intersection vector\r\n */\r\n constructor(actor, other, side, intersection) {\r\n super();\r\n this.other = other;\r\n this.side = side;\r\n this.intersection = intersection;\r\n this.target = actor;\r\n }\r\n get actor() {\r\n return this.target;\r\n }\r\n set actor(actor) {\r\n this.target = actor;\r\n }\r\n}\r\nclass ContactStartEvent {\r\n constructor(target, other, contact) {\r\n this.target = target;\r\n this.other = other;\r\n this.contact = contact;\r\n }\r\n}\r\nclass ContactEndEvent {\r\n constructor(target, other) {\r\n this.target = target;\r\n this.other = other;\r\n }\r\n}\r\nclass CollisionPreSolveEvent {\r\n constructor(target, other, side, intersection, contact) {\r\n this.target = target;\r\n this.other = other;\r\n this.side = side;\r\n this.intersection = intersection;\r\n this.contact = contact;\r\n }\r\n}\r\nclass CollisionPostSolveEvent {\r\n constructor(target, other, side, intersection, contact) {\r\n this.target = target;\r\n this.other = other;\r\n this.side = side;\r\n this.intersection = intersection;\r\n this.contact = contact;\r\n }\r\n}\r\n/**\r\n * Event thrown the first time an [[Actor|actor]] collides with another, after an actor is in contact normal collision events are fired.\r\n */\r\nclass CollisionStartEvent extends GameEvent {\r\n /**\r\n *\r\n * @param actor\r\n * @param other\r\n * @param contact\r\n */\r\n constructor(actor, other, contact) {\r\n super();\r\n this.other = other;\r\n this.contact = contact;\r\n this.target = actor;\r\n }\r\n get actor() {\r\n return this.target;\r\n }\r\n set actor(actor) {\r\n this.target = actor;\r\n }\r\n}\r\n/**\r\n * Event thrown when the [[Actor|actor]] is no longer colliding with another\r\n */\r\nclass CollisionEndEvent extends GameEvent {\r\n /**\r\n *\r\n */\r\n constructor(actor, other) {\r\n super();\r\n this.other = other;\r\n this.target = actor;\r\n }\r\n get actor() {\r\n return this.target;\r\n }\r\n set actor(actor) {\r\n this.target = actor;\r\n }\r\n}\r\n/**\r\n * Event thrown on an [[Actor]] and a [[Scene]] only once before the first update call\r\n */\r\nclass InitializeEvent extends GameEvent {\r\n /**\r\n * @param engine The reference to the current engine\r\n */\r\n constructor(engine, target) {\r\n super();\r\n this.engine = engine;\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * Event thrown on a [[Scene]] on activation\r\n */\r\nclass ActivateEvent extends GameEvent {\r\n /**\r\n * @param context The context for the scene activation\r\n */\r\n constructor(context, target) {\r\n super();\r\n this.context = context;\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * Event thrown on a [[Scene]] on deactivation\r\n */\r\nclass DeactivateEvent extends GameEvent {\r\n /**\r\n * @param context The context for the scene deactivation\r\n */\r\n constructor(context, target) {\r\n super();\r\n this.context = context;\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * Event thrown on an [[Actor]] when it completely leaves the screen.\r\n */\r\nclass ExitViewPortEvent extends GameEvent {\r\n constructor(target) {\r\n super();\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * Event thrown on an [[Actor]] when it completely leaves the screen.\r\n */\r\nclass EnterViewPortEvent extends GameEvent {\r\n constructor(target) {\r\n super();\r\n this.target = target;\r\n }\r\n}\r\nclass EnterTriggerEvent extends GameEvent {\r\n constructor(target, actor) {\r\n super();\r\n this.target = target;\r\n this.actor = actor;\r\n }\r\n}\r\nclass ExitTriggerEvent extends GameEvent {\r\n constructor(target, actor) {\r\n super();\r\n this.target = target;\r\n this.actor = actor;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./EventDispatcher.ts\n\r\nclass EventDispatcher {\r\n constructor() {\r\n this._handlers = {};\r\n this._wiredEventDispatchers = [];\r\n this._deferedHandlerRemovals = [];\r\n }\r\n /**\r\n * Clears any existing handlers or wired event dispatchers on this event dispatcher\r\n */\r\n clear() {\r\n this._handlers = {};\r\n this._wiredEventDispatchers = [];\r\n }\r\n _processDeferredHandlerRemovals() {\r\n for (const eventHandler of this._deferedHandlerRemovals) {\r\n this._removeHandler(eventHandler.name, eventHandler.handler);\r\n }\r\n this._deferedHandlerRemovals.length = 0;\r\n }\r\n /**\r\n * Emits an event for target\r\n * @param eventName The name of the event to publish\r\n * @param event Optionally pass an event data object to the handler\r\n */\r\n emit(eventName, event) {\r\n this._processDeferredHandlerRemovals();\r\n if (!eventName) {\r\n // key not mapped\r\n return;\r\n }\r\n eventName = eventName.toLowerCase();\r\n if (!event) {\r\n event = new GameEvent();\r\n }\r\n let i, len;\r\n if (this._handlers[eventName]) {\r\n i = 0;\r\n len = this._handlers[eventName].length;\r\n for (i; i < len; i++) {\r\n this._handlers[eventName][i](event);\r\n }\r\n }\r\n i = 0;\r\n len = this._wiredEventDispatchers.length;\r\n for (i; i < len; i++) {\r\n this._wiredEventDispatchers[i].emit(eventName, event);\r\n }\r\n }\r\n /**\r\n * Subscribe an event handler to a particular event name, multiple handlers per event name are allowed.\r\n * @param eventName The name of the event to subscribe to\r\n * @param handler The handler callback to fire on this event\r\n */\r\n on(eventName, handler) {\r\n this._processDeferredHandlerRemovals();\r\n eventName = eventName.toLowerCase();\r\n if (!this._handlers[eventName]) {\r\n this._handlers[eventName] = [];\r\n }\r\n this._handlers[eventName].push(handler);\r\n }\r\n /**\r\n * Unsubscribe an event handler(s) from an event. If a specific handler\r\n * is specified for an event, only that handler will be unsubscribed.\r\n * Otherwise all handlers will be unsubscribed for that event.\r\n *\r\n * @param eventName The name of the event to unsubscribe\r\n * @param handler Optionally the specific handler to unsubscribe\r\n */\r\n off(eventName, handler) {\r\n this._deferedHandlerRemovals.push({ name: eventName, handler });\r\n }\r\n _removeHandler(eventName, handler) {\r\n eventName = eventName.toLowerCase();\r\n const eventHandlers = this._handlers[eventName];\r\n if (eventHandlers) {\r\n // if no explicit handler is give with the event name clear all handlers\r\n if (!handler) {\r\n this._handlers[eventName].length = 0;\r\n }\r\n else {\r\n const index = eventHandlers.indexOf(handler);\r\n if (index > -1) {\r\n this._handlers[eventName].splice(index, 1);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Once listens to an event one time, then unsubscribes from that event\r\n *\r\n * @param eventName The name of the event to subscribe to once\r\n * @param handler The handler of the event that will be auto unsubscribed\r\n */\r\n once(eventName, handler) {\r\n this._processDeferredHandlerRemovals();\r\n const metaHandler = (event) => {\r\n const ev = event || new GameEvent();\r\n this.off(eventName, metaHandler);\r\n handler(ev);\r\n };\r\n this.on(eventName, metaHandler);\r\n }\r\n /**\r\n * Wires this event dispatcher to also receive events from another\r\n */\r\n wire(eventDispatcher) {\r\n eventDispatcher._wiredEventDispatchers.push(this);\r\n }\r\n /**\r\n * Unwires this event dispatcher from another\r\n */\r\n unwire(eventDispatcher) {\r\n const index = eventDispatcher._wiredEventDispatchers.indexOf(this);\r\n if (index > -1) {\r\n eventDispatcher._wiredEventDispatchers.splice(index, 1);\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Resources/Resource.ts\n\r\n\r\n/**\r\n * The [[Resource]] type allows games built in Excalibur to load generic resources.\r\n * For any type of remote resource it is recommended to use [[Resource]] for preloading.\r\n */\r\nclass Resource {\r\n /**\r\n * @param path Path to the remote resource\r\n * @param responseType The type to expect as a response: \"\" | \"arraybuffer\" | \"blob\" | \"document\" | \"json\" | \"text\";\r\n * @param bustCache Whether or not to cache-bust requests\r\n */\r\n constructor(path, responseType, bustCache = true) {\r\n this.path = path;\r\n this.responseType = responseType;\r\n this.bustCache = bustCache;\r\n this.data = null;\r\n this.logger = Logger.getInstance();\r\n this.events = new EventDispatcher();\r\n }\r\n /**\r\n * Returns true if the Resource is completely loaded and is ready\r\n * to be drawn.\r\n */\r\n isLoaded() {\r\n return this.data !== null;\r\n }\r\n _cacheBust(uri) {\r\n const query = /\\?\\w*=\\w*/;\r\n if (query.test(uri)) {\r\n uri += '&__=' + Date.now();\r\n }\r\n else {\r\n uri += '?__=' + Date.now();\r\n }\r\n return uri;\r\n }\r\n /**\r\n * Begin loading the resource and returns a promise to be resolved on completion\r\n */\r\n load() {\r\n return new Promise((resolve, reject) => {\r\n // Exit early if we already have data\r\n if (this.data !== null) {\r\n this.logger.debug('Already have data for resource', this.path);\r\n this.events.emit('complete', this.data);\r\n resolve(this.data);\r\n return;\r\n }\r\n const request = new XMLHttpRequest();\r\n request.open('GET', this.bustCache ? this._cacheBust(this.path) : this.path, true);\r\n request.responseType = this.responseType;\r\n request.addEventListener('loadstart', (e) => this.events.emit('loadstart', e));\r\n request.addEventListener('progress', (e) => this.events.emit('progress', e));\r\n request.addEventListener('error', (e) => this.events.emit('error', e));\r\n request.addEventListener('load', (e) => this.events.emit('load', e));\r\n request.addEventListener('load', () => {\r\n // XHR on file:// success status is 0, such as with PhantomJS\r\n if (request.status !== 0 && request.status !== 200) {\r\n this.logger.error('Failed to load resource ', this.path, ' server responded with error code', request.status);\r\n this.events.emit('error', request.response);\r\n reject(new Error(request.statusText));\r\n return;\r\n }\r\n this.data = request.response;\r\n this.events.emit('complete', this.data);\r\n this.logger.debug('Completed loading resource', this.path);\r\n resolve(this.data);\r\n });\r\n request.send();\r\n });\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Util/Watch.ts\n/**\r\n * Watch an object with a proxy, only fires if property value is different\r\n */\r\nfunction watch(type, change) {\r\n if (!type) {\r\n return type;\r\n }\r\n if (type.__isProxy === undefined) {\r\n // expando hack to mark a proxy\r\n return new Proxy(type, {\r\n set: (obj, prop, value) => {\r\n // The default behavior to store the value\r\n if (obj[prop] !== value) {\r\n obj[prop] = value;\r\n // Avoid watching private junk\r\n if (typeof prop === 'string') {\r\n if (prop[0] !== '_') {\r\n change(obj);\r\n }\r\n }\r\n }\r\n // Indicate success\r\n return true;\r\n },\r\n get: (obj, prop) => {\r\n if (prop !== '__isProxy') {\r\n return obj[prop];\r\n }\r\n return true;\r\n }\r\n });\r\n }\r\n return type;\r\n}\r\n/**\r\n * Watch an object with a proxy, fires change on any property value change\r\n */\r\nfunction watchAny(type, change) {\r\n if (!type) {\r\n return type;\r\n }\r\n if (type.__isProxy === undefined) {\r\n // expando hack to mark a proxy\r\n return new Proxy(type, {\r\n set: (obj, prop, value) => {\r\n // The default behavior to store the value\r\n obj[prop] = value;\r\n // Avoid watching private junk\r\n if (typeof prop === 'string') {\r\n if (prop[0] !== '_') {\r\n change(obj);\r\n }\r\n }\r\n // Indicate success\r\n return true;\r\n },\r\n get: (obj, prop) => {\r\n if (prop !== '__isProxy') {\r\n return obj[prop];\r\n }\r\n return true;\r\n }\r\n });\r\n }\r\n return type;\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Graphic.ts\n\r\n\r\n\r\n\r\n/**\r\n * A Graphic is the base Excalibur primitive for something that can be drawn to the [[ExcaliburGraphicsContext]].\r\n * [[Sprite]], [[Animation]], [[GraphicsGroup]], [[Canvas]], [[Rectangle]], [[Circle]], and [[Polygon]] all derive from the\r\n * [[Graphic]] abstract class.\r\n *\r\n * Implementors of a Graphic must override the abstract [[Graphic._drawImage]] method to render an image to the graphics context. Graphic\r\n * handles all the position, rotation, and scale transformations in [[Graphic._preDraw]] and [[Graphic._postDraw]]\r\n */\r\nclass Graphic {\r\n constructor(options) {\r\n var _a, _b, _c, _d, _e, _f;\r\n this.id = Graphic._ID++;\r\n this.transform = AffineMatrix.identity();\r\n this.tint = null;\r\n this._transformStale = true;\r\n /**\r\n * Gets or sets wether to show debug information about the graphic\r\n */\r\n this.showDebug = false;\r\n this._flipHorizontal = false;\r\n this._flipVertical = false;\r\n this._rotation = 0;\r\n /**\r\n * Gets or sets the opacity of the graphic, 0 is transparent, 1 is solid (opaque).\r\n */\r\n this.opacity = 1;\r\n this._scale = Vector.One;\r\n this._origin = null;\r\n this._width = 0;\r\n this._height = 0;\r\n if (options) {\r\n this.origin = (_a = options.origin) !== null && _a !== void 0 ? _a : this.origin;\r\n this.flipHorizontal = (_b = options.flipHorizontal) !== null && _b !== void 0 ? _b : this.flipHorizontal;\r\n this.flipVertical = (_c = options.flipVertical) !== null && _c !== void 0 ? _c : this.flipVertical;\r\n this.rotation = (_d = options.rotation) !== null && _d !== void 0 ? _d : this.rotation;\r\n this.opacity = (_e = options.opacity) !== null && _e !== void 0 ? _e : this.opacity;\r\n this.scale = (_f = options.scale) !== null && _f !== void 0 ? _f : this.scale;\r\n }\r\n }\r\n isStale() {\r\n return this._transformStale;\r\n }\r\n /**\r\n * Gets or sets the flipHorizontal, which will flip the graphic horizontally (across the y axis)\r\n */\r\n get flipHorizontal() {\r\n return this._flipHorizontal;\r\n }\r\n set flipHorizontal(value) {\r\n this._flipHorizontal = value;\r\n this._transformStale = true;\r\n }\r\n /**\r\n * Gets or sets the flipVertical, which will flip the graphic vertically (across the x axis)\r\n */\r\n get flipVertical() {\r\n return this._flipVertical;\r\n }\r\n set flipVertical(value) {\r\n this._flipVertical = value;\r\n this._transformStale = true;\r\n }\r\n /**\r\n * Gets or sets the rotation of the graphic\r\n */\r\n get rotation() {\r\n return this._rotation;\r\n }\r\n set rotation(value) {\r\n this._rotation = value;\r\n this._transformStale = true;\r\n }\r\n /**\r\n * Gets or sets the scale of the graphic, this affects the width and\r\n */\r\n get scale() {\r\n return this._scale;\r\n }\r\n set scale(value) {\r\n this._scale = watch(value, () => {\r\n this._transformStale = true;\r\n });\r\n this._transformStale = true;\r\n }\r\n /**\r\n * Gets or sets the origin of the graphic, if not set the center of the graphic is the origin\r\n */\r\n get origin() {\r\n return this._origin;\r\n }\r\n set origin(value) {\r\n this._origin = watch(value, () => {\r\n this._transformStale = true;\r\n });\r\n this._transformStale = true;\r\n }\r\n cloneGraphicOptions() {\r\n return {\r\n origin: this.origin ? this.origin.clone() : null,\r\n flipHorizontal: this.flipHorizontal,\r\n flipVertical: this.flipVertical,\r\n rotation: this.rotation,\r\n opacity: this.opacity,\r\n scale: this.scale ? this.scale.clone() : null\r\n };\r\n }\r\n /**\r\n * Gets or sets the width of the graphic (always positive)\r\n */\r\n get width() {\r\n return Math.abs(this._width * this.scale.x);\r\n }\r\n /**\r\n * Gets or sets the height of the graphic (always positive)\r\n */\r\n get height() {\r\n return Math.abs(this._height * this.scale.y);\r\n }\r\n set width(value) {\r\n this._width = value;\r\n this._transformStale = true;\r\n }\r\n set height(value) {\r\n this._height = value;\r\n this._transformStale = true;\r\n }\r\n /**\r\n * Gets a copy of the bounds in pixels occupied by the graphic on the the screen. This includes scale.\r\n */\r\n get localBounds() {\r\n return BoundingBox.fromDimension(this.width, this.height, Vector.Zero);\r\n }\r\n /**\r\n * Draw the whole graphic to the context including transform\r\n * @param ex The excalibur graphics context\r\n * @param x\r\n * @param y\r\n */\r\n draw(ex, x, y) {\r\n this._preDraw(ex, x, y);\r\n this._drawImage(ex, 0, 0);\r\n this._postDraw(ex);\r\n }\r\n /**\r\n * Apply affine transformations to the graphics context to manipulate the graphic before [[Graphic._drawImage]]\r\n * @param ex\r\n * @param x\r\n * @param y\r\n */\r\n _preDraw(ex, x, y) {\r\n ex.save();\r\n ex.translate(x, y);\r\n if (this._transformStale) {\r\n this.transform.reset();\r\n this.transform.scale(Math.abs(this.scale.x), Math.abs(this.scale.y));\r\n this._rotate(this.transform);\r\n this._flip(this.transform);\r\n this._transformStale = false;\r\n }\r\n ex.multiply(this.transform);\r\n // it is important to multiply alphas so graphics respect the current context\r\n ex.opacity = ex.opacity * this.opacity;\r\n if (this.tint) {\r\n ex.tint = this.tint;\r\n }\r\n }\r\n _rotate(ex) {\r\n var _a;\r\n const scaleDirX = this.scale.x > 0 ? 1 : -1;\r\n const scaleDirY = this.scale.y > 0 ? 1 : -1;\r\n const origin = (_a = this.origin) !== null && _a !== void 0 ? _a : vec(this.width / 2, this.height / 2);\r\n ex.translate(origin.x, origin.y);\r\n ex.rotate(this.rotation);\r\n // This is for handling direction changes 1 or -1, that way we don't have mismatched translates()\r\n ex.scale(scaleDirX, scaleDirY);\r\n ex.translate(-origin.x, -origin.y);\r\n }\r\n _flip(ex) {\r\n if (this.flipHorizontal) {\r\n ex.translate(this.width / this.scale.x, 0);\r\n ex.scale(-1, 1);\r\n }\r\n if (this.flipVertical) {\r\n ex.translate(0, this.height / this.scale.y);\r\n ex.scale(1, -1);\r\n }\r\n }\r\n /**\r\n * Apply any additional work after [[Graphic._drawImage]] and restore the context state.\r\n * @param ex\r\n */\r\n _postDraw(ex) {\r\n if (this.showDebug) {\r\n ex.debug.drawRect(0, 0, this.width, this.height);\r\n }\r\n ex.restore();\r\n }\r\n}\r\nGraphic._ID = 0;\r\n\n;// CONCATENATED MODULE: ./Graphics/Sprite.ts\n\r\n\r\nclass Sprite extends Graphic {\r\n constructor(options) {\r\n var _a, _b;\r\n super(options);\r\n this._logger = Logger.getInstance();\r\n this._dirty = true;\r\n this._logNotLoadedWarning = false;\r\n this.image = options.image;\r\n const { width, height } = options;\r\n this.sourceView = (_a = options.sourceView) !== null && _a !== void 0 ? _a : { x: 0, y: 0, width: width !== null && width !== void 0 ? width : 0, height: height !== null && height !== void 0 ? height : 0 };\r\n this.destSize = (_b = options.destSize) !== null && _b !== void 0 ? _b : { width: width !== null && width !== void 0 ? width : 0, height: height !== null && height !== void 0 ? height : 0 };\r\n this._updateSpriteDimensions();\r\n this.image.ready.then(() => {\r\n this._updateSpriteDimensions();\r\n });\r\n }\r\n static from(image) {\r\n return new Sprite({\r\n image: image\r\n });\r\n }\r\n get width() {\r\n return Math.abs(this.destSize.width * this.scale.x);\r\n }\r\n get height() {\r\n return Math.abs(this.destSize.height * this.scale.y);\r\n }\r\n set width(newWidth) {\r\n newWidth /= Math.abs(this.scale.x);\r\n this.destSize.width = newWidth;\r\n super.width = Math.ceil(this.destSize.width);\r\n }\r\n set height(newHeight) {\r\n newHeight /= Math.abs(this.scale.y);\r\n this.destSize.height = newHeight;\r\n super.height = Math.ceil(this.destSize.height);\r\n }\r\n _updateSpriteDimensions() {\r\n var _a, _b, _c, _d, _e, _f;\r\n const { width: nativeWidth, height: nativeHeight } = this.image;\r\n // This code uses || to avoid 0's\r\n // If the source is not specified, use the native dimension\r\n this.sourceView.width = ((_a = this.sourceView) === null || _a === void 0 ? void 0 : _a.width) || nativeWidth;\r\n this.sourceView.height = ((_b = this.sourceView) === null || _b === void 0 ? void 0 : _b.height) || nativeHeight;\r\n // If the destination is not specified, use the source if specified, then native\r\n this.destSize.width = ((_c = this.destSize) === null || _c === void 0 ? void 0 : _c.width) || ((_d = this.sourceView) === null || _d === void 0 ? void 0 : _d.width) || nativeWidth;\r\n this.destSize.height = ((_e = this.destSize) === null || _e === void 0 ? void 0 : _e.height) || ((_f = this.sourceView) === null || _f === void 0 ? void 0 : _f.height) || nativeHeight;\r\n this.width = Math.ceil(this.destSize.width) * this.scale.x;\r\n this.height = Math.ceil(this.destSize.height) * this.scale.y;\r\n }\r\n _preDraw(ex, x, y) {\r\n if (this.image.isLoaded() && this._dirty) {\r\n this._dirty = false;\r\n this._updateSpriteDimensions();\r\n }\r\n super._preDraw(ex, x, y);\r\n }\r\n _drawImage(ex, x, y) {\r\n if (this.image.isLoaded()) {\r\n ex.drawImage(this.image.image, this.sourceView.x, this.sourceView.y, this.sourceView.width, this.sourceView.height, x, y, this.destSize.width, this.destSize.height);\r\n }\r\n else {\r\n if (!this._logNotLoadedWarning) {\r\n this._logger.warn(`ImageSource ${this.image.path}` +\r\n ` is not yet loaded and won't be drawn. Please call .load() or include in a Loader.\\n\\n` +\r\n `Read https://excaliburjs.com/docs/imagesource for more information.`);\r\n }\r\n this._logNotLoadedWarning = true;\r\n }\r\n }\r\n clone() {\r\n return new Sprite({\r\n image: this.image,\r\n sourceView: { ...this.sourceView },\r\n destSize: { ...this.destSize },\r\n ...this.cloneGraphicOptions()\r\n });\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Filtering.ts\n/**\r\n * Describes the different image filtering modes\r\n */\r\nvar ImageFiltering;\r\n(function (ImageFiltering) {\r\n /**\r\n * Pixel is useful when you do not want smoothing aka antialiasing applied to your graphics.\r\n *\r\n * Useful for Pixel art aesthetics.\r\n */\r\n ImageFiltering[\"Pixel\"] = \"Pixel\";\r\n /**\r\n * Blended is useful when you have high resolution artwork and would like it blended and smoothed\r\n */\r\n ImageFiltering[\"Blended\"] = \"Blended\";\r\n})(ImageFiltering || (ImageFiltering = {}));\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/texture-loader.ts\n\r\n\r\n/**\r\n * Manages loading image sources into webgl textures, a unique id is associated with all sources\r\n */\r\nclass TextureLoader {\r\n static register(context) {\r\n TextureLoader._GL = context;\r\n TextureLoader._MAX_TEXTURE_SIZE = context.getParameter(context.MAX_TEXTURE_SIZE);\r\n }\r\n /**\r\n * Get the WebGL Texture from a source image\r\n * @param image\r\n */\r\n static get(image) {\r\n return TextureLoader._TEXTURE_MAP.get(image);\r\n }\r\n /**\r\n * Returns whether a source image has been loaded as a texture\r\n * @param image\r\n */\r\n static has(image) {\r\n return TextureLoader._TEXTURE_MAP.has(image);\r\n }\r\n /**\r\n * Loads a graphic into webgl and returns it's texture info, a webgl context must be previously registered\r\n * @param image Source graphic\r\n * @param filtering {ImageFiltering} The ImageFiltering mode to apply to the loaded texture\r\n * @param forceUpdate Optionally force a texture to be reloaded, useful if the source graphic has changed\r\n */\r\n static load(image, filtering, forceUpdate = false) {\r\n // Ignore loading if webgl is not registered\r\n const gl = TextureLoader._GL;\r\n if (!gl) {\r\n return null;\r\n }\r\n let tex = null;\r\n // If reuse the texture if it's from the same source\r\n if (TextureLoader.has(image)) {\r\n tex = TextureLoader.get(image);\r\n }\r\n // Update existing webgl texture and return early\r\n if (tex) {\r\n if (forceUpdate) {\r\n gl.bindTexture(gl.TEXTURE_2D, tex);\r\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);\r\n }\r\n return tex;\r\n }\r\n // No texture exists create a new one\r\n tex = gl.createTexture();\r\n TextureLoader.checkImageSizeSupportedAndLog(image);\r\n gl.bindTexture(gl.TEXTURE_2D, tex);\r\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n // NEAREST for pixel art, LINEAR for hi-res\r\n const filterMode = filtering !== null && filtering !== void 0 ? filtering : TextureLoader.filtering;\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, filterMode === ImageFiltering.Pixel ? gl.NEAREST : gl.LINEAR);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, filterMode === ImageFiltering.Pixel ? gl.NEAREST : gl.LINEAR);\r\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);\r\n TextureLoader._TEXTURE_MAP.set(image, tex);\r\n return tex;\r\n }\r\n static delete(image) {\r\n // Ignore loading if webgl is not registered\r\n const gl = TextureLoader._GL;\r\n if (!gl) {\r\n return null;\r\n }\r\n let tex = null;\r\n if (TextureLoader.has(image)) {\r\n tex = TextureLoader.get(image);\r\n gl.deleteTexture(tex);\r\n }\r\n }\r\n /**\r\n * Takes an image and returns if it meets size criteria for hardware\r\n * @param image\r\n * @returns if the image will be supported at runtime\r\n */\r\n static checkImageSizeSupportedAndLog(image) {\r\n var _a;\r\n const originalSrc = (_a = image.dataset.originalSrc) !== null && _a !== void 0 ? _a : 'internal canvas bitmap';\r\n if (image.width > TextureLoader._MAX_TEXTURE_SIZE || image.height > TextureLoader._MAX_TEXTURE_SIZE) {\r\n TextureLoader._LOGGER.error(`The image [${originalSrc}] provided to Excalibur is too large for the device's maximum texture size of ` +\r\n `(${TextureLoader._MAX_TEXTURE_SIZE}x${TextureLoader._MAX_TEXTURE_SIZE}) please resize to an image `\r\n + `for excalibur to render properly.\\n\\nImages will likely render as black rectangles.\\n\\n` +\r\n `Read more here: https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/WebGL_best_practices#understand_system_limits`);\r\n return false;\r\n }\r\n else if (image.width > 4096 || image.height > 4096) {\r\n // https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/WebGL_best_practices#understand_system_limits\r\n TextureLoader._LOGGER.warn(`The image [${originalSrc}] provided to excalibur is too large may not work on all mobile devices, ` +\r\n `it is recommended you resize images to a maximum (4096x4096).\\n\\n` +\r\n `Images will likely render as black rectangles on some mobile platforms.\\n\\n` +\r\n `Read more here: https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/WebGL_best_practices#understand_system_limits`);\r\n }\r\n return true;\r\n }\r\n}\r\nTextureLoader._LOGGER = Logger.getInstance();\r\n/**\r\n * Sets the default filtering for the Excalibur texture loader, default [[ImageFiltering.Blended]]\r\n */\r\nTextureLoader.filtering = ImageFiltering.Blended;\r\nTextureLoader._TEXTURE_MAP = new Map();\r\nTextureLoader._MAX_TEXTURE_SIZE = 0;\r\n\n;// CONCATENATED MODULE: ./Graphics/ImageSource.ts\n\r\n\r\n\r\n\r\n\r\nclass ImageSource {\r\n /**\r\n * The path to the image, can also be a data url like 'data:image/'\r\n * @param path {string} Path to the image resource relative from the HTML document hosting the game, or absolute\r\n * @param bustCache {boolean} Should excalibur add a cache busting querystring?\r\n * @param filtering {ImageFiltering} Optionally override the image filtering set by [[EngineOptions.antialiasing]]\r\n */\r\n constructor(path, bustCache = false, filtering) {\r\n this.path = path;\r\n this._logger = Logger.getInstance();\r\n /**\r\n * Access to the underlying html image element\r\n */\r\n this.data = new Image();\r\n this._readyFuture = new Future();\r\n /**\r\n * Promise the resolves when the image is loaded and ready for use, does not initiate loading\r\n */\r\n this.ready = this._readyFuture.promise;\r\n this._resource = new Resource(path, 'blob', bustCache);\r\n this._filtering = filtering;\r\n if (path.endsWith('.svg') || path.endsWith('.gif')) {\r\n this._logger.warn(`Image type is not fully supported, you may have mixed results ${path}. Fully supported: jpg, bmp, and png`);\r\n }\r\n }\r\n /**\r\n * The original size of the source image in pixels\r\n */\r\n get width() {\r\n return this.image.naturalWidth;\r\n }\r\n /**\r\n * The original height of the source image in pixels\r\n */\r\n get height() {\r\n return this.image.naturalHeight;\r\n }\r\n /**\r\n * Returns true if the Texture is completely loaded and is ready\r\n * to be drawn.\r\n */\r\n isLoaded() {\r\n if (!this._src) {\r\n // this boosts speed of access\r\n this._src = this.data.src;\r\n }\r\n return !!this._src;\r\n }\r\n get image() {\r\n return this.data;\r\n }\r\n /**\r\n * Begins loading the image and returns a promise that resolves when the image is loaded\r\n */\r\n async load() {\r\n if (this.isLoaded()) {\r\n return this.data;\r\n }\r\n try {\r\n // Load base64 or blob if needed\r\n let url;\r\n if (!this.path.includes('data:image/')) {\r\n const blob = await this._resource.load();\r\n url = URL.createObjectURL(blob);\r\n }\r\n else {\r\n url = this.path;\r\n }\r\n // Decode the image\r\n const image = new Image();\r\n // Use Image.onload over Image.decode()\r\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1055828#c7\r\n // Otherwise chrome will throw still Image.decode() failures for large textures\r\n const loadedFuture = new Future();\r\n image.onload = () => loadedFuture.resolve();\r\n image.src = url;\r\n image.setAttribute('data-original-src', this.path);\r\n await loadedFuture.promise;\r\n // Set results\r\n this.data = image;\r\n }\r\n catch (error) {\r\n throw `Error loading ImageSource from path '${this.path}' with error [${error.message}]`;\r\n }\r\n TextureLoader.load(this.data, this._filtering);\r\n // todo emit complete\r\n this._readyFuture.resolve(this.data);\r\n return this.data;\r\n }\r\n /**\r\n * Build a sprite from this ImageSource\r\n */\r\n toSprite() {\r\n return Sprite.from(this);\r\n }\r\n /**\r\n * Unload images from memory\r\n */\r\n unload() {\r\n this.data = new Image();\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/SpriteSheet.ts\n\r\n\r\n/**\r\n * Represents a collection of sprites from a source image with some organization in a grid\r\n */\r\nclass SpriteSheet {\r\n /**\r\n * Build a new sprite sheet from a list of sprites\r\n *\r\n * Use [[SpriteSheet.fromImageSource]] to create a SpriteSheet from an [[ImageSource]] organized in a grid\r\n * @param options\r\n */\r\n constructor(options) {\r\n this._logger = Logger.getInstance();\r\n this.sprites = [];\r\n const { sprites, rows, columns } = options;\r\n this.sprites = sprites;\r\n this.rows = rows !== null && rows !== void 0 ? rows : 1;\r\n this.columns = columns !== null && columns !== void 0 ? columns : this.sprites.length;\r\n }\r\n /**\r\n * Find a sprite by their x/y position in the SpriteSheet, for example `getSprite(0, 0)` is the [[Sprite]] in the top-left\r\n * @param x\r\n * @param y\r\n */\r\n getSprite(x, y) {\r\n if (x >= this.columns || x < 0) {\r\n this._logger.warn(`No sprite exists in the SpriteSheet at (${x}, ${y}), x: ${x} should be between 0 and ${this.columns - 1}`);\r\n return null;\r\n }\r\n if (y >= this.rows || y < 0) {\r\n this._logger.warn(`No sprite exists in the SpriteSheet at (${x}, ${y}), y: ${y} should be between 0 and ${this.rows - 1}`);\r\n return null;\r\n }\r\n const spriteIndex = x + y * this.columns;\r\n return this.sprites[spriteIndex];\r\n }\r\n /**\r\n * Create a sprite sheet from a sparse set of [[SourceView]] rectangles\r\n * @param options\r\n */\r\n static fromImageSourceWithSourceViews(options) {\r\n const sprites = options.sourceViews.map(sourceView => {\r\n return new Sprite({\r\n image: options.image,\r\n sourceView\r\n });\r\n });\r\n return new SpriteSheet({ sprites });\r\n }\r\n /**\r\n * Create a SpriteSheet from an [[ImageSource]] organized in a grid\r\n *\r\n * Example:\r\n * ```\r\n * const spriteSheet = SpriteSheet.fromImageSource({\r\n * image: imageSource,\r\n * grid: {\r\n * rows: 5,\r\n * columns: 2,\r\n * spriteWidth: 32, // pixels\r\n * spriteHeight: 32 // pixels\r\n * },\r\n * // Optionally specify spacing\r\n * spacing: {\r\n * // pixels from the top left to start the sprite parsing\r\n * originOffset: {\r\n * x: 5,\r\n * y: 5\r\n * },\r\n * // pixels between each sprite while parsing\r\n * margin: {\r\n * x: 1,\r\n * y: 1\r\n * }\r\n * }\r\n * })\r\n * ```\r\n *\r\n * @param options\r\n */\r\n static fromImageSource(options) {\r\n var _a;\r\n const sprites = [];\r\n options.spacing = (_a = options.spacing) !== null && _a !== void 0 ? _a : {};\r\n const { image, grid: { rows, columns: cols, spriteWidth, spriteHeight }, spacing: { originOffset, margin } } = options;\r\n const offsetDefaults = { x: 0, y: 0, ...originOffset };\r\n const marginDefaults = { x: 0, y: 0, ...margin };\r\n for (let x = 0; x < cols; x++) {\r\n for (let y = 0; y < rows; y++) {\r\n sprites[x + y * cols] = new Sprite({\r\n image: image,\r\n sourceView: {\r\n x: x * spriteWidth + marginDefaults.x * x + offsetDefaults.x,\r\n y: y * spriteHeight + marginDefaults.y * y + offsetDefaults.y,\r\n width: spriteWidth,\r\n height: spriteHeight\r\n },\r\n destSize: { height: spriteHeight, width: spriteWidth }\r\n });\r\n }\r\n }\r\n return new SpriteSheet({\r\n sprites: sprites,\r\n rows: rows,\r\n columns: cols\r\n });\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/SpriteFont.ts\n\r\n\r\n\r\n\r\nclass SpriteFont extends Graphic {\r\n constructor(options) {\r\n super(options);\r\n this._text = '';\r\n this.alphabet = '';\r\n this.shadow = null;\r\n this.caseInsensitive = false;\r\n this.spacing = 0;\r\n this._logger = Logger.getInstance();\r\n this._alreadyWarnedAlphabet = false;\r\n this._alreadyWarnedSpriteSheet = false;\r\n const { alphabet, spriteSheet, caseInsensitive, spacing, shadow } = options;\r\n this.alphabet = alphabet;\r\n this.spriteSheet = spriteSheet;\r\n this.caseInsensitive = caseInsensitive !== null && caseInsensitive !== void 0 ? caseInsensitive : this.caseInsensitive;\r\n this.spacing = spacing !== null && spacing !== void 0 ? spacing : this.spacing;\r\n this.shadow = shadow !== null && shadow !== void 0 ? shadow : this.shadow;\r\n }\r\n _getCharacterSprites(text) {\r\n const results = [];\r\n // handle case insensitive\r\n const textToRender = this.caseInsensitive ? text.toLocaleLowerCase() : text;\r\n const alphabet = this.caseInsensitive ? this.alphabet.toLocaleLowerCase() : this.alphabet;\r\n // for each letter in text\r\n for (let letterIndex = 0; letterIndex < textToRender.length; letterIndex++) {\r\n // find the sprite index in alphabet , if there is an error pick the first\r\n const letter = textToRender[letterIndex];\r\n let spriteIndex = alphabet.indexOf(letter);\r\n if (spriteIndex === -1) {\r\n spriteIndex = 0;\r\n if (!this._alreadyWarnedAlphabet) {\r\n this._logger.warn(`SpriteFont - Cannot find letter '${letter}' in configured alphabet '${alphabet}'.`);\r\n this._logger.warn('There maybe be more issues in the SpriteFont configuration. No additional warnings will be logged.');\r\n this._alreadyWarnedAlphabet = true;\r\n }\r\n }\r\n const letterSprite = this.spriteSheet.sprites[spriteIndex];\r\n if (letterSprite) {\r\n results.push(letterSprite);\r\n }\r\n else {\r\n if (!this._alreadyWarnedSpriteSheet) {\r\n this._logger.warn(`SpriteFont - Cannot find sprite for '${letter}' at index '${spriteIndex}' in configured SpriteSheet`);\r\n this._logger.warn('There maybe be more issues in the SpriteFont configuration. No additional warnings will be logged.');\r\n this._alreadyWarnedSpriteSheet = true;\r\n }\r\n }\r\n }\r\n return results;\r\n }\r\n measureText(text) {\r\n const lines = text.split('\\n');\r\n const maxWidthLine = lines.reduce((a, b) => {\r\n return a.length > b.length ? a : b;\r\n });\r\n const sprites = this._getCharacterSprites(maxWidthLine);\r\n let width = 0;\r\n let height = 0;\r\n for (const sprite of sprites) {\r\n width += sprite.width + this.spacing;\r\n height = Math.max(height, sprite.height);\r\n }\r\n return BoundingBox.fromDimension(width, height * lines.length, Vector.Zero);\r\n }\r\n _drawImage(ex, x, y) {\r\n let xCursor = 0;\r\n let yCursor = 0;\r\n let height = 0;\r\n const lines = this._text.split('\\n');\r\n for (const line of lines) {\r\n for (const sprite of this._getCharacterSprites(line)) {\r\n // draw it in the right spot and increase the cursor by sprite width\r\n sprite.draw(ex, x + xCursor, y + yCursor);\r\n xCursor += sprite.width + this.spacing;\r\n height = Math.max(height, sprite.height);\r\n }\r\n xCursor = 0;\r\n yCursor += height;\r\n }\r\n }\r\n render(ex, text, _color, x, y) {\r\n // SpriteFont doesn't support _color, yet...\r\n this._text = text;\r\n const bounds = this.measureText(text);\r\n this.width = bounds.width;\r\n this.height = bounds.height;\r\n if (this.shadow) {\r\n ex.save();\r\n ex.translate(this.shadow.offset.x, this.shadow.offset.y);\r\n this.draw(ex, x, y);\r\n ex.restore();\r\n }\r\n this.draw(ex, x, y);\r\n }\r\n clone() {\r\n return new SpriteFont({\r\n alphabet: this.alphabet,\r\n spriteSheet: this.spriteSheet,\r\n spacing: this.spacing\r\n });\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/debug-font.png\n/* harmony default export */ const debug_font = (\"data:image/png;base64,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\");\n;// CONCATENATED MODULE: ./Graphics/Context/debug-text.ts\n\r\n\r\n/**\r\n * Internal debugtext helper\r\n */\r\nclass DebugText {\r\n constructor() {\r\n /**\r\n * base64 font\r\n */\r\n this.fontSheet = debug_font;\r\n this.size = 16;\r\n this.load();\r\n }\r\n load() {\r\n this._imageSource = new ImageSource(this.fontSheet);\r\n return this._imageSource.load().then(() => {\r\n this._spriteSheet = SpriteSheet.fromImageSource({\r\n image: this._imageSource,\r\n grid: {\r\n rows: 3,\r\n columns: 16,\r\n spriteWidth: 16,\r\n spriteHeight: 16\r\n }\r\n });\r\n this._spriteFont = new SpriteFont({\r\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ,!\\'&.\"?-()+ ',\r\n caseInsensitive: true,\r\n spriteSheet: this._spriteSheet,\r\n spacing: -6\r\n });\r\n });\r\n }\r\n /**\r\n * Writes debug text using the built in sprint font\r\n * @param ctx\r\n * @param text\r\n * @param pos\r\n */\r\n write(ctx, text, pos) {\r\n if (this._imageSource.isLoaded()) {\r\n this._spriteFont.render(ctx, text, null, pos.x, pos.y);\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/render-source.ts\nclass RenderSource {\r\n constructor(_gl, _texture) {\r\n this._gl = _gl;\r\n this._texture = _texture;\r\n }\r\n use() {\r\n const gl = this._gl;\r\n gl.activeTexture(gl.TEXTURE0);\r\n gl.bindTexture(gl.TEXTURE_2D, this._texture);\r\n }\r\n disable() {\r\n const gl = this._gl;\r\n gl.bindTexture(gl.TEXTURE_2D, null);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/render-target.ts\n\r\nclass RenderTarget {\r\n constructor(options) {\r\n this.width = options.width;\r\n this.height = options.height;\r\n this._gl = options.gl;\r\n this._setupFramebuffer();\r\n }\r\n setResolution(width, height) {\r\n const gl = this._gl;\r\n this.width = width;\r\n this.height = height;\r\n gl.bindTexture(gl.TEXTURE_2D, this._frameTexture);\r\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, this.width, this.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);\r\n }\r\n get frameBuffer() {\r\n return this._frameBuffer;\r\n }\r\n get frameTexture() {\r\n return this._frameTexture;\r\n }\r\n _setupFramebuffer() {\r\n // Allocates frame buffer\r\n const gl = this._gl;\r\n this._frameTexture = gl.createTexture();\r\n gl.bindTexture(gl.TEXTURE_2D, this._frameTexture);\r\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, this.width, this.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);\r\n // set the filtering so we don't need mips\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n // attach the texture as the first color attachment\r\n const attachmentPoint = gl.COLOR_ATTACHMENT0;\r\n // After this bind all draw calls will draw to this framebuffer texture\r\n this._frameBuffer = gl.createFramebuffer();\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._frameBuffer);\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, attachmentPoint, gl.TEXTURE_2D, this._frameTexture, 0);\r\n // Reset after initialized\r\n this.disable();\r\n }\r\n toRenderSource() {\r\n const source = new RenderSource(this._gl, this._frameTexture);\r\n return source;\r\n }\r\n /**\r\n * When called, all drawing gets redirected to this render target\r\n */\r\n use() {\r\n const gl = this._gl;\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._frameBuffer);\r\n // very important to set the viewport to the size of the framebuffer texture\r\n gl.viewport(0, 0, this.width, this.height);\r\n }\r\n /**\r\n * When called, all drawing is sent back to the canvas\r\n */\r\n disable() {\r\n const gl = this._gl;\r\n // passing null switches rendering back to the canvas\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\r\n gl.bindTexture(gl.TEXTURE_2D, null);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/webgl-adapter.ts\n/**\r\n * Must be accessed after Engine construction time to ensure the context has been created\r\n */\r\nclass ExcaliburWebGLContextAccessor {\r\n static clear() {\r\n ExcaliburWebGLContextAccessor._GL = null;\r\n }\r\n static register(gl) {\r\n ExcaliburWebGLContextAccessor._GL = gl;\r\n }\r\n // current webgl context\r\n static get gl() {\r\n if (!ExcaliburWebGLContextAccessor._GL) {\r\n throw Error('Attempted gl access before init');\r\n }\r\n return ExcaliburWebGLContextAccessor._GL;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/line-renderer/line-vertex.glsl\n/* harmony default export */ const line_vertex = (\"#version 300 es\\r\\nin vec2 a_position;\\r\\nin vec4 a_color;\\r\\n\\r\\nout lowp vec4 v_color;\\r\\n\\r\\nuniform mat4 u_matrix;\\r\\n\\r\\nvoid main() {\\r\\n // Set the vertex position using the ortho transform matrix\\r\\n gl_Position = u_matrix * vec4(a_position, 0.0, 1.0);\\r\\n\\r\\n // Passthrough the color\\r\\n v_color = a_color;\\r\\n}\");\n;// CONCATENATED MODULE: ./Graphics/Context/line-renderer/line-fragment.glsl\n/* harmony default export */ const line_fragment = (\"#version 300 es\\r\\nprecision mediump float;\\r\\n\\r\\n// Color\\r\\nin lowp vec4 v_color;\\r\\n\\r\\nout vec4 fragColor;\\r\\n\\r\\nvoid main() {\\r\\n fragColor = v_color;\\r\\n}\");\n;// CONCATENATED MODULE: ./Graphics/Context/webgl-util.ts\n/**\r\n * Return the size of the GlType in bytes\r\n * @param gl\r\n * @param type\r\n */\r\nfunction getGlTypeSizeBytes(gl, type) {\r\n switch (type) {\r\n case gl.FLOAT:\r\n return 4;\r\n case gl.SHORT:\r\n return 2;\r\n case gl.UNSIGNED_SHORT:\r\n return 2;\r\n case gl.BYTE:\r\n return 1;\r\n case gl.UNSIGNED_BYTE:\r\n return 1;\r\n default:\r\n return 1;\r\n }\r\n}\r\n/**\r\n * Based on the type return the number of attribute components\r\n *\r\n * https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/vertexAttribPointer\r\n * @param gl\r\n * @param type\r\n */\r\nfunction getAttributeComponentSize(gl, type) {\r\n switch (type) {\r\n case gl.LOW_FLOAT:\r\n case gl.HIGH_FLOAT:\r\n case gl.FLOAT:\r\n return 1;\r\n case gl.FLOAT_VEC2:\r\n return 2;\r\n case gl.FLOAT_VEC3:\r\n return 3;\r\n case gl.FLOAT_VEC4:\r\n return 4;\r\n case gl.BYTE:\r\n return 1;\r\n case gl.UNSIGNED_BYTE:\r\n return 1;\r\n case gl.UNSIGNED_SHORT:\r\n case gl.SHORT:\r\n return 1;\r\n default:\r\n return 1;\r\n }\r\n}\r\n/**\r\n * Based on the attribute return the corresponding supported attrib pointer type\r\n * https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/vertexAttribPointer\r\n *\r\n * @param gl\r\n * @param type\r\n */\r\nfunction getAttributePointerType(gl, type) {\r\n switch (type) {\r\n case gl.LOW_FLOAT:\r\n case gl.HIGH_FLOAT:\r\n case gl.FLOAT:\r\n case gl.FLOAT_VEC2:\r\n case gl.FLOAT_VEC3:\r\n case gl.FLOAT_VEC4:\r\n return gl.FLOAT;\r\n case gl.BYTE:\r\n return gl.BYTE;\r\n case gl.UNSIGNED_BYTE:\r\n return gl.UNSIGNED_BYTE;\r\n case gl.SHORT:\r\n return gl.SHORT;\r\n case gl.UNSIGNED_SHORT:\r\n return gl.UNSIGNED_SHORT;\r\n default:\r\n return gl.FLOAT;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/shader.ts\n\r\n\r\nclass Shader {\r\n /**\r\n * Create a shader program in excalibur\r\n * @param options specify shader vertex and fragment source\r\n */\r\n constructor(options) {\r\n this._gl = ExcaliburWebGLContextAccessor.gl;\r\n this.uniforms = {};\r\n this.attributes = {};\r\n this._compiled = false;\r\n const { vertexSource, fragmentSource } = options;\r\n this.vertexSource = vertexSource;\r\n this.fragmentSource = fragmentSource;\r\n }\r\n get compiled() {\r\n return this._compiled;\r\n }\r\n /**\r\n * Binds the shader program\r\n */\r\n use() {\r\n const gl = this._gl;\r\n gl.useProgram(this.program);\r\n Shader._ACTIVE_SHADER_INSTANCE = this;\r\n }\r\n isCurrentlyBound() {\r\n return Shader._ACTIVE_SHADER_INSTANCE === this;\r\n }\r\n /**\r\n * Compile the current shader against a webgl context\r\n */\r\n compile() {\r\n const gl = this._gl;\r\n const vertexShader = this._compileShader(gl, this.vertexSource, gl.VERTEX_SHADER);\r\n const fragmentShader = this._compileShader(gl, this.fragmentSource, gl.FRAGMENT_SHADER);\r\n this.program = this._createProgram(gl, vertexShader, fragmentShader);\r\n const attributes = this.getAttributes();\r\n for (const attribute of attributes) {\r\n this.attributes[attribute.name] = attribute;\r\n }\r\n const uniforms = this.getUniforms();\r\n for (const uniform of uniforms) {\r\n this.uniforms[uniform.name] = uniform;\r\n }\r\n this._compiled = true;\r\n return this.program;\r\n }\r\n getUniforms() {\r\n const gl = this._gl;\r\n const uniformCount = gl.getProgramParameter(this.program, gl.ACTIVE_UNIFORMS);\r\n const uniforms = [];\r\n for (let i = 0; i < uniformCount; i++) {\r\n const uniform = gl.getActiveUniform(this.program, i);\r\n const uniformLocation = gl.getUniformLocation(this.program, uniform.name);\r\n uniforms.push({\r\n name: uniform.name,\r\n glType: uniform.type,\r\n location: uniformLocation\r\n });\r\n }\r\n return uniforms;\r\n }\r\n getAttributes() {\r\n const gl = this._gl;\r\n const attributeCount = gl.getProgramParameter(this.program, gl.ACTIVE_ATTRIBUTES);\r\n const attributes = [];\r\n for (let i = 0; i < attributeCount; i++) {\r\n const attribute = gl.getActiveAttrib(this.program, i);\r\n const attributeLocation = gl.getAttribLocation(this.program, attribute.name);\r\n attributes.push({\r\n name: attribute.name,\r\n glType: getAttributePointerType(gl, attribute.type),\r\n size: getAttributeComponentSize(gl, attribute.type),\r\n location: attributeLocation,\r\n normalized: false\r\n });\r\n }\r\n return attributes;\r\n }\r\n /**\r\n * Set a texture in a gpu texture slot\r\n * @param slotNumber\r\n * @param texture\r\n */\r\n setTexture(slotNumber, texture) {\r\n const gl = this._gl;\r\n gl.activeTexture(gl.TEXTURE0 + slotNumber);\r\n gl.bindTexture(gl.TEXTURE_2D, texture);\r\n }\r\n /**\r\n * Set an integer uniform for the current shader\r\n *\r\n * **Important** Must call ex.Shader.use() before setting a uniform!\r\n *\r\n * @param name\r\n * @param value\r\n */\r\n setUniformInt(name, value) {\r\n this.setUniform('uniform1i', name, ~~value);\r\n }\r\n /**\r\n * Set an integer array uniform for the current shader\r\n *\r\n * **Important** Must call ex.Shader.use() before setting a uniform!\r\n *\r\n * @param name\r\n * @param value\r\n */\r\n setUniformIntArray(name, value) {\r\n this.setUniform('uniform1iv', name, value);\r\n }\r\n /**\r\n * Set a boolean uniform for the current shader\r\n *\r\n * **Important** Must call ex.Shader.use() before setting a uniform!\r\n *\r\n * @param name\r\n * @param value\r\n */\r\n setUniformBoolean(name, value) {\r\n this.setUniform('uniform1i', name, value ? 1 : 0);\r\n }\r\n /**\r\n * Set a float uniform for the current shader\r\n *\r\n * **Important** Must call ex.Shader.use() before setting a uniform!\r\n *\r\n * @param name\r\n * @param value\r\n */\r\n setUniformFloat(name, value) {\r\n this.setUniform('uniform1f', name, value);\r\n }\r\n /**\r\n * Set a float array uniform for the current shader\r\n *\r\n * **Important** Must call ex.Shader.use() before setting a uniform!\r\n *\r\n * @param name\r\n * @param value\r\n */\r\n setUniformFloatArray(name, value) {\r\n this.setUniform('uniform1fv', name, value);\r\n }\r\n /**\r\n * Set a [[Vector]] uniform for the current shader\r\n *\r\n * **Important** Must call ex.Shader.use() before setting a uniform!\r\n *\r\n * @param name\r\n * @param value\r\n */\r\n setUniformFloatVector(name, value) {\r\n this.setUniform('uniform2f', name, value.x, value.y);\r\n }\r\n /**\r\n * Set an [[Matrix]] uniform for the current shader\r\n *\r\n * **Important** Must call ex.Shader.use() before setting a uniform!\r\n *\r\n * @param name\r\n * @param value\r\n */\r\n setUniformMatrix(name, value) {\r\n this.setUniform('uniformMatrix4fv', name, false, value.data);\r\n }\r\n /**\r\n * Set any available uniform type in webgl\r\n *\r\n * For example setUniform('uniformMatrix2fv', 'u_my2x2_mat`, ...);\r\n */\r\n setUniform(uniformType, name, ...value) {\r\n if (!this._compiled) {\r\n throw Error(`Must compile shader before setting a uniform ${uniformType}:${name}`);\r\n }\r\n if (!this.isCurrentlyBound()) {\r\n throw Error('Currently accessed shader instance is not the current active shader in WebGL,' +\r\n ' must call `shader.use()` before setting uniforms');\r\n }\r\n const gl = this._gl;\r\n const location = gl.getUniformLocation(this.program, name);\r\n if (location) {\r\n const args = [location, ...value];\r\n this._gl[uniformType].apply(this._gl, args);\r\n }\r\n else {\r\n throw Error(`Uniform ${uniformType}:${name} doesn\\'t exist or is not used in the shader source code,` +\r\n ' unused uniforms are optimized away by most browsers');\r\n }\r\n }\r\n _createProgram(gl, vertexShader, fragmentShader) {\r\n const program = gl.createProgram();\r\n if (program === null) {\r\n throw Error('Could not create graphics shader program');\r\n }\r\n // attach the shaders.\r\n gl.attachShader(program, vertexShader);\r\n gl.attachShader(program, fragmentShader);\r\n // link the program.\r\n gl.linkProgram(program);\r\n const success = gl.getProgramParameter(program, gl.LINK_STATUS);\r\n if (!success) {\r\n throw Error(`Could not link the program: [${gl.getProgramInfoLog(program)}]`);\r\n }\r\n return program;\r\n }\r\n _compileShader(gl, source, type) {\r\n const typeName = gl.VERTEX_SHADER === type ? 'vertex' : 'fragment';\r\n const shader = gl.createShader(type);\r\n if (shader === null) {\r\n throw Error(`Could not build shader: [${source}]`);\r\n }\r\n gl.shaderSource(shader, source);\r\n gl.compileShader(shader);\r\n const success = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\r\n if (!success) {\r\n const errorInfo = gl.getShaderInfoLog(shader);\r\n throw Error(`Could not compile ${typeName} shader:\\n\\n${errorInfo}${this._processSourceForError(source, errorInfo)}`);\r\n }\r\n return shader;\r\n }\r\n _processSourceForError(source, errorInfo) {\r\n const lines = source.split('\\n');\r\n const errorLineStart = errorInfo.search(/\\d:\\d/);\r\n const errorLineEnd = errorInfo.indexOf(' ', errorLineStart);\r\n const [_, error2] = errorInfo.slice(errorLineStart, errorLineEnd).split(':').map(v => Number(v));\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i] = `${i + 1}: ${lines[i]}${error2 === (i + 1) ? ' <----- ERROR!' : ''}`;\r\n }\r\n return '\\n\\nSource:\\n' + lines.join('\\n');\r\n }\r\n}\r\nShader._ACTIVE_SHADER_INSTANCE = null;\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/vertex-buffer.ts\n\r\n/**\r\n * Helper around vertex buffer to simplify creating and uploading geometry\r\n *\r\n * Under the hood uses Float32Array\r\n */\r\nclass VertexBuffer {\r\n constructor(options) {\r\n this._gl = ExcaliburWebGLContextAccessor.gl;\r\n /**\r\n * If the vertices never change switching 'static' can be more efficient on the gpu\r\n *\r\n * Default is 'dynamic'\r\n */\r\n this.type = 'dynamic';\r\n const { size, type, data } = options;\r\n this.buffer = this._gl.createBuffer();\r\n if (!data && !size) {\r\n throw Error('Must either provide data or a size to the VertexBuffer');\r\n }\r\n if (!data) {\r\n this.bufferData = new Float32Array(size);\r\n }\r\n else {\r\n this.bufferData = data;\r\n }\r\n this.type = type !== null && type !== void 0 ? type : this.type;\r\n // Allocate buffer\r\n const gl = this._gl;\r\n gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer);\r\n gl.bufferData(gl.ARRAY_BUFFER, this.bufferData, this.type === 'static' ? gl.STATIC_DRAW : gl.DYNAMIC_DRAW);\r\n }\r\n /**\r\n * Bind this vertex buffer\r\n */\r\n bind() {\r\n const gl = this._gl;\r\n gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer);\r\n }\r\n /**\r\n * Upload vertex buffer geometry to the GPU\r\n */\r\n upload(count) {\r\n const gl = this._gl;\r\n gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer);\r\n if (count) {\r\n gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.bufferData, 0, count);\r\n }\r\n else {\r\n // TODO always use bufferSubData? need to perf test it\r\n gl.bufferData(gl.ARRAY_BUFFER, this.bufferData, this.type === 'static' ? gl.STATIC_DRAW : gl.DYNAMIC_DRAW);\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/vertex-layout.ts\n\r\n\r\n\r\n/**\r\n * Helper around creating vertex attributes in a given [[VertexBuffer]], this is useful for describing\r\n * the memory layout for your vertices inside a particular buffer\r\n *\r\n * Note: This helper assumes interleaved attributes in one [[VertexBuffer]], not many.\r\n *\r\n * Working with `gl.vertexAttribPointer` can be tricky, and this attempts to double check you\r\n */\r\nclass VertexLayout {\r\n constructor(options) {\r\n this._gl = ExcaliburWebGLContextAccessor.gl;\r\n this._logger = Logger.getInstance();\r\n this._layout = [];\r\n this._attributes = [];\r\n this._vertexTotalSizeBytes = 0;\r\n const { shader, vertexBuffer, attributes } = options;\r\n this._vertexBuffer = vertexBuffer;\r\n this._attributes = attributes;\r\n this._shader = shader;\r\n this.initialize();\r\n }\r\n get vertexBuffer() {\r\n return this._vertexBuffer;\r\n }\r\n get attributes() {\r\n return this._attributes;\r\n }\r\n /**\r\n * Total number of bytes that the vertex will take up\r\n */\r\n get totalVertexSizeBytes() {\r\n return this._vertexTotalSizeBytes;\r\n }\r\n /**\r\n * Layouts need shader locations and must be bound to a shader\r\n */\r\n initialize() {\r\n if (!this._shader.compiled) {\r\n throw Error('Shader not compiled, shader must be compiled before defining a vertex layout');\r\n }\r\n this._layout.length = 0;\r\n const shaderAttributes = this._shader.attributes;\r\n for (const attribute of this._attributes) {\r\n const attrib = shaderAttributes[attribute[0]];\r\n if (!attrib) {\r\n throw Error(`The attribute named: ${attribute[0]} size ${attribute[1]}` +\r\n ` not found in the shader source code:\\n ${this._shader.vertexSource}`);\r\n }\r\n if (attrib.size !== attribute[1]) {\r\n throw Error(`VertexLayout size definition for attribute: [${attribute[0]}, ${attribute[1]}],`\r\n + ` doesnt match shader source size ${attrib.size}:\\n ${this._shader.vertexSource}`);\r\n }\r\n this._layout.push(attrib);\r\n }\r\n // calc size\r\n let componentsPerVertex = 0;\r\n for (const vertAttribute of this._layout) {\r\n const typeSize = getGlTypeSizeBytes(this._gl, vertAttribute.glType);\r\n this._vertexTotalSizeBytes += typeSize * vertAttribute.size;\r\n componentsPerVertex += vertAttribute.size;\r\n }\r\n if (this._vertexBuffer.bufferData.length % componentsPerVertex !== 0) {\r\n this._logger.warn(`The vertex component size (${componentsPerVertex}) does divide evenly into the specified vertex buffer`\r\n + ` (${this._vertexBuffer.bufferData.length})`);\r\n }\r\n }\r\n /**\r\n * Bind this layout with it's associated vertex buffer\r\n *\r\n * @param uploadBuffer Optionally indicate you wish to upload the buffer to the GPU associated with this layout\r\n */\r\n use(uploadBuffer = false, count) {\r\n const gl = this._gl;\r\n if (!this._shader.isCurrentlyBound()) {\r\n throw Error('Shader associated with this vertex layout is not active! Call shader.use() before layout.use()');\r\n }\r\n this._vertexBuffer.bind();\r\n if (uploadBuffer) {\r\n this._vertexBuffer.upload(count);\r\n }\r\n let offset = 0;\r\n // TODO switch to VAOs if the extension is\r\n for (const vert of this._layout) {\r\n gl.vertexAttribPointer(vert.location, vert.size, vert.glType, vert.normalized, this.totalVertexSizeBytes, offset);\r\n gl.enableVertexAttribArray(vert.location);\r\n offset += getGlTypeSizeBytes(gl, vert.glType) * vert.size;\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/GraphicsDiagnostics.ts\nclass GraphicsDiagnostics {\r\n static clear() {\r\n GraphicsDiagnostics.DrawCallCount = 0;\r\n GraphicsDiagnostics.DrawnImagesCount = 0;\r\n }\r\n}\r\nGraphicsDiagnostics.DrawCallCount = 0;\r\nGraphicsDiagnostics.DrawnImagesCount = 0;\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/line-renderer/line-renderer.ts\n\r\n\r\n\r\n\r\nclass LineRenderer {\r\n constructor() {\r\n this.type = 'ex.line';\r\n this.priority = 0;\r\n this._maxLines = 10922;\r\n this._vertexIndex = 0;\r\n this._lineCount = 0;\r\n }\r\n initialize(gl, context) {\r\n this._gl = gl;\r\n this._context = context;\r\n this._shader = new Shader({\r\n vertexSource: line_vertex,\r\n fragmentSource: line_fragment\r\n });\r\n this._shader.compile();\r\n this._shader.use();\r\n this._shader.setUniformMatrix('u_matrix', this._context.ortho);\r\n this._vertexBuffer = new VertexBuffer({\r\n size: 6 * 2 * this._maxLines,\r\n type: 'dynamic'\r\n });\r\n this._layout = new VertexLayout({\r\n vertexBuffer: this._vertexBuffer,\r\n shader: this._shader,\r\n attributes: [\r\n ['a_position', 2],\r\n ['a_color', 4]\r\n ]\r\n });\r\n }\r\n draw(start, end, color) {\r\n // Force a render if the batch is full\r\n if (this._isFull()) {\r\n this.flush();\r\n }\r\n this._lineCount++;\r\n const transform = this._context.getTransform();\r\n const finalStart = transform.multiply(start);\r\n const finalEnd = transform.multiply(end);\r\n const vertexBuffer = this._vertexBuffer.bufferData;\r\n // Start\r\n vertexBuffer[this._vertexIndex++] = finalStart.x;\r\n vertexBuffer[this._vertexIndex++] = finalStart.y;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n // End\r\n vertexBuffer[this._vertexIndex++] = finalEnd.x;\r\n vertexBuffer[this._vertexIndex++] = finalEnd.y;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n }\r\n _isFull() {\r\n if (this._lineCount >= this._maxLines) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n hasPendingDraws() {\r\n return this._lineCount !== 0;\r\n }\r\n flush() {\r\n // nothing to draw early exit\r\n if (this._lineCount === 0) {\r\n return;\r\n }\r\n const gl = this._gl;\r\n this._shader.use();\r\n this._layout.use(true);\r\n this._shader.setUniformMatrix('u_matrix', this._context.ortho);\r\n gl.drawArrays(gl.LINES, 0, this._lineCount * 2); // 2 verts per line\r\n GraphicsDiagnostics.DrawnImagesCount += this._lineCount;\r\n GraphicsDiagnostics.DrawCallCount++;\r\n // reset\r\n this._vertexIndex = 0;\r\n this._lineCount = 0;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/point-renderer/point-vertex.glsl\n/* harmony default export */ const point_vertex = (\"#version 300 es\\r\\nin vec2 a_position;\\r\\nin vec4 a_color;\\r\\nin float a_size;\\r\\nout lowp vec4 v_color;\\r\\nuniform mat4 u_matrix;\\r\\n\\r\\nvoid main() {\\r\\n gl_Position = u_matrix * vec4(a_position, 0.0, 1.0);\\r\\n gl_PointSize = a_size * 2.0;\\r\\n v_color = a_color;\\r\\n}\");\n;// CONCATENATED MODULE: ./Graphics/Context/point-renderer/point-fragment.glsl\n/* harmony default export */ const point_fragment = (\"#version 300 es\\r\\n\\r\\nprecision mediump float;\\r\\nin lowp vec4 v_color;\\r\\n\\r\\nout vec4 fragColor;\\r\\n\\r\\nvoid main() {\\r\\n float r = 0.0, delta = 0.0, alpha = 1.0;\\r\\n vec2 cxy = 2.0 * gl_PointCoord - 1.0;\\r\\n r = dot(cxy, cxy);\\r\\n\\r\\n delta = fwidth(r);\\r\\n alpha = 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r);\\r\\n // \\\"premultiply\\\" the color by alpha\\r\\n vec4 color = v_color;\\r\\n color.a = color.a * alpha;\\r\\n color.rgb = color.rgb * color.a;\\r\\n fragColor = color;\\r\\n}\");\n;// CONCATENATED MODULE: ./Graphics/Context/point-renderer/point-renderer.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass PointRenderer {\r\n constructor() {\r\n this.type = 'ex.point';\r\n this.priority = 0;\r\n this._maxPoints = 10922;\r\n this._pointCount = 0;\r\n this._vertexIndex = 0;\r\n }\r\n initialize(gl, context) {\r\n this._gl = gl;\r\n this._context = context;\r\n this._shader = new Shader({\r\n vertexSource: point_vertex,\r\n fragmentSource: point_fragment\r\n });\r\n this._shader.compile();\r\n this._shader.use();\r\n this._shader.setUniformMatrix('u_matrix', this._context.ortho);\r\n this._buffer = new VertexBuffer({\r\n size: 7 * this._maxPoints,\r\n type: 'dynamic'\r\n });\r\n this._layout = new VertexLayout({\r\n shader: this._shader,\r\n vertexBuffer: this._buffer,\r\n attributes: [\r\n ['a_position', 2],\r\n ['a_color', 4],\r\n ['a_size', 1]\r\n ]\r\n });\r\n }\r\n draw(point, color, size) {\r\n // Force a render if the batch is full\r\n if (this._isFull()) {\r\n this.flush();\r\n }\r\n this._pointCount++;\r\n const transform = this._context.getTransform();\r\n const opacity = this._context.opacity;\r\n const snapToPixel = this._context.snapToPixel;\r\n const finalPoint = transform.multiply(point);\r\n if (snapToPixel) {\r\n finalPoint.x = ~~(finalPoint.x + pixelSnapEpsilon);\r\n finalPoint.y = ~~(finalPoint.y + pixelSnapEpsilon);\r\n }\r\n const vertexBuffer = this._buffer.bufferData;\r\n vertexBuffer[this._vertexIndex++] = finalPoint.x;\r\n vertexBuffer[this._vertexIndex++] = finalPoint.y;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a * opacity;\r\n vertexBuffer[this._vertexIndex++] = size * Math.max(transform.getScaleX(), transform.getScaleY());\r\n }\r\n _isFull() {\r\n if (this._pointCount >= this._maxPoints) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n hasPendingDraws() {\r\n return this._pointCount !== 0;\r\n }\r\n flush() {\r\n // nothing to draw early exit\r\n if (this._pointCount === 0) {\r\n return;\r\n }\r\n const gl = this._gl;\r\n this._shader.use();\r\n this._layout.use(true);\r\n this._shader.setUniformMatrix('u_matrix', this._context.ortho);\r\n gl.drawArrays(gl.POINTS, 0, this._pointCount);\r\n GraphicsDiagnostics.DrawnImagesCount += this._pointCount;\r\n GraphicsDiagnostics.DrawCallCount++;\r\n this._pointCount = 0;\r\n this._vertexIndex = 0;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/screen-pass-painter/screen-vertex.glsl\n/* harmony default export */ const screen_vertex = (\"#version 300 es\\r\\nin vec2 a_position;\\r\\n\\r\\nin vec2 a_texcoord;\\r\\nout vec2 v_texcoord;\\r\\n\\r\\nvoid main() {\\r\\n gl_Position = vec4(a_position, 0.0, 1.0);\\r\\n\\r\\n // Pass the texcoord to the fragment shader.\\r\\n v_texcoord = a_texcoord;\\r\\n}\");\n;// CONCATENATED MODULE: ./Graphics/Context/screen-pass-painter/screen-fragment.glsl\n/* harmony default export */ const screen_fragment = (\"#version 300 es\\r\\nprecision mediump float;\\r\\n\\r\\n// Passed in from the vertex shader.\\r\\nin vec2 v_texcoord;\\r\\n\\r\\n// The texture.\\r\\nuniform sampler2D u_texture;\\r\\n\\r\\nout vec4 fragColor;\\r\\n\\r\\nvoid main() {\\r\\n fragColor = texture(u_texture, v_texcoord);\\r\\n}\");\n;// CONCATENATED MODULE: ./Graphics/Context/screen-pass-painter/screen-pass-painter.ts\n\r\n\r\n\r\n\r\n\r\n/**\r\n * This is responsible for painting the entire screen during the render passes\r\n */\r\nclass ScreenPassPainter {\r\n constructor(gl) {\r\n this._gl = gl;\r\n this._shader = new Shader({\r\n vertexSource: screen_vertex,\r\n fragmentSource: screen_fragment\r\n });\r\n this._shader.compile();\r\n // Setup memory layout\r\n this._buffer = new VertexBuffer({\r\n type: 'static',\r\n // clip space quad + uv since we don't need a camera\r\n data: new Float32Array([\r\n -1, -1, 0, 0,\r\n -1, 1, 0, 1,\r\n 1, -1, 1, 0,\r\n 1, -1, 1, 0,\r\n -1, 1, 0, 1,\r\n 1, 1, 1, 1\r\n ])\r\n });\r\n this._layout = new VertexLayout({\r\n shader: this._shader,\r\n vertexBuffer: this._buffer,\r\n attributes: [\r\n ['a_position', 2],\r\n ['a_texcoord', 2]\r\n ]\r\n });\r\n this._buffer.upload();\r\n }\r\n renderWithPostProcessor(postprocessor) {\r\n const gl = this._gl;\r\n postprocessor.getShader().use();\r\n postprocessor.getLayout().use();\r\n gl.drawArrays(gl.TRIANGLES, 0, 6);\r\n }\r\n renderToScreen() {\r\n const gl = this._gl;\r\n this._shader.use();\r\n this._layout.use();\r\n gl.drawArrays(gl.TRIANGLES, 0, 6);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/quad-index-buffer.ts\n\r\n\r\n/**\r\n * Helper that defines and index buffer for quad geometry\r\n *\r\n * Index buffers allow you to save space in vertex buffers when you share vertices in geometry\r\n * it is almost always worth it in terms of performance to use an index buffer.\r\n */\r\nclass QuadIndexBuffer {\r\n /**\r\n * @param numberOfQuads Specify the max number of quads you want to draw\r\n * @param useUint16 Optionally force a uint16 buffer\r\n */\r\n constructor(numberOfQuads, useUint16) {\r\n this._gl = ExcaliburWebGLContextAccessor.gl;\r\n this._logger = Logger.getInstance();\r\n const gl = this._gl;\r\n this.buffer = gl.createBuffer();\r\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.buffer);\r\n const totalVertices = numberOfQuads * 6;\r\n if (!useUint16) {\r\n this.bufferData = new Uint32Array(totalVertices);\r\n }\r\n else {\r\n // fall back to using gl.UNSIGNED_SHORT or tell the user they are out of luck\r\n const maxUint16 = 65535;\r\n const maxUint16Index = Math.floor((maxUint16 - 1) / 4); // max quads\r\n this.bufferGlType = gl.UNSIGNED_SHORT;\r\n this.bufferData = new Uint16Array(totalVertices);\r\n // TODO Should we error if this happens?? maybe not might crash mid game\r\n if (numberOfQuads > maxUint16Index) {\r\n this._logger.warn(`Total quads exceeds hardware index buffer limit (uint16), max(${maxUint16Index}) requested quads(${numberOfQuads})`);\r\n }\r\n }\r\n let currentQuad = 0;\r\n for (let i = 0; i < totalVertices; i += 6) {\r\n // first triangle\r\n this.bufferData[i + 0] = currentQuad + 0;\r\n this.bufferData[i + 1] = currentQuad + 1;\r\n this.bufferData[i + 2] = currentQuad + 2;\r\n // second triangle\r\n this.bufferData[i + 3] = currentQuad + 2;\r\n this.bufferData[i + 4] = currentQuad + 1;\r\n this.bufferData[i + 5] = currentQuad + 3;\r\n currentQuad += 4;\r\n }\r\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.bufferData, gl.STATIC_DRAW);\r\n }\r\n get size() {\r\n return this.bufferData.length;\r\n }\r\n /**\r\n * Upload data to the GPU\r\n */\r\n upload() {\r\n const gl = this._gl;\r\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.buffer);\r\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.bufferData, gl.STATIC_DRAW);\r\n }\r\n /**\r\n * Bind this index buffer\r\n */\r\n bind() {\r\n const gl = this._gl;\r\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.buffer);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/image-renderer/image-renderer.frag.glsl\n/* harmony default export */ const image_renderer_frag = (\"#version 300 es\\r\\nprecision mediump float;\\r\\n\\r\\n// UV coord\\r\\nin vec2 v_texcoord;\\r\\n\\r\\n// Texture index\\r\\nin lowp float v_textureIndex;\\r\\n\\r\\n// Textures in the current draw\\r\\nuniform sampler2D u_textures[%%count%%];\\r\\n\\r\\n// Opacity\\r\\nin float v_opacity;\\r\\n\\r\\nin vec4 v_tint;\\r\\n\\r\\nout vec4 fragColor;\\r\\n\\r\\nvoid main() {\\r\\n // In order to support the most efficient sprite batching, we have multiple\\r\\n // textures loaded into the gpu (usually 8) this picker logic skips over textures\\r\\n // that do not apply to a particular sprite.\\r\\n\\r\\n vec4 color = vec4(1.0, 0, 0, 1.0);\\r\\n\\r\\n // GLSL is templated out to pick the right texture and set the vec4 color\\r\\n %%texture_picker%%\\r\\n\\r\\n color.rgb = color.rgb * v_opacity;\\r\\n color.a = color.a * v_opacity;\\r\\n fragColor = color * v_tint;\\r\\n}\");\n;// CONCATENATED MODULE: ./Graphics/Context/image-renderer/image-renderer.vert.glsl\n/* harmony default export */ const image_renderer_vert = (\"#version 300 es\\r\\nin vec2 a_position;\\r\\n\\r\\n// Opacity \\r\\nin float a_opacity;\\r\\nout float v_opacity;\\r\\n\\r\\n// UV coordinate\\r\\nin vec2 a_texcoord;\\r\\nout vec2 v_texcoord;\\r\\n\\r\\n// Texture number\\r\\nin lowp float a_textureIndex;\\r\\nout lowp float v_textureIndex;\\r\\n\\r\\nin vec4 a_tint;\\r\\nout vec4 v_tint;\\r\\n\\r\\nuniform mat4 u_matrix;\\r\\n\\r\\nvoid main() {\\r\\n // Set the vertex position using the ortho transform matrix\\r\\n gl_Position = u_matrix * vec4(a_position, 0.0, 1.0);\\r\\n\\r\\n // Pass through the Opacity to the fragment shader\\r\\n v_opacity = a_opacity;\\r\\n // Pass through the UV coord to the fragment shader\\r\\n v_texcoord = a_texcoord;\\r\\n // Pass through the texture number to the fragment shader\\r\\n v_textureIndex = a_textureIndex;\\r\\n // Pass through the tint\\r\\n v_tint = a_tint;\\r\\n}\");\n;// CONCATENATED MODULE: ./Graphics/Context/image-renderer/image-renderer.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass ImageRenderer {\r\n constructor() {\r\n this.type = 'ex.image';\r\n this.priority = 0;\r\n this._maxImages = 10922; // max(uint16) / 6 verts\r\n this._maxTextures = 0;\r\n // Per flush vars\r\n this._imageCount = 0;\r\n this._textures = [];\r\n this._vertexIndex = 0;\r\n }\r\n initialize(gl, context) {\r\n this._gl = gl;\r\n this._context = context;\r\n // Transform shader source\r\n // FIXME: PIXEL 6 complains `ERROR: Expression too complex.` if we use it's reported max texture units, 125 seems to work for now...\r\n this._maxTextures = Math.min(gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS), 125);\r\n const transformedFrag = this._transformFragmentSource(image_renderer_frag, this._maxTextures);\r\n // Compile shader\r\n this._shader = new Shader({\r\n fragmentSource: transformedFrag,\r\n vertexSource: image_renderer_vert\r\n });\r\n this._shader.compile();\r\n // setup uniforms\r\n this._shader.use();\r\n this._shader.setUniformMatrix('u_matrix', context.ortho);\r\n // Initialize texture slots to [0, 1, 2, 3, 4, .... maxGPUTextures]\r\n this._shader.setUniformIntArray('u_textures', [...Array(this._maxTextures)].map((_, i) => i));\r\n // Setup memory layout\r\n this._buffer = new VertexBuffer({\r\n size: 10 * 4 * this._maxImages,\r\n type: 'dynamic'\r\n });\r\n this._layout = new VertexLayout({\r\n shader: this._shader,\r\n vertexBuffer: this._buffer,\r\n attributes: [\r\n ['a_position', 2],\r\n ['a_opacity', 1],\r\n ['a_texcoord', 2],\r\n ['a_textureIndex', 1],\r\n ['a_tint', 4]\r\n ]\r\n });\r\n // Setup index buffer\r\n this._quads = new QuadIndexBuffer(this._maxImages, true);\r\n }\r\n _transformFragmentSource(source, maxTextures) {\r\n let newSource = source.replace('%%count%%', maxTextures.toString());\r\n let texturePickerBuilder = '';\r\n for (let i = 0; i < maxTextures; i++) {\r\n if (i === 0) {\r\n texturePickerBuilder += `if (v_textureIndex <= ${i}.5) {\\n`;\r\n }\r\n else {\r\n texturePickerBuilder += ` else if (v_textureIndex <= ${i}.5) {\\n`;\r\n }\r\n texturePickerBuilder += ` color = texture(u_textures[${i}], v_texcoord);\\n`;\r\n texturePickerBuilder += ` }\\n`;\r\n }\r\n newSource = newSource.replace('%%texture_picker%%', texturePickerBuilder);\r\n return newSource;\r\n }\r\n _addImageAsTexture(image) {\r\n const texture = TextureLoader.load(image);\r\n if (this._textures.indexOf(texture) === -1) {\r\n this._textures.push(texture);\r\n }\r\n }\r\n _bindTextures(gl) {\r\n // Bind textures in the correct order\r\n for (let i = 0; i < this._maxTextures; i++) {\r\n gl.activeTexture(gl.TEXTURE0 + i);\r\n gl.bindTexture(gl.TEXTURE_2D, this._textures[i] || this._textures[0]);\r\n }\r\n }\r\n _getTextureIdForImage(image) {\r\n if (image) {\r\n return this._textures.indexOf(TextureLoader.get(image));\r\n }\r\n return -1;\r\n }\r\n _isFull() {\r\n if (this._imageCount >= this._maxImages) {\r\n return true;\r\n }\r\n if (this._textures.length >= this._maxTextures) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n draw(image, sx, sy, swidth, sheight, dx, dy, dwidth, dheight) {\r\n var _a, _b, _c, _d;\r\n // Force a render if the batch is full\r\n if (this._isFull()) {\r\n this.flush();\r\n }\r\n this._imageCount++;\r\n this._addImageAsTexture(image);\r\n let width = (image === null || image === void 0 ? void 0 : image.width) || swidth || 0;\r\n let height = (image === null || image === void 0 ? void 0 : image.height) || sheight || 0;\r\n let view = [0, 0, (_a = swidth !== null && swidth !== void 0 ? swidth : image === null || image === void 0 ? void 0 : image.width) !== null && _a !== void 0 ? _a : 0, (_b = sheight !== null && sheight !== void 0 ? sheight : image === null || image === void 0 ? void 0 : image.height) !== null && _b !== void 0 ? _b : 0];\r\n let dest = [sx !== null && sx !== void 0 ? sx : 1, sy !== null && sy !== void 0 ? sy : 1];\r\n // If destination is specified, update view and dest\r\n if (dx !== undefined && dy !== undefined && dwidth !== undefined && dheight !== undefined) {\r\n view = [sx !== null && sx !== void 0 ? sx : 1, sy !== null && sy !== void 0 ? sy : 1, (_c = swidth !== null && swidth !== void 0 ? swidth : image === null || image === void 0 ? void 0 : image.width) !== null && _c !== void 0 ? _c : 0, (_d = sheight !== null && sheight !== void 0 ? sheight : image === null || image === void 0 ? void 0 : image.height) !== null && _d !== void 0 ? _d : 0];\r\n dest = [dx, dy];\r\n width = dwidth;\r\n height = dheight;\r\n }\r\n sx = view[0];\r\n sy = view[1];\r\n const sw = view[2];\r\n const sh = view[3];\r\n // transform based on current context\r\n const transform = this._context.getTransform();\r\n const opacity = this._context.opacity;\r\n const snapToPixel = this._context.snapToPixel;\r\n let topLeft = vec(dest[0], dest[1]);\r\n let topRight = vec(dest[0] + width, dest[1]);\r\n let bottomLeft = vec(dest[0], dest[1] + height);\r\n let bottomRight = vec(dest[0] + width, dest[1] + height);\r\n topLeft = transform.multiply(topLeft);\r\n topRight = transform.multiply(topRight);\r\n bottomLeft = transform.multiply(bottomLeft);\r\n bottomRight = transform.multiply(bottomRight);\r\n if (snapToPixel) {\r\n topLeft.x = ~~(topLeft.x + pixelSnapEpsilon);\r\n topLeft.y = ~~(topLeft.y + pixelSnapEpsilon);\r\n topRight.x = ~~(topRight.x + pixelSnapEpsilon);\r\n topRight.y = ~~(topRight.y + pixelSnapEpsilon);\r\n bottomLeft.x = ~~(bottomLeft.x + pixelSnapEpsilon);\r\n bottomLeft.y = ~~(bottomLeft.y + pixelSnapEpsilon);\r\n bottomRight.x = ~~(bottomRight.x + pixelSnapEpsilon);\r\n bottomRight.y = ~~(bottomRight.y + pixelSnapEpsilon);\r\n }\r\n const tint = this._context.tint;\r\n const textureId = this._getTextureIdForImage(image);\r\n const imageWidth = image.width || width;\r\n const imageHeight = image.height || height;\r\n const uvx0 = (sx) / imageWidth;\r\n const uvy0 = (sy) / imageHeight;\r\n const uvx1 = (sx + sw - 0.01) / imageWidth;\r\n const uvy1 = (sy + sh - 0.01) / imageHeight;\r\n // update data\r\n const vertexBuffer = this._layout.vertexBuffer.bufferData;\r\n // (0, 0) - 0\r\n vertexBuffer[this._vertexIndex++] = topLeft.x;\r\n vertexBuffer[this._vertexIndex++] = topLeft.y;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = uvx0;\r\n vertexBuffer[this._vertexIndex++] = uvy0;\r\n vertexBuffer[this._vertexIndex++] = textureId;\r\n vertexBuffer[this._vertexIndex++] = tint.r / 255;\r\n vertexBuffer[this._vertexIndex++] = tint.g / 255;\r\n vertexBuffer[this._vertexIndex++] = tint.b / 255;\r\n vertexBuffer[this._vertexIndex++] = tint.a;\r\n // (0, 1) - 1\r\n vertexBuffer[this._vertexIndex++] = bottomLeft.x;\r\n vertexBuffer[this._vertexIndex++] = bottomLeft.y;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = uvx0;\r\n vertexBuffer[this._vertexIndex++] = uvy1;\r\n vertexBuffer[this._vertexIndex++] = textureId;\r\n vertexBuffer[this._vertexIndex++] = tint.r / 255;\r\n vertexBuffer[this._vertexIndex++] = tint.g / 255;\r\n vertexBuffer[this._vertexIndex++] = tint.b / 255;\r\n vertexBuffer[this._vertexIndex++] = tint.a;\r\n // (1, 0) - 2\r\n vertexBuffer[this._vertexIndex++] = topRight.x;\r\n vertexBuffer[this._vertexIndex++] = topRight.y;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = uvx1;\r\n vertexBuffer[this._vertexIndex++] = uvy0;\r\n vertexBuffer[this._vertexIndex++] = textureId;\r\n vertexBuffer[this._vertexIndex++] = tint.r / 255;\r\n vertexBuffer[this._vertexIndex++] = tint.g / 255;\r\n vertexBuffer[this._vertexIndex++] = tint.b / 255;\r\n vertexBuffer[this._vertexIndex++] = tint.a;\r\n // (1, 1) - 3\r\n vertexBuffer[this._vertexIndex++] = bottomRight.x;\r\n vertexBuffer[this._vertexIndex++] = bottomRight.y;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = uvx1;\r\n vertexBuffer[this._vertexIndex++] = uvy1;\r\n vertexBuffer[this._vertexIndex++] = textureId;\r\n vertexBuffer[this._vertexIndex++] = tint.r / 255;\r\n vertexBuffer[this._vertexIndex++] = tint.g / 255;\r\n vertexBuffer[this._vertexIndex++] = tint.b / 255;\r\n vertexBuffer[this._vertexIndex++] = tint.a;\r\n }\r\n hasPendingDraws() {\r\n return this._imageCount !== 0;\r\n }\r\n flush() {\r\n // nothing to draw early exit\r\n if (this._imageCount === 0) {\r\n return;\r\n }\r\n const gl = this._gl;\r\n // Bind the shader\r\n this._shader.use();\r\n // Bind the memory layout and upload data\r\n this._layout.use(true, 4 * 10 * this._imageCount);\r\n // Update ortho matrix uniform\r\n this._shader.setUniformMatrix('u_matrix', this._context.ortho);\r\n // Bind textures to\r\n this._bindTextures(gl);\r\n // Bind index buffer\r\n this._quads.bind();\r\n // Draw all the quads\r\n gl.drawElements(gl.TRIANGLES, this._imageCount * 6, this._quads.bufferGlType, 0);\r\n GraphicsDiagnostics.DrawnImagesCount += this._imageCount;\r\n GraphicsDiagnostics.DrawCallCount++;\r\n // Reset\r\n this._imageCount = 0;\r\n this._vertexIndex = 0;\r\n this._textures.length = 0;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/rectangle-renderer/rectangle-renderer.frag.glsl\n/* harmony default export */ const rectangle_renderer_frag = (\"#version 300 es\\r\\n\\r\\nprecision mediump float;\\r\\n\\r\\n// UV coord\\r\\nin vec2 v_uv;\\r\\n\\r\\nin vec2 v_size; // in pixels\\r\\n\\r\\n// Color coord to blend with image\\r\\nin lowp vec4 v_color;\\r\\n\\r\\n// Stroke color if used\\r\\nin lowp vec4 v_strokeColor;\\r\\n\\r\\n// Stroke thickness if used\\r\\nin lowp float v_strokeThickness; // in pixels\\r\\n\\r\\n// Opacity\\r\\nin float v_opacity;\\r\\n\\r\\nout vec4 fragColor;\\r\\n\\r\\nvoid main() {\\r\\n // modified from https://stackoverflow.com/questions/59197671/glsl-rounded-rectangle-with-variable-border\\r\\n vec2 uv = v_uv;\\r\\n vec2 fragCoord = uv * v_size;\\r\\n float maxX = v_size.x - v_strokeThickness;\\r\\n float minX = v_strokeThickness;\\r\\n float maxY = v_size.y - v_strokeThickness;\\r\\n float minY = v_strokeThickness;\\r\\n\\r\\n if (fragCoord.x < maxX && fragCoord.x > minX &&\\r\\n fragCoord.y < maxY && fragCoord.y > minY) {\\r\\n fragColor = v_color;\\r\\n } else {\\r\\n fragColor = v_strokeColor;\\r\\n }\\r\\n fragColor.a *= v_opacity;\\r\\n fragColor.rgb *= fragColor.a;\\r\\n\\r\\n // vec2 v2CenteredPos = abs(fragCoord - v_size.xy / 2.0);\\r\\n // vec2 v2HalfShapeSizePx = v_size.xy/2.0 - v_strokeThickness/2.0;\\r\\n\\r\\n // float fHalfBorderDist = 0.0;\\r\\n // float fHalfBorderThickness = 0.0;\\r\\n\\r\\n // if (fragCoord.x > max(v_radius, v_strokeThickness) && \\r\\n // fragCoord.x < v_size.x - max(v_radius, v_strokeThickness))\\r\\n // {\\r\\n // fHalfBorderDist = v2CenteredPos.y - v2HalfShapeSizePx.y;\\r\\n // fHalfBorderThickness = v_strokeThickness / 2.0;\\r\\n // }\\r\\n // else if (fragCoord.y > max(v_radius, v_strokeThickness) && \\r\\n // fragCoord.y < v_size.y - max(v_radius, v_strokeThickness))\\r\\n // {\\r\\n // fHalfBorderDist = v2CenteredPos.x - v2HalfShapeSizePx.x;\\r\\n // fHalfBorderThickness = v_strokeThickness / 2.0;\\r\\n // }\\r\\n // else\\r\\n // {\\r\\n // vec2 edgeVec = max(vec2(0.0), v_radius - vec2(\\r\\n // uv.x > 0.5 ? v_size.x - fragCoord.x : fragCoord.x,\\r\\n // uv.y > 0.5 ? v_size.y - fragCoord.y : fragCoord.y));\\r\\n \\r\\n // float ellipse_ab = v_radius-v_strokeThickness;\\r\\n // vec2 ellipse_isect = (v_strokeThickness > v_radius || v_strokeThickness > v_radius) ? vec2(0.0) :\\r\\n // edgeVec.xy * ellipse_ab*ellipse_ab / length(ellipse_ab*edgeVec.yx); \\r\\n \\r\\n // fHalfBorderThickness = (v_radius - length(ellipse_isect)) / 2.0;\\r\\n // fHalfBorderDist = length(edgeVec) - (v_radius - fHalfBorderThickness);\\r\\n // }\\r\\n\\r\\n // vec4 v4FromColor = v_strokeColor;\\r\\n // v4FromColor.rgb *= v4FromColor.a;\\r\\n // vec4 v4ToColor = vec4(0.0); // background color is transparent\\r\\n // if (fHalfBorderDist < 0.0) {\\r\\n // v4ToColor = v_color;\\r\\n // v4ToColor.rgb *= v4ToColor.a;\\r\\n // }\\r\\n\\r\\n // float mixPct = abs(fHalfBorderDist) - fHalfBorderThickness;\\r\\n\\r\\n // vec4 finalColor = mix(v4FromColor, v4ToColor, mixPct);\\r\\n // gl_FragColor = finalColor;\\r\\n}\");\n;// CONCATENATED MODULE: ./Graphics/Context/rectangle-renderer/rectangle-renderer.vert.glsl\n/* harmony default export */ const rectangle_renderer_vert = (\"#version 300 es\\r\\nin vec2 a_position;\\r\\n\\r\\n// UV coordinate\\r\\nin vec2 a_uv;\\r\\nout vec2 v_uv;\\r\\n\\r\\nin vec2 a_size;\\r\\nout vec2 v_size;\\r\\n\\r\\n// Opacity \\r\\nin float a_opacity;\\r\\nout float v_opacity;\\r\\n\\r\\nin vec4 a_color;\\r\\nout vec4 v_color;\\r\\n\\r\\nin vec4 a_strokeColor;\\r\\nout vec4 v_strokeColor;\\r\\n\\r\\nin float a_strokeThickness;\\r\\nout float v_strokeThickness;\\r\\n\\r\\nuniform mat4 u_matrix;\\r\\n\\r\\n\\r\\nvoid main() {\\r\\n // Set the vertex position using the ortho transform matrix\\r\\n gl_Position = u_matrix * vec4(a_position, 0.0, 1.0);\\r\\n\\r\\n // Pass through UV coords\\r\\n v_uv = a_uv;\\r\\n // Pass through size\\r\\n v_size = a_size;\\r\\n // Pass through the Opacity to the fragment shader\\r\\n v_opacity = a_opacity;\\r\\n // Pass through the color to the fragment shader\\r\\n v_color = a_color;\\r\\n // Pass through the stroke color to the fragment shader\\r\\n v_strokeColor = a_strokeColor;\\r\\n // Pass through the stroke thickenss to the fragment shader\\r\\n v_strokeThickness = a_strokeThickness;\\r\\n}\");\n;// CONCATENATED MODULE: ./Graphics/Context/rectangle-renderer/rectangle-renderer.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass RectangleRenderer {\r\n constructor() {\r\n this.type = 'ex.rectangle';\r\n this.priority = 0;\r\n this._maxRectangles = 10922; // max(uint16) / 6 verts\r\n this._rectangleCount = 0;\r\n this._vertexIndex = 0;\r\n }\r\n initialize(gl, context) {\r\n this._gl = gl;\r\n this._context = context;\r\n // https://stackoverflow.com/questions/59197671/glsl-rounded-rectangle-with-variable-border\r\n this._shader = new Shader({\r\n fragmentSource: rectangle_renderer_frag,\r\n vertexSource: rectangle_renderer_vert\r\n });\r\n this._shader.compile();\r\n // setup uniforms\r\n this._shader.use();\r\n this._shader.setUniformMatrix('u_matrix', context.ortho);\r\n this._buffer = new VertexBuffer({\r\n size: 16 * 4 * this._maxRectangles,\r\n type: 'dynamic'\r\n });\r\n this._layout = new VertexLayout({\r\n shader: this._shader,\r\n vertexBuffer: this._buffer,\r\n attributes: [\r\n ['a_position', 2],\r\n ['a_uv', 2],\r\n ['a_size', 2],\r\n ['a_opacity', 1],\r\n ['a_color', 4],\r\n ['a_strokeColor', 4],\r\n ['a_strokeThickness', 1]\r\n ]\r\n });\r\n this._quads = new QuadIndexBuffer(this._maxRectangles, true);\r\n }\r\n _isFull() {\r\n if (this._rectangleCount >= this._maxRectangles) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n draw(...args) {\r\n if (args[0] instanceof Vector && args[1] instanceof Vector) {\r\n this.drawLine.apply(this, args);\r\n }\r\n else {\r\n this.drawRectangle.apply(this, args);\r\n }\r\n }\r\n drawLine(start, end, color, thickness = 1) {\r\n if (this._isFull()) {\r\n this.flush();\r\n }\r\n this._rectangleCount++;\r\n // transform based on current context\r\n const transform = this._context.getTransform();\r\n const opacity = this._context.opacity;\r\n const snapToPixel = this._context.snapToPixel;\r\n const dir = end.sub(start);\r\n const length = dir.size;\r\n const normal = dir.normalize().perpendicular();\r\n const halfThick = thickness / 2;\r\n /**\r\n * +---------------------^----------------------+\r\n * | | (normal) |\r\n * (startx, starty)------------------>(endx, endy)\r\n * | |\r\n * + -------------------------------------------+\r\n */\r\n const startTop = transform.multiply(normal.scale(halfThick).add(start));\r\n const startBottom = transform.multiply(normal.scale(-halfThick).add(start));\r\n const endTop = transform.multiply(normal.scale(halfThick).add(end));\r\n const endBottom = transform.multiply(normal.scale(-halfThick).add(end));\r\n if (snapToPixel) {\r\n startTop.x = ~~(startTop.x + pixelSnapEpsilon);\r\n startTop.y = ~~(startTop.y + pixelSnapEpsilon);\r\n endTop.x = ~~(endTop.x + pixelSnapEpsilon);\r\n endTop.y = ~~(endTop.y + pixelSnapEpsilon);\r\n startBottom.x = ~~(startBottom.x + pixelSnapEpsilon);\r\n startBottom.y = ~~(startBottom.y + pixelSnapEpsilon);\r\n endBottom.x = ~~(endBottom.x + pixelSnapEpsilon);\r\n endBottom.y = ~~(endBottom.y + pixelSnapEpsilon);\r\n }\r\n // TODO uv could be static vertex buffer\r\n const uvx0 = 0;\r\n const uvy0 = 0;\r\n const uvx1 = 1;\r\n const uvy1 = 1;\r\n const stroke = Color.Transparent;\r\n const strokeThickness = 0;\r\n const width = 1;\r\n // update data\r\n const vertexBuffer = this._layout.vertexBuffer.bufferData;\r\n // (0, 0) - 0\r\n vertexBuffer[this._vertexIndex++] = startTop.x;\r\n vertexBuffer[this._vertexIndex++] = startTop.y;\r\n vertexBuffer[this._vertexIndex++] = uvx0;\r\n vertexBuffer[this._vertexIndex++] = uvy0;\r\n vertexBuffer[this._vertexIndex++] = length;\r\n vertexBuffer[this._vertexIndex++] = thickness;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n vertexBuffer[this._vertexIndex++] = stroke.r / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.g / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.b / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.a;\r\n vertexBuffer[this._vertexIndex++] = strokeThickness / width;\r\n // (0, 1) - 1\r\n vertexBuffer[this._vertexIndex++] = startBottom.x;\r\n vertexBuffer[this._vertexIndex++] = startBottom.y;\r\n vertexBuffer[this._vertexIndex++] = uvx0;\r\n vertexBuffer[this._vertexIndex++] = uvy1;\r\n vertexBuffer[this._vertexIndex++] = length;\r\n vertexBuffer[this._vertexIndex++] = thickness;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n vertexBuffer[this._vertexIndex++] = stroke.r / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.g / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.b / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.a;\r\n vertexBuffer[this._vertexIndex++] = strokeThickness / width;\r\n // (1, 0) - 2\r\n vertexBuffer[this._vertexIndex++] = endTop.x;\r\n vertexBuffer[this._vertexIndex++] = endTop.y;\r\n vertexBuffer[this._vertexIndex++] = uvx1;\r\n vertexBuffer[this._vertexIndex++] = uvy0;\r\n vertexBuffer[this._vertexIndex++] = length;\r\n vertexBuffer[this._vertexIndex++] = thickness;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n vertexBuffer[this._vertexIndex++] = stroke.r / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.g / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.b / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.a;\r\n vertexBuffer[this._vertexIndex++] = strokeThickness / width;\r\n // (1, 1) - 3\r\n vertexBuffer[this._vertexIndex++] = endBottom.x;\r\n vertexBuffer[this._vertexIndex++] = endBottom.y;\r\n vertexBuffer[this._vertexIndex++] = uvx1;\r\n vertexBuffer[this._vertexIndex++] = uvy1;\r\n vertexBuffer[this._vertexIndex++] = length;\r\n vertexBuffer[this._vertexIndex++] = thickness;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n vertexBuffer[this._vertexIndex++] = stroke.r / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.g / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.b / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.a;\r\n vertexBuffer[this._vertexIndex++] = strokeThickness / width;\r\n }\r\n drawRectangle(pos, width, height, color, stroke = Color.Transparent, strokeThickness = 0) {\r\n if (this._isFull()) {\r\n this.flush();\r\n }\r\n this._rectangleCount++;\r\n // transform based on current context\r\n const transform = this._context.getTransform();\r\n const opacity = this._context.opacity;\r\n const snapToPixel = this._context.snapToPixel;\r\n const topLeft = transform.multiply(pos.add(vec(0, 0)));\r\n const topRight = transform.multiply(pos.add(vec(width, 0)));\r\n const bottomRight = transform.multiply(pos.add(vec(width, height)));\r\n const bottomLeft = transform.multiply(pos.add(vec(0, height)));\r\n if (snapToPixel) {\r\n topLeft.x = ~~(topLeft.x + pixelSnapEpsilon);\r\n topLeft.y = ~~(topLeft.y + pixelSnapEpsilon);\r\n topRight.x = ~~(topRight.x + pixelSnapEpsilon);\r\n topRight.y = ~~(topRight.y + pixelSnapEpsilon);\r\n bottomLeft.x = ~~(bottomLeft.x + pixelSnapEpsilon);\r\n bottomLeft.y = ~~(bottomLeft.y + pixelSnapEpsilon);\r\n bottomRight.x = ~~(bottomRight.x + pixelSnapEpsilon);\r\n bottomRight.y = ~~(bottomRight.y + pixelSnapEpsilon);\r\n }\r\n // TODO uv could be static vertex buffer\r\n const uvx0 = 0;\r\n const uvy0 = 0;\r\n const uvx1 = 1;\r\n const uvy1 = 1;\r\n // update data\r\n const vertexBuffer = this._layout.vertexBuffer.bufferData;\r\n // (0, 0) - 0\r\n vertexBuffer[this._vertexIndex++] = topLeft.x;\r\n vertexBuffer[this._vertexIndex++] = topLeft.y;\r\n vertexBuffer[this._vertexIndex++] = uvx0;\r\n vertexBuffer[this._vertexIndex++] = uvy0;\r\n vertexBuffer[this._vertexIndex++] = width;\r\n vertexBuffer[this._vertexIndex++] = height;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n vertexBuffer[this._vertexIndex++] = stroke.r / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.g / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.b / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.a;\r\n vertexBuffer[this._vertexIndex++] = strokeThickness;\r\n // (0, 1) - 1\r\n vertexBuffer[this._vertexIndex++] = bottomLeft.x;\r\n vertexBuffer[this._vertexIndex++] = bottomLeft.y;\r\n vertexBuffer[this._vertexIndex++] = uvx0;\r\n vertexBuffer[this._vertexIndex++] = uvy1;\r\n vertexBuffer[this._vertexIndex++] = width;\r\n vertexBuffer[this._vertexIndex++] = height;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n vertexBuffer[this._vertexIndex++] = stroke.r / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.g / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.b / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.a;\r\n vertexBuffer[this._vertexIndex++] = strokeThickness;\r\n // (1, 0) - 2\r\n vertexBuffer[this._vertexIndex++] = topRight.x;\r\n vertexBuffer[this._vertexIndex++] = topRight.y;\r\n vertexBuffer[this._vertexIndex++] = uvx1;\r\n vertexBuffer[this._vertexIndex++] = uvy0;\r\n vertexBuffer[this._vertexIndex++] = width;\r\n vertexBuffer[this._vertexIndex++] = height;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n vertexBuffer[this._vertexIndex++] = stroke.r / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.g / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.b / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.a;\r\n vertexBuffer[this._vertexIndex++] = strokeThickness;\r\n // (1, 1) - 3\r\n vertexBuffer[this._vertexIndex++] = bottomRight.x;\r\n vertexBuffer[this._vertexIndex++] = bottomRight.y;\r\n vertexBuffer[this._vertexIndex++] = uvx1;\r\n vertexBuffer[this._vertexIndex++] = uvy1;\r\n vertexBuffer[this._vertexIndex++] = width;\r\n vertexBuffer[this._vertexIndex++] = height;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n vertexBuffer[this._vertexIndex++] = stroke.r / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.g / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.b / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.a;\r\n vertexBuffer[this._vertexIndex++] = strokeThickness;\r\n }\r\n hasPendingDraws() {\r\n return this._rectangleCount !== 0;\r\n }\r\n flush() {\r\n // nothing to draw early exit\r\n if (this._rectangleCount === 0) {\r\n return;\r\n }\r\n const gl = this._gl;\r\n // Bind the shader\r\n this._shader.use();\r\n // Bind the memory layout and upload data\r\n this._layout.use(true);\r\n // Update ortho matrix uniform\r\n this._shader.setUniformMatrix('u_matrix', this._context.ortho);\r\n // Bind index buffer\r\n this._quads.bind();\r\n // Draw all the quads\r\n gl.drawElements(gl.TRIANGLES, this._rectangleCount * 6, this._quads.bufferGlType, 0);\r\n GraphicsDiagnostics.DrawnImagesCount += this._rectangleCount;\r\n GraphicsDiagnostics.DrawCallCount++;\r\n // Reset\r\n this._rectangleCount = 0;\r\n this._vertexIndex = 0;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/circle-renderer/circle-renderer.frag.glsl\n/* harmony default export */ const circle_renderer_frag = (\"#version 300 es\\r\\nprecision highp float;\\r\\n\\r\\n// UV coord\\r\\nin vec2 v_uv;\\r\\n\\r\\n// Color coord to blend with image\\r\\nin lowp vec4 v_color;\\r\\n\\r\\n// Stroke color if used\\r\\nin lowp vec4 v_strokeColor;\\r\\n\\r\\n// Stroke thickness if used\\r\\nin lowp float v_strokeThickness;\\r\\n\\r\\n// Opacity\\r\\nin float v_opacity;\\r\\n\\r\\nout vec4 fragColor;\\r\\n\\r\\nvoid main() {\\r\\n // make (0, 0) the center the uv \\r\\n vec2 uv = v_uv * 2.0 - 1.0;\\r\\n\\r\\n vec4 color = v_color;\\r\\n vec4 strokeColor = v_strokeColor;\\r\\n\\r\\n // circle border is at radius 1.0 \\r\\n // dist is > 0 when inside the circle \\r\\n float d = length(uv);\\r\\n float dist = 1.0 - length(uv);\\r\\n\\r\\n // Fade based on fwidth\\r\\n float fade = fwidth(dot(uv, uv));\\r\\n\\r\\n // if dist is greater than 0 step to 1;\\r\\n // when we cross this 0 threshold add a smooth fade\\r\\n float fill = smoothstep(-fade/2.0, fade/2.0, dist);\\r\\n\\r\\n // if dist is greater than the stroke thickness step to 1\\r\\n float stroke = 1.0 - smoothstep(v_strokeThickness, v_strokeThickness + fade, dist);\\r\\n\\r\\n strokeColor.a *= fill * stroke;\\r\\n strokeColor.rgb *= strokeColor.a;\\r\\n\\r\\n color.a *= fill * (1.0 - stroke);\\r\\n color.rgb *= color.a;\\r\\n\\r\\n vec4 finalColor = mix(vec4(0.0), (color + strokeColor), fill);\\r\\n finalColor.rgb = finalColor.rgb * v_opacity;\\r\\n finalColor.a = finalColor.a * v_opacity;\\r\\n fragColor = finalColor;\\r\\n}\");\n;// CONCATENATED MODULE: ./Graphics/Context/circle-renderer/circle-renderer.vert.glsl\n/* harmony default export */ const circle_renderer_vert = (\"#version 300 es\\r\\nin vec2 a_position;\\r\\n\\r\\n// UV coordinate\\r\\nin vec2 a_uv;\\r\\nout vec2 v_uv;\\r\\n\\r\\n// Opacity \\r\\nin float a_opacity;\\r\\nout float v_opacity;\\r\\n\\r\\nin vec4 a_color;\\r\\nout vec4 v_color;\\r\\n\\r\\nin vec4 a_strokeColor;\\r\\nout vec4 v_strokeColor;\\r\\n\\r\\nin float a_strokeThickness;\\r\\nout float v_strokeThickness;\\r\\n\\r\\nuniform mat4 u_matrix;\\r\\n\\r\\n\\r\\nvoid main() {\\r\\n // Set the vertex position using the ortho transform matrix\\r\\n gl_Position = u_matrix * vec4(a_position, 0.0, 1.0);\\r\\n\\r\\n // Pass through UV coords\\r\\n v_uv = a_uv;\\r\\n // Pass through the Opacity to the fragment shader\\r\\n v_opacity = a_opacity;\\r\\n // Pass through the color to the fragment shader\\r\\n v_color = a_color;\\r\\n // Pass through the stroke color to the fragment shader\\r\\n v_strokeColor = a_strokeColor;\\r\\n // Pass through the stroke thickenss to the fragment shader\\r\\n v_strokeThickness = a_strokeThickness;\\r\\n}\");\n;// CONCATENATED MODULE: ./Graphics/Context/circle-renderer/circle-renderer.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass CircleRenderer {\r\n constructor() {\r\n this.type = 'ex.circle';\r\n this.priority = 0;\r\n this._maxCircles = 10922; // max(uint16) / 6 verts\r\n this._circleCount = 0;\r\n this._vertexIndex = 0;\r\n }\r\n initialize(gl, context) {\r\n this._gl = gl;\r\n this._context = context;\r\n this._shader = new Shader({\r\n fragmentSource: circle_renderer_frag,\r\n vertexSource: circle_renderer_vert\r\n });\r\n this._shader.compile();\r\n // setup uniforms\r\n this._shader.use();\r\n this._shader.setUniformMatrix('u_matrix', context.ortho);\r\n this._buffer = new VertexBuffer({\r\n size: 14 * 4 * this._maxCircles,\r\n type: 'dynamic'\r\n });\r\n this._layout = new VertexLayout({\r\n shader: this._shader,\r\n vertexBuffer: this._buffer,\r\n attributes: [\r\n ['a_position', 2],\r\n ['a_uv', 2],\r\n ['a_opacity', 1],\r\n ['a_color', 4],\r\n ['a_strokeColor', 4],\r\n ['a_strokeThickness', 1]\r\n ]\r\n });\r\n this._quads = new QuadIndexBuffer(this._maxCircles, true);\r\n }\r\n _isFull() {\r\n if (this._circleCount >= this._maxCircles) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n draw(pos, radius, color, stroke = Color.Transparent, strokeThickness = 0) {\r\n if (this._isFull()) {\r\n this.flush();\r\n }\r\n this._circleCount++;\r\n // transform based on current context\r\n const transform = this._context.getTransform();\r\n const opacity = this._context.opacity;\r\n const snapToPixel = this._context.snapToPixel;\r\n const topLeft = transform.multiply(pos.add(vec(-radius, -radius)));\r\n const topRight = transform.multiply(pos.add(vec(radius, -radius)));\r\n const bottomRight = transform.multiply(pos.add(vec(radius, radius)));\r\n const bottomLeft = transform.multiply(pos.add(vec(-radius, radius)));\r\n if (snapToPixel) {\r\n topLeft.x = ~~(topLeft.x + pixelSnapEpsilon);\r\n topLeft.y = ~~(topLeft.y + pixelSnapEpsilon);\r\n topRight.x = ~~(topRight.x + pixelSnapEpsilon);\r\n topRight.y = ~~(topRight.y + pixelSnapEpsilon);\r\n bottomLeft.x = ~~(bottomLeft.x + pixelSnapEpsilon);\r\n bottomLeft.y = ~~(bottomLeft.y + pixelSnapEpsilon);\r\n bottomRight.x = ~~(bottomRight.x + pixelSnapEpsilon);\r\n bottomRight.y = ~~(bottomRight.y + pixelSnapEpsilon);\r\n }\r\n // TODO UV could be static vertex buffer\r\n const uvx0 = 0;\r\n const uvy0 = 0;\r\n const uvx1 = 1;\r\n const uvy1 = 1;\r\n // update data\r\n const vertexBuffer = this._layout.vertexBuffer.bufferData;\r\n // (0, 0) - 0\r\n vertexBuffer[this._vertexIndex++] = topLeft.x;\r\n vertexBuffer[this._vertexIndex++] = topLeft.y;\r\n vertexBuffer[this._vertexIndex++] = uvx0;\r\n vertexBuffer[this._vertexIndex++] = uvy0;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n vertexBuffer[this._vertexIndex++] = stroke.r / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.g / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.b / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.a;\r\n vertexBuffer[this._vertexIndex++] = strokeThickness / radius;\r\n // (0, 1) - 1\r\n vertexBuffer[this._vertexIndex++] = bottomLeft.x;\r\n vertexBuffer[this._vertexIndex++] = bottomLeft.y;\r\n vertexBuffer[this._vertexIndex++] = uvx0;\r\n vertexBuffer[this._vertexIndex++] = uvy1;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n vertexBuffer[this._vertexIndex++] = stroke.r / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.g / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.b / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.a;\r\n vertexBuffer[this._vertexIndex++] = strokeThickness / radius;\r\n // (1, 0) - 2\r\n vertexBuffer[this._vertexIndex++] = topRight.x;\r\n vertexBuffer[this._vertexIndex++] = topRight.y;\r\n vertexBuffer[this._vertexIndex++] = uvx1;\r\n vertexBuffer[this._vertexIndex++] = uvy0;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n vertexBuffer[this._vertexIndex++] = stroke.r / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.g / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.b / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.a;\r\n vertexBuffer[this._vertexIndex++] = strokeThickness / radius;\r\n // (1, 1) - 3\r\n vertexBuffer[this._vertexIndex++] = bottomRight.x;\r\n vertexBuffer[this._vertexIndex++] = bottomRight.y;\r\n vertexBuffer[this._vertexIndex++] = uvx1;\r\n vertexBuffer[this._vertexIndex++] = uvy1;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n vertexBuffer[this._vertexIndex++] = stroke.r / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.g / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.b / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.a;\r\n vertexBuffer[this._vertexIndex++] = strokeThickness / radius;\r\n }\r\n hasPendingDraws() {\r\n return this._circleCount !== 0;\r\n }\r\n flush() {\r\n // nothing to draw early exit\r\n if (this._circleCount === 0) {\r\n return;\r\n }\r\n const gl = this._gl;\r\n // Bind the shader\r\n this._shader.use();\r\n // Bind the memory layout and upload data\r\n this._layout.use(true);\r\n // Update ortho matrix uniform\r\n this._shader.setUniformMatrix('u_matrix', this._context.ortho);\r\n // Bind index buffer\r\n this._quads.bind();\r\n // Draw all the quads\r\n gl.drawElements(gl.TRIANGLES, this._circleCount * 6, this._quads.bufferGlType, 0);\r\n GraphicsDiagnostics.DrawnImagesCount += this._circleCount;\r\n GraphicsDiagnostics.DrawCallCount++;\r\n // Reset\r\n this._circleCount = 0;\r\n this._vertexIndex = 0;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Util/Pool.ts\n\r\nclass Pool {\r\n constructor(builder, recycler, maxObjects = 100) {\r\n this.builder = builder;\r\n this.recycler = recycler;\r\n this.maxObjects = maxObjects;\r\n this.totalAllocations = 0;\r\n this.index = 0;\r\n this.objects = [];\r\n this.disableWarnings = false;\r\n this._logger = Logger.getInstance();\r\n }\r\n preallocate() {\r\n for (let i = 0; i < this.maxObjects; i++) {\r\n this.objects[i] = this.builder();\r\n }\r\n }\r\n /**\r\n * Use many instances out of the in the context and return all to the pool.\r\n *\r\n * By returning values out of the context they will be un-hooked from the pool and are free to be passed to consumers\r\n * @param context\r\n */\r\n using(context) {\r\n const result = context(this);\r\n if (result) {\r\n return this.done(...result);\r\n }\r\n return this.done();\r\n }\r\n /**\r\n * Use a single instance out of th pool and immediately return it to the pool\r\n * @param context\r\n */\r\n borrow(context) {\r\n const object = this.get();\r\n context(object);\r\n this.index--;\r\n }\r\n /**\r\n * Retrieve a value from the pool, will allocate a new instance if necessary or recycle from the pool\r\n * @param args\r\n */\r\n get(...args) {\r\n if (this.index === this.maxObjects) {\r\n if (!this.disableWarnings) {\r\n this._logger.warn('Max pooled objects reached, possible memory leak? Doubling');\r\n }\r\n this.maxObjects = this.maxObjects * 2;\r\n }\r\n if (this.objects[this.index]) {\r\n // Pool has an available object already constructed\r\n return this.recycler(this.objects[this.index++], ...args);\r\n }\r\n else {\r\n // New allocation\r\n this.totalAllocations++;\r\n const object = (this.objects[this.index++] = this.builder(...args));\r\n return object;\r\n }\r\n }\r\n done(...objects) {\r\n // All objects in pool now considered \"free\"\r\n this.index = 0;\r\n for (const object of objects) {\r\n const poolIndex = this.objects.indexOf(object);\r\n // Build a new object to take the pool place\r\n this.objects[poolIndex] = this.builder(); // TODO problematic 0-arg only support\r\n this.totalAllocations++;\r\n }\r\n return objects;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/draw-call.ts\n\r\n\r\nclass DrawCall {\r\n constructor() {\r\n this.z = 0;\r\n this.priority = 0;\r\n this.transform = AffineMatrix.identity();\r\n this.state = {\r\n z: 0,\r\n opacity: 1,\r\n tint: Color.White\r\n };\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/ExcaliburGraphicsContextWebGL.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// renderers\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst pixelSnapEpsilon = 0.0001;\r\nclass ExcaliburGraphicsContextWebGLDebug {\r\n constructor(_webglCtx) {\r\n this._webglCtx = _webglCtx;\r\n this._debugText = new DebugText();\r\n }\r\n /**\r\n * Draw a debugging rectangle to the context\r\n * @param x\r\n * @param y\r\n * @param width\r\n * @param height\r\n */\r\n drawRect(x, y, width, height, rectOptions = { color: Color.Black }) {\r\n this.drawLine(vec(x, y), vec(x + width, y), { ...rectOptions });\r\n this.drawLine(vec(x + width, y), vec(x + width, y + height), { ...rectOptions });\r\n this.drawLine(vec(x + width, y + height), vec(x, y + height), { ...rectOptions });\r\n this.drawLine(vec(x, y + height), vec(x, y), { ...rectOptions });\r\n }\r\n /**\r\n * Draw a debugging line to the context\r\n * @param start\r\n * @param end\r\n * @param lineOptions\r\n */\r\n drawLine(start, end, lineOptions = { color: Color.Black }) {\r\n this._webglCtx.draw('ex.line', start, end, lineOptions.color);\r\n }\r\n /**\r\n * Draw a debugging point to the context\r\n * @param point\r\n * @param pointOptions\r\n */\r\n drawPoint(point, pointOptions = { color: Color.Black, size: 5 }) {\r\n this._webglCtx.draw('ex.point', point, pointOptions.color, pointOptions.size);\r\n }\r\n drawText(text, pos) {\r\n this._debugText.write(this._webglCtx, text, pos);\r\n }\r\n}\r\nclass ExcaliburGraphicsContextWebGL {\r\n constructor(options) {\r\n this._logger = Logger.getInstance();\r\n this._renderers = new Map();\r\n this._isDrawLifecycle = false;\r\n this.useDrawSorting = true;\r\n this._drawCallPool = new Pool(() => new DrawCall(), (instance) => {\r\n instance.priority = 0;\r\n instance.z = 0;\r\n instance.renderer = undefined;\r\n instance.args = undefined;\r\n return instance;\r\n }, 4000);\r\n this._drawCalls = [];\r\n // Postprocessing is a tuple with 2 render targets, these are flip-flopped during the postprocessing process\r\n this._postProcessTargets = [];\r\n this._postprocessors = [];\r\n this._transform = new TransformStack();\r\n this._state = new StateStack();\r\n this.snapToPixel = false;\r\n this.smoothing = false;\r\n this.backgroundColor = Color.ExcaliburBlue;\r\n this._alreadyWarnedDrawLifecycle = false;\r\n this.debug = new ExcaliburGraphicsContextWebGLDebug(this);\r\n const { canvasElement, enableTransparency, smoothing, snapToPixel, backgroundColor, useDrawSorting } = options;\r\n this.__gl = canvasElement.getContext('webgl2', {\r\n antialias: smoothing !== null && smoothing !== void 0 ? smoothing : this.smoothing,\r\n premultipliedAlpha: false,\r\n alpha: enableTransparency !== null && enableTransparency !== void 0 ? enableTransparency : true,\r\n depth: true,\r\n powerPreference: 'high-performance'\r\n // TODO Chromium fixed the bug where this didn't work now it breaks CI :(\r\n // failIfMajorPerformanceCaveat: true\r\n });\r\n if (!this.__gl) {\r\n throw Error('Failed to retrieve webgl context from browser');\r\n }\r\n ExcaliburWebGLContextAccessor.register(this.__gl);\r\n TextureLoader.register(this.__gl);\r\n this.snapToPixel = snapToPixel !== null && snapToPixel !== void 0 ? snapToPixel : this.snapToPixel;\r\n this.smoothing = smoothing !== null && smoothing !== void 0 ? smoothing : this.smoothing;\r\n this.backgroundColor = backgroundColor !== null && backgroundColor !== void 0 ? backgroundColor : this.backgroundColor;\r\n this.useDrawSorting = useDrawSorting !== null && useDrawSorting !== void 0 ? useDrawSorting : this.useDrawSorting;\r\n this._drawCallPool.disableWarnings = true;\r\n this._drawCallPool.preallocate();\r\n this._init();\r\n }\r\n get z() {\r\n return this._state.current.z;\r\n }\r\n set z(value) {\r\n this._state.current.z = value;\r\n }\r\n get opacity() {\r\n return this._state.current.opacity;\r\n }\r\n set opacity(value) {\r\n this._state.current.opacity = value;\r\n }\r\n get tint() {\r\n return this._state.current.tint;\r\n }\r\n set tint(color) {\r\n this._state.current.tint = color;\r\n }\r\n get width() {\r\n return this.__gl.canvas.width;\r\n }\r\n get height() {\r\n return this.__gl.canvas.height;\r\n }\r\n get ortho() {\r\n return this._ortho;\r\n }\r\n /**\r\n * Checks the underlying webgl implementation if the requested internal resolution is supported\r\n * @param dim\r\n */\r\n checkIfResolutionSupported(dim) {\r\n // Slight hack based on this thread https://groups.google.com/g/webgl-dev-list/c/AHONvz3oQTo\r\n let supported = true;\r\n if (dim.width > 4096 || dim.height > 4096) {\r\n supported = false;\r\n }\r\n return supported;\r\n }\r\n _init() {\r\n const gl = this.__gl;\r\n // Setup viewport and view matrix\r\n this._ortho = Matrix.ortho(0, gl.canvas.width, gl.canvas.height, 0, 400, -400);\r\n gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);\r\n // Clear background\r\n gl.clearColor(this.backgroundColor.r / 255, this.backgroundColor.g / 255, this.backgroundColor.b / 255, this.backgroundColor.a);\r\n gl.clear(gl.COLOR_BUFFER_BIT);\r\n // Enable alpha blending\r\n // https://www.realtimerendering.com/blog/gpus-prefer-premultiplication/\r\n gl.enable(gl.BLEND);\r\n gl.blendEquation(gl.FUNC_ADD);\r\n gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\r\n gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD);\r\n gl.blendFuncSeparate(gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\r\n // Setup builtin renderers\r\n this.register(new ImageRenderer());\r\n this.register(new RectangleRenderer());\r\n this.register(new CircleRenderer());\r\n this.register(new PointRenderer());\r\n this.register(new LineRenderer());\r\n this._screenRenderer = new ScreenPassPainter(gl);\r\n this._renderTarget = new RenderTarget({\r\n gl,\r\n width: gl.canvas.width,\r\n height: gl.canvas.height\r\n });\r\n this._postProcessTargets = [\r\n new RenderTarget({\r\n gl,\r\n width: gl.canvas.width,\r\n height: gl.canvas.height\r\n }),\r\n new RenderTarget({\r\n gl,\r\n width: gl.canvas.width,\r\n height: gl.canvas.height\r\n })\r\n ];\r\n }\r\n register(renderer) {\r\n this._renderers.set(renderer.type, renderer);\r\n renderer.initialize(this.__gl, this);\r\n }\r\n get(rendererName) {\r\n return this._renderers.get(rendererName);\r\n }\r\n _isCurrentRenderer(renderer) {\r\n if (!this._currentRenderer || this._currentRenderer === renderer) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n beginDrawLifecycle() {\r\n this._isDrawLifecycle = true;\r\n }\r\n endDrawLifecycle() {\r\n this._isDrawLifecycle = false;\r\n }\r\n draw(rendererName, ...args) {\r\n if (!this._isDrawLifecycle && !this._alreadyWarnedDrawLifecycle) {\r\n this._logger.warn(`Attempting to draw outside the the drawing lifecycle (preDraw/postDraw) is not supported and is a source of bugs/errors.\\n` +\r\n `If you want to do custom drawing, use Actor.graphics, or any onPreDraw or onPostDraw handler.`);\r\n this._alreadyWarnedDrawLifecycle = true;\r\n }\r\n const renderer = this._renderers.get(rendererName);\r\n if (renderer) {\r\n if (this.useDrawSorting) {\r\n const drawCall = this._drawCallPool.get();\r\n drawCall.z = this._state.current.z;\r\n drawCall.priority = renderer.priority;\r\n drawCall.renderer = rendererName;\r\n this.getTransform().clone(drawCall.transform);\r\n drawCall.state.z = this._state.current.z;\r\n drawCall.state.opacity = this._state.current.opacity;\r\n drawCall.state.tint = this._state.current.tint;\r\n drawCall.args = args;\r\n this._drawCalls.push(drawCall);\r\n }\r\n else {\r\n // Set the current renderer if not defined\r\n if (!this._currentRenderer) {\r\n this._currentRenderer = renderer;\r\n }\r\n if (!this._isCurrentRenderer(renderer)) {\r\n // switching graphics means we must flush the previous\r\n this._currentRenderer.flush();\r\n }\r\n // If we are still using the same renderer we can add to the current batch\r\n renderer.draw(...args);\r\n this._currentRenderer = renderer;\r\n }\r\n }\r\n else {\r\n throw Error(`No renderer with name ${rendererName} has been registered`);\r\n }\r\n }\r\n resetTransform() {\r\n this._transform.current = AffineMatrix.identity();\r\n }\r\n updateViewport(resolution) {\r\n const gl = this.__gl;\r\n this._ortho = this._ortho = Matrix.ortho(0, resolution.width, resolution.height, 0, 400, -400);\r\n this._renderTarget.setResolution(gl.canvas.width, gl.canvas.height);\r\n this._postProcessTargets[0].setResolution(gl.canvas.width, gl.canvas.height);\r\n this._postProcessTargets[1].setResolution(gl.canvas.width, gl.canvas.height);\r\n }\r\n drawImage(image, sx, sy, swidth, sheight, dx, dy, dwidth, dheight) {\r\n if (swidth === 0 || sheight === 0) {\r\n return; // zero dimension dest exit early\r\n }\r\n else if (dwidth === 0 || dheight === 0) {\r\n return; // zero dimension dest exit early\r\n }\r\n else if (image.width === 0 || image.height === 0) {\r\n return; // zero dimension source exit early\r\n }\r\n if (!image) {\r\n Logger.getInstance().warn('Cannot draw a null or undefined image');\r\n // tslint:disable-next-line: no-console\r\n if (console.trace) {\r\n // tslint:disable-next-line: no-console\r\n console.trace();\r\n }\r\n return;\r\n }\r\n this.draw('ex.image', image, sx, sy, swidth, sheight, dx, dy, dwidth, dheight);\r\n }\r\n drawLine(start, end, color, thickness = 1) {\r\n this.draw('ex.rectangle', start, end, color, thickness);\r\n }\r\n drawRectangle(pos, width, height, color, stroke, strokeThickness) {\r\n this.draw('ex.rectangle', pos, width, height, color, stroke, strokeThickness);\r\n }\r\n drawCircle(pos, radius, color, stroke, thickness) {\r\n this.draw('ex.circle', pos, radius, color, stroke, thickness);\r\n }\r\n save() {\r\n this._transform.save();\r\n this._state.save();\r\n }\r\n restore() {\r\n this._transform.restore();\r\n this._state.restore();\r\n }\r\n translate(x, y) {\r\n this._transform.translate(this.snapToPixel ? ~~(x + pixelSnapEpsilon) : x, this.snapToPixel ? ~~(y + pixelSnapEpsilon) : y);\r\n }\r\n rotate(angle) {\r\n this._transform.rotate(angle);\r\n }\r\n scale(x, y) {\r\n this._transform.scale(x, y);\r\n }\r\n transform(matrix) {\r\n this._transform.current = matrix;\r\n }\r\n getTransform() {\r\n return this._transform.current;\r\n }\r\n multiply(m) {\r\n this._transform.current.multiply(m, this._transform.current);\r\n }\r\n addPostProcessor(postprocessor) {\r\n this._postprocessors.push(postprocessor);\r\n postprocessor.initialize(this.__gl);\r\n }\r\n removePostProcessor(postprocessor) {\r\n const index = this._postprocessors.indexOf(postprocessor);\r\n if (index !== -1) {\r\n this._postprocessors.splice(index, 1);\r\n }\r\n }\r\n clearPostProcessors() {\r\n this._postprocessors.length = 0;\r\n }\r\n clear() {\r\n const gl = this.__gl;\r\n this._renderTarget.use();\r\n gl.clearColor(this.backgroundColor.r / 255, this.backgroundColor.g / 255, this.backgroundColor.b / 255, this.backgroundColor.a);\r\n // Clear the context with the newly set color. This is\r\n // the function call that actually does the drawing.\r\n gl.clear(gl.COLOR_BUFFER_BIT);\r\n }\r\n /**\r\n * Flushes all batched rendering to the screen\r\n */\r\n flush() {\r\n const gl = this.__gl;\r\n // render target captures all draws and redirects to the render target\r\n this._renderTarget.use();\r\n if (this.useDrawSorting) {\r\n // sort draw calls\r\n // Find the original order of the first instance of the draw call\r\n const originalSort = new Map();\r\n for (const [name] of this._renderers) {\r\n const firstIndex = this._drawCalls.findIndex(dc => dc.renderer === name);\r\n originalSort.set(name, firstIndex);\r\n }\r\n this._drawCalls.sort((a, b) => {\r\n const zIndex = a.z - b.z;\r\n const originalSortOrder = originalSort.get(a.renderer) - originalSort.get(b.renderer);\r\n const priority = a.priority - b.priority;\r\n if (zIndex === 0) { // sort by z first\r\n if (priority === 0) { // sort by priority\r\n return originalSortOrder; // use the original order to inform draw call packing to maximally preserve painter order\r\n }\r\n return priority;\r\n }\r\n return zIndex;\r\n });\r\n const oldTransform = this._transform.current;\r\n const oldState = this._state.current;\r\n if (this._drawCalls.length) {\r\n let currentRendererName = this._drawCalls[0].renderer;\r\n let currentRenderer = this._renderers.get(currentRendererName);\r\n for (let i = 0; i < this._drawCalls.length; i++) {\r\n // hydrate the state for renderers\r\n this._transform.current = this._drawCalls[i].transform;\r\n this._state.current = this._drawCalls[i].state;\r\n if (this._drawCalls[i].renderer !== currentRendererName) {\r\n // switching graphics renderer means we must flush the previous\r\n currentRenderer.flush();\r\n currentRendererName = this._drawCalls[i].renderer;\r\n currentRenderer = this._renderers.get(currentRendererName);\r\n }\r\n // If we are still using the same renderer we can add to the current batch\r\n currentRenderer.draw(...this._drawCalls[i].args);\r\n }\r\n if (currentRenderer.hasPendingDraws()) {\r\n currentRenderer.flush();\r\n }\r\n }\r\n // reset state\r\n this._transform.current = oldTransform;\r\n this._state.current = oldState;\r\n // reclaim draw calls\r\n this._drawCallPool.done();\r\n this._drawCalls.length = 0;\r\n }\r\n else {\r\n // This is the final flush at the moment to draw any leftover pending draw\r\n for (const renderer of this._renderers.values()) {\r\n if (renderer.hasPendingDraws()) {\r\n renderer.flush();\r\n }\r\n }\r\n }\r\n this._renderTarget.disable();\r\n // post process step\r\n const source = this._renderTarget.toRenderSource();\r\n source.use();\r\n // flip flop render targets\r\n for (let i = 0; i < this._postprocessors.length; i++) {\r\n this._postProcessTargets[i % 2].use();\r\n this._screenRenderer.renderWithPostProcessor(this._postprocessors[i]);\r\n this._postProcessTargets[i % 2].toRenderSource().use();\r\n }\r\n // passing null switches rendering back to the canvas\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\r\n this._screenRenderer.renderToScreen();\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/ExcaliburGraphicsContext2DCanvas.ts\n\r\n\r\n\r\n\r\nconst ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon = 0.0001;\r\nclass ExcaliburGraphicsContext2DCanvasDebug {\r\n constructor(_ex) {\r\n this._ex = _ex;\r\n this._debugText = new DebugText();\r\n }\r\n /**\r\n * Draw a debug rectangle to the context\r\n * @param x\r\n * @param y\r\n * @param width\r\n * @param height\r\n */\r\n drawRect(x, y, width, height) {\r\n this._ex.__ctx.save();\r\n this._ex.__ctx.strokeStyle = 'red';\r\n this._ex.__ctx.strokeRect(this._ex.snapToPixel ? ~~(x + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : x, this._ex.snapToPixel ? ~~(y + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : y, this._ex.snapToPixel ? ~~(width + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : width, this._ex.snapToPixel ? ~~(height + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : height);\r\n this._ex.__ctx.restore();\r\n }\r\n drawLine(start, end, lineOptions = { color: Color.Black }) {\r\n this._ex.__ctx.save();\r\n this._ex.__ctx.beginPath();\r\n this._ex.__ctx.strokeStyle = lineOptions.color.toString();\r\n this._ex.__ctx.moveTo(this._ex.snapToPixel ? ~~(start.x + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : start.x, this._ex.snapToPixel ? ~~(start.y + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : start.y);\r\n this._ex.__ctx.lineTo(this._ex.snapToPixel ? ~~(end.x + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : end.x, this._ex.snapToPixel ? ~~(end.y + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : end.y);\r\n this._ex.__ctx.lineWidth = 2;\r\n this._ex.__ctx.stroke();\r\n this._ex.__ctx.closePath();\r\n this._ex.__ctx.restore();\r\n }\r\n drawPoint(point, pointOptions = { color: Color.Black, size: 5 }) {\r\n this._ex.__ctx.save();\r\n this._ex.__ctx.beginPath();\r\n this._ex.__ctx.fillStyle = pointOptions.color.toString();\r\n this._ex.__ctx.arc(this._ex.snapToPixel ? ~~(point.x + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : point.x, this._ex.snapToPixel ? ~~(point.y + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : point.y, pointOptions.size, 0, Math.PI * 2);\r\n this._ex.__ctx.fill();\r\n this._ex.__ctx.closePath();\r\n this._ex.__ctx.restore();\r\n }\r\n drawText(text, pos) {\r\n this._debugText.write(this._ex, text, pos);\r\n }\r\n}\r\nclass ExcaliburGraphicsContext2DCanvas {\r\n constructor(options) {\r\n /**\r\n * Unused in Canvas implementation\r\n */\r\n this.useDrawSorting = false;\r\n /**\r\n * Unused in Canvas implementation\r\n */\r\n this.z = 0;\r\n this.backgroundColor = Color.ExcaliburBlue;\r\n this._state = new StateStack();\r\n this.snapToPixel = false;\r\n this.debug = new ExcaliburGraphicsContext2DCanvasDebug(this);\r\n const { canvasElement, enableTransparency, snapToPixel, smoothing, backgroundColor } = options;\r\n this.__ctx = canvasElement.getContext('2d', {\r\n alpha: enableTransparency !== null && enableTransparency !== void 0 ? enableTransparency : true\r\n });\r\n this.backgroundColor = backgroundColor !== null && backgroundColor !== void 0 ? backgroundColor : this.backgroundColor;\r\n this.snapToPixel = snapToPixel !== null && snapToPixel !== void 0 ? snapToPixel : this.snapToPixel;\r\n this.smoothing = smoothing !== null && smoothing !== void 0 ? smoothing : this.smoothing;\r\n }\r\n get width() {\r\n return this.__ctx.canvas.width;\r\n }\r\n get height() {\r\n return this.__ctx.canvas.height;\r\n }\r\n get opacity() {\r\n return this._state.current.opacity;\r\n }\r\n set opacity(value) {\r\n this._state.current.opacity = value;\r\n }\r\n get tint() {\r\n return this._state.current.tint;\r\n }\r\n set tint(color) {\r\n this._state.current.tint = color;\r\n }\r\n get smoothing() {\r\n return this.__ctx.imageSmoothingEnabled;\r\n }\r\n set smoothing(value) {\r\n this.__ctx.imageSmoothingEnabled = value;\r\n }\r\n resetTransform() {\r\n this.__ctx.resetTransform();\r\n }\r\n updateViewport(_resolution) {\r\n // pass\r\n }\r\n drawImage(image, sx, sy, swidth, sheight, dx, dy, dwidth, dheight) {\r\n if (swidth === 0 || sheight === 0) {\r\n return; // zero dimension dest exit early\r\n }\r\n else if (dwidth === 0 || dheight === 0) {\r\n return; // zero dimension dest exit early\r\n }\r\n else if (image.width === 0 || image.height === 0) {\r\n return; // zero dimension source exit early\r\n }\r\n this.__ctx.globalAlpha = this.opacity;\r\n const args = [image, sx, sy, swidth, sheight, dx, dy, dwidth, dheight]\r\n .filter((a) => a !== undefined)\r\n .map((a) => (typeof a === 'number' && this.snapToPixel ? ~~a : a));\r\n this.__ctx.drawImage.apply(this.__ctx, args);\r\n GraphicsDiagnostics.DrawCallCount++;\r\n GraphicsDiagnostics.DrawnImagesCount = 1;\r\n }\r\n drawLine(start, end, color, thickness = 1) {\r\n this.__ctx.save();\r\n this.__ctx.beginPath();\r\n this.__ctx.strokeStyle = color.toString();\r\n this.__ctx.moveTo(this.snapToPixel ? ~~(start.x + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : start.x, this.snapToPixel ? ~~(start.y + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : start.y);\r\n this.__ctx.lineTo(this.snapToPixel ? ~~(end.x + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : end.x, this.snapToPixel ? ~~(end.y + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : end.y);\r\n this.__ctx.lineWidth = thickness;\r\n this.__ctx.stroke();\r\n this.__ctx.closePath();\r\n this.__ctx.restore();\r\n }\r\n drawRectangle(pos, width, height, color) {\r\n this.__ctx.save();\r\n this.__ctx.fillStyle = color.toString();\r\n this.__ctx.fillRect(this.snapToPixel ? ~~(pos.x + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : pos.x, this.snapToPixel ? ~~(pos.y + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : pos.y, this.snapToPixel ? ~~(width + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : width, this.snapToPixel ? ~~(height + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : height);\r\n this.__ctx.restore();\r\n }\r\n drawCircle(pos, radius, color, stroke, thickness) {\r\n this.__ctx.save();\r\n this.__ctx.beginPath();\r\n if (stroke) {\r\n this.__ctx.strokeStyle = stroke.toString();\r\n }\r\n if (thickness) {\r\n this.__ctx.lineWidth = thickness;\r\n }\r\n this.__ctx.fillStyle = color.toString();\r\n this.__ctx.arc(this.snapToPixel ? ~~(pos.x + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : pos.x, this.snapToPixel ? ~~(pos.y + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : pos.y, radius, 0, Math.PI * 2);\r\n this.__ctx.fill();\r\n if (stroke) {\r\n this.__ctx.stroke();\r\n }\r\n this.__ctx.closePath();\r\n this.__ctx.restore();\r\n }\r\n /**\r\n * Save the current state of the canvas to the stack (transforms and opacity)\r\n */\r\n save() {\r\n this.__ctx.save();\r\n }\r\n /**\r\n * Restore the state of the canvas from the stack\r\n */\r\n restore() {\r\n this.__ctx.restore();\r\n }\r\n /**\r\n * Translate the origin of the context by an x and y\r\n * @param x\r\n * @param y\r\n */\r\n translate(x, y) {\r\n this.__ctx.translate(this.snapToPixel ? ~~(x + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : x, this.snapToPixel ? ~~(y + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : y);\r\n }\r\n /**\r\n * Rotate the context about the current origin\r\n */\r\n rotate(angle) {\r\n this.__ctx.rotate(angle);\r\n }\r\n /**\r\n * Scale the context by an x and y factor\r\n * @param x\r\n * @param y\r\n */\r\n scale(x, y) {\r\n this.__ctx.scale(x, y);\r\n }\r\n getTransform() {\r\n throw new Error('Not implemented');\r\n }\r\n multiply(_m) {\r\n this.__ctx.setTransform(this.__ctx.getTransform().multiply(_m.toDOMMatrix()));\r\n }\r\n addPostProcessor(_postprocessor) {\r\n // pass\r\n }\r\n removePostProcessor(_postprocessor) {\r\n // pass\r\n }\r\n clearPostProcessors() {\r\n // pass\r\n }\r\n beginDrawLifecycle() {\r\n // pass\r\n }\r\n endDrawLifecycle() {\r\n // pass\r\n }\r\n clear() {\r\n // Clear frame\r\n this.__ctx.clearRect(0, 0, this.width, this.height);\r\n this.__ctx.fillStyle = this.backgroundColor.toString();\r\n this.__ctx.fillRect(0, 0, this.width, this.height);\r\n GraphicsDiagnostics.clear();\r\n }\r\n /**\r\n * Flushes the batched draw calls to the screen\r\n */\r\n flush() {\r\n // pass\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Screen.ts\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Enum representing the different display modes available to Excalibur.\r\n */\r\nvar DisplayMode;\r\n(function (DisplayMode) {\r\n /**\r\n * Default, use a specified resolution for the game. Like 800x600 pixels for example.\r\n */\r\n DisplayMode[\"Fixed\"] = \"Fixed\";\r\n /**\r\n * Fit the aspect ratio given by the game resolution within the container at all times will fill any gaps with canvas.\r\n * The displayed area outside the aspect ratio is not guaranteed to be on the screen, only the [[Screen.contentArea]]\r\n * is guaranteed to be on screen.\r\n */\r\n DisplayMode[\"FitContainerAndFill\"] = \"FitContainerAndFill\";\r\n /**\r\n * Fit the aspect ratio given by the game resolution the screen at all times will fill the screen.\r\n * This displayed area outside the aspect ratio is not guaranteed to be on the screen, only the [[Screen.contentArea]]\r\n * is guaranteed to be on screen.\r\n */\r\n DisplayMode[\"FitScreenAndFill\"] = \"FitScreenAndFill\";\r\n /**\r\n * Fit the viewport to the parent element maintaining aspect ratio given by the game resolution, but zooms in to avoid the black bars\r\n * (letterbox) that would otherwise be present in [[FitContainer]].\r\n *\r\n * **warning** This will clip some drawable area from the user because of the zoom,\r\n * use [[Screen.contentArea]] to know the safe to draw area.\r\n */\r\n DisplayMode[\"FitContainerAndZoom\"] = \"FitContainerAndZoom\";\r\n /**\r\n * Fit the viewport to the device screen maintaining aspect ratio given by the game resolution, but zooms in to avoid the black bars\r\n * (letterbox) that would otherwise be present in [[FitScreen]].\r\n *\r\n * **warning** This will clip some drawable area from the user because of the zoom,\r\n * use [[Screen.contentArea]] to know the safe to draw area.\r\n */\r\n DisplayMode[\"FitScreenAndZoom\"] = \"FitScreenAndZoom\";\r\n /**\r\n * Fit to screen using as much space as possible while maintaining aspect ratio and resolution.\r\n * This is not the same as [[Screen.goFullScreen]] but behaves in a similar way maintaining aspect ratio.\r\n *\r\n * You may want to center your game here is an example\r\n * ```html\r\n * \r\n * \r\n *
\r\n * \r\n *
\r\n * \r\n * ```\r\n *\r\n * ```css\r\n * // css\r\n * main {\r\n * display: flex;\r\n * align-items: center;\r\n * justify-content: center;\r\n * height: 100%;\r\n * width: 100%;\r\n * }\r\n * ```\r\n */\r\n DisplayMode[\"FitScreen\"] = \"FitScreen\";\r\n /**\r\n * Fill the entire screen's css width/height for the game resolution dynamically. This means the resolution of the game will\r\n * change dynamically as the window is resized. This is not the same as [[Screen.goFullScreen]]\r\n */\r\n DisplayMode[\"FillScreen\"] = \"FillScreen\";\r\n /**\r\n * Fit to parent element width/height using as much space as possible while maintaining aspect ratio and resolution.\r\n */\r\n DisplayMode[\"FitContainer\"] = \"FitContainer\";\r\n /**\r\n * Use the parent DOM container's css width/height for the game resolution dynamically\r\n */\r\n DisplayMode[\"FillContainer\"] = \"FillContainer\";\r\n})(DisplayMode || (DisplayMode = {}));\r\n/**\r\n * Convenience class for quick resolutions\r\n * Mostly sourced from https://emulation.gametechwiki.com/index.php/Resolution\r\n */\r\nclass Resolution {\r\n /* istanbul ignore next */\r\n static get SVGA() {\r\n return { width: 800, height: 600 };\r\n }\r\n /* istanbul ignore next */\r\n static get Standard() {\r\n return { width: 1920, height: 1080 };\r\n }\r\n /* istanbul ignore next */\r\n static get Atari2600() {\r\n return { width: 160, height: 192 };\r\n }\r\n /* istanbul ignore next */\r\n static get GameBoy() {\r\n return { width: 160, height: 144 };\r\n }\r\n /* istanbul ignore next */\r\n static get GameBoyAdvance() {\r\n return { width: 240, height: 160 };\r\n }\r\n /* istanbul ignore next */\r\n static get NintendoDS() {\r\n return { width: 256, height: 192 };\r\n }\r\n /* istanbul ignore next */\r\n static get NES() {\r\n return { width: 256, height: 224 };\r\n }\r\n /* istanbul ignore next */\r\n static get SNES() {\r\n return { width: 256, height: 244 };\r\n }\r\n}\r\n/**\r\n * The Screen handles all aspects of interacting with the screen for Excalibur.\r\n */\r\nclass Screen {\r\n constructor(options) {\r\n var _a, _b, _c;\r\n this._antialiasing = true;\r\n this._resolutionStack = [];\r\n this._viewportStack = [];\r\n this._pixelRatioOverride = null;\r\n this._isFullScreen = false;\r\n this._isDisposed = false;\r\n this._logger = Logger.getInstance();\r\n this._fullscreenChangeHandler = () => {\r\n this._isFullScreen = !this._isFullScreen;\r\n this._logger.debug('Fullscreen Change', this._isFullScreen);\r\n };\r\n this._pixelRatioChangeHandler = () => {\r\n this._logger.debug('Pixel Ratio Change', window.devicePixelRatio);\r\n this._listenForPixelRatio();\r\n this._devicePixelRatio = this._calculateDevicePixelRatio();\r\n this.applyResolutionAndViewport();\r\n };\r\n this._resizeHandler = () => {\r\n const parent = this.parent;\r\n this._logger.debug('View port resized');\r\n this._setResolutionAndViewportByDisplayMode(parent);\r\n this.applyResolutionAndViewport();\r\n };\r\n // Asking the window.devicePixelRatio is expensive we do it once\r\n this._devicePixelRatio = this._calculateDevicePixelRatio();\r\n this._alreadyWarned = false;\r\n this._contentArea = new BoundingBox();\r\n this.viewport = options.viewport;\r\n this.resolution = (_a = options.resolution) !== null && _a !== void 0 ? _a : { ...this.viewport };\r\n this._contentResolution = this.resolution;\r\n this._displayMode = (_b = options.displayMode) !== null && _b !== void 0 ? _b : DisplayMode.Fixed;\r\n this._canvas = options.canvas;\r\n this.graphicsContext = options.context;\r\n this._antialiasing = (_c = options.antialiasing) !== null && _c !== void 0 ? _c : this._antialiasing;\r\n this._browser = options.browser;\r\n this._pixelRatioOverride = options.pixelRatio;\r\n this._applyDisplayMode();\r\n this._listenForPixelRatio();\r\n this._canvas.addEventListener('fullscreenchange', this._fullscreenChangeHandler);\r\n this.applyResolutionAndViewport();\r\n }\r\n _listenForPixelRatio() {\r\n if (this._mediaQueryList && !this._mediaQueryList.addEventListener) {\r\n // Safari <=13.1 workaround, remove any existing handlers\r\n this._mediaQueryList.removeListener(this._pixelRatioChangeHandler);\r\n }\r\n this._mediaQueryList = this._browser.window.nativeComponent.matchMedia(`(resolution: ${window.devicePixelRatio}dppx)`);\r\n // Safari <=13.1 workaround\r\n if (this._mediaQueryList.addEventListener) {\r\n this._mediaQueryList.addEventListener('change', this._pixelRatioChangeHandler, { once: true });\r\n }\r\n else {\r\n this._mediaQueryList.addListener(this._pixelRatioChangeHandler);\r\n }\r\n }\r\n dispose() {\r\n if (!this._isDisposed) {\r\n // Clean up handlers\r\n this._isDisposed = true;\r\n this._browser.window.off('resize', this._resizeHandler);\r\n if (this._resizeObserver) {\r\n this._resizeObserver.disconnect();\r\n }\r\n this.parent.removeEventListener('resize', this._resizeHandler);\r\n // Safari <=13.1 workaround\r\n if (this._mediaQueryList.removeEventListener) {\r\n this._mediaQueryList.removeEventListener('change', this._pixelRatioChangeHandler);\r\n }\r\n else {\r\n this._mediaQueryList.removeListener(this._pixelRatioChangeHandler);\r\n }\r\n this._canvas.removeEventListener('fullscreenchange', this._fullscreenChangeHandler);\r\n }\r\n }\r\n _calculateDevicePixelRatio() {\r\n if (window.devicePixelRatio < 1) {\r\n return 1;\r\n }\r\n const devicePixelRatio = window.devicePixelRatio || 1;\r\n return devicePixelRatio;\r\n }\r\n get pixelRatio() {\r\n if (this._pixelRatioOverride) {\r\n return this._pixelRatioOverride;\r\n }\r\n return this._devicePixelRatio;\r\n }\r\n get isHiDpi() {\r\n return this.pixelRatio !== 1;\r\n }\r\n get displayMode() {\r\n return this._displayMode;\r\n }\r\n get canvas() {\r\n return this._canvas;\r\n }\r\n get parent() {\r\n switch (this.displayMode) {\r\n case DisplayMode.FillContainer:\r\n case DisplayMode.FitContainer:\r\n case DisplayMode.FitContainerAndFill:\r\n case DisplayMode.FitContainerAndZoom:\r\n return this.canvas.parentElement || document.body;\r\n default:\r\n return window;\r\n }\r\n }\r\n get resolution() {\r\n return this._resolution;\r\n }\r\n set resolution(resolution) {\r\n this._resolution = resolution;\r\n }\r\n get viewport() {\r\n if (this._viewport) {\r\n return this._viewport;\r\n }\r\n return this._resolution;\r\n }\r\n set viewport(viewport) {\r\n this._viewport = viewport;\r\n }\r\n get aspectRatio() {\r\n return this._resolution.width / this._resolution.height;\r\n }\r\n get scaledWidth() {\r\n return this._resolution.width * this.pixelRatio;\r\n }\r\n get scaledHeight() {\r\n return this._resolution.height * this.pixelRatio;\r\n }\r\n setCurrentCamera(camera) {\r\n this._camera = camera;\r\n }\r\n pushResolutionAndViewport() {\r\n this._resolutionStack.push(this.resolution);\r\n this._viewportStack.push(this.viewport);\r\n this.resolution = { ...this.resolution };\r\n this.viewport = { ...this.viewport };\r\n }\r\n peekViewport() {\r\n return this._viewportStack[this._viewportStack.length - 1];\r\n }\r\n peekResolution() {\r\n return this._resolutionStack[this._resolutionStack.length - 1];\r\n }\r\n popResolutionAndViewport() {\r\n this.resolution = this._resolutionStack.pop();\r\n this.viewport = this._viewportStack.pop();\r\n }\r\n applyResolutionAndViewport() {\r\n this._canvas.width = this.scaledWidth;\r\n this._canvas.height = this.scaledHeight;\r\n if (this.graphicsContext instanceof ExcaliburGraphicsContextWebGL) {\r\n const supported = this.graphicsContext.checkIfResolutionSupported({\r\n width: this.scaledWidth,\r\n height: this.scaledHeight\r\n });\r\n if (!supported && !this._alreadyWarned) {\r\n this._alreadyWarned = true; // warn once\r\n this._logger.warn(`The currently configured resolution (${this.resolution.width}x${this.resolution.height}) and pixel ratio (${this.pixelRatio})` +\r\n ' are too large for the platform WebGL implementation, this may work but cause WebGL rendering to behave oddly.' +\r\n ' Try reducing the resolution or disabling Hi DPI scaling to avoid this' +\r\n ' (read more here https://excaliburjs.com/docs/screens#understanding-viewport--resolution).');\r\n }\r\n }\r\n if (this._antialiasing) {\r\n this._canvas.style.imageRendering = 'auto';\r\n }\r\n else {\r\n this._canvas.style.imageRendering = 'pixelated';\r\n // Fall back to 'crisp-edges' if 'pixelated' is not supported\r\n // Currently for firefox https://developer.mozilla.org/en-US/docs/Web/CSS/image-rendering\r\n if (this._canvas.style.imageRendering === '') {\r\n this._canvas.style.imageRendering = 'crisp-edges';\r\n }\r\n }\r\n this._canvas.style.width = this.viewport.width + 'px';\r\n this._canvas.style.height = this.viewport.height + 'px';\r\n // After messing with the canvas width/height the graphics context is invalidated and needs to have some properties reset\r\n this.graphicsContext.updateViewport(this.resolution);\r\n this.graphicsContext.resetTransform();\r\n this.graphicsContext.smoothing = this._antialiasing;\r\n if (this.graphicsContext instanceof ExcaliburGraphicsContext2DCanvas) {\r\n this.graphicsContext.scale(this.pixelRatio, this.pixelRatio);\r\n }\r\n }\r\n get antialiasing() {\r\n return this._antialiasing;\r\n }\r\n set antialiasing(isSmooth) {\r\n this._antialiasing = isSmooth;\r\n this.graphicsContext.smoothing = this._antialiasing;\r\n }\r\n /**\r\n * Returns true if excalibur is fullscreen using the browser fullscreen api\r\n */\r\n get isFullScreen() {\r\n return this._isFullScreen;\r\n }\r\n /**\r\n * Requests to go fullscreen using the browser fullscreen api, requires user interaction to be successful.\r\n * For example, wire this to a user click handler.\r\n *\r\n * Optionally specify a target element id to go fullscreen, by default the game canvas is used\r\n * @param elementId\r\n */\r\n goFullScreen(elementId) {\r\n if (elementId) {\r\n const maybeElement = document.getElementById(elementId);\r\n if (maybeElement) {\r\n return maybeElement.requestFullscreen();\r\n }\r\n }\r\n return this._canvas.requestFullscreen();\r\n }\r\n /**\r\n * Requests to exit fullscreen using the browser fullscreen api\r\n */\r\n exitFullScreen() {\r\n return document.exitFullscreen();\r\n }\r\n /**\r\n * Takes a coordinate in normal html page space, for example from a pointer move event, and translates it to\r\n * Excalibur screen space.\r\n *\r\n * Excalibur screen space starts at the top left (0, 0) corner of the viewport, and extends to the\r\n * bottom right corner (resolutionX, resolutionY)\r\n * @param point\r\n */\r\n pageToScreenCoordinates(point) {\r\n let newX = point.x;\r\n let newY = point.y;\r\n if (!this._isFullScreen) {\r\n newX -= getPosition(this._canvas).x;\r\n newY -= getPosition(this._canvas).y;\r\n }\r\n // if fullscreen api on it centers with black bars\r\n // we need to adjust the screen to world coordinates in this case\r\n if (this._isFullScreen) {\r\n if (window.innerWidth / this.aspectRatio < window.innerHeight) {\r\n const screenHeight = window.innerWidth / this.aspectRatio;\r\n const screenMarginY = (window.innerHeight - screenHeight) / 2;\r\n newY = ((newY - screenMarginY) / screenHeight) * this.viewport.height;\r\n newX = (newX / window.innerWidth) * this.viewport.width;\r\n }\r\n else {\r\n const screenWidth = window.innerHeight * this.aspectRatio;\r\n const screenMarginX = (window.innerWidth - screenWidth) / 2;\r\n newX = ((newX - screenMarginX) / screenWidth) * this.viewport.width;\r\n newY = (newY / window.innerHeight) * this.viewport.height;\r\n }\r\n }\r\n newX = (newX / this.viewport.width) * this.resolution.width;\r\n newY = (newY / this.viewport.height) * this.resolution.height;\r\n return new Vector(newX, newY);\r\n }\r\n /**\r\n * Takes a coordinate in Excalibur screen space, and translates it to normal html page space. For example,\r\n * this is where html elements might live if you want to position them relative to Excalibur.\r\n *\r\n * Excalibur screen space starts at the top left (0, 0) corner of the viewport, and extends to the\r\n * bottom right corner (resolutionX, resolutionY)\r\n * @param point\r\n */\r\n screenToPageCoordinates(point) {\r\n let newX = point.x;\r\n let newY = point.y;\r\n newX = (newX / this.resolution.width) * this.viewport.width;\r\n newY = (newY / this.resolution.height) * this.viewport.height;\r\n if (this._isFullScreen) {\r\n if (window.innerWidth / this.aspectRatio < window.innerHeight) {\r\n const screenHeight = window.innerWidth / this.aspectRatio;\r\n const screenMarginY = (window.innerHeight - screenHeight) / 2;\r\n newY = (newY / this.viewport.height) * screenHeight + screenMarginY;\r\n newX = (newX / this.viewport.width) * window.innerWidth;\r\n }\r\n else {\r\n const screenWidth = window.innerHeight * this.aspectRatio;\r\n const screenMarginX = (window.innerWidth - screenWidth) / 2;\r\n newX = (newX / this.viewport.width) * screenWidth + screenMarginX;\r\n newY = (newY / this.viewport.height) * window.innerHeight;\r\n }\r\n }\r\n if (!this._isFullScreen) {\r\n newX += getPosition(this._canvas).x;\r\n newY += getPosition(this._canvas).y;\r\n }\r\n return new Vector(newX, newY);\r\n }\r\n /**\r\n * Takes a coordinate in Excalibur screen space, and translates it to Excalibur world space.\r\n *\r\n * World space is where [[Entity|entities]] in Excalibur live by default [[CoordPlane.World]]\r\n * and extends infinitely out relative from the [[Camera]].\r\n * @param point Screen coordinate to convert\r\n */\r\n screenToWorldCoordinates(point) {\r\n // the only difference between screen & world is the camera transform\r\n if (this._camera) {\r\n return this._camera.inverse.multiply(point);\r\n }\r\n return point.sub(vec(this.resolution.width / 2, this.resolution.height / 2));\r\n }\r\n /**\r\n * Takes a coordinate in Excalibur world space, and translates it to Excalibur screen space.\r\n *\r\n * Screen space is where [[ScreenElement|screen elements]] and [[Entity|entities]] with [[CoordPlane.Screen]] live.\r\n * @param point World coordinate to convert\r\n */\r\n worldToScreenCoordinates(point) {\r\n if (this._camera) {\r\n return this._camera.transform.multiply(point);\r\n }\r\n return point.add(vec(this.resolution.width / 2, this.resolution.height / 2));\r\n }\r\n pageToWorldCoordinates(point) {\r\n const screen = this.pageToScreenCoordinates(point);\r\n return this.screenToWorldCoordinates(screen);\r\n }\r\n worldToPageCoordinates(point) {\r\n const screen = this.worldToScreenCoordinates(point);\r\n return this.screenToPageCoordinates(screen);\r\n }\r\n /**\r\n * Returns a BoundingBox of the top left corner of the screen\r\n * and the bottom right corner of the screen.\r\n *\r\n * World bounds are in world coordinates, useful for culling objects offscreen\r\n */\r\n getWorldBounds() {\r\n const topLeft = this.screenToWorldCoordinates(Vector.Zero);\r\n const right = topLeft.x + this.drawWidth;\r\n const bottom = topLeft.y + this.drawHeight;\r\n return new BoundingBox(topLeft.x, topLeft.y, right, bottom);\r\n }\r\n /**\r\n * The width of the game canvas in pixels (physical width component of the\r\n * resolution of the canvas element)\r\n */\r\n get canvasWidth() {\r\n return this.canvas.width;\r\n }\r\n /**\r\n * Returns half width of the game canvas in pixels (half physical width component)\r\n */\r\n get halfCanvasWidth() {\r\n return this.canvas.width / 2;\r\n }\r\n /**\r\n * The height of the game canvas in pixels, (physical height component of\r\n * the resolution of the canvas element)\r\n */\r\n get canvasHeight() {\r\n return this.canvas.height;\r\n }\r\n /**\r\n * Returns half height of the game canvas in pixels (half physical height component)\r\n */\r\n get halfCanvasHeight() {\r\n return this.canvas.height / 2;\r\n }\r\n /**\r\n * Returns the width of the engine's visible drawing surface in pixels including zoom and device pixel ratio.\r\n */\r\n get drawWidth() {\r\n if (this._camera) {\r\n return this.resolution.width / this._camera.zoom;\r\n }\r\n return this.resolution.width;\r\n }\r\n /**\r\n * Returns half the width of the engine's visible drawing surface in pixels including zoom and device pixel ratio.\r\n */\r\n get halfDrawWidth() {\r\n return this.drawWidth / 2;\r\n }\r\n /**\r\n * Returns the height of the engine's visible drawing surface in pixels including zoom and device pixel ratio.\r\n */\r\n get drawHeight() {\r\n if (this._camera) {\r\n return this.resolution.height / this._camera.zoom;\r\n }\r\n return this.resolution.height;\r\n }\r\n /**\r\n * Returns half the height of the engine's visible drawing surface in pixels including zoom and device pixel ratio.\r\n */\r\n get halfDrawHeight() {\r\n return this.drawHeight / 2;\r\n }\r\n /**\r\n * Returns screen center coordinates including zoom and device pixel ratio.\r\n */\r\n get center() {\r\n return vec(this.halfDrawWidth, this.halfDrawHeight);\r\n }\r\n /**\r\n * Returns the content area in screen space where it is safe to place content\r\n */\r\n get contentArea() {\r\n return this._contentArea;\r\n }\r\n _computeFit() {\r\n document.body.style.margin = '0px';\r\n document.body.style.overflow = 'hidden';\r\n const aspect = this.aspectRatio;\r\n let adjustedWidth = 0;\r\n let adjustedHeight = 0;\r\n if (window.innerWidth / aspect < window.innerHeight) {\r\n adjustedWidth = window.innerWidth;\r\n adjustedHeight = window.innerWidth / aspect;\r\n }\r\n else {\r\n adjustedWidth = window.innerHeight * aspect;\r\n adjustedHeight = window.innerHeight;\r\n }\r\n this.viewport = {\r\n width: adjustedWidth,\r\n height: adjustedHeight\r\n };\r\n this._contentArea = BoundingBox.fromDimension(this.resolution.width, this.resolution.height, Vector.Zero);\r\n }\r\n _computeFitScreenAndFill() {\r\n document.body.style.margin = '0px';\r\n document.body.style.overflow = 'hidden';\r\n const vw = window.innerWidth;\r\n const vh = window.innerHeight;\r\n this._computeFitAndFill(vw, vh);\r\n }\r\n _computeFitContainerAndFill() {\r\n document.body.style.margin = '0px';\r\n document.body.style.overflow = 'hidden';\r\n const parent = this.canvas.parentElement;\r\n const vw = parent.clientWidth;\r\n const vh = parent.clientHeight;\r\n this._computeFitAndFill(vw, vh);\r\n }\r\n _computeFitAndFill(vw, vh) {\r\n this.viewport = {\r\n width: vw,\r\n height: vh\r\n };\r\n // if the current screen aspectRatio is less than the original aspectRatio\r\n if (vw / vh <= this._contentResolution.width / this._contentResolution.height) {\r\n // compute new resolution to match the original aspect ratio\r\n this.resolution = {\r\n width: vw * this._contentResolution.width / vw,\r\n height: vw * this._contentResolution.width / vw * vh / vw\r\n };\r\n const clip = (this.resolution.height - this._contentResolution.height) / 2;\r\n this._contentArea = new BoundingBox({\r\n top: clip,\r\n left: 0,\r\n right: this._contentResolution.width,\r\n bottom: this.resolution.height - clip\r\n });\r\n }\r\n else {\r\n this.resolution = {\r\n width: vh * this._contentResolution.height / vh * vw / vh,\r\n height: vh * this._contentResolution.height / vh\r\n };\r\n const clip = (this.resolution.width - this._contentResolution.width) / 2;\r\n this._contentArea = new BoundingBox({\r\n top: 0,\r\n left: clip,\r\n right: this.resolution.width - clip,\r\n bottom: this._contentResolution.height\r\n });\r\n }\r\n }\r\n _computeFitScreenAndZoom() {\r\n document.body.style.margin = '0px';\r\n document.body.style.overflow = 'hidden';\r\n this.canvas.style.position = 'absolute';\r\n const vw = window.innerWidth;\r\n const vh = window.innerHeight;\r\n this._computeFitAndZoom(vw, vh);\r\n }\r\n _computeFitContainerAndZoom() {\r\n document.body.style.margin = '0px';\r\n document.body.style.overflow = 'hidden';\r\n this.canvas.style.position = 'absolute';\r\n const parent = this.canvas.parentElement;\r\n parent.style.position = 'relative';\r\n parent.style.overflow = 'hidden';\r\n const vw = parent.clientWidth;\r\n const vh = parent.clientHeight;\r\n this._computeFitAndZoom(vw, vh);\r\n }\r\n _computeFitAndZoom(vw, vh) {\r\n const aspect = this.aspectRatio;\r\n let adjustedWidth = 0;\r\n let adjustedHeight = 0;\r\n if (vw / aspect < vh) {\r\n adjustedWidth = vw;\r\n adjustedHeight = vw / aspect;\r\n }\r\n else {\r\n adjustedWidth = vh * aspect;\r\n adjustedHeight = vh;\r\n }\r\n const scaleX = vw / adjustedWidth;\r\n const scaleY = vh / adjustedHeight;\r\n const maxScaleFactor = Math.max(scaleX, scaleY);\r\n const zoomedWidth = adjustedWidth * maxScaleFactor;\r\n const zoomedHeight = adjustedHeight * maxScaleFactor;\r\n // Center zoomed dimension if bigger than the screen\r\n if (zoomedWidth > vw) {\r\n this.canvas.style.left = -(zoomedWidth - vw) / 2 + 'px';\r\n }\r\n else {\r\n this.canvas.style.left = '';\r\n }\r\n if (zoomedHeight > vh) {\r\n this.canvas.style.top = -(zoomedHeight - vh) / 2 + 'px';\r\n }\r\n else {\r\n this.canvas.style.top = '';\r\n }\r\n this.viewport = {\r\n width: zoomedWidth,\r\n height: zoomedHeight\r\n };\r\n const bounds = BoundingBox.fromDimension(this.viewport.width, this.viewport.height, Vector.Zero);\r\n // return safe area\r\n if (this.viewport.width > vw) {\r\n const clip = (this.viewport.width - vw) / this.viewport.width * this.resolution.width;\r\n bounds.top = 0;\r\n bounds.left = clip / 2;\r\n bounds.right = this.resolution.width - clip / 2;\r\n bounds.bottom = this.resolution.height;\r\n }\r\n if (this.viewport.height > vh) {\r\n const clip = (this.viewport.height - vh) / this.viewport.height * this.resolution.height;\r\n bounds.top = clip / 2;\r\n bounds.left = 0;\r\n bounds.bottom = this.resolution.height - clip / 2;\r\n bounds.right = this.resolution.width;\r\n }\r\n this._contentArea = bounds;\r\n }\r\n _computeFitContainer() {\r\n const aspect = this.aspectRatio;\r\n let adjustedWidth = 0;\r\n let adjustedHeight = 0;\r\n const parent = this.canvas.parentElement;\r\n if (parent.clientWidth / aspect < parent.clientHeight) {\r\n adjustedWidth = parent.clientWidth;\r\n adjustedHeight = parent.clientWidth / aspect;\r\n }\r\n else {\r\n adjustedWidth = parent.clientHeight * aspect;\r\n adjustedHeight = parent.clientHeight;\r\n }\r\n this.viewport = {\r\n width: adjustedWidth,\r\n height: adjustedHeight\r\n };\r\n this._contentArea = BoundingBox.fromDimension(this.resolution.width, this.resolution.height, Vector.Zero);\r\n }\r\n _applyDisplayMode() {\r\n this._setResolutionAndViewportByDisplayMode(this.parent);\r\n // watch resizing\r\n if (this.parent instanceof Window) {\r\n this._browser.window.on('resize', this._resizeHandler);\r\n }\r\n else {\r\n this._resizeObserver = new ResizeObserver(() => {\r\n this._resizeHandler();\r\n });\r\n this._resizeObserver.observe(this.parent);\r\n }\r\n this.parent.addEventListener('resize', this._resizeHandler);\r\n }\r\n /**\r\n * Sets the resolution and viewport based on the selected display mode.\r\n */\r\n _setResolutionAndViewportByDisplayMode(parent) {\r\n if (this.displayMode === DisplayMode.FillContainer) {\r\n this.resolution = {\r\n width: parent.clientWidth,\r\n height: parent.clientHeight\r\n };\r\n this.viewport = this.resolution;\r\n }\r\n if (this.displayMode === DisplayMode.FillScreen) {\r\n document.body.style.margin = '0px';\r\n document.body.style.overflow = 'hidden';\r\n this.resolution = {\r\n width: parent.innerWidth,\r\n height: parent.innerHeight\r\n };\r\n this.viewport = this.resolution;\r\n }\r\n if (this.displayMode === DisplayMode.FitScreen) {\r\n this._computeFit();\r\n }\r\n if (this.displayMode === DisplayMode.FitContainer) {\r\n this._computeFitContainer();\r\n }\r\n if (this.displayMode === DisplayMode.FitScreenAndFill) {\r\n this._computeFitScreenAndFill();\r\n }\r\n if (this.displayMode === DisplayMode.FitContainerAndFill) {\r\n this._computeFitContainerAndFill();\r\n }\r\n if (this.displayMode === DisplayMode.FitScreenAndZoom) {\r\n this._computeFitScreenAndZoom();\r\n }\r\n if (this.displayMode === DisplayMode.FitContainerAndZoom) {\r\n this._computeFitContainerAndZoom();\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Resources/Sound/AudioContext.ts\n/**\r\n * Internal class used to build instances of AudioContext\r\n */\r\n/* istanbul ignore next */\r\nclass AudioContextFactory {\r\n static create() {\r\n if (!this._INSTANCE) {\r\n if (window.AudioContext || window.webkitAudioContext) {\r\n this._INSTANCE = new AudioContext();\r\n }\r\n }\r\n return this._INSTANCE;\r\n }\r\n}\r\nAudioContextFactory._INSTANCE = null;\r\n\n;// CONCATENATED MODULE: ./Util/WebAudio.ts\n\r\n\r\n/**\r\n * Patch for detecting legacy web audio in browsers\r\n * @internal\r\n * @param source\r\n */\r\nfunction isLegacyWebAudioSource(source) {\r\n return !!source.playbackState;\r\n}\r\nclass WebAudio {\r\n /**\r\n * Play an empty sound to unlock Safari WebAudio context. Call this function\r\n * right after a user interaction event.\r\n * @source https://paulbakaus.com/tutorials/html5/web-audio-on-ios/\r\n */\r\n static unlock() {\r\n const promise = new Promise((resolve, reject) => {\r\n if (WebAudio._UNLOCKED || !AudioContextFactory.create()) {\r\n return resolve(true);\r\n }\r\n const unlockTimeoutTimer = setTimeout(() => {\r\n Logger.getInstance().warn('Excalibur was unable to unlock the audio context, audio probably will not play in this browser.');\r\n resolve(false);\r\n }, 200);\r\n const audioContext = AudioContextFactory.create();\r\n audioContext.resume().then(() => {\r\n // create empty buffer and play it\r\n const buffer = audioContext.createBuffer(1, 1, 22050);\r\n const source = audioContext.createBufferSource();\r\n let ended = false;\r\n source.buffer = buffer;\r\n source.connect(audioContext.destination);\r\n source.onended = () => (ended = true);\r\n source.start(0);\r\n // by checking the play state after some time, we know if we're really unlocked\r\n setTimeout(() => {\r\n if (isLegacyWebAudioSource(source)) {\r\n if (source.playbackState === source.PLAYING_STATE || source.playbackState === source.FINISHED_STATE) {\r\n WebAudio._UNLOCKED = true;\r\n }\r\n }\r\n else {\r\n if (audioContext.currentTime > 0 || ended) {\r\n WebAudio._UNLOCKED = true;\r\n }\r\n }\r\n }, 0);\r\n clearTimeout(unlockTimeoutTimer);\r\n resolve(true);\r\n }, () => {\r\n reject();\r\n });\r\n });\r\n return promise;\r\n }\r\n static isUnlocked() {\r\n return this._UNLOCKED;\r\n }\r\n}\r\nWebAudio._UNLOCKED = false;\r\n\n;// CONCATENATED MODULE: ./Class.ts\n\r\n/**\r\n * Excalibur base class that provides basic functionality such as [[EventDispatcher]]\r\n * and extending abilities for vanilla Javascript projects\r\n */\r\nclass Class {\r\n constructor() {\r\n this.eventDispatcher = new EventDispatcher();\r\n }\r\n /**\r\n * Alias for `addEventListener`. You can listen for a variety of\r\n * events off of the engine; see the events section below for a complete list.\r\n * @param eventName Name of the event to listen for\r\n * @param handler Event handler for the thrown event\r\n */\r\n on(eventName, handler) {\r\n this.eventDispatcher.on(eventName, handler);\r\n }\r\n /**\r\n * Alias for `removeEventListener`. If only the eventName is specified\r\n * it will remove all handlers registered for that specific event. If the eventName\r\n * and the handler instance are specified only that handler will be removed.\r\n *\r\n * @param eventName Name of the event to listen for\r\n * @param handler Event handler for the thrown event\r\n */\r\n off(eventName, handler) {\r\n this.eventDispatcher.off(eventName, handler);\r\n }\r\n /**\r\n * Emits a new event\r\n * @param eventName Name of the event to emit\r\n * @param eventObject Data associated with this event\r\n */\r\n emit(eventName, eventObject) {\r\n this.eventDispatcher.emit(eventName, eventObject);\r\n }\r\n /**\r\n * Once listens to an event one time, then unsubscribes from that event\r\n *\r\n * @param eventName The name of the event to subscribe to once\r\n * @param handler The handler of the event that will be auto unsubscribed\r\n */\r\n once(eventName, handler) {\r\n this.eventDispatcher.once(eventName, handler);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Util/DrawUtil.ts\n\r\n/* istanbul ignore next */\r\n/**\r\n * Draw a line on canvas context\r\n *\r\n * @param ctx The canvas context\r\n * @param color The color of the line\r\n * @param x1 The start x coordinate\r\n * @param y1 The start y coordinate\r\n * @param x2 The ending x coordinate\r\n * @param y2 The ending y coordinate\r\n * @param thickness The line thickness\r\n * @param cap The [[LineCapStyle]] (butt, round, or square)\r\n */\r\nfunction line(ctx, color = Color.Red, x1, y1, x2, y2, thickness = 1, cap = 'butt') {\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.lineWidth = thickness;\r\n ctx.lineCap = cap;\r\n ctx.strokeStyle = color.toString();\r\n ctx.moveTo(x1, y1);\r\n ctx.lineTo(x2, y2);\r\n ctx.closePath();\r\n ctx.stroke();\r\n ctx.restore();\r\n}\r\n/* istanbul ignore next */\r\n/**\r\n * Draw the vector as a point onto the canvas.\r\n */\r\nfunction point(ctx, color = Color.Red, point) {\r\n ctx.beginPath();\r\n ctx.strokeStyle = color.toString();\r\n ctx.arc(point.x, point.y, 5, 0, Math.PI * 2);\r\n ctx.closePath();\r\n ctx.stroke();\r\n}\r\n/**\r\n * Draw the vector as a line onto the canvas starting a origin point.\r\n */\r\n/* istanbul ignore next */\r\n/**\r\n *\r\n */\r\nfunction vector(ctx, color, origin, vector, scale = 1.0) {\r\n const c = color ? color.toString() : 'blue';\r\n const v = vector.scale(scale);\r\n ctx.beginPath();\r\n ctx.strokeStyle = c;\r\n ctx.moveTo(origin.x, origin.y);\r\n ctx.lineTo(origin.x + v.x, origin.y + v.y);\r\n ctx.closePath();\r\n ctx.stroke();\r\n}\r\n/**\r\n * Draw a round rectangle on a canvas context\r\n *\r\n * @param ctx The canvas context\r\n * @param x The top-left x coordinate\r\n * @param y The top-left y coordinate\r\n * @param width The width of the rectangle\r\n * @param height The height of the rectangle\r\n * @param radius The border radius of the rectangle\r\n * @param stroke The [[Color]] to stroke rectangle with\r\n * @param fill The [[Color]] to fill rectangle with\r\n */\r\nfunction roundRect(ctx, x, y, width, height, radius = 5, stroke = Color.White, fill = null) {\r\n let br;\r\n if (typeof radius === 'number') {\r\n br = { tl: radius, tr: radius, br: radius, bl: radius };\r\n }\r\n else {\r\n const defaultRadius = { tl: 0, tr: 0, br: 0, bl: 0 };\r\n for (const prop in defaultRadius) {\r\n if (defaultRadius.hasOwnProperty(prop)) {\r\n const side = prop;\r\n br[side] = radius[side] || defaultRadius[side];\r\n }\r\n }\r\n }\r\n ctx.beginPath();\r\n ctx.moveTo(x + br.tl, y);\r\n ctx.lineTo(x + width - br.tr, y);\r\n ctx.quadraticCurveTo(x + width, y, x + width, y + br.tr);\r\n ctx.lineTo(x + width, y + height - br.br);\r\n ctx.quadraticCurveTo(x + width, y + height, x + width - br.br, y + height);\r\n ctx.lineTo(x + br.bl, y + height);\r\n ctx.quadraticCurveTo(x, y + height, x, y + height - br.bl);\r\n ctx.lineTo(x, y + br.tl);\r\n ctx.quadraticCurveTo(x, y, x + br.tl, y);\r\n ctx.closePath();\r\n if (fill) {\r\n ctx.fillStyle = fill.toString();\r\n ctx.fill();\r\n }\r\n if (stroke) {\r\n ctx.strokeStyle = stroke.toString();\r\n ctx.stroke();\r\n }\r\n}\r\n/**\r\n *\r\n */\r\nfunction circle(ctx, x, y, radius, stroke = Color.White, fill = null) {\r\n ctx.beginPath();\r\n ctx.arc(x, y, radius, 0, Math.PI * 2);\r\n ctx.closePath();\r\n if (fill) {\r\n ctx.fillStyle = fill.toString();\r\n ctx.fill();\r\n }\r\n if (stroke) {\r\n ctx.strokeStyle = stroke.toString();\r\n ctx.stroke();\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Loader.logo.png\n/* harmony default export */ const Loader_logo = (\"data:image/png;base64,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\");\n// EXTERNAL MODULE: ./Loader.css\nvar Loader_0 = __webpack_require__(1388);\n;// CONCATENATED MODULE: ./Graphics/Raster.ts\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * A Raster is a Graphic that needs to be first painted to a HTMLCanvasElement before it can be drawn to the\r\n * [[ExcaliburGraphicsContext]]. This is useful for generating custom images using the 2D canvas api.\r\n *\r\n * Implementors must implement the [[Raster.execute]] method to rasterize their drawing.\r\n */\r\nclass Raster extends Graphic {\r\n constructor(options) {\r\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\r\n super(options);\r\n this.filtering = null;\r\n this.lineCap = 'butt';\r\n this.quality = 1;\r\n this._dirty = true;\r\n this._smoothing = false;\r\n this._color = watch(Color.Black, () => this.flagDirty());\r\n this._lineWidth = 1;\r\n this._lineDash = [];\r\n this._padding = 0;\r\n if (options) {\r\n this.quality = (_a = options.quality) !== null && _a !== void 0 ? _a : this.quality;\r\n this.color = (_b = options.color) !== null && _b !== void 0 ? _b : Color.Black;\r\n this.strokeColor = options === null || options === void 0 ? void 0 : options.strokeColor;\r\n this.smoothing = (_c = options.smoothing) !== null && _c !== void 0 ? _c : this.smoothing;\r\n this.lineWidth = (_d = options.lineWidth) !== null && _d !== void 0 ? _d : this.lineWidth;\r\n this.lineDash = (_e = options.lineDash) !== null && _e !== void 0 ? _e : this.lineDash;\r\n this.lineCap = (_f = options.lineCap) !== null && _f !== void 0 ? _f : this.lineCap;\r\n this.padding = (_g = options.padding) !== null && _g !== void 0 ? _g : this.padding;\r\n this.filtering = (_h = options.filtering) !== null && _h !== void 0 ? _h : this.filtering;\r\n }\r\n this._bitmap = document.createElement('canvas');\r\n // get the default canvas width/height as a fallback\r\n const bitmapWidth = (_j = options === null || options === void 0 ? void 0 : options.width) !== null && _j !== void 0 ? _j : this._bitmap.width;\r\n const bitmapHeight = (_k = options === null || options === void 0 ? void 0 : options.height) !== null && _k !== void 0 ? _k : this._bitmap.height;\r\n this.width = bitmapWidth;\r\n this.height = bitmapHeight;\r\n const maybeCtx = this._bitmap.getContext('2d');\r\n if (!maybeCtx) {\r\n /* istanbul ignore next */\r\n throw new Error('Browser does not support 2d canvas drawing, cannot create Raster graphic');\r\n }\r\n else {\r\n this._ctx = maybeCtx;\r\n }\r\n }\r\n cloneRasterOptions() {\r\n return {\r\n color: this.color ? this.color.clone() : null,\r\n strokeColor: this.strokeColor ? this.strokeColor.clone() : null,\r\n smoothing: this.smoothing,\r\n lineWidth: this.lineWidth,\r\n lineDash: this.lineDash,\r\n lineCap: this.lineCap,\r\n quality: this.quality,\r\n padding: this.padding\r\n };\r\n }\r\n /**\r\n * Gets whether the graphic is dirty, this means there are changes that haven't been re-rasterized\r\n */\r\n get dirty() {\r\n return this._dirty;\r\n }\r\n /**\r\n * Flags the graphic as dirty, meaning it must be re-rasterized before draw.\r\n * This should be called any time the graphics state changes such that it affects the outputted drawing\r\n */\r\n flagDirty() {\r\n this._dirty = true;\r\n }\r\n /**\r\n * Gets or sets the current width of the Raster graphic. Setting the width will cause the raster\r\n * to be flagged dirty causing a re-raster on the next draw.\r\n *\r\n * Any `padding`s or `quality` set will be factored into the width\r\n */\r\n get width() {\r\n return Math.abs(this._getTotalWidth() * this.scale.x);\r\n }\r\n set width(value) {\r\n value /= Math.abs(this.scale.x);\r\n this._bitmap.width = value;\r\n this._originalWidth = value;\r\n this.flagDirty();\r\n }\r\n /**\r\n * Gets or sets the current height of the Raster graphic. Setting the height will cause the raster\r\n * to be flagged dirty causing a re-raster on the next draw.\r\n *\r\n * Any `padding` or `quality` set will be factored into the height\r\n */\r\n get height() {\r\n return Math.abs(this._getTotalHeight() * this.scale.y);\r\n }\r\n set height(value) {\r\n value /= Math.abs(this.scale.y);\r\n this._bitmap.height = value;\r\n this._originalHeight = value;\r\n this.flagDirty();\r\n }\r\n _getTotalWidth() {\r\n var _a;\r\n return (((_a = this._originalWidth) !== null && _a !== void 0 ? _a : this._bitmap.width) + this.padding * 2) * 1;\r\n }\r\n _getTotalHeight() {\r\n var _a;\r\n return (((_a = this._originalHeight) !== null && _a !== void 0 ? _a : this._bitmap.height) + this.padding * 2) * 1;\r\n }\r\n /**\r\n * Returns the local bounds of the Raster including the padding\r\n */\r\n get localBounds() {\r\n return BoundingBox.fromDimension(this._getTotalWidth() * this.scale.x, this._getTotalHeight() * this.scale.y, Vector.Zero);\r\n }\r\n /**\r\n * Gets or sets the smoothing (anti-aliasing of the graphic). Setting the height will cause the raster\r\n * to be flagged dirty causing a re-raster on the next draw.\r\n */\r\n get smoothing() {\r\n return this._smoothing;\r\n }\r\n set smoothing(value) {\r\n this._smoothing = value;\r\n this.flagDirty();\r\n }\r\n /**\r\n * Gets or sets the fillStyle of the Raster graphic. Setting the fillStyle will cause the raster to be\r\n * flagged dirty causing a re-raster on the next draw.\r\n */\r\n get color() {\r\n return this._color;\r\n }\r\n set color(value) {\r\n this.flagDirty();\r\n this._color = watch(value, () => this.flagDirty());\r\n }\r\n /**\r\n * Gets or sets the strokeStyle of the Raster graphic. Setting the strokeStyle will cause the raster to be\r\n * flagged dirty causing a re-raster on the next draw.\r\n */\r\n get strokeColor() {\r\n return this._strokeColor;\r\n }\r\n set strokeColor(value) {\r\n this.flagDirty();\r\n this._strokeColor = watch(value, () => this.flagDirty());\r\n }\r\n /**\r\n * Gets or sets the line width of the Raster graphic. Setting the lineWidth will cause the raster to be\r\n * flagged dirty causing a re-raster on the next draw.\r\n */\r\n get lineWidth() {\r\n return this._lineWidth;\r\n }\r\n set lineWidth(value) {\r\n this._lineWidth = value;\r\n this.flagDirty();\r\n }\r\n get lineDash() {\r\n return this._lineDash;\r\n }\r\n set lineDash(value) {\r\n this._lineDash = value;\r\n this.flagDirty();\r\n }\r\n get padding() {\r\n return this._padding;\r\n }\r\n set padding(value) {\r\n this._padding = value;\r\n this.flagDirty();\r\n }\r\n /**\r\n * Rasterize the graphic to a bitmap making it usable as in excalibur. Rasterize is called automatically if\r\n * the graphic is [[Raster.dirty]] on the next [[Graphic.draw]] call\r\n */\r\n rasterize() {\r\n this._dirty = false;\r\n this._ctx.clearRect(0, 0, this._getTotalWidth(), this._getTotalHeight());\r\n this._ctx.save();\r\n this._applyRasterProperties(this._ctx);\r\n this.execute(this._ctx);\r\n this._ctx.restore();\r\n // The webgl texture needs to be updated if it exists after a raster cycle\r\n TextureLoader.load(this._bitmap, this.filtering, true);\r\n }\r\n _applyRasterProperties(ctx) {\r\n var _a, _b, _c;\r\n this._bitmap.width = this._getTotalWidth() * this.quality;\r\n this._bitmap.height = this._getTotalHeight() * this.quality;\r\n ctx.scale(this.quality, this.quality);\r\n ctx.translate(this.padding, this.padding);\r\n ctx.imageSmoothingEnabled = this.smoothing;\r\n ctx.lineWidth = this.lineWidth;\r\n ctx.setLineDash((_a = this.lineDash) !== null && _a !== void 0 ? _a : ctx.getLineDash());\r\n ctx.lineCap = this.lineCap;\r\n ctx.strokeStyle = (_b = this.strokeColor) === null || _b === void 0 ? void 0 : _b.toString();\r\n ctx.fillStyle = (_c = this.color) === null || _c === void 0 ? void 0 : _c.toString();\r\n }\r\n _drawImage(ex, x, y) {\r\n if (this._dirty) {\r\n this.rasterize();\r\n }\r\n ex.scale(1 / this.quality, 1 / this.quality);\r\n ex.drawImage(this._bitmap, x, y);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Canvas.ts\n\r\n/**\r\n * A canvas [[Graphic]] to provide an adapter between the 2D Canvas API and the [[ExcaliburGraphicsContext]].\r\n *\r\n * The [[Canvas]] works by re-rastering a draw handler to a HTMLCanvasElement for every draw which is then passed\r\n * to the [[ExcaliburGraphicsContext]] implementation as a rendered image.\r\n *\r\n * **Low performance API**\r\n */\r\nclass Canvas extends Raster {\r\n constructor(_options) {\r\n super(_options);\r\n this._options = _options;\r\n }\r\n /**\r\n * Return the 2D graphics context of this canvas\r\n */\r\n get ctx() {\r\n return this._ctx;\r\n }\r\n clone() {\r\n return new Canvas({\r\n ...this._options,\r\n ...this.cloneGraphicOptions(),\r\n ...this.cloneRasterOptions()\r\n });\r\n }\r\n execute(ctx) {\r\n var _a, _b;\r\n if ((_a = this._options) === null || _a === void 0 ? void 0 : _a.draw) {\r\n (_b = this._options) === null || _b === void 0 ? void 0 : _b.draw(ctx);\r\n }\r\n if (!this._options.cache) {\r\n this.flagDirty();\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Interfaces/AudioImplementation.ts\nclass ExResponse {\r\n}\r\nExResponse.type = {\r\n any: '',\r\n blob: 'blob',\r\n json: 'json',\r\n text: 'text',\r\n document: 'document',\r\n arraybuffer: 'arraybuffer'\r\n};\r\n\n;// CONCATENATED MODULE: ./Util/StateMachine.ts\nclass StateMachine {\r\n constructor() {\r\n this.states = new Map();\r\n }\r\n get currentState() {\r\n return this._currentState;\r\n }\r\n set currentState(state) {\r\n this._currentState = state;\r\n }\r\n static create(machineDescription, data) {\r\n const machine = new StateMachine();\r\n machine.data = data;\r\n for (const stateName in machineDescription.states) {\r\n machine.states.set(stateName, {\r\n name: stateName,\r\n ...machineDescription.states[stateName]\r\n });\r\n }\r\n // validate transitions are states\r\n for (const state of machine.states.values()) {\r\n for (const transitionState of state.transitions) {\r\n if (transitionState === '*') {\r\n continue;\r\n }\r\n if (!machine.states.has(transitionState)) {\r\n throw Error(`Invalid state machine, state [${state.name}] has a transition to another state that doesn't exist [${transitionState}]`);\r\n }\r\n }\r\n }\r\n machine.currentState = machine.startState = machine.states.get(machineDescription.start);\r\n return machine;\r\n }\r\n in(state) {\r\n return this.currentState.name === state;\r\n }\r\n go(stateName, eventData) {\r\n var _a, _b;\r\n if (this.currentState.transitions.includes(stateName) || this.currentState.transitions.includes('*')) {\r\n const potentialNewState = this.states.get(stateName);\r\n if (this.currentState.onExit) {\r\n const canExit = (_a = this.currentState) === null || _a === void 0 ? void 0 : _a.onExit({ to: potentialNewState.name, data: this.data });\r\n if (canExit === false) {\r\n return false;\r\n }\r\n }\r\n if (potentialNewState === null || potentialNewState === void 0 ? void 0 : potentialNewState.onEnter) {\r\n const canEnter = potentialNewState === null || potentialNewState === void 0 ? void 0 : potentialNewState.onEnter({ from: this.currentState.name, eventData, data: this.data });\r\n if (canEnter === false) {\r\n return false;\r\n }\r\n }\r\n // console.log(`${this.currentState.name} => ${potentialNewState.name} (${eventData})`);\r\n this.currentState = potentialNewState;\r\n if ((_b = this.currentState) === null || _b === void 0 ? void 0 : _b.onState) {\r\n this.currentState.onState();\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n update(elapsedMs) {\r\n if (this.currentState.onUpdate) {\r\n this.currentState.onUpdate(this.data, elapsedMs);\r\n }\r\n }\r\n save(saveKey) {\r\n localStorage.setItem(saveKey, JSON.stringify({\r\n currentState: this.currentState.name,\r\n data: this.data\r\n }));\r\n }\r\n restore(saveKey) {\r\n const state = JSON.parse(localStorage.getItem(saveKey));\r\n this.currentState = this.states.get(state.currentState);\r\n this.data = state.data;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Resources/Sound/WebAudioInstance.ts\n\r\n\r\n\r\n/**\r\n * Internal class representing a Web Audio AudioBufferSourceNode instance\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API\r\n */\r\nclass WebAudioInstance {\r\n constructor(_src) {\r\n this._src = _src;\r\n this._audioContext = AudioContextFactory.create();\r\n this._volumeNode = this._audioContext.createGain();\r\n this._playingPromise = new Promise((resolve) => {\r\n this._playingResolve = resolve;\r\n });\r\n this._stateMachine = StateMachine.create({\r\n start: 'STOPPED',\r\n states: {\r\n PLAYING: {\r\n onEnter: ({ data }) => {\r\n // Buffer nodes are single use\r\n this._createNewBufferSource();\r\n this._handleEnd();\r\n this._instance.start(0, data.pausedAt * this._playbackRate, this.duration);\r\n data.startedAt = (this._audioContext.currentTime - data.pausedAt);\r\n data.pausedAt = 0;\r\n },\r\n onState: () => this._playStarted(),\r\n onExit: ({ to }) => {\r\n // If you've exited early only resolve if explicitly STOPPED\r\n if (to === 'STOPPED') {\r\n this._playingResolve(true);\r\n }\r\n // Whenever you're not playing... you stop!\r\n this._instance.onended = null; // disconnect the wired on-end handler\r\n this._instance.disconnect();\r\n this._instance.stop(0);\r\n this._instance = null;\r\n },\r\n transitions: ['STOPPED', 'PAUSED', 'SEEK']\r\n },\r\n SEEK: {\r\n onEnter: ({ eventData: position, data }) => {\r\n data.pausedAt = (position !== null && position !== void 0 ? position : 0) / this._playbackRate;\r\n data.startedAt = 0;\r\n },\r\n transitions: ['*']\r\n },\r\n STOPPED: {\r\n onEnter: ({ data }) => {\r\n data.pausedAt = 0;\r\n data.startedAt = 0;\r\n this._playingResolve(true);\r\n },\r\n transitions: ['PLAYING', 'PAUSED', 'SEEK']\r\n },\r\n PAUSED: {\r\n onEnter: ({ data }) => {\r\n // Playback rate will be a scale factor of how fast/slow the audio is being played\r\n // default is 1.0\r\n // we need to invert it to get the time scale\r\n data.pausedAt = (this._audioContext.currentTime - data.startedAt);\r\n },\r\n transitions: ['PLAYING', 'STOPPED', 'SEEK']\r\n }\r\n }\r\n }, {\r\n startedAt: 0,\r\n pausedAt: 0\r\n });\r\n this._volume = 1;\r\n this._loop = false;\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n this._playStarted = () => { };\r\n this._playbackRate = 1.0;\r\n this._createNewBufferSource();\r\n }\r\n _createNewBufferSource() {\r\n this._instance = this._audioContext.createBufferSource();\r\n this._instance.buffer = this._src;\r\n this._instance.loop = this.loop;\r\n this._instance.playbackRate.value = this._playbackRate;\r\n this._instance.connect(this._volumeNode);\r\n this._volumeNode.connect(this._audioContext.destination);\r\n }\r\n _handleEnd() {\r\n if (!this.loop) {\r\n this._instance.onended = () => {\r\n this._playingResolve(true);\r\n };\r\n }\r\n }\r\n set loop(value) {\r\n this._loop = value;\r\n if (this._instance) {\r\n this._instance.loop = value;\r\n if (!this.loop) {\r\n this._instance.onended = () => {\r\n this._playingResolve(true);\r\n };\r\n }\r\n }\r\n }\r\n get loop() {\r\n return this._loop;\r\n }\r\n set volume(value) {\r\n value = clamp(value, 0, 1.0);\r\n this._volume = value;\r\n if (this._stateMachine.in('PLAYING') && this._volumeNode.gain.setTargetAtTime) {\r\n // https://developer.mozilla.org/en-US/docs/Web/API/AudioParam/setTargetAtTime\r\n // After each .1 seconds timestep, the target value will ~63.2% closer to the target value.\r\n // This exponential ramp provides a more pleasant transition in gain\r\n this._volumeNode.gain.setTargetAtTime(value, this._audioContext.currentTime, 0.1);\r\n }\r\n else {\r\n this._volumeNode.gain.value = value;\r\n }\r\n }\r\n get volume() {\r\n return this._volume;\r\n }\r\n /**\r\n * Returns the set duration to play, otherwise returns the total duration if unset\r\n */\r\n get duration() {\r\n var _a;\r\n return (_a = this._duration) !== null && _a !== void 0 ? _a : this.getTotalPlaybackDuration();\r\n }\r\n /**\r\n * Set the duration that this audio should play.\r\n *\r\n * Note: if you seek to a specific point the duration will start from that point, for example\r\n *\r\n * If you have a 10 second clip, seek to 5 seconds, then set the duration to 2, it will play the clip from 5-7 seconds.\r\n */\r\n set duration(duration) {\r\n this._duration = duration;\r\n }\r\n isPlaying() {\r\n return this._stateMachine.in('PLAYING');\r\n }\r\n isPaused() {\r\n return this._stateMachine.in('PAUSED') || this._stateMachine.in('SEEK');\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n play(playStarted = () => { }) {\r\n this._playStarted = playStarted;\r\n this._stateMachine.go('PLAYING');\r\n return this._playingPromise;\r\n }\r\n pause() {\r\n this._stateMachine.go('PAUSED');\r\n }\r\n stop() {\r\n this._stateMachine.go('STOPPED');\r\n }\r\n seek(position) {\r\n this._stateMachine.go('PAUSED');\r\n this._stateMachine.go('SEEK', position);\r\n }\r\n getTotalPlaybackDuration() {\r\n return this._src.duration;\r\n }\r\n getPlaybackPosition() {\r\n const { pausedAt, startedAt } = this._stateMachine.data;\r\n if (pausedAt) {\r\n return pausedAt * this._playbackRate;\r\n }\r\n if (startedAt) {\r\n return (this._audioContext.currentTime - startedAt) * this._playbackRate;\r\n }\r\n return 0;\r\n }\r\n set playbackRate(playbackRate) {\r\n this._instance.playbackRate.value = this._playbackRate = playbackRate;\r\n }\r\n get playbackRate() {\r\n return this._instance.playbackRate.value;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Events/MediaEvents.ts\n\r\nclass MediaEvent extends GameEvent {\r\n constructor(target, _name = 'MediaEvent') {\r\n super();\r\n this.target = target;\r\n this._name = _name;\r\n }\r\n /**\r\n * Media event cannot bubble\r\n */\r\n set bubbles(_value) {\r\n // stubbed\r\n }\r\n /**\r\n * Media event cannot bubble\r\n */\r\n get bubbles() {\r\n return false;\r\n }\r\n /**\r\n * Media event cannot bubble, so they have no path\r\n */\r\n get _path() {\r\n return null;\r\n }\r\n /**\r\n * Media event cannot bubble, so they have no path\r\n */\r\n set _path(_val) {\r\n // stubbed\r\n }\r\n /**\r\n * Prevents event from bubbling\r\n */\r\n stopPropagation() {\r\n /**\r\n * Stub\r\n */\r\n }\r\n /**\r\n * Action, that calls when event happens\r\n */\r\n action() {\r\n /**\r\n * Stub\r\n */\r\n }\r\n /**\r\n * Propagate event further through event path\r\n */\r\n propagate() {\r\n /**\r\n * Stub\r\n */\r\n }\r\n layPath(_actor) {\r\n /**\r\n * Stub\r\n */\r\n }\r\n}\r\nclass NativeSoundEvent extends MediaEvent {\r\n constructor(target, track) {\r\n super(target, 'NativeSoundEvent');\r\n this.track = track;\r\n }\r\n}\r\nclass NativeSoundProcessedEvent extends MediaEvent {\r\n constructor(target, _processedData) {\r\n super(target, 'NativeSoundProcessedEvent');\r\n this._processedData = _processedData;\r\n this.data = this._processedData;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Util/Sound.ts\n\r\n/**\r\n * Whether or not the browser can play this file as HTML5 Audio\r\n */\r\nfunction canPlayFile(file) {\r\n try {\r\n const a = new Audio();\r\n const filetype = /.*\\.([A-Za-z0-9]+)$/;\r\n const type = file.match(filetype)[1];\r\n if (a.canPlayType('audio/' + type)) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n catch (e) {\r\n Logger.getInstance().warn('Cannot determine audio support, assuming no support for the Audio Tag', e);\r\n return false;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Resources/Sound/Sound.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * The [[Sound]] object allows games built in Excalibur to load audio\r\n * components, from soundtracks to sound effects. [[Sound]] is an [[Loadable]]\r\n * which means it can be passed to a [[Loader]] to pre-load before a game or level.\r\n */\r\nclass Sound extends Class {\r\n /**\r\n * @param paths A list of audio sources (clip.wav, clip.mp3, clip.ogg) for this audio clip. This is done for browser compatibility.\r\n */\r\n constructor(...paths) {\r\n super();\r\n this.logger = Logger.getInstance();\r\n this._loop = false;\r\n this._volume = 1;\r\n this._isStopped = false;\r\n // private _isPaused = false;\r\n this._tracks = [];\r\n this._wasPlayingOnHidden = false;\r\n this._playbackRate = 1.0;\r\n this._audioContext = AudioContextFactory.create();\r\n this._resource = new Resource('', ExResponse.type.arraybuffer);\r\n /**\r\n * Chrome : MP3, WAV, Ogg\r\n * Firefox : WAV, Ogg,\r\n * IE : MP3, WAV coming soon\r\n * Safari MP3, WAV, Ogg\r\n */\r\n for (const path of paths) {\r\n if (canPlayFile(path)) {\r\n this.path = path;\r\n break;\r\n }\r\n }\r\n if (!this.path) {\r\n this.logger.warn('This browser does not support any of the audio files specified:', paths.join(', '));\r\n this.logger.warn('Attempting to use', paths[0]);\r\n this.path = paths[0]; // select the first specified\r\n }\r\n }\r\n /**\r\n * Indicates whether the clip should loop when complete\r\n * @param value Set the looping flag\r\n */\r\n set loop(value) {\r\n this._loop = value;\r\n for (const track of this._tracks) {\r\n track.loop = this._loop;\r\n }\r\n this.logger.debug('Set loop for all instances of sound', this.path, 'to', this._loop);\r\n }\r\n get loop() {\r\n return this._loop;\r\n }\r\n set volume(value) {\r\n this._volume = value;\r\n for (const track of this._tracks) {\r\n track.volume = this._volume;\r\n }\r\n this.emit('volumechange', new NativeSoundEvent(this));\r\n this.logger.debug('Set loop for all instances of sound', this.path, 'to', this._volume);\r\n }\r\n get volume() {\r\n return this._volume;\r\n }\r\n /**\r\n * Get the duration that this audio should play. If unset the total natural playback duration will be used.\r\n */\r\n get duration() {\r\n return this._duration;\r\n }\r\n /**\r\n * Set the duration that this audio should play. If unset the total natural playback duration will be used.\r\n *\r\n * Note: if you seek to a specific point the duration will start from that point, for example\r\n *\r\n * If you have a 10 second clip, seek to 5 seconds, then set the duration to 2, it will play the clip from 5-7 seconds.\r\n */\r\n set duration(duration) {\r\n this._duration = duration;\r\n }\r\n /**\r\n * Return array of Current AudioInstances playing or being paused\r\n */\r\n get instances() {\r\n return this._tracks;\r\n }\r\n get path() {\r\n return this._resource.path;\r\n }\r\n set path(val) {\r\n this._resource.path = val;\r\n }\r\n isLoaded() {\r\n return !!this.data;\r\n }\r\n async load() {\r\n var _a, _b;\r\n if (this.data) {\r\n return this.data;\r\n }\r\n const arraybuffer = await this._resource.load();\r\n const audiobuffer = await this.decodeAudio(arraybuffer.slice(0));\r\n this._duration = (_b = (_a = this._duration) !== null && _a !== void 0 ? _a : audiobuffer === null || audiobuffer === void 0 ? void 0 : audiobuffer.duration) !== null && _b !== void 0 ? _b : undefined;\r\n this.emit('processed', new NativeSoundProcessedEvent(this, audiobuffer));\r\n return this.data = audiobuffer;\r\n }\r\n async decodeAudio(data) {\r\n try {\r\n return await this._audioContext.decodeAudioData(data.slice(0));\r\n }\r\n catch (e) {\r\n this.logger.error('Unable to decode ' +\r\n ' this browser may not fully support this format, or the file may be corrupt, ' +\r\n 'if this is an mp3 try removing id3 tags and album art from the file.');\r\n return await Promise.reject();\r\n }\r\n }\r\n wireEngine(engine) {\r\n if (engine) {\r\n this._engine = engine;\r\n this._engine.on('hidden', () => {\r\n if (engine.pauseAudioWhenHidden && this.isPlaying()) {\r\n this._wasPlayingOnHidden = true;\r\n this.pause();\r\n }\r\n });\r\n this._engine.on('visible', () => {\r\n if (engine.pauseAudioWhenHidden && this._wasPlayingOnHidden) {\r\n this.play();\r\n this._wasPlayingOnHidden = false;\r\n }\r\n });\r\n this._engine.on('start', () => {\r\n this._isStopped = false;\r\n });\r\n this._engine.on('stop', () => {\r\n this.stop();\r\n this._isStopped = true;\r\n });\r\n }\r\n }\r\n /**\r\n * Returns how many instances of the sound are currently playing\r\n */\r\n instanceCount() {\r\n return this._tracks.length;\r\n }\r\n /**\r\n * Whether or not the sound is playing right now\r\n */\r\n isPlaying() {\r\n return this._tracks.some((t) => t.isPlaying());\r\n }\r\n isPaused() {\r\n return this._tracks.some(t => t.isPaused());\r\n }\r\n /**\r\n * Play the sound, returns a promise that resolves when the sound is done playing\r\n * An optional volume argument can be passed in to play the sound. Max volume is 1.0\r\n */\r\n play(volume) {\r\n if (!this.isLoaded()) {\r\n this.logger.warn('Cannot start playing. Resource', this.path, 'is not loaded yet');\r\n return Promise.resolve(true);\r\n }\r\n if (this._isStopped) {\r\n this.logger.warn('Cannot start playing. Engine is in a stopped state.');\r\n return Promise.resolve(false);\r\n }\r\n this.volume = volume || this.volume;\r\n if (this.isPaused()) {\r\n return this._resumePlayback();\r\n }\r\n else {\r\n return this._startPlayback();\r\n }\r\n }\r\n /**\r\n * Stop the sound, and do not rewind\r\n */\r\n pause() {\r\n if (!this.isPlaying()) {\r\n return;\r\n }\r\n for (const track of this._tracks) {\r\n track.pause();\r\n }\r\n this.emit('pause', new NativeSoundEvent(this));\r\n this.logger.debug('Paused all instances of sound', this.path);\r\n }\r\n /**\r\n * Stop the sound if it is currently playing and rewind the track. If the sound is not playing, rewinds the track.\r\n */\r\n stop() {\r\n for (const track of this._tracks) {\r\n track.stop();\r\n }\r\n this.emit('stop', new NativeSoundEvent(this));\r\n this._tracks.length = 0;\r\n this.logger.debug('Stopped all instances of sound', this.path);\r\n }\r\n get playbackRate() {\r\n return this._playbackRate;\r\n }\r\n set playbackRate(playbackRate) {\r\n this._playbackRate = playbackRate;\r\n this._tracks.forEach(t => {\r\n t.playbackRate = this._playbackRate;\r\n });\r\n }\r\n seek(position, trackId = 0) {\r\n if (this._tracks.length === 0) {\r\n this._getTrackInstance(this.data);\r\n }\r\n this._tracks[trackId].seek(position);\r\n }\r\n getTotalPlaybackDuration() {\r\n return this.data.duration;\r\n }\r\n /**\r\n * Return the current playback time of the playing track in seconds from the start.\r\n *\r\n * Optionally specify the track to query if multiple are playing at once.\r\n * @param trackId\r\n */\r\n getPlaybackPosition(trackId = 0) {\r\n if (this._tracks.length) {\r\n return this._tracks[trackId].getPlaybackPosition();\r\n }\r\n return 0;\r\n }\r\n /**\r\n * Get Id of provided AudioInstance in current trackList\r\n * @param track [[Audio]] which Id is to be given\r\n */\r\n getTrackId(track) {\r\n return this._tracks.indexOf(track);\r\n }\r\n async _resumePlayback() {\r\n if (this.isPaused) {\r\n const resumed = [];\r\n // ensure we resume *current* tracks (if paused)\r\n for (const track of this._tracks) {\r\n resumed.push(track.play().then(() => {\r\n this.emit('playbackend', new NativeSoundEvent(this, track));\r\n this._tracks.splice(this.getTrackId(track), 1);\r\n return true;\r\n }));\r\n }\r\n this.emit('resume', new NativeSoundEvent(this));\r\n this.logger.debug('Resuming paused instances for sound', this.path, this._tracks);\r\n // resolve when resumed tracks are done\r\n await Promise.all(resumed);\r\n }\r\n return true;\r\n }\r\n /**\r\n * Starts playback, returns a promise that resolves when playback is complete\r\n */\r\n async _startPlayback() {\r\n const track = await this._getTrackInstance(this.data);\r\n const complete = await track.play(() => {\r\n this.emit('playbackstart', new NativeSoundEvent(this, track));\r\n this.logger.debug('Playing new instance for sound', this.path);\r\n });\r\n // when done, remove track\r\n this.emit('playbackend', new NativeSoundEvent(this, track));\r\n this._tracks.splice(this.getTrackId(track), 1);\r\n return complete;\r\n }\r\n _getTrackInstance(data) {\r\n const newTrack = new WebAudioInstance(data);\r\n newTrack.loop = this.loop;\r\n newTrack.volume = this.volume;\r\n newTrack.duration = this.duration;\r\n newTrack.playbackRate = this._playbackRate;\r\n this._tracks.push(newTrack);\r\n return newTrack;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Loader.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Pre-loading assets\r\n *\r\n * The loader provides a mechanism to preload multiple resources at\r\n * one time. The loader must be passed to the engine in order to\r\n * trigger the loading progress bar.\r\n *\r\n * The [[Loader]] itself implements [[Loadable]] so you can load loaders.\r\n *\r\n * ## Example: Pre-loading resources for a game\r\n *\r\n * ```js\r\n * // create a loader\r\n * var loader = new ex.Loader();\r\n *\r\n * // create a resource dictionary (best practice is to keep a separate file)\r\n * var resources = {\r\n * TextureGround: new ex.Texture(\"/images/textures/ground.png\"),\r\n * SoundDeath: new ex.Sound(\"/sound/death.wav\", \"/sound/death.mp3\")\r\n * };\r\n *\r\n * // loop through dictionary and add to loader\r\n * for (var loadable in resources) {\r\n * if (resources.hasOwnProperty(loadable)) {\r\n * loader.addResource(resources[loadable]);\r\n * }\r\n * }\r\n *\r\n * // start game\r\n * game.start(loader).then(function () {\r\n * console.log(\"Game started!\");\r\n * });\r\n * ```\r\n *\r\n * ## Customize the Loader\r\n *\r\n * The loader can be customized to show different, text, logo, background color, and button.\r\n *\r\n * ```typescript\r\n * const loader = new ex.Loader([playerTexture]);\r\n *\r\n * // The loaders button text can simply modified using this\r\n * loader.playButtonText = 'Start the best game ever';\r\n *\r\n * // The logo can be changed by inserting a base64 image string here\r\n *\r\n * loader.logo = 'data:image/png;base64,iVBORw...';\r\n * loader.logoWidth = 15;\r\n * loader.logoHeight = 14;\r\n *\r\n * // The background color can be changed like so by supplying a valid CSS color string\r\n *\r\n * loader.backgroundColor = 'red'\r\n * loader.backgroundColor = '#176BAA'\r\n *\r\n * // To build a completely new button\r\n * loader.startButtonFactory = () => {\r\n * let myButton = document.createElement('button');\r\n * myButton.textContent = 'The best button';\r\n * return myButton;\r\n * };\r\n *\r\n * engine.start(loader).then(() => {});\r\n * ```\r\n */\r\nclass Loader extends Class {\r\n /**\r\n * @param loadables Optionally provide the list of resources you want to load at constructor time\r\n */\r\n constructor(loadables) {\r\n super();\r\n this.canvas = new Canvas({\r\n filtering: ImageFiltering.Blended,\r\n smoothing: true,\r\n cache: true,\r\n draw: this.draw.bind(this)\r\n });\r\n this._resourceList = [];\r\n this._index = 0;\r\n this._playButtonShown = false;\r\n this._resourceCount = 0;\r\n this._numLoaded = 0;\r\n this._progressCounts = {};\r\n this._totalCounts = {};\r\n // logo drawing stuff\r\n // base64 string encoding of the excalibur logo (logo-white.png)\r\n this.logo = Loader_logo;\r\n this.logoWidth = 468;\r\n this.logoHeight = 118;\r\n /**\r\n * Gets or sets the color of the loading bar, default is [[Color.White]]\r\n */\r\n this.loadingBarColor = Color.White;\r\n /**\r\n * Gets or sets the background color of the loader as a hex string\r\n */\r\n this.backgroundColor = '#176BAA';\r\n this.suppressPlayButton = false;\r\n /** Loads the css from Loader.css */\r\n this._playButtonStyles = Loader_0/* default.toString */.Z.toString();\r\n /**\r\n * Get/set play button text\r\n */\r\n this.playButtonText = 'Play game';\r\n /**\r\n * Return a html button element for excalibur to use as a play button\r\n */\r\n this.startButtonFactory = () => {\r\n let buttonElement = document.getElementById('excalibur-play');\r\n if (!buttonElement) {\r\n buttonElement = document.createElement('button');\r\n }\r\n buttonElement.id = 'excalibur-play';\r\n buttonElement.textContent = this.playButtonText;\r\n buttonElement.style.display = 'none';\r\n return buttonElement;\r\n };\r\n this._loadingFuture = new Future();\r\n if (loadables) {\r\n this.addResources(loadables);\r\n }\r\n }\r\n get _image() {\r\n if (!this._imageElement) {\r\n this._imageElement = new Image();\r\n this._imageElement.src = this.logo;\r\n }\r\n return this._imageElement;\r\n }\r\n get playButtonRootElement() {\r\n return this._playButtonRootElement;\r\n }\r\n get playButtonElement() {\r\n return this._playButtonElement;\r\n }\r\n get _playButton() {\r\n const existingRoot = document.getElementById('excalibur-play-root');\r\n if (existingRoot) {\r\n this._playButtonRootElement = existingRoot;\r\n }\r\n if (!this._playButtonRootElement) {\r\n this._playButtonRootElement = document.createElement('div');\r\n this._playButtonRootElement.id = 'excalibur-play-root';\r\n this._playButtonRootElement.style.position = 'absolute';\r\n document.body.appendChild(this._playButtonRootElement);\r\n }\r\n if (!this._styleBlock) {\r\n this._styleBlock = document.createElement('style');\r\n this._styleBlock.textContent = this._playButtonStyles;\r\n document.head.appendChild(this._styleBlock);\r\n }\r\n if (!this._playButtonElement) {\r\n this._playButtonElement = this.startButtonFactory();\r\n this._playButtonRootElement.appendChild(this._playButtonElement);\r\n }\r\n return this._playButtonElement;\r\n }\r\n wireEngine(engine) {\r\n this._engine = engine;\r\n this.canvas.width = this._engine.canvas.width;\r\n this.canvas.height = this._engine.canvas.height;\r\n }\r\n /**\r\n * Add a resource to the loader to load\r\n * @param loadable Resource to add\r\n */\r\n addResource(loadable) {\r\n const key = this._index++;\r\n this._resourceList.push(loadable);\r\n this._progressCounts[key] = 0;\r\n this._totalCounts[key] = 1;\r\n this._resourceCount++;\r\n }\r\n /**\r\n * Add a list of resources to the loader to load\r\n * @param loadables The list of resources to load\r\n */\r\n addResources(loadables) {\r\n let i = 0;\r\n const len = loadables.length;\r\n for (i; i < len; i++) {\r\n this.addResource(loadables[i]);\r\n }\r\n }\r\n /**\r\n * Returns true if the loader has completely loaded all resources\r\n */\r\n isLoaded() {\r\n return this._numLoaded === this._resourceCount;\r\n }\r\n /**\r\n * Shows the play button and returns a promise that resolves when clicked\r\n */\r\n async showPlayButton() {\r\n var _a, _b;\r\n if (this.suppressPlayButton) {\r\n this.hidePlayButton();\r\n // Delay is to give the logo a chance to show, otherwise don't delay\r\n await delay(500, (_a = this._engine) === null || _a === void 0 ? void 0 : _a.clock);\r\n }\r\n else {\r\n const resizeHandler = () => {\r\n this._positionPlayButton();\r\n };\r\n if ((_b = this._engine) === null || _b === void 0 ? void 0 : _b.browser) {\r\n this._engine.browser.window.on('resize', resizeHandler);\r\n }\r\n this._playButtonShown = true;\r\n this._playButton.style.display = 'block';\r\n document.body.addEventListener('keyup', (evt) => {\r\n if (evt.key === 'Enter') {\r\n this._playButton.click();\r\n }\r\n });\r\n this._positionPlayButton();\r\n const playButtonClicked = new Promise((resolve) => {\r\n const startButtonHandler = (e) => {\r\n var _a;\r\n // We want to stop propagation to keep bubbling to the engine pointer handlers\r\n e.stopPropagation();\r\n // Hide Button after click\r\n this.hidePlayButton();\r\n if ((_a = this._engine) === null || _a === void 0 ? void 0 : _a.browser) {\r\n this._engine.browser.window.off('resize', resizeHandler);\r\n }\r\n resolve();\r\n };\r\n this._playButton.addEventListener('click', startButtonHandler);\r\n this._playButton.addEventListener('touchend', startButtonHandler);\r\n this._playButton.addEventListener('pointerup', startButtonHandler);\r\n });\r\n return await playButtonClicked;\r\n }\r\n }\r\n hidePlayButton() {\r\n this._playButtonShown = false;\r\n this._playButton.style.display = 'none';\r\n }\r\n /**\r\n * Clean up generated elements for the loader\r\n */\r\n dispose() {\r\n if (this._playButtonRootElement.parentElement) {\r\n this._playButtonRootElement.removeChild(this._playButtonElement);\r\n document.body.removeChild(this._playButtonRootElement);\r\n document.head.removeChild(this._styleBlock);\r\n this._playButtonRootElement = null;\r\n this._playButtonElement = null;\r\n this._styleBlock = null;\r\n }\r\n }\r\n update(_engine, _delta) {\r\n // override me\r\n }\r\n areResourcesLoaded() {\r\n return this._loadingFuture.promise;\r\n }\r\n /**\r\n * Begin loading all of the supplied resources, returning a promise\r\n * that resolves when loading of all is complete AND the user has clicked the \"Play button\"\r\n */\r\n async load() {\r\n var _a, _b;\r\n await ((_a = this._image) === null || _a === void 0 ? void 0 : _a.decode()); // decode logo if it exists\r\n this.canvas.flagDirty();\r\n await Promise.all(this._resourceList.map(async (r) => {\r\n await r.load().finally(() => {\r\n // capture progress\r\n this._numLoaded++;\r\n this.canvas.flagDirty();\r\n });\r\n }));\r\n // Wire all sound to the engine\r\n for (const resource of this._resourceList) {\r\n if (resource instanceof Sound) {\r\n resource.wireEngine(this._engine);\r\n }\r\n }\r\n this._loadingFuture.resolve();\r\n // short delay in showing the button for aesthetics\r\n await delay(200, (_b = this._engine) === null || _b === void 0 ? void 0 : _b.clock);\r\n this.canvas.flagDirty();\r\n await this.showPlayButton();\r\n // Unlock browser AudioContext in after user gesture\r\n // See: https://github.com/excaliburjs/Excalibur/issues/262\r\n // See: https://github.com/excaliburjs/Excalibur/issues/1031\r\n await WebAudio.unlock();\r\n return (this.data = this._resourceList);\r\n }\r\n markResourceComplete() {\r\n this._numLoaded++;\r\n }\r\n /**\r\n * Returns the progress of the loader as a number between [0, 1] inclusive.\r\n */\r\n get progress() {\r\n return this._resourceCount > 0 ? clamp(this._numLoaded, 0, this._resourceCount) / this._resourceCount : 1;\r\n }\r\n _positionPlayButton() {\r\n if (this._engine) {\r\n const screenHeight = this._engine.screen.viewport.height;\r\n const screenWidth = this._engine.screen.viewport.width;\r\n if (this._playButtonRootElement) {\r\n const left = this._engine.canvas.offsetLeft;\r\n const top = this._engine.canvas.offsetTop;\r\n const buttonWidth = this._playButton.clientWidth;\r\n const buttonHeight = this._playButton.clientHeight;\r\n if (this.playButtonPosition) {\r\n this._playButtonRootElement.style.left = `${this.playButtonPosition.x}px`;\r\n this._playButtonRootElement.style.top = `${this.playButtonPosition.y}px`;\r\n }\r\n else {\r\n this._playButtonRootElement.style.left = `${left + screenWidth / 2 - buttonWidth / 2}px`;\r\n this._playButtonRootElement.style.top = `${top + screenHeight / 2 - buttonHeight / 2 + 100}px`;\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Loader draw function. Draws the default Excalibur loading screen.\r\n * Override `logo`, `logoWidth`, `logoHeight` and `backgroundColor` properties\r\n * to customize the drawing, or just override entire method.\r\n */\r\n draw(ctx) {\r\n const canvasHeight = this._engine.canvasHeight / this._engine.pixelRatio;\r\n const canvasWidth = this._engine.canvasWidth / this._engine.pixelRatio;\r\n this._positionPlayButton();\r\n ctx.fillStyle = this.backgroundColor;\r\n ctx.fillRect(0, 0, canvasWidth, canvasHeight);\r\n let logoY = canvasHeight / 2;\r\n const width = Math.min(this.logoWidth, canvasWidth * 0.75);\r\n let logoX = canvasWidth / 2 - width / 2;\r\n if (this.logoPosition) {\r\n logoX = this.logoPosition.x;\r\n logoY = this.logoPosition.y;\r\n }\r\n const imageHeight = Math.floor(width * (this.logoHeight / this.logoWidth)); // OG height/width factor\r\n const oldAntialias = this._engine.getAntialiasing();\r\n this._engine.setAntialiasing(true);\r\n if (!this.logoPosition) {\r\n ctx.drawImage(this._image, 0, 0, this.logoWidth, this.logoHeight, logoX, logoY - imageHeight - 20, width, imageHeight);\r\n }\r\n else {\r\n ctx.drawImage(this._image, 0, 0, this.logoWidth, this.logoHeight, logoX, logoY, width, imageHeight);\r\n }\r\n // loading box\r\n if (!this.suppressPlayButton && this._playButtonShown) {\r\n this._engine.setAntialiasing(oldAntialias);\r\n return;\r\n }\r\n let loadingX = logoX;\r\n let loadingY = logoY;\r\n if (this.loadingBarPosition) {\r\n loadingX = this.loadingBarPosition.x;\r\n loadingY = this.loadingBarPosition.y;\r\n }\r\n ctx.lineWidth = 2;\r\n roundRect(ctx, loadingX, loadingY, width, 20, 10, this.loadingBarColor);\r\n const progress = width * this.progress;\r\n const margin = 5;\r\n const progressWidth = progress - margin * 2;\r\n const height = 20 - margin * 2;\r\n roundRect(ctx, loadingX + margin, loadingY + margin, progressWidth > 10 ? progressWidth : 10, height, 5, null, this.loadingBarColor);\r\n this._engine.setAntialiasing(oldAntialias);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Util/Detector.ts\n\r\n/**\r\n * This is the list of features that will be used to log the supported\r\n * features to the console when Detector.logBrowserFeatures() is called.\r\n */\r\nconst REPORTED_FEATURES = {\r\n webgl: 'WebGL',\r\n webaudio: 'WebAudio',\r\n gamepadapi: 'Gamepad API'\r\n};\r\n/**\r\n * Excalibur internal feature detection helper class\r\n */\r\nclass Detector {\r\n constructor() {\r\n this._features = null;\r\n this.failedTests = [];\r\n // critical browser features required for ex to run\r\n this._criticalTests = {\r\n // Test canvas/2d context support\r\n canvasSupport: function () {\r\n const elem = document.createElement('canvas');\r\n return !!(elem.getContext && elem.getContext('2d'));\r\n },\r\n // Test array buffer support ex uses for downloading binary data\r\n arrayBufferSupport: function () {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open('GET', '/');\r\n try {\r\n xhr.responseType = 'arraybuffer';\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n return xhr.responseType === 'arraybuffer';\r\n },\r\n // Test data urls ex uses for sprites\r\n dataUrlSupport: function () {\r\n const canvas = document.createElement('canvas');\r\n return canvas.toDataURL('image/png').indexOf('data:image/png') === 0;\r\n },\r\n // Test object url support for loading\r\n objectUrlSupport: function () {\r\n return 'URL' in window && 'revokeObjectURL' in URL && 'createObjectURL' in URL;\r\n },\r\n // RGBA support for colors\r\n rgbaSupport: function () {\r\n const style = document.createElement('a').style;\r\n style.cssText = 'background-color:rgba(150,255,150,.5)';\r\n return ('' + style.backgroundColor).indexOf('rgba') > -1;\r\n }\r\n };\r\n // warnings excalibur performance will be degraded\r\n this._warningTest = {\r\n webAudioSupport: function () {\r\n return !!(window.AudioContext ||\r\n window.webkitAudioContext ||\r\n window.mozAudioContext ||\r\n window.msAudioContext ||\r\n window.oAudioContext);\r\n },\r\n webglSupport: function () {\r\n const elem = document.createElement('canvas');\r\n return !!(elem.getContext && elem.getContext('webgl'));\r\n }\r\n };\r\n this._features = this._loadBrowserFeatures();\r\n }\r\n /**\r\n * Returns a map of currently supported browser features. This method\r\n * treats the features as a singleton and will only calculate feature\r\n * support if it has not previously been done.\r\n */\r\n getBrowserFeatures() {\r\n if (this._features === null) {\r\n this._features = this._loadBrowserFeatures();\r\n }\r\n return this._features;\r\n }\r\n /**\r\n * Report on non-critical browser support for debugging purposes.\r\n * Use native browser console colors for visibility.\r\n */\r\n logBrowserFeatures() {\r\n let msg = '%cSUPPORTED BROWSER FEATURES\\n==========================%c\\n';\r\n const args = ['font-weight: bold; color: navy', 'font-weight: normal; color: inherit'];\r\n const supported = this.getBrowserFeatures();\r\n for (const feature of Object.keys(REPORTED_FEATURES)) {\r\n if (supported[feature]) {\r\n msg += '(%c\\u2713%c)'; // (✓)\r\n args.push('font-weight: bold; color: green');\r\n args.push('font-weight: normal; color: inherit');\r\n }\r\n else {\r\n msg += '(%c\\u2717%c)'; // (✗)\r\n args.push('font-weight: bold; color: red');\r\n args.push('font-weight: normal; color: inherit');\r\n }\r\n msg += ' ' + REPORTED_FEATURES[feature] + '\\n';\r\n }\r\n args.unshift(msg);\r\n // eslint-disable-next-line no-console\r\n console.log.apply(console, args);\r\n }\r\n /**\r\n * Executes several IIFE's to get a constant reference to supported\r\n * features within the current execution context.\r\n */\r\n _loadBrowserFeatures() {\r\n return {\r\n // IIFE to check canvas support\r\n canvas: (() => {\r\n return this._criticalTests.canvasSupport();\r\n })(),\r\n // IIFE to check arraybuffer support\r\n arraybuffer: (() => {\r\n return this._criticalTests.arrayBufferSupport();\r\n })(),\r\n // IIFE to check dataurl support\r\n dataurl: (() => {\r\n return this._criticalTests.dataUrlSupport();\r\n })(),\r\n // IIFE to check objecturl support\r\n objecturl: (() => {\r\n return this._criticalTests.objectUrlSupport();\r\n })(),\r\n // IIFE to check rgba support\r\n rgba: (() => {\r\n return this._criticalTests.rgbaSupport();\r\n })(),\r\n // IIFE to check webaudio support\r\n webaudio: (() => {\r\n return this._warningTest.webAudioSupport();\r\n })(),\r\n // IIFE to check webgl support\r\n webgl: (() => {\r\n return this._warningTest.webglSupport();\r\n })(),\r\n // IIFE to check gamepadapi support\r\n gamepadapi: (() => {\r\n return !!navigator.getGamepads;\r\n })()\r\n };\r\n }\r\n test() {\r\n // Critical test will for ex not to run\r\n let failedCritical = false;\r\n for (const test in this._criticalTests) {\r\n if (!this._criticalTests[test].call(this)) {\r\n this.failedTests.push(test);\r\n Logger.getInstance().error('Critical browser feature missing, Excalibur requires:', test);\r\n failedCritical = true;\r\n }\r\n }\r\n if (failedCritical) {\r\n return false;\r\n }\r\n // Warning tests do not for ex to return false to compatibility\r\n for (const warning in this._warningTest) {\r\n if (!this._warningTest[warning]()) {\r\n Logger.getInstance().warn('Warning browser feature missing, Excalibur will have reduced performance:', warning);\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/CollisionType.ts\n/**\r\n * An enum that describes the types of collisions bodies can participate in\r\n */\r\nvar CollisionType;\r\n(function (CollisionType) {\r\n /**\r\n * Bodies with the `PreventCollision` setting do not participate in any\r\n * collisions and do not raise collision events.\r\n */\r\n CollisionType[\"PreventCollision\"] = \"PreventCollision\";\r\n /**\r\n * Bodies with the `Passive` setting only raise collision events, but are not\r\n * influenced or moved by other bodies and do not influence or move other bodies.\r\n * This is useful for use in trigger type behavior.\r\n */\r\n CollisionType[\"Passive\"] = \"Passive\";\r\n /**\r\n * Bodies with the `Active` setting raise collision events and participate\r\n * in collisions with other bodies and will be push or moved by bodies sharing\r\n * the `Active` or `Fixed` setting.\r\n */\r\n CollisionType[\"Active\"] = \"Active\";\r\n /**\r\n * Bodies with the `Fixed` setting raise collision events and participate in\r\n * collisions with other bodies. Actors with the `Fixed` setting will not be\r\n * pushed or moved by other bodies sharing the `Fixed`. Think of Fixed\r\n * bodies as \"immovable/unstoppable\" objects. If two `Fixed` bodies meet they will\r\n * not be pushed or moved by each other, they will not interact except to throw\r\n * collision events.\r\n */\r\n CollisionType[\"Fixed\"] = \"Fixed\";\r\n})(CollisionType || (CollisionType = {}));\r\n\n;// CONCATENATED MODULE: ./Util/Decorators.ts\n\r\n\r\nconst maxMessages = 5;\r\nconst obsoleteMessage = {};\r\nconst resetObsoleteCounter = () => {\r\n for (const message in obsoleteMessage) {\r\n obsoleteMessage[message] = 0;\r\n }\r\n};\r\nconst logMessage = (message, options) => {\r\n const suppressObsoleteMessages = Flags.isEnabled('suppress-obsolete-message');\r\n if (obsoleteMessage[message] < maxMessages && !suppressObsoleteMessages) {\r\n Logger.getInstance().warn(message);\r\n // tslint:disable-next-line: no-console\r\n if (console.trace && options.showStackTrace) {\r\n // tslint:disable-next-line: no-console\r\n console.trace();\r\n }\r\n }\r\n obsoleteMessage[message]++;\r\n};\r\n/**\r\n * Obsolete decorator for marking Excalibur methods obsolete, you can optionally specify a custom message and/or alternate replacement\r\n * method do the deprecated one. Inspired by https://github.com/jayphelps/core-decorators.js\r\n */\r\nfunction obsolete(options) {\r\n options = {\r\n message: 'This feature will be removed in future versions of Excalibur.',\r\n alternateMethod: null,\r\n showStackTrace: false,\r\n ...options\r\n };\r\n return function (target, property, descriptor) {\r\n if (descriptor &&\r\n !(typeof descriptor.value === 'function' || typeof descriptor.get === 'function' || typeof descriptor.set === 'function')) {\r\n throw new SyntaxError('Only classes/functions/getters/setters can be marked as obsolete');\r\n }\r\n const methodSignature = `${target.name || ''}${target.name && property ? '.' : ''}${property ? property : ''}`;\r\n const message = `${methodSignature} is marked obsolete: ${options.message}` +\r\n (options.alternateMethod ? ` Use ${options.alternateMethod} instead` : '');\r\n if (!obsoleteMessage[message]) {\r\n obsoleteMessage[message] = 0;\r\n }\r\n // If descriptor is null it is a class\r\n const method = descriptor ? { ...descriptor } : target;\r\n if (!descriptor) {\r\n // with es2015 classes we need to change our decoration tactic\r\n class DecoratedClass extends method {\r\n constructor(...args) {\r\n logMessage(message, options);\r\n super(...args);\r\n }\r\n }\r\n return DecoratedClass;\r\n }\r\n if (descriptor && descriptor.value) {\r\n method.value = function () {\r\n logMessage(message, options);\r\n return descriptor.value.apply(this, arguments);\r\n };\r\n return method;\r\n }\r\n if (descriptor && descriptor.get) {\r\n method.get = function () {\r\n logMessage(message, options);\r\n return descriptor.get.apply(this, arguments);\r\n };\r\n }\r\n if (descriptor && descriptor.set) {\r\n method.set = function () {\r\n logMessage(message, options);\r\n return descriptor.set.apply(this, arguments);\r\n };\r\n }\r\n return method;\r\n };\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Physics.ts\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\n\r\n\r\n/**\r\n * Possible collision resolution strategies\r\n *\r\n * The default is [[CollisionResolutionStrategy.Arcade]] which performs simple axis aligned arcade style physics. This is useful for things\r\n * like platformers or top down games.\r\n *\r\n * More advanced rigid body physics are enabled by setting [[CollisionResolutionStrategy.Realistic]] which allows for complicated\r\n * simulated physical interactions.\r\n */\r\nvar CollisionResolutionStrategy;\r\n(function (CollisionResolutionStrategy) {\r\n CollisionResolutionStrategy[\"Arcade\"] = \"arcade\";\r\n CollisionResolutionStrategy[\"Realistic\"] = \"realistic\";\r\n})(CollisionResolutionStrategy || (CollisionResolutionStrategy = {}));\r\n/**\r\n * Possible broadphase collision pair identification strategies\r\n *\r\n * The default strategy is [[BroadphaseStrategy.DynamicAABBTree]] which uses a binary tree of axis-aligned bounding boxes to identify\r\n * potential collision pairs which is O(nlog(n)) faster.\r\n */\r\nvar BroadphaseStrategy;\r\n(function (BroadphaseStrategy) {\r\n BroadphaseStrategy[BroadphaseStrategy[\"DynamicAABBTree\"] = 0] = \"DynamicAABBTree\";\r\n})(BroadphaseStrategy || (BroadphaseStrategy = {}));\r\n/**\r\n * Possible numerical integrators for position and velocity\r\n */\r\nvar Integrator;\r\n(function (Integrator) {\r\n Integrator[Integrator[\"Euler\"] = 0] = \"Euler\";\r\n})(Integrator || (Integrator = {}));\r\n/**\r\n * The [[Physics]] object is the global configuration object for all Excalibur physics.\r\n */\r\n/* istanbul ignore next */\r\nclass Physics {\r\n static get gravity() {\r\n return Physics.acc;\r\n }\r\n static set gravity(v) {\r\n Physics.acc = v;\r\n }\r\n /**\r\n * Configures Excalibur to use \"arcade\" physics. Arcade physics which performs simple axis aligned arcade style physics.\r\n */\r\n static useArcadePhysics() {\r\n Physics.collisionResolutionStrategy = CollisionResolutionStrategy.Arcade;\r\n }\r\n /**\r\n * Configures Excalibur to use rigid body physics. Rigid body physics allows for complicated\r\n * simulated physical interactions.\r\n */\r\n static useRealisticPhysics() {\r\n Physics.collisionResolutionStrategy = CollisionResolutionStrategy.Realistic;\r\n }\r\n static get dynamicTreeVelocityMultiplyer() {\r\n return Physics.dynamicTreeVelocityMultiplier;\r\n }\r\n static set dynamicTreeVelocityMultiplyer(value) {\r\n Physics.dynamicTreeVelocityMultiplier = value;\r\n }\r\n}\r\n/**\r\n * Global acceleration that is applied to all vanilla actors that have a [[CollisionType.Active|active]] collision type.\r\n * Global acceleration won't effect [[Label|labels]], [[ScreenElement|ui actors]], or [[Trigger|triggers]] in Excalibur.\r\n *\r\n * This is a great way to globally simulate effects like gravity.\r\n */\r\nPhysics.acc = new Vector(0, 0);\r\n/**\r\n * Globally switches all Excalibur physics behavior on or off.\r\n */\r\nPhysics.enabled = true;\r\n/**\r\n * Gets or sets the broadphase pair identification strategy.\r\n *\r\n * The default strategy is [[BroadphaseStrategy.DynamicAABBTree]] which uses a binary tree of axis-aligned bounding boxes to identify\r\n * potential collision pairs which is O(nlog(n)) faster.\r\n */\r\nPhysics.broadphaseStrategy = BroadphaseStrategy.DynamicAABBTree;\r\n/**\r\n * Gets or sets the global collision resolution strategy (narrowphase).\r\n *\r\n * The default is [[CollisionResolutionStrategy.Arcade]] which performs simple axis aligned arcade style physics.\r\n *\r\n * More advanced rigid body physics are enabled by setting [[CollisionResolutionStrategy.Realistic]] which allows for complicated\r\n * simulated physical interactions.\r\n */\r\nPhysics.collisionResolutionStrategy = CollisionResolutionStrategy.Arcade;\r\n/**\r\n * The default mass to use if none is specified\r\n */\r\nPhysics.defaultMass = 10;\r\n/**\r\n * Gets or sets the position and velocity positional integrator, currently only Euler is supported.\r\n */\r\nPhysics.integrator = Integrator.Euler;\r\n/**\r\n * Factor to add to the RigidBody BoundingBox, bounding box (dimensions += vel * dynamicTreeVelocityMultiplier);\r\n */\r\nPhysics.dynamicTreeVelocityMultiplier = 2;\r\n/**\r\n * Pad RigidBody BoundingBox by a constant amount\r\n */\r\nPhysics.boundsPadding = 5;\r\n/**\r\n * Number of position iterations (overlap) to run in the solver\r\n */\r\nPhysics.positionIterations = 3;\r\n/**\r\n * Number of velocity iteration (response) to run in the solver\r\n */\r\nPhysics.velocityIterations = 8;\r\n/**\r\n * Amount of overlap to tolerate in pixels\r\n */\r\nPhysics.slop = 1;\r\n/**\r\n * Amount of positional overlap correction to apply each position iteration of the solver\r\n * O - meaning no correction, 1 - meaning correct all overlap\r\n */\r\nPhysics.steeringFactor = 0.2;\r\n/**\r\n * Warm start set to true re-uses impulses from previous frames back in the solver\r\n */\r\nPhysics.warmStart = true;\r\n/**\r\n * By default bodies do not sleep\r\n */\r\nPhysics.bodiesCanSleepByDefault = false;\r\n/**\r\n * Surface epsilon is used to help deal with surface penetration\r\n */\r\nPhysics.surfaceEpsilon = 0.1;\r\nPhysics.sleepEpsilon = 0.07;\r\nPhysics.wakeThreshold = Physics.sleepEpsilon * 3;\r\nPhysics.sleepBias = 0.9;\r\n/**\r\n * Enable fast moving body checking, this enables checking for collision pairs via raycast for fast moving objects to prevent\r\n * bodies from tunneling through one another.\r\n */\r\nPhysics.checkForFastBodies = true;\r\n/**\r\n * Disable minimum fast moving body raycast, by default if ex.Physics.checkForFastBodies = true Excalibur will only check if the\r\n * body is moving at least half of its minimum dimension in an update. If ex.Physics.disableMinimumSpeedForFastBody is set to true,\r\n * Excalibur will always perform the fast body raycast regardless of speed.\r\n */\r\nPhysics.disableMinimumSpeedForFastBody = false;\r\n__decorate([\r\n obsolete({\r\n message: 'Alias for incorrect spelling used in older versions, will be removed in v0.25.0',\r\n alternateMethod: 'dynamicTreeVelocityMultiplier'\r\n })\r\n], Physics, \"dynamicTreeVelocityMultiplyer\", null);\r\n\n;// CONCATENATED MODULE: ./Math/coord-plane.ts\n/**\r\n * Enum representing the coordinate plane for the position 2D vector in the [[TransformComponent]]\r\n */\r\nvar CoordPlane;\r\n(function (CoordPlane) {\r\n /**\r\n * The world coordinate plane (default) represents world space, any entities drawn with world\r\n * space move when the camera moves.\r\n */\r\n CoordPlane[\"World\"] = \"world\";\r\n /**\r\n * The screen coordinate plane represents screen space, entities drawn in screen space are pinned\r\n * to screen coordinates ignoring the camera.\r\n */\r\n CoordPlane[\"Screen\"] = \"screen\";\r\n})(CoordPlane || (CoordPlane = {}));\r\n\n;// CONCATENATED MODULE: ./Math/vector-view.ts\n\r\nclass VectorView extends Vector {\r\n constructor(options) {\r\n super(0, 0);\r\n this._getX = options.getX;\r\n this._getY = options.getY;\r\n this._setX = options.setX;\r\n this._setY = options.setY;\r\n }\r\n get x() {\r\n return (this._x = this._getX());\r\n }\r\n set x(val) {\r\n this._setX(val);\r\n this._x = val;\r\n }\r\n get y() {\r\n return (this._y = this._getY());\r\n }\r\n set y(val) {\r\n this._setY(val);\r\n this._y = val;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Math/watch-vector.ts\n\r\n/**\r\n * Wraps a vector and watches for changes in the x/y, modifies the original vector.\r\n */\r\nclass WatchVector extends Vector {\r\n constructor(original, change) {\r\n super(original.x, original.y);\r\n this.original = original;\r\n this.change = change;\r\n }\r\n get x() {\r\n return this._x = this.original.x;\r\n }\r\n set x(newX) {\r\n this.change(newX, this._y);\r\n this._x = this.original.x = newX;\r\n }\r\n get y() {\r\n return this._y = this.original.y;\r\n }\r\n set y(newY) {\r\n this.change(this._x, newY);\r\n this._y = this.original.y = newY;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Math/transform.ts\n\r\n\r\n\r\n\r\n\r\nclass Transform {\r\n constructor() {\r\n this._parent = null;\r\n this._children = [];\r\n this._pos = vec(0, 0);\r\n this._rotation = 0;\r\n this._scale = vec(1, 1);\r\n this._isDirty = false;\r\n this._isInverseDirty = false;\r\n this._matrix = AffineMatrix.identity();\r\n this._inverse = AffineMatrix.identity();\r\n }\r\n get parent() {\r\n return this._parent;\r\n }\r\n set parent(transform) {\r\n if (this._parent) {\r\n const index = this._parent._children.indexOf(this);\r\n if (index > -1) {\r\n this._parent._children.splice(index, 1);\r\n }\r\n }\r\n this._parent = transform;\r\n if (this._parent) {\r\n this._parent._children.push(this);\r\n }\r\n this.flagDirty();\r\n }\r\n get children() {\r\n return this._children;\r\n }\r\n set pos(v) {\r\n if (!v.equals(this._pos)) {\r\n this._pos.x = v.x;\r\n this._pos.y = v.y;\r\n this.flagDirty();\r\n }\r\n }\r\n get pos() {\r\n return new WatchVector(this._pos, (x, y) => {\r\n if (x !== this._pos.x || y !== this._pos.y) {\r\n this.flagDirty();\r\n }\r\n });\r\n }\r\n set globalPos(v) {\r\n let localPos = v.clone();\r\n if (this.parent) {\r\n localPos = this.parent.inverse.multiply(v);\r\n }\r\n if (!localPos.equals(this._pos)) {\r\n this._pos = localPos;\r\n this.flagDirty();\r\n }\r\n }\r\n get globalPos() {\r\n return new VectorView({\r\n getX: () => this.matrix.data[4],\r\n getY: () => this.matrix.data[5],\r\n setX: (x) => {\r\n if (this.parent) {\r\n const { x: newX } = this.parent.inverse.multiply(vec(x, this.pos.y));\r\n this.pos.x = newX;\r\n }\r\n else {\r\n this.pos.x = x;\r\n }\r\n if (x !== this.matrix.data[4]) {\r\n this.flagDirty();\r\n }\r\n },\r\n setY: (y) => {\r\n if (this.parent) {\r\n const { y: newY } = this.parent.inverse.multiply(vec(this.pos.x, y));\r\n this.pos.y = newY;\r\n }\r\n else {\r\n this.pos.y = y;\r\n }\r\n if (y !== this.matrix.data[5]) {\r\n this.flagDirty();\r\n }\r\n }\r\n });\r\n }\r\n set rotation(rotation) {\r\n const canonRotation = canonicalizeAngle(rotation);\r\n if (canonRotation !== this._rotation) {\r\n this.flagDirty();\r\n }\r\n this._rotation = canonRotation;\r\n }\r\n get rotation() {\r\n return this._rotation;\r\n }\r\n set globalRotation(rotation) {\r\n let inverseRotation = 0;\r\n if (this.parent) {\r\n inverseRotation = this.parent.globalRotation;\r\n }\r\n const canonRotation = canonicalizeAngle(rotation + inverseRotation);\r\n if (canonRotation !== this._rotation) {\r\n this.flagDirty();\r\n }\r\n this._rotation = canonRotation;\r\n }\r\n get globalRotation() {\r\n if (this.parent) {\r\n return this.matrix.getRotation();\r\n }\r\n return this.rotation;\r\n }\r\n set scale(v) {\r\n if (!v.equals(this._scale)) {\r\n this._scale.x = v.x;\r\n this._scale.y = v.y;\r\n this.flagDirty();\r\n }\r\n }\r\n get scale() {\r\n return new WatchVector(this._scale, (x, y) => {\r\n if (x !== this._scale.x || y !== this._scale.y) {\r\n this.flagDirty();\r\n }\r\n });\r\n }\r\n set globalScale(v) {\r\n let inverseScale = vec(1, 1);\r\n if (this.parent) {\r\n inverseScale = this.parent.globalScale;\r\n }\r\n this.scale = v.scale(vec(1 / inverseScale.x, 1 / inverseScale.y));\r\n }\r\n get globalScale() {\r\n return new VectorView({\r\n getX: () => this.parent ? this.matrix.getScaleX() : this.scale.x,\r\n getY: () => this.parent ? this.matrix.getScaleY() : this.scale.y,\r\n setX: (x) => {\r\n if (this.parent) {\r\n const globalScaleX = this.parent.globalScale.x;\r\n this.scale.x = x / globalScaleX;\r\n }\r\n else {\r\n this.scale.x = x;\r\n }\r\n },\r\n setY: (y) => {\r\n if (this.parent) {\r\n const globalScaleY = this.parent.globalScale.y;\r\n this.scale.y = y / globalScaleY;\r\n }\r\n else {\r\n this.scale.y = y;\r\n }\r\n }\r\n });\r\n }\r\n get matrix() {\r\n if (this._isDirty) {\r\n if (this.parent === null) {\r\n this._matrix = this._calculateMatrix();\r\n }\r\n else {\r\n this._matrix = this.parent.matrix.multiply(this._calculateMatrix());\r\n }\r\n this._isDirty = false;\r\n }\r\n return this._matrix;\r\n }\r\n get inverse() {\r\n if (this._isInverseDirty) {\r\n this._inverse = this.matrix.inverse();\r\n this._isInverseDirty = false;\r\n }\r\n return this._inverse;\r\n }\r\n _calculateMatrix() {\r\n const matrix = AffineMatrix.identity()\r\n .translate(this.pos.x, this.pos.y)\r\n .rotate(this.rotation)\r\n .scale(this.scale.x, this.scale.y);\r\n return matrix;\r\n }\r\n flagDirty() {\r\n this._isDirty = true;\r\n this._isInverseDirty = true;\r\n for (let i = 0; i < this._children.length; i++) {\r\n this._children[i].flagDirty();\r\n }\r\n }\r\n apply(point) {\r\n return this.matrix.multiply(point);\r\n }\r\n applyInverse(point) {\r\n return this.inverse.multiply(point);\r\n }\r\n setTransform(pos, rotation, scale) {\r\n this._pos.x = pos.x;\r\n this._pos.y = pos.y;\r\n this._rotation = canonicalizeAngle(rotation);\r\n this._scale.x = scale.x;\r\n this._scale.y = scale.y;\r\n this.flagDirty();\r\n }\r\n clone(dest) {\r\n const target = dest !== null && dest !== void 0 ? dest : new Transform();\r\n this._pos.clone(target._pos);\r\n target._rotation = this._rotation;\r\n this._scale.clone(target._scale);\r\n target.flagDirty();\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./EntityComponentSystem/Component.ts\n/**\r\n * Type guard to check if a component implements clone\r\n * @param x\r\n */\r\nfunction hasClone(x) {\r\n return !!(x === null || x === void 0 ? void 0 : x.clone);\r\n}\r\n/**\r\n * Components are containers for state in Excalibur, the are meant to convey capabilities that an Entity possesses\r\n *\r\n * Implementations of Component must have a zero-arg constructor to support dependencies\r\n *\r\n * ```typescript\r\n * class MyComponent extends ex.Component<'my'> {\r\n * public readonly type = 'my';\r\n * // zero arg support required if you want to use component dependencies\r\n * constructor(public optionalPos?: ex.Vector) {}\r\n * }\r\n * ```\r\n */\r\nclass Component {\r\n constructor() {\r\n /**\r\n * Current owning [[Entity]], if any, of this component. Null if not added to any [[Entity]]\r\n */\r\n this.owner = null;\r\n }\r\n /**\r\n * Clones any properties on this component, if that property value has a `clone()` method it will be called\r\n */\r\n clone() {\r\n const newComponent = new this.constructor();\r\n for (const prop in this) {\r\n if (this.hasOwnProperty(prop)) {\r\n const val = this[prop];\r\n if (hasClone(val) && prop !== 'owner' && prop !== 'clone') {\r\n newComponent[prop] = val.clone();\r\n }\r\n else {\r\n newComponent[prop] = val;\r\n }\r\n }\r\n }\r\n return newComponent;\r\n }\r\n}\r\n/**\r\n * Tag components are a way of tagging a component with label and a simple value\r\n *\r\n * For example:\r\n *\r\n * ```typescript\r\n * const isOffscreen = new TagComponent('offscreen');\r\n * entity.addComponent(isOffscreen);\r\n * entity.tags.includes\r\n * ```\r\n */\r\nclass TagComponent extends Component {\r\n constructor(type, value) {\r\n super();\r\n this.type = type;\r\n this.value = value;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Util/Observable.ts\n/**\r\n * Simple Observable implementation\r\n * @template T is the typescript Type that defines the data being observed\r\n */\r\nclass Observable {\r\n constructor() {\r\n this.observers = [];\r\n this.subscriptions = [];\r\n }\r\n /**\r\n * Register an observer to listen to this observable\r\n * @param observer\r\n */\r\n register(observer) {\r\n this.observers.push(observer);\r\n }\r\n /**\r\n * Register a callback to listen to this observable\r\n * @param func\r\n */\r\n subscribe(func) {\r\n this.subscriptions.push(func);\r\n }\r\n /**\r\n * Remove an observer from the observable\r\n * @param observer\r\n */\r\n unregister(observer) {\r\n const i = this.observers.indexOf(observer);\r\n if (i !== -1) {\r\n this.observers.splice(i, 1);\r\n }\r\n }\r\n /**\r\n * Remove a callback that is listening to this observable\r\n * @param func\r\n */\r\n unsubscribe(func) {\r\n const i = this.subscriptions.indexOf(func);\r\n if (i !== -1) {\r\n this.subscriptions.splice(i, 1);\r\n }\r\n }\r\n /**\r\n * Broadcasts a message to all observers and callbacks\r\n * @param message\r\n */\r\n notifyAll(message) {\r\n const observersLength = this.observers.length;\r\n for (let i = 0; i < observersLength; i++) {\r\n this.observers[i].notify(message);\r\n }\r\n const subscriptionsLength = this.subscriptions.length;\r\n for (let i = 0; i < subscriptionsLength; i++) {\r\n this.subscriptions[i](message);\r\n }\r\n }\r\n /**\r\n * Removes all observers and callbacks\r\n */\r\n clear() {\r\n this.observers.length = 0;\r\n this.subscriptions.length = 0;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./EntityComponentSystem/Components/TransformComponent.ts\n\r\n\r\n\r\n\r\nclass TransformComponent extends Component {\r\n constructor() {\r\n super(...arguments);\r\n this.type = 'ex.transform';\r\n this._transform = new Transform();\r\n this._addChildTransform = (child) => {\r\n const childTxComponent = child.get(TransformComponent);\r\n if (childTxComponent) {\r\n childTxComponent._transform.parent = this._transform;\r\n }\r\n };\r\n /**\r\n * Observable that emits when the z index changes on this component\r\n */\r\n this.zIndexChanged$ = new Observable();\r\n this._z = 0;\r\n /**\r\n * The [[CoordPlane|coordinate plane|]] for this transform for the entity.\r\n */\r\n this.coordPlane = CoordPlane.World;\r\n }\r\n get() {\r\n return this._transform;\r\n }\r\n onAdd(owner) {\r\n for (const child of owner.children) {\r\n this._addChildTransform(child);\r\n }\r\n owner.childrenAdded$.subscribe(child => this._addChildTransform(child));\r\n owner.childrenRemoved$.subscribe(child => {\r\n const childTxComponent = child.get(TransformComponent);\r\n if (childTxComponent) {\r\n childTxComponent._transform.parent = null;\r\n }\r\n });\r\n }\r\n onRemove(_previousOwner) {\r\n this._transform.parent = null;\r\n }\r\n /**\r\n * The z-index ordering of the entity, a higher values are drawn on top of lower values.\r\n * For example z=99 would be drawn on top of z=0.\r\n */\r\n get z() {\r\n return this._z;\r\n }\r\n set z(val) {\r\n const oldz = this._z;\r\n this._z = val;\r\n if (oldz !== val) {\r\n this.zIndexChanged$.notifyAll(val);\r\n }\r\n }\r\n get pos() {\r\n return this._transform.pos;\r\n }\r\n set pos(v) {\r\n this._transform.pos = v;\r\n }\r\n get globalPos() {\r\n return this._transform.globalPos;\r\n }\r\n set globalPos(v) {\r\n this._transform.globalPos = v;\r\n }\r\n get rotation() {\r\n return this._transform.rotation;\r\n }\r\n set rotation(rotation) {\r\n this._transform.rotation = rotation;\r\n }\r\n get globalRotation() {\r\n return this._transform.globalRotation;\r\n }\r\n set globalRotation(rotation) {\r\n this._transform.globalRotation = rotation;\r\n }\r\n get scale() {\r\n return this._transform.scale;\r\n }\r\n set scale(v) {\r\n this._transform.scale = v;\r\n }\r\n get globalScale() {\r\n return this._transform.globalScale;\r\n }\r\n set globalScale(v) {\r\n this._transform.globalScale = v;\r\n }\r\n applyInverse(v) {\r\n return this._transform.applyInverse(v);\r\n }\r\n apply(v) {\r\n return this._transform.apply(v);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./EntityComponentSystem/Components/MotionComponent.ts\n\r\n\r\nclass MotionComponent extends Component {\r\n constructor() {\r\n super(...arguments);\r\n this.type = 'ex.motion';\r\n /**\r\n * The velocity of an entity in pixels per second\r\n */\r\n this.vel = Vector.Zero;\r\n /**\r\n * The acceleration of entity in pixels per second^2\r\n */\r\n this.acc = Vector.Zero;\r\n /**\r\n * The scale rate of change in scale units per second\r\n */\r\n this.scaleFactor = Vector.Zero;\r\n /**\r\n * The angular velocity which is how quickly the entity is rotating in radians per second\r\n */\r\n this.angularVelocity = 0;\r\n /**\r\n * The amount of torque applied to the entity, angular acceleration is torque * inertia\r\n */\r\n this.torque = 0;\r\n /**\r\n * Inertia can be thought of as the resistance to motion\r\n */\r\n this.inertia = 1;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Group/CollisionGroup.ts\n/**\r\n * CollisionGroups indicate like members that do not collide with each other. Use [[CollisionGroupManager]] to create [[CollisionGroup]]s\r\n *\r\n * For example:\r\n *\r\n * Players have collision group \"player\"\r\n *\r\n * ![Player Collision Group](/assets/images/docs/CollisionGroupsPlayer.png)\r\n *\r\n * Enemies have collision group \"enemy\"\r\n *\r\n * ![Enemy Collision Group](/assets/images/docs/CollisionGroupsEnemy.png)\r\n *\r\n * Blocks have collision group \"ground\"\r\n *\r\n * ![Ground collision group](/assets/images/docs/CollisionGroupsGround.png)\r\n *\r\n * Players don't collide with each other, but enemies and blocks. Likewise, enemies don't collide with each other but collide\r\n * with players and blocks.\r\n *\r\n * This is done with bitmasking, see the following pseudo-code\r\n *\r\n * PlayerGroup = `0b001`\r\n * PlayerGroupMask = `0b110`\r\n *\r\n * EnemyGroup = `0b010`\r\n * EnemyGroupMask = `0b101`\r\n *\r\n * BlockGroup = `0b100`\r\n * BlockGroupMask = `0b011`\r\n *\r\n * Should Players collide? No because the bitwise mask evaluates to 0\r\n * `(player1.group & player2.mask) === 0`\r\n * `(0b001 & 0b110) === 0`\r\n *\r\n * Should Players and Enemies collide? Yes because the bitwise mask is non-zero\r\n * `(player1.group & enemy1.mask) === 1`\r\n * `(0b001 & 0b101) === 1`\r\n *\r\n * Should Players and Blocks collide? Yes because the bitwise mask is non-zero\r\n * `(player1.group & blocks1.mask) === 1`\r\n * `(0b001 & 0b011) === 1`\r\n */\r\nclass CollisionGroup {\r\n /**\r\n * STOP!!** It is preferred that [[CollisionGroupManager.create]] is used to create collision groups\r\n * unless you know how to construct the proper bitmasks. See https://github.com/excaliburjs/Excalibur/issues/1091 for more info.\r\n * @param name Name of the collision group\r\n * @param category 32 bit category for the group, should be a unique power of 2. For example `0b001` or `0b010`\r\n * @param mask 32 bit mask of category, or `~category` generally. For a category of `0b001`, the mask would be `0b110`\r\n */\r\n constructor(name, category, mask) {\r\n this._name = name;\r\n this._category = category;\r\n this._mask = mask;\r\n }\r\n /**\r\n * Get the name of the collision group\r\n */\r\n get name() {\r\n return this._name;\r\n }\r\n /**\r\n * Get the category of the collision group, a 32 bit number which should be a unique power of 2\r\n */\r\n get category() {\r\n return this._category;\r\n }\r\n /**\r\n * Get the mask for this collision group\r\n */\r\n get mask() {\r\n return this._mask;\r\n }\r\n /**\r\n * Evaluates whether 2 collision groups can collide\r\n * @param other CollisionGroup\r\n */\r\n canCollide(other) {\r\n return (this.category & other.mask) !== 0 && (other.category & this.mask) !== 0;\r\n }\r\n /**\r\n * Inverts the collision group. For example, if before the group specified \"players\",\r\n * inverting would specify all groups except players\r\n * @returns CollisionGroup\r\n */\r\n invert() {\r\n return new CollisionGroup('~(' + this.name + ')', ~this.category, ~this.mask);\r\n }\r\n /**\r\n * Combine collision groups with each other. The new group includes all of the previous groups.\r\n *\r\n * @param collisionGroups\r\n */\r\n static combine(collisionGroups) {\r\n const combinedName = collisionGroups.map((c) => c.name).join('+');\r\n const combinedCategory = collisionGroups.reduce((current, g) => g.category | current, 0b0);\r\n const combinedMask = ~combinedCategory;\r\n return new CollisionGroup(combinedName, combinedCategory, combinedMask);\r\n }\r\n /**\r\n * Creates a collision group that collides with the listed groups\r\n * @param collisionGroups\r\n */\r\n static collidesWith(collisionGroups) {\r\n return CollisionGroup.combine(collisionGroups).invert();\r\n }\r\n}\r\n/**\r\n * The `All` [[CollisionGroup]] is a special group that collides with all other groups including itself,\r\n * it is the default collision group on colliders.\r\n */\r\nCollisionGroup.All = new CollisionGroup('Collide with all groups', -1, -1);\r\n\n;// CONCATENATED MODULE: ./Collision/Detection/Pair.ts\n\r\n\r\n/**\r\n * Models a potential collision between 2 colliders\r\n */\r\nclass Pair {\r\n constructor(colliderA, colliderB) {\r\n this.colliderA = colliderA;\r\n this.colliderB = colliderB;\r\n this.id = null;\r\n this.id = Pair.calculatePairHash(colliderA.id, colliderB.id);\r\n }\r\n /**\r\n * Returns whether a it is allowed for 2 colliders in a Pair to collide\r\n * @param colliderA\r\n * @param colliderB\r\n */\r\n static canCollide(colliderA, colliderB) {\r\n var _a, _b;\r\n const bodyA = (_a = colliderA === null || colliderA === void 0 ? void 0 : colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);\r\n const bodyB = (_b = colliderB === null || colliderB === void 0 ? void 0 : colliderB.owner) === null || _b === void 0 ? void 0 : _b.get(BodyComponent);\r\n // Prevent self collision\r\n if (colliderA.id === colliderB.id) {\r\n return false;\r\n }\r\n // Colliders with the same owner do not collide (composite colliders)\r\n if (colliderA.owner &&\r\n colliderB.owner &&\r\n colliderA.owner.id === colliderB.owner.id) {\r\n return false;\r\n }\r\n // if the pair has a member with zero dimension don't collide\r\n if (colliderA.localBounds.hasZeroDimensions() || colliderB.localBounds.hasZeroDimensions()) {\r\n return false;\r\n }\r\n // Body's needed for collision in the current state\r\n // TODO can we collide without a body?\r\n if (!bodyA || !bodyB) {\r\n return false;\r\n }\r\n // If both are in the same collision group short circuit\r\n if (!bodyA.group.canCollide(bodyB.group)) {\r\n return false;\r\n }\r\n // if both are fixed short circuit\r\n if (bodyA.collisionType === CollisionType.Fixed && bodyB.collisionType === CollisionType.Fixed) {\r\n return false;\r\n }\r\n // if the either is prevent collision short circuit\r\n if (bodyB.collisionType === CollisionType.PreventCollision || bodyA.collisionType === CollisionType.PreventCollision) {\r\n return false;\r\n }\r\n // if either is dead short circuit\r\n if (!bodyA.active || !bodyB.active) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n /**\r\n * Returns whether or not it is possible for the pairs to collide\r\n */\r\n get canCollide() {\r\n const colliderA = this.colliderA;\r\n const colliderB = this.colliderB;\r\n return Pair.canCollide(colliderA, colliderB);\r\n }\r\n /**\r\n * Runs the collision intersection logic on the members of this pair\r\n */\r\n collide() {\r\n return this.colliderA.collide(this.colliderB);\r\n }\r\n /**\r\n * Check if the collider is part of the pair\r\n * @param collider\r\n */\r\n hasCollider(collider) {\r\n return collider === this.colliderA || collider === this.colliderB;\r\n }\r\n /**\r\n * Calculates the unique pair hash id for this collision pair (owning id)\r\n */\r\n static calculatePairHash(idA, idB) {\r\n if (idA.value < idB.value) {\r\n return `#${idA.value}+${idB.value}`;\r\n }\r\n else {\r\n return `#${idB.value}+${idA.value}`;\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Math/projection.ts\n/**\r\n * A 1 dimensional projection on an axis, used to test overlaps\r\n */\r\nclass Projection {\r\n constructor(min, max) {\r\n this.min = min;\r\n this.max = max;\r\n }\r\n overlaps(projection) {\r\n return this.max > projection.min && projection.max > this.min;\r\n }\r\n getOverlap(projection) {\r\n if (this.overlaps(projection)) {\r\n if (this.max > projection.max) {\r\n return projection.max - this.min;\r\n }\r\n else {\r\n return this.max - projection.min;\r\n }\r\n }\r\n return 0;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Detection/DynamicTree.ts\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Dynamic Tree Node used for tracking bounds within the tree\r\n */\r\nclass TreeNode {\r\n constructor(parent) {\r\n this.parent = parent;\r\n this.parent = parent || null;\r\n this.data = null;\r\n this.bounds = new BoundingBox();\r\n this.left = null;\r\n this.right = null;\r\n this.height = 0;\r\n }\r\n isLeaf() {\r\n return !this.left && !this.right;\r\n }\r\n}\r\n/**\r\n * The DynamicTrees provides a spatial partitioning data structure for quickly querying for overlapping bounding boxes for\r\n * all tracked bodies. The worst case performance of this is O(n*log(n)) where n is the number of bodies in the tree.\r\n *\r\n * Internally the bounding boxes are organized as a balanced binary tree of bounding boxes, where the leaf nodes are tracked bodies.\r\n * Every non-leaf node is a bounding box that contains child bounding boxes.\r\n */\r\nclass DynamicTree {\r\n constructor(worldBounds = new BoundingBox(-Number.MAX_VALUE, -Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE)) {\r\n this.worldBounds = worldBounds;\r\n this.root = null;\r\n this.nodes = {};\r\n }\r\n /**\r\n * Inserts a node into the dynamic tree\r\n */\r\n _insert(leaf) {\r\n // If there are no nodes in the tree, make this the root leaf\r\n if (this.root === null) {\r\n this.root = leaf;\r\n this.root.parent = null;\r\n return;\r\n }\r\n // Search the tree for a node that is not a leaf and find the best place to insert\r\n const leafAABB = leaf.bounds;\r\n let currentRoot = this.root;\r\n while (!currentRoot.isLeaf()) {\r\n const left = currentRoot.left;\r\n const right = currentRoot.right;\r\n const area = currentRoot.bounds.getPerimeter();\r\n const combinedAABB = currentRoot.bounds.combine(leafAABB);\r\n const combinedArea = combinedAABB.getPerimeter();\r\n // Calculate cost heuristic for creating a new parent and leaf\r\n const cost = 2 * combinedArea;\r\n // Minimum cost of pushing the leaf down the tree\r\n const inheritanceCost = 2 * (combinedArea - area);\r\n // Cost of descending\r\n let leftCost = 0;\r\n const leftCombined = leafAABB.combine(left.bounds);\r\n let newArea;\r\n let oldArea;\r\n if (left.isLeaf()) {\r\n leftCost = leftCombined.getPerimeter() + inheritanceCost;\r\n }\r\n else {\r\n oldArea = left.bounds.getPerimeter();\r\n newArea = leftCombined.getPerimeter();\r\n leftCost = newArea - oldArea + inheritanceCost;\r\n }\r\n let rightCost = 0;\r\n const rightCombined = leafAABB.combine(right.bounds);\r\n if (right.isLeaf()) {\r\n rightCost = rightCombined.getPerimeter() + inheritanceCost;\r\n }\r\n else {\r\n oldArea = right.bounds.getPerimeter();\r\n newArea = rightCombined.getPerimeter();\r\n rightCost = newArea - oldArea + inheritanceCost;\r\n }\r\n // cost is acceptable\r\n if (cost < leftCost && cost < rightCost) {\r\n break;\r\n }\r\n // Descend to the depths\r\n if (leftCost < rightCost) {\r\n currentRoot = left;\r\n }\r\n else {\r\n currentRoot = right;\r\n }\r\n }\r\n // Create the new parent node and insert into the tree\r\n const oldParent = currentRoot.parent;\r\n const newParent = new TreeNode(oldParent);\r\n newParent.bounds = leafAABB.combine(currentRoot.bounds);\r\n newParent.height = currentRoot.height + 1;\r\n if (oldParent !== null) {\r\n // The sibling node was not the root\r\n if (oldParent.left === currentRoot) {\r\n oldParent.left = newParent;\r\n }\r\n else {\r\n oldParent.right = newParent;\r\n }\r\n newParent.left = currentRoot;\r\n newParent.right = leaf;\r\n currentRoot.parent = newParent;\r\n leaf.parent = newParent;\r\n }\r\n else {\r\n // The sibling node was the root\r\n newParent.left = currentRoot;\r\n newParent.right = leaf;\r\n currentRoot.parent = newParent;\r\n leaf.parent = newParent;\r\n this.root = newParent;\r\n }\r\n // Walk up the tree fixing heights and AABBs\r\n let currentNode = leaf.parent;\r\n while (currentNode) {\r\n currentNode = this._balance(currentNode);\r\n if (!currentNode.left) {\r\n throw new Error('Parent of current leaf cannot have a null left child' + currentNode);\r\n }\r\n if (!currentNode.right) {\r\n throw new Error('Parent of current leaf cannot have a null right child' + currentNode);\r\n }\r\n currentNode.height = 1 + Math.max(currentNode.left.height, currentNode.right.height);\r\n currentNode.bounds = currentNode.left.bounds.combine(currentNode.right.bounds);\r\n currentNode = currentNode.parent;\r\n }\r\n }\r\n /**\r\n * Removes a node from the dynamic tree\r\n */\r\n _remove(leaf) {\r\n if (leaf === this.root) {\r\n this.root = null;\r\n return;\r\n }\r\n const parent = leaf.parent;\r\n const grandParent = parent.parent;\r\n let sibling;\r\n if (parent.left === leaf) {\r\n sibling = parent.right;\r\n }\r\n else {\r\n sibling = parent.left;\r\n }\r\n if (grandParent) {\r\n if (grandParent.left === parent) {\r\n grandParent.left = sibling;\r\n }\r\n else {\r\n grandParent.right = sibling;\r\n }\r\n sibling.parent = grandParent;\r\n let currentNode = grandParent;\r\n while (currentNode) {\r\n currentNode = this._balance(currentNode);\r\n currentNode.bounds = currentNode.left.bounds.combine(currentNode.right.bounds);\r\n currentNode.height = 1 + Math.max(currentNode.left.height, currentNode.right.height);\r\n currentNode = currentNode.parent;\r\n }\r\n }\r\n else {\r\n this.root = sibling;\r\n sibling.parent = null;\r\n }\r\n }\r\n /**\r\n * Tracks a body in the dynamic tree\r\n */\r\n trackCollider(collider) {\r\n const node = new TreeNode();\r\n node.data = collider;\r\n node.bounds = collider.bounds;\r\n node.bounds.left -= 2;\r\n node.bounds.top -= 2;\r\n node.bounds.right += 2;\r\n node.bounds.bottom += 2;\r\n this.nodes[collider.id.value] = node;\r\n this._insert(node);\r\n }\r\n /**\r\n * Updates the dynamic tree given the current bounds of each body being tracked\r\n */\r\n updateCollider(collider) {\r\n var _a;\r\n const node = this.nodes[collider.id.value];\r\n if (!node) {\r\n return false;\r\n }\r\n const b = collider.bounds;\r\n // if the body is outside the world no longer update it\r\n if (!this.worldBounds.contains(b)) {\r\n Logger.getInstance().warn('Collider with id ' + collider.id.value + ' is outside the world bounds and will no longer be tracked for physics');\r\n this.untrackCollider(collider);\r\n return false;\r\n }\r\n if (node.bounds.contains(b)) {\r\n return false;\r\n }\r\n this._remove(node);\r\n b.left -= Physics.boundsPadding;\r\n b.top -= Physics.boundsPadding;\r\n b.right += Physics.boundsPadding;\r\n b.bottom += Physics.boundsPadding;\r\n // THIS IS CAUSING UNECESSARY CHECKS\r\n if (collider.owner) {\r\n const body = (_a = collider.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);\r\n if (body) {\r\n const multdx = ((body.vel.x * 32) / 1000) * Physics.dynamicTreeVelocityMultiplier;\r\n const multdy = ((body.vel.y * 32) / 1000) * Physics.dynamicTreeVelocityMultiplier;\r\n if (multdx < 0) {\r\n b.left += multdx;\r\n }\r\n else {\r\n b.right += multdx;\r\n }\r\n if (multdy < 0) {\r\n b.top += multdy;\r\n }\r\n else {\r\n b.bottom += multdy;\r\n }\r\n }\r\n }\r\n node.bounds = b;\r\n this._insert(node);\r\n return true;\r\n }\r\n /**\r\n * Untracks a body from the dynamic tree\r\n */\r\n untrackCollider(collider) {\r\n const node = this.nodes[collider.id.value];\r\n if (!node) {\r\n return;\r\n }\r\n this._remove(node);\r\n this.nodes[collider.id.value] = null;\r\n delete this.nodes[collider.id.value];\r\n }\r\n /**\r\n * Balances the tree about a node\r\n */\r\n _balance(node) {\r\n if (node === null) {\r\n throw new Error('Cannot balance at null node');\r\n }\r\n if (node.isLeaf() || node.height < 2) {\r\n return node;\r\n }\r\n const left = node.left;\r\n const right = node.right;\r\n const a = node;\r\n const b = left;\r\n const c = right;\r\n const d = left.left;\r\n const e = left.right;\r\n const f = right.left;\r\n const g = right.right;\r\n const balance = c.height - b.height;\r\n // Rotate c node up\r\n if (balance > 1) {\r\n // Swap the right node with it's parent\r\n c.left = a;\r\n c.parent = a.parent;\r\n a.parent = c;\r\n // The original node's old parent should point to the right node\r\n // this is mega confusing\r\n if (c.parent) {\r\n if (c.parent.left === a) {\r\n c.parent.left = c;\r\n }\r\n else {\r\n c.parent.right = c;\r\n }\r\n }\r\n else {\r\n this.root = c;\r\n }\r\n // Rotate\r\n if (f.height > g.height) {\r\n c.right = f;\r\n a.right = g;\r\n g.parent = a;\r\n a.bounds = b.bounds.combine(g.bounds);\r\n c.bounds = a.bounds.combine(f.bounds);\r\n a.height = 1 + Math.max(b.height, g.height);\r\n c.height = 1 + Math.max(a.height, f.height);\r\n }\r\n else {\r\n c.right = g;\r\n a.right = f;\r\n f.parent = a;\r\n a.bounds = b.bounds.combine(f.bounds);\r\n c.bounds = a.bounds.combine(g.bounds);\r\n a.height = 1 + Math.max(b.height, f.height);\r\n c.height = 1 + Math.max(a.height, g.height);\r\n }\r\n return c;\r\n }\r\n // Rotate left node up\r\n if (balance < -1) {\r\n // swap\r\n b.left = a;\r\n b.parent = a.parent;\r\n a.parent = b;\r\n // node's old parent should point to b\r\n if (b.parent) {\r\n if (b.parent.left === a) {\r\n b.parent.left = b;\r\n }\r\n else {\r\n if (b.parent.right !== a) {\r\n throw 'Error rotating Dynamic Tree';\r\n }\r\n b.parent.right = b;\r\n }\r\n }\r\n else {\r\n this.root = b;\r\n }\r\n // rotate\r\n if (d.height > e.height) {\r\n b.right = d;\r\n a.left = e;\r\n e.parent = a;\r\n a.bounds = c.bounds.combine(e.bounds);\r\n b.bounds = a.bounds.combine(d.bounds);\r\n a.height = 1 + Math.max(c.height, e.height);\r\n b.height = 1 + Math.max(a.height, d.height);\r\n }\r\n else {\r\n b.right = e;\r\n a.left = d;\r\n d.parent = a;\r\n a.bounds = c.bounds.combine(d.bounds);\r\n b.bounds = a.bounds.combine(e.bounds);\r\n a.height = 1 + Math.max(c.height, d.height);\r\n b.height = 1 + Math.max(a.height, e.height);\r\n }\r\n return b;\r\n }\r\n return node;\r\n }\r\n /**\r\n * Returns the internal height of the tree, shorter trees are better. Performance drops as the tree grows\r\n */\r\n getHeight() {\r\n if (this.root === null) {\r\n return 0;\r\n }\r\n return this.root.height;\r\n }\r\n /**\r\n * Queries the Dynamic Axis Aligned Tree for bodies that could be colliding with the provided body.\r\n *\r\n * In the query callback, it will be passed a potential collider. Returning true from this callback indicates\r\n * that you are complete with your query and you do not want to continue. Returning false will continue searching\r\n * the tree until all possible colliders have been returned.\r\n */\r\n query(collider, callback) {\r\n const bounds = collider.bounds;\r\n const helper = (currentNode) => {\r\n if (currentNode && currentNode.bounds.overlaps(bounds)) {\r\n if (currentNode.isLeaf() && currentNode.data !== collider) {\r\n if (callback.call(collider, currentNode.data)) {\r\n return true;\r\n }\r\n }\r\n else {\r\n return helper(currentNode.left) || helper(currentNode.right);\r\n }\r\n }\r\n return false;\r\n };\r\n helper(this.root);\r\n }\r\n /**\r\n * Queries the Dynamic Axis Aligned Tree for bodies that could be intersecting. By default the raycast query uses an infinitely\r\n * long ray to test the tree specified by `max`.\r\n *\r\n * In the query callback, it will be passed a potential body that intersects with the raycast. Returning true from this\r\n * callback indicates that your are complete with your query and do not want to continue. Return false will continue searching\r\n * the tree until all possible bodies that would intersect with the ray have been returned.\r\n */\r\n rayCastQuery(ray, max = Infinity, callback) {\r\n const helper = (currentNode) => {\r\n if (currentNode && currentNode.bounds.rayCast(ray, max)) {\r\n if (currentNode.isLeaf()) {\r\n if (callback.call(ray, currentNode.data)) {\r\n // ray hit a leaf! return the body\r\n return true;\r\n }\r\n }\r\n else {\r\n // ray hit but not at a leaf, recurse deeper\r\n return helper(currentNode.left) || helper(currentNode.right);\r\n }\r\n }\r\n return false; // ray missed\r\n };\r\n helper(this.root);\r\n }\r\n getNodes() {\r\n const helper = (currentNode) => {\r\n if (currentNode) {\r\n return [currentNode].concat(helper(currentNode.left), helper(currentNode.right));\r\n }\r\n else {\r\n return [];\r\n }\r\n };\r\n return helper(this.root);\r\n }\r\n debug(ex) {\r\n // draw all the nodes in the Dynamic Tree\r\n const helper = (currentNode) => {\r\n if (currentNode) {\r\n if (currentNode.isLeaf()) {\r\n currentNode.bounds.draw(ex, Color.Green);\r\n }\r\n else {\r\n currentNode.bounds.draw(ex, Color.White);\r\n }\r\n if (currentNode.left) {\r\n helper(currentNode.left);\r\n }\r\n if (currentNode.right) {\r\n helper(currentNode.right);\r\n }\r\n }\r\n };\r\n helper(this.root);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Math/ray.ts\n/**\r\n * A 2D ray that can be cast into the scene to do collision detection\r\n */\r\nclass Ray {\r\n /**\r\n * @param pos The starting position for the ray\r\n * @param dir The vector indicating the direction of the ray\r\n */\r\n constructor(pos, dir) {\r\n this.pos = pos;\r\n this.dir = dir.normalize();\r\n }\r\n /**\r\n * Tests a whether this ray intersects with a line segment. Returns a number greater than or equal to 0 on success.\r\n * This number indicates the mathematical intersection time.\r\n * @param line The line to test\r\n */\r\n intersect(line) {\r\n const numerator = line.begin.sub(this.pos);\r\n // Test is line and ray are parallel and non intersecting\r\n if (this.dir.cross(line.getSlope()) === 0 && numerator.cross(this.dir) !== 0) {\r\n return -1;\r\n }\r\n // Lines are parallel\r\n const divisor = this.dir.cross(line.getSlope());\r\n if (divisor === 0) {\r\n return -1;\r\n }\r\n const t = numerator.cross(line.getSlope()) / divisor;\r\n if (t >= 0) {\r\n const u = numerator.cross(this.dir) / divisor / line.getLength();\r\n if (u >= 0 && u <= 1) {\r\n return t;\r\n }\r\n }\r\n return -1;\r\n }\r\n intersectPoint(line) {\r\n const time = this.intersect(line);\r\n if (time < 0) {\r\n return null;\r\n }\r\n return this.getPoint(time);\r\n }\r\n /**\r\n * Returns the point of intersection given the intersection time\r\n */\r\n getPoint(time) {\r\n return this.pos.add(this.dir.scale(time));\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Detection/DynamicTreeCollisionProcessor.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Responsible for performing the collision broadphase (locating potential collisions) and\r\n * the narrowphase (actual collision contacts)\r\n */\r\nclass DynamicTreeCollisionProcessor {\r\n constructor() {\r\n this._dynamicCollisionTree = new DynamicTree();\r\n this._pairs = new Set();\r\n this._collisionPairCache = [];\r\n this._colliders = [];\r\n }\r\n getColliders() {\r\n return this._colliders;\r\n }\r\n /**\r\n * Tracks a physics body for collisions\r\n */\r\n track(target) {\r\n if (!target) {\r\n Logger.getInstance().warn('Cannot track null collider');\r\n return;\r\n }\r\n if (target instanceof CompositeCollider) {\r\n const colliders = target.getColliders();\r\n for (const c of colliders) {\r\n c.owner = target.owner;\r\n this._colliders.push(c);\r\n this._dynamicCollisionTree.trackCollider(c);\r\n }\r\n }\r\n else {\r\n this._colliders.push(target);\r\n this._dynamicCollisionTree.trackCollider(target);\r\n }\r\n }\r\n /**\r\n * Untracks a physics body\r\n */\r\n untrack(target) {\r\n if (!target) {\r\n Logger.getInstance().warn('Cannot untrack a null collider');\r\n return;\r\n }\r\n if (target instanceof CompositeCollider) {\r\n const colliders = target.getColliders();\r\n for (const c of colliders) {\r\n const index = this._colliders.indexOf(c);\r\n if (index !== -1) {\r\n this._colliders.splice(index, 1);\r\n }\r\n this._dynamicCollisionTree.untrackCollider(c);\r\n }\r\n }\r\n else {\r\n const index = this._colliders.indexOf(target);\r\n if (index !== -1) {\r\n this._colliders.splice(index, 1);\r\n }\r\n this._dynamicCollisionTree.untrackCollider(target);\r\n }\r\n }\r\n _pairExists(colliderA, colliderB) {\r\n // if the collision pair has been calculated already short circuit\r\n const hash = Pair.calculatePairHash(colliderA.id, colliderB.id);\r\n return this._pairs.has(hash);\r\n }\r\n /**\r\n * Detects potential collision pairs in a broadphase approach with the dynamic AABB tree strategy\r\n */\r\n broadphase(targets, delta, stats) {\r\n const seconds = delta / 1000;\r\n // Retrieve the list of potential colliders, exclude killed, prevented, and self\r\n const potentialColliders = targets.filter((other) => {\r\n var _a, _b;\r\n const body = (_a = other.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);\r\n return ((_b = other.owner) === null || _b === void 0 ? void 0 : _b.active) && body.collisionType !== CollisionType.PreventCollision;\r\n });\r\n // clear old list of collision pairs\r\n this._collisionPairCache = [];\r\n this._pairs.clear();\r\n // check for normal collision pairs\r\n let collider;\r\n for (let j = 0, l = potentialColliders.length; j < l; j++) {\r\n collider = potentialColliders[j];\r\n // Query the collision tree for potential colliders\r\n this._dynamicCollisionTree.query(collider, (other) => {\r\n if (!this._pairExists(collider, other) && Pair.canCollide(collider, other)) {\r\n const pair = new Pair(collider, other);\r\n this._pairs.add(pair.id);\r\n this._collisionPairCache.push(pair);\r\n }\r\n // Always return false, to query whole tree. Returning true in the query method stops searching\r\n return false;\r\n });\r\n }\r\n if (stats) {\r\n stats.physics.pairs = this._collisionPairCache.length;\r\n }\r\n // Check dynamic tree for fast moving objects\r\n // Fast moving objects are those moving at least there smallest bound per frame\r\n if (Physics.checkForFastBodies) {\r\n for (const collider of potentialColliders) {\r\n const body = collider.owner.get(BodyComponent);\r\n // Skip non-active objects. Does not make sense on other collision types\r\n if (body.collisionType !== CollisionType.Active) {\r\n continue;\r\n }\r\n // Maximum travel distance next frame\r\n const updateDistance = body.vel.size * seconds + // velocity term\r\n body.acc.size * 0.5 * seconds * seconds; // acc term\r\n // Find the minimum dimension\r\n const minDimension = Math.min(collider.bounds.height, collider.bounds.width);\r\n if (Physics.disableMinimumSpeedForFastBody || updateDistance > minDimension / 2) {\r\n if (stats) {\r\n stats.physics.fastBodies++;\r\n }\r\n // start with the oldPos because the integration for actors has already happened\r\n // objects resting on a surface may be slightly penetrating in the current position\r\n const updateVec = body.globalPos.sub(body.oldPos);\r\n const centerPoint = collider.center;\r\n const furthestPoint = collider.getFurthestPoint(body.vel);\r\n const origin = furthestPoint.sub(updateVec);\r\n const ray = new Ray(origin, body.vel);\r\n // back the ray up by -2x surfaceEpsilon to account for fast moving objects starting on the surface\r\n ray.pos = ray.pos.add(ray.dir.scale(-2 * Physics.surfaceEpsilon));\r\n let minCollider;\r\n let minTranslate = new Vector(Infinity, Infinity);\r\n this._dynamicCollisionTree.rayCastQuery(ray, updateDistance + Physics.surfaceEpsilon * 2, (other) => {\r\n if (!this._pairExists(collider, other) && Pair.canCollide(collider, other)) {\r\n const hitPoint = other.rayCast(ray, updateDistance + Physics.surfaceEpsilon * 10);\r\n if (hitPoint) {\r\n const translate = hitPoint.sub(origin);\r\n if (translate.size < minTranslate.size) {\r\n minTranslate = translate;\r\n minCollider = other;\r\n }\r\n }\r\n }\r\n return false;\r\n });\r\n if (minCollider && Vector.isValid(minTranslate)) {\r\n const pair = new Pair(collider, minCollider);\r\n if (!this._pairs.has(pair.id)) {\r\n this._pairs.add(pair.id);\r\n this._collisionPairCache.push(pair);\r\n }\r\n // move the fast moving object to the other body\r\n // need to push into the surface by ex.Physics.surfaceEpsilon\r\n const shift = centerPoint.sub(furthestPoint);\r\n body.globalPos = origin\r\n .add(shift)\r\n .add(minTranslate)\r\n .add(ray.dir.scale(10 * Physics.surfaceEpsilon)); // needed to push the shape slightly into contact\r\n collider.update(body.transform.get());\r\n if (stats) {\r\n stats.physics.fastBodyCollisions++;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n // return cache\r\n return this._collisionPairCache;\r\n }\r\n /**\r\n * Applies narrow phase on collision pairs to find actual area intersections\r\n * Adds actual colliding pairs to stats' Frame data\r\n */\r\n narrowphase(pairs, stats) {\r\n let contacts = [];\r\n for (let i = 0; i < pairs.length; i++) {\r\n const newContacts = pairs[i].collide();\r\n contacts = contacts.concat(newContacts);\r\n if (stats && newContacts.length > 0) {\r\n for (const c of newContacts) {\r\n stats.physics.contacts.set(c.id, c);\r\n }\r\n }\r\n }\r\n if (stats) {\r\n stats.physics.collisions += contacts.length;\r\n }\r\n return contacts;\r\n }\r\n /**\r\n * Update the dynamic tree positions\r\n */\r\n update(targets) {\r\n let updated = 0;\r\n const len = targets.length;\r\n for (let i = 0; i < len; i++) {\r\n if (this._dynamicCollisionTree.updateCollider(targets[i])) {\r\n updated++;\r\n }\r\n }\r\n return updated;\r\n }\r\n debug(ex) {\r\n this._dynamicCollisionTree.debug(ex);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Colliders/Collider.ts\n\r\n\r\n/**\r\n * A collision collider specifies the geometry that can detect when other collision colliders intersect\r\n * for the purposes of colliding 2 objects in excalibur.\r\n */\r\nclass Collider {\r\n constructor() {\r\n this.id = createId('collider', Collider._ID++);\r\n /**\r\n * Excalibur uses this to signal to the [[CollisionSystem]] this is part of a composite collider\r\n * @internal\r\n * @hidden\r\n */\r\n this.__compositeColliderId = null;\r\n this.events = new EventDispatcher();\r\n }\r\n /**\r\n * Returns a boolean indicating whether this body collided with\r\n * or was in stationary contact with\r\n * the body of the other [[Collider]]\r\n */\r\n touching(other) {\r\n const contact = this.collide(other);\r\n if (contact) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\nCollider._ID = 0;\r\n\n;// CONCATENATED MODULE: ./Collision/Colliders/CompositeCollider.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass CompositeCollider extends Collider {\r\n constructor(colliders) {\r\n super();\r\n this._collisionProcessor = new DynamicTreeCollisionProcessor();\r\n this._dynamicAABBTree = new DynamicTree();\r\n this._colliders = [];\r\n for (const c of colliders) {\r\n this.addCollider(c);\r\n }\r\n }\r\n clearColliders() {\r\n this._colliders = [];\r\n }\r\n addCollider(collider) {\r\n this.events.wire(collider.events);\r\n collider.__compositeColliderId = this.id;\r\n this._colliders.push(collider);\r\n this._collisionProcessor.track(collider);\r\n this._dynamicAABBTree.trackCollider(collider);\r\n }\r\n removeCollider(collider) {\r\n this.events.unwire(collider.events);\r\n collider.__compositeColliderId = null;\r\n removeItemFromArray(collider, this._colliders);\r\n this._collisionProcessor.untrack(collider);\r\n this._dynamicAABBTree.untrackCollider(collider);\r\n }\r\n getColliders() {\r\n return this._colliders;\r\n }\r\n get worldPos() {\r\n var _a, _b;\r\n // TODO transform component world pos\r\n return (_b = (_a = this._transform) === null || _a === void 0 ? void 0 : _a.pos) !== null && _b !== void 0 ? _b : Vector.Zero;\r\n }\r\n get center() {\r\n var _a, _b;\r\n return (_b = (_a = this._transform) === null || _a === void 0 ? void 0 : _a.pos) !== null && _b !== void 0 ? _b : Vector.Zero;\r\n }\r\n get bounds() {\r\n var _a, _b;\r\n // TODO cache this\r\n const colliders = this.getColliders();\r\n const results = colliders.reduce((acc, collider) => acc.combine(collider.bounds), (_b = (_a = colliders[0]) === null || _a === void 0 ? void 0 : _a.bounds) !== null && _b !== void 0 ? _b : new BoundingBox().translate(this.worldPos));\r\n return results;\r\n }\r\n get localBounds() {\r\n var _a, _b;\r\n // TODO cache this\r\n const colliders = this.getColliders();\r\n const results = colliders.reduce((acc, collider) => acc.combine(collider.localBounds), (_b = (_a = colliders[0]) === null || _a === void 0 ? void 0 : _a.localBounds) !== null && _b !== void 0 ? _b : new BoundingBox());\r\n return results;\r\n }\r\n get axes() {\r\n // TODO cache this\r\n const colliders = this.getColliders();\r\n let axes = [];\r\n for (const collider of colliders) {\r\n axes = axes.concat(collider.axes);\r\n }\r\n return axes;\r\n }\r\n getFurthestPoint(direction) {\r\n const colliders = this.getColliders();\r\n const furthestPoints = [];\r\n for (const collider of colliders) {\r\n furthestPoints.push(collider.getFurthestPoint(direction));\r\n }\r\n // Pick best point from all colliders\r\n let bestPoint = furthestPoints[0];\r\n let maxDistance = -Number.MAX_VALUE;\r\n for (const point of furthestPoints) {\r\n const distance = point.dot(direction);\r\n if (distance > maxDistance) {\r\n bestPoint = point;\r\n maxDistance = distance;\r\n }\r\n }\r\n return bestPoint;\r\n }\r\n getInertia(mass) {\r\n const colliders = this.getColliders();\r\n let totalInertia = 0;\r\n for (const collider of colliders) {\r\n totalInertia += collider.getInertia(mass);\r\n }\r\n return totalInertia;\r\n }\r\n collide(other) {\r\n let otherColliders = [other];\r\n if (other instanceof CompositeCollider) {\r\n otherColliders = other.getColliders();\r\n }\r\n const pairs = [];\r\n for (const c of otherColliders) {\r\n this._dynamicAABBTree.query(c, (potentialCollider) => {\r\n pairs.push(new Pair(c, potentialCollider));\r\n return false;\r\n });\r\n }\r\n let contacts = [];\r\n for (const p of pairs) {\r\n contacts = contacts.concat(p.collide());\r\n }\r\n return contacts;\r\n }\r\n getClosestLineBetween(other) {\r\n const colliders = this.getColliders();\r\n const lines = [];\r\n if (other instanceof CompositeCollider) {\r\n const otherColliders = other.getColliders();\r\n for (const colliderA of colliders) {\r\n for (const colliderB of otherColliders) {\r\n const maybeLine = colliderA.getClosestLineBetween(colliderB);\r\n if (maybeLine) {\r\n lines.push(maybeLine);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n for (const collider of colliders) {\r\n const maybeLine = other.getClosestLineBetween(collider);\r\n if (maybeLine) {\r\n lines.push(maybeLine);\r\n }\r\n }\r\n }\r\n if (lines.length) {\r\n let minLength = lines[0].getLength();\r\n let minLine = lines[0];\r\n for (const line of lines) {\r\n const length = line.getLength();\r\n if (length < minLength) {\r\n minLength = length;\r\n minLine = line;\r\n }\r\n }\r\n return minLine;\r\n }\r\n return null;\r\n }\r\n contains(point) {\r\n const colliders = this.getColliders();\r\n for (const collider of colliders) {\r\n if (collider.contains(point)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n rayCast(ray, max) {\r\n const colliders = this.getColliders();\r\n const points = [];\r\n for (const collider of colliders) {\r\n const vec = collider.rayCast(ray, max);\r\n if (vec) {\r\n points.push(vec);\r\n }\r\n }\r\n if (points.length) {\r\n let minPoint = points[0];\r\n let minDistance = minPoint.dot(ray.dir);\r\n for (const point of points) {\r\n const distance = ray.dir.dot(point);\r\n if (distance < minDistance) {\r\n minPoint = point;\r\n minDistance = distance;\r\n }\r\n }\r\n return minPoint;\r\n }\r\n return null;\r\n }\r\n project(axis) {\r\n const colliders = this.getColliders();\r\n const projs = [];\r\n for (const collider of colliders) {\r\n const proj = collider.project(axis);\r\n if (proj) {\r\n projs.push(proj);\r\n }\r\n }\r\n // Merge all proj's on the same axis\r\n if (projs.length) {\r\n const newProjection = new Projection(projs[0].min, projs[0].max);\r\n for (const proj of projs) {\r\n newProjection.min = Math.min(proj.min, newProjection.min);\r\n newProjection.max = Math.max(proj.max, newProjection.max);\r\n }\r\n return newProjection;\r\n }\r\n return null;\r\n }\r\n update(transform) {\r\n if (transform) {\r\n const colliders = this.getColliders();\r\n for (const collider of colliders) {\r\n collider.owner = this.owner;\r\n collider.update(transform);\r\n }\r\n }\r\n }\r\n debug(ex, color) {\r\n const colliders = this.getColliders();\r\n for (const collider of colliders) {\r\n collider.debug(ex, color);\r\n }\r\n }\r\n clone() {\r\n return new CompositeCollider(this._colliders.map((c) => c.clone()));\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Math/line-segment.ts\n\r\n/**\r\n * A 2D line segment\r\n */\r\nclass LineSegment {\r\n /**\r\n * @param begin The starting point of the line segment\r\n * @param end The ending point of the line segment\r\n */\r\n constructor(begin, end) {\r\n this.begin = begin;\r\n this.end = end;\r\n }\r\n /**\r\n * Gets the raw slope (m) of the line. Will return (+/-)Infinity for vertical lines.\r\n */\r\n get slope() {\r\n return (this.end.y - this.begin.y) / (this.end.x - this.begin.x);\r\n }\r\n /**\r\n * Gets the Y-intercept (b) of the line. Will return (+/-)Infinity if there is no intercept.\r\n */\r\n get intercept() {\r\n return this.begin.y - this.slope * this.begin.x;\r\n }\r\n /**\r\n * Gets the normal of the line\r\n */\r\n normal() {\r\n if (this._normal) {\r\n return this._normal;\r\n }\r\n return this._normal = this.end.sub(this.begin).normal();\r\n }\r\n dir() {\r\n if (this._dir) {\r\n return this._dir;\r\n }\r\n return this._dir = this.end.sub(this.begin);\r\n }\r\n getPoints() {\r\n return [this.begin, this.end];\r\n }\r\n /**\r\n * Returns the slope of the line in the form of a vector of length 1\r\n */\r\n getSlope() {\r\n if (this._slope) {\r\n return this._slope;\r\n }\r\n const begin = this.begin;\r\n const end = this.end;\r\n const distance = begin.distance(end);\r\n return this._slope = end.sub(begin).scale(1 / distance);\r\n }\r\n /**\r\n * Returns the edge of the line as vector, the length of the vector is the length of the edge\r\n */\r\n getEdge() {\r\n const begin = this.begin;\r\n const end = this.end;\r\n return end.sub(begin);\r\n }\r\n /**\r\n * Returns the length of the line segment in pixels\r\n */\r\n getLength() {\r\n if (this._length) {\r\n return this._length;\r\n }\r\n const begin = this.begin;\r\n const end = this.end;\r\n const distance = begin.distance(end);\r\n return this._length = distance;\r\n }\r\n /**\r\n * Returns the midpoint of the edge\r\n */\r\n get midpoint() {\r\n return this.begin.add(this.end).scale(0.5);\r\n }\r\n /**\r\n * Flips the direction of the line segment\r\n */\r\n flip() {\r\n return new LineSegment(this.end, this.begin);\r\n }\r\n /**\r\n * Tests if a given point is below the line, points in the normal direction above the line are considered above.\r\n * @param point\r\n */\r\n below(point) {\r\n const above2 = (this.end.x - this.begin.x) * (point.y - this.begin.y) - (this.end.y - this.begin.y) * (point.x - this.begin.x);\r\n return above2 >= 0;\r\n }\r\n /**\r\n * Returns the clip point\r\n * @param sideVector Vector that traces the line\r\n * @param length Length to clip along side\r\n */\r\n clip(sideVector, length) {\r\n let dir = sideVector;\r\n dir = dir.normalize();\r\n const near = dir.dot(this.begin) - length;\r\n const far = dir.dot(this.end) - length;\r\n const results = [];\r\n if (near <= 0) {\r\n results.push(this.begin);\r\n }\r\n if (far <= 0) {\r\n results.push(this.end);\r\n }\r\n if (near * far < 0) {\r\n const clipTime = near / (near - far);\r\n results.push(this.begin.add(this.end.sub(this.begin).scale(clipTime)));\r\n }\r\n if (results.length !== 2) {\r\n return null;\r\n }\r\n return new LineSegment(results[0], results[1]);\r\n }\r\n /**\r\n * Find the perpendicular distance from the line to a point\r\n * https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line\r\n * @param point\r\n */\r\n distanceToPoint(point, signed = false) {\r\n const x0 = point.x;\r\n const y0 = point.y;\r\n const l = this.getLength();\r\n const dy = this.end.y - this.begin.y;\r\n const dx = this.end.x - this.begin.x;\r\n const distance = (dy * x0 - dx * y0 + this.end.x * this.begin.y - this.end.y * this.begin.x) / l;\r\n return signed ? distance : Math.abs(distance);\r\n }\r\n /**\r\n * Find the perpendicular line from the line to a point\r\n * https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line\r\n * (a - p) - ((a - p) * n)n\r\n * a is a point on the line\r\n * p is the arbitrary point above the line\r\n * n is a unit vector in direction of the line\r\n * @param point\r\n */\r\n findVectorToPoint(point) {\r\n const aMinusP = this.begin.sub(point);\r\n const n = this.getSlope();\r\n return aMinusP.sub(n.scale(aMinusP.dot(n)));\r\n }\r\n /**\r\n * Finds a point on the line given only an X or a Y value. Given an X value, the function returns\r\n * a new point with the calculated Y value and vice-versa.\r\n *\r\n * @param x The known X value of the target point\r\n * @param y The known Y value of the target point\r\n * @returns A new point with the other calculated axis value\r\n */\r\n findPoint(x = null, y = null) {\r\n const m = this.slope;\r\n const b = this.intercept;\r\n if (x !== null) {\r\n return new Vector(x, m * x + b);\r\n }\r\n else if (y !== null) {\r\n return new Vector((y - b) / m, y);\r\n }\r\n else {\r\n throw new Error('You must provide an X or a Y value');\r\n }\r\n }\r\n /**\r\n * @see http://stackoverflow.com/a/11908158/109458\r\n */\r\n hasPoint() {\r\n let currPoint;\r\n let threshold = 0;\r\n if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {\r\n currPoint = new Vector(arguments[0], arguments[1]);\r\n threshold = arguments[2] || 0;\r\n }\r\n else if (arguments[0] instanceof Vector) {\r\n currPoint = arguments[0];\r\n threshold = arguments[1] || 0;\r\n }\r\n else {\r\n throw 'Could not determine the arguments for Vector.hasPoint';\r\n }\r\n const dxc = currPoint.x - this.begin.x;\r\n const dyc = currPoint.y - this.begin.y;\r\n const dx1 = this.end.x - this.begin.x;\r\n const dy1 = this.end.y - this.begin.y;\r\n const cross = dxc * dy1 - dyc * dx1;\r\n // check whether point lines on the line\r\n if (Math.abs(cross) > threshold) {\r\n return false;\r\n }\r\n // check whether point lies in-between start and end\r\n if (Math.abs(dx1) >= Math.abs(dy1)) {\r\n return dx1 > 0 ? this.begin.x <= currPoint.x && currPoint.x <= this.end.x : this.end.x <= currPoint.x && currPoint.x <= this.begin.x;\r\n }\r\n else {\r\n return dy1 > 0 ? this.begin.y <= currPoint.y && currPoint.y <= this.end.y : this.end.y <= currPoint.y && currPoint.y <= this.begin.y;\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Colliders/ClosestLineJumpTable.ts\n\r\n\r\n\r\n/**\r\n * Finds the closes line between 2 line segments, were the magnitude of u, v are the lengths of each segment\r\n * L1 = P(s) = p0 + s * u, where s is time and p0 is the start of the line\r\n * L2 = Q(t) = q0 + t * v, where t is time and q0 is the start of the line\r\n * @param p0 Point where L1 begins\r\n * @param u Direction and length of L1\r\n * @param q0 Point were L2 begins\r\n * @param v Direction and length of L2\r\n */\r\nfunction ClosestLine(p0, u, q0, v) {\r\n // Distance between 2 lines http://geomalgorithms.com/a07-_distance.html\r\n // w(s, t) = P(s) - Q(t)\r\n // The w(s, t) that has the minimum distance we will say is w(sClosest, tClosest) = wClosest\r\n //\r\n // wClosest is the vector that is uniquely perpendicular to the 2 line directions u & v.\r\n // wClosest = w0 + sClosest * u - tClosest * v, where w0 is p0 - q0\r\n //\r\n // The closest point between 2 lines then satisfies this pair of equations\r\n // 1: u * wClosest = 0\r\n // 2: v * wClosest = 0\r\n //\r\n // Substituting wClosest into the equations we get\r\n //\r\n // 1: (u * u) * sClosest - (u * v) tClosest = -u * w0\r\n // 2: (v * u) * sClosest - (v * v) tClosest = -v * w0\r\n // simplify w0\r\n const w0 = p0.sub(q0);\r\n // simplify (u * u);\r\n const a = u.dot(u);\r\n // simplify (u * v);\r\n const b = u.dot(v);\r\n // simplify (v * v)\r\n const c = v.dot(v);\r\n // simplify (u * w0)\r\n const d = u.dot(w0);\r\n // simplify (v * w0)\r\n const e = v.dot(w0);\r\n // denominator ac - b^2\r\n const denom = a * c - b * b;\r\n let sDenom = denom;\r\n let tDenom = denom;\r\n // if denom is 0 they are parallel, use any point from either as the start in this case p0\r\n if (denom === 0 || denom <= 0.01) {\r\n const tClosestParallel = d / b;\r\n return new LineSegment(p0, q0.add(v.scale(tClosestParallel)));\r\n }\r\n // Solve for sClosest for infinite line\r\n let sClosest = b * e - c * d; // / denom;\r\n // Solve for tClosest for infinite line\r\n let tClosest = a * e - b * d; // / denom;\r\n // Solve for segments candidate edges, if sClosest and tClosest are outside their segments\r\n if (sClosest < 0) {\r\n sClosest = 0;\r\n tClosest = e;\r\n tDenom = c;\r\n }\r\n else if (sClosest > sDenom) {\r\n sClosest = sDenom;\r\n tClosest = e + b;\r\n tDenom = c;\r\n }\r\n if (tClosest < 0) {\r\n tClosest = 0;\r\n if (-d < 0) {\r\n sClosest = 0;\r\n }\r\n else if (-d > a) {\r\n sClosest = sDenom;\r\n }\r\n else {\r\n sClosest = -d;\r\n sDenom = a;\r\n }\r\n }\r\n else if (tClosest > tDenom) {\r\n tClosest = tDenom;\r\n if (-d + b < 0) {\r\n sClosest = 0;\r\n }\r\n else if (-d + b > a) {\r\n sClosest = sDenom;\r\n }\r\n else {\r\n sClosest = -d + b;\r\n sDenom = a;\r\n }\r\n }\r\n sClosest = Math.abs(sClosest) < 0.001 ? 0 : sClosest / sDenom;\r\n tClosest = Math.abs(tClosest) < 0.001 ? 0 : tClosest / tDenom;\r\n return new LineSegment(p0.add(u.scale(sClosest)), q0.add(v.scale(tClosest)));\r\n}\r\nconst ClosestLineJumpTable = {\r\n PolygonPolygonClosestLine(polygonA, polygonB) {\r\n // Find the 2 closest faces on each polygon\r\n const otherWorldPos = polygonB.worldPos;\r\n const otherDirection = otherWorldPos.sub(polygonA.worldPos);\r\n const thisDirection = otherDirection.negate();\r\n const rayTowardsOther = new Ray(polygonA.worldPos, otherDirection);\r\n const rayTowardsThis = new Ray(otherWorldPos, thisDirection);\r\n const thisPoint = polygonA.rayCast(rayTowardsOther).add(rayTowardsOther.dir.scale(0.1));\r\n const otherPoint = polygonB.rayCast(rayTowardsThis).add(rayTowardsThis.dir.scale(0.1));\r\n const thisFace = polygonA.getClosestFace(thisPoint);\r\n const otherFace = polygonB.getClosestFace(otherPoint);\r\n // L1 = P(s) = p0 + s * u, where s is time and p0 is the start of the line\r\n const p0 = thisFace.face.begin;\r\n const u = thisFace.face.getEdge();\r\n // L2 = Q(t) = q0 + t * v, where t is time and q0 is the start of the line\r\n const q0 = otherFace.face.begin;\r\n const v = otherFace.face.getEdge();\r\n return ClosestLine(p0, u, q0, v);\r\n },\r\n PolygonEdgeClosestLine(polygon, edge) {\r\n // Find the 2 closest faces on each polygon\r\n const otherWorldPos = edge.worldPos;\r\n const otherDirection = otherWorldPos.sub(polygon.worldPos);\r\n const rayTowardsOther = new Ray(polygon.worldPos, otherDirection);\r\n const thisPoint = polygon.rayCast(rayTowardsOther).add(rayTowardsOther.dir.scale(0.1));\r\n const thisFace = polygon.getClosestFace(thisPoint);\r\n // L1 = P(s) = p0 + s * u, where s is time and p0 is the start of the line\r\n const p0 = thisFace.face.begin;\r\n const u = thisFace.face.getEdge();\r\n // L2 = Q(t) = q0 + t * v, where t is time and q0 is the start of the line\r\n const edgeLine = edge.asLine();\r\n const edgeStart = edgeLine.begin;\r\n const edgeVector = edgeLine.getEdge();\r\n const q0 = edgeStart;\r\n const v = edgeVector;\r\n return ClosestLine(p0, u, q0, v);\r\n },\r\n PolygonCircleClosestLine(polygon, circle) {\r\n // https://math.stackexchange.com/questions/1919177/how-to-find-point-on-line-closest-to-sphere\r\n // Find the 2 closest faces on each polygon\r\n const otherWorldPos = circle.worldPos;\r\n const otherDirection = otherWorldPos.sub(polygon.worldPos);\r\n const rayTowardsOther = new Ray(polygon.worldPos, otherDirection.normalize());\r\n const thisPoint = polygon.rayCast(rayTowardsOther).add(rayTowardsOther.dir.scale(0.1));\r\n const thisFace = polygon.getClosestFace(thisPoint);\r\n // L1 = P(s) = p0 + s * u, where s is time and p0 is the start of the line\r\n const p0 = thisFace.face.begin;\r\n const u = thisFace.face.getEdge();\r\n // Time of minimum distance\r\n let t = (u.x * (otherWorldPos.x - p0.x) + u.y * (otherWorldPos.y - p0.y)) / (u.x * u.x + u.y * u.y);\r\n // If time of minimum is past the edge clamp\r\n if (t > 1) {\r\n t = 1;\r\n }\r\n else if (t < 0) {\r\n t = 0;\r\n }\r\n // Minimum distance\r\n const d = Math.sqrt(Math.pow(p0.x + u.x * t - otherWorldPos.x, 2) + Math.pow(p0.y + u.y * t - otherWorldPos.y, 2)) - circle.radius;\r\n const circlex = ((p0.x + u.x * t - otherWorldPos.x) * circle.radius) / (circle.radius + d);\r\n const circley = ((p0.y + u.y * t - otherWorldPos.y) * circle.radius) / (circle.radius + d);\r\n return new LineSegment(u.scale(t).add(p0), new Vector(otherWorldPos.x + circlex, otherWorldPos.y + circley));\r\n },\r\n CircleCircleClosestLine(circleA, circleB) {\r\n // Find the 2 closest faces on each polygon\r\n const otherWorldPos = circleB.worldPos;\r\n const otherDirection = otherWorldPos.sub(circleA.worldPos);\r\n const thisWorldPos = circleA.worldPos;\r\n const thisDirection = thisWorldPos.sub(circleB.worldPos);\r\n const rayTowardsOther = new Ray(circleA.worldPos, otherDirection);\r\n const rayTowardsThis = new Ray(circleB.worldPos, thisDirection);\r\n const thisPoint = circleA.rayCast(rayTowardsOther);\r\n const otherPoint = circleB.rayCast(rayTowardsThis);\r\n return new LineSegment(thisPoint, otherPoint);\r\n },\r\n CircleEdgeClosestLine(circle, edge) {\r\n // https://math.stackexchange.com/questions/1919177/how-to-find-point-on-line-closest-to-sphere\r\n const circleWorlPos = circle.worldPos;\r\n // L1 = P(s) = p0 + s * u, where s is time and p0 is the start of the line\r\n const edgeLine = edge.asLine();\r\n const edgeStart = edgeLine.begin;\r\n const edgeVector = edgeLine.getEdge();\r\n const p0 = edgeStart;\r\n const u = edgeVector;\r\n // Time of minimum distance\r\n let t = (u.x * (circleWorlPos.x - p0.x) + u.y * (circleWorlPos.y - p0.y)) / (u.x * u.x + u.y * u.y);\r\n // If time of minimum is past the edge clamp to edge\r\n if (t > 1) {\r\n t = 1;\r\n }\r\n else if (t < 0) {\r\n t = 0;\r\n }\r\n // Minimum distance\r\n const d = Math.sqrt(Math.pow(p0.x + u.x * t - circleWorlPos.x, 2) + Math.pow(p0.y + u.y * t - circleWorlPos.y, 2)) - circle.radius;\r\n const circlex = ((p0.x + u.x * t - circleWorlPos.x) * circle.radius) / (circle.radius + d);\r\n const circley = ((p0.y + u.y * t - circleWorlPos.y) * circle.radius) / (circle.radius + d);\r\n return new LineSegment(u.scale(t).add(p0), new Vector(circleWorlPos.x + circlex, circleWorlPos.y + circley));\r\n },\r\n EdgeEdgeClosestLine(edgeA, edgeB) {\r\n // L1 = P(s) = p0 + s * u, where s is time and p0 is the start of the line\r\n const edgeLineA = edgeA.asLine();\r\n const edgeStartA = edgeLineA.begin;\r\n const edgeVectorA = edgeLineA.getEdge();\r\n const p0 = edgeStartA;\r\n const u = edgeVectorA;\r\n // L2 = Q(t) = q0 + t * v, where t is time and q0 is the start of the line\r\n const edgeLineB = edgeB.asLine();\r\n const edgeStartB = edgeLineB.begin;\r\n const edgeVectorB = edgeLineB.getEdge();\r\n const q0 = edgeStartB;\r\n const v = edgeVectorB;\r\n return ClosestLine(p0, u, q0, v);\r\n }\r\n};\r\n\n;// CONCATENATED MODULE: ./Collision/Colliders/CircleCollider.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * This is a circle collider for the excalibur rigid body physics simulation\r\n */\r\nclass CircleCollider extends Collider {\r\n constructor(options) {\r\n super();\r\n /**\r\n * Position of the circle relative to the collider, by default (0, 0).\r\n */\r\n this.offset = Vector.Zero;\r\n this._globalMatrix = AffineMatrix.identity();\r\n this.offset = options.offset || Vector.Zero;\r\n this.radius = options.radius || 0;\r\n this._globalMatrix.translate(this.offset.x, this.offset.y);\r\n }\r\n get worldPos() {\r\n return this._globalMatrix.getPosition();\r\n }\r\n /**\r\n * Get the radius of the circle\r\n */\r\n get radius() {\r\n var _a;\r\n const tx = this._transform;\r\n const scale = (_a = tx === null || tx === void 0 ? void 0 : tx.globalScale) !== null && _a !== void 0 ? _a : Vector.One;\r\n // This is a trade off, the alternative is retooling circles to support ellipse collisions\r\n return this._naturalRadius * Math.min(scale.x, scale.y);\r\n }\r\n /**\r\n * Set the radius of the circle\r\n */\r\n set radius(val) {\r\n var _a;\r\n const tx = this._transform;\r\n const scale = (_a = tx === null || tx === void 0 ? void 0 : tx.globalScale) !== null && _a !== void 0 ? _a : Vector.One;\r\n // This is a trade off, the alternative is retooling circles to support ellipse collisions\r\n this._naturalRadius = val / Math.min(scale.x, scale.y);\r\n }\r\n /**\r\n * Returns a clone of this shape, not associated with any collider\r\n */\r\n clone() {\r\n return new CircleCollider({\r\n offset: this.offset.clone(),\r\n radius: this.radius\r\n });\r\n }\r\n /**\r\n * Get the center of the collider in world coordinates\r\n */\r\n get center() {\r\n return this._globalMatrix.getPosition();\r\n }\r\n /**\r\n * Tests if a point is contained in this collider\r\n */\r\n contains(point) {\r\n var _a, _b;\r\n const pos = (_b = (_a = this._transform) === null || _a === void 0 ? void 0 : _a.pos) !== null && _b !== void 0 ? _b : this.offset;\r\n const distance = pos.distance(point);\r\n if (distance <= this.radius) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**\r\n * Casts a ray at the Circle collider and returns the nearest point of collision\r\n * @param ray\r\n */\r\n rayCast(ray, max = Infinity) {\r\n //https://en.wikipedia.org/wiki/Line%E2%80%93sphere_intersection\r\n const c = this.center;\r\n const dir = ray.dir;\r\n const orig = ray.pos;\r\n const discriminant = Math.sqrt(Math.pow(dir.dot(orig.sub(c)), 2) - Math.pow(orig.sub(c).distance(), 2) + Math.pow(this.radius, 2));\r\n if (discriminant < 0) {\r\n // no intersection\r\n return null;\r\n }\r\n else {\r\n let toi = 0;\r\n if (discriminant === 0) {\r\n toi = -dir.dot(orig.sub(c));\r\n if (toi > 0 && toi < max) {\r\n return ray.getPoint(toi);\r\n }\r\n return null;\r\n }\r\n else {\r\n const toi1 = -dir.dot(orig.sub(c)) + discriminant;\r\n const toi2 = -dir.dot(orig.sub(c)) - discriminant;\r\n const positiveToi = [];\r\n if (toi1 >= 0) {\r\n positiveToi.push(toi1);\r\n }\r\n if (toi2 >= 0) {\r\n positiveToi.push(toi2);\r\n }\r\n const mintoi = Math.min(...positiveToi);\r\n if (mintoi <= max) {\r\n return ray.getPoint(mintoi);\r\n }\r\n return null;\r\n }\r\n }\r\n }\r\n getClosestLineBetween(shape) {\r\n if (shape instanceof CircleCollider) {\r\n return ClosestLineJumpTable.CircleCircleClosestLine(this, shape);\r\n }\r\n else if (shape instanceof PolygonCollider) {\r\n return ClosestLineJumpTable.PolygonCircleClosestLine(shape, this).flip();\r\n }\r\n else if (shape instanceof EdgeCollider) {\r\n return ClosestLineJumpTable.CircleEdgeClosestLine(this, shape).flip();\r\n }\r\n else {\r\n throw new Error(`Polygon could not collide with unknown CollisionShape ${typeof shape}`);\r\n }\r\n }\r\n /**\r\n * @inheritdoc\r\n */\r\n collide(collider) {\r\n if (collider instanceof CircleCollider) {\r\n return CollisionJumpTable.CollideCircleCircle(this, collider);\r\n }\r\n else if (collider instanceof PolygonCollider) {\r\n return CollisionJumpTable.CollideCirclePolygon(this, collider);\r\n }\r\n else if (collider instanceof EdgeCollider) {\r\n return CollisionJumpTable.CollideCircleEdge(this, collider);\r\n }\r\n else {\r\n throw new Error(`Circle could not collide with unknown CollisionShape ${typeof collider}`);\r\n }\r\n }\r\n /**\r\n * Find the point on the collider furthest in the direction specified\r\n */\r\n getFurthestPoint(direction) {\r\n return this.center.add(direction.normalize().scale(this.radius));\r\n }\r\n /**\r\n * Find the local point on the shape in the direction specified\r\n * @param direction\r\n */\r\n getFurthestLocalPoint(direction) {\r\n const dir = direction.normalize();\r\n return dir.scale(this.radius);\r\n }\r\n /**\r\n * Get the axis aligned bounding box for the circle collider in world coordinates\r\n */\r\n get bounds() {\r\n var _a, _b, _c;\r\n const tx = this._transform;\r\n const scale = (_a = tx === null || tx === void 0 ? void 0 : tx.globalScale) !== null && _a !== void 0 ? _a : Vector.One;\r\n const rotation = (_b = tx === null || tx === void 0 ? void 0 : tx.globalRotation) !== null && _b !== void 0 ? _b : 0;\r\n const pos = ((_c = tx === null || tx === void 0 ? void 0 : tx.globalPos) !== null && _c !== void 0 ? _c : Vector.Zero);\r\n return new BoundingBox(this.offset.x - this._naturalRadius, this.offset.y - this._naturalRadius, this.offset.x + this._naturalRadius, this.offset.y + this._naturalRadius).rotate(rotation).scale(scale).translate(pos);\r\n }\r\n /**\r\n * Get the axis aligned bounding box for the circle collider in local coordinates\r\n */\r\n get localBounds() {\r\n return new BoundingBox(this.offset.x - this._naturalRadius, this.offset.y - this._naturalRadius, this.offset.x + this._naturalRadius, this.offset.y + this._naturalRadius);\r\n }\r\n /**\r\n * Get axis not implemented on circles, since there are infinite axis in a circle\r\n */\r\n get axes() {\r\n return [];\r\n }\r\n /**\r\n * Returns the moment of inertia of a circle given it's mass\r\n * https://en.wikipedia.org/wiki/List_of_moments_of_inertia\r\n */\r\n getInertia(mass) {\r\n return (mass * this.radius * this.radius) / 2;\r\n }\r\n /* istanbul ignore next */\r\n update(transform) {\r\n var _a;\r\n this._transform = transform;\r\n const globalMat = (_a = transform.matrix) !== null && _a !== void 0 ? _a : this._globalMatrix;\r\n globalMat.clone(this._globalMatrix);\r\n this._globalMatrix.translate(this.offset.x, this.offset.y);\r\n }\r\n /**\r\n * Project the circle along a specified axis\r\n */\r\n project(axis) {\r\n const scalars = [];\r\n const point = this.center;\r\n const dotProduct = point.dot(axis);\r\n scalars.push(dotProduct);\r\n scalars.push(dotProduct + this.radius);\r\n scalars.push(dotProduct - this.radius);\r\n return new Projection(Math.min.apply(Math, scalars), Math.max.apply(Math, scalars));\r\n }\r\n debug(ex, color) {\r\n var _a, _b, _c, _d;\r\n const tx = this._transform;\r\n const scale = (_a = tx === null || tx === void 0 ? void 0 : tx.globalScale) !== null && _a !== void 0 ? _a : Vector.One;\r\n const rotation = (_b = tx === null || tx === void 0 ? void 0 : tx.globalRotation) !== null && _b !== void 0 ? _b : 0;\r\n const pos = ((_c = tx === null || tx === void 0 ? void 0 : tx.globalPos) !== null && _c !== void 0 ? _c : Vector.Zero);\r\n ex.save();\r\n ex.translate(pos.x, pos.y);\r\n ex.rotate(rotation);\r\n ex.scale(scale.x, scale.y);\r\n ex.drawCircle(((_d = this.offset) !== null && _d !== void 0 ? _d : Vector.Zero), this._naturalRadius, Color.Transparent, color, 2);\r\n ex.restore();\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Detection/CollisionContact.ts\n\r\n\r\n\r\n\r\n/**\r\n * Collision contacts are used internally by Excalibur to resolve collision between colliders. This\r\n * Pair prevents collisions from being evaluated more than one time\r\n */\r\nclass CollisionContact {\r\n constructor(colliderA, colliderB, mtv, normal, tangent, points, localPoints, info) {\r\n var _a, _b;\r\n this._canceled = false;\r\n this.colliderA = colliderA;\r\n this.colliderB = colliderB;\r\n this.mtv = mtv;\r\n this.normal = normal;\r\n this.tangent = tangent;\r\n this.points = points;\r\n this.localPoints = localPoints;\r\n this.info = info;\r\n this.id = Pair.calculatePairHash(colliderA.id, colliderB.id);\r\n if (colliderA.__compositeColliderId || colliderB.__compositeColliderId) {\r\n // Add on the parent composite pair for start/end contact\r\n this.id += '|' + Pair.calculatePairHash((_a = colliderA.__compositeColliderId) !== null && _a !== void 0 ? _a : colliderA.id, (_b = colliderB.__compositeColliderId) !== null && _b !== void 0 ? _b : colliderB.id);\r\n }\r\n }\r\n /**\r\n * Match contact awake state, except if body's are Fixed\r\n */\r\n matchAwake() {\r\n const bodyA = this.colliderA.owner.get(BodyComponent);\r\n const bodyB = this.colliderB.owner.get(BodyComponent);\r\n if (bodyA && bodyB) {\r\n if (bodyA.sleeping !== bodyB.sleeping) {\r\n if (bodyA.sleeping && bodyA.collisionType !== CollisionType.Fixed && bodyB.sleepMotion >= Physics.wakeThreshold) {\r\n bodyA.setSleeping(false);\r\n }\r\n if (bodyB.sleeping && bodyB.collisionType !== CollisionType.Fixed && bodyA.sleepMotion >= Physics.wakeThreshold) {\r\n bodyB.setSleeping(false);\r\n }\r\n }\r\n }\r\n }\r\n isCanceled() {\r\n return this._canceled;\r\n }\r\n cancel() {\r\n this._canceled = true;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Colliders/SeparatingAxis.ts\nclass SeparatingAxis {\r\n static findPolygonPolygonSeparation(polyA, polyB) {\r\n let bestSeparation = -Number.MAX_VALUE;\r\n let bestSide = null;\r\n let bestAxis = null;\r\n let bestSideIndex = -1;\r\n let bestOtherPoint = null;\r\n const sides = polyA.getSides();\r\n const localSides = polyA.getLocalSides();\r\n for (let i = 0; i < sides.length; i++) {\r\n const side = sides[i];\r\n const axis = side.normal();\r\n const vertB = polyB.getFurthestPoint(axis.negate());\r\n // Separation on side i's axis\r\n // We are looking for the largest separation between poly A's sides\r\n const vertSeparation = side.distanceToPoint(vertB, true);\r\n if (vertSeparation > bestSeparation) {\r\n bestSeparation = vertSeparation;\r\n bestSide = side;\r\n bestAxis = axis;\r\n bestSideIndex = i;\r\n bestOtherPoint = vertB;\r\n }\r\n }\r\n return {\r\n collider: polyA,\r\n separation: bestAxis ? bestSeparation : 99,\r\n axis: bestAxis,\r\n side: bestSide,\r\n localSide: localSides[bestSideIndex],\r\n sideId: bestSideIndex,\r\n point: bestOtherPoint,\r\n localPoint: bestAxis ? polyB.getFurthestLocalPoint(bestAxis.negate()) : null\r\n };\r\n }\r\n static findCirclePolygonSeparation(circle, polygon) {\r\n const axes = polygon.axes;\r\n const pc = polygon.center;\r\n // Special SAT with circles\r\n const polyDir = pc.sub(circle.worldPos);\r\n const closestPointOnPoly = polygon.getFurthestPoint(polyDir.negate());\r\n axes.push(closestPointOnPoly.sub(circle.worldPos).normalize());\r\n let minOverlap = Number.MAX_VALUE;\r\n let minAxis = null;\r\n let minIndex = -1;\r\n for (let i = 0; i < axes.length; i++) {\r\n const proj1 = polygon.project(axes[i]);\r\n const proj2 = circle.project(axes[i]);\r\n const overlap = proj1.getOverlap(proj2);\r\n if (overlap <= 0) {\r\n return null;\r\n }\r\n else {\r\n if (overlap < minOverlap) {\r\n minOverlap = overlap;\r\n minAxis = axes[i];\r\n minIndex = i;\r\n }\r\n }\r\n }\r\n if (minIndex < 0) {\r\n return null;\r\n }\r\n return minAxis.normalize().scale(minOverlap);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Colliders/CollisionJumpTable.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst CollisionJumpTable = {\r\n CollideCircleCircle(circleA, circleB) {\r\n const circleAPos = circleA.worldPos;\r\n const circleBPos = circleB.worldPos;\r\n const combinedRadius = circleA.radius + circleB.radius;\r\n const distance = circleAPos.distance(circleBPos);\r\n if (distance > combinedRadius) {\r\n return [];\r\n }\r\n // negative means overlap\r\n const separation = combinedRadius - distance;\r\n // Normal points from A -> B\r\n const normal = circleBPos.sub(circleAPos).normalize();\r\n const tangent = normal.perpendicular();\r\n const mvt = normal.scale(separation);\r\n const point = circleA.getFurthestPoint(normal);\r\n const local = circleA.getFurthestLocalPoint(normal);\r\n const info = {\r\n collider: circleA,\r\n separation,\r\n axis: normal,\r\n point: point\r\n };\r\n return [new CollisionContact(circleA, circleB, mvt, normal, tangent, [point], [local], info)];\r\n },\r\n CollideCirclePolygon(circle, polygon) {\r\n var _a, _b;\r\n let minAxis = SeparatingAxis.findCirclePolygonSeparation(circle, polygon);\r\n if (!minAxis) {\r\n return [];\r\n }\r\n // make sure that the minAxis is pointing away from circle\r\n const samedir = minAxis.dot(polygon.center.sub(circle.center));\r\n minAxis = samedir < 0 ? minAxis.negate() : minAxis;\r\n const point = circle.getFurthestPoint(minAxis);\r\n const xf = (_b = (_a = circle.owner) === null || _a === void 0 ? void 0 : _a.get(TransformComponent)) !== null && _b !== void 0 ? _b : new TransformComponent();\r\n const local = xf.applyInverse(point);\r\n const normal = minAxis.normalize();\r\n const info = {\r\n collider: circle,\r\n separation: -minAxis.size,\r\n axis: normal,\r\n point: point,\r\n localPoint: local,\r\n side: polygon.findSide(normal.negate()),\r\n localSide: polygon.findLocalSide(normal.negate())\r\n };\r\n return [new CollisionContact(circle, polygon, minAxis, normal, normal.perpendicular(), [point], [local], info)];\r\n },\r\n CollideCircleEdge(circle, edge) {\r\n // TODO not sure this actually abides by local/world collisions\r\n // Are edge.begin and edge.end local space or world space? I think they should be local\r\n // center of the circle in world pos\r\n const cc = circle.center;\r\n // vector in the direction of the edge\r\n const edgeWorld = edge.asLine();\r\n const e = edgeWorld.end.sub(edgeWorld.begin);\r\n // amount of overlap with the circle's center along the edge direction\r\n const u = e.dot(edgeWorld.end.sub(cc));\r\n const v = e.dot(cc.sub(edgeWorld.begin));\r\n const side = edge.asLine();\r\n const localSide = edge.asLocalLine();\r\n // Potential region A collision (circle is on the left side of the edge, before the beginning)\r\n if (v <= 0) {\r\n const da = edgeWorld.begin.sub(cc);\r\n const dda = da.dot(da); // quick and dirty way of calc'n distance in r^2 terms saves some sqrts\r\n // save some sqrts\r\n if (dda > circle.radius * circle.radius) {\r\n return []; // no collision\r\n }\r\n const normal = da.normalize();\r\n const separation = circle.radius - Math.sqrt(dda);\r\n const info = {\r\n collider: circle,\r\n separation: separation,\r\n axis: normal,\r\n point: side.begin,\r\n side: side,\r\n localSide: localSide\r\n };\r\n return [\r\n new CollisionContact(circle, edge, normal.scale(separation), normal, normal.perpendicular(), [side.begin], [localSide.begin], info)\r\n ];\r\n }\r\n // Potential region B collision (circle is on the right side of the edge, after the end)\r\n if (u <= 0) {\r\n const db = edgeWorld.end.sub(cc);\r\n const ddb = db.dot(db);\r\n if (ddb > circle.radius * circle.radius) {\r\n return [];\r\n }\r\n const normal = db.normalize();\r\n const separation = circle.radius - Math.sqrt(ddb);\r\n const info = {\r\n collider: circle,\r\n separation: separation,\r\n axis: normal,\r\n point: side.end,\r\n side: side,\r\n localSide: localSide\r\n };\r\n return [\r\n new CollisionContact(circle, edge, normal.scale(separation), normal, normal.perpendicular(), [side.end], [localSide.end], info)\r\n ];\r\n }\r\n // Otherwise potential region AB collision (circle is in the middle of the edge between the beginning and end)\r\n const den = e.dot(e);\r\n const pointOnEdge = edgeWorld.begin\r\n .scale(u)\r\n .add(edgeWorld.end.scale(v))\r\n .scale(1 / den);\r\n const d = cc.sub(pointOnEdge);\r\n const dd = d.dot(d);\r\n if (dd > circle.radius * circle.radius) {\r\n return []; // no collision\r\n }\r\n let normal = e.perpendicular();\r\n // flip correct direction\r\n if (normal.dot(cc.sub(edgeWorld.begin)) < 0) {\r\n normal.x = -normal.x;\r\n normal.y = -normal.y;\r\n }\r\n normal = normal.normalize();\r\n const separation = circle.radius - Math.sqrt(dd);\r\n const mvt = normal.scale(separation);\r\n const info = {\r\n collider: circle,\r\n separation: separation,\r\n axis: normal,\r\n point: pointOnEdge,\r\n side: side,\r\n localSide: localSide\r\n };\r\n return [\r\n new CollisionContact(circle, edge, mvt, normal.negate(), normal.negate().perpendicular(), [pointOnEdge], [pointOnEdge.sub(edge.worldPos)], info)\r\n ];\r\n },\r\n CollideEdgeEdge() {\r\n // Edge-edge collision doesn't make sense\r\n return [];\r\n },\r\n CollidePolygonEdge(polygon, edge) {\r\n var _a;\r\n const pc = polygon.center;\r\n const ec = edge.center;\r\n const dir = ec.sub(pc).normalize();\r\n // build a temporary polygon from the edge to use SAT\r\n const linePoly = new PolygonCollider({\r\n points: [edge.begin, edge.end, edge.end.add(dir.scale(100)), edge.begin.add(dir.scale(100))],\r\n offset: edge.offset\r\n });\r\n linePoly.owner = edge.owner;\r\n const tx = (_a = edge.owner) === null || _a === void 0 ? void 0 : _a.get(TransformComponent);\r\n if (tx) {\r\n linePoly.update(edge.owner.get(TransformComponent).get());\r\n }\r\n // Gross hack but poly-poly works well\r\n const contact = this.CollidePolygonPolygon(polygon, linePoly);\r\n if (contact.length) {\r\n // Fudge the contact back to edge\r\n contact[0].colliderB = edge;\r\n contact[0].id = Pair.calculatePairHash(polygon.id, edge.id);\r\n }\r\n return contact;\r\n },\r\n CollidePolygonPolygon(polyA, polyB) {\r\n var _a, _b, _c, _d;\r\n // Multi contact from SAT\r\n // https://gamedev.stackexchange.com/questions/111390/multiple-contacts-for-sat-collision-detection\r\n // do a SAT test to find a min axis if it exists\r\n const separationA = SeparatingAxis.findPolygonPolygonSeparation(polyA, polyB);\r\n // If there is no overlap from boxA's perspective we can end early\r\n if (separationA.separation > 0) {\r\n return [];\r\n }\r\n const separationB = SeparatingAxis.findPolygonPolygonSeparation(polyB, polyA);\r\n // If there is no overlap from boxB's perspective exit now\r\n if (separationB.separation > 0) {\r\n return [];\r\n }\r\n // Separations are both negative, we want to pick the least negative (minimal movement)\r\n const separation = separationA.separation > separationB.separation ? separationA : separationB;\r\n // The incident side is the most opposite from the axes of collision on the other collider\r\n const other = separation.collider === polyA ? polyB : polyA;\r\n const incident = other.findSide(separation.axis.negate());\r\n // Clip incident side by the perpendicular lines at each end of the reference side\r\n // https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm\r\n const reference = separation.side;\r\n const refDir = reference.dir().normalize();\r\n // Find our contact points by clipping the incident by the collision side\r\n const clipRight = incident.clip(refDir.negate(), -refDir.dot(reference.begin));\r\n let clipLeft = null;\r\n if (clipRight) {\r\n clipLeft = clipRight.clip(refDir, refDir.dot(reference.end));\r\n }\r\n // If there is no left there is no collision\r\n if (clipLeft) {\r\n // We only want clip points below the reference edge, discard the others\r\n const points = clipLeft.getPoints().filter((p) => {\r\n return reference.below(p);\r\n });\r\n let normal = separation.axis;\r\n let tangent = normal.perpendicular();\r\n // Point Contact A -> B\r\n if (polyB.center.sub(polyA.center).dot(normal) < 0) {\r\n normal = normal.negate();\r\n tangent = normal.perpendicular();\r\n }\r\n // Points are clipped from incident which is the other collider\r\n // Store those as locals\r\n let localPoints = [];\r\n if (separation.collider === polyA) {\r\n const xf = (_b = (_a = polyB.owner) === null || _a === void 0 ? void 0 : _a.get(TransformComponent)) !== null && _b !== void 0 ? _b : new TransformComponent();\r\n localPoints = points.map((p) => xf.applyInverse(p));\r\n }\r\n else {\r\n const xf = (_d = (_c = polyA.owner) === null || _c === void 0 ? void 0 : _c.get(TransformComponent)) !== null && _d !== void 0 ? _d : new TransformComponent();\r\n localPoints = points.map((p) => xf.applyInverse(p));\r\n }\r\n return [new CollisionContact(polyA, polyB, normal.scale(-separation.separation), normal, tangent, points, localPoints, separation)];\r\n }\r\n return [];\r\n },\r\n FindContactSeparation(contact, localPoint) {\r\n var _a, _b, _c, _d;\r\n const shapeA = contact.colliderA;\r\n const txA = (_b = (_a = contact.colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(TransformComponent)) !== null && _b !== void 0 ? _b : new TransformComponent();\r\n const shapeB = contact.colliderB;\r\n const txB = (_d = (_c = contact.colliderB.owner) === null || _c === void 0 ? void 0 : _c.get(TransformComponent)) !== null && _d !== void 0 ? _d : new TransformComponent();\r\n // both are circles\r\n if (shapeA instanceof CircleCollider && shapeB instanceof CircleCollider) {\r\n const combinedRadius = shapeA.radius + shapeB.radius;\r\n const distance = txA.pos.distance(txB.pos);\r\n const separation = combinedRadius - distance;\r\n return -separation;\r\n }\r\n // both are polygons\r\n if (shapeA instanceof PolygonCollider && shapeB instanceof PolygonCollider) {\r\n if (contact.info.localSide) {\r\n let side;\r\n let worldPoint;\r\n if (contact.info.collider === shapeA) {\r\n side = new LineSegment(txA.apply(contact.info.localSide.begin), txA.apply(contact.info.localSide.end));\r\n worldPoint = txB.apply(localPoint);\r\n }\r\n else {\r\n side = new LineSegment(txB.apply(contact.info.localSide.begin), txB.apply(contact.info.localSide.end));\r\n worldPoint = txA.apply(localPoint);\r\n }\r\n return side.distanceToPoint(worldPoint, true);\r\n }\r\n }\r\n // polygon v circle\r\n if ((shapeA instanceof PolygonCollider && shapeB instanceof CircleCollider) ||\r\n (shapeB instanceof PolygonCollider && shapeA instanceof CircleCollider)) {\r\n const worldPoint = txA.apply(localPoint);\r\n if (contact.info.side) {\r\n return contact.info.side.distanceToPoint(worldPoint, true);\r\n }\r\n }\r\n // polygon v edge\r\n if ((shapeA instanceof EdgeCollider && shapeB instanceof PolygonCollider) ||\r\n (shapeB instanceof EdgeCollider && shapeA instanceof PolygonCollider)) {\r\n let worldPoint;\r\n if (contact.info.collider === shapeA) {\r\n worldPoint = txB.apply(localPoint);\r\n }\r\n else {\r\n worldPoint = txA.apply(localPoint);\r\n }\r\n if (contact.info.side) {\r\n return contact.info.side.distanceToPoint(worldPoint, true);\r\n }\r\n }\r\n // circle v edge\r\n if ((shapeA instanceof CircleCollider && shapeB instanceof EdgeCollider) ||\r\n (shapeB instanceof CircleCollider && shapeA instanceof EdgeCollider)) {\r\n // Local point is always on the edge which is always shapeB\r\n const worldPoint = txB.apply(localPoint);\r\n let circlePoint;\r\n if (shapeA instanceof CircleCollider) {\r\n circlePoint = shapeA.getFurthestPoint(contact.normal);\r\n }\r\n const dist = worldPoint.distance(circlePoint);\r\n if (contact.info.side) {\r\n return dist > 0 ? -dist : 0;\r\n }\r\n }\r\n return 0;\r\n }\r\n};\r\n\n;// CONCATENATED MODULE: ./Collision/Colliders/EdgeCollider.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Edge is a single line collider to create collisions with a single line.\r\n */\r\nclass EdgeCollider extends Collider {\r\n constructor(options) {\r\n var _a;\r\n super();\r\n this._globalMatrix = AffineMatrix.identity();\r\n this.begin = options.begin || Vector.Zero;\r\n this.end = options.end || Vector.Zero;\r\n this.offset = (_a = options.offset) !== null && _a !== void 0 ? _a : Vector.Zero;\r\n }\r\n /**\r\n * Returns a clone of this Edge, not associated with any collider\r\n */\r\n clone() {\r\n return new EdgeCollider({\r\n begin: this.begin.clone(),\r\n end: this.end.clone()\r\n });\r\n }\r\n get worldPos() {\r\n var _a;\r\n const tx = this._transform;\r\n return (_a = tx === null || tx === void 0 ? void 0 : tx.globalPos.add(this.offset)) !== null && _a !== void 0 ? _a : this.offset;\r\n }\r\n /**\r\n * Get the center of the collision area in world coordinates\r\n */\r\n get center() {\r\n const begin = this._getTransformedBegin();\r\n const end = this._getTransformedEnd();\r\n const pos = begin.average(end);\r\n return pos;\r\n }\r\n _getTransformedBegin() {\r\n return this._globalMatrix.multiply(this.begin);\r\n }\r\n _getTransformedEnd() {\r\n return this._globalMatrix.multiply(this.end);\r\n }\r\n /**\r\n * Returns the slope of the line in the form of a vector\r\n */\r\n getSlope() {\r\n const begin = this._getTransformedBegin();\r\n const end = this._getTransformedEnd();\r\n const distance = begin.distance(end);\r\n return end.sub(begin).scale(1 / distance);\r\n }\r\n /**\r\n * Returns the length of the line segment in pixels\r\n */\r\n getLength() {\r\n const begin = this._getTransformedBegin();\r\n const end = this._getTransformedEnd();\r\n const distance = begin.distance(end);\r\n return distance;\r\n }\r\n /**\r\n * Tests if a point is contained in this collision area\r\n */\r\n contains() {\r\n return false;\r\n }\r\n /**\r\n * @inheritdoc\r\n */\r\n rayCast(ray, max = Infinity) {\r\n const numerator = this._getTransformedBegin().sub(ray.pos);\r\n // Test is line and ray are parallel and non intersecting\r\n if (ray.dir.cross(this.getSlope()) === 0 && numerator.cross(ray.dir) !== 0) {\r\n return null;\r\n }\r\n // Lines are parallel\r\n const divisor = ray.dir.cross(this.getSlope());\r\n if (divisor === 0) {\r\n return null;\r\n }\r\n const t = numerator.cross(this.getSlope()) / divisor;\r\n if (t >= 0 && t <= max) {\r\n const u = numerator.cross(ray.dir) / divisor / this.getLength();\r\n if (u >= 0 && u <= 1) {\r\n return ray.getPoint(t);\r\n }\r\n }\r\n return null;\r\n }\r\n /**\r\n * Returns the closes line between this and another collider, from this -> collider\r\n * @param shape\r\n */\r\n getClosestLineBetween(shape) {\r\n if (shape instanceof CircleCollider) {\r\n return ClosestLineJumpTable.CircleEdgeClosestLine(shape, this);\r\n }\r\n else if (shape instanceof PolygonCollider) {\r\n return ClosestLineJumpTable.PolygonEdgeClosestLine(shape, this).flip();\r\n }\r\n else if (shape instanceof EdgeCollider) {\r\n return ClosestLineJumpTable.EdgeEdgeClosestLine(this, shape);\r\n }\r\n else {\r\n throw new Error(`Polygon could not collide with unknown CollisionShape ${typeof shape}`);\r\n }\r\n }\r\n /**\r\n * @inheritdoc\r\n */\r\n collide(shape) {\r\n if (shape instanceof CircleCollider) {\r\n return CollisionJumpTable.CollideCircleEdge(shape, this);\r\n }\r\n else if (shape instanceof PolygonCollider) {\r\n return CollisionJumpTable.CollidePolygonEdge(shape, this);\r\n }\r\n else if (shape instanceof EdgeCollider) {\r\n return CollisionJumpTable.CollideEdgeEdge();\r\n }\r\n else {\r\n throw new Error(`Edge could not collide with unknown CollisionShape ${typeof shape}`);\r\n }\r\n }\r\n /**\r\n * Find the point on the collider furthest in the direction specified\r\n */\r\n getFurthestPoint(direction) {\r\n const transformedBegin = this._getTransformedBegin();\r\n const transformedEnd = this._getTransformedEnd();\r\n if (direction.dot(transformedBegin) > 0) {\r\n return transformedBegin;\r\n }\r\n else {\r\n return transformedEnd;\r\n }\r\n }\r\n _boundsFromBeginEnd(begin, end, padding = 10) {\r\n // A perfectly vertical or horizontal edge would have a bounds 0 width or height\r\n // this causes problems for the collision system so we give them some padding\r\n return new BoundingBox(Math.min(begin.x, end.x) - padding, Math.min(begin.y, end.y) - padding, Math.max(begin.x, end.x) + padding, Math.max(begin.y, end.y) + padding);\r\n }\r\n /**\r\n * Get the axis aligned bounding box for the edge collider in world space\r\n */\r\n get bounds() {\r\n const transformedBegin = this._getTransformedBegin();\r\n const transformedEnd = this._getTransformedEnd();\r\n return this._boundsFromBeginEnd(transformedBegin, transformedEnd);\r\n }\r\n /**\r\n * Get the axis aligned bounding box for the edge collider in local space\r\n */\r\n get localBounds() {\r\n return this._boundsFromBeginEnd(this.begin, this.end);\r\n }\r\n /**\r\n * Returns this edge represented as a line in world coordinates\r\n */\r\n asLine() {\r\n return new LineSegment(this._getTransformedBegin(), this._getTransformedEnd());\r\n }\r\n /**\r\n * Return this edge as a line in local line coordinates (relative to the position)\r\n */\r\n asLocalLine() {\r\n return new LineSegment(this.begin, this.end);\r\n }\r\n /**\r\n * Get the axis associated with the edge\r\n */\r\n get axes() {\r\n const e = this._getTransformedEnd().sub(this._getTransformedBegin());\r\n const edgeNormal = e.normal();\r\n const axes = [];\r\n axes.push(edgeNormal);\r\n axes.push(edgeNormal.negate());\r\n axes.push(edgeNormal.normal());\r\n axes.push(edgeNormal.normal().negate());\r\n return axes;\r\n }\r\n /**\r\n * Get the moment of inertia for an edge\r\n * https://en.wikipedia.org/wiki/List_of_moments_of_inertia\r\n */\r\n getInertia(mass) {\r\n const length = this.end.sub(this.begin).distance() / 2;\r\n return mass * length * length;\r\n }\r\n /**\r\n * @inheritdoc\r\n */\r\n update(transform) {\r\n var _a;\r\n this._transform = transform;\r\n const globalMat = (_a = transform.matrix) !== null && _a !== void 0 ? _a : this._globalMatrix;\r\n globalMat.clone(this._globalMatrix);\r\n this._globalMatrix.translate(this.offset.x, this.offset.y);\r\n }\r\n /**\r\n * Project the edge along a specified axis\r\n */\r\n project(axis) {\r\n const scalars = [];\r\n const points = [this._getTransformedBegin(), this._getTransformedEnd()];\r\n const len = points.length;\r\n for (let i = 0; i < len; i++) {\r\n scalars.push(points[i].dot(axis));\r\n }\r\n return new Projection(Math.min.apply(Math, scalars), Math.max.apply(Math, scalars));\r\n }\r\n debug(ex, color) {\r\n const begin = this._getTransformedBegin();\r\n const end = this._getTransformedEnd();\r\n ex.drawLine(begin, end, color, 2);\r\n ex.drawCircle(begin, 2, color);\r\n ex.drawCircle(end, 2, color);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Colliders/PolygonCollider.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Polygon collider for detecting collisions\r\n */\r\nclass PolygonCollider extends Collider {\r\n constructor(options) {\r\n var _a, _b;\r\n super();\r\n this._logger = Logger.getInstance();\r\n this._transformedPoints = [];\r\n this._sides = [];\r\n this._localSides = [];\r\n this._globalMatrix = AffineMatrix.identity();\r\n this._transformedPointsDirty = true;\r\n this._sidesDirty = true;\r\n this._localSidesDirty = true;\r\n this._localBoundsDirty = true;\r\n this.offset = (_a = options.offset) !== null && _a !== void 0 ? _a : Vector.Zero;\r\n this._globalMatrix.translate(this.offset.x, this.offset.y);\r\n this.points = (_b = options.points) !== null && _b !== void 0 ? _b : [];\r\n const counterClockwise = this._isCounterClockwiseWinding(this.points);\r\n if (!counterClockwise) {\r\n this.points.reverse();\r\n }\r\n if (!this.isConvex()) {\r\n this._logger.warn('Excalibur only supports convex polygon colliders and will not behave properly.' +\r\n 'Call PolygonCollider.triangulate() to build a new collider composed of smaller convex triangles');\r\n }\r\n // calculate initial transformation\r\n this._calculateTransformation();\r\n }\r\n /**\r\n * Points in the polygon in order around the perimeter in local coordinates. These are relative from the body transform position.\r\n * Excalibur stores these in counter-clockwise order\r\n */\r\n set points(points) {\r\n this._localBoundsDirty = true;\r\n this._localSidesDirty = true;\r\n this._sidesDirty = true;\r\n this._points = points;\r\n }\r\n /**\r\n * Points in the polygon in order around the perimeter in local coordinates. These are relative from the body transform position.\r\n * Excalibur stores these in counter-clockwise order\r\n */\r\n get points() {\r\n return this._points;\r\n }\r\n _isCounterClockwiseWinding(points) {\r\n // https://stackoverflow.com/a/1165943\r\n let sum = 0;\r\n for (let i = 0; i < points.length; i++) {\r\n sum += (points[(i + 1) % points.length].x - points[i].x) * (points[(i + 1) % points.length].y + points[i].y);\r\n }\r\n return sum < 0;\r\n }\r\n /**\r\n * Returns if the polygon collider is convex, Excalibur does not handle non-convex collision shapes.\r\n * Call [[Polygon.triangulate]] to generate a [[CompositeCollider]] from this non-convex shape\r\n */\r\n isConvex() {\r\n // From SO: https://stackoverflow.com/a/45372025\r\n if (this.points.length < 3) {\r\n return false;\r\n }\r\n let oldPoint = this.points[this.points.length - 2];\r\n let newPoint = this.points[this.points.length - 1];\r\n let direction = Math.atan2(newPoint.y - oldPoint.y, newPoint.x - oldPoint.x);\r\n let oldDirection = 0;\r\n let orientation = 0;\r\n let angleSum = 0;\r\n for (const [i, point] of this.points.entries()) {\r\n oldPoint = newPoint;\r\n oldDirection = direction;\r\n newPoint = point;\r\n direction = Math.atan2(newPoint.y - oldPoint.y, newPoint.x - oldPoint.x);\r\n if (oldPoint.equals(newPoint)) {\r\n return false; // repeat point\r\n }\r\n let angle = direction - oldDirection;\r\n if (angle <= -Math.PI) {\r\n angle += Math.PI * 2;\r\n }\r\n else if (angle > Math.PI) {\r\n angle -= Math.PI * 2;\r\n }\r\n if (i === 0) {\r\n if (angle === 0.0) {\r\n return false;\r\n }\r\n orientation = angle > 0 ? 1 : -1;\r\n }\r\n else {\r\n if (orientation * angle <= 0) {\r\n return false;\r\n }\r\n }\r\n angleSum += angle;\r\n }\r\n return Math.abs(Math.round(angleSum / (Math.PI * 2))) === 1;\r\n }\r\n /**\r\n * Tessellates the polygon into a triangle fan as a [[CompositeCollider]] of triangle polygons\r\n */\r\n tessellate() {\r\n const polygons = [];\r\n for (let i = 1; i < this.points.length - 2; i++) {\r\n polygons.push([this.points[0], this.points[i + 1], this.points[i + 2]]);\r\n }\r\n polygons.push([this.points[0], this.points[1], this.points[2]]);\r\n return new CompositeCollider(polygons.map(points => Shape.Polygon(points)));\r\n }\r\n /**\r\n * Triangulate the polygon collider using the \"Ear Clipping\" algorithm.\r\n * Returns a new [[CompositeCollider]] made up of smaller triangles.\r\n */\r\n triangulate() {\r\n // https://www.youtube.com/watch?v=hTJFcHutls8\r\n if (this.points.length < 3) {\r\n throw Error('Invalid polygon');\r\n }\r\n /**\r\n * Helper to get a vertex in the list\r\n */\r\n function getItem(index, list) {\r\n if (index >= list.length) {\r\n return list[index % list.length];\r\n }\r\n else if (index < 0) {\r\n return list[index % list.length + list.length];\r\n }\r\n else {\r\n return list[index];\r\n }\r\n }\r\n /**\r\n * Quick test for point in triangle\r\n */\r\n function isPointInTriangle(point, a, b, c) {\r\n const ab = b.sub(a);\r\n const bc = c.sub(b);\r\n const ca = a.sub(c);\r\n const ap = point.sub(a);\r\n const bp = point.sub(b);\r\n const cp = point.sub(c);\r\n const cross1 = ab.cross(ap);\r\n const cross2 = bc.cross(bp);\r\n const cross3 = ca.cross(cp);\r\n if (cross1 > 0 || cross2 > 0 || cross3 > 0) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n const triangles = [];\r\n const vertices = [...this.points];\r\n const indices = range(0, this.points.length - 1);\r\n // 1. Loop through vertices clockwise\r\n // if the vertex is convex (interior angle is < 180) (cross product positive)\r\n // if the polygon formed by it's edges doesn't contain the points\r\n // it's an ear add it to our list of triangles, and restart\r\n while (indices.length > 3) {\r\n for (let i = 0; i < indices.length; i++) {\r\n const a = indices[i];\r\n const b = getItem(i - 1, indices);\r\n const c = getItem(i + 1, indices);\r\n const va = vertices[a];\r\n const vb = vertices[b];\r\n const vc = vertices[c];\r\n // Check convexity\r\n const leftArm = vb.sub(va);\r\n const rightArm = vc.sub(va);\r\n const isConvex = rightArm.cross(leftArm) > 0; // positive cross means convex\r\n if (!isConvex) {\r\n continue;\r\n }\r\n let isEar = true;\r\n // Check that if any vertices are in the triangle a, b, c\r\n for (let j = 0; j < indices.length; j++) {\r\n const vertIndex = indices[j];\r\n // We can skip these\r\n if (vertIndex === a || vertIndex === b || vertIndex === c) {\r\n continue;\r\n }\r\n const point = vertices[vertIndex];\r\n if (isPointInTriangle(point, vb, va, vc)) {\r\n isEar = false;\r\n break;\r\n }\r\n }\r\n // Add ear to polygon list and remove from list\r\n if (isEar) {\r\n triangles.push([vb, va, vc]);\r\n indices.splice(i, 1);\r\n break;\r\n }\r\n }\r\n }\r\n triangles.push([vertices[indices[0]], vertices[indices[1]], vertices[indices[2]]]);\r\n return new CompositeCollider(triangles.map(points => Shape.Polygon(points)));\r\n }\r\n /**\r\n * Returns a clone of this ConvexPolygon, not associated with any collider\r\n */\r\n clone() {\r\n return new PolygonCollider({\r\n offset: this.offset.clone(),\r\n points: this.points.map((p) => p.clone())\r\n });\r\n }\r\n /**\r\n * Returns the world position of the collider, which is the current body transform plus any defined offset\r\n */\r\n get worldPos() {\r\n if (this._transform) {\r\n return this._transform.pos.add(this.offset);\r\n }\r\n return this.offset;\r\n }\r\n /**\r\n * Get the center of the collider in world coordinates\r\n */\r\n get center() {\r\n return this.bounds.center;\r\n }\r\n /**\r\n * Calculates the underlying transformation from the body relative space to world space\r\n */\r\n _calculateTransformation() {\r\n const points = this.points;\r\n const len = points.length;\r\n this._transformedPoints.length = 0; // clear out old transform\r\n for (let i = 0; i < len; i++) {\r\n this._transformedPoints[i] = this._globalMatrix.multiply(points[i].clone());\r\n }\r\n }\r\n /**\r\n * Gets the points that make up the polygon in world space, from actor relative space (if specified)\r\n */\r\n getTransformedPoints() {\r\n if (this._transformedPointsDirty) {\r\n this._calculateTransformation();\r\n this._transformedPointsDirty = false;\r\n }\r\n return this._transformedPoints;\r\n }\r\n /**\r\n * Gets the sides of the polygon in world space\r\n */\r\n getSides() {\r\n if (this._sidesDirty) {\r\n const lines = [];\r\n const points = this.getTransformedPoints();\r\n const len = points.length;\r\n for (let i = 0; i < len; i++) {\r\n // This winding is important\r\n lines.push(new LineSegment(points[i], points[(i + 1) % len]));\r\n }\r\n this._sides = lines;\r\n this._sidesDirty = false;\r\n }\r\n return this._sides;\r\n }\r\n /**\r\n * Returns the local coordinate space sides\r\n */\r\n getLocalSides() {\r\n if (this._localSidesDirty) {\r\n const lines = [];\r\n const points = this.points;\r\n const len = points.length;\r\n for (let i = 0; i < len; i++) {\r\n // This winding is important\r\n lines.push(new LineSegment(points[i], points[(i + 1) % len]));\r\n }\r\n this._localSides = lines;\r\n this._localSidesDirty = false;\r\n }\r\n return this._localSides;\r\n }\r\n /**\r\n * Given a direction vector find the world space side that is most in that direction\r\n * @param direction\r\n */\r\n findSide(direction) {\r\n const sides = this.getSides();\r\n let bestSide = sides[0];\r\n let maxDistance = -Number.MAX_VALUE;\r\n for (let side = 0; side < sides.length; side++) {\r\n const currentSide = sides[side];\r\n const sideNormal = currentSide.normal();\r\n const mostDirection = sideNormal.dot(direction);\r\n if (mostDirection > maxDistance) {\r\n bestSide = currentSide;\r\n maxDistance = mostDirection;\r\n }\r\n }\r\n return bestSide;\r\n }\r\n /**\r\n * Given a direction vector find the local space side that is most in that direction\r\n * @param direction\r\n */\r\n findLocalSide(direction) {\r\n const sides = this.getLocalSides();\r\n let bestSide = sides[0];\r\n let maxDistance = -Number.MAX_VALUE;\r\n for (let side = 0; side < sides.length; side++) {\r\n const currentSide = sides[side];\r\n const sideNormal = currentSide.normal();\r\n const mostDirection = sideNormal.dot(direction);\r\n if (mostDirection > maxDistance) {\r\n bestSide = currentSide;\r\n maxDistance = mostDirection;\r\n }\r\n }\r\n return bestSide;\r\n }\r\n /**\r\n * Get the axis associated with the convex polygon\r\n */\r\n get axes() {\r\n const axes = [];\r\n const sides = this.getSides();\r\n for (let i = 0; i < sides.length; i++) {\r\n axes.push(sides[i].normal());\r\n }\r\n return axes;\r\n }\r\n /**\r\n * Updates the transform for the collision geometry\r\n *\r\n * Collision geometry (points/bounds) will not change until this is called.\r\n * @param transform\r\n */\r\n update(transform) {\r\n var _a;\r\n this._transform = transform;\r\n this._transformedPointsDirty = true;\r\n this._sidesDirty = true;\r\n // This change means an update must be performed in order for geometry to update\r\n const globalMat = (_a = transform.matrix) !== null && _a !== void 0 ? _a : this._globalMatrix;\r\n globalMat.clone(this._globalMatrix);\r\n this._globalMatrix.translate(this.offset.x, this.offset.y);\r\n }\r\n /**\r\n * Tests if a point is contained in this collider in world space\r\n */\r\n contains(point) {\r\n // Always cast to the right, as long as we cast in a consistent fixed direction we\r\n // will be fine\r\n const testRay = new Ray(point, new Vector(1, 0));\r\n const intersectCount = this.getSides().reduce(function (accum, side) {\r\n if (testRay.intersect(side) >= 0) {\r\n return accum + 1;\r\n }\r\n return accum;\r\n }, 0);\r\n if (intersectCount % 2 === 0) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n getClosestLineBetween(collider) {\r\n if (collider instanceof CircleCollider) {\r\n return ClosestLineJumpTable.PolygonCircleClosestLine(this, collider);\r\n }\r\n else if (collider instanceof PolygonCollider) {\r\n return ClosestLineJumpTable.PolygonPolygonClosestLine(this, collider);\r\n }\r\n else if (collider instanceof EdgeCollider) {\r\n return ClosestLineJumpTable.PolygonEdgeClosestLine(this, collider);\r\n }\r\n else {\r\n throw new Error(`Polygon could not collide with unknown CollisionShape ${typeof collider}`);\r\n }\r\n }\r\n /**\r\n * Returns a collision contact if the 2 colliders collide, otherwise collide will\r\n * return null.\r\n * @param collider\r\n */\r\n collide(collider) {\r\n if (collider instanceof CircleCollider) {\r\n return CollisionJumpTable.CollideCirclePolygon(collider, this);\r\n }\r\n else if (collider instanceof PolygonCollider) {\r\n return CollisionJumpTable.CollidePolygonPolygon(this, collider);\r\n }\r\n else if (collider instanceof EdgeCollider) {\r\n return CollisionJumpTable.CollidePolygonEdge(this, collider);\r\n }\r\n else {\r\n throw new Error(`Polygon could not collide with unknown CollisionShape ${typeof collider}`);\r\n }\r\n }\r\n /**\r\n * Find the point on the collider furthest in the direction specified\r\n */\r\n getFurthestPoint(direction) {\r\n const pts = this.getTransformedPoints();\r\n let furthestPoint = null;\r\n let maxDistance = -Number.MAX_VALUE;\r\n for (let i = 0; i < pts.length; i++) {\r\n const distance = direction.dot(pts[i]);\r\n if (distance > maxDistance) {\r\n maxDistance = distance;\r\n furthestPoint = pts[i];\r\n }\r\n }\r\n return furthestPoint;\r\n }\r\n /**\r\n * Find the local point on the collider furthest in the direction specified\r\n * @param direction\r\n */\r\n getFurthestLocalPoint(direction) {\r\n const pts = this.points;\r\n let furthestPoint = pts[0];\r\n let maxDistance = -Number.MAX_VALUE;\r\n for (let i = 0; i < pts.length; i++) {\r\n const distance = direction.dot(pts[i]);\r\n if (distance > maxDistance) {\r\n maxDistance = distance;\r\n furthestPoint = pts[i];\r\n }\r\n }\r\n return furthestPoint;\r\n }\r\n /**\r\n * Finds the closes face to the point using perpendicular distance\r\n * @param point point to test against polygon\r\n */\r\n getClosestFace(point) {\r\n const sides = this.getSides();\r\n let min = Number.POSITIVE_INFINITY;\r\n let faceIndex = -1;\r\n let distance = -1;\r\n for (let i = 0; i < sides.length; i++) {\r\n const dist = sides[i].distanceToPoint(point);\r\n if (dist < min) {\r\n min = dist;\r\n faceIndex = i;\r\n distance = dist;\r\n }\r\n }\r\n if (faceIndex !== -1) {\r\n return {\r\n distance: sides[faceIndex].normal().scale(distance),\r\n face: sides[faceIndex]\r\n };\r\n }\r\n return null;\r\n }\r\n /**\r\n * Get the axis aligned bounding box for the polygon collider in world coordinates\r\n */\r\n get bounds() {\r\n return this.localBounds.transform(this._globalMatrix);\r\n }\r\n /**\r\n * Get the axis aligned bounding box for the polygon collider in local coordinates\r\n */\r\n get localBounds() {\r\n if (this._localBoundsDirty) {\r\n this._localBounds = BoundingBox.fromPoints(this.points);\r\n this._localBoundsDirty = false;\r\n }\r\n return this._localBounds;\r\n }\r\n /**\r\n * Get the moment of inertia for an arbitrary polygon\r\n * https://en.wikipedia.org/wiki/List_of_moments_of_inertia\r\n */\r\n getInertia(mass) {\r\n if (this._cachedMass === mass && this._cachedInertia) {\r\n return this._cachedInertia;\r\n }\r\n let numerator = 0;\r\n let denominator = 0;\r\n const points = this.points;\r\n for (let i = 0; i < points.length; i++) {\r\n const iplusone = (i + 1) % points.length;\r\n const crossTerm = points[iplusone].cross(points[i]);\r\n numerator +=\r\n crossTerm *\r\n (points[i].dot(points[i]) + points[i].dot(points[iplusone]) + points[iplusone].dot(points[iplusone]));\r\n denominator += crossTerm;\r\n }\r\n this._cachedMass = mass;\r\n return this._cachedInertia = (mass / 6) * (numerator / denominator);\r\n }\r\n /**\r\n * Casts a ray into the polygon and returns a vector representing the point of contact (in world space) or null if no collision.\r\n */\r\n rayCast(ray, max = Infinity) {\r\n // find the minimum contact time greater than 0\r\n // contact times less than 0 are behind the ray and we don't want those\r\n const sides = this.getSides();\r\n const len = sides.length;\r\n let minContactTime = Number.MAX_VALUE;\r\n let contactIndex = -1;\r\n for (let i = 0; i < len; i++) {\r\n const contactTime = ray.intersect(sides[i]);\r\n if (contactTime >= 0 && contactTime < minContactTime && contactTime <= max) {\r\n minContactTime = contactTime;\r\n contactIndex = i;\r\n }\r\n }\r\n // contact was found\r\n if (contactIndex >= 0) {\r\n return ray.getPoint(minContactTime);\r\n }\r\n // no contact found\r\n return null;\r\n }\r\n /**\r\n * Project the edges of the polygon along a specified axis\r\n */\r\n project(axis) {\r\n const points = this.getTransformedPoints();\r\n const len = points.length;\r\n let min = Number.MAX_VALUE;\r\n let max = -Number.MAX_VALUE;\r\n for (let i = 0; i < len; i++) {\r\n const scalar = points[i].dot(axis);\r\n min = Math.min(min, scalar);\r\n max = Math.max(max, scalar);\r\n }\r\n return new Projection(min, max);\r\n }\r\n debug(ex, color) {\r\n const firstPoint = this.getTransformedPoints()[0];\r\n const points = [firstPoint, ...this.getTransformedPoints(), firstPoint];\r\n for (let i = 0; i < points.length - 1; i++) {\r\n ex.drawLine(points[i], points[i + 1], color, 2);\r\n ex.drawCircle(points[i], 2, color);\r\n ex.drawCircle(points[i + 1], 2, color);\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Colliders/Shape.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Excalibur helper for defining colliders quickly\r\n */\r\nclass Shape {\r\n /**\r\n * Creates a box collider, under the hood defines a [[PolygonCollider]] collider\r\n * @param width Width of the box\r\n * @param height Height of the box\r\n * @param anchor Anchor of the box (default (.5, .5)) which positions the box relative to the center of the collider's position\r\n * @param offset Optional offset relative to the collider in local coordinates\r\n */\r\n static Box(width, height, anchor = Vector.Half, offset = Vector.Zero) {\r\n return new PolygonCollider({\r\n points: new BoundingBox(-width * anchor.x, -height * anchor.y, width - width * anchor.x, height - height * anchor.y).getPoints(),\r\n offset: offset\r\n });\r\n }\r\n /**\r\n * Creates a new [[PolygonCollider|arbitrary polygon]] collider\r\n *\r\n * PolygonColliders are useful for creating convex polygon shapes\r\n * @param points Points specified in counter clockwise\r\n * @param offset Optional offset relative to the collider in local coordinates\r\n */\r\n static Polygon(points, offset = Vector.Zero) {\r\n return new PolygonCollider({\r\n points: points,\r\n offset: offset\r\n });\r\n }\r\n /**\r\n * Creates a new [[CircleCollider|circle]] collider\r\n *\r\n * Circle colliders are useful for balls, or to make collisions more forgiving on sharp edges\r\n * @param radius Radius of the circle collider\r\n * @param offset Optional offset relative to the collider in local coordinates\r\n */\r\n static Circle(radius, offset = Vector.Zero) {\r\n return new CircleCollider({\r\n radius: radius,\r\n offset: offset\r\n });\r\n }\r\n /**\r\n * Creates a new [[EdgeCollider|edge]] collider\r\n *\r\n * Edge colliders are useful for floors, walls, and other barriers\r\n * @param begin Beginning of the edge in local coordinates to the collider\r\n * @param end Ending of the edge in local coordinates to the collider\r\n */\r\n static Edge(begin, end) {\r\n return new EdgeCollider({\r\n begin: begin,\r\n end: end\r\n });\r\n }\r\n /**\r\n * Creates a new capsule shaped [[CompositeCollider]] using 2 circles and a box\r\n *\r\n * Capsule colliders are useful for platformers with incline or jagged floors to have a smooth\r\n * player experience.\r\n *\r\n * @param width\r\n * @param height\r\n * @param offset Optional offset\r\n */\r\n static Capsule(width, height, offset = Vector.Zero) {\r\n const logger = Logger.getInstance();\r\n if (width === height) {\r\n logger.warn('A capsule collider with equal width and height is a circle, consider using a ex.Shape.Circle or ex.CircleCollider');\r\n }\r\n const vertical = height >= width;\r\n if (vertical) {\r\n // height > width, if equal maybe use a circle\r\n const capsule = new CompositeCollider([\r\n Shape.Circle(width / 2, vec(0, -height / 2 + width / 2).add(offset)),\r\n Shape.Box(width, height - width, Vector.Half, offset),\r\n Shape.Circle(width / 2, vec(0, height / 2 - width / 2).add(offset))\r\n ]);\r\n return capsule;\r\n }\r\n else {\r\n // width > height, if equal maybe use a circle\r\n const capsule = new CompositeCollider([\r\n Shape.Circle(height / 2, vec(-width / 2 + height / 2, 0).add(offset)),\r\n Shape.Box(width - height, height, Vector.Half, offset),\r\n Shape.Circle(height / 2, vec(width / 2 - height / 2, 0).add(offset))\r\n ]);\r\n return capsule;\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/ColliderComponent.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass ColliderComponent extends Component {\r\n constructor(collider) {\r\n super();\r\n this.type = 'ex.collider';\r\n this.events = new EventDispatcher();\r\n /**\r\n * Observable that notifies when a collider is added to the body\r\n */\r\n this.$colliderAdded = new Observable();\r\n /**\r\n * Observable that notifies when a collider is removed from the body\r\n */\r\n this.$colliderRemoved = new Observable();\r\n this.set(collider);\r\n }\r\n /**\r\n * Get the current collider geometry\r\n */\r\n get() {\r\n return this._collider;\r\n }\r\n /**\r\n * Set the collider geometry\r\n * @param collider\r\n * @returns the collider you set\r\n */\r\n set(collider) {\r\n this.clear();\r\n if (collider) {\r\n this._collider = collider;\r\n this._collider.owner = this.owner;\r\n this.events.wire(collider.events);\r\n this.$colliderAdded.notifyAll(collider);\r\n this.update();\r\n }\r\n return collider;\r\n }\r\n /**\r\n * Remove collider geometry from collider component\r\n */\r\n clear() {\r\n if (this._collider) {\r\n this.events.unwire(this._collider.events);\r\n this.$colliderRemoved.notifyAll(this._collider);\r\n this._collider.owner = null;\r\n this._collider = null;\r\n }\r\n }\r\n /**\r\n * Return world space bounds\r\n */\r\n get bounds() {\r\n var _a, _b;\r\n return (_b = (_a = this._collider) === null || _a === void 0 ? void 0 : _a.bounds) !== null && _b !== void 0 ? _b : new BoundingBox();\r\n }\r\n /**\r\n * Return local space bounds\r\n */\r\n get localBounds() {\r\n var _a, _b;\r\n return (_b = (_a = this._collider) === null || _a === void 0 ? void 0 : _a.localBounds) !== null && _b !== void 0 ? _b : new BoundingBox();\r\n }\r\n /**\r\n * Update the collider's transformed geometry\r\n */\r\n update() {\r\n var _a;\r\n const tx = (_a = this.owner) === null || _a === void 0 ? void 0 : _a.get(TransformComponent);\r\n if (this._collider) {\r\n this._collider.owner = this.owner;\r\n if (tx) {\r\n this._collider.update(tx.get());\r\n }\r\n }\r\n }\r\n /**\r\n * Collide component with another\r\n * @param other\r\n */\r\n collide(other) {\r\n let colliderA = this._collider;\r\n let colliderB = other._collider;\r\n if (!colliderA || !colliderB) {\r\n return [];\r\n }\r\n // If we have a composite lefthand side :(\r\n // Might bite us, but to avoid updating all the handlers make composite always left side\r\n let flipped = false;\r\n if (colliderB instanceof CompositeCollider) {\r\n colliderA = colliderB;\r\n colliderB = this._collider;\r\n flipped = true;\r\n }\r\n if (this._collider) {\r\n const contacts = colliderA.collide(colliderB);\r\n if (contacts) {\r\n if (flipped) {\r\n contacts.forEach((contact) => {\r\n contact.mtv = contact.mtv.negate();\r\n contact.normal = contact.normal.negate();\r\n contact.tangent = contact.normal.perpendicular();\r\n contact.colliderA = this._collider;\r\n contact.colliderB = other._collider;\r\n });\r\n }\r\n return contacts;\r\n }\r\n return [];\r\n }\r\n return [];\r\n }\r\n onAdd(entity) {\r\n if (this._collider) {\r\n this.update();\r\n }\r\n // Wire up the collider events to the owning entity\r\n this.events.on('precollision', (evt) => {\r\n const precollision = evt;\r\n entity.events.emit('precollision', new PreCollisionEvent(precollision.target.owner, precollision.other.owner, precollision.side, precollision.intersection));\r\n });\r\n this.events.on('postcollision', (evt) => {\r\n const postcollision = evt;\r\n entity.events.emit('postcollision', new PostCollisionEvent(postcollision.target.owner, postcollision.other.owner, postcollision.side, postcollision.intersection));\r\n });\r\n this.events.on('collisionstart', (evt) => {\r\n const start = evt;\r\n entity.events.emit('collisionstart', new CollisionStartEvent(start.target.owner, start.other.owner, start.contact));\r\n });\r\n this.events.on('collisionend', (evt) => {\r\n const end = evt;\r\n entity.events.emit('collisionend', new CollisionEndEvent(end.target.owner, end.other.owner));\r\n });\r\n }\r\n onRemove() {\r\n this.events.clear();\r\n this.$colliderRemoved.notifyAll(this._collider);\r\n }\r\n /**\r\n * Sets up a box geometry based on the current bounds of the associated actor of this physics body.\r\n *\r\n * If no width/height are specified the body will attempt to use the associated actor's width/height.\r\n *\r\n * By default, the box is center is at (0, 0) which means it is centered around the actors anchor.\r\n */\r\n useBoxCollider(width, height, anchor = Vector.Half, center = Vector.Zero) {\r\n const collider = Shape.Box(width, height, anchor, center);\r\n return (this.set(collider));\r\n }\r\n /**\r\n * Sets up a [[PolygonCollider|polygon]] collision geometry based on a list of of points relative\r\n * to the anchor of the associated actor\r\n * of this physics body.\r\n *\r\n * Only [convex polygon](https://en.wikipedia.org/wiki/Convex_polygon) definitions are supported.\r\n *\r\n * By default, the box is center is at (0, 0) which means it is centered around the actors anchor.\r\n */\r\n usePolygonCollider(points, center = Vector.Zero) {\r\n const poly = Shape.Polygon(points, center);\r\n return (this.set(poly));\r\n }\r\n /**\r\n * Sets up a [[Circle|circle collision geometry]] as the only collider with a specified radius in pixels.\r\n *\r\n * By default, the box is center is at (0, 0) which means it is centered around the actors anchor.\r\n */\r\n useCircleCollider(radius, center = Vector.Zero) {\r\n const collider = Shape.Circle(radius, center);\r\n return (this.set(collider));\r\n }\r\n /**\r\n * Sets up an [[Edge|edge collision geometry]] with a start point and an end point relative to the anchor of the associated actor\r\n * of this physics body.\r\n *\r\n * By default, the box is center is at (0, 0) which means it is centered around the actors anchor.\r\n */\r\n useEdgeCollider(begin, end) {\r\n const collider = Shape.Edge(begin, end);\r\n return (this.set(collider));\r\n }\r\n /**\r\n * Setups up a [[CompositeCollider]] which can define any arbitrary set of excalibur colliders\r\n * @param colliders\r\n */\r\n useCompositeCollider(colliders) {\r\n return (this.set(new CompositeCollider(colliders)));\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/BodyComponent.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nvar DegreeOfFreedom;\r\n(function (DegreeOfFreedom) {\r\n DegreeOfFreedom[\"Rotation\"] = \"rotation\";\r\n DegreeOfFreedom[\"X\"] = \"x\";\r\n DegreeOfFreedom[\"Y\"] = \"y\";\r\n})(DegreeOfFreedom || (DegreeOfFreedom = {}));\r\n/**\r\n * Body describes all the physical properties pos, vel, acc, rotation, angular velocity for the purpose of\r\n * of physics simulation.\r\n */\r\nclass BodyComponent extends Component {\r\n constructor(options) {\r\n var _a, _b, _c;\r\n super();\r\n this.type = 'ex.body';\r\n this.dependencies = [TransformComponent, MotionComponent];\r\n this.id = createId('body', BodyComponent._ID++);\r\n this.events = new EventDispatcher();\r\n this._oldTransform = new Transform();\r\n /**\r\n * Indicates whether the old transform has been captured at least once for interpolation\r\n * @internal\r\n */\r\n this.__oldTransformCaptured = false;\r\n /**\r\n * Enable or disabled the fixed update interpolation, by default interpolation is on.\r\n */\r\n this.enableFixedUpdateInterpolate = true;\r\n /**\r\n * Collision type for the rigidbody physics simulation, by default [[CollisionType.PreventCollision]]\r\n */\r\n this.collisionType = CollisionType.PreventCollision;\r\n /**\r\n * The collision group for the body's colliders, by default body colliders collide with everything\r\n */\r\n this.group = CollisionGroup.All;\r\n /**\r\n * The amount of mass the body has\r\n */\r\n this._mass = Physics.defaultMass;\r\n /**\r\n * Amount of \"motion\" the body has before sleeping. If below [[Physics.sleepEpsilon]] it goes to \"sleep\"\r\n */\r\n this.sleepMotion = Physics.sleepEpsilon * 5;\r\n /**\r\n * Can this body sleep, by default bodies do not sleep\r\n */\r\n this.canSleep = Physics.bodiesCanSleepByDefault;\r\n this._sleeping = false;\r\n /**\r\n * The also known as coefficient of restitution of this actor, represents the amount of energy preserved after collision or the\r\n * bounciness. If 1, it is 100% bouncy, 0 it completely absorbs.\r\n */\r\n this.bounciness = 0.2;\r\n /**\r\n * The coefficient of friction on this actor\r\n */\r\n this.friction = 0.99;\r\n /**\r\n * Should use global gravity [[Physics.gravity]] in it's physics simulation, default is true\r\n */\r\n this.useGravity = true;\r\n /**\r\n * Degrees of freedom to limit\r\n *\r\n * Note: this only limits responses in the realistic solver, if velocity/angularVelocity is set the actor will still respond\r\n */\r\n this.limitDegreeOfFreedom = [];\r\n /**\r\n * The velocity of the actor last frame (vx, vy) in pixels/second\r\n */\r\n this.oldVel = new Vector(0, 0);\r\n /**\r\n * Gets/sets the acceleration of the actor from the last frame. This does not include the global acc [[Physics.acc]].\r\n */\r\n this.oldAcc = Vector.Zero;\r\n if (options) {\r\n this.collisionType = (_a = options.type) !== null && _a !== void 0 ? _a : this.collisionType;\r\n this.group = (_b = options.group) !== null && _b !== void 0 ? _b : this.group;\r\n this.useGravity = (_c = options.useGravity) !== null && _c !== void 0 ? _c : this.useGravity;\r\n }\r\n }\r\n get matrix() {\r\n return this.transform.get().matrix;\r\n }\r\n get mass() {\r\n return this._mass;\r\n }\r\n set mass(newMass) {\r\n this._mass = newMass;\r\n this._cachedInertia = undefined;\r\n this._cachedInverseInertia = undefined;\r\n }\r\n /**\r\n * The inverse mass (1/mass) of the body. If [[CollisionType.Fixed]] this is 0, meaning \"infinite\" mass\r\n */\r\n get inverseMass() {\r\n return this.collisionType === CollisionType.Fixed ? 0 : 1 / this.mass;\r\n }\r\n /**\r\n * Whether this body is sleeping or not\r\n */\r\n get sleeping() {\r\n return this._sleeping;\r\n }\r\n /**\r\n * Set the sleep state of the body\r\n * @param sleeping\r\n */\r\n setSleeping(sleeping) {\r\n this._sleeping = sleeping;\r\n if (!sleeping) {\r\n // Give it a kick to keep it from falling asleep immediately\r\n this.sleepMotion = Physics.sleepEpsilon * 5;\r\n }\r\n else {\r\n this.vel = Vector.Zero;\r\n this.acc = Vector.Zero;\r\n this.angularVelocity = 0;\r\n this.sleepMotion = 0;\r\n }\r\n }\r\n /**\r\n * Update body's [[BodyComponent.sleepMotion]] for the purpose of sleeping\r\n */\r\n updateMotion() {\r\n if (this._sleeping) {\r\n this.setSleeping(true);\r\n }\r\n const currentMotion = this.vel.size * this.vel.size + Math.abs(this.angularVelocity * this.angularVelocity);\r\n const bias = Physics.sleepBias;\r\n this.sleepMotion = bias * this.sleepMotion + (1 - bias) * currentMotion;\r\n this.sleepMotion = clamp(this.sleepMotion, 0, 10 * Physics.sleepEpsilon);\r\n if (this.canSleep && this.sleepMotion < Physics.sleepEpsilon) {\r\n this.setSleeping(true);\r\n }\r\n }\r\n /**\r\n * Get the moment of inertia from the [[ColliderComponent]]\r\n */\r\n get inertia() {\r\n if (this._cachedInertia) {\r\n return this._cachedInertia;\r\n }\r\n // Inertia is a property of the geometry, so this is a little goofy but seems to be okay?\r\n const collider = this.owner.get(ColliderComponent);\r\n if (collider) {\r\n collider.$colliderAdded.subscribe(() => {\r\n this._cachedInertia = null;\r\n });\r\n collider.$colliderRemoved.subscribe(() => {\r\n this._cachedInertia = null;\r\n });\r\n const maybeCollider = collider.get();\r\n if (maybeCollider) {\r\n return this._cachedInertia = maybeCollider.getInertia(this.mass);\r\n }\r\n }\r\n return 0;\r\n }\r\n /**\r\n * Get the inverse moment of inertial from the [[ColliderComponent]]. If [[CollisionType.Fixed]] this is 0, meaning \"infinite\" mass\r\n */\r\n get inverseInertia() {\r\n if (this._cachedInverseInertia) {\r\n return this._cachedInverseInertia;\r\n }\r\n return this._cachedInverseInertia = this.collisionType === CollisionType.Fixed ? 0 : 1 / this.inertia;\r\n }\r\n /**\r\n * Returns if the owner is active\r\n */\r\n get active() {\r\n var _a;\r\n return !!((_a = this.owner) === null || _a === void 0 ? void 0 : _a.active);\r\n }\r\n /**\r\n * @deprecated Use globalP0s\r\n */\r\n get center() {\r\n return this.globalPos;\r\n }\r\n get transform() {\r\n var _a;\r\n return (_a = this.owner) === null || _a === void 0 ? void 0 : _a.get(TransformComponent);\r\n }\r\n get motion() {\r\n var _a;\r\n return (_a = this.owner) === null || _a === void 0 ? void 0 : _a.get(MotionComponent);\r\n }\r\n get pos() {\r\n return this.transform.pos;\r\n }\r\n set pos(val) {\r\n this.transform.pos = val;\r\n }\r\n /**\r\n * The (x, y) position of the actor this will be in the middle of the actor if the\r\n * [[Actor.anchor]] is set to (0.5, 0.5) which is default.\r\n * If you want the (x, y) position to be the top left of the actor specify an anchor of (0, 0).\r\n */\r\n get globalPos() {\r\n return this.transform.globalPos;\r\n }\r\n set globalPos(val) {\r\n this.transform.globalPos = val;\r\n }\r\n /**\r\n * The position of the actor last frame (x, y) in pixels\r\n */\r\n get oldPos() {\r\n return this._oldTransform.pos;\r\n }\r\n /**\r\n * The current velocity vector (vx, vy) of the actor in pixels/second\r\n */\r\n get vel() {\r\n return this.motion.vel;\r\n }\r\n set vel(val) {\r\n this.motion.vel = val;\r\n }\r\n /**\r\n * The current acceleration vector (ax, ay) of the actor in pixels/second/second. An acceleration pointing down such as (0, 100) may\r\n * be useful to simulate a gravitational effect.\r\n */\r\n get acc() {\r\n return this.motion.acc;\r\n }\r\n set acc(val) {\r\n this.motion.acc = val;\r\n }\r\n /**\r\n * The current torque applied to the actor\r\n */\r\n get torque() {\r\n return this.motion.torque;\r\n }\r\n set torque(val) {\r\n this.motion.torque = val;\r\n }\r\n /**\r\n * Gets/sets the rotation of the body from the last frame.\r\n */\r\n get oldRotation() {\r\n return this._oldTransform.rotation;\r\n }\r\n /**\r\n * The rotation of the body in radians\r\n */\r\n get rotation() {\r\n return this.transform.globalRotation;\r\n }\r\n set rotation(val) {\r\n this.transform.globalRotation = val;\r\n }\r\n /**\r\n * The scale vector of the actor\r\n */\r\n get scale() {\r\n return this.transform.globalScale;\r\n }\r\n set scale(val) {\r\n this.transform.globalScale = val;\r\n }\r\n /**\r\n * The scale of the actor last frame\r\n */\r\n get oldScale() {\r\n return this._oldTransform.scale;\r\n }\r\n /**\r\n * The scale rate of change of the actor in scale/second\r\n */\r\n get scaleFactor() {\r\n return this.motion.scaleFactor;\r\n }\r\n set scaleFactor(scaleFactor) {\r\n this.motion.scaleFactor = scaleFactor;\r\n }\r\n /**\r\n * Get the angular velocity in radians/second\r\n */\r\n get angularVelocity() {\r\n return this.motion.angularVelocity;\r\n }\r\n /**\r\n * Set the angular velocity in radians/second\r\n */\r\n set angularVelocity(value) {\r\n this.motion.angularVelocity = value;\r\n }\r\n /**\r\n * Apply a specific impulse to the body\r\n * @param point\r\n * @param impulse\r\n */\r\n applyImpulse(point, impulse) {\r\n if (this.collisionType !== CollisionType.Active) {\r\n return; // only active objects participate in the simulation\r\n }\r\n const finalImpulse = impulse.scale(this.inverseMass);\r\n if (this.limitDegreeOfFreedom.includes(DegreeOfFreedom.X)) {\r\n finalImpulse.x = 0;\r\n }\r\n if (this.limitDegreeOfFreedom.includes(DegreeOfFreedom.Y)) {\r\n finalImpulse.y = 0;\r\n }\r\n this.vel.addEqual(finalImpulse);\r\n if (!this.limitDegreeOfFreedom.includes(DegreeOfFreedom.Rotation)) {\r\n const distanceFromCenter = point.sub(this.globalPos);\r\n this.angularVelocity += this.inverseInertia * distanceFromCenter.cross(impulse);\r\n }\r\n }\r\n /**\r\n * Apply only linear impulse to the body\r\n * @param impulse\r\n */\r\n applyLinearImpulse(impulse) {\r\n if (this.collisionType !== CollisionType.Active) {\r\n return; // only active objects participate in the simulation\r\n }\r\n const finalImpulse = impulse.scale(this.inverseMass);\r\n if (this.limitDegreeOfFreedom.includes(DegreeOfFreedom.X)) {\r\n finalImpulse.x = 0;\r\n }\r\n if (this.limitDegreeOfFreedom.includes(DegreeOfFreedom.Y)) {\r\n finalImpulse.y = 0;\r\n }\r\n this.vel = this.vel.add(finalImpulse);\r\n }\r\n /**\r\n * Apply only angular impulse to the body\r\n * @param point\r\n * @param impulse\r\n */\r\n applyAngularImpulse(point, impulse) {\r\n if (this.collisionType !== CollisionType.Active) {\r\n return; // only active objects participate in the simulation\r\n }\r\n if (!this.limitDegreeOfFreedom.includes(DegreeOfFreedom.Rotation)) {\r\n const distanceFromCenter = point.sub(this.globalPos);\r\n this.angularVelocity += this.inverseInertia * distanceFromCenter.cross(impulse);\r\n }\r\n }\r\n /**\r\n * Sets the old versions of pos, vel, acc, and scale.\r\n */\r\n captureOldTransform() {\r\n // Capture old values before integration step updates them\r\n this.__oldTransformCaptured = true;\r\n this.transform.get().clone(this._oldTransform);\r\n this.oldVel.setTo(this.vel.x, this.vel.y);\r\n this.oldAcc.setTo(this.acc.x, this.acc.y);\r\n }\r\n}\r\nBodyComponent._ID = 0;\r\n\n;// CONCATENATED MODULE: ./EntityComponentSystem/Entity.ts\n\r\n\r\n\r\n\r\n\r\n/**\r\n * AddedComponent message\r\n */\r\nclass AddedComponent {\r\n constructor(data) {\r\n this.data = data;\r\n this.type = 'Component Added';\r\n }\r\n}\r\n/**\r\n * Type guard to know if message is f an Added Component\r\n */\r\nfunction isAddedComponent(x) {\r\n return !!x && x.type === 'Component Added';\r\n}\r\n/**\r\n * RemovedComponent message\r\n */\r\nclass RemovedComponent {\r\n constructor(data) {\r\n this.data = data;\r\n this.type = 'Component Removed';\r\n }\r\n}\r\n/**\r\n * Type guard to know if message is for a Removed Component\r\n */\r\nfunction isRemovedComponent(x) {\r\n return !!x && x.type === 'Component Removed';\r\n}\r\n/**\r\n * An Entity is the base type of anything that can have behavior in Excalibur, they are part of the built in entity component system\r\n *\r\n * Entities can be strongly typed with the components they contain\r\n *\r\n * ```typescript\r\n * const entity = new Entity();\r\n * entity.components.a; // Type ComponentA\r\n * entity.components.b; // Type ComponentB\r\n * ```\r\n */\r\nclass Entity extends Class {\r\n constructor(components, name) {\r\n super();\r\n /**\r\n * The unique identifier for the entity\r\n */\r\n this.id = Entity._ID++;\r\n this._name = 'anonymous';\r\n /**\r\n * Whether this entity is active, if set to false it will be reclaimed\r\n */\r\n this.active = true;\r\n /**\r\n * Bucket to hold on to deferred removals\r\n */\r\n this._componentsToRemove = [];\r\n this._componentTypeToInstance = new Map();\r\n this._componentStringToInstance = new Map();\r\n this._tagsMemo = [];\r\n this._typesMemo = [];\r\n /**\r\n * Observable that keeps track of component add or remove changes on the entity\r\n */\r\n this.componentAdded$ = new Observable();\r\n this.componentRemoved$ = new Observable();\r\n this._parent = null;\r\n this.childrenAdded$ = new Observable();\r\n this.childrenRemoved$ = new Observable();\r\n this._children = [];\r\n this._isInitialized = false;\r\n this._setName(name);\r\n if (components) {\r\n for (const component of components) {\r\n this.addComponent(component);\r\n }\r\n }\r\n }\r\n _setName(name) {\r\n if (name) {\r\n this._name = name;\r\n }\r\n }\r\n get name() {\r\n return this._name;\r\n }\r\n get events() {\r\n return this.eventDispatcher;\r\n }\r\n /**\r\n * Kill the entity, means it will no longer be updated. Kills are deferred to the end of the update.\r\n */\r\n kill() {\r\n this.active = false;\r\n }\r\n isKilled() {\r\n return !this.active;\r\n }\r\n /**\r\n * Specifically get the tags on the entity from [[TagComponent]]\r\n */\r\n get tags() {\r\n return this._tagsMemo;\r\n }\r\n /**\r\n * Check if a tag exists on the entity\r\n * @param tag name to check for\r\n */\r\n hasTag(tag) {\r\n return this.tags.includes(tag);\r\n }\r\n /**\r\n * Adds a tag to an entity\r\n * @param tag\r\n * @returns Entity\r\n */\r\n addTag(tag) {\r\n return this.addComponent(new TagComponent(tag));\r\n }\r\n /**\r\n * Removes a tag on the entity\r\n *\r\n * Removals are deferred until the end of update\r\n * @param tag\r\n * @param force Remove component immediately, no deferred\r\n */\r\n removeTag(tag, force = false) {\r\n return this.removeComponent(tag, force);\r\n }\r\n /**\r\n * The types of the components on the Entity\r\n */\r\n get types() {\r\n return this._typesMemo;\r\n }\r\n _rebuildMemos() {\r\n this._tagsMemo = Array.from(this._componentStringToInstance.values())\r\n .filter((c) => c instanceof TagComponent)\r\n .map((c) => c.type);\r\n this._typesMemo = Array.from(this._componentStringToInstance.keys());\r\n }\r\n getComponents() {\r\n return Array.from(this._componentStringToInstance.values());\r\n }\r\n _notifyAddComponent(component) {\r\n this._rebuildMemos();\r\n const added = new AddedComponent({\r\n component,\r\n entity: this\r\n });\r\n this.componentAdded$.notifyAll(added);\r\n }\r\n _notifyRemoveComponent(component) {\r\n const removed = new RemovedComponent({\r\n component,\r\n entity: this\r\n });\r\n this.componentRemoved$.notifyAll(removed);\r\n this._rebuildMemos();\r\n }\r\n get parent() {\r\n return this._parent;\r\n }\r\n /**\r\n * Get the direct children of this entity\r\n */\r\n get children() {\r\n return this._children;\r\n }\r\n /**\r\n * Unparents this entity, if there is a parent. Otherwise it does nothing.\r\n */\r\n unparent() {\r\n if (this._parent) {\r\n this._parent.removeChild(this);\r\n this._parent = null;\r\n }\r\n }\r\n /**\r\n * Adds an entity to be a child of this entity\r\n * @param entity\r\n */\r\n addChild(entity) {\r\n if (entity.parent === null) {\r\n if (this.getAncestors().includes(entity)) {\r\n throw new Error('Cycle detected, cannot add entity');\r\n }\r\n this._children.push(entity);\r\n entity._parent = this;\r\n this.childrenAdded$.notifyAll(entity);\r\n }\r\n else {\r\n throw new Error('Entity already has a parent, cannot add without unparenting');\r\n }\r\n return this;\r\n }\r\n /**\r\n * Remove an entity from children if it exists\r\n * @param entity\r\n */\r\n removeChild(entity) {\r\n if (entity.parent === this) {\r\n removeItemFromArray(entity, this._children);\r\n entity._parent = null;\r\n this.childrenRemoved$.notifyAll(entity);\r\n }\r\n return this;\r\n }\r\n /**\r\n * Removes all children from this entity\r\n */\r\n removeAllChildren() {\r\n this.children.forEach((c) => {\r\n this.removeChild(c);\r\n });\r\n return this;\r\n }\r\n /**\r\n * Returns a list of parent entities starting with the topmost parent. Includes the current entity.\r\n */\r\n getAncestors() {\r\n const result = [this];\r\n let current = this.parent;\r\n while (current) {\r\n result.push(current);\r\n current = current.parent;\r\n }\r\n return result.reverse();\r\n }\r\n /**\r\n * Returns a list of all the entities that descend from this entity. Includes the current entity.\r\n */\r\n getDescendants() {\r\n let result = [this];\r\n let queue = [this];\r\n while (queue.length > 0) {\r\n const curr = queue.pop();\r\n queue = queue.concat(curr.children);\r\n result = result.concat(curr.children);\r\n }\r\n return result;\r\n }\r\n /**\r\n * Creates a deep copy of the entity and a copy of all its components\r\n */\r\n clone() {\r\n const newEntity = new Entity();\r\n for (const c of this.types) {\r\n newEntity.addComponent(this.get(c).clone());\r\n }\r\n for (const child of this.children) {\r\n newEntity.addChild(child.clone());\r\n }\r\n return newEntity;\r\n }\r\n /**\r\n * Adds a copy of all the components from another template entity as a \"prefab\"\r\n * @param templateEntity Entity to use as a template\r\n * @param force Force component replacement if it already exists on the target entity\r\n */\r\n addTemplate(templateEntity, force = false) {\r\n for (const c of templateEntity.getComponents()) {\r\n this.addComponent(c.clone(), force);\r\n }\r\n for (const child of templateEntity.children) {\r\n this.addChild(child.clone().addTemplate(child));\r\n }\r\n return this;\r\n }\r\n /**\r\n * Adds a component to the entity\r\n * @param component Component or Entity to add copy of components from\r\n * @param force Optionally overwrite any existing components of the same type\r\n */\r\n addComponent(component, force = false) {\r\n // if component already exists, skip if not forced\r\n if (this.has(component.type)) {\r\n if (force) {\r\n // Remove existing component type if exists when forced\r\n this.removeComponent(component);\r\n }\r\n else {\r\n // early exit component exits\r\n return this;\r\n }\r\n }\r\n // TODO circular dependencies will be a problem\r\n if (component.dependencies && component.dependencies.length) {\r\n for (const ctor of component.dependencies) {\r\n this.addComponent(new ctor());\r\n }\r\n }\r\n component.owner = this;\r\n const constuctorType = component.constructor;\r\n this._componentTypeToInstance.set(constuctorType, component);\r\n this._componentStringToInstance.set(component.type, component);\r\n if (component.onAdd) {\r\n component.onAdd(this);\r\n }\r\n this._notifyAddComponent(component);\r\n return this;\r\n }\r\n /**\r\n * Removes a component from the entity, by default removals are deferred to the end of entity update to avoid consistency issues\r\n *\r\n * Components can be force removed with the `force` flag, the removal is not deferred and happens immediately\r\n * @param componentOrType\r\n * @param force\r\n */\r\n removeComponent(componentOrType, force = false) {\r\n if (force) {\r\n if (typeof componentOrType === 'string') {\r\n this._removeComponentByType(componentOrType);\r\n }\r\n else if (componentOrType instanceof Component) {\r\n this._removeComponentByType(componentOrType.type);\r\n }\r\n }\r\n else {\r\n this._componentsToRemove.push(componentOrType);\r\n }\r\n return this;\r\n }\r\n _removeComponentByType(type) {\r\n if (this.has(type)) {\r\n const component = this.get(type);\r\n component.owner = null;\r\n if (component.onRemove) {\r\n component.onRemove(this);\r\n }\r\n const ctor = component.constructor;\r\n this._componentTypeToInstance.delete(ctor);\r\n this._componentStringToInstance.delete(component.type);\r\n this._notifyRemoveComponent(component);\r\n }\r\n }\r\n /**\r\n * @hidden\r\n * @internal\r\n */\r\n processComponentRemoval() {\r\n for (const componentOrType of this._componentsToRemove) {\r\n const type = typeof componentOrType === 'string' ? componentOrType : componentOrType.type;\r\n this._removeComponentByType(type);\r\n }\r\n this._componentsToRemove.length = 0;\r\n }\r\n has(type) {\r\n if (typeof type === 'string') {\r\n return this._componentStringToInstance.has(type);\r\n }\r\n else {\r\n return this._componentTypeToInstance.has(type);\r\n }\r\n }\r\n get(type) {\r\n if (typeof type === 'string') {\r\n return this._componentStringToInstance.get(type);\r\n }\r\n else {\r\n return this._componentTypeToInstance.get(type);\r\n }\r\n }\r\n /**\r\n * Gets whether the actor is Initialized\r\n */\r\n get isInitialized() {\r\n return this._isInitialized;\r\n }\r\n /**\r\n * Initializes this entity, meant to be called by the Scene before first update not by users of Excalibur.\r\n *\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * @internal\r\n */\r\n _initialize(engine) {\r\n if (!this.isInitialized) {\r\n this.onInitialize(engine);\r\n super.emit('initialize', new InitializeEvent(engine, this));\r\n this._isInitialized = true;\r\n }\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Internal _preupdate handler for [[onPreUpdate]] lifecycle event\r\n * @internal\r\n */\r\n _preupdate(engine, delta) {\r\n this.emit('preupdate', new PreUpdateEvent(engine, delta, this));\r\n this.onPreUpdate(engine, delta);\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Internal _preupdate handler for [[onPostUpdate]] lifecycle event\r\n * @internal\r\n */\r\n _postupdate(engine, delta) {\r\n this.emit('postupdate', new PostUpdateEvent(engine, delta, this));\r\n this.onPostUpdate(engine, delta);\r\n }\r\n /**\r\n * `onInitialize` is called before the first update of the entity. This method is meant to be\r\n * overridden.\r\n *\r\n * Synonymous with the event handler `.on('initialize', (evt) => {...})`\r\n */\r\n onInitialize(_engine) {\r\n // Override me\r\n }\r\n /**\r\n * Safe to override onPreUpdate lifecycle event handler. Synonymous with `.on('preupdate', (evt) =>{...})`\r\n *\r\n * `onPreUpdate` is called directly before an entity is updated.\r\n */\r\n onPreUpdate(_engine, _delta) {\r\n // Override me\r\n }\r\n /**\r\n * Safe to override onPostUpdate lifecycle event handler. Synonymous with `.on('postupdate', (evt) =>{...})`\r\n *\r\n * `onPostUpdate` is called directly after an entity is updated.\r\n */\r\n onPostUpdate(_engine, _delta) {\r\n // Override me\r\n }\r\n /**\r\n *\r\n * Entity update lifecycle, called internally\r\n *\r\n * @internal\r\n * @param engine\r\n * @param delta\r\n */\r\n update(engine, delta) {\r\n this._initialize(engine);\r\n this._preupdate(engine, delta);\r\n for (const child of this.children) {\r\n child.update(engine, delta);\r\n }\r\n this._postupdate(engine, delta);\r\n }\r\n}\r\nEntity._ID = 0;\r\n\n;// CONCATENATED MODULE: ./Graphics/GraphicsComponent.ts\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Type guard for checking if a Graphic HasTick (used for graphics that change over time like animations)\r\n * @param graphic\r\n */\r\nfunction hasGraphicsTick(graphic) {\r\n return !!graphic.tick;\r\n}\r\nclass GraphicsLayer {\r\n constructor(_options, _graphics) {\r\n this._options = _options;\r\n this._graphics = _graphics;\r\n this.graphics = [];\r\n }\r\n get name() {\r\n return this._options.name;\r\n }\r\n hide(nameOrGraphic) {\r\n if (!nameOrGraphic) {\r\n this.graphics.length = 0;\r\n }\r\n else {\r\n let gfx = null;\r\n if (nameOrGraphic instanceof Graphic) {\r\n gfx = nameOrGraphic;\r\n }\r\n else {\r\n gfx = this._graphics.getGraphic(nameOrGraphic);\r\n }\r\n this.graphics = this.graphics.filter((g) => g.graphic !== gfx);\r\n this._graphics.recalculateBounds();\r\n }\r\n }\r\n /**\r\n * Show a graphic by name or instance at an offset, graphics are shown in the order in which `show()` is called.\r\n *\r\n * If `show()` is called multiple times for the same graphic it will be shown multiple times.\r\n * @param nameOrGraphic\r\n * @param options\r\n */\r\n show(nameOrGraphic, options) {\r\n options = { ...options };\r\n let gfx;\r\n if (nameOrGraphic instanceof Graphic) {\r\n gfx = this._graphics.copyGraphics ? nameOrGraphic.clone() : nameOrGraphic;\r\n }\r\n else {\r\n gfx = this._graphics.getGraphic(nameOrGraphic);\r\n if (!gfx) {\r\n Logger.getInstance().error(`No such graphic added to component named ${nameOrGraphic}. These named graphics are available: `, this._graphics.getNames());\r\n }\r\n }\r\n if (gfx) {\r\n this.graphics.push({ graphic: gfx, options });\r\n this._graphics.recalculateBounds();\r\n return gfx;\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n /**\r\n * Use a specific graphic, swap out any current graphics being shown\r\n * @param nameOrGraphic\r\n * @param options\r\n */\r\n use(nameOrGraphic, options) {\r\n options = { ...options };\r\n this.hide();\r\n return this.show(nameOrGraphic, options);\r\n }\r\n /**\r\n * Current order of the layer, higher numbers are on top, lower numbers are on the bottom.\r\n *\r\n * For example a layer with `order = -1` would be under a layer of `order = 1`\r\n */\r\n get order() {\r\n return this._options.order;\r\n }\r\n /**\r\n * Set the order of the layer, higher numbers are on top, lower numbers are on the bottom.\r\n *\r\n * For example a layer with `order = -1` would be under a layer of `order = 1`\r\n */\r\n set order(order) {\r\n this._options.order = order;\r\n }\r\n /**\r\n * Get or set the pixel offset from the layer anchor for all graphics in the layer\r\n */\r\n get offset() {\r\n var _a;\r\n return (_a = this._options.offset) !== null && _a !== void 0 ? _a : Vector.Zero;\r\n }\r\n set offset(value) {\r\n this._options.offset = value;\r\n }\r\n get currentKeys() {\r\n var _a;\r\n return (_a = this.name) !== null && _a !== void 0 ? _a : 'anonymous';\r\n }\r\n}\r\nclass GraphicsLayers {\r\n constructor(_component) {\r\n this._component = _component;\r\n this._layers = [];\r\n this._layerMap = {};\r\n this.default = new GraphicsLayer({ name: 'default', order: 0 }, _component);\r\n this._maybeAddLayer(this.default);\r\n }\r\n create(options) {\r\n const layer = new GraphicsLayer(options, this._component);\r\n return this._maybeAddLayer(layer);\r\n }\r\n get(name) {\r\n if (name) {\r\n return this._getLayer(name);\r\n }\r\n return this._layers;\r\n }\r\n currentKeys() {\r\n const graphicsLayerKeys = [];\r\n for (const layer of this._layers) {\r\n graphicsLayerKeys.push(layer.currentKeys);\r\n }\r\n return graphicsLayerKeys;\r\n }\r\n has(name) {\r\n return name in this._layerMap;\r\n }\r\n _maybeAddLayer(layer) {\r\n if (this._layerMap[layer.name]) {\r\n // todo log warning\r\n return this._layerMap[layer.name];\r\n }\r\n this._layerMap[layer.name] = layer;\r\n this._layers.push(layer);\r\n this._layers.sort((a, b) => a.order - b.order);\r\n return layer;\r\n }\r\n _getLayer(name) {\r\n return this._layerMap[name];\r\n }\r\n}\r\n/**\r\n * Component to manage drawings, using with the position component\r\n */\r\nclass GraphicsComponent extends Component {\r\n constructor(options) {\r\n super();\r\n this.type = 'ex.graphics';\r\n this._graphics = {};\r\n /**\r\n * Sets or gets wether any drawing should be visible in this component\r\n */\r\n this.visible = true;\r\n /**\r\n * Sets or gets wither all drawings should have an opacity applied\r\n */\r\n this.opacity = 1;\r\n /**\r\n * Offset to apply to graphics by default\r\n */\r\n this.offset = Vector.Zero;\r\n /**\r\n * Anchor to apply to graphics by default\r\n */\r\n this.anchor = Vector.Half;\r\n /**\r\n * If set to true graphics added to the component will be copied. This can affect performance\r\n */\r\n this.copyGraphics = false;\r\n this._localBounds = null;\r\n // Defaults\r\n options = {\r\n visible: this.visible,\r\n ...options\r\n };\r\n const { current, anchor, opacity, visible, graphics, offset, copyGraphics, onPreDraw, onPostDraw } = options;\r\n this._graphics = graphics || {};\r\n this.offset = offset !== null && offset !== void 0 ? offset : this.offset;\r\n this.opacity = opacity !== null && opacity !== void 0 ? opacity : this.opacity;\r\n this.anchor = anchor !== null && anchor !== void 0 ? anchor : this.anchor;\r\n this.copyGraphics = copyGraphics !== null && copyGraphics !== void 0 ? copyGraphics : this.copyGraphics;\r\n this.onPreDraw = onPreDraw !== null && onPreDraw !== void 0 ? onPreDraw : this.onPreDraw;\r\n this.onPostDraw = onPostDraw !== null && onPostDraw !== void 0 ? onPostDraw : this.onPostDraw;\r\n this.visible = !!visible;\r\n this.layers = new GraphicsLayers(this);\r\n if (current && this._graphics[current]) {\r\n this.show(this._graphics[current]);\r\n }\r\n }\r\n getGraphic(name) {\r\n return this._graphics[name];\r\n }\r\n /**\r\n * Get registered graphics names\r\n */\r\n getNames() {\r\n return Object.keys(this._graphics);\r\n }\r\n /**\r\n * Returns the currently displayed graphics and their offsets, empty array if hidden\r\n */\r\n get current() {\r\n return this.layers.default.graphics;\r\n }\r\n /**\r\n * Returns all graphics associated with this component\r\n */\r\n get graphics() {\r\n return this._graphics;\r\n }\r\n add(nameOrGraphic, graphic) {\r\n let name = 'default';\r\n let graphicToSet = null;\r\n if (typeof nameOrGraphic === 'string') {\r\n name = nameOrGraphic;\r\n graphicToSet = graphic;\r\n }\r\n else {\r\n graphicToSet = nameOrGraphic;\r\n }\r\n this._graphics[name] = this.copyGraphics ? graphicToSet.clone() : graphicToSet;\r\n if (name === 'default') {\r\n this.show('default');\r\n }\r\n return graphicToSet;\r\n }\r\n /**\r\n * Show a graphic by name on the **default** layer, returns the new [[Graphic]]\r\n */\r\n show(nameOrGraphic, options) {\r\n const result = this.layers.default.show(nameOrGraphic, options);\r\n this.recalculateBounds();\r\n return result;\r\n }\r\n /**\r\n * Use a graphic only, swap out any graphics on the **default** layer, returns the new [[Graphic]]\r\n * @param nameOrGraphic\r\n * @param options\r\n */\r\n use(nameOrGraphic, options) {\r\n const result = this.layers.default.use(nameOrGraphic, options);\r\n this.recalculateBounds();\r\n return result;\r\n }\r\n hide(nameOrGraphic) {\r\n this.layers.default.hide(nameOrGraphic);\r\n }\r\n set localBounds(bounds) {\r\n this._localBounds = bounds;\r\n }\r\n recalculateBounds() {\r\n let bb = new BoundingBox();\r\n for (const layer of this.layers.get()) {\r\n for (const { graphic, options } of layer.graphics) {\r\n let anchor = this.anchor;\r\n let offset = this.offset;\r\n if (options === null || options === void 0 ? void 0 : options.anchor) {\r\n anchor = options.anchor;\r\n }\r\n if (options === null || options === void 0 ? void 0 : options.offset) {\r\n offset = options.offset;\r\n }\r\n const bounds = graphic.localBounds;\r\n const offsetX = -bounds.width * anchor.x + offset.x;\r\n const offsetY = -bounds.height * anchor.y + offset.y;\r\n bb = graphic === null || graphic === void 0 ? void 0 : graphic.localBounds.translate(vec(offsetX + layer.offset.x, offsetY + layer.offset.y)).combine(bb);\r\n }\r\n }\r\n this._localBounds = bb;\r\n }\r\n get localBounds() {\r\n if (!this._localBounds || this._localBounds.hasZeroDimensions()) {\r\n this.recalculateBounds();\r\n }\r\n return this._localBounds;\r\n }\r\n /**\r\n * Update underlying graphics if necesary, called internally\r\n * @param elapsed\r\n * @internal\r\n */\r\n update(elapsed, idempotencyToken = 0) {\r\n for (const layer of this.layers.get()) {\r\n for (const { graphic } of layer.graphics) {\r\n if (hasGraphicsTick(graphic)) {\r\n graphic === null || graphic === void 0 ? void 0 : graphic.tick(elapsed, idempotencyToken);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Rectangle.ts\n\r\n/**\r\n * A Rectangle [[Graphic]] for drawing rectangles to the [[ExcaliburGraphicsContext]]\r\n */\r\nclass Rectangle extends Raster {\r\n constructor(options) {\r\n super(options);\r\n this.width = options.width;\r\n this.height = options.height;\r\n this.rasterize();\r\n }\r\n clone() {\r\n return new Rectangle({\r\n width: this.width,\r\n height: this.height,\r\n ...this.cloneGraphicOptions(),\r\n ...this.cloneRasterOptions()\r\n });\r\n }\r\n execute(ctx) {\r\n if (this.color) {\r\n ctx.fillRect(0, 0, this.width, this.height);\r\n }\r\n if (this.strokeColor) {\r\n ctx.strokeRect(0, 0, this.width, this.height);\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Circle.ts\n\r\n\r\n/**\r\n * A circle [[Graphic]] for drawing circles to the [[ExcaliburGraphicsContext]]\r\n *\r\n * Circles default to [[ImageFiltering.Blended]]\r\n */\r\nclass Circle extends Raster {\r\n constructor(options) {\r\n var _a, _b;\r\n super(options);\r\n this._radius = 0;\r\n this.padding = (_a = options.padding) !== null && _a !== void 0 ? _a : 2; // default 2 padding for circles looks nice\r\n this.radius = options.radius;\r\n this.filtering = (_b = options.filtering) !== null && _b !== void 0 ? _b : ImageFiltering.Blended;\r\n this.rasterize();\r\n }\r\n get radius() {\r\n return this._radius;\r\n }\r\n set radius(value) {\r\n this._radius = value;\r\n this.width = this._radius * 2;\r\n this.height = this._radius * 2;\r\n this.flagDirty();\r\n }\r\n clone() {\r\n return new Circle({\r\n radius: this.radius,\r\n ...this.cloneGraphicOptions(),\r\n ...this.cloneRasterOptions()\r\n });\r\n }\r\n execute(ctx) {\r\n if (this.radius > 0) {\r\n ctx.beginPath();\r\n ctx.arc(this.radius, this.radius, this.radius, 0, Math.PI * 2);\r\n if (this.color) {\r\n ctx.fill();\r\n }\r\n if (this.strokeColor) {\r\n ctx.stroke();\r\n }\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Input/PointerComponent.ts\n\r\n/**\r\n * Add this component to optionally configure how the pointer\r\n * system detects pointer events.\r\n *\r\n * By default the collider shape is used and graphics bounds is not.\r\n *\r\n * If both collider shape and graphics bounds are enabled it will fire events if either or\r\n * are intersecting the pointer.\r\n */\r\nclass PointerComponent extends Component {\r\n constructor() {\r\n super(...arguments);\r\n this.type = 'ex.pointer';\r\n /**\r\n * Use any existing Collider component geometry for pointer events. This is useful if you want\r\n * user pointer events only to trigger on the same collision geometry used in the collider component\r\n * for collision resolution. Default is `true`.\r\n */\r\n this.useColliderShape = true;\r\n /**\r\n * Use any existing Graphics component bounds for pointers. This is useful if you want the axis aligned\r\n * bounds around the graphic to trigger pointer events. Default is `false`.\r\n */\r\n this.useGraphicsBounds = false;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Util/EasingFunctions.ts\n\r\n/**\r\n * Standard easing functions for motion in Excalibur, defined on a domain of [0, duration] and a range from [+startValue,+endValue]\r\n * Given a time, the function will return a value from positive startValue to positive endValue.\r\n *\r\n * ```js\r\n * function Linear (t) {\r\n * return t * t;\r\n * }\r\n *\r\n * // accelerating from zero velocity\r\n * function EaseInQuad (t) {\r\n * return t * t;\r\n * }\r\n *\r\n * // decelerating to zero velocity\r\n * function EaseOutQuad (t) {\r\n * return t * (2 - t);\r\n * }\r\n *\r\n * // acceleration until halfway, then deceleration\r\n * function EaseInOutQuad (t) {\r\n * return t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\r\n * }\r\n *\r\n * // accelerating from zero velocity\r\n * function EaseInCubic (t) {\r\n * return t * t * t;\r\n * }\r\n *\r\n * // decelerating to zero velocity\r\n * function EaseOutCubic (t) {\r\n * return (--t) * t * t + 1;\r\n * }\r\n *\r\n * // acceleration until halfway, then deceleration\r\n * function EaseInOutCubic (t) {\r\n * return t < .5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\r\n * }\r\n * ```\r\n */\r\nclass EasingFunctions {\r\n static CreateReversibleEasingFunction(easing) {\r\n return (time, start, end, duration) => {\r\n if (end < start) {\r\n return start - (easing(time, end, start, duration) - end);\r\n }\r\n else {\r\n return easing(time, start, end, duration);\r\n }\r\n };\r\n }\r\n static CreateVectorEasingFunction(easing) {\r\n return (time, start, end, duration) => {\r\n return new Vector(easing(time, start.x, end.x, duration), easing(time, start.y, end.y, duration));\r\n };\r\n }\r\n}\r\nEasingFunctions.Linear = EasingFunctions.CreateReversibleEasingFunction((currentTime, startValue, endValue, duration) => {\r\n endValue = endValue - startValue;\r\n return (endValue * currentTime) / duration + startValue;\r\n});\r\nEasingFunctions.EaseInQuad = EasingFunctions.CreateReversibleEasingFunction((currentTime, startValue, endValue, duration) => {\r\n endValue = endValue - startValue;\r\n currentTime /= duration;\r\n return endValue * currentTime * currentTime + startValue;\r\n});\r\nEasingFunctions.EaseOutQuad = EasingFunctions.CreateReversibleEasingFunction((currentTime, startValue, endValue, duration) => {\r\n endValue = endValue - startValue;\r\n currentTime /= duration;\r\n return -endValue * currentTime * (currentTime - 2) + startValue;\r\n});\r\nEasingFunctions.EaseInOutQuad = EasingFunctions.CreateReversibleEasingFunction((currentTime, startValue, endValue, duration) => {\r\n endValue = endValue - startValue;\r\n currentTime /= duration / 2;\r\n if (currentTime < 1) {\r\n return (endValue / 2) * currentTime * currentTime + startValue;\r\n }\r\n currentTime--;\r\n return (-endValue / 2) * (currentTime * (currentTime - 2) - 1) + startValue;\r\n});\r\nEasingFunctions.EaseInCubic = EasingFunctions.CreateReversibleEasingFunction((currentTime, startValue, endValue, duration) => {\r\n endValue = endValue - startValue;\r\n currentTime /= duration;\r\n return endValue * currentTime * currentTime * currentTime + startValue;\r\n});\r\nEasingFunctions.EaseOutCubic = EasingFunctions.CreateReversibleEasingFunction((currentTime, startValue, endValue, duration) => {\r\n endValue = endValue - startValue;\r\n currentTime /= duration;\r\n currentTime--;\r\n return endValue * (currentTime * currentTime * currentTime + 1) + startValue;\r\n});\r\nEasingFunctions.EaseInOutCubic = EasingFunctions.CreateReversibleEasingFunction((currentTime, startValue, endValue, duration) => {\r\n endValue = endValue - startValue;\r\n currentTime /= duration / 2;\r\n if (currentTime < 1) {\r\n return (endValue / 2) * currentTime * currentTime * currentTime + startValue;\r\n }\r\n currentTime -= 2;\r\n return (endValue / 2) * (currentTime * currentTime * currentTime + 2) + startValue;\r\n});\r\n\n;// CONCATENATED MODULE: ./Actions/ActionQueue.ts\n/**\r\n * Action Queues represent an ordered sequence of actions\r\n *\r\n * Action queues are part of the [[ActionContext|Action API]] and\r\n * store the list of actions to be executed for an [[Actor]].\r\n *\r\n * Actors implement [[Actor.actions]] which can be manipulated by\r\n * advanced users to adjust the actions currently being executed in the\r\n * queue.\r\n */\r\nclass ActionQueue {\r\n constructor(entity) {\r\n this._actions = [];\r\n this._completedActions = [];\r\n this._entity = entity;\r\n }\r\n /**\r\n * Add an action to the sequence\r\n * @param action\r\n */\r\n add(action) {\r\n this._actions.push(action);\r\n }\r\n /**\r\n * Remove an action by reference from the sequence\r\n * @param action\r\n */\r\n remove(action) {\r\n const index = this._actions.indexOf(action);\r\n this._actions.splice(index, 1);\r\n }\r\n /**\r\n * Removes all actions from this sequence\r\n */\r\n clearActions() {\r\n this._actions.length = 0;\r\n this._completedActions.length = 0;\r\n if (this._currentAction) {\r\n this._currentAction.stop();\r\n }\r\n }\r\n /**\r\n *\r\n * @returns The total list of actions in this sequence complete or not\r\n */\r\n getActions() {\r\n return this._actions.concat(this._completedActions);\r\n }\r\n /**\r\n *\r\n * @returns `true` if there are more actions to process in the sequence\r\n */\r\n hasNext() {\r\n return this._actions.length > 0;\r\n }\r\n /**\r\n * @returns `true` if the current sequence of actions is done\r\n */\r\n isComplete() {\r\n return this._actions.length === 0;\r\n }\r\n /**\r\n * Resets the sequence of actions, this is used to restart a sequence from the beginning\r\n */\r\n reset() {\r\n this._actions = this.getActions();\r\n const len = this._actions.length;\r\n for (let i = 0; i < len; i++) {\r\n this._actions[i].reset();\r\n }\r\n this._completedActions = [];\r\n }\r\n /**\r\n * Update the queue which updates actions and handles completing actions\r\n * @param elapsedMs\r\n */\r\n update(elapsedMs) {\r\n if (this._actions.length > 0) {\r\n this._currentAction = this._actions[0];\r\n this._currentAction.update(elapsedMs);\r\n if (this._currentAction.isComplete(this._entity)) {\r\n this._completedActions.push(this._actions.shift());\r\n }\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/Repeat.ts\n\r\nclass Repeat {\r\n constructor(entity, repeatBuilder, repeat) {\r\n this._stopped = false;\r\n this._repeatBuilder = repeatBuilder;\r\n this._repeatContext = new ActionContext(entity);\r\n this._actionQueue = this._repeatContext.getQueue();\r\n this._repeat = repeat;\r\n this._originalRepeat = repeat;\r\n this._repeatBuilder(this._repeatContext);\r\n this._repeat--; // current execution is the first repeat\r\n }\r\n update(delta) {\r\n if (this._actionQueue.isComplete()) {\r\n this._actionQueue.clearActions();\r\n this._repeatBuilder(this._repeatContext);\r\n this._repeat--;\r\n }\r\n this._actionQueue.update(delta);\r\n }\r\n isComplete() {\r\n return this._stopped || (this._repeat <= 0 && this._actionQueue.isComplete());\r\n }\r\n stop() {\r\n this._stopped = true;\r\n }\r\n reset() {\r\n this._repeat = this._originalRepeat;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/RepeatForever.ts\n\r\n/**\r\n * RepeatForever Action implementation, it is recommended you use the fluent action\r\n * context API.\r\n *\r\n *\r\n */\r\nclass RepeatForever {\r\n constructor(entity, repeatBuilder) {\r\n this._stopped = false;\r\n this._repeatBuilder = repeatBuilder;\r\n this._repeatContext = new ActionContext(entity);\r\n this._actionQueue = this._repeatContext.getQueue();\r\n this._repeatBuilder(this._repeatContext);\r\n }\r\n update(delta) {\r\n if (this._stopped) {\r\n return;\r\n }\r\n if (this._actionQueue.isComplete()) {\r\n this._actionQueue.clearActions();\r\n this._repeatBuilder(this._repeatContext);\r\n }\r\n this._actionQueue.update(delta);\r\n }\r\n isComplete() {\r\n return this._stopped;\r\n }\r\n stop() {\r\n this._stopped = true;\r\n this._actionQueue.clearActions();\r\n }\r\n reset() {\r\n return;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/MoveBy.ts\n\r\n\r\n\r\n\r\nclass MoveBy {\r\n constructor(entity, offsetX, offsetY, speed) {\r\n this._started = false;\r\n this._stopped = false;\r\n this._entity = entity;\r\n this._tx = entity.get(TransformComponent);\r\n this._motion = entity.get(MotionComponent);\r\n this._speed = speed;\r\n this._offset = new Vector(offsetX, offsetY);\r\n if (speed <= 0) {\r\n Logger.getInstance().error('Attempted to moveBy with speed less than or equal to zero : ' + speed);\r\n throw new Error('Speed must be greater than 0 pixels per second');\r\n }\r\n }\r\n update(_delta) {\r\n if (!this._started) {\r\n this._started = true;\r\n this._start = new Vector(this._tx.pos.x, this._tx.pos.y);\r\n this._end = this._start.add(this._offset);\r\n this._distance = this._offset.size;\r\n this._dir = this._end.sub(this._start).normalize();\r\n }\r\n if (this.isComplete(this._entity)) {\r\n this._tx.pos = vec(this._end.x, this._end.y);\r\n this._motion.vel = vec(0, 0);\r\n }\r\n else {\r\n this._motion.vel = this._dir.scale(this._speed);\r\n }\r\n }\r\n isComplete(entity) {\r\n const tx = entity.get(TransformComponent);\r\n return this._stopped || tx.pos.distance(this._start) >= this._distance;\r\n }\r\n stop() {\r\n this._motion.vel = vec(0, 0);\r\n this._stopped = true;\r\n }\r\n reset() {\r\n this._started = false;\r\n this._stopped = false;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/MoveTo.ts\n\r\n\r\n\r\nclass MoveTo {\r\n constructor(entity, destx, desty, speed) {\r\n this.entity = entity;\r\n this._started = false;\r\n this._stopped = false;\r\n this._tx = entity.get(TransformComponent);\r\n this._motion = entity.get(MotionComponent);\r\n this._end = new Vector(destx, desty);\r\n this._speed = speed;\r\n }\r\n update(_delta) {\r\n if (!this._started) {\r\n this._started = true;\r\n this._start = new Vector(this._tx.pos.x, this._tx.pos.y);\r\n this._distance = this._start.distance(this._end);\r\n this._dir = this._end.sub(this._start).normalize();\r\n }\r\n const m = this._dir.scale(this._speed);\r\n this._motion.vel = vec(m.x, m.y);\r\n if (this.isComplete(this.entity)) {\r\n this._tx.pos = vec(this._end.x, this._end.y);\r\n this._motion.vel = vec(0, 0);\r\n }\r\n }\r\n isComplete(entity) {\r\n const tx = entity.get(TransformComponent);\r\n return this._stopped || new Vector(tx.pos.x, tx.pos.y).distance(this._start) >= this._distance;\r\n }\r\n stop() {\r\n this._motion.vel = vec(0, 0);\r\n this._stopped = true;\r\n }\r\n reset() {\r\n this._started = false;\r\n this._stopped = false;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/RotationType.ts\n/**\r\n * An enum that describes the strategies that rotation actions can use\r\n */\r\nvar RotationType;\r\n(function (RotationType) {\r\n /**\r\n * Rotation via `ShortestPath` will use the smallest angle\r\n * between the starting and ending points. This strategy is the default behavior.\r\n */\r\n RotationType[RotationType[\"ShortestPath\"] = 0] = \"ShortestPath\";\r\n /**\r\n * Rotation via `LongestPath` will use the largest angle\r\n * between the starting and ending points.\r\n */\r\n RotationType[RotationType[\"LongestPath\"] = 1] = \"LongestPath\";\r\n /**\r\n * Rotation via `Clockwise` will travel in a clockwise direction,\r\n * regardless of the starting and ending points.\r\n */\r\n RotationType[RotationType[\"Clockwise\"] = 2] = \"Clockwise\";\r\n /**\r\n * Rotation via `CounterClockwise` will travel in a counterclockwise direction,\r\n * regardless of the starting and ending points.\r\n */\r\n RotationType[RotationType[\"CounterClockwise\"] = 3] = \"CounterClockwise\";\r\n})(RotationType || (RotationType = {}));\r\n\n;// CONCATENATED MODULE: ./Actions/Action/RotateTo.ts\n\r\n\r\n\r\n\r\nclass RotateTo {\r\n constructor(entity, angleRadians, speed, rotationType) {\r\n this._started = false;\r\n this._stopped = false;\r\n this._tx = entity.get(TransformComponent);\r\n this._motion = entity.get(MotionComponent);\r\n this._end = angleRadians;\r\n this._speed = speed;\r\n this._rotationType = rotationType || RotationType.ShortestPath;\r\n }\r\n update(_delta) {\r\n if (!this._started) {\r\n this._started = true;\r\n this._start = this._tx.rotation;\r\n this._currentNonCannonAngle = this._tx.rotation;\r\n const distance1 = Math.abs(this._end - this._start);\r\n const distance2 = TwoPI - distance1;\r\n if (distance1 > distance2) {\r\n this._shortDistance = distance2;\r\n this._longDistance = distance1;\r\n }\r\n else {\r\n this._shortDistance = distance1;\r\n this._longDistance = distance2;\r\n }\r\n this._shortestPathIsPositive = (this._start - this._end + TwoPI) % TwoPI >= Math.PI;\r\n switch (this._rotationType) {\r\n case RotationType.ShortestPath:\r\n this._distance = this._shortDistance;\r\n if (this._shortestPathIsPositive) {\r\n this._direction = 1;\r\n }\r\n else {\r\n this._direction = -1;\r\n }\r\n break;\r\n case RotationType.LongestPath:\r\n this._distance = this._longDistance;\r\n if (this._shortestPathIsPositive) {\r\n this._direction = -1;\r\n }\r\n else {\r\n this._direction = 1;\r\n }\r\n break;\r\n case RotationType.Clockwise:\r\n this._direction = 1;\r\n if (this._shortestPathIsPositive) {\r\n this._distance = this._shortDistance;\r\n }\r\n else {\r\n this._distance = this._longDistance;\r\n }\r\n break;\r\n case RotationType.CounterClockwise:\r\n this._direction = -1;\r\n if (!this._shortestPathIsPositive) {\r\n this._distance = this._shortDistance;\r\n }\r\n else {\r\n this._distance = this._longDistance;\r\n }\r\n break;\r\n }\r\n }\r\n this._motion.angularVelocity = this._direction * this._speed;\r\n this._currentNonCannonAngle += this._direction * this._speed * (_delta / 1000);\r\n if (this.isComplete()) {\r\n this._tx.rotation = this._end;\r\n this._motion.angularVelocity = 0;\r\n this._stopped = true;\r\n }\r\n }\r\n isComplete() {\r\n const distanceTraveled = Math.abs(this._currentNonCannonAngle - this._start);\r\n return this._stopped || distanceTraveled >= Math.abs(this._distance);\r\n }\r\n stop() {\r\n this._motion.angularVelocity = 0;\r\n this._stopped = true;\r\n }\r\n reset() {\r\n this._started = false;\r\n this._stopped = false;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/RotateBy.ts\n\r\n\r\n\r\n\r\nclass RotateBy {\r\n constructor(entity, angleRadiansOffset, speed, rotationType) {\r\n this._started = false;\r\n this._stopped = false;\r\n this._tx = entity.get(TransformComponent);\r\n this._motion = entity.get(MotionComponent);\r\n this._speed = speed;\r\n this._offset = angleRadiansOffset;\r\n this._rotationType = rotationType || RotationType.ShortestPath;\r\n }\r\n update(_delta) {\r\n if (!this._started) {\r\n this._started = true;\r\n this._start = this._tx.rotation;\r\n this._currentNonCannonAngle = this._tx.rotation;\r\n this._end = this._start + this._offset;\r\n const distance1 = Math.abs(this._end - this._start);\r\n const distance2 = TwoPI - distance1;\r\n if (distance1 > distance2) {\r\n this._shortDistance = distance2;\r\n this._longDistance = distance1;\r\n }\r\n else {\r\n this._shortDistance = distance1;\r\n this._longDistance = distance2;\r\n }\r\n this._shortestPathIsPositive = (this._start - this._end + TwoPI) % TwoPI >= Math.PI;\r\n switch (this._rotationType) {\r\n case RotationType.ShortestPath:\r\n this._distance = this._shortDistance;\r\n if (this._shortestPathIsPositive) {\r\n this._direction = 1;\r\n }\r\n else {\r\n this._direction = -1;\r\n }\r\n break;\r\n case RotationType.LongestPath:\r\n this._distance = this._longDistance;\r\n if (this._shortestPathIsPositive) {\r\n this._direction = -1;\r\n }\r\n else {\r\n this._direction = 1;\r\n }\r\n break;\r\n case RotationType.Clockwise:\r\n this._direction = 1;\r\n if (this._shortDistance >= 0) {\r\n this._distance = this._shortDistance;\r\n }\r\n else {\r\n this._distance = this._longDistance;\r\n }\r\n break;\r\n case RotationType.CounterClockwise:\r\n this._direction = -1;\r\n if (this._shortDistance <= 0) {\r\n this._distance = this._shortDistance;\r\n }\r\n else {\r\n this._distance = this._longDistance;\r\n }\r\n break;\r\n }\r\n }\r\n this._motion.angularVelocity = this._direction * this._speed;\r\n this._currentNonCannonAngle += this._direction * this._speed * (_delta / 1000);\r\n if (this.isComplete()) {\r\n this._tx.rotation = this._end;\r\n this._motion.angularVelocity = 0;\r\n this._stopped = true;\r\n }\r\n }\r\n isComplete() {\r\n const distanceTraveled = Math.abs(this._currentNonCannonAngle - this._start);\r\n return this._stopped || distanceTraveled >= Math.abs(this._distance);\r\n }\r\n stop() {\r\n this._motion.angularVelocity = 0;\r\n this._stopped = true;\r\n }\r\n reset() {\r\n this._started = false;\r\n this._stopped = false;\r\n this._start = undefined;\r\n this._currentNonCannonAngle = undefined;\r\n this._distance = undefined;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/ScaleTo.ts\n\r\n\r\n\r\nclass ScaleTo {\r\n constructor(entity, scaleX, scaleY, speedX, speedY) {\r\n this._started = false;\r\n this._stopped = false;\r\n this._tx = entity.get(TransformComponent);\r\n this._motion = entity.get(MotionComponent);\r\n this._endX = scaleX;\r\n this._endY = scaleY;\r\n this._speedX = speedX;\r\n this._speedY = speedY;\r\n }\r\n update(_delta) {\r\n if (!this._started) {\r\n this._started = true;\r\n this._startX = this._tx.scale.x;\r\n this._startY = this._tx.scale.y;\r\n this._distanceX = Math.abs(this._endX - this._startX);\r\n this._distanceY = Math.abs(this._endY - this._startY);\r\n }\r\n if (!(Math.abs(this._tx.scale.x - this._startX) >= this._distanceX)) {\r\n const directionX = this._endY < this._startY ? -1 : 1;\r\n this._motion.scaleFactor.x = this._speedX * directionX;\r\n }\r\n else {\r\n this._motion.scaleFactor.x = 0;\r\n }\r\n if (!(Math.abs(this._tx.scale.y - this._startY) >= this._distanceY)) {\r\n const directionY = this._endY < this._startY ? -1 : 1;\r\n this._motion.scaleFactor.y = this._speedY * directionY;\r\n }\r\n else {\r\n this._motion.scaleFactor.y = 0;\r\n }\r\n if (this.isComplete()) {\r\n this._tx.scale = vec(this._endX, this._endY);\r\n this._motion.scaleFactor.x = 0;\r\n this._motion.scaleFactor.y = 0;\r\n }\r\n }\r\n isComplete() {\r\n return (this._stopped ||\r\n (Math.abs(this._tx.scale.y - this._startX) >= (this._distanceX - 0.01) &&\r\n Math.abs(this._tx.scale.y - this._startY) >= (this._distanceY - 0.01)));\r\n }\r\n stop() {\r\n this._motion.scaleFactor.x = 0;\r\n this._motion.scaleFactor.y = 0;\r\n this._stopped = true;\r\n }\r\n reset() {\r\n this._started = false;\r\n this._stopped = false;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/ScaleBy.ts\n\r\n\r\n\r\nclass ScaleBy {\r\n constructor(entity, scaleOffsetX, scaleOffsetY, speed) {\r\n this._started = false;\r\n this._stopped = false;\r\n this._tx = entity.get(TransformComponent);\r\n this._motion = entity.get(MotionComponent);\r\n this._offset = new Vector(scaleOffsetX, scaleOffsetY);\r\n this._speedX = this._speedY = speed;\r\n }\r\n update(_delta) {\r\n if (!this._started) {\r\n this._started = true;\r\n this._startScale = this._tx.scale.clone();\r\n this._endScale = this._startScale.add(this._offset);\r\n this._distanceX = Math.abs(this._endScale.x - this._startScale.x);\r\n this._distanceY = Math.abs(this._endScale.y - this._startScale.y);\r\n this._directionX = this._endScale.x < this._startScale.x ? -1 : 1;\r\n this._directionY = this._endScale.y < this._startScale.y ? -1 : 1;\r\n }\r\n this._motion.scaleFactor.x = this._speedX * this._directionX;\r\n this._motion.scaleFactor.y = this._speedY * this._directionY;\r\n if (this.isComplete()) {\r\n this._tx.scale = this._endScale;\r\n this._motion.scaleFactor.x = 0;\r\n this._motion.scaleFactor.y = 0;\r\n }\r\n }\r\n isComplete() {\r\n return (this._stopped ||\r\n (Math.abs(this._tx.scale.x - this._startScale.x) >= (this._distanceX - 0.01) &&\r\n Math.abs(this._tx.scale.y - this._startScale.y) >= (this._distanceY - 0.01)));\r\n }\r\n stop() {\r\n this._motion.scaleFactor.x = 0;\r\n this._motion.scaleFactor.y = 0;\r\n this._stopped = true;\r\n }\r\n reset() {\r\n this._started = false;\r\n this._stopped = false;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/CallMethod.ts\nclass CallMethod {\r\n constructor(method) {\r\n this._method = null;\r\n this._hasBeenCalled = false;\r\n this._method = method;\r\n }\r\n update(_delta) {\r\n this._method();\r\n this._hasBeenCalled = true;\r\n }\r\n isComplete() {\r\n return this._hasBeenCalled;\r\n }\r\n reset() {\r\n this._hasBeenCalled = false;\r\n }\r\n stop() {\r\n this._hasBeenCalled = true;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/EaseTo.ts\n\r\n\r\n\r\nclass EaseTo {\r\n constructor(entity, x, y, duration, easingFcn) {\r\n this.easingFcn = easingFcn;\r\n this._currentLerpTime = 0;\r\n this._lerpDuration = 1 * 1000; // 1 second\r\n this._lerpStart = new Vector(0, 0);\r\n this._lerpEnd = new Vector(0, 0);\r\n this._initialized = false;\r\n this._stopped = false;\r\n this._tx = entity.get(TransformComponent);\r\n this._motion = entity.get(MotionComponent);\r\n this._lerpDuration = duration;\r\n this._lerpEnd = new Vector(x, y);\r\n }\r\n _initialize() {\r\n this._lerpStart = new Vector(this._tx.pos.x, this._tx.pos.y);\r\n this._currentLerpTime = 0;\r\n }\r\n update(delta) {\r\n if (!this._initialized) {\r\n this._initialize();\r\n this._initialized = true;\r\n }\r\n // Need to update lerp time first, otherwise the first update will always be zero\r\n this._currentLerpTime += delta;\r\n let newX = this._tx.pos.x;\r\n let newY = this._tx.pos.y;\r\n if (this._currentLerpTime < this._lerpDuration) {\r\n if (this._lerpEnd.x < this._lerpStart.x) {\r\n newX =\r\n this._lerpStart.x -\r\n (this.easingFcn(this._currentLerpTime, this._lerpEnd.x, this._lerpStart.x, this._lerpDuration) - this._lerpEnd.x);\r\n }\r\n else {\r\n newX = this.easingFcn(this._currentLerpTime, this._lerpStart.x, this._lerpEnd.x, this._lerpDuration);\r\n }\r\n if (this._lerpEnd.y < this._lerpStart.y) {\r\n newY =\r\n this._lerpStart.y -\r\n (this.easingFcn(this._currentLerpTime, this._lerpEnd.y, this._lerpStart.y, this._lerpDuration) - this._lerpEnd.y);\r\n }\r\n else {\r\n newY = this.easingFcn(this._currentLerpTime, this._lerpStart.y, this._lerpEnd.y, this._lerpDuration);\r\n }\r\n // Given the lerp position figure out the velocity in pixels per second\r\n this._motion.vel = vec((newX - this._tx.pos.x) / (delta / 1000), (newY - this._tx.pos.y) / (delta / 1000));\r\n }\r\n else {\r\n this._tx.pos = vec(this._lerpEnd.x, this._lerpEnd.y);\r\n this._motion.vel = Vector.Zero;\r\n }\r\n }\r\n isComplete() {\r\n return this._stopped || this._currentLerpTime >= this._lerpDuration;\r\n }\r\n reset() {\r\n this._initialized = false;\r\n this._stopped = false;\r\n this._currentLerpTime = 0;\r\n }\r\n stop() {\r\n this._motion.vel = vec(0, 0);\r\n this._stopped = true;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/EaseBy.ts\n\r\n\r\n\r\nclass EaseBy {\r\n constructor(entity, offsetX, offsetY, duration, easingFcn) {\r\n this.easingFcn = easingFcn;\r\n this._currentLerpTime = 0;\r\n this._lerpDuration = 1 * 1000; // 1 second\r\n this._lerpStart = new Vector(0, 0);\r\n this._lerpEnd = new Vector(0, 0);\r\n this._initialized = false;\r\n this._stopped = false;\r\n this._tx = entity.get(TransformComponent);\r\n this._motion = entity.get(MotionComponent);\r\n this._lerpDuration = duration;\r\n this._offset = new Vector(offsetX, offsetY);\r\n }\r\n _initialize() {\r\n this._lerpStart = new Vector(this._tx.pos.x, this._tx.pos.y);\r\n this._currentLerpTime = 0;\r\n this._lerpEnd = this._lerpStart.add(this._offset);\r\n }\r\n update(delta) {\r\n if (!this._initialized) {\r\n this._initialize();\r\n this._initialized = true;\r\n }\r\n // Need to update lerp time first, otherwise the first update will always be zero\r\n this._currentLerpTime += delta;\r\n let newX = this._tx.pos.x;\r\n let newY = this._tx.pos.y;\r\n if (this._currentLerpTime < this._lerpDuration) {\r\n if (this._lerpEnd.x < this._lerpStart.x) {\r\n newX =\r\n this._lerpStart.x -\r\n (this.easingFcn(this._currentLerpTime, this._lerpEnd.x, this._lerpStart.x, this._lerpDuration) - this._lerpEnd.x);\r\n }\r\n else {\r\n newX = this.easingFcn(this._currentLerpTime, this._lerpStart.x, this._lerpEnd.x, this._lerpDuration);\r\n }\r\n if (this._lerpEnd.y < this._lerpStart.y) {\r\n newY =\r\n this._lerpStart.y -\r\n (this.easingFcn(this._currentLerpTime, this._lerpEnd.y, this._lerpStart.y, this._lerpDuration) - this._lerpEnd.y);\r\n }\r\n else {\r\n newY = this.easingFcn(this._currentLerpTime, this._lerpStart.y, this._lerpEnd.y, this._lerpDuration);\r\n }\r\n // Given the lerp position figure out the velocity in pixels per second\r\n this._motion.vel = vec((newX - this._tx.pos.x) / (delta / 1000), (newY - this._tx.pos.y) / (delta / 1000));\r\n }\r\n else {\r\n this._tx.pos = vec(this._lerpEnd.x, this._lerpEnd.y);\r\n this._motion.vel = Vector.Zero;\r\n }\r\n }\r\n isComplete() {\r\n return this._stopped || this._currentLerpTime >= this._lerpDuration;\r\n }\r\n reset() {\r\n this._initialized = false;\r\n this._stopped = false;\r\n this._currentLerpTime = 0;\r\n }\r\n stop() {\r\n this._motion.vel = vec(0, 0);\r\n this._stopped = true;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/Blink.ts\n\r\nclass Blink {\r\n constructor(entity, timeVisible, timeNotVisible, numBlinks = 1) {\r\n this._timeVisible = 0;\r\n this._timeNotVisible = 0;\r\n this._elapsedTime = 0;\r\n this._totalTime = 0;\r\n this._stopped = false;\r\n this._started = false;\r\n this._graphics = entity.get(GraphicsComponent);\r\n this._timeVisible = timeVisible;\r\n this._timeNotVisible = timeNotVisible;\r\n this._duration = (timeVisible + timeNotVisible) * numBlinks;\r\n }\r\n update(delta) {\r\n if (!this._started) {\r\n this._started = true;\r\n this._elapsedTime = 0;\r\n this._totalTime = 0;\r\n }\r\n if (!this._graphics) {\r\n return;\r\n }\r\n this._elapsedTime += delta;\r\n this._totalTime += delta;\r\n if (this._graphics.visible && this._elapsedTime >= this._timeVisible) {\r\n this._graphics.visible = false;\r\n this._elapsedTime = 0;\r\n }\r\n if (!this._graphics.visible && this._elapsedTime >= this._timeNotVisible) {\r\n this._graphics.visible = true;\r\n this._elapsedTime = 0;\r\n }\r\n if (this.isComplete()) {\r\n this._graphics.visible = true;\r\n }\r\n }\r\n isComplete() {\r\n return this._stopped || this._totalTime >= this._duration;\r\n }\r\n stop() {\r\n if (this._graphics) {\r\n this._graphics.visible = true;\r\n }\r\n this._stopped = true;\r\n }\r\n reset() {\r\n this._started = false;\r\n this._stopped = false;\r\n this._elapsedTime = 0;\r\n this._totalTime = 0;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/Fade.ts\n\r\n\r\nclass Fade {\r\n constructor(entity, endOpacity, speed) {\r\n this._multiplier = 1;\r\n this._started = false;\r\n this._stopped = false;\r\n this._graphics = entity.get(GraphicsComponent);\r\n this._endOpacity = endOpacity;\r\n this._speed = this._ogspeed = speed;\r\n }\r\n update(delta) {\r\n if (!this._graphics) {\r\n return;\r\n }\r\n if (!this._started) {\r\n this._started = true;\r\n this._speed = this._ogspeed;\r\n // determine direction when we start\r\n if (this._endOpacity < this._graphics.opacity) {\r\n this._multiplier = -1;\r\n }\r\n else {\r\n this._multiplier = 1;\r\n }\r\n }\r\n if (this._speed > 0) {\r\n this._graphics.opacity += (this._multiplier *\r\n (Math.abs(this._graphics.opacity - this._endOpacity) * delta)) / this._speed;\r\n }\r\n this._speed -= delta;\r\n if (this.isComplete()) {\r\n this._graphics.opacity = this._endOpacity;\r\n }\r\n Logger.getInstance().debug('[Action fade] Actor opacity:', this._graphics.opacity);\r\n }\r\n isComplete() {\r\n return this._stopped || Math.abs(this._graphics.opacity - this._endOpacity) < 0.05;\r\n }\r\n stop() {\r\n this._stopped = true;\r\n }\r\n reset() {\r\n this._started = false;\r\n this._stopped = false;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/Delay.ts\nclass Delay {\r\n constructor(delay) {\r\n this._elapsedTime = 0;\r\n this._started = false;\r\n this._stopped = false;\r\n this._delay = delay;\r\n }\r\n update(delta) {\r\n if (!this._started) {\r\n this._started = true;\r\n }\r\n this._elapsedTime += delta;\r\n }\r\n isComplete() {\r\n return this._stopped || this._elapsedTime >= this._delay;\r\n }\r\n stop() {\r\n this._stopped = true;\r\n }\r\n reset() {\r\n this._elapsedTime = 0;\r\n this._started = false;\r\n this._stopped = false;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/Die.ts\n\r\nclass Die {\r\n constructor(entity) {\r\n this._stopped = false;\r\n this._entity = entity;\r\n }\r\n update(_delta) {\r\n this._entity.get(ActionsComponent).clearActions();\r\n this._entity.kill();\r\n this._stopped = true;\r\n }\r\n isComplete() {\r\n return this._stopped;\r\n }\r\n stop() {\r\n return;\r\n }\r\n reset() {\r\n return;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/Follow.ts\n\r\n\r\n\r\nclass Follow {\r\n constructor(entity, entityToFollow, followDistance) {\r\n this._started = false;\r\n this._stopped = false;\r\n this._tx = entity.get(TransformComponent);\r\n this._motion = entity.get(MotionComponent);\r\n this._followTx = entityToFollow.get(TransformComponent);\r\n this._followMotion = entityToFollow.get(MotionComponent);\r\n this._current = new Vector(this._tx.pos.x, this._tx.pos.y);\r\n this._end = new Vector(this._followTx.pos.x, this._followTx.pos.y);\r\n this._maximumDistance = followDistance !== undefined ? followDistance : this._current.distance(this._end);\r\n this._speed = 0;\r\n }\r\n update(_delta) {\r\n if (!this._started) {\r\n this._started = true;\r\n this._distanceBetween = this._current.distance(this._end);\r\n this._dir = this._end.sub(this._current).normalize();\r\n }\r\n const actorToFollowSpeed = Math.sqrt(Math.pow(this._followMotion.vel.x, 2) + Math.pow(this._followMotion.vel.y, 2));\r\n if (actorToFollowSpeed !== 0) {\r\n this._speed = actorToFollowSpeed;\r\n }\r\n this._current = vec(this._tx.pos.x, this._tx.pos.y);\r\n this._end = vec(this._followTx.pos.x, this._followTx.pos.y);\r\n this._distanceBetween = this._current.distance(this._end);\r\n this._dir = this._end.sub(this._current).normalize();\r\n if (this._distanceBetween >= this._maximumDistance) {\r\n const m = this._dir.scale(this._speed);\r\n this._motion.vel = vec(m.x, m.y);\r\n }\r\n else {\r\n this._motion.vel = vec(0, 0);\r\n }\r\n if (this.isComplete()) {\r\n this._tx.pos = vec(this._end.x, this._end.y);\r\n this._motion.vel = vec(0, 0);\r\n }\r\n }\r\n stop() {\r\n this._motion.vel = vec(0, 0);\r\n this._stopped = true;\r\n }\r\n isComplete() {\r\n // the actor following should never stop unless specified to do so\r\n return this._stopped;\r\n }\r\n reset() {\r\n this._started = false;\r\n this._stopped = false;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/Meet.ts\n\r\n\r\n\r\nclass Meet {\r\n constructor(actor, actorToMeet, speed) {\r\n this._started = false;\r\n this._stopped = false;\r\n this._speedWasSpecified = false;\r\n this._tx = actor.get(TransformComponent);\r\n this._motion = actor.get(MotionComponent);\r\n this._meetTx = actorToMeet.get(TransformComponent);\r\n this._meetMotion = actorToMeet.get(MotionComponent);\r\n this._current = new Vector(this._tx.pos.x, this._tx.pos.y);\r\n this._end = new Vector(this._meetTx.pos.x, this._meetTx.pos.y);\r\n this._speed = speed || 0;\r\n if (speed !== undefined) {\r\n this._speedWasSpecified = true;\r\n }\r\n }\r\n update(_delta) {\r\n if (!this._started) {\r\n this._started = true;\r\n this._distanceBetween = this._current.distance(this._end);\r\n this._dir = this._end.sub(this._current).normalize();\r\n }\r\n const actorToMeetSpeed = Math.sqrt(Math.pow(this._meetMotion.vel.x, 2) + Math.pow(this._meetMotion.vel.y, 2));\r\n if (actorToMeetSpeed !== 0 && !this._speedWasSpecified) {\r\n this._speed = actorToMeetSpeed;\r\n }\r\n this._current = vec(this._tx.pos.x, this._tx.pos.y);\r\n this._end = vec(this._meetTx.pos.x, this._meetTx.pos.y);\r\n this._distanceBetween = this._current.distance(this._end);\r\n this._dir = this._end.sub(this._current).normalize();\r\n const m = this._dir.scale(this._speed);\r\n this._motion.vel = vec(m.x, m.y);\r\n if (this.isComplete()) {\r\n this._tx.pos = vec(this._end.x, this._end.y);\r\n this._motion.vel = vec(0, 0);\r\n }\r\n }\r\n isComplete() {\r\n return this._stopped || this._distanceBetween <= 1;\r\n }\r\n stop() {\r\n this._motion.vel = vec(0, 0);\r\n this._stopped = true;\r\n }\r\n reset() {\r\n this._started = false;\r\n this._stopped = false;\r\n this._distanceBetween = undefined;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/ActionContext.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * The fluent Action API allows you to perform \"actions\" on\r\n * [[Actor|Actors]] such as following, moving, rotating, and\r\n * more. You can implement your own actions by implementing\r\n * the [[Action]] interface.\r\n */\r\nclass ActionContext {\r\n constructor(entity) {\r\n this._entity = entity;\r\n this._queue = new ActionQueue(entity);\r\n }\r\n getQueue() {\r\n return this._queue;\r\n }\r\n update(elapsedMs) {\r\n this._queue.update(elapsedMs);\r\n }\r\n /**\r\n * Clears all queued actions from the Actor\r\n */\r\n clearActions() {\r\n this._queue.clearActions();\r\n }\r\n runAction(action) {\r\n action.reset();\r\n this._queue.add(action);\r\n return this;\r\n }\r\n easeTo(...args) {\r\n var _a, _b;\r\n let x = 0;\r\n let y = 0;\r\n let duration = 0;\r\n let easingFcn = EasingFunctions.Linear;\r\n if (args[0] instanceof Vector) {\r\n x = args[0].x;\r\n y = args[0].y;\r\n duration = args[1];\r\n easingFcn = (_a = args[2]) !== null && _a !== void 0 ? _a : easingFcn;\r\n }\r\n else {\r\n x = args[0];\r\n y = args[1];\r\n duration = args[2];\r\n easingFcn = (_b = args[3]) !== null && _b !== void 0 ? _b : easingFcn;\r\n }\r\n this._queue.add(new EaseTo(this._entity, x, y, duration, easingFcn));\r\n return this;\r\n }\r\n easeBy(...args) {\r\n var _a, _b;\r\n let offsetX = 0;\r\n let offsetY = 0;\r\n let duration = 0;\r\n let easingFcn = EasingFunctions.Linear;\r\n if (args[0] instanceof Vector) {\r\n offsetX = args[0].x;\r\n offsetY = args[0].y;\r\n duration = args[1];\r\n easingFcn = (_a = args[2]) !== null && _a !== void 0 ? _a : easingFcn;\r\n }\r\n else {\r\n offsetX = args[0];\r\n offsetY = args[1];\r\n duration = args[2];\r\n easingFcn = (_b = args[3]) !== null && _b !== void 0 ? _b : easingFcn;\r\n }\r\n this._queue.add(new EaseBy(this._entity, offsetX, offsetY, duration, easingFcn));\r\n return this;\r\n }\r\n moveTo(xOrPos, yOrSpeed, speedOrUndefined) {\r\n let x = 0;\r\n let y = 0;\r\n let speed = 0;\r\n if (xOrPos instanceof Vector) {\r\n x = xOrPos.x;\r\n y = xOrPos.y;\r\n speed = yOrSpeed;\r\n }\r\n else {\r\n x = xOrPos;\r\n y = yOrSpeed;\r\n speed = speedOrUndefined;\r\n }\r\n this._queue.add(new MoveTo(this._entity, x, y, speed));\r\n return this;\r\n }\r\n moveBy(xOffsetOrVector, yOffsetOrSpeed, speedOrUndefined) {\r\n let xOffset = 0;\r\n let yOffset = 0;\r\n let speed = 0;\r\n if (xOffsetOrVector instanceof Vector) {\r\n xOffset = xOffsetOrVector.x;\r\n yOffset = xOffsetOrVector.y;\r\n speed = yOffsetOrSpeed;\r\n }\r\n else {\r\n xOffset = xOffsetOrVector;\r\n yOffset = yOffsetOrSpeed;\r\n speed = speedOrUndefined;\r\n }\r\n this._queue.add(new MoveBy(this._entity, xOffset, yOffset, speed));\r\n return this;\r\n }\r\n /**\r\n * This method will rotate an actor to the specified angle at the speed\r\n * specified (in radians per second) and return back the actor. This\r\n * method is part of the actor 'Action' fluent API allowing action chaining.\r\n * @param angleRadians The angle to rotate to in radians\r\n * @param speed The angular velocity of the rotation specified in radians per second\r\n * @param rotationType The [[RotationType]] to use for this rotation\r\n */\r\n rotateTo(angleRadians, speed, rotationType) {\r\n this._queue.add(new RotateTo(this._entity, angleRadians, speed, rotationType));\r\n return this;\r\n }\r\n /**\r\n * This method will rotate an actor by the specified angle offset, from it's current rotation given a certain speed\r\n * in radians/sec and return back the actor. This method is part\r\n * of the actor 'Action' fluent API allowing action chaining.\r\n * @param angleRadiansOffset The angle to rotate to in radians relative to the current rotation\r\n * @param speed The speed in radians/sec the actor should rotate at\r\n * @param rotationType The [[RotationType]] to use for this rotation, default is shortest path\r\n */\r\n rotateBy(angleRadiansOffset, speed, rotationType) {\r\n this._queue.add(new RotateBy(this._entity, angleRadiansOffset, speed, rotationType));\r\n return this;\r\n }\r\n scaleTo(sizeXOrVector, sizeYOrSpeed, speedXOrUndefined, speedYOrUndefined) {\r\n let sizeX = 1;\r\n let sizeY = 1;\r\n let speedX = 0;\r\n let speedY = 0;\r\n if (sizeXOrVector instanceof Vector && sizeYOrSpeed instanceof Vector) {\r\n sizeX = sizeXOrVector.x;\r\n sizeY = sizeXOrVector.y;\r\n speedX = sizeYOrSpeed.x;\r\n speedY = sizeYOrSpeed.y;\r\n }\r\n if (typeof sizeXOrVector === 'number' && typeof sizeYOrSpeed === 'number') {\r\n sizeX = sizeXOrVector;\r\n sizeY = sizeYOrSpeed;\r\n speedX = speedXOrUndefined;\r\n speedY = speedYOrUndefined;\r\n }\r\n this._queue.add(new ScaleTo(this._entity, sizeX, sizeY, speedX, speedY));\r\n return this;\r\n }\r\n scaleBy(sizeOffsetXOrVector, sizeOffsetYOrSpeed, speed) {\r\n let sizeOffsetX = 1;\r\n let sizeOffsetY = 1;\r\n if (sizeOffsetXOrVector instanceof Vector) {\r\n sizeOffsetX = sizeOffsetXOrVector.x;\r\n sizeOffsetY = sizeOffsetXOrVector.y;\r\n speed = sizeOffsetYOrSpeed;\r\n }\r\n if (typeof sizeOffsetXOrVector === 'number' && typeof sizeOffsetYOrSpeed === 'number') {\r\n sizeOffsetX = sizeOffsetXOrVector;\r\n sizeOffsetY = sizeOffsetYOrSpeed;\r\n }\r\n this._queue.add(new ScaleBy(this._entity, sizeOffsetX, sizeOffsetY, speed));\r\n return this;\r\n }\r\n /**\r\n * This method will cause an actor to blink (become visible and not\r\n * visible). Optionally, you may specify the number of blinks. Specify the amount of time\r\n * the actor should be visible per blink, and the amount of time not visible.\r\n * This method is part of the actor 'Action' fluent API allowing action chaining.\r\n * @param timeVisible The amount of time to stay visible per blink in milliseconds\r\n * @param timeNotVisible The amount of time to stay not visible per blink in milliseconds\r\n * @param numBlinks The number of times to blink\r\n */\r\n blink(timeVisible, timeNotVisible, numBlinks = 1) {\r\n this._queue.add(new Blink(this._entity, timeVisible, timeNotVisible, numBlinks));\r\n return this;\r\n }\r\n /**\r\n * This method will cause an actor's opacity to change from its current value\r\n * to the provided value by a specified time (in milliseconds). This method is\r\n * part of the actor 'Action' fluent API allowing action chaining.\r\n * @param opacity The ending opacity\r\n * @param time The time it should take to fade the actor (in milliseconds)\r\n */\r\n fade(opacity, time) {\r\n this._queue.add(new Fade(this._entity, opacity, time));\r\n return this;\r\n }\r\n /**\r\n * This method will delay the next action from executing for a certain\r\n * amount of time (in milliseconds). This method is part of the actor\r\n * 'Action' fluent API allowing action chaining.\r\n * @param time The amount of time to delay the next action in the queue from executing in milliseconds\r\n */\r\n delay(time) {\r\n this._queue.add(new Delay(time));\r\n return this;\r\n }\r\n /**\r\n * This method will add an action to the queue that will remove the actor from the\r\n * scene once it has completed its previous Any actions on the\r\n * action queue after this action will not be executed.\r\n */\r\n die() {\r\n this._queue.add(new Die(this._entity));\r\n return this;\r\n }\r\n /**\r\n * This method allows you to call an arbitrary method as the next action in the\r\n * action queue. This is useful if you want to execute code in after a specific\r\n * action, i.e An actor arrives at a destination after traversing a path\r\n */\r\n callMethod(method) {\r\n this._queue.add(new CallMethod(method));\r\n return this;\r\n }\r\n /**\r\n * This method will cause the actor to repeat all of the actions built in\r\n * the `repeatBuilder` callback. If the number of repeats\r\n * is not specified it will repeat forever. This method is part of\r\n * the actor 'Action' fluent API allowing action chaining\r\n *\r\n * ```typescript\r\n * // Move up in a zig-zag by repeated moveBy's\r\n * actor.actions.repeat(repeatCtx => {\r\n * repeatCtx.moveBy(10, 0, 10);\r\n * repeatCtx.moveBy(0, 10, 10);\r\n * }, 5);\r\n * ```\r\n *\r\n * @param repeatBuilder The builder to specify the repeatable list of actions\r\n * @param times The number of times to repeat all the previous actions in the action queue. If nothing is specified the actions\r\n * will repeat forever\r\n */\r\n repeat(repeatBuilder, times) {\r\n if (!times) {\r\n this.repeatForever(repeatBuilder);\r\n return this;\r\n }\r\n this._queue.add(new Repeat(this._entity, repeatBuilder, times));\r\n return this;\r\n }\r\n /**\r\n * This method will cause the actor to repeat all of the actions built in\r\n * the `repeatBuilder` callback. If the number of repeats\r\n * is not specified it will repeat forever. This method is part of\r\n * the actor 'Action' fluent API allowing action chaining\r\n *\r\n * ```typescript\r\n * // Move up in a zig-zag by repeated moveBy's\r\n * actor.actions.repeat(repeatCtx => {\r\n * repeatCtx.moveBy(10, 0, 10);\r\n * repeatCtx.moveBy(0, 10, 10);\r\n * }, 5);\r\n * ```\r\n *\r\n * @param repeatBuilder The builder to specify the repeatable list of actions\r\n */\r\n repeatForever(repeatBuilder) {\r\n this._queue.add(new RepeatForever(this._entity, repeatBuilder));\r\n return this;\r\n }\r\n /**\r\n * This method will cause the entity to follow another at a specified distance\r\n * @param entity The entity to follow\r\n * @param followDistance The distance to maintain when following, if not specified the actor will follow at the current distance.\r\n */\r\n follow(entity, followDistance) {\r\n if (followDistance === undefined) {\r\n this._queue.add(new Follow(this._entity, entity));\r\n }\r\n else {\r\n this._queue.add(new Follow(this._entity, entity, followDistance));\r\n }\r\n return this;\r\n }\r\n /**\r\n * This method will cause the entity to move towards another until they\r\n * collide \"meet\" at a specified speed.\r\n * @param entity The entity to meet\r\n * @param speed The speed in pixels per second to move, if not specified it will match the speed of the other actor\r\n */\r\n meet(entity, speed) {\r\n if (speed === undefined) {\r\n this._queue.add(new Meet(this._entity, entity));\r\n }\r\n else {\r\n this._queue.add(new Meet(this._entity, entity, speed));\r\n }\r\n return this;\r\n }\r\n /**\r\n * Returns a promise that resolves when the current action queue up to now\r\n * is finished.\r\n */\r\n toPromise() {\r\n const temp = new Promise((resolve) => {\r\n this._queue.add(new CallMethod(() => {\r\n resolve();\r\n }));\r\n });\r\n return temp;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/ActionsComponent.ts\n\r\n\r\n\r\n\r\n;\r\nclass ActionsComponent extends Component {\r\n constructor() {\r\n super(...arguments);\r\n this.type = 'ex.actions';\r\n this.dependencies = [TransformComponent, MotionComponent];\r\n }\r\n onAdd(entity) {\r\n this._ctx = new ActionContext(entity);\r\n }\r\n onRemove() {\r\n this._ctx = null;\r\n }\r\n /**\r\n * Returns the internal action queue\r\n * @returns action queue\r\n */\r\n getQueue() {\r\n var _a;\r\n return (_a = this._ctx) === null || _a === void 0 ? void 0 : _a.getQueue();\r\n }\r\n runAction(action) {\r\n var _a;\r\n return (_a = this._ctx) === null || _a === void 0 ? void 0 : _a.runAction(action);\r\n }\r\n /**\r\n * Updates the internal action context, performing action and moving through the internal queue\r\n * @param elapsedMs\r\n */\r\n update(elapsedMs) {\r\n var _a;\r\n return (_a = this._ctx) === null || _a === void 0 ? void 0 : _a.update(elapsedMs);\r\n }\r\n /**\r\n * Clears all queued actions from the Actor\r\n */\r\n clearActions() {\r\n var _a;\r\n (_a = this._ctx) === null || _a === void 0 ? void 0 : _a.clearActions();\r\n }\r\n easeTo(...args) {\r\n return this._ctx.easeTo.apply(this._ctx, args);\r\n }\r\n easeBy(...args) {\r\n return this._ctx.easeBy.apply(this._ctx, args);\r\n }\r\n moveTo(xOrPos, yOrSpeed, speedOrUndefined) {\r\n return this._ctx.moveTo.apply(this._ctx, [xOrPos, yOrSpeed, speedOrUndefined]);\r\n }\r\n moveBy(xOffsetOrVector, yOffsetOrSpeed, speedOrUndefined) {\r\n return this._ctx.moveBy.apply(this._ctx, [xOffsetOrVector, yOffsetOrSpeed, speedOrUndefined]);\r\n }\r\n /**\r\n * This method will rotate an actor to the specified angle at the speed\r\n * specified (in radians per second) and return back the actor. This\r\n * method is part of the actor 'Action' fluent API allowing action chaining.\r\n * @param angleRadians The angle to rotate to in radians\r\n * @param speed The angular velocity of the rotation specified in radians per second\r\n * @param rotationType The [[RotationType]] to use for this rotation\r\n */\r\n rotateTo(angleRadians, speed, rotationType) {\r\n return this._ctx.rotateTo(angleRadians, speed, rotationType);\r\n }\r\n /**\r\n * This method will rotate an actor by the specified angle offset, from it's current rotation given a certain speed\r\n * in radians/sec and return back the actor. This method is part\r\n * of the actor 'Action' fluent API allowing action chaining.\r\n * @param angleRadiansOffset The angle to rotate to in radians relative to the current rotation\r\n * @param speed The speed in radians/sec the actor should rotate at\r\n * @param rotationType The [[RotationType]] to use for this rotation, default is shortest path\r\n */\r\n rotateBy(angleRadiansOffset, speed, rotationType) {\r\n return this._ctx.rotateBy(angleRadiansOffset, speed, rotationType);\r\n }\r\n scaleTo(sizeXOrVector, sizeYOrSpeed, speedXOrUndefined, speedYOrUndefined) {\r\n return this._ctx.scaleTo.apply(this._ctx, [sizeXOrVector, sizeYOrSpeed, speedXOrUndefined, speedYOrUndefined]);\r\n }\r\n scaleBy(sizeOffsetXOrVector, sizeOffsetYOrSpeed, speed) {\r\n return this._ctx.scaleBy.apply(this._ctx, [sizeOffsetXOrVector, sizeOffsetYOrSpeed, speed]);\r\n }\r\n /**\r\n * This method will cause an actor to blink (become visible and not\r\n * visible). Optionally, you may specify the number of blinks. Specify the amount of time\r\n * the actor should be visible per blink, and the amount of time not visible.\r\n * This method is part of the actor 'Action' fluent API allowing action chaining.\r\n * @param timeVisible The amount of time to stay visible per blink in milliseconds\r\n * @param timeNotVisible The amount of time to stay not visible per blink in milliseconds\r\n * @param numBlinks The number of times to blink\r\n */\r\n blink(timeVisible, timeNotVisible, numBlinks) {\r\n return this._ctx.blink(timeVisible, timeNotVisible, numBlinks);\r\n }\r\n /**\r\n * This method will cause an actor's opacity to change from its current value\r\n * to the provided value by a specified time (in milliseconds). This method is\r\n * part of the actor 'Action' fluent API allowing action chaining.\r\n * @param opacity The ending opacity\r\n * @param time The time it should take to fade the actor (in milliseconds)\r\n */\r\n fade(opacity, time) {\r\n return this._ctx.fade(opacity, time);\r\n }\r\n /**\r\n * This method will delay the next action from executing for a certain\r\n * amount of time (in milliseconds). This method is part of the actor\r\n * 'Action' fluent API allowing action chaining.\r\n * @param time The amount of time to delay the next action in the queue from executing in milliseconds\r\n */\r\n delay(time) {\r\n return this._ctx.delay(time);\r\n }\r\n /**\r\n * This method will add an action to the queue that will remove the actor from the\r\n * scene once it has completed its previous Any actions on the\r\n * action queue after this action will not be executed.\r\n */\r\n die() {\r\n return this._ctx.die();\r\n }\r\n /**\r\n * This method allows you to call an arbitrary method as the next action in the\r\n * action queue. This is useful if you want to execute code in after a specific\r\n * action, i.e An actor arrives at a destination after traversing a path\r\n */\r\n callMethod(method) {\r\n return this._ctx.callMethod(method);\r\n }\r\n /**\r\n * This method will cause the actor to repeat all of the actions built in\r\n * the `repeatBuilder` callback. If the number of repeats\r\n * is not specified it will repeat forever. This method is part of\r\n * the actor 'Action' fluent API allowing action chaining\r\n *\r\n * ```typescript\r\n * // Move up in a zig-zag by repeated moveBy's\r\n * actor.actions.repeat(repeatCtx => {\r\n * repeatCtx.moveBy(10, 0, 10);\r\n * repeatCtx.moveBy(0, 10, 10);\r\n * }, 5);\r\n * ```\r\n *\r\n * @param repeatBuilder The builder to specify the repeatable list of actions\r\n * @param times The number of times to repeat all the previous actions in the action queue. If nothing is specified the actions\r\n * will repeat forever\r\n */\r\n repeat(repeatBuilder, times) {\r\n return this._ctx.repeat(repeatBuilder, times);\r\n }\r\n /**\r\n * This method will cause the actor to repeat all of the actions built in\r\n * the `repeatBuilder` callback. If the number of repeats\r\n * is not specified it will repeat forever. This method is part of\r\n * the actor 'Action' fluent API allowing action chaining\r\n *\r\n * ```typescript\r\n * // Move up in a zig-zag by repeated moveBy's\r\n * actor.actions.repeat(repeatCtx => {\r\n * repeatCtx.moveBy(10, 0, 10);\r\n * repeatCtx.moveBy(0, 10, 10);\r\n * }, 5);\r\n * ```\r\n *\r\n * @param repeatBuilder The builder to specify the repeatable list of actions\r\n */\r\n repeatForever(repeatBuilder) {\r\n return this._ctx.repeatForever(repeatBuilder);\r\n }\r\n /**\r\n * This method will cause the entity to follow another at a specified distance\r\n * @param entity The entity to follow\r\n * @param followDistance The distance to maintain when following, if not specified the actor will follow at the current distance.\r\n */\r\n follow(entity, followDistance) {\r\n return this._ctx.follow(entity, followDistance);\r\n }\r\n /**\r\n * This method will cause the entity to move towards another until they\r\n * collide \"meet\" at a specified speed.\r\n * @param entity The entity to meet\r\n * @param speed The speed in pixels per second to move, if not specified it will match the speed of the other actor\r\n */\r\n meet(entity, speed) {\r\n return this._ctx.meet(entity, speed);\r\n }\r\n /**\r\n * Returns a promise that resolves when the current action queue up to now\r\n * is finished.\r\n */\r\n toPromise() {\r\n return this._ctx.toPromise();\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/FontCommon.ts\n/**\r\n * Enum representing the different font size units\r\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-size\r\n */\r\nvar FontUnit;\r\n(function (FontUnit) {\r\n /**\r\n * Em is a scalable unit, 1 em is equal to the current font size of the current element, parent elements can effect em values\r\n */\r\n FontUnit[\"Em\"] = \"em\";\r\n /**\r\n * Rem is similar to the Em, it is a scalable unit. 1 rem is equal to the font size of the root element\r\n */\r\n FontUnit[\"Rem\"] = \"rem\";\r\n /**\r\n * Pixel is a unit of length in screen pixels\r\n */\r\n FontUnit[\"Px\"] = \"px\";\r\n /**\r\n * Point is a physical unit length (1/72 of an inch)\r\n */\r\n FontUnit[\"Pt\"] = \"pt\";\r\n /**\r\n * Percent is a scalable unit similar to Em, the only difference is the Em units scale faster when Text-Size stuff\r\n */\r\n FontUnit[\"Percent\"] = \"%\";\r\n})(FontUnit || (FontUnit = {}));\r\n/**\r\n * Enum representing the different horizontal text alignments\r\n */\r\nvar TextAlign;\r\n(function (TextAlign) {\r\n /**\r\n * The text is left-aligned.\r\n */\r\n TextAlign[\"Left\"] = \"left\";\r\n /**\r\n * The text is right-aligned.\r\n */\r\n TextAlign[\"Right\"] = \"right\";\r\n /**\r\n * The text is centered.\r\n */\r\n TextAlign[\"Center\"] = \"center\";\r\n /**\r\n * The text is aligned at the normal start of the line (left-aligned for left-to-right locales,\r\n * right-aligned for right-to-left locales).\r\n */\r\n TextAlign[\"Start\"] = \"start\";\r\n /**\r\n * The text is aligned at the normal end of the line (right-aligned for left-to-right locales,\r\n * left-aligned for right-to-left locales).\r\n */\r\n TextAlign[\"End\"] = \"end\";\r\n})(TextAlign || (TextAlign = {}));\r\n/**\r\n * Enum representing the different baseline text alignments\r\n */\r\nvar BaseAlign;\r\n(function (BaseAlign) {\r\n /**\r\n * The text baseline is the top of the em square.\r\n */\r\n BaseAlign[\"Top\"] = \"top\";\r\n /**\r\n * The text baseline is the hanging baseline. Currently unsupported; this will act like\r\n * alphabetic.\r\n */\r\n BaseAlign[\"Hanging\"] = \"hanging\";\r\n /**\r\n * The text baseline is the middle of the em square.\r\n */\r\n BaseAlign[\"Middle\"] = \"middle\";\r\n /**\r\n * The text baseline is the normal alphabetic baseline.\r\n */\r\n BaseAlign[\"Alphabetic\"] = \"alphabetic\";\r\n /**\r\n * The text baseline is the ideographic baseline; this is the bottom of\r\n * the body of the characters, if the main body of characters protrudes\r\n * beneath the alphabetic baseline. Currently unsupported; this will\r\n * act like alphabetic.\r\n */\r\n BaseAlign[\"Ideographic\"] = \"ideographic\";\r\n /**\r\n * The text baseline is the bottom of the bounding box. This differs\r\n * from the ideographic baseline in that the ideographic baseline\r\n * doesn't consider descenders.\r\n */\r\n BaseAlign[\"Bottom\"] = \"bottom\";\r\n})(BaseAlign || (BaseAlign = {}));\r\n/**\r\n * Enum representing the different possible font styles\r\n */\r\nvar FontStyle;\r\n(function (FontStyle) {\r\n FontStyle[\"Normal\"] = \"normal\";\r\n FontStyle[\"Italic\"] = \"italic\";\r\n FontStyle[\"Oblique\"] = \"oblique\";\r\n})(FontStyle || (FontStyle = {}));\r\n/**\r\n * Enum representing the text direction, useful for other languages, or writing text in reverse\r\n */\r\nvar Direction;\r\n(function (Direction) {\r\n Direction[\"LeftToRight\"] = \"ltr\";\r\n Direction[\"RightToLeft\"] = \"rtl\";\r\n})(Direction || (Direction = {}));\r\n\n;// CONCATENATED MODULE: ./Graphics/Font.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Represents a system or web font in Excalibur\r\n *\r\n * If no options specified, the system sans-serif 10 pixel is used\r\n *\r\n * If loading a custom web font be sure to have the font loaded before you use it https://erikonarheim.com/posts/dont-test-fonts/\r\n */\r\nclass Font extends Graphic {\r\n constructor(options = {}) {\r\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;\r\n super(options); // <- Graphics properties\r\n /**\r\n * Set the font filtering mode, by default set to [[ImageFiltering.Blended]] regardless of the engine default smoothing\r\n *\r\n * If you have a pixel style font that may be a reason to switch this to [[ImageFiltering.Pixel]]\r\n */\r\n this.filtering = ImageFiltering.Blended;\r\n /**\r\n * Font quality determines the size of the underlying raster text, higher quality means less jagged edges.\r\n * If quality is set to 1, then just enough raster bitmap is generated to render the text.\r\n *\r\n * You can think of quality as how zoomed in to the text you can get before seeing jagged edges.\r\n *\r\n * (Default 2)\r\n */\r\n this.quality = 2;\r\n // Raster properties for fonts\r\n this.padding = 2;\r\n this.smoothing = false;\r\n this.lineWidth = 1;\r\n this.lineDash = [];\r\n this.color = Color.Black;\r\n this.family = 'sans-serif';\r\n this.style = FontStyle.Normal;\r\n this.bold = false;\r\n this.unit = FontUnit.Px;\r\n this.textAlign = TextAlign.Left;\r\n this.baseAlign = BaseAlign.Alphabetic;\r\n this.direction = Direction.LeftToRight;\r\n this.size = 10;\r\n this.shadow = null;\r\n this._textBounds = new BoundingBox();\r\n this._cachedTextMeasurement = new Map();\r\n this._bitmapToTextMeasurement = new Map();\r\n this._textToBitmap = new Map();\r\n this._bitmapUsage = new Map();\r\n this._textFragments = [];\r\n // Raster properties\r\n this.smoothing = (_a = options === null || options === void 0 ? void 0 : options.smoothing) !== null && _a !== void 0 ? _a : this.smoothing;\r\n this.padding = (_b = options === null || options === void 0 ? void 0 : options.padding) !== null && _b !== void 0 ? _b : this.padding;\r\n this.color = (_c = options === null || options === void 0 ? void 0 : options.color) !== null && _c !== void 0 ? _c : this.color;\r\n this.strokeColor = (_d = options === null || options === void 0 ? void 0 : options.strokeColor) !== null && _d !== void 0 ? _d : this.strokeColor;\r\n this.lineDash = (_e = options === null || options === void 0 ? void 0 : options.lineDash) !== null && _e !== void 0 ? _e : this.lineDash;\r\n this.lineWidth = (_f = options === null || options === void 0 ? void 0 : options.lineWidth) !== null && _f !== void 0 ? _f : this.lineWidth;\r\n this.filtering = (_g = options === null || options === void 0 ? void 0 : options.filtering) !== null && _g !== void 0 ? _g : this.filtering;\r\n // Font specific properties\r\n this.family = (_h = options === null || options === void 0 ? void 0 : options.family) !== null && _h !== void 0 ? _h : this.family;\r\n this.style = (_j = options === null || options === void 0 ? void 0 : options.style) !== null && _j !== void 0 ? _j : this.style;\r\n this.bold = (_k = options === null || options === void 0 ? void 0 : options.bold) !== null && _k !== void 0 ? _k : this.bold;\r\n this.size = (_l = options === null || options === void 0 ? void 0 : options.size) !== null && _l !== void 0 ? _l : this.size;\r\n this.unit = (_m = options === null || options === void 0 ? void 0 : options.unit) !== null && _m !== void 0 ? _m : this.unit;\r\n this.textAlign = (_o = options === null || options === void 0 ? void 0 : options.textAlign) !== null && _o !== void 0 ? _o : this.textAlign;\r\n this.baseAlign = (_p = options === null || options === void 0 ? void 0 : options.baseAlign) !== null && _p !== void 0 ? _p : this.baseAlign;\r\n this.direction = (_q = options === null || options === void 0 ? void 0 : options.direction) !== null && _q !== void 0 ? _q : this.direction;\r\n this.quality = (_r = options === null || options === void 0 ? void 0 : options.quality) !== null && _r !== void 0 ? _r : this.quality;\r\n if (options === null || options === void 0 ? void 0 : options.shadow) {\r\n this.shadow = {};\r\n this.shadow.blur = (_s = options.shadow.blur) !== null && _s !== void 0 ? _s : this.shadow.blur;\r\n this.shadow.offset = (_t = options.shadow.offset) !== null && _t !== void 0 ? _t : this.shadow.offset;\r\n this.shadow.color = (_u = options.shadow.color) !== null && _u !== void 0 ? _u : this.shadow.color;\r\n }\r\n }\r\n clone() {\r\n return new Font({\r\n ...this.cloneGraphicOptions(),\r\n size: this.size,\r\n unit: this.unit,\r\n family: this.family,\r\n style: this.style,\r\n bold: this.bold,\r\n textAlign: this.textAlign,\r\n baseAlign: this.baseAlign,\r\n direction: this.direction,\r\n shadow: this.shadow\r\n ? {\r\n blur: this.shadow.blur,\r\n offset: this.shadow.offset,\r\n color: this.shadow.color\r\n }\r\n : null\r\n });\r\n }\r\n get fontString() {\r\n return `${this.style} ${this.bold ? 'bold' : ''} ${this.size}${this.unit} ${this.family}`;\r\n }\r\n get localBounds() {\r\n return this._textBounds;\r\n }\r\n _drawImage(_ex, _x, _y) {\r\n // TODO weird vestigial drawimage\r\n }\r\n _rotate(ex) {\r\n var _a;\r\n // TODO this needs to change depending on the bounding box...\r\n const origin = (_a = this.origin) !== null && _a !== void 0 ? _a : this._textBounds.center;\r\n ex.translate(origin.x, origin.y);\r\n ex.rotate(this.rotation);\r\n ex.translate(-origin.x, -origin.y);\r\n }\r\n _flip(ex) {\r\n if (this.flipHorizontal) {\r\n ex.translate(this._textBounds.width / this.scale.x, 0);\r\n ex.scale(-1, 1);\r\n }\r\n if (this.flipVertical) {\r\n ex.translate(0, -this._textBounds.height / 2 / this.scale.y);\r\n ex.scale(1, -1);\r\n }\r\n }\r\n /**\r\n * Returns a BoundingBox that is the total size of the text including multiple lines\r\n *\r\n * Does not include any padding or adjustment\r\n * @param text\r\n * @returns BoundingBox\r\n */\r\n measureText(text) {\r\n let measurementDirty = false;\r\n let cached = this._cachedTextMeasurement.get(text);\r\n if (!cached) {\r\n measurementDirty = true;\r\n }\r\n const rasterProps = this._getRasterPropertiesHash();\r\n if (!cached || rasterProps !== cached.rasterProps) {\r\n measurementDirty = true;\r\n }\r\n if (measurementDirty) {\r\n const lines = text.split('\\n');\r\n const maxWidthLine = lines.reduce((a, b) => {\r\n return a.length > b.length ? a : b;\r\n });\r\n const ctx = this._getTextBitmap(text);\r\n this._applyFont(ctx); // font must be applied to the context to measure it\r\n const metrics = ctx.measureText(maxWidthLine);\r\n let textHeight = Math.abs(metrics.actualBoundingBoxAscent) + Math.abs(metrics.actualBoundingBoxDescent);\r\n // TODO lineheight makes the text bounds wonky\r\n const lineAdjustedHeight = textHeight * lines.length;\r\n textHeight = lineAdjustedHeight;\r\n const bottomBounds = lineAdjustedHeight - Math.abs(metrics.actualBoundingBoxAscent);\r\n const x = 0;\r\n const y = 0;\r\n // this._cachedText = text;\r\n // this._cachedRasterProps = rasterProps;\r\n // this._measurementDirty = false;\r\n const measurement = new BoundingBox({\r\n left: x - Math.abs(metrics.actualBoundingBoxLeft) - this.padding,\r\n top: y - Math.abs(metrics.actualBoundingBoxAscent) - this.padding,\r\n bottom: y + bottomBounds + this.padding,\r\n right: x + Math.abs(metrics.actualBoundingBoxRight) + this.padding\r\n });\r\n cached = {\r\n text,\r\n rasterProps,\r\n measurement\r\n };\r\n this._cachedTextMeasurement.set(text, cached);\r\n this._bitmapToTextMeasurement.set(ctx, cached);\r\n return cached.measurement;\r\n }\r\n else {\r\n return cached.measurement;\r\n }\r\n }\r\n _setDimension(textBounds, bitmap) {\r\n // Changing the width and height clears the context properties\r\n // We double the bitmap width to account for all possible alignment\r\n // We scale by \"quality\" so we render text without jaggies\r\n bitmap.canvas.width = (textBounds.width + this.padding * 2) * 2 * this.quality;\r\n bitmap.canvas.height = (textBounds.height + this.padding * 2) * 2 * this.quality;\r\n }\r\n _postDraw(ex) {\r\n ex.restore();\r\n }\r\n /**\r\n * We need to identify bitmaps with more than just the text content\r\n *\r\n * Any properties that can change the rendering of the text\r\n */\r\n _getRasterPropertiesHash(color) {\r\n var _a, _b;\r\n const hash = '__hashcode__' +\r\n this.fontString +\r\n this.showDebug +\r\n this.textAlign +\r\n this.baseAlign +\r\n this.direction +\r\n JSON.stringify(this.shadow) +\r\n (this.padding.toString() +\r\n this.smoothing.toString() +\r\n this.lineWidth.toString() +\r\n this.lineDash.toString() +\r\n ((_a = this.strokeColor) === null || _a === void 0 ? void 0 : _a.toString()) +\r\n (color ? color.toString() : (_b = this.color) === null || _b === void 0 ? void 0 : _b.toString()).toString());\r\n return hash;\r\n }\r\n _applyRasterProperties(ctx, color) {\r\n var _a, _b, _c;\r\n ctx.translate(this.padding, this.padding);\r\n ctx.imageSmoothingEnabled = this.smoothing;\r\n ctx.lineWidth = this.lineWidth;\r\n ctx.setLineDash((_a = this.lineDash) !== null && _a !== void 0 ? _a : ctx.getLineDash());\r\n ctx.strokeStyle = (_b = this.strokeColor) === null || _b === void 0 ? void 0 : _b.toString();\r\n ctx.fillStyle = color ? color.toString() : (_c = this.color) === null || _c === void 0 ? void 0 : _c.toString();\r\n }\r\n _applyFont(ctx) {\r\n ctx.translate(this.padding + ctx.canvas.width / 2, this.padding + ctx.canvas.height / 2);\r\n ctx.scale(this.quality, this.quality);\r\n ctx.textAlign = this.textAlign;\r\n ctx.textBaseline = this.baseAlign;\r\n ctx.font = this.fontString;\r\n ctx.direction = this.direction;\r\n if (this.shadow) {\r\n ctx.shadowColor = this.shadow.color.toString();\r\n ctx.shadowBlur = this.shadow.blur;\r\n ctx.shadowOffsetX = this.shadow.offset.x;\r\n ctx.shadowOffsetY = this.shadow.offset.y;\r\n }\r\n }\r\n _drawText(ctx, text, colorOverride, lineHeight) {\r\n const lines = text.split('\\n');\r\n this._applyRasterProperties(ctx, colorOverride);\r\n this._applyFont(ctx);\r\n for (let i = 0; i < lines.length; i++) {\r\n const line = lines[i];\r\n if (this.color) {\r\n ctx.fillText(line, 0, i * lineHeight);\r\n }\r\n if (this.strokeColor) {\r\n ctx.strokeText(line, 0, i * lineHeight);\r\n }\r\n }\r\n if (this.showDebug) {\r\n // Horizontal line\r\n /* istanbul ignore next */\r\n line(ctx, Color.Red, -ctx.canvas.width / 2, 0, ctx.canvas.width / 2, 0, 2);\r\n // Vertical line\r\n /* istanbul ignore next */\r\n line(ctx, Color.Red, 0, -ctx.canvas.height / 2, 0, ctx.canvas.height / 2, 2);\r\n }\r\n }\r\n _getTextBitmap(text, color) {\r\n const textAndHash = text + this._getRasterPropertiesHash(color);\r\n const bitmap = this._textToBitmap.get(textAndHash);\r\n if (bitmap) {\r\n return bitmap;\r\n }\r\n const canvas = document.createElement('canvas');\r\n const ctx = canvas.getContext('2d');\r\n this._textToBitmap.set(textAndHash, ctx);\r\n return ctx;\r\n }\r\n _splitTextBitmap(bitmap) {\r\n const textImages = [];\r\n let currentX = 0;\r\n let currentY = 0;\r\n // 4k is the max for mobile devices\r\n const width = Math.min(4096, bitmap.canvas.width);\r\n const height = Math.min(4096, bitmap.canvas.height);\r\n // Splits the original bitmap into 4k max chunks\r\n while (currentX < bitmap.canvas.width) {\r\n while (currentY < bitmap.canvas.height) {\r\n // create new bitmap\r\n const canvas = document.createElement('canvas');\r\n canvas.width = width;\r\n canvas.height = height;\r\n const ctx = canvas.getContext('2d');\r\n // draw current slice to new bitmap in < 4k chunks\r\n ctx.drawImage(bitmap.canvas, currentX, currentY, width, height, 0, 0, width, height);\r\n textImages.push({ x: currentX, y: currentY, canvas });\r\n currentY += height;\r\n }\r\n currentX += width;\r\n currentY = 0;\r\n }\r\n return textImages;\r\n }\r\n render(ex, text, colorOverride, x, y) {\r\n if (this.showDebug) {\r\n this.clearCache();\r\n }\r\n this.checkAndClearCache();\r\n // Get bitmap for rastering text, this is cached by raster properties\r\n const bitmap = this._getTextBitmap(text, colorOverride);\r\n const isNewBitmap = !this._bitmapUsage.get(bitmap);\r\n // Bounds of the text\r\n this._textBounds = this.measureText(text);\r\n if (isNewBitmap) {\r\n // Setting dimension is expensive because it invalidates the bitmap\r\n this._setDimension(this._textBounds, bitmap);\r\n }\r\n // Apply affine transformations\r\n this._preDraw(ex, x, y);\r\n const lines = text.split('\\n');\r\n const lineHeight = this._textBounds.height / lines.length;\r\n if (isNewBitmap) {\r\n // draws the text to the bitmap\r\n this._drawText(bitmap, text, colorOverride, lineHeight);\r\n // clean up any existing fragments\r\n for (const frag of this._textFragments) {\r\n TextureLoader[\"delete\"](frag.canvas);\r\n }\r\n this._textFragments = this._splitTextBitmap(bitmap);\r\n for (const frag of this._textFragments) {\r\n TextureLoader.load(frag.canvas, this.filtering, true);\r\n }\r\n }\r\n // draws the bitmap fragments to excalibur graphics context\r\n for (const frag of this._textFragments) {\r\n ex.drawImage(frag.canvas, 0, 0, frag.canvas.width, frag.canvas.height, frag.x / this.quality + x - bitmap.canvas.width / this.quality / 2, frag.y / this.quality + y - bitmap.canvas.height / this.quality / 2, frag.canvas.width / this.quality, frag.canvas.height / this.quality);\r\n }\r\n this._postDraw(ex);\r\n // Cache the bitmap for certain amount of time\r\n this._bitmapUsage.set(bitmap, performance.now());\r\n }\r\n /**\r\n * Get the internal cache size of the font\r\n * This is useful when debugging memory usage, these numbers indicate the number of cached in memory text bitmaps\r\n */\r\n get cacheSize() {\r\n return this._bitmapUsage.size;\r\n }\r\n /**\r\n * Force clear all cached text bitmaps\r\n */\r\n clearCache() {\r\n this._bitmapUsage.clear();\r\n }\r\n /**\r\n * Remove any expired cached text bitmaps\r\n */\r\n checkAndClearCache() {\r\n for (const [bitmap, time] of this._bitmapUsage.entries()) {\r\n // if bitmap hasn't been used in 1 second clear it\r\n if (time + 1000 < performance.now()) {\r\n this._bitmapUsage.delete(bitmap);\r\n // Cleanup measurements\r\n const measurement = this._bitmapToTextMeasurement.get(bitmap);\r\n if (measurement) {\r\n this._cachedTextMeasurement.delete(measurement.text);\r\n this._bitmapToTextMeasurement.delete(bitmap);\r\n }\r\n TextureLoader[\"delete\"](bitmap.canvas);\r\n }\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Text.ts\n\r\n\r\n\r\n/**\r\n * Represent Text graphics in excalibur\r\n *\r\n * Useful for in game labels, ui, or overlays\r\n */\r\nclass Text extends Graphic {\r\n constructor(options) {\r\n var _a, _b;\r\n super(options);\r\n this._text = '';\r\n this._textWidth = 0;\r\n this._textHeight = 0;\r\n // This order is important font, color, then text\r\n this.font = (_a = options.font) !== null && _a !== void 0 ? _a : new Font();\r\n this.color = (_b = options.color) !== null && _b !== void 0 ? _b : this.color;\r\n this.text = options.text;\r\n }\r\n clone() {\r\n var _a, _b;\r\n return new Text({\r\n text: this.text.slice(),\r\n color: (_b = (_a = this.color) === null || _a === void 0 ? void 0 : _a.clone()) !== null && _b !== void 0 ? _b : Color.Black,\r\n font: this.font.clone()\r\n });\r\n }\r\n get text() {\r\n return this._text;\r\n }\r\n set text(value) {\r\n this._text = value;\r\n const bounds = this.font.measureText(this._text);\r\n this._textWidth = bounds.width;\r\n this._textHeight = bounds.height;\r\n }\r\n get font() {\r\n return this._font;\r\n }\r\n set font(font) {\r\n this._font = font;\r\n }\r\n get width() {\r\n if (this._textWidth === 0) {\r\n this._calculateDimension();\r\n }\r\n return this._textWidth * this.scale.x;\r\n }\r\n get height() {\r\n if (this._textHeight === 0) {\r\n this._calculateDimension();\r\n }\r\n return this._textHeight * this.scale.y;\r\n }\r\n _calculateDimension() {\r\n const { width, height } = this.font.measureText(this._text);\r\n this._textWidth = width;\r\n this._textHeight = height;\r\n }\r\n get localBounds() {\r\n return this.font.measureText(this._text).scale(this.scale);\r\n }\r\n _rotate(_ex) {\r\n // None this is delegated to font\r\n // This override erases the default behavior\r\n }\r\n _flip(_ex) {\r\n // None this is delegated to font\r\n // This override erases the default behavior\r\n }\r\n _drawImage(ex, x, y) {\r\n var _a;\r\n let color = Color.Black;\r\n if (this.font instanceof Font) {\r\n color = (_a = this.color) !== null && _a !== void 0 ? _a : this.font.color;\r\n }\r\n if (this.isStale() || this.font.isStale()) {\r\n this.font.flipHorizontal = this.flipHorizontal;\r\n this.font.flipVertical = this.flipVertical;\r\n this.font.rotation = this.rotation;\r\n this.font.origin = this.origin;\r\n this.font.opacity = this.opacity;\r\n }\r\n this.font.tint = this.tint;\r\n const { width, height } = this.font.measureText(this._text);\r\n this._textWidth = width;\r\n this._textHeight = height;\r\n this.font.render(ex, this._text, color, x, y);\r\n if (this.font.showDebug) {\r\n ex.debug.drawRect(x - width, y - height, width * 2, height * 2);\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actor.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Type guard for checking if something is an Actor\r\n * @param x\r\n */\r\nfunction isActor(x) {\r\n return x instanceof Actor;\r\n}\r\n/**\r\n * The most important primitive in Excalibur is an `Actor`. Anything that\r\n * can move on the screen, collide with another `Actor`, respond to events,\r\n * or interact with the current scene, must be an actor. An `Actor` **must**\r\n * be part of a [[Scene]] for it to be drawn to the screen.\r\n */\r\nclass Actor extends Entity {\r\n // #endregion\r\n /**\r\n *\r\n * @param config\r\n */\r\n constructor(config) {\r\n super();\r\n /**\r\n * The anchor to apply all actor related transformations like rotation,\r\n * translation, and scaling. By default the anchor is in the center of\r\n * the actor. By default it is set to the center of the actor (.5, .5)\r\n *\r\n * An anchor of (.5, .5) will ensure that drawings are centered.\r\n *\r\n * Use `anchor.setTo` to set the anchor to a different point using\r\n * values between 0 and 1. For example, anchoring to the top-left would be\r\n * `Actor.anchor.setTo(0, 0)` and top-right would be `Actor.anchor.setTo(0, 1)`.\r\n */\r\n this._anchor = watch(Vector.Half, (v) => this._handleAnchorChange(v));\r\n /**\r\n * Convenience reference to the global logger\r\n */\r\n this.logger = Logger.getInstance();\r\n /**\r\n * The scene that the actor is in\r\n */\r\n this.scene = null;\r\n /**\r\n * Draggable helper\r\n */\r\n this._draggable = false;\r\n this._dragging = false;\r\n this._pointerDragStartHandler = () => {\r\n this._dragging = true;\r\n };\r\n this._pointerDragEndHandler = () => {\r\n this._dragging = false;\r\n };\r\n this._pointerDragMoveHandler = (pe) => {\r\n if (this._dragging) {\r\n this.pos = pe.worldPos;\r\n }\r\n };\r\n this._pointerDragLeaveHandler = (pe) => {\r\n if (this._dragging) {\r\n this.pos = pe.worldPos;\r\n }\r\n };\r\n const { name, x, y, pos, coordPlane, scale, width, height, radius, collider, vel, acc, rotation, angularVelocity, z, color, visible, anchor, collisionType, collisionGroup } = {\r\n ...config\r\n };\r\n this._setName(name);\r\n this.anchor = anchor !== null && anchor !== void 0 ? anchor : Actor.defaults.anchor.clone();\r\n const tx = new TransformComponent();\r\n this.addComponent(tx);\r\n this.pos = pos !== null && pos !== void 0 ? pos : vec(x !== null && x !== void 0 ? x : 0, y !== null && y !== void 0 ? y : 0);\r\n this.rotation = rotation !== null && rotation !== void 0 ? rotation : 0;\r\n this.scale = scale !== null && scale !== void 0 ? scale : vec(1, 1);\r\n this.z = z !== null && z !== void 0 ? z : 0;\r\n tx.coordPlane = coordPlane !== null && coordPlane !== void 0 ? coordPlane : CoordPlane.World;\r\n this.addComponent(new PointerComponent);\r\n this.addComponent(new GraphicsComponent({\r\n anchor: this.anchor\r\n }));\r\n this.addComponent(new MotionComponent());\r\n this.vel = vel !== null && vel !== void 0 ? vel : Vector.Zero;\r\n this.acc = acc !== null && acc !== void 0 ? acc : Vector.Zero;\r\n this.angularVelocity = angularVelocity !== null && angularVelocity !== void 0 ? angularVelocity : 0;\r\n this.addComponent(new ActionsComponent());\r\n this.addComponent(new BodyComponent());\r\n this.body.collisionType = collisionType !== null && collisionType !== void 0 ? collisionType : CollisionType.Passive;\r\n if (collisionGroup) {\r\n this.body.group = collisionGroup;\r\n }\r\n if (collider) {\r\n this.addComponent(new ColliderComponent(collider));\r\n }\r\n else if (radius) {\r\n this.addComponent(new ColliderComponent(Shape.Circle(radius)));\r\n }\r\n else {\r\n if (width > 0 && height > 0) {\r\n this.addComponent(new ColliderComponent(Shape.Box(width, height, this.anchor)));\r\n }\r\n else {\r\n this.addComponent(new ColliderComponent()); // no collider\r\n }\r\n }\r\n this.graphics.visible = visible !== null && visible !== void 0 ? visible : true;\r\n if (color) {\r\n this.color = color;\r\n if (width && height) {\r\n this.graphics.add(new Rectangle({\r\n color: color,\r\n width,\r\n height\r\n }));\r\n }\r\n else if (radius) {\r\n this.graphics.add(new Circle({\r\n color: color,\r\n radius\r\n }));\r\n }\r\n }\r\n }\r\n /**\r\n * The physics body the is associated with this actor. The body is the container for all physical properties, like position, velocity,\r\n * acceleration, mass, inertia, etc.\r\n */\r\n get body() {\r\n return this.get(BodyComponent);\r\n }\r\n /**\r\n * Access the Actor's built in [[TransformComponent]]\r\n */\r\n get transform() {\r\n return this.get(TransformComponent);\r\n }\r\n /**\r\n * Access the Actor's built in [[MotionComponent]]\r\n */\r\n get motion() {\r\n return this.get(MotionComponent);\r\n }\r\n /**\r\n * Access to the Actor's built in [[GraphicsComponent]]\r\n */\r\n get graphics() {\r\n return this.get(GraphicsComponent);\r\n }\r\n /**\r\n * Access to the Actor's built in [[ColliderComponent]]\r\n */\r\n get collider() {\r\n return this.get(ColliderComponent);\r\n }\r\n /**\r\n * Access to the Actor's built in [[PointerComponent]] config\r\n */\r\n get pointer() {\r\n return this.get(PointerComponent);\r\n }\r\n /**\r\n * Useful for quickly scripting actor behavior, like moving to a place, patrolling back and forth, blinking, etc.\r\n *\r\n * Access to the Actor's built in [[ActionsComponent]] which forwards to the\r\n * [[ActionContext|Action context]] of the actor.\r\n */\r\n get actions() {\r\n return this.get(ActionsComponent);\r\n }\r\n /**\r\n * Gets the position vector of the actor in pixels\r\n */\r\n get pos() {\r\n return this.transform.pos;\r\n }\r\n /**\r\n * Sets the position vector of the actor in pixels\r\n */\r\n set pos(thePos) {\r\n this.transform.pos = thePos.clone();\r\n }\r\n /**\r\n * Gets the position vector of the actor from the last frame\r\n */\r\n get oldPos() {\r\n return this.body.oldPos;\r\n }\r\n /**\r\n * Sets the position vector of the actor in the last frame\r\n */\r\n set oldPos(thePos) {\r\n this.body.oldPos.setTo(thePos.x, thePos.y);\r\n }\r\n /**\r\n * Gets the velocity vector of the actor in pixels/sec\r\n */\r\n get vel() {\r\n return this.motion.vel;\r\n }\r\n /**\r\n * Sets the velocity vector of the actor in pixels/sec\r\n */\r\n set vel(theVel) {\r\n this.motion.vel = theVel.clone();\r\n }\r\n /**\r\n * Gets the velocity vector of the actor from the last frame\r\n */\r\n get oldVel() {\r\n return this.body.oldVel;\r\n }\r\n /**\r\n * Sets the velocity vector of the actor from the last frame\r\n */\r\n set oldVel(theVel) {\r\n this.body.oldVel.setTo(theVel.x, theVel.y);\r\n }\r\n /**\r\n * Gets the acceleration vector of the actor in pixels/second/second. An acceleration pointing down such as (0, 100) may be\r\n * useful to simulate a gravitational effect.\r\n */\r\n get acc() {\r\n return this.motion.acc;\r\n }\r\n /**\r\n * Sets the acceleration vector of teh actor in pixels/second/second\r\n */\r\n set acc(theAcc) {\r\n this.motion.acc = theAcc.clone();\r\n }\r\n /**\r\n * Sets the acceleration of the actor from the last frame. This does not include the global acc [[Physics.acc]].\r\n */\r\n set oldAcc(theAcc) {\r\n this.body.oldAcc.setTo(theAcc.x, theAcc.y);\r\n }\r\n /**\r\n * Gets the acceleration of the actor from the last frame. This does not include the global acc [[Physics.acc]].\r\n */\r\n get oldAcc() {\r\n return this.body.oldAcc;\r\n }\r\n /**\r\n * Gets the rotation of the actor in radians. 1 radian = 180/PI Degrees.\r\n */\r\n get rotation() {\r\n return this.transform.rotation;\r\n }\r\n /**\r\n * Sets the rotation of the actor in radians. 1 radian = 180/PI Degrees.\r\n */\r\n set rotation(theAngle) {\r\n this.transform.rotation = theAngle;\r\n }\r\n /**\r\n * Gets the rotational velocity of the actor in radians/second\r\n */\r\n get angularVelocity() {\r\n return this.motion.angularVelocity;\r\n }\r\n /**\r\n * Sets the rotational velocity of the actor in radians/sec\r\n */\r\n set angularVelocity(angularVelocity) {\r\n this.motion.angularVelocity = angularVelocity;\r\n }\r\n get scale() {\r\n return this.get(TransformComponent).scale;\r\n }\r\n set scale(scale) {\r\n this.get(TransformComponent).scale = scale;\r\n }\r\n get anchor() {\r\n return this._anchor;\r\n }\r\n set anchor(vec) {\r\n this._anchor = watch(vec, (v) => this._handleAnchorChange(v));\r\n this._handleAnchorChange(vec);\r\n }\r\n _handleAnchorChange(v) {\r\n if (this.graphics) {\r\n this.graphics.anchor = v;\r\n }\r\n }\r\n /**\r\n * Indicates whether the actor is physically in the viewport\r\n */\r\n get isOffScreen() {\r\n return this.hasTag('ex.offscreen');\r\n }\r\n get draggable() {\r\n return this._draggable;\r\n }\r\n set draggable(isDraggable) {\r\n if (isDraggable) {\r\n if (isDraggable && !this._draggable) {\r\n this.on('pointerdragstart', this._pointerDragStartHandler);\r\n this.on('pointerdragend', this._pointerDragEndHandler);\r\n this.on('pointerdragmove', this._pointerDragMoveHandler);\r\n this.on('pointerdragleave', this._pointerDragLeaveHandler);\r\n }\r\n else if (!isDraggable && this._draggable) {\r\n this.off('pointerdragstart', this._pointerDragStartHandler);\r\n this.off('pointerdragend', this._pointerDragEndHandler);\r\n this.off('pointerdragmove', this._pointerDragMoveHandler);\r\n this.off('pointerdragleave', this._pointerDragLeaveHandler);\r\n }\r\n this._draggable = isDraggable;\r\n }\r\n }\r\n /**\r\n * Sets the color of the actor's current graphic\r\n */\r\n get color() {\r\n return this._color;\r\n }\r\n set color(v) {\r\n var _a;\r\n this._color = v.clone();\r\n const defaultLayer = this.graphics.layers.default;\r\n const currentGraphic = (_a = defaultLayer.graphics[0]) === null || _a === void 0 ? void 0 : _a.graphic;\r\n if (currentGraphic instanceof Raster || currentGraphic instanceof Text) {\r\n currentGraphic.color = this._color;\r\n }\r\n }\r\n /**\r\n * `onInitialize` is called before the first update of the actor. This method is meant to be\r\n * overridden. This is where initialization of child actors should take place.\r\n *\r\n * Synonymous with the event handler `.on('initialize', (evt) => {...})`\r\n */\r\n onInitialize(_engine) {\r\n // Override me\r\n }\r\n /**\r\n * Initializes this actor and all it's child actors, meant to be called by the Scene before first update not by users of Excalibur.\r\n *\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * @internal\r\n */\r\n _initialize(engine) {\r\n super._initialize(engine);\r\n for (const child of this.children) {\r\n child._initialize(engine);\r\n }\r\n }\r\n on(eventName, handler) {\r\n super.on(eventName, handler);\r\n }\r\n once(eventName, handler) {\r\n super.once(eventName, handler);\r\n }\r\n off(eventName, handler) {\r\n super.off(eventName, handler);\r\n }\r\n // #endregion\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Internal _prekill handler for [[onPreKill]] lifecycle event\r\n * @internal\r\n */\r\n _prekill(_scene) {\r\n super.emit('prekill', new PreKillEvent(this));\r\n this.onPreKill(_scene);\r\n }\r\n /**\r\n * Safe to override onPreKill lifecycle event handler. Synonymous with `.on('prekill', (evt) =>{...})`\r\n *\r\n * `onPreKill` is called directly before an actor is killed and removed from its current [[Scene]].\r\n */\r\n onPreKill(_scene) {\r\n // Override me\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Internal _prekill handler for [[onPostKill]] lifecycle event\r\n * @internal\r\n */\r\n _postkill(_scene) {\r\n super.emit('postkill', new PostKillEvent(this));\r\n this.onPostKill(_scene);\r\n }\r\n /**\r\n * Safe to override onPostKill lifecycle event handler. Synonymous with `.on('postkill', (evt) => {...})`\r\n *\r\n * `onPostKill` is called directly after an actor is killed and remove from its current [[Scene]].\r\n */\r\n onPostKill(_scene) {\r\n // Override me\r\n }\r\n /**\r\n * If the current actor is a member of the scene, this will remove\r\n * it from the scene graph. It will no longer be drawn or updated.\r\n */\r\n kill() {\r\n if (this.scene) {\r\n this._prekill(this.scene);\r\n this.emit('kill', new KillEvent(this));\r\n super.kill();\r\n this._postkill(this.scene);\r\n }\r\n else {\r\n this.logger.warn('Cannot kill actor, it was never added to the Scene');\r\n }\r\n }\r\n /**\r\n * If the current actor is killed, it will now not be killed.\r\n */\r\n unkill() {\r\n this.active = true;\r\n }\r\n /**\r\n * Indicates wether the actor has been killed.\r\n */\r\n isKilled() {\r\n return !this.active;\r\n }\r\n /**\r\n * Gets the z-index of an actor. The z-index determines the relative order an actor is drawn in.\r\n * Actors with a higher z-index are drawn on top of actors with a lower z-index\r\n */\r\n get z() {\r\n return this.get(TransformComponent).z;\r\n }\r\n /**\r\n * Sets the z-index of an actor and updates it in the drawing list for the scene.\r\n * The z-index determines the relative order an actor is drawn in.\r\n * Actors with a higher z-index are drawn on top of actors with a lower z-index\r\n * @param newZ new z-index to assign\r\n */\r\n set z(newZ) {\r\n this.get(TransformComponent).z = newZ;\r\n }\r\n /**\r\n * Get the center point of an actor (global position)\r\n */\r\n get center() {\r\n const globalPos = this.getGlobalPos();\r\n return new Vector(globalPos.x + this.width / 2 - this.anchor.x * this.width, globalPos.y + this.height / 2 - this.anchor.y * this.height);\r\n }\r\n /**\r\n * Get the local center point of an actor\r\n */\r\n get localCenter() {\r\n return new Vector(this.pos.x + this.width / 2 - this.anchor.x * this.width, this.pos.y + this.height / 2 - this.anchor.y * this.height);\r\n }\r\n get width() {\r\n return this.collider.localBounds.width * this.getGlobalScale().x;\r\n }\r\n get height() {\r\n return this.collider.localBounds.height * this.getGlobalScale().y;\r\n }\r\n /**\r\n * Gets this actor's rotation taking into account any parent relationships\r\n *\r\n * @returns Rotation angle in radians\r\n */\r\n getGlobalRotation() {\r\n return this.get(TransformComponent).globalRotation;\r\n }\r\n /**\r\n * Gets an actor's world position taking into account parent relationships, scaling, rotation, and translation\r\n *\r\n * @returns Position in world coordinates\r\n */\r\n getGlobalPos() {\r\n return this.get(TransformComponent).globalPos;\r\n }\r\n /**\r\n * Gets the global scale of the Actor\r\n */\r\n getGlobalScale() {\r\n return this.get(TransformComponent).globalScale;\r\n }\r\n // #region Collision\r\n /**\r\n * Tests whether the x/y specified are contained in the actor\r\n * @param x X coordinate to test (in world coordinates)\r\n * @param y Y coordinate to test (in world coordinates)\r\n * @param recurse checks whether the x/y are contained in any child actors (if they exist).\r\n */\r\n contains(x, y, recurse = false) {\r\n const point = vec(x, y);\r\n const collider = this.get(ColliderComponent);\r\n collider.update();\r\n const geom = collider.get();\r\n if (!geom) {\r\n return false;\r\n }\r\n const containment = geom.contains(point);\r\n if (recurse) {\r\n return (containment ||\r\n this.children.some((child) => {\r\n return child.contains(x, y, true);\r\n }));\r\n }\r\n return containment;\r\n }\r\n /**\r\n * Returns true if the two actor.collider's surfaces are less than or equal to the distance specified from each other\r\n * @param actor Actor to test\r\n * @param distance Distance in pixels to test\r\n */\r\n within(actor, distance) {\r\n const collider = this.get(ColliderComponent);\r\n const otherCollider = actor.get(ColliderComponent);\r\n const me = collider.get();\r\n const other = otherCollider.get();\r\n if (me && other) {\r\n return me.getClosestLineBetween(other).getLength() <= distance;\r\n }\r\n return false;\r\n }\r\n // #endregion\r\n // #region Update\r\n /**\r\n * Called by the Engine, updates the state of the actor\r\n * @internal\r\n * @param engine The reference to the current game engine\r\n * @param delta The time elapsed since the last update in milliseconds\r\n */\r\n update(engine, delta) {\r\n this._initialize(engine);\r\n this._preupdate(engine, delta);\r\n this._postupdate(engine, delta);\r\n }\r\n /**\r\n * Safe to override onPreUpdate lifecycle event handler. Synonymous with `.on('preupdate', (evt) =>{...})`\r\n *\r\n * `onPreUpdate` is called directly before an actor is updated.\r\n */\r\n onPreUpdate(_engine, _delta) {\r\n // Override me\r\n }\r\n /**\r\n * Safe to override onPostUpdate lifecycle event handler. Synonymous with `.on('postupdate', (evt) =>{...})`\r\n *\r\n * `onPostUpdate` is called directly after an actor is updated.\r\n */\r\n onPostUpdate(_engine, _delta) {\r\n // Override me\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Internal _preupdate handler for [[onPreUpdate]] lifecycle event\r\n * @internal\r\n */\r\n _preupdate(engine, delta) {\r\n this.emit('preupdate', new PreUpdateEvent(engine, delta, this));\r\n this.onPreUpdate(engine, delta);\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Internal _preupdate handler for [[onPostUpdate]] lifecycle event\r\n * @internal\r\n */\r\n _postupdate(engine, delta) {\r\n this.emit('postupdate', new PreUpdateEvent(engine, delta, this));\r\n this.onPostUpdate(engine, delta);\r\n }\r\n}\r\n// #region Properties\r\n/**\r\n * Set defaults for all Actors\r\n */\r\nActor.defaults = {\r\n anchor: Vector.Half\r\n};\r\n\n;// CONCATENATED MODULE: ./ScreenElement.ts\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Type guard to detect a screen element\r\n */\r\nfunction isScreenElement(actor) {\r\n return actor instanceof ScreenElement;\r\n}\r\n/**\r\n * Helper [[Actor]] primitive for drawing UI's, optimized for UI drawing. Does\r\n * not participate in collisions. Drawn on top of all other actors.\r\n */\r\nclass ScreenElement extends Actor {\r\n constructor(config) {\r\n super({ ...config });\r\n this.get(TransformComponent).coordPlane = CoordPlane.Screen;\r\n this.anchor = vec(0, 0);\r\n this.body.collisionType = CollisionType.PreventCollision;\r\n this.collider.useBoxCollider(this.width, this.height, this.anchor);\r\n }\r\n _initialize(engine) {\r\n this._engine = engine;\r\n super._initialize(engine);\r\n }\r\n contains(x, y, useWorld = true) {\r\n if (useWorld) {\r\n return super.contains(x, y);\r\n }\r\n const coords = this._engine.worldToScreenCoordinates(new Vector(x, y));\r\n return super.contains(coords.x, coords.y);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Timer.ts\n\r\n\r\n/**\r\n * The Excalibur timer hooks into the internal timer and fires callbacks,\r\n * after a certain interval, optionally repeating.\r\n */\r\nclass Timer {\r\n constructor(fcn, interval, repeats, numberOfRepeats, randomRange, random) {\r\n this._logger = Logger.getInstance();\r\n this.id = 0;\r\n this._elapsedTime = 0;\r\n this._totalTimeAlive = 0;\r\n this._running = false;\r\n this._numberOfTicks = 0;\r\n this.interval = 10;\r\n this.repeats = false;\r\n this.maxNumberOfRepeats = -1;\r\n this.randomRange = [0, 0];\r\n this._baseInterval = 10;\r\n this._generateRandomInterval = () => {\r\n return this._baseInterval + this.random.integer(this.randomRange[0], this.randomRange[1]);\r\n };\r\n this._complete = false;\r\n this.scene = null;\r\n if (typeof fcn !== 'function') {\r\n const options = fcn;\r\n fcn = options.fcn;\r\n interval = options.interval;\r\n repeats = options.repeats;\r\n numberOfRepeats = options.numberOfRepeats;\r\n randomRange = options.randomRange;\r\n random = options.random;\r\n }\r\n if (!!numberOfRepeats && numberOfRepeats >= 0) {\r\n this.maxNumberOfRepeats = numberOfRepeats;\r\n if (!repeats) {\r\n throw new Error('repeats must be set to true if numberOfRepeats is set');\r\n }\r\n }\r\n this.id = Timer._MAX_ID++;\r\n this._callbacks = [];\r\n this._baseInterval = this.interval = interval;\r\n if (!!randomRange) {\r\n if (randomRange[0] > randomRange[1]) {\r\n throw new Error('min value must be lower than max value for range');\r\n }\r\n //We use the instance of ex.Random to generate the range\r\n this.random = random !== null && random !== void 0 ? random : new Random();\r\n this.randomRange = randomRange;\r\n this.interval = this._generateRandomInterval();\r\n this.on(() => {\r\n this.interval = this._generateRandomInterval();\r\n });\r\n }\r\n ;\r\n this.repeats = repeats || this.repeats;\r\n if (fcn) {\r\n this.on(fcn);\r\n }\r\n }\r\n get complete() {\r\n return this._complete;\r\n }\r\n /**\r\n * Adds a new callback to be fired after the interval is complete\r\n * @param fcn The callback to be added to the callback list, to be fired after the interval is complete.\r\n */\r\n on(fcn) {\r\n this._callbacks.push(fcn);\r\n }\r\n /**\r\n * Removes a callback from the callback list to be fired after the interval is complete.\r\n * @param fcn The callback to be removed from the callback list, to be fired after the interval is complete.\r\n */\r\n off(fcn) {\r\n const index = this._callbacks.indexOf(fcn);\r\n this._callbacks.splice(index, 1);\r\n }\r\n /**\r\n * Updates the timer after a certain number of milliseconds have elapsed. This is used internally by the engine.\r\n * @param delta Number of elapsed milliseconds since the last update.\r\n */\r\n update(delta) {\r\n if (this._running) {\r\n this._totalTimeAlive += delta;\r\n this._elapsedTime += delta;\r\n if (this.maxNumberOfRepeats > -1 && this._numberOfTicks >= this.maxNumberOfRepeats) {\r\n this._complete = true;\r\n this._running = false;\r\n this._elapsedTime = 0;\r\n }\r\n if (!this.complete && this._elapsedTime >= this.interval) {\r\n this._callbacks.forEach((c) => {\r\n c.call(this);\r\n });\r\n this._numberOfTicks++;\r\n if (this.repeats) {\r\n this._elapsedTime = 0;\r\n }\r\n else {\r\n this._complete = true;\r\n this._running = false;\r\n this._elapsedTime = 0;\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Resets the timer so that it can be reused, and optionally reconfigure the timers interval.\r\n *\r\n * Warning** you may need to call `timer.start()` again if the timer had completed\r\n * @param newInterval If specified, sets a new non-negative interval in milliseconds to refire the callback\r\n * @param newNumberOfRepeats If specified, sets a new non-negative upper limit to the number of time this timer executes\r\n */\r\n reset(newInterval, newNumberOfRepeats) {\r\n if (!!newInterval && newInterval >= 0) {\r\n this._baseInterval = this.interval = newInterval;\r\n }\r\n if (!!this.maxNumberOfRepeats && this.maxNumberOfRepeats >= 0) {\r\n this.maxNumberOfRepeats = newNumberOfRepeats;\r\n if (!this.repeats) {\r\n throw new Error('repeats must be set to true if numberOfRepeats is set');\r\n }\r\n }\r\n this._complete = false;\r\n this._elapsedTime = 0;\r\n this._numberOfTicks = 0;\r\n }\r\n get timesRepeated() {\r\n return this._numberOfTicks;\r\n }\r\n getTimeRunning() {\r\n return this._totalTimeAlive;\r\n }\r\n /**\r\n * @returns milliseconds until the next action callback, if complete will return 0\r\n */\r\n get timeToNextAction() {\r\n if (this.complete) {\r\n return 0;\r\n }\r\n return this.interval - this._elapsedTime;\r\n }\r\n /**\r\n * @returns milliseconds elapsed toward the next action\r\n */\r\n get timeElapsedTowardNextAction() {\r\n return this._elapsedTime;\r\n }\r\n get isRunning() {\r\n return this._running;\r\n }\r\n /**\r\n * Pauses the timer, time will no longer increment towards the next call\r\n */\r\n pause() {\r\n this._running = false;\r\n return this;\r\n }\r\n /**\r\n * Resumes the timer, time will now increment towards the next call.\r\n */\r\n resume() {\r\n this._running = true;\r\n return this;\r\n }\r\n /**\r\n * Starts the timer, if the timer was complete it will restart the timer and reset the elapsed time counter\r\n */\r\n start() {\r\n if (!this.scene) {\r\n this._logger.warn('Cannot start a timer not part of a scene, timer wont start until added');\r\n }\r\n this._running = true;\r\n if (this.complete) {\r\n this._complete = false;\r\n this._elapsedTime = 0;\r\n this._numberOfTicks = 0;\r\n }\r\n return this;\r\n }\r\n /**\r\n * Stops the timer and resets the elapsed time counter towards the next action invocation\r\n */\r\n stop() {\r\n this._running = false;\r\n this._elapsedTime = 0;\r\n this._numberOfTicks = 0;\r\n return this;\r\n }\r\n /**\r\n * Cancels the timer, preventing any further executions.\r\n */\r\n cancel() {\r\n this.pause();\r\n if (this.scene) {\r\n this.scene.cancelTimer(this);\r\n }\r\n }\r\n}\r\nTimer._MAX_ID = 0;\r\n\n;// CONCATENATED MODULE: ./Graphics/ParallaxComponent.ts\n\r\n\r\nclass ParallaxComponent extends Component {\r\n constructor(parallaxFactor) {\r\n super();\r\n this.type = 'ex.parallax';\r\n this.parallaxFactor = vec(1.0, 1.0);\r\n this.parallaxFactor = parallaxFactor !== null && parallaxFactor !== void 0 ? parallaxFactor : this.parallaxFactor;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/DebugGraphicsComponent.ts\n\r\n/**\r\n * Provide arbitrary drawing for the purposes of debugging your game\r\n *\r\n * Will only show when the Engine is set to debug mode [[Engine.showDebug]] or [[Engine.toggleDebug]]\r\n *\r\n */\r\nclass DebugGraphicsComponent extends Component {\r\n constructor(draw, useTransform = true) {\r\n super();\r\n this.draw = draw;\r\n this.useTransform = useTransform;\r\n this.type = 'ex.debuggraphics';\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./TileMap/TileMap.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * The TileMap provides a mechanism for doing flat 2D tiles rendered in a grid.\r\n *\r\n * TileMaps are useful for top down or side scrolling grid oriented games.\r\n */\r\nclass TileMap extends Entity {\r\n /**\r\n * @param options\r\n */\r\n constructor(options) {\r\n var _a, _b;\r\n super(null, options.name);\r\n this._token = 0;\r\n this._onScreenXStart = 0;\r\n this._onScreenXEnd = Number.MAX_VALUE;\r\n this._onScreenYStart = 0;\r\n this._onScreenYEnd = Number.MAX_VALUE;\r\n this.logger = Logger.getInstance();\r\n this.tiles = [];\r\n this._rows = [];\r\n this._cols = [];\r\n this.renderFromTopOfGraphic = false;\r\n this._collidersDirty = true;\r\n this._originalOffsets = new WeakMap();\r\n this.addComponent(new TransformComponent());\r\n this.addComponent(new MotionComponent());\r\n this.addComponent(new BodyComponent({\r\n type: CollisionType.Fixed\r\n }));\r\n this.addComponent(new GraphicsComponent({\r\n onPostDraw: (ctx, delta) => this.draw(ctx, delta)\r\n }));\r\n this.addComponent(new DebugGraphicsComponent((ctx) => this.debug(ctx)));\r\n this.addComponent(new ColliderComponent());\r\n this._graphics = this.get(GraphicsComponent);\r\n this._transform = this.get(TransformComponent);\r\n this._motion = this.get(MotionComponent);\r\n this._collider = this.get(ColliderComponent);\r\n this._composite = this._collider.useCompositeCollider([]);\r\n this._transform.pos = (_a = options.pos) !== null && _a !== void 0 ? _a : Vector.Zero;\r\n this._oldPos = this._transform.pos;\r\n this.renderFromTopOfGraphic = (_b = options.renderFromTopOfGraphic) !== null && _b !== void 0 ? _b : this.renderFromTopOfGraphic;\r\n this.tileWidth = options.tileWidth;\r\n this.tileHeight = options.tileHeight;\r\n this.rows = options.rows;\r\n this.columns = options.columns;\r\n this.tiles = new Array(this.rows * this.columns);\r\n this._rows = new Array(this.rows);\r\n this._cols = new Array(this.columns);\r\n let currentCol = [];\r\n for (let i = 0; i < this.columns; i++) {\r\n for (let j = 0; j < this.rows; j++) {\r\n const cd = new Tile({\r\n x: i,\r\n y: j,\r\n map: this\r\n });\r\n cd.map = this;\r\n this.tiles[i + j * this.columns] = cd;\r\n currentCol.push(cd);\r\n if (!this._rows[j]) {\r\n this._rows[j] = [];\r\n }\r\n this._rows[j].push(cd);\r\n }\r\n this._cols[i] = currentCol;\r\n currentCol = [];\r\n }\r\n this._graphics.localBounds = new BoundingBox({\r\n left: 0,\r\n top: 0,\r\n right: this.columns * this.tileWidth,\r\n bottom: this.rows * this.tileHeight\r\n });\r\n }\r\n flagCollidersDirty() {\r\n this._collidersDirty = true;\r\n }\r\n get x() {\r\n var _a;\r\n return (_a = this._transform.pos.x) !== null && _a !== void 0 ? _a : 0;\r\n }\r\n set x(val) {\r\n var _a;\r\n if ((_a = this._transform) === null || _a === void 0 ? void 0 : _a.pos) {\r\n this.get(TransformComponent).pos = vec(val, this.y);\r\n }\r\n }\r\n get y() {\r\n var _a, _b;\r\n return (_b = (_a = this._transform) === null || _a === void 0 ? void 0 : _a.pos.y) !== null && _b !== void 0 ? _b : 0;\r\n }\r\n set y(val) {\r\n var _a;\r\n if ((_a = this._transform) === null || _a === void 0 ? void 0 : _a.pos) {\r\n this._transform.pos = vec(this.x, val);\r\n }\r\n }\r\n get z() {\r\n var _a;\r\n return (_a = this._transform.z) !== null && _a !== void 0 ? _a : 0;\r\n }\r\n set z(val) {\r\n if (this._transform) {\r\n this._transform.z = val;\r\n }\r\n }\r\n get rotation() {\r\n var _a, _b;\r\n return (_b = (_a = this._transform) === null || _a === void 0 ? void 0 : _a.rotation) !== null && _b !== void 0 ? _b : 0;\r\n }\r\n set rotation(val) {\r\n var _a;\r\n if ((_a = this._transform) === null || _a === void 0 ? void 0 : _a.rotation) {\r\n this._transform.rotation = val;\r\n }\r\n }\r\n get scale() {\r\n var _a, _b;\r\n return (_b = (_a = this._transform) === null || _a === void 0 ? void 0 : _a.scale) !== null && _b !== void 0 ? _b : Vector.One;\r\n }\r\n set scale(val) {\r\n var _a;\r\n if ((_a = this._transform) === null || _a === void 0 ? void 0 : _a.scale) {\r\n this._transform.scale = val;\r\n }\r\n }\r\n get pos() {\r\n return this._transform.pos;\r\n }\r\n set pos(val) {\r\n this._transform.pos = val;\r\n }\r\n get vel() {\r\n return this._motion.vel;\r\n }\r\n set vel(val) {\r\n this._motion.vel = val;\r\n }\r\n on(eventName, handler) {\r\n super.on(eventName, handler);\r\n }\r\n _initialize(engine) {\r\n super._initialize(engine);\r\n }\r\n _getOrSetColliderOriginalOffset(collider) {\r\n if (!this._originalOffsets.has(collider)) {\r\n const originalOffset = collider.offset;\r\n this._originalOffsets.set(collider, originalOffset);\r\n return originalOffset;\r\n }\r\n else {\r\n return this._originalOffsets.get(collider);\r\n }\r\n }\r\n /**\r\n * Tiles colliders based on the solid tiles in the tilemap.\r\n */\r\n _updateColliders() {\r\n this._composite.clearColliders();\r\n const colliders = [];\r\n this._composite = this._collider.useCompositeCollider([]);\r\n let current;\r\n // Bad square tesselation algo\r\n for (let i = 0; i < this.columns; i++) {\r\n // Scan column for colliders\r\n for (let j = 0; j < this.rows; j++) {\r\n // Columns start with a new collider\r\n if (j === 0) {\r\n current = null;\r\n }\r\n const tile = this.tiles[i + j * this.columns];\r\n // Current tile in column is solid build up current collider\r\n if (tile.solid) {\r\n // Use custom collider otherwise bounding box\r\n if (tile.getColliders().length > 0) {\r\n for (const collider of tile.getColliders()) {\r\n const originalOffset = this._getOrSetColliderOriginalOffset(collider);\r\n collider.offset = vec(tile.x * this.tileWidth, tile.y * this.tileHeight).add(originalOffset);\r\n collider.owner = this;\r\n this._composite.addCollider(collider);\r\n }\r\n current = null;\r\n }\r\n else {\r\n if (!current) {\r\n current = tile.bounds;\r\n }\r\n else {\r\n current = current.combine(tile.bounds);\r\n }\r\n }\r\n }\r\n else {\r\n // Not solid skip and cut off the current collider\r\n if (current) {\r\n colliders.push(current);\r\n }\r\n current = null;\r\n }\r\n }\r\n // After a column is complete check to see if it can be merged into the last one\r\n if (current) {\r\n // if previous is the same combine it\r\n const prev = colliders[colliders.length - 1];\r\n if (prev && prev.top === current.top && prev.bottom === current.bottom) {\r\n colliders[colliders.length - 1] = prev.combine(current);\r\n }\r\n else {\r\n // else new collider\r\n colliders.push(current);\r\n }\r\n }\r\n }\r\n for (const c of colliders) {\r\n const collider = Shape.Box(c.width, c.height, Vector.Zero, vec(c.left - this.pos.x, c.top - this.pos.y));\r\n collider.owner = this;\r\n this._composite.addCollider(collider);\r\n }\r\n this._collider.update();\r\n }\r\n /**\r\n * Returns the [[Tile]] by index (row major order)\r\n */\r\n getTileByIndex(index) {\r\n return this.tiles[index];\r\n }\r\n /**\r\n * Returns the [[Tile]] by its x and y integer coordinates\r\n */\r\n getTile(x, y) {\r\n if (x < 0 || y < 0 || x >= this.columns || y >= this.rows) {\r\n return null;\r\n }\r\n return this.tiles[x + y * this.columns];\r\n }\r\n /**\r\n * Returns the [[Tile]] by testing a point in world coordinates,\r\n * returns `null` if no Tile was found.\r\n */\r\n getTileByPoint(point) {\r\n const x = Math.floor((point.x - this.pos.x) / this.tileWidth);\r\n const y = Math.floor((point.y - this.pos.y) / this.tileHeight);\r\n const tile = this.getTile(x, y);\r\n if (x >= 0 && y >= 0 && x < this.columns && y < this.rows && tile) {\r\n return tile;\r\n }\r\n return null;\r\n }\r\n getRows() {\r\n return this._rows;\r\n }\r\n getColumns() {\r\n return this._cols;\r\n }\r\n update(engine, delta) {\r\n this.onPreUpdate(engine, delta);\r\n this.emit('preupdate', new PreUpdateEvent(engine, delta, this));\r\n if (!this._oldPos.equals(this.pos)) {\r\n this.flagCollidersDirty();\r\n for (let i = 0; i < this.tiles.length; i++) {\r\n if (this.tiles[i]) {\r\n this.tiles[i].flagDirty();\r\n }\r\n }\r\n }\r\n if (this._collidersDirty) {\r\n this._collidersDirty = false;\r\n this._updateColliders();\r\n }\r\n this._token++;\r\n const worldBounds = engine.getWorldBounds();\r\n const worldCoordsUpperLeft = vec(worldBounds.left, worldBounds.top);\r\n const worldCoordsLowerRight = vec(worldBounds.right, worldBounds.bottom);\r\n let pos = this.pos;\r\n const maybeParallax = this.get(ParallaxComponent);\r\n let parallaxOffset = Vector.One;\r\n if (maybeParallax) {\r\n const oneMinusFactor = Vector.One.sub(maybeParallax.parallaxFactor);\r\n parallaxOffset = engine.currentScene.camera.pos.scale(oneMinusFactor);\r\n pos = pos.add(parallaxOffset);\r\n }\r\n this._onScreenXStart = Math.max(Math.floor((worldCoordsUpperLeft.x - pos.x) / this.tileWidth) - 2, 0);\r\n this._onScreenYStart = Math.max(Math.floor((worldCoordsUpperLeft.y - pos.y) / this.tileHeight) - 2, 0);\r\n this._onScreenXEnd = Math.max(Math.floor((worldCoordsLowerRight.x - pos.x) / this.tileWidth) + 2, 0);\r\n this._onScreenYEnd = Math.max(Math.floor((worldCoordsLowerRight.y - pos.y) / this.tileHeight) + 2, 0);\r\n // why are we resetting pos?\r\n this._transform.pos = vec(this.x, this.y);\r\n this.onPostUpdate(engine, delta);\r\n this.emit('postupdate', new PostUpdateEvent(engine, delta, this));\r\n }\r\n /**\r\n * Draws the tile map to the screen. Called by the [[Scene]].\r\n * @param ctx ExcaliburGraphicsContext\r\n * @param delta The number of milliseconds since the last draw\r\n */\r\n draw(ctx, delta) {\r\n this.emit('predraw', new PreDrawEvent(ctx, delta, this)); // TODO fix event\r\n let x = this._onScreenXStart;\r\n const xEnd = Math.min(this._onScreenXEnd, this.columns);\r\n let y = this._onScreenYStart;\r\n const yEnd = Math.min(this._onScreenYEnd, this.rows);\r\n let graphics, graphicsIndex, graphicsLen;\r\n for (x; x < xEnd; x++) {\r\n for (y; y < yEnd; y++) {\r\n // get non-negative tile sprites\r\n graphics = this.getTile(x, y).getGraphics();\r\n for (graphicsIndex = 0, graphicsLen = graphics.length; graphicsIndex < graphicsLen; graphicsIndex++) {\r\n // draw sprite, warning if sprite doesn't exist\r\n const graphic = graphics[graphicsIndex];\r\n if (graphic) {\r\n if (hasGraphicsTick(graphic)) {\r\n graphic === null || graphic === void 0 ? void 0 : graphic.tick(delta, this._token);\r\n }\r\n const offsetY = this.renderFromTopOfGraphic ? 0 : (graphic.height - this.tileHeight);\r\n graphic.draw(ctx, x * this.tileWidth, y * this.tileHeight - offsetY);\r\n }\r\n }\r\n }\r\n y = this._onScreenYStart;\r\n }\r\n this.emit('postdraw', new PostDrawEvent(ctx, delta, this));\r\n }\r\n debug(gfx) {\r\n const width = this.tileWidth * this.columns;\r\n const height = this.tileHeight * this.rows;\r\n const pos = Vector.Zero;\r\n for (let r = 0; r < this.rows + 1; r++) {\r\n const yOffset = vec(0, r * this.tileHeight);\r\n gfx.drawLine(pos.add(yOffset), pos.add(vec(width, yOffset.y)), Color.Red, 2);\r\n }\r\n for (let c = 0; c < this.columns + 1; c++) {\r\n const xOffset = vec(c * this.tileWidth, 0);\r\n gfx.drawLine(pos.add(xOffset), pos.add(vec(xOffset.x, height)), Color.Red, 2);\r\n }\r\n const colliders = this._composite.getColliders();\r\n for (const collider of colliders) {\r\n const grayish = Color.Gray;\r\n grayish.a = 0.5;\r\n const bounds = collider.localBounds;\r\n const pos = collider.worldPos.sub(this.pos);\r\n gfx.drawRectangle(pos, bounds.width, bounds.height, grayish);\r\n }\r\n }\r\n}\r\n/**\r\n * TileMap Tile\r\n *\r\n * A light-weight object that occupies a space in a collision map. Generally\r\n * created by a [[TileMap]].\r\n *\r\n * Tiles can draw multiple sprites. Note that the order of drawing is the order\r\n * of the sprites in the array so the last one will be drawn on top. You can\r\n * use transparency to create layers this way.\r\n */\r\nclass Tile extends Entity {\r\n constructor(options) {\r\n var _a, _b;\r\n super();\r\n this._posDirty = false;\r\n this._solid = false;\r\n this._graphics = [];\r\n /**\r\n * Current list of colliders for this tile\r\n */\r\n this._colliders = [];\r\n /**\r\n * Arbitrary data storage per tile, useful for any game specific data\r\n */\r\n this.data = new Map();\r\n this.x = options.x;\r\n this.y = options.y;\r\n this.map = options.map;\r\n this.width = options.map.tileWidth;\r\n this.height = options.map.tileHeight;\r\n this.solid = (_a = options.solid) !== null && _a !== void 0 ? _a : this.solid;\r\n this._graphics = (_b = options.graphics) !== null && _b !== void 0 ? _b : [];\r\n this._recalculate();\r\n }\r\n // private _transform: TransformComponent;\r\n /**\r\n * Return the world position of the top left corner of the tile\r\n */\r\n get pos() {\r\n if (this._posDirty) {\r\n this._recalculate();\r\n this._posDirty = false;\r\n }\r\n return this._pos;\r\n }\r\n /**\r\n * Wether this tile should be treated as solid by the tilemap\r\n */\r\n get solid() {\r\n return this._solid;\r\n }\r\n /**\r\n * Wether this tile should be treated as solid by the tilemap\r\n */\r\n set solid(val) {\r\n var _a;\r\n (_a = this.map) === null || _a === void 0 ? void 0 : _a.flagCollidersDirty();\r\n this._solid = val;\r\n }\r\n /**\r\n * Current list of graphics for this tile\r\n */\r\n getGraphics() {\r\n return this._graphics;\r\n }\r\n /**\r\n * Add another [[Graphic]] to this TileMap tile\r\n * @param graphic\r\n */\r\n addGraphic(graphic) {\r\n this._graphics.push(graphic);\r\n }\r\n /**\r\n * Remove an instance of a [[Graphic]] from this tile\r\n */\r\n removeGraphic(graphic) {\r\n removeItemFromArray(graphic, this._graphics);\r\n }\r\n /**\r\n * Clear all graphics from this tile\r\n */\r\n clearGraphics() {\r\n this._graphics.length = 0;\r\n }\r\n /**\r\n * Returns the list of colliders\r\n */\r\n getColliders() {\r\n return this._colliders;\r\n }\r\n /**\r\n * Adds a custom collider to the [[Tile]] to use instead of it's bounds\r\n *\r\n * If no collider is set but [[Tile.solid]] is set, the tile bounds are used as a collider.\r\n *\r\n * **Note!** the [[Tile.solid]] must be set to true for it to act as a \"fixed\" collider\r\n * @param collider\r\n */\r\n addCollider(collider) {\r\n this._colliders.push(collider);\r\n this.map.flagCollidersDirty();\r\n }\r\n /**\r\n * Removes a collider from the [[Tile]]\r\n * @param collider\r\n */\r\n removeCollider(collider) {\r\n const index = this._colliders.indexOf(collider);\r\n if (index > -1) {\r\n this._colliders.splice(index, 1);\r\n }\r\n this.map.flagCollidersDirty();\r\n }\r\n /**\r\n * Clears all colliders from the [[Tile]]\r\n */\r\n clearColliders() {\r\n this._colliders.length = 0;\r\n this.map.flagCollidersDirty();\r\n }\r\n flagDirty() {\r\n return this._posDirty = true;\r\n }\r\n _recalculate() {\r\n this._pos = this.map.pos.add(vec(this.x * this.map.tileWidth, this.y * this.map.tileHeight));\r\n this._bounds = new BoundingBox(this._pos.x, this._pos.y, this._pos.x + this.width, this._pos.y + this.height);\r\n this._posDirty = false;\r\n }\r\n get bounds() {\r\n if (this._posDirty) {\r\n this._recalculate();\r\n }\r\n return this._bounds;\r\n }\r\n get center() {\r\n if (this._posDirty) {\r\n this._recalculate();\r\n }\r\n return new Vector(this._pos.x + this.width / 2, this._pos.y + this.height / 2);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Camera.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Container to house convenience strategy methods\r\n * @internal\r\n */\r\nclass StrategyContainer {\r\n constructor(camera) {\r\n this.camera = camera;\r\n }\r\n /**\r\n * Creates and adds the [[LockCameraToActorStrategy]] on the current camera.\r\n * @param actor The actor to lock the camera to\r\n */\r\n lockToActor(actor) {\r\n this.camera.addStrategy(new LockCameraToActorStrategy(actor));\r\n }\r\n /**\r\n * Creates and adds the [[LockCameraToActorAxisStrategy]] on the current camera\r\n * @param actor The actor to lock the camera to\r\n * @param axis The axis to follow the actor on\r\n */\r\n lockToActorAxis(actor, axis) {\r\n this.camera.addStrategy(new LockCameraToActorAxisStrategy(actor, axis));\r\n }\r\n /**\r\n * Creates and adds the [[ElasticToActorStrategy]] on the current camera\r\n * If cameraElasticity < cameraFriction < 1.0, the behavior will be a dampened spring that will slowly end at the target without bouncing\r\n * If cameraFriction < cameraElasticity < 1.0, the behavior will be an oscillating spring that will over\r\n * correct and bounce around the target\r\n *\r\n * @param actor Target actor to elastically follow\r\n * @param cameraElasticity [0 - 1.0] The higher the elasticity the more force that will drive the camera towards the target\r\n * @param cameraFriction [0 - 1.0] The higher the friction the more that the camera will resist motion towards the target\r\n */\r\n elasticToActor(actor, cameraElasticity, cameraFriction) {\r\n this.camera.addStrategy(new ElasticToActorStrategy(actor, cameraElasticity, cameraFriction));\r\n }\r\n /**\r\n * Creates and adds the [[RadiusAroundActorStrategy]] on the current camera\r\n * @param actor Target actor to follow when it is \"radius\" pixels away\r\n * @param radius Number of pixels away before the camera will follow\r\n */\r\n radiusAroundActor(actor, radius) {\r\n this.camera.addStrategy(new RadiusAroundActorStrategy(actor, radius));\r\n }\r\n /**\r\n * Creates and adds the [[LimitCameraBoundsStrategy]] on the current camera\r\n * @param box The bounding box to limit the camera to.\r\n */\r\n limitCameraBounds(box) {\r\n this.camera.addStrategy(new LimitCameraBoundsStrategy(box));\r\n }\r\n}\r\n/**\r\n * Camera axis enum\r\n */\r\nvar Axis;\r\n(function (Axis) {\r\n Axis[Axis[\"X\"] = 0] = \"X\";\r\n Axis[Axis[\"Y\"] = 1] = \"Y\";\r\n})(Axis || (Axis = {}));\r\n/**\r\n * Lock a camera to the exact x/y position of an actor.\r\n */\r\nclass LockCameraToActorStrategy {\r\n constructor(target) {\r\n this.target = target;\r\n this.action = (target, _cam, _eng, _delta) => {\r\n const center = target.center;\r\n return center;\r\n };\r\n }\r\n}\r\n/**\r\n * Lock a camera to a specific axis around an actor.\r\n */\r\nclass LockCameraToActorAxisStrategy {\r\n constructor(target, axis) {\r\n this.target = target;\r\n this.axis = axis;\r\n this.action = (target, cam, _eng, _delta) => {\r\n const center = target.center;\r\n const currentFocus = cam.getFocus();\r\n if (this.axis === Axis.X) {\r\n return new Vector(center.x, currentFocus.y);\r\n }\r\n else {\r\n return new Vector(currentFocus.x, center.y);\r\n }\r\n };\r\n }\r\n}\r\n/**\r\n * Using [Hook's law](https://en.wikipedia.org/wiki/Hooke's_law), elastically move the camera towards the target actor.\r\n */\r\nclass ElasticToActorStrategy {\r\n /**\r\n * If cameraElasticity < cameraFriction < 1.0, the behavior will be a dampened spring that will slowly end at the target without bouncing\r\n * If cameraFriction < cameraElasticity < 1.0, the behavior will be an oscillating spring that will over\r\n * correct and bounce around the target\r\n *\r\n * @param target Target actor to elastically follow\r\n * @param cameraElasticity [0 - 1.0] The higher the elasticity the more force that will drive the camera towards the target\r\n * @param cameraFriction [0 - 1.0] The higher the friction the more that the camera will resist motion towards the target\r\n */\r\n constructor(target, cameraElasticity, cameraFriction) {\r\n this.target = target;\r\n this.cameraElasticity = cameraElasticity;\r\n this.cameraFriction = cameraFriction;\r\n this.action = (target, cam, _eng, _delta) => {\r\n const position = target.center;\r\n let focus = cam.getFocus();\r\n let cameraVel = cam.vel.clone();\r\n // Calculate the stretch vector, using the spring equation\r\n // F = kX\r\n // https://en.wikipedia.org/wiki/Hooke's_law\r\n // Apply to the current camera velocity\r\n const stretch = position.sub(focus).scale(this.cameraElasticity); // stretch is X\r\n cameraVel = cameraVel.add(stretch);\r\n // Calculate the friction (-1 to apply a force in the opposition of motion)\r\n // Apply to the current camera velocity\r\n const friction = cameraVel.scale(-1).scale(this.cameraFriction);\r\n cameraVel = cameraVel.add(friction);\r\n // Update position by velocity deltas\r\n focus = focus.add(cameraVel);\r\n return focus;\r\n };\r\n }\r\n}\r\nclass RadiusAroundActorStrategy {\r\n /**\r\n *\r\n * @param target Target actor to follow when it is \"radius\" pixels away\r\n * @param radius Number of pixels away before the camera will follow\r\n */\r\n constructor(target, radius) {\r\n this.target = target;\r\n this.radius = radius;\r\n this.action = (target, cam, _eng, _delta) => {\r\n const position = target.center;\r\n const focus = cam.getFocus();\r\n const direction = position.sub(focus);\r\n const distance = direction.size;\r\n if (distance >= this.radius) {\r\n const offset = distance - this.radius;\r\n return focus.add(direction.normalize().scale(offset));\r\n }\r\n return focus;\r\n };\r\n }\r\n}\r\n/**\r\n * Prevent a camera from going beyond the given camera dimensions.\r\n */\r\nclass LimitCameraBoundsStrategy {\r\n constructor(target) {\r\n this.target = target;\r\n /**\r\n * Useful for limiting the camera to a [[TileMap]]'s dimensions, or a specific area inside the map.\r\n *\r\n * Note that this strategy does not perform any movement by itself.\r\n * It only sets the camera position to within the given bounds when the camera has gone beyond them.\r\n * Thus, it is a good idea to combine it with other camera strategies and set this strategy as the last one.\r\n *\r\n * Make sure that the camera bounds are at least as large as the viewport size.\r\n *\r\n * @param target The bounding box to limit the camera to\r\n */\r\n this.boundSizeChecked = false; // Check and warn only once\r\n this.action = (target, cam, _eng, _delta) => {\r\n const focus = cam.getFocus();\r\n if (!this.boundSizeChecked) {\r\n if (target.bottom - target.top < _eng.drawHeight || target.right - target.left < _eng.drawWidth) {\r\n Logger.getInstance().warn('Camera bounds should not be smaller than the engine viewport');\r\n }\r\n this.boundSizeChecked = true;\r\n }\r\n let focusX = focus.x;\r\n let focusY = focus.y;\r\n if (focus.x < target.left + _eng.halfDrawWidth) {\r\n focusX = target.left + _eng.halfDrawWidth;\r\n }\r\n else if (focus.x > target.right - _eng.halfDrawWidth) {\r\n focusX = target.right - _eng.halfDrawWidth;\r\n }\r\n if (focus.y < target.top + _eng.halfDrawHeight) {\r\n focusY = target.top + _eng.halfDrawHeight;\r\n }\r\n else if (focus.y > target.bottom - _eng.halfDrawHeight) {\r\n focusY = target.bottom - _eng.halfDrawHeight;\r\n }\r\n return vec(focusX, focusY);\r\n };\r\n }\r\n}\r\n/**\r\n * Cameras\r\n *\r\n * [[Camera]] is the base class for all Excalibur cameras. Cameras are used\r\n * to move around your game and set focus. They are used to determine\r\n * what is \"off screen\" and can be used to scale the game.\r\n *\r\n */\r\nclass Camera extends Class {\r\n constructor() {\r\n super(...arguments);\r\n this.transform = AffineMatrix.identity();\r\n this.inverse = AffineMatrix.identity();\r\n this._cameraStrategies = [];\r\n this.strategy = new StrategyContainer(this);\r\n /**\r\n * Get or set current zoom of the camera, defaults to 1\r\n */\r\n this._z = 1;\r\n /**\r\n * Get or set rate of change in zoom, defaults to 0\r\n */\r\n this.dz = 0;\r\n /**\r\n * Get or set zoom acceleration\r\n */\r\n this.az = 0;\r\n /**\r\n * Current rotation of the camera\r\n */\r\n this.rotation = 0;\r\n this._angularVelocity = 0;\r\n /**\r\n * Get or set the camera's position\r\n */\r\n this._posChanged = false;\r\n this._pos = watchAny(Vector.Zero, () => (this._posChanged = true));\r\n /**\r\n * Get or set the camera's velocity\r\n */\r\n this.vel = Vector.Zero;\r\n /**\r\n * Get or set the camera's acceleration\r\n */\r\n this.acc = Vector.Zero;\r\n this._cameraMoving = false;\r\n this._currentLerpTime = 0;\r\n this._lerpDuration = 1000; // 1 second\r\n this._lerpStart = null;\r\n this._lerpEnd = null;\r\n //camera effects\r\n this._isShaking = false;\r\n this._shakeMagnitudeX = 0;\r\n this._shakeMagnitudeY = 0;\r\n this._shakeDuration = 0;\r\n this._elapsedShakeTime = 0;\r\n this._xShake = 0;\r\n this._yShake = 0;\r\n this._isZooming = false;\r\n this._zoomStart = 1;\r\n this._zoomEnd = 1;\r\n this._currentZoomTime = 0;\r\n this._zoomDuration = 0;\r\n this._zoomEasing = EasingFunctions.EaseInOutCubic;\r\n this._easing = EasingFunctions.EaseInOutCubic;\r\n this._halfWidth = 0;\r\n this._halfHeight = 0;\r\n this._viewport = null;\r\n this._isInitialized = false;\r\n }\r\n get zoom() {\r\n return this._z;\r\n }\r\n set zoom(val) {\r\n this._z = val;\r\n if (this._engine) {\r\n this._halfWidth = this._engine.halfDrawWidth;\r\n this._halfHeight = this._engine.halfDrawHeight;\r\n }\r\n }\r\n /**\r\n * Get or set the camera's angular velocity\r\n */\r\n get angularVelocity() {\r\n return this._angularVelocity;\r\n }\r\n set angularVelocity(value) {\r\n this._angularVelocity = value;\r\n }\r\n get pos() {\r\n return this._pos;\r\n }\r\n set pos(vec) {\r\n this._pos = watchAny(vec, () => (this._posChanged = true));\r\n this._posChanged = true;\r\n }\r\n /**\r\n * Get the camera's x position\r\n */\r\n get x() {\r\n return this.pos.x;\r\n }\r\n /**\r\n * Set the camera's x position (cannot be set when following an [[Actor]] or when moving)\r\n */\r\n set x(value) {\r\n if (!this._follow && !this._cameraMoving) {\r\n this.pos = vec(value, this.pos.y);\r\n }\r\n }\r\n /**\r\n * Get the camera's y position\r\n */\r\n get y() {\r\n return this.pos.y;\r\n }\r\n /**\r\n * Set the camera's y position (cannot be set when following an [[Actor]] or when moving)\r\n */\r\n set y(value) {\r\n if (!this._follow && !this._cameraMoving) {\r\n this.pos = vec(this.pos.x, value);\r\n }\r\n }\r\n /**\r\n * Get or set the camera's x velocity\r\n */\r\n get dx() {\r\n return this.vel.x;\r\n }\r\n set dx(value) {\r\n this.vel = vec(value, this.vel.y);\r\n }\r\n /**\r\n * Get or set the camera's y velocity\r\n */\r\n get dy() {\r\n return this.vel.y;\r\n }\r\n set dy(value) {\r\n this.vel = vec(this.vel.x, value);\r\n }\r\n /**\r\n * Get or set the camera's x acceleration\r\n */\r\n get ax() {\r\n return this.acc.x;\r\n }\r\n set ax(value) {\r\n this.acc = vec(value, this.acc.y);\r\n }\r\n /**\r\n * Get or set the camera's y acceleration\r\n */\r\n get ay() {\r\n return this.acc.y;\r\n }\r\n set ay(value) {\r\n this.acc = vec(this.acc.x, value);\r\n }\r\n /**\r\n * Returns the focal point of the camera, a new point giving the x and y position of the camera\r\n */\r\n getFocus() {\r\n return this.pos;\r\n }\r\n /**\r\n * This moves the camera focal point to the specified position using specified easing function. Cannot move when following an Actor.\r\n *\r\n * @param pos The target position to move to\r\n * @param duration The duration in milliseconds the move should last\r\n * @param [easingFn] An optional easing function ([[ex.EasingFunctions.EaseInOutCubic]] by default)\r\n * @returns A [[Promise]] that resolves when movement is finished, including if it's interrupted.\r\n * The [[Promise]] value is the [[Vector]] of the target position. It will be rejected if a move cannot be made.\r\n */\r\n move(pos, duration, easingFn = EasingFunctions.EaseInOutCubic) {\r\n if (typeof easingFn !== 'function') {\r\n throw 'Please specify an EasingFunction';\r\n }\r\n // cannot move when following an actor\r\n if (this._follow) {\r\n return Promise.reject(pos);\r\n }\r\n // resolve existing promise, if any\r\n if (this._lerpPromise && this._lerpResolve) {\r\n this._lerpResolve(pos);\r\n }\r\n this._lerpPromise = new Promise((resolve) => {\r\n this._lerpResolve = resolve;\r\n });\r\n this._lerpStart = this.getFocus().clone();\r\n this._lerpDuration = duration;\r\n this._lerpEnd = pos;\r\n this._currentLerpTime = 0;\r\n this._cameraMoving = true;\r\n this._easing = easingFn;\r\n return this._lerpPromise;\r\n }\r\n /**\r\n * Sets the camera to shake at the specified magnitudes for the specified duration\r\n * @param magnitudeX The x magnitude of the shake\r\n * @param magnitudeY The y magnitude of the shake\r\n * @param duration The duration of the shake in milliseconds\r\n */\r\n shake(magnitudeX, magnitudeY, duration) {\r\n this._isShaking = true;\r\n this._shakeMagnitudeX = magnitudeX;\r\n this._shakeMagnitudeY = magnitudeY;\r\n this._shakeDuration = duration;\r\n }\r\n /**\r\n * Zooms the camera in or out by the specified scale over the specified duration.\r\n * If no duration is specified, it take effect immediately.\r\n * @param scale The scale of the zoom\r\n * @param duration The duration of the zoom in milliseconds\r\n */\r\n zoomOverTime(scale, duration = 0, easingFn = EasingFunctions.EaseInOutCubic) {\r\n this._zoomPromise = new Promise((resolve) => {\r\n this._zoomResolve = resolve;\r\n });\r\n if (duration) {\r\n this._isZooming = true;\r\n this._zoomEasing = easingFn;\r\n this._currentZoomTime = 0;\r\n this._zoomDuration = duration;\r\n this._zoomStart = this.zoom;\r\n this._zoomEnd = scale;\r\n }\r\n else {\r\n this._isZooming = false;\r\n this.zoom = scale;\r\n return Promise.resolve(true);\r\n }\r\n return this._zoomPromise;\r\n }\r\n /**\r\n * Gets the bounding box of the viewport of this camera in world coordinates\r\n */\r\n get viewport() {\r\n if (this._viewport) {\r\n return this._viewport;\r\n }\r\n return new BoundingBox(0, 0, 0, 0);\r\n }\r\n /**\r\n * Adds a new camera strategy to this camera\r\n * @param cameraStrategy Instance of an [[CameraStrategy]]\r\n */\r\n addStrategy(cameraStrategy) {\r\n this._cameraStrategies.push(cameraStrategy);\r\n }\r\n /**\r\n * Removes a camera strategy by reference\r\n * @param cameraStrategy Instance of an [[CameraStrategy]]\r\n */\r\n removeStrategy(cameraStrategy) {\r\n removeItemFromArray(cameraStrategy, this._cameraStrategies);\r\n }\r\n /**\r\n * Clears all camera strategies from the camera\r\n */\r\n clearAllStrategies() {\r\n this._cameraStrategies.length = 0;\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Internal _preupdate handler for [[onPreUpdate]] lifecycle event\r\n * @internal\r\n */\r\n _preupdate(engine, delta) {\r\n this.emit('preupdate', new PreUpdateEvent(engine, delta, this));\r\n this.onPreUpdate(engine, delta);\r\n }\r\n /**\r\n * Safe to override onPreUpdate lifecycle event handler. Synonymous with `.on('preupdate', (evt) =>{...})`\r\n *\r\n * `onPreUpdate` is called directly before a scene is updated.\r\n */\r\n onPreUpdate(_engine, _delta) {\r\n // Overridable\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Internal _preupdate handler for [[onPostUpdate]] lifecycle event\r\n * @internal\r\n */\r\n _postupdate(engine, delta) {\r\n this.emit('postupdate', new PostUpdateEvent(engine, delta, this));\r\n this.onPostUpdate(engine, delta);\r\n }\r\n /**\r\n * Safe to override onPostUpdate lifecycle event handler. Synonymous with `.on('preupdate', (evt) =>{...})`\r\n *\r\n * `onPostUpdate` is called directly after a scene is updated.\r\n */\r\n onPostUpdate(_engine, _delta) {\r\n // Overridable\r\n }\r\n get isInitialized() {\r\n return this._isInitialized;\r\n }\r\n _initialize(_engine) {\r\n if (!this.isInitialized) {\r\n this._engine = _engine;\r\n this._screen = _engine.screen;\r\n const currentRes = this._screen.resolution;\r\n let center = vec(currentRes.width / 2, currentRes.height / 2);\r\n if (!this._engine.loadingComplete) {\r\n // If there was a loading screen, we peek the configured resolution\r\n const res = this._screen.peekResolution();\r\n if (res) {\r\n center = vec(res.width / 2, res.height / 2);\r\n }\r\n }\r\n this._halfWidth = center.x;\r\n this._halfHeight = center.y;\r\n // If the user has not set the camera pos, apply default center screen position\r\n if (!this._posChanged) {\r\n this.pos = center;\r\n }\r\n // First frame bootstrap\r\n // Ensure camera tx is correct\r\n // Run update twice to ensure properties are init'd\r\n this.updateTransform();\r\n // Run strategies for first frame\r\n this.runStrategies(_engine, _engine.clock.elapsed());\r\n // Setup the first frame viewport\r\n this.updateViewport();\r\n // It's important to update the camera after strategies\r\n // This prevents jitter\r\n this.updateTransform();\r\n this.onInitialize(_engine);\r\n super.emit('initialize', new InitializeEvent(_engine, this));\r\n this._isInitialized = true;\r\n }\r\n }\r\n /**\r\n * Safe to override onPostUpdate lifecycle event handler. Synonymous with `.on('preupdate', (evt) =>{...})`\r\n *\r\n * `onPostUpdate` is called directly after a scene is updated.\r\n */\r\n onInitialize(_engine) {\r\n // Overridable\r\n }\r\n on(eventName, handler) {\r\n super.on(eventName, handler);\r\n }\r\n off(eventName, handler) {\r\n super.off(eventName, handler);\r\n }\r\n once(eventName, handler) {\r\n super.once(eventName, handler);\r\n }\r\n runStrategies(engine, delta) {\r\n for (const s of this._cameraStrategies) {\r\n this.pos = s.action.call(s, s.target, this, engine, delta);\r\n }\r\n }\r\n updateViewport() {\r\n // recalc viewport\r\n this._viewport = new BoundingBox(this.x - this._halfWidth, this.y - this._halfHeight, this.x + this._halfWidth, this.y + this._halfHeight);\r\n }\r\n update(_engine, delta) {\r\n this._initialize(_engine);\r\n this._preupdate(_engine, delta);\r\n // Update placements based on linear algebra\r\n this.pos = this.pos.add(this.vel.scale(delta / 1000));\r\n this.zoom += (this.dz * delta) / 1000;\r\n this.vel = this.vel.add(this.acc.scale(delta / 1000));\r\n this.dz += (this.az * delta) / 1000;\r\n this.rotation += (this.angularVelocity * delta) / 1000;\r\n if (this._isZooming) {\r\n if (this._currentZoomTime < this._zoomDuration) {\r\n const zoomEasing = this._zoomEasing;\r\n const newZoom = zoomEasing(this._currentZoomTime, this._zoomStart, this._zoomEnd, this._zoomDuration);\r\n this.zoom = newZoom;\r\n this._currentZoomTime += delta;\r\n }\r\n else {\r\n this._isZooming = false;\r\n this.zoom = this._zoomEnd;\r\n this._currentZoomTime = 0;\r\n this._zoomResolve(true);\r\n }\r\n }\r\n if (this._cameraMoving) {\r\n if (this._currentLerpTime < this._lerpDuration) {\r\n const moveEasing = EasingFunctions.CreateVectorEasingFunction(this._easing);\r\n const lerpPoint = moveEasing(this._currentLerpTime, this._lerpStart, this._lerpEnd, this._lerpDuration);\r\n this.pos = lerpPoint;\r\n this._currentLerpTime += delta;\r\n }\r\n else {\r\n this.pos = this._lerpEnd;\r\n const end = this._lerpEnd.clone();\r\n this._lerpStart = null;\r\n this._lerpEnd = null;\r\n this._currentLerpTime = 0;\r\n this._cameraMoving = false;\r\n // Order matters here, resolve should be last so any chain promises have a clean slate\r\n this._lerpResolve(end);\r\n }\r\n }\r\n if (this._isDoneShaking()) {\r\n this._isShaking = false;\r\n this._elapsedShakeTime = 0;\r\n this._shakeMagnitudeX = 0;\r\n this._shakeMagnitudeY = 0;\r\n this._shakeDuration = 0;\r\n this._xShake = 0;\r\n this._yShake = 0;\r\n }\r\n else {\r\n this._elapsedShakeTime += delta;\r\n this._xShake = ((Math.random() * this._shakeMagnitudeX) | 0) + 1;\r\n this._yShake = ((Math.random() * this._shakeMagnitudeY) | 0) + 1;\r\n }\r\n this.runStrategies(_engine, delta);\r\n this.updateViewport();\r\n // It's important to update the camera after strategies\r\n // This prevents jitter\r\n this.updateTransform();\r\n this._postupdate(_engine, delta);\r\n }\r\n /**\r\n * Applies the relevant transformations to the game canvas to \"move\" or apply effects to the Camera\r\n * @param ctx Canvas context to apply transformations\r\n */\r\n draw(ctx) {\r\n ctx.multiply(this.transform);\r\n }\r\n updateTransform() {\r\n // center the camera\r\n const newCanvasWidth = this._screen.resolution.width / this.zoom;\r\n const newCanvasHeight = this._screen.resolution.height / this.zoom;\r\n const cameraPos = vec(-this.x + newCanvasWidth / 2 + this._xShake, -this.y + newCanvasHeight / 2 + this._yShake);\r\n // Calculate camera transform\r\n this.transform.reset();\r\n this.transform.scale(this.zoom, this.zoom);\r\n this.transform.translate(cameraPos.x, cameraPos.y);\r\n this.transform.inverse(this.inverse);\r\n }\r\n _isDoneShaking() {\r\n return !this._isShaking || this._elapsedShakeTime >= this._shakeDuration;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Trigger.ts\n\r\n\r\n\r\n\r\n\r\nconst triggerDefaults = {\r\n pos: Vector.Zero,\r\n width: 10,\r\n height: 10,\r\n visible: false,\r\n action: () => {\r\n return;\r\n },\r\n filter: () => true,\r\n repeat: -1\r\n};\r\n/**\r\n * Triggers are a method of firing arbitrary code on collision. These are useful\r\n * as 'buttons', 'switches', or to trigger effects in a game. By default triggers\r\n * are invisible, and can only be seen when [[Trigger.visible]] is set to `true`.\r\n */\r\nclass Trigger extends Actor {\r\n /**\r\n *\r\n * @param opts Trigger options\r\n */\r\n constructor(opts) {\r\n super({ x: opts.pos.x, y: opts.pos.y, width: opts.width, height: opts.height });\r\n /**\r\n * Action to fire when triggered by collision\r\n */\r\n this.action = () => {\r\n return;\r\n };\r\n /**\r\n * Filter to add additional granularity to action dispatch, if a filter is specified the action will only fire when\r\n * filter return true for the collided actor.\r\n */\r\n this.filter = () => true;\r\n /**\r\n * Number of times to repeat before killing the trigger,\r\n */\r\n this.repeat = -1;\r\n opts = {\r\n ...triggerDefaults,\r\n ...opts\r\n };\r\n this.filter = opts.filter || this.filter;\r\n this.repeat = opts.repeat || this.repeat;\r\n this.action = opts.action || this.action;\r\n if (opts.target) {\r\n this.target = opts.target;\r\n }\r\n this.graphics.visible = opts.visible;\r\n this.body.collisionType = CollisionType.Passive;\r\n this.eventDispatcher = new EventDispatcher();\r\n this.events.on('collisionstart', (evt) => {\r\n if (this.filter(evt.other)) {\r\n this.emit('enter', new EnterTriggerEvent(this, evt.other));\r\n this._dispatchAction();\r\n // remove trigger if its done, -1 repeat forever\r\n if (this.repeat === 0) {\r\n this.kill();\r\n }\r\n }\r\n });\r\n this.events.on('collisionend', (evt) => {\r\n if (this.filter(evt.other)) {\r\n this.emit('exit', new ExitTriggerEvent(this, evt.other));\r\n }\r\n });\r\n }\r\n set target(target) {\r\n this._target = target;\r\n this.filter = (actor) => actor === target;\r\n }\r\n get target() {\r\n return this._target;\r\n }\r\n _initialize(engine) {\r\n super._initialize(engine);\r\n }\r\n _dispatchAction() {\r\n if (this.repeat !== 0) {\r\n this.action.call(this);\r\n this.repeat--;\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./EntityComponentSystem/System.ts\n/**\r\n * Enum that determines whether to run the system in the update or draw phase\r\n */\r\nvar SystemType;\r\n(function (SystemType) {\r\n SystemType[\"Update\"] = \"update\";\r\n SystemType[\"Draw\"] = \"draw\";\r\n})(SystemType || (SystemType = {}));\r\n/**\r\n * An Excalibur [[System]] that updates entities of certain types.\r\n * Systems are scene specific\r\n *\r\n * Excalibur Systems currently require at least 1 Component type to operated\r\n *\r\n * Multiple types are declared as a type union\r\n * For example:\r\n *\r\n * ```typescript\r\n * class MySystem extends System {\r\n * public readonly types = ['a', 'b'] as const;\r\n * public readonly systemType = SystemType.Update;\r\n * public update(entities: Entity) {\r\n * ...\r\n * }\r\n * }\r\n * ```\r\n */\r\nclass System {\r\n constructor() {\r\n /**\r\n * System can execute in priority order, by default all systems are priority 0. Lower values indicated higher priority.\r\n * For a system to execute before all other a lower priority value (-1 for example) must be set.\r\n * For a system to execute after all other a higher priority value (10 for example) must be set.\r\n */\r\n this.priority = 0;\r\n }\r\n /**\r\n * Systems observe when entities match their types or no longer match their types, override\r\n * @param _entityAddedOrRemoved\r\n */\r\n notify(_entityAddedOrRemoved) {\r\n // Override me\r\n }\r\n}\r\n/**\r\n * An [[Entity]] with [[Component]] types that matches a [[System]] types exists in the current scene.\r\n */\r\nclass AddedEntity {\r\n constructor(data) {\r\n this.data = data;\r\n this.type = 'Entity Added';\r\n }\r\n}\r\n/**\r\n * Type guard to check for AddedEntity messages\r\n * @param x\r\n */\r\nfunction isAddedSystemEntity(x) {\r\n return !!x && x.type === 'Entity Added';\r\n}\r\n/**\r\n * An [[Entity]] with [[Component]] types that no longer matches a [[System]] types exists in the current scene.\r\n */\r\nclass RemovedEntity {\r\n constructor(data) {\r\n this.data = data;\r\n this.type = 'Entity Removed';\r\n }\r\n}\r\n/**\r\n * type guard to check for the RemovedEntity message\r\n */\r\nfunction isRemoveSystemEntity(x) {\r\n return !!x && x.type === 'Entity Removed';\r\n}\r\n\n;// CONCATENATED MODULE: ./EntityComponentSystem/EntityManager.ts\n\r\n\r\n// Add/Remove entities and components\r\nclass EntityManager {\r\n constructor(_world) {\r\n this._world = _world;\r\n this.entities = [];\r\n this._entityIndex = {};\r\n this._entitiesToRemove = [];\r\n }\r\n /**\r\n * Runs the entity lifecycle\r\n * @param _context\r\n */\r\n updateEntities(_context, elapsed) {\r\n for (const entity of this.entities) {\r\n // TODO is this right?\r\n entity.update(_context.engine, elapsed);\r\n if (!entity.active) {\r\n this.removeEntity(entity);\r\n }\r\n }\r\n }\r\n findEntitiesForRemoval() {\r\n for (const entity of this.entities) {\r\n if (!entity.active) {\r\n this.removeEntity(entity);\r\n }\r\n }\r\n }\r\n /**\r\n * EntityManager observes changes on entities\r\n * @param message\r\n */\r\n notify(message) {\r\n if (isAddedComponent(message)) {\r\n // we don't need the component, it's already on the entity\r\n this._world.queryManager.addEntity(message.data.entity);\r\n }\r\n if (isRemovedComponent(message)) {\r\n this._world.queryManager.removeComponent(message.data.entity, message.data.component);\r\n }\r\n }\r\n /**\r\n * Adds an entity to be tracked by the EntityManager\r\n * @param entity\r\n */\r\n addEntity(entity) {\r\n entity.active = true;\r\n if (entity && !this._entityIndex[entity.id]) {\r\n this._entityIndex[entity.id] = entity;\r\n this.entities.push(entity);\r\n this._world.queryManager.addEntity(entity);\r\n entity.componentAdded$.register(this);\r\n entity.componentRemoved$.register(this);\r\n // if entity has children\r\n entity.children.forEach((c) => this.addEntity(c));\r\n entity.childrenAdded$.register({\r\n notify: (e) => {\r\n this.addEntity(e);\r\n }\r\n });\r\n entity.childrenRemoved$.register({\r\n notify: (e) => {\r\n this.removeEntity(e, false);\r\n }\r\n });\r\n }\r\n }\r\n removeEntity(idOrEntity, deferred = true) {\r\n var _a;\r\n let id = 0;\r\n if (idOrEntity instanceof Entity) {\r\n id = idOrEntity.id;\r\n }\r\n else {\r\n id = idOrEntity;\r\n }\r\n const entity = this._entityIndex[id];\r\n if (entity && entity.active) {\r\n entity.kill();\r\n }\r\n if (entity && deferred) {\r\n this._entitiesToRemove.push(entity);\r\n return;\r\n }\r\n delete this._entityIndex[id];\r\n if (entity) {\r\n removeItemFromArray(entity, this.entities);\r\n this._world.queryManager.removeEntity(entity);\r\n entity.componentAdded$.unregister(this);\r\n entity.componentRemoved$.unregister(this);\r\n // if entity has children\r\n entity.children.forEach((c) => this.removeEntity(c, deferred));\r\n entity.childrenAdded$.clear();\r\n entity.childrenRemoved$.clear();\r\n // stats\r\n if ((_a = this._world.context) === null || _a === void 0 ? void 0 : _a.engine) {\r\n this._world.context.engine.stats.currFrame.actors.killed++;\r\n }\r\n }\r\n }\r\n processEntityRemovals() {\r\n for (const entity of this._entitiesToRemove) {\r\n if (entity.active) {\r\n continue;\r\n }\r\n this.removeEntity(entity, false);\r\n }\r\n }\r\n processComponentRemovals() {\r\n for (const entity of this.entities) {\r\n entity.processComponentRemoval();\r\n }\r\n }\r\n getById(id) {\r\n return this._entityIndex[id];\r\n }\r\n getByName(name) {\r\n return this.entities.filter(e => e.name === name);\r\n }\r\n clear() {\r\n for (const entity of this.entities) {\r\n this.removeEntity(entity);\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./EntityComponentSystem/Util.ts\nconst buildTypeKey = (types) => {\r\n const key = [...types].sort((a, b) => a.localeCompare(b)).join('+');\r\n return key;\r\n};\r\n\n;// CONCATENATED MODULE: ./EntityComponentSystem/Query.ts\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Represents query for entities that match a list of types that is cached and observable\r\n *\r\n * Queries can be strongly typed by supplying a type union in the optional type parameter\r\n * ```typescript\r\n * const queryAB = new ex.Query(['A', 'B']);\r\n * ```\r\n */\r\nclass Query extends Observable {\r\n constructor(types) {\r\n super();\r\n this._entities = [];\r\n if (types[0] instanceof Function) {\r\n this.types = types.map(T => (new T).type);\r\n }\r\n else {\r\n this.types = types;\r\n }\r\n }\r\n get key() {\r\n if (this._key) {\r\n return this._key;\r\n }\r\n return (this._key = buildTypeKey(this.types));\r\n }\r\n /**\r\n * Returns a list of entities that match the query\r\n *\r\n * @param sort Optional sorting function to sort entities returned from the query\r\n */\r\n getEntities(sort) {\r\n if (sort) {\r\n this._entities.sort(sort);\r\n }\r\n return this._entities;\r\n }\r\n /**\r\n * Add an entity to the query, will only be added if the entity matches the query types\r\n * @param entity\r\n */\r\n addEntity(entity) {\r\n if (!contains(this._entities, entity) && this.matches(entity)) {\r\n this._entities.push(entity);\r\n this.notifyAll(new AddedEntity(entity));\r\n }\r\n }\r\n /**\r\n * If the entity is part of the query it will be removed regardless of types\r\n * @param entity\r\n */\r\n removeEntity(entity) {\r\n if (removeItemFromArray(entity, this._entities)) {\r\n this.notifyAll(new RemovedEntity(entity));\r\n }\r\n }\r\n /**\r\n * Removes all entities and observers from the query\r\n */\r\n clear() {\r\n this._entities.length = 0;\r\n for (const observer of this.observers) {\r\n this.unregister(observer);\r\n }\r\n }\r\n matches(typesOrEntity) {\r\n let types = [];\r\n if (typesOrEntity instanceof Entity) {\r\n types = typesOrEntity.types;\r\n }\r\n else {\r\n types = typesOrEntity;\r\n }\r\n let matches = true;\r\n for (const type of this.types) {\r\n matches = matches && types.indexOf(type) > -1;\r\n if (!matches) {\r\n return false;\r\n }\r\n }\r\n return matches;\r\n }\r\n contain(type) {\r\n return this.types.indexOf(type) > -1;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./EntityComponentSystem/QueryManager.ts\n\r\n\r\n/**\r\n * The query manager is responsible for updating all queries when entities/components change\r\n */\r\nclass QueryManager {\r\n constructor(_world) {\r\n this._world = _world;\r\n this._queries = {};\r\n }\r\n /**\r\n * Adds a query to the manager and populates with any entities that match\r\n * @param query\r\n */\r\n _addQuery(query) {\r\n this._queries[buildTypeKey(query.types)] = query;\r\n for (const entity of this._world.entityManager.entities) {\r\n query.addEntity(entity);\r\n }\r\n }\r\n /**\r\n * Removes the query if there are no observers left\r\n * @param query\r\n */\r\n maybeRemoveQuery(query) {\r\n if (query.observers.length === 0) {\r\n query.clear();\r\n delete this._queries[buildTypeKey(query.types)];\r\n }\r\n }\r\n /**\r\n * Adds the entity to any matching query in the query manage\r\n * @param entity\r\n */\r\n addEntity(entity) {\r\n for (const queryType in this._queries) {\r\n if (this._queries[queryType]) {\r\n this._queries[queryType].addEntity(entity);\r\n }\r\n }\r\n }\r\n /**\r\n * Removes an entity from queries if the removed component disqualifies it\r\n * @param entity\r\n * @param component\r\n */\r\n removeComponent(entity, component) {\r\n for (const queryType in this._queries) {\r\n // If the component being removed from an entity is a part of a query,\r\n // it is now disqualified from that query, remove it\r\n if (this._queries[queryType].contain(component.type)) {\r\n this._queries[queryType].removeEntity(entity);\r\n }\r\n }\r\n }\r\n /**\r\n * Removes an entity from all queries it is currently a part of\r\n * @param entity\r\n */\r\n removeEntity(entity) {\r\n for (const queryType in this._queries) {\r\n this._queries[queryType].removeEntity(entity);\r\n }\r\n }\r\n /**\r\n * Creates a populated query and returns, if the query already exists that will be returned instead of a new instance\r\n * @param types\r\n */\r\n createQuery(types) {\r\n const maybeExistingQuery = this.getQuery(types);\r\n if (maybeExistingQuery) {\r\n return maybeExistingQuery;\r\n }\r\n const query = new Query(types);\r\n this._addQuery(query);\r\n return query;\r\n }\r\n /**\r\n * Retrieves an existing query by types if it exists otherwise returns null\r\n * @param types\r\n */\r\n getQuery(types) {\r\n const key = buildTypeKey(types);\r\n if (this._queries[key]) {\r\n return this._queries[key];\r\n }\r\n return null;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./EntityComponentSystem/SystemManager.ts\n\r\n/**\r\n * The SystemManager is responsible for keeping track of all systems in a scene.\r\n * Systems are scene specific\r\n */\r\nclass SystemManager {\r\n constructor(_world) {\r\n this._world = _world;\r\n /**\r\n * List of systems, to add a new system call [[SystemManager.addSystem]]\r\n */\r\n this.systems = [];\r\n this.initialized = false;\r\n }\r\n /**\r\n * Get a system registered in the manager by type\r\n * @param systemType\r\n */\r\n get(systemType) {\r\n return this.systems.find((s) => s instanceof systemType);\r\n }\r\n /**\r\n * Adds a system to the manager, it will now be updated every frame\r\n * @param system\r\n */\r\n addSystem(system) {\r\n // validate system has types\r\n if (!system.types || system.types.length === 0) {\r\n throw new Error(`Attempted to add a System without any types`);\r\n }\r\n const query = this._world.queryManager.createQuery(system.types);\r\n this.systems.push(system);\r\n this.systems.sort((a, b) => a.priority - b.priority);\r\n query.register(system);\r\n if (this.initialized && system.initialize) {\r\n system.initialize(this._world.context);\r\n }\r\n }\r\n /**\r\n * Removes a system from the manager, it will no longer be updated\r\n * @param system\r\n */\r\n removeSystem(system) {\r\n removeItemFromArray(system, this.systems);\r\n const query = this._world.queryManager.getQuery(system.types);\r\n if (query) {\r\n query.unregister(system);\r\n this._world.queryManager.maybeRemoveQuery(query);\r\n }\r\n }\r\n /**\r\n * Initialize all systems in the manager\r\n *\r\n * Systems added after initialize() will be initialized on add\r\n */\r\n initialize() {\r\n if (!this.initialized) {\r\n this.initialized = true;\r\n for (const s of this.systems) {\r\n if (s.initialize) {\r\n s.initialize(this._world.context);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Updates all systems\r\n * @param type whether this is an update or draw system\r\n * @param context context reference\r\n * @param delta time in milliseconds\r\n */\r\n updateSystems(type, context, delta) {\r\n const systems = this.systems.filter((s) => s.systemType === type);\r\n for (const s of systems) {\r\n if (s.preupdate) {\r\n s.preupdate(context, delta);\r\n }\r\n }\r\n for (const s of systems) {\r\n // Get entities that match the system types, pre-sort\r\n const entities = this._world.queryManager.getQuery(s.types).getEntities(s.sort);\r\n // Initialize entities if needed\r\n if (context instanceof Scene) {\r\n for (const entity of entities) {\r\n entity._initialize(context === null || context === void 0 ? void 0 : context.engine);\r\n }\r\n }\r\n s.update(entities, delta);\r\n }\r\n for (const s of systems) {\r\n if (s.postupdate) {\r\n s.postupdate(context, delta);\r\n }\r\n }\r\n }\r\n clear() {\r\n for (const system of this.systems) {\r\n this.removeSystem(system);\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./EntityComponentSystem/World.ts\n\r\n\r\n\r\n\r\n\r\n/**\r\n * The World is a self-contained entity component system for a particular context.\r\n */\r\nclass World {\r\n /**\r\n * The context type is passed to the system updates\r\n * @param context\r\n */\r\n constructor(context) {\r\n this.context = context;\r\n this.queryManager = new QueryManager(this);\r\n this.entityManager = new EntityManager(this);\r\n this.systemManager = new SystemManager(this);\r\n }\r\n /**\r\n * Update systems by type and time elapsed in milliseconds\r\n */\r\n update(type, delta) {\r\n if (type === SystemType.Update) {\r\n this.entityManager.updateEntities(this.context, delta);\r\n }\r\n this.systemManager.updateSystems(type, this.context, delta);\r\n this.entityManager.findEntitiesForRemoval();\r\n this.entityManager.processComponentRemovals();\r\n this.entityManager.processEntityRemovals();\r\n }\r\n add(entityOrSystem) {\r\n if (entityOrSystem instanceof Entity) {\r\n this.entityManager.addEntity(entityOrSystem);\r\n }\r\n if (entityOrSystem instanceof System) {\r\n this.systemManager.addSystem(entityOrSystem);\r\n }\r\n }\r\n remove(entityOrSystem, deferred = true) {\r\n if (entityOrSystem instanceof Entity) {\r\n this.entityManager.removeEntity(entityOrSystem, deferred);\r\n }\r\n if (entityOrSystem instanceof System) {\r\n this.systemManager.removeSystem(entityOrSystem);\r\n }\r\n }\r\n clearEntities() {\r\n this.entityManager.clear();\r\n }\r\n clearSystems() {\r\n this.systemManager.clear();\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Integrator.ts\n\r\nclass EulerIntegrator {\r\n static integrate(transform, motion, totalAcc, elapsedMs) {\r\n const seconds = elapsedMs / 1000;\r\n // This code looks a little wild, but it's to avoid creating any new Vector instances\r\n // integration is done in a tight loop so this is key to avoid GC'ing\r\n motion.vel.addEqual(totalAcc.scale(seconds, EulerIntegrator._ACC));\r\n transform.pos\r\n .add(motion.vel.scale(seconds, EulerIntegrator._VEL), EulerIntegrator._POS)\r\n .addEqual(totalAcc.scale(0.5 * seconds * seconds, EulerIntegrator._VEL_ACC));\r\n motion.angularVelocity += motion.torque * (1.0 / motion.inertia) * seconds;\r\n const rotation = transform.rotation + motion.angularVelocity * seconds;\r\n transform.scale.add(motion.scaleFactor.scale(seconds, this._SCALE_FACTOR), EulerIntegrator._SCALE);\r\n const tx = transform.get();\r\n tx.setTransform(EulerIntegrator._POS, rotation, EulerIntegrator._SCALE);\r\n }\r\n}\r\n// Scratch vectors to avoid allocation\r\nEulerIntegrator._POS = new Vector(0, 0);\r\nEulerIntegrator._SCALE = new Vector(1, 1);\r\nEulerIntegrator._ACC = new Vector(0, 0);\r\nEulerIntegrator._VEL = new Vector(0, 0);\r\nEulerIntegrator._VEL_ACC = new Vector(0, 0);\r\nEulerIntegrator._SCALE_FACTOR = new Vector(0, 0);\r\n\n;// CONCATENATED MODULE: ./Collision/MotionSystem.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass MotionSystem extends System {\r\n constructor() {\r\n super(...arguments);\r\n this.types = ['ex.transform', 'ex.motion'];\r\n this.systemType = SystemType.Update;\r\n this.priority = -1;\r\n }\r\n update(entities, elapsedMs) {\r\n let transform;\r\n let motion;\r\n for (let i = 0; i < entities.length; i++) {\r\n transform = entities[i].get(TransformComponent);\r\n motion = entities[i].get(MotionComponent);\r\n const optionalBody = entities[i].get(BodyComponent);\r\n if (optionalBody === null || optionalBody === void 0 ? void 0 : optionalBody.sleeping) {\r\n continue;\r\n }\r\n const totalAcc = motion.acc.clone();\r\n if ((optionalBody === null || optionalBody === void 0 ? void 0 : optionalBody.collisionType) === CollisionType.Active && (optionalBody === null || optionalBody === void 0 ? void 0 : optionalBody.useGravity)) {\r\n totalAcc.addEqual(Physics.gravity);\r\n }\r\n optionalBody === null || optionalBody === void 0 ? void 0 : optionalBody.captureOldTransform();\r\n // Update transform and motion based on Euler linear algebra\r\n EulerIntegrator.integrate(transform, motion, totalAcc, elapsedMs);\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Solver/ArcadeSolver.ts\n\r\n\r\n\r\n\r\n/**\r\n * ArcadeSolver is the default in Excalibur. It solves collisions so that there is no overlap between contacts,\r\n * and negates velocity along the collision normal.\r\n *\r\n * This is usually the type of collisions used for 2D games that don't need a more realistic collision simulation.\r\n *\r\n */\r\nclass ArcadeSolver {\r\n constructor() {\r\n this.directionMap = new Map();\r\n this.distanceMap = new Map();\r\n }\r\n solve(contacts) {\r\n // Events and init\r\n this.preSolve(contacts);\r\n // Remove any canceled contacts\r\n contacts = contacts.filter(c => !c.isCanceled());\r\n // Sort contacts by distance to avoid artifacts with seams\r\n // It's important to solve in a specific order\r\n contacts.sort((a, b) => {\r\n const aDist = this.distanceMap.get(a.id);\r\n const bDist = this.distanceMap.get(b.id);\r\n return aDist - bDist;\r\n });\r\n for (const contact of contacts) {\r\n // Solve position first in arcade\r\n this.solvePosition(contact);\r\n // Solve velocity second in arcade\r\n this.solveVelocity(contact);\r\n }\r\n // Events and any contact house-keeping the solver needs\r\n this.postSolve(contacts);\r\n return contacts;\r\n }\r\n preSolve(contacts) {\r\n for (const contact of contacts) {\r\n const side = Side.fromDirection(contact.mtv);\r\n const mtv = contact.mtv.negate();\r\n const distance = contact.colliderA.worldPos.squareDistance(contact.colliderB.worldPos);\r\n this.distanceMap.set(contact.id, distance);\r\n // Publish collision events on both participants\r\n contact.colliderA.events.emit('precollision', new PreCollisionEvent(contact.colliderA, contact.colliderB, side, mtv));\r\n contact.colliderB.events.emit('precollision', new PreCollisionEvent(contact.colliderB, contact.colliderA, Side.getOpposite(side), mtv.negate()));\r\n }\r\n }\r\n postSolve(contacts) {\r\n var _a, _b;\r\n for (const contact of contacts) {\r\n if (contact.isCanceled()) {\r\n continue;\r\n }\r\n const colliderA = contact.colliderA;\r\n const colliderB = contact.colliderB;\r\n const bodyA = (_a = colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);\r\n const bodyB = (_b = colliderB.owner) === null || _b === void 0 ? void 0 : _b.get(BodyComponent);\r\n if (bodyA && bodyB) {\r\n if (bodyA.collisionType === CollisionType.Passive || bodyB.collisionType === CollisionType.Passive) {\r\n continue;\r\n }\r\n }\r\n const side = Side.fromDirection(contact.mtv);\r\n const mtv = contact.mtv.negate();\r\n // Publish collision events on both participants\r\n contact.colliderA.events.emit('postcollision', new PostCollisionEvent(contact.colliderA, contact.colliderB, side, mtv));\r\n contact.colliderB.events.emit('postcollision', new PostCollisionEvent(contact.colliderB, contact.colliderA, Side.getOpposite(side), mtv.negate()));\r\n }\r\n }\r\n solvePosition(contact) {\r\n var _a, _b;\r\n const epsilon = .0001;\r\n // if bounds no longer intersect skip to the next\r\n // this removes jitter from overlapping/stacked solid tiles or a wall of solid tiles\r\n if (!contact.colliderA.bounds.overlaps(contact.colliderB.bounds, epsilon)) {\r\n // Cancel the contact to prevent and solving\r\n contact.cancel();\r\n return;\r\n }\r\n if (Math.abs(contact.mtv.x) < epsilon && Math.abs(contact.mtv.y) < epsilon) {\r\n // Cancel near 0 mtv collisions\r\n contact.cancel();\r\n return;\r\n }\r\n let mtv = contact.mtv;\r\n const colliderA = contact.colliderA;\r\n const colliderB = contact.colliderB;\r\n const bodyA = (_a = colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);\r\n const bodyB = (_b = colliderB.owner) === null || _b === void 0 ? void 0 : _b.get(BodyComponent);\r\n if (bodyA && bodyB) {\r\n if (bodyA.collisionType === CollisionType.Passive || bodyB.collisionType === CollisionType.Passive) {\r\n return;\r\n }\r\n if (bodyA.collisionType === CollisionType.Active && bodyB.collisionType === CollisionType.Active) {\r\n // split overlaps if both are Active\r\n mtv = mtv.scale(0.5);\r\n }\r\n // Resolve overlaps\r\n if (bodyA.collisionType === CollisionType.Active) {\r\n bodyA.globalPos.x -= mtv.x;\r\n bodyA.globalPos.y -= mtv.y;\r\n colliderA.update(bodyA.transform.get());\r\n }\r\n if (bodyB.collisionType === CollisionType.Active) {\r\n bodyB.globalPos.x += mtv.x;\r\n bodyB.globalPos.y += mtv.y;\r\n colliderB.update(bodyB.transform.get());\r\n }\r\n }\r\n }\r\n solveVelocity(contact) {\r\n var _a, _b;\r\n if (contact.isCanceled()) {\r\n return;\r\n }\r\n const colliderA = contact.colliderA;\r\n const colliderB = contact.colliderB;\r\n const bodyA = (_a = colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);\r\n const bodyB = (_b = colliderB.owner) === null || _b === void 0 ? void 0 : _b.get(BodyComponent);\r\n if (bodyA && bodyB) {\r\n if (bodyA.collisionType === CollisionType.Passive || bodyB.collisionType === CollisionType.Passive) {\r\n return;\r\n }\r\n const normal = contact.normal;\r\n const opposite = normal.negate();\r\n if (bodyA.collisionType === CollisionType.Active) {\r\n // only adjust velocity if the contact normal is opposite to the current velocity\r\n // this avoids catching edges on a platform when sliding off\r\n if (bodyA.vel.normalize().dot(opposite) < 0) {\r\n // Cancel out velocity opposite direction of collision normal\r\n const velAdj = normal.scale(normal.dot(bodyA.vel.negate()));\r\n bodyA.vel = bodyA.vel.add(velAdj);\r\n }\r\n }\r\n if (bodyB.collisionType === CollisionType.Active) {\r\n // only adjust velocity if the contact normal is opposite to the current velocity\r\n // this avoids catching edges on a platform\r\n if (bodyB.vel.normalize().dot(normal) < 0) {\r\n const velAdj = opposite.scale(opposite.dot(bodyB.vel.negate()));\r\n bodyB.vel = bodyB.vel.add(velAdj);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Solver/ContactConstraintPoint.ts\n\r\n\r\n/**\r\n * Holds information about contact points, meant to be reused over multiple frames of contact\r\n */\r\nclass ContactConstraintPoint {\r\n constructor(point, local, contact) {\r\n this.point = point;\r\n this.local = local;\r\n this.contact = contact;\r\n /**\r\n * Impulse accumulated over time in normal direction\r\n */\r\n this.normalImpulse = 0;\r\n /**\r\n * Impulse accumulated over time in the tangent direction\r\n */\r\n this.tangentImpulse = 0;\r\n /**\r\n * Effective mass seen in the normal direction\r\n */\r\n this.normalMass = 0;\r\n /**\r\n * Effective mass seen in the tangent direction\r\n */\r\n this.tangentMass = 0;\r\n /**\r\n * Direction from center of mass of bodyA to contact point\r\n */\r\n this.aToContact = new Vector(0, 0);\r\n /**\r\n * Direction from center of mass of bodyB to contact point\r\n */\r\n this.bToContact = new Vector(0, 0);\r\n /**\r\n * Original contact velocity combined with bounciness\r\n */\r\n this.originalVelocityAndRestitution = 0;\r\n this.update();\r\n }\r\n /**\r\n * Updates the contact information\r\n */\r\n update() {\r\n var _a, _b;\r\n const bodyA = (_a = this.contact.colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);\r\n const bodyB = (_b = this.contact.colliderB.owner) === null || _b === void 0 ? void 0 : _b.get(BodyComponent);\r\n if (bodyA && bodyB) {\r\n const normal = this.contact.normal;\r\n const tangent = this.contact.tangent;\r\n this.aToContact = this.point.sub(bodyA.globalPos);\r\n this.bToContact = this.point.sub(bodyB.globalPos);\r\n const aToContactNormal = this.aToContact.cross(normal);\r\n const bToContactNormal = this.bToContact.cross(normal);\r\n this.normalMass =\r\n bodyA.inverseMass +\r\n bodyB.inverseMass +\r\n bodyA.inverseInertia * aToContactNormal * aToContactNormal +\r\n bodyB.inverseInertia * bToContactNormal * bToContactNormal;\r\n const aToContactTangent = this.aToContact.cross(tangent);\r\n const bToContactTangent = this.bToContact.cross(tangent);\r\n this.tangentMass =\r\n bodyA.inverseMass +\r\n bodyB.inverseMass +\r\n bodyA.inverseInertia * aToContactTangent * aToContactTangent +\r\n bodyB.inverseInertia * bToContactTangent * bToContactTangent;\r\n }\r\n return this;\r\n }\r\n /**\r\n * Returns the relative velocity between bodyA and bodyB\r\n */\r\n getRelativeVelocity() {\r\n var _a, _b;\r\n const bodyA = (_a = this.contact.colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);\r\n const bodyB = (_b = this.contact.colliderB.owner) === null || _b === void 0 ? void 0 : _b.get(BodyComponent);\r\n if (bodyA && bodyB) {\r\n // Relative velocity in linear terms\r\n // Angular to linear velocity formula -> omega = velocity/radius so omega x radius = velocity\r\n const velA = bodyA.vel.add(Vector.cross(bodyA.angularVelocity, this.aToContact));\r\n const velB = bodyB.vel.add(Vector.cross(bodyB.angularVelocity, this.bToContact));\r\n return velB.sub(velA);\r\n }\r\n return Vector.Zero;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Solver/RealisticSolver.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass RealisticSolver {\r\n constructor() {\r\n this.lastFrameContacts = new Map();\r\n // map contact id to contact points\r\n this.idToContactConstraint = new Map();\r\n }\r\n getContactConstraints(id) {\r\n var _a;\r\n return (_a = this.idToContactConstraint.get(id)) !== null && _a !== void 0 ? _a : [];\r\n }\r\n solve(contacts) {\r\n // Events and init\r\n this.preSolve(contacts);\r\n // Remove any canceled contacts\r\n contacts = contacts.filter(c => !c.isCanceled());\r\n // Solve velocity first\r\n this.solveVelocity(contacts);\r\n // Solve position last because non-overlap is the most important\r\n this.solvePosition(contacts);\r\n // Events and any contact house-keeping the solver needs\r\n this.postSolve(contacts);\r\n return contacts;\r\n }\r\n preSolve(contacts) {\r\n var _a, _b, _c;\r\n for (const contact of contacts) {\r\n // Publish collision events on both participants\r\n const side = Side.fromDirection(contact.mtv);\r\n contact.colliderA.events.emit('precollision', new PreCollisionEvent(contact.colliderA, contact.colliderB, side, contact.mtv));\r\n contact.colliderA.events.emit('beforecollisionresolve', new CollisionPreSolveEvent(contact.colliderA, contact.colliderB, side, contact.mtv, contact));\r\n contact.colliderB.events.emit('precollision', new PreCollisionEvent(contact.colliderB, contact.colliderA, Side.getOpposite(side), contact.mtv.negate()));\r\n contact.colliderB.events.emit('beforecollisionresolve', new CollisionPreSolveEvent(contact.colliderB, contact.colliderA, Side.getOpposite(side), contact.mtv.negate(), contact));\r\n // Match awake state for sleeping\r\n contact.matchAwake();\r\n }\r\n // Keep track of contacts that done\r\n const finishedContactIds = Array.from(this.idToContactConstraint.keys());\r\n for (const contact of contacts) {\r\n // Remove all current contacts that are not done\r\n const index = finishedContactIds.indexOf(contact.id);\r\n if (index > -1) {\r\n finishedContactIds.splice(index, 1);\r\n }\r\n const contactPoints = (_a = this.idToContactConstraint.get(contact.id)) !== null && _a !== void 0 ? _a : [];\r\n let pointIndex = 0;\r\n const bodyA = contact.colliderA.owner.get(BodyComponent);\r\n const bodyB = contact.colliderB.owner.get(BodyComponent);\r\n if (bodyA && bodyB) {\r\n for (const point of contact.points) {\r\n const normal = contact.normal;\r\n const tangent = contact.tangent;\r\n const aToContact = point.sub(bodyA.globalPos);\r\n const bToContact = point.sub(bodyB.globalPos);\r\n const aToContactNormal = aToContact.cross(normal);\r\n const bToContactNormal = bToContact.cross(normal);\r\n const normalMass = bodyA.inverseMass +\r\n bodyB.inverseMass +\r\n bodyA.inverseInertia * aToContactNormal * aToContactNormal +\r\n bodyB.inverseInertia * bToContactNormal * bToContactNormal;\r\n const aToContactTangent = aToContact.cross(tangent);\r\n const bToContactTangent = bToContact.cross(tangent);\r\n const tangentMass = bodyA.inverseMass +\r\n bodyB.inverseMass +\r\n bodyA.inverseInertia * aToContactTangent * aToContactTangent +\r\n bodyB.inverseInertia * bToContactTangent * bToContactTangent;\r\n // Preserve normal/tangent impulse by re-using the contact point if it's close\r\n if (contactPoints[pointIndex] && ((_c = (_b = contactPoints[pointIndex]) === null || _b === void 0 ? void 0 : _b.point) === null || _c === void 0 ? void 0 : _c.squareDistance(point)) < 4) {\r\n contactPoints[pointIndex].point = point;\r\n contactPoints[pointIndex].local = contact.localPoints[pointIndex];\r\n }\r\n else {\r\n // new contact if it's not close or doesn't exist\r\n contactPoints[pointIndex] = new ContactConstraintPoint(point, contact.localPoints[pointIndex], contact);\r\n }\r\n // Update contact point calculations\r\n contactPoints[pointIndex].aToContact = aToContact;\r\n contactPoints[pointIndex].bToContact = bToContact;\r\n contactPoints[pointIndex].normalMass = 1.0 / normalMass;\r\n contactPoints[pointIndex].tangentMass = 1.0 / tangentMass;\r\n // Calculate relative velocity before solving to accurately do restitution\r\n const restitution = bodyA.bounciness > bodyB.bounciness ? bodyA.bounciness : bodyB.bounciness;\r\n const relativeVelocity = contact.normal.dot(contactPoints[pointIndex].getRelativeVelocity());\r\n contactPoints[pointIndex].originalVelocityAndRestitution = 0;\r\n if (relativeVelocity < -0.1) { // TODO what's a good threshold here?\r\n contactPoints[pointIndex].originalVelocityAndRestitution = -restitution * relativeVelocity;\r\n }\r\n pointIndex++;\r\n }\r\n }\r\n this.idToContactConstraint.set(contact.id, contactPoints);\r\n }\r\n // Clean up any contacts that did not occur last frame\r\n for (const id of finishedContactIds) {\r\n this.idToContactConstraint.delete(id);\r\n }\r\n // Warm contacts with accumulated impulse\r\n // Useful for tall stacks\r\n if (Physics.warmStart) {\r\n this.warmStart(contacts);\r\n }\r\n else {\r\n for (const contact of contacts) {\r\n const contactPoints = this.getContactConstraints(contact.id);\r\n for (const point of contactPoints) {\r\n point.normalImpulse = 0;\r\n point.tangentImpulse = 0;\r\n }\r\n }\r\n }\r\n }\r\n postSolve(contacts) {\r\n for (const contact of contacts) {\r\n const bodyA = contact.colliderA.owner.get(BodyComponent);\r\n const bodyB = contact.colliderB.owner.get(BodyComponent);\r\n if (bodyA && bodyB) {\r\n // Skip post solve for active+passive collisions\r\n if (bodyA.collisionType === CollisionType.Passive || bodyB.collisionType === CollisionType.Passive) {\r\n continue;\r\n }\r\n // Update motion values for sleeping\r\n bodyA.updateMotion();\r\n bodyB.updateMotion();\r\n }\r\n // Publish collision events on both participants\r\n const side = Side.fromDirection(contact.mtv);\r\n contact.colliderA.events.emit('postcollision', new PostCollisionEvent(contact.colliderA, contact.colliderB, side, contact.mtv));\r\n contact.colliderA.events.emit('aftercollisionresolve', new CollisionPostSolveEvent(contact.colliderA, contact.colliderB, side, contact.mtv, contact));\r\n contact.colliderB.events.emit('postcollision', new PostCollisionEvent(contact.colliderB, contact.colliderA, Side.getOpposite(side), contact.mtv.negate()));\r\n contact.colliderB.events.emit('aftercollisionresolve', new CollisionPostSolveEvent(contact.colliderB, contact.colliderA, Side.getOpposite(side), contact.mtv.negate(), contact));\r\n }\r\n // Store contacts\r\n this.lastFrameContacts.clear();\r\n for (const c of contacts) {\r\n this.lastFrameContacts.set(c.id, c);\r\n }\r\n }\r\n /**\r\n * Warm up body's based on previous frame contact points\r\n * @param contacts\r\n */\r\n warmStart(contacts) {\r\n var _a, _b, _c;\r\n for (const contact of contacts) {\r\n const bodyA = (_a = contact.colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);\r\n const bodyB = (_b = contact.colliderB.owner) === null || _b === void 0 ? void 0 : _b.get(BodyComponent);\r\n if (bodyA && bodyB) {\r\n const contactPoints = (_c = this.idToContactConstraint.get(contact.id)) !== null && _c !== void 0 ? _c : [];\r\n for (const point of contactPoints) {\r\n if (Physics.warmStart) {\r\n const normalImpulse = contact.normal.scale(point.normalImpulse);\r\n const tangentImpulse = contact.tangent.scale(point.tangentImpulse);\r\n const impulse = normalImpulse.add(tangentImpulse);\r\n bodyA.applyImpulse(point.point, impulse.negate());\r\n bodyB.applyImpulse(point.point, impulse);\r\n }\r\n else {\r\n point.normalImpulse = 0;\r\n point.tangentImpulse = 0;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Iteratively solve the position overlap constraint\r\n * @param contacts\r\n */\r\n solvePosition(contacts) {\r\n var _a, _b, _c;\r\n for (let i = 0; i < Physics.positionIterations; i++) {\r\n for (const contact of contacts) {\r\n const bodyA = (_a = contact.colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);\r\n const bodyB = (_b = contact.colliderB.owner) === null || _b === void 0 ? void 0 : _b.get(BodyComponent);\r\n if (bodyA && bodyB) {\r\n // Skip solving active+passive\r\n if (bodyA.collisionType === CollisionType.Passive || bodyB.collisionType === CollisionType.Passive) {\r\n continue;\r\n }\r\n const constraints = (_c = this.idToContactConstraint.get(contact.id)) !== null && _c !== void 0 ? _c : [];\r\n for (const point of constraints) {\r\n const normal = contact.normal;\r\n const separation = CollisionJumpTable.FindContactSeparation(contact, point.local);\r\n const steeringConstant = Physics.steeringFactor; //0.2;\r\n const maxCorrection = -5;\r\n const slop = Physics.slop; //1;\r\n // Clamp to avoid over-correction\r\n // Remember that we are shooting for 0 overlap in the end\r\n const steeringForce = clamp(steeringConstant * (separation + slop), maxCorrection, 0);\r\n const impulse = normal.scale(-steeringForce * point.normalMass);\r\n // This is a pseudo impulse, meaning we aren't doing a real impulse calculation\r\n // We adjust position and rotation instead of doing the velocity\r\n if (bodyA.collisionType === CollisionType.Active) {\r\n // TODO make applyPseudoImpulse function?\r\n const impulseForce = impulse.negate().scale(bodyA.inverseMass);\r\n if (bodyA.limitDegreeOfFreedom.includes(DegreeOfFreedom.X)) {\r\n impulseForce.x = 0;\r\n }\r\n if (bodyA.limitDegreeOfFreedom.includes(DegreeOfFreedom.Y)) {\r\n impulseForce.y = 0;\r\n }\r\n bodyA.globalPos = bodyA.globalPos.add(impulseForce);\r\n if (!bodyA.limitDegreeOfFreedom.includes(DegreeOfFreedom.Rotation)) {\r\n bodyA.rotation -= point.aToContact.cross(impulse) * bodyA.inverseInertia;\r\n }\r\n }\r\n if (bodyB.collisionType === CollisionType.Active) {\r\n const impulseForce = impulse.scale(bodyB.inverseMass);\r\n if (bodyB.limitDegreeOfFreedom.includes(DegreeOfFreedom.X)) {\r\n impulseForce.x = 0;\r\n }\r\n if (bodyB.limitDegreeOfFreedom.includes(DegreeOfFreedom.Y)) {\r\n impulseForce.y = 0;\r\n }\r\n bodyB.globalPos = bodyB.globalPos.add(impulseForce);\r\n if (!bodyB.limitDegreeOfFreedom.includes(DegreeOfFreedom.Rotation)) {\r\n bodyB.rotation += point.bToContact.cross(impulse) * bodyB.inverseInertia;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n solveVelocity(contacts) {\r\n var _a, _b, _c;\r\n for (let i = 0; i < Physics.velocityIterations; i++) {\r\n for (const contact of contacts) {\r\n const bodyA = (_a = contact.colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);\r\n const bodyB = (_b = contact.colliderB.owner) === null || _b === void 0 ? void 0 : _b.get(BodyComponent);\r\n if (bodyA && bodyB) {\r\n // Skip solving active+passive\r\n if (bodyA.collisionType === CollisionType.Passive || bodyB.collisionType === CollisionType.Passive) {\r\n continue;\r\n }\r\n const friction = Math.min(bodyA.friction, bodyB.friction);\r\n const constraints = (_c = this.idToContactConstraint.get(contact.id)) !== null && _c !== void 0 ? _c : [];\r\n // Friction constraint\r\n for (const point of constraints) {\r\n const relativeVelocity = point.getRelativeVelocity();\r\n // Negate velocity in tangent direction to simulate friction\r\n const tangentVelocity = -relativeVelocity.dot(contact.tangent);\r\n let impulseDelta = tangentVelocity * point.tangentMass;\r\n // Clamping based in Erin Catto's GDC 2006 talk\r\n // Correct clamping https://github.com/erincatto/box2d-lite/blob/master/docs/GDC2006_Catto_Erin_PhysicsTutorial.pdf\r\n // Accumulated fiction impulse is always between -uMaxFriction < dT < uMaxFriction\r\n // But deltas can vary\r\n const maxFriction = friction * point.normalImpulse;\r\n const newImpulse = clamp(point.tangentImpulse + impulseDelta, -maxFriction, maxFriction);\r\n impulseDelta = newImpulse - point.tangentImpulse;\r\n point.tangentImpulse = newImpulse;\r\n const impulse = contact.tangent.scale(impulseDelta);\r\n bodyA.applyImpulse(point.point, impulse.negate());\r\n bodyB.applyImpulse(point.point, impulse);\r\n }\r\n // Bounce constraint\r\n for (const point of constraints) {\r\n // Need to recalc relative velocity because the previous step could have changed vel\r\n const relativeVelocity = point.getRelativeVelocity();\r\n // Compute impulse in normal direction\r\n const normalVelocity = relativeVelocity.dot(contact.normal);\r\n // Per Erin it is a mistake to apply the restitution inside the iteration\r\n // From Erin Catto's Box2D we keep original contact velocity and adjust by small impulses\r\n let impulseDelta = -point.normalMass * (normalVelocity - point.originalVelocityAndRestitution);\r\n // Clamping based in Erin Catto's GDC 2014 talk\r\n // Accumulated impulse stored in the contact is always positive (dV > 0)\r\n // But deltas can be negative\r\n const newImpulse = Math.max(point.normalImpulse + impulseDelta, 0);\r\n impulseDelta = newImpulse - point.normalImpulse;\r\n point.normalImpulse = newImpulse;\r\n const impulse = contact.normal.scale(impulseDelta);\r\n bodyA.applyImpulse(point.point, impulse.negate());\r\n bodyB.applyImpulse(point.point, impulse);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/CollisionSystem.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass CollisionSystem extends System {\r\n constructor() {\r\n super(...arguments);\r\n this.types = ['ex.transform', 'ex.motion', 'ex.collider'];\r\n this.systemType = SystemType.Update;\r\n this.priority = -1;\r\n this._realisticSolver = new RealisticSolver();\r\n this._arcadeSolver = new ArcadeSolver();\r\n this._processor = new DynamicTreeCollisionProcessor();\r\n this._lastFrameContacts = new Map();\r\n this._currentFrameContacts = new Map();\r\n this._trackCollider = (c) => this._processor.track(c);\r\n this._untrackCollider = (c) => this._processor.untrack(c);\r\n }\r\n notify(message) {\r\n if (isAddedSystemEntity(message)) {\r\n const colliderComponent = message.data.get(ColliderComponent);\r\n colliderComponent.$colliderAdded.subscribe(this._trackCollider);\r\n colliderComponent.$colliderRemoved.subscribe(this._untrackCollider);\r\n const collider = colliderComponent.get();\r\n if (collider) {\r\n this._processor.track(collider);\r\n }\r\n }\r\n else {\r\n const colliderComponent = message.data.get(ColliderComponent);\r\n const collider = colliderComponent.get();\r\n if (colliderComponent && collider) {\r\n this._processor.untrack(collider);\r\n }\r\n }\r\n }\r\n initialize(scene) {\r\n this._engine = scene.engine;\r\n }\r\n update(entities, elapsedMs) {\r\n var _a, _b, _c, _d;\r\n if (!Physics.enabled) {\r\n return;\r\n }\r\n // Collect up all the colliders and update them\r\n let colliders = [];\r\n for (const entity of entities) {\r\n const colliderComp = entity.get(ColliderComponent);\r\n const collider = colliderComp === null || colliderComp === void 0 ? void 0 : colliderComp.get();\r\n if (colliderComp && ((_a = colliderComp.owner) === null || _a === void 0 ? void 0 : _a.active) && collider) {\r\n colliderComp.update();\r\n if (collider instanceof CompositeCollider) {\r\n const compositeColliders = collider.getColliders();\r\n colliders = colliders.concat(compositeColliders);\r\n }\r\n else {\r\n colliders.push(collider);\r\n }\r\n }\r\n }\r\n // Update the spatial partitioning data structures\r\n // TODO if collider invalid it will break the processor\r\n // TODO rename \"update\" to something more specific\r\n this._processor.update(colliders);\r\n // Run broadphase on all colliders and locates potential collisions\r\n const pairs = this._processor.broadphase(colliders, elapsedMs);\r\n this._currentFrameContacts.clear();\r\n // Given possible pairs find actual contacts\r\n let contacts = this._processor.narrowphase(pairs, (_d = (_c = (_b = this._engine) === null || _b === void 0 ? void 0 : _b.debug) === null || _c === void 0 ? void 0 : _c.stats) === null || _d === void 0 ? void 0 : _d.currFrame);\r\n const solver = this.getSolver();\r\n // Solve, this resolves the position/velocity so entities aren't overlapping\r\n contacts = solver.solve(contacts);\r\n // Record contacts for start/end\r\n for (const contact of contacts) {\r\n // Process composite ids, things with the same composite id are treated as the same collider for start/end\r\n const index = contact.id.indexOf('|');\r\n if (index > 0) {\r\n const compositeId = contact.id.substring(index + 1);\r\n this._currentFrameContacts.set(compositeId, contact);\r\n }\r\n else {\r\n this._currentFrameContacts.set(contact.id, contact);\r\n }\r\n }\r\n // Emit contact start/end events\r\n this.runContactStartEnd();\r\n // reset the last frame cache\r\n this._lastFrameContacts.clear();\r\n // Keep track of collisions contacts that have started or ended\r\n this._lastFrameContacts = new Map(this._currentFrameContacts);\r\n }\r\n getSolver() {\r\n return Physics.collisionResolutionStrategy === CollisionResolutionStrategy.Realistic ? this._realisticSolver : this._arcadeSolver;\r\n }\r\n debug(ex) {\r\n this._processor.debug(ex);\r\n }\r\n runContactStartEnd() {\r\n // Composite collider collisions may have a duplicate id because we want to treat those as a singular start/end\r\n for (const [id, c] of this._currentFrameContacts) {\r\n // find all new contacts\r\n if (!this._lastFrameContacts.has(id)) {\r\n const colliderA = c.colliderA;\r\n const colliderB = c.colliderB;\r\n colliderA.events.emit('collisionstart', new CollisionStartEvent(colliderA, colliderB, c));\r\n colliderA.events.emit('contactstart', new ContactStartEvent(colliderA, colliderB, c));\r\n colliderB.events.emit('collisionstart', new CollisionStartEvent(colliderB, colliderA, c));\r\n colliderB.events.emit('contactstart', new ContactStartEvent(colliderB, colliderA, c));\r\n }\r\n }\r\n // find all contacts that have ceased\r\n for (const [id, c] of this._lastFrameContacts) {\r\n if (!this._currentFrameContacts.has(id)) {\r\n const colliderA = c.colliderA;\r\n const colliderB = c.colliderB;\r\n colliderA.events.emit('collisionend', new CollisionEndEvent(colliderA, colliderB));\r\n colliderA.events.emit('contactend', new ContactEndEvent(colliderA, colliderB));\r\n colliderB.events.emit('collisionend', new CollisionEndEvent(colliderB, colliderA));\r\n colliderB.events.emit('contactend', new ContactEndEvent(colliderB, colliderA));\r\n }\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Animation.ts\n\r\n\r\n\r\n\r\nvar AnimationDirection;\r\n(function (AnimationDirection) {\r\n /**\r\n * Animation is playing forwards\r\n */\r\n AnimationDirection[\"Forward\"] = \"forward\";\r\n /**\r\n * Animation is play backwards\r\n */\r\n AnimationDirection[\"Backward\"] = \"backward\";\r\n})(AnimationDirection || (AnimationDirection = {}));\r\nvar AnimationStrategy;\r\n(function (AnimationStrategy) {\r\n /**\r\n * Animation ends without displaying anything\r\n */\r\n AnimationStrategy[\"End\"] = \"end\";\r\n /**\r\n * Animation loops to the first frame after the last frame\r\n */\r\n AnimationStrategy[\"Loop\"] = \"loop\";\r\n /**\r\n * Animation plays to the last frame, then backwards to the first frame, then repeats\r\n */\r\n AnimationStrategy[\"PingPong\"] = \"pingpong\";\r\n /**\r\n * Animation ends stopping on the last frame\r\n */\r\n AnimationStrategy[\"Freeze\"] = \"freeze\";\r\n})(AnimationStrategy || (AnimationStrategy = {}));\r\n/**\r\n * Create an Animation given a list of [[Frame|frames]] in [[AnimationOptions]]\r\n *\r\n * To create an Animation from a [[SpriteSheet]], use [[Animation.fromSpriteSheet]]\r\n */\r\nclass Animation extends Graphic {\r\n constructor(options) {\r\n var _a, _b;\r\n super(options);\r\n this.events = new EventDispatcher(); // TODO replace with new Emitter\r\n this.frames = [];\r\n this.strategy = AnimationStrategy.Loop;\r\n this.frameDuration = 100;\r\n this.timeScale = 1;\r\n this._idempotencyToken = -1;\r\n this._firstTick = true;\r\n this._currentFrame = 0;\r\n this._timeLeftInFrame = 0;\r\n this._direction = 1; // TODO only used in ping-pong\r\n this._done = false;\r\n this._playing = true;\r\n this._reversed = false;\r\n this.frames = options.frames;\r\n this.strategy = (_a = options.strategy) !== null && _a !== void 0 ? _a : this.strategy;\r\n this.frameDuration = options.totalDuration ? options.totalDuration / this.frames.length : (_b = options.frameDuration) !== null && _b !== void 0 ? _b : this.frameDuration;\r\n if (options.reverse) {\r\n this.reverse();\r\n }\r\n this.goToFrame(0);\r\n }\r\n clone() {\r\n return new Animation({\r\n frames: this.frames.map((f) => ({ ...f })),\r\n frameDuration: this.frameDuration,\r\n reverse: this._reversed,\r\n strategy: this.strategy,\r\n ...this.cloneGraphicOptions()\r\n });\r\n }\r\n get width() {\r\n const maybeFrame = this.currentFrame;\r\n if (maybeFrame) {\r\n return Math.abs(maybeFrame.graphic.width * this.scale.x);\r\n }\r\n return 0;\r\n }\r\n get height() {\r\n const maybeFrame = this.currentFrame;\r\n if (maybeFrame) {\r\n return Math.abs(maybeFrame.graphic.height * this.scale.y);\r\n }\r\n return 0;\r\n }\r\n /**\r\n * Create an Animation from a [[SpriteSheet]], a list of indices into the sprite sheet, a duration per frame\r\n * and optional [[AnimationStrategy]]\r\n *\r\n * Example:\r\n * ```typescript\r\n * const spriteSheet = SpriteSheet.fromImageSource({...});\r\n *\r\n * const anim = Animation.fromSpriteSheet(spriteSheet, range(0, 5), 200, AnimationStrategy.Loop);\r\n * ```\r\n *\r\n * @param spriteSheet\r\n * @param frameIndices\r\n * @param durationPerFrameMs\r\n * @param strategy\r\n */\r\n static fromSpriteSheet(spriteSheet, frameIndices, durationPerFrameMs, strategy = AnimationStrategy.Loop) {\r\n const maxIndex = spriteSheet.sprites.length - 1;\r\n const invalidIndices = frameIndices.filter((index) => index < 0 || index > maxIndex);\r\n if (invalidIndices.length) {\r\n Animation._LOGGER.warn(`Indices into SpriteSheet were provided that don\\'t exist: ${invalidIndices.join(',')} no frame will be shown`);\r\n }\r\n return new Animation({\r\n frames: spriteSheet.sprites\r\n .filter((_, index) => frameIndices.indexOf(index) > -1)\r\n .map((f) => ({\r\n graphic: f,\r\n duration: durationPerFrameMs\r\n })),\r\n strategy: strategy\r\n });\r\n }\r\n /**\r\n * Returns the current Frame of the animation\r\n */\r\n get currentFrame() {\r\n if (this._currentFrame >= 0 && this._currentFrame < this.frames.length) {\r\n return this.frames[this._currentFrame];\r\n }\r\n return null;\r\n }\r\n /**\r\n * Returns the current frame index of the animation\r\n */\r\n get currentFrameIndex() {\r\n return this._currentFrame;\r\n }\r\n /**\r\n * Returns `true` if the animation is playing\r\n */\r\n get isPlaying() {\r\n return this._playing;\r\n }\r\n /**\r\n * Reverses the play direction of the Animation, this preserves the current frame\r\n */\r\n reverse() {\r\n // Don't mutate with the original frame list, create a copy\r\n this.frames = this.frames.slice().reverse();\r\n this._reversed = !this._reversed;\r\n }\r\n /**\r\n * Returns the current play direction of the animation\r\n */\r\n get direction() {\r\n // Keep logically consistent with ping-pong direction\r\n // If ping-pong is forward = 1 and reversed is true then we are logically reversed\r\n const reversed = (this._reversed && this._direction === 1) ? true : false;\r\n return reversed ? AnimationDirection.Backward : AnimationDirection.Forward;\r\n }\r\n /**\r\n * Plays or resumes the animation from the current frame\r\n */\r\n play() {\r\n this._playing = true;\r\n }\r\n /**\r\n * Pauses the animation on the current frame\r\n */\r\n pause() {\r\n this._playing = false;\r\n this._firstTick = true; // firstTick must be set to emit the proper frame event\r\n }\r\n /**\r\n * Reset the animation back to the beginning, including if the animation were done\r\n */\r\n reset() {\r\n this._done = false;\r\n this._firstTick = true;\r\n this._currentFrame = 0;\r\n }\r\n /**\r\n * Returns `true` if the animation can end\r\n */\r\n get canFinish() {\r\n switch (this.strategy) {\r\n case AnimationStrategy.End:\r\n case AnimationStrategy.Freeze: {\r\n return true;\r\n }\r\n default: {\r\n return false;\r\n }\r\n }\r\n }\r\n /**\r\n * Returns `true` if the animation is done, for looping type animations\r\n * `ex.AnimationStrategy.PingPong` and `ex.AnimationStrategy.Loop` this will always return `false`\r\n *\r\n * See the `ex.Animation.canFinish()` method to know if an animation type can end\r\n */\r\n get done() {\r\n return this._done;\r\n }\r\n /**\r\n * Jump the animation immediately to a specific frame if it exists\r\n * @param frameNumber\r\n */\r\n goToFrame(frameNumber) {\r\n this._currentFrame = frameNumber;\r\n this._timeLeftInFrame = this.frameDuration;\r\n const maybeFrame = this.frames[this._currentFrame];\r\n if (maybeFrame && !this._done) {\r\n this._timeLeftInFrame = (maybeFrame === null || maybeFrame === void 0 ? void 0 : maybeFrame.duration) || this.frameDuration;\r\n this.events.emit('frame', maybeFrame);\r\n }\r\n }\r\n _nextFrame() {\r\n const currentFrame = this._currentFrame;\r\n if (this._done) {\r\n return currentFrame;\r\n }\r\n let next = -1;\r\n switch (this.strategy) {\r\n case AnimationStrategy.Loop: {\r\n next = (currentFrame + 1) % this.frames.length;\r\n if (next === 0) {\r\n this.events.emit('loop', this);\r\n }\r\n break;\r\n }\r\n case AnimationStrategy.End: {\r\n next = currentFrame + 1;\r\n if (next >= this.frames.length) {\r\n this._done = true;\r\n this._currentFrame = this.frames.length;\r\n this.events.emit('end', this);\r\n }\r\n break;\r\n }\r\n case AnimationStrategy.Freeze: {\r\n next = clamp(currentFrame + 1, 0, this.frames.length - 1);\r\n if (next >= this.frames.length - 1) {\r\n this._done = true;\r\n this.events.emit('end', this);\r\n }\r\n break;\r\n }\r\n case AnimationStrategy.PingPong: {\r\n if (currentFrame + this._direction >= this.frames.length) {\r\n this._direction = -1;\r\n this.events.emit('loop', this);\r\n }\r\n if (currentFrame + this._direction < 0) {\r\n this._direction = 1;\r\n this.events.emit('loop', this);\r\n }\r\n next = currentFrame + (this._direction % this.frames.length);\r\n break;\r\n }\r\n }\r\n return next;\r\n }\r\n /**\r\n * Called internally by Excalibur to update the state of the animation potential update the current frame\r\n * @param elapsedMilliseconds Milliseconds elapsed\r\n * @param idempotencyToken Prevents double ticking in a frame by passing a unique token to the frame\r\n */\r\n tick(elapsedMilliseconds, idempotencyToken = 0) {\r\n if (this._idempotencyToken === idempotencyToken) {\r\n return;\r\n }\r\n this._idempotencyToken = idempotencyToken;\r\n if (!this._playing) {\r\n return;\r\n }\r\n // if it's the first frame emit frame event\r\n if (this._firstTick) {\r\n this._firstTick = false;\r\n this.events.emit('frame', this.currentFrame);\r\n }\r\n this._timeLeftInFrame -= elapsedMilliseconds * this.timeScale;\r\n if (this._timeLeftInFrame <= 0) {\r\n this.goToFrame(this._nextFrame());\r\n }\r\n }\r\n _drawImage(ctx, x, y) {\r\n if (this.currentFrame) {\r\n this.currentFrame.graphic.draw(ctx, x, y);\r\n }\r\n }\r\n}\r\nAnimation._LOGGER = Logger.getInstance();\r\n\n;// CONCATENATED MODULE: ./Graphics/GraphicsGroup.ts\n\r\n\r\n\r\nclass GraphicsGroup extends Graphic {\r\n constructor(options) {\r\n super(options);\r\n this.members = [];\r\n this.members = options.members;\r\n this._updateDimensions();\r\n }\r\n clone() {\r\n return new GraphicsGroup({\r\n members: [...this.members],\r\n ...this.cloneGraphicOptions()\r\n });\r\n }\r\n _updateDimensions() {\r\n let bb = new BoundingBox();\r\n for (const { graphic, pos } of this.members) {\r\n bb = graphic.localBounds.translate(pos).combine(bb);\r\n }\r\n this.width = bb.width;\r\n this.height = bb.height;\r\n return bb;\r\n }\r\n get localBounds() {\r\n let bb = new BoundingBox();\r\n for (const { graphic, pos } of this.members) {\r\n bb = graphic.localBounds.translate(pos).combine(bb);\r\n }\r\n return bb;\r\n }\r\n _isAnimationOrGroup(graphic) {\r\n return graphic instanceof Animation || graphic instanceof GraphicsGroup;\r\n }\r\n tick(elapsedMilliseconds, idempotencyToken) {\r\n for (const member of this.members) {\r\n const maybeAnimation = member.graphic;\r\n if (this._isAnimationOrGroup(maybeAnimation)) {\r\n maybeAnimation.tick(elapsedMilliseconds, idempotencyToken);\r\n }\r\n }\r\n }\r\n reset() {\r\n for (const member of this.members) {\r\n const maybeAnimation = member.graphic;\r\n if (this._isAnimationOrGroup(maybeAnimation)) {\r\n maybeAnimation.reset();\r\n }\r\n }\r\n }\r\n _preDraw(ex, x, y) {\r\n this._updateDimensions();\r\n super._preDraw(ex, x, y);\r\n }\r\n _drawImage(ex, x, y) {\r\n for (const member of this.members) {\r\n ex.save();\r\n ex.translate(x, y);\r\n member.graphic.draw(ex, member.pos.x, member.pos.y);\r\n if (this.showDebug) {\r\n /* istanbul ignore next */\r\n ex.debug.drawRect(0, 0, this.width, this.height);\r\n }\r\n ex.restore();\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Configurable.ts\n/**\r\n * Configurable helper extends base type and makes all properties available as option bag arguments\r\n * @internal\r\n * @param base\r\n */\r\nfunction Configurable(base) {\r\n return class extends base {\r\n assign(props) {\r\n //set the value of every property that was passed in,\r\n //if the constructor previously set this value, it will be overridden here\r\n for (const k in props) {\r\n // eslint-disable-next-line\r\n if (typeof this[k] !== 'function') {\r\n // eslint-disable-next-line\r\n this[k] = props[k];\r\n }\r\n }\r\n }\r\n constructor(...args) {\r\n super(...args);\r\n //get the number of arguments that aren't undefined. TS passes a value to all parameters\r\n //of whatever ctor is the implementation, so args.length doesn't work here.\r\n const size = args.filter(function (value) {\r\n return value !== undefined;\r\n }).length;\r\n if (size === 1 && args[0] && typeof args[0] === 'object' && !(args[0] instanceof Array)) {\r\n this.assign(args[0]);\r\n }\r\n }\r\n };\r\n}\r\n\n;// CONCATENATED MODULE: ./Particles.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * An enum that represents the types of emitter nozzles\r\n */\r\nvar EmitterType;\r\n(function (EmitterType) {\r\n /**\r\n * Constant for the circular emitter type\r\n */\r\n EmitterType[EmitterType[\"Circle\"] = 0] = \"Circle\";\r\n /**\r\n * Constant for the rectangular emitter type\r\n */\r\n EmitterType[EmitterType[\"Rectangle\"] = 1] = \"Rectangle\";\r\n})(EmitterType || (EmitterType = {}));\r\n/**\r\n * @hidden\r\n */\r\nclass ParticleImpl extends Entity {\r\n constructor(emitterOrConfig, life, opacity, beginColor, endColor, position, velocity, acceleration, startSize, endSize) {\r\n super();\r\n this.position = new Vector(0, 0);\r\n this.velocity = new Vector(0, 0);\r\n this.acceleration = new Vector(0, 0);\r\n this.particleRotationalVelocity = 0;\r\n this.currentRotation = 0;\r\n this.focus = null;\r\n this.focusAccel = 0;\r\n this.opacity = 1;\r\n this.beginColor = Color.White;\r\n this.endColor = Color.White;\r\n // Life is counted in ms\r\n this.life = 300;\r\n this.fadeFlag = false;\r\n // Color transitions\r\n this._rRate = 1;\r\n this._gRate = 1;\r\n this._bRate = 1;\r\n this._aRate = 0;\r\n this._currentColor = Color.White;\r\n this.emitter = null;\r\n this.particleSize = 5;\r\n this.particleSprite = null;\r\n this.sizeRate = 0;\r\n this.elapsedMultiplier = 0;\r\n this.visible = true;\r\n this.isOffscreen = false;\r\n let emitter = emitterOrConfig;\r\n if (emitter && !(emitterOrConfig instanceof ParticleEmitter)) {\r\n const config = emitterOrConfig;\r\n emitter = config.emitter;\r\n life = config.life;\r\n opacity = config.opacity;\r\n endColor = config.endColor;\r\n beginColor = config.beginColor;\r\n position = config.position;\r\n velocity = config.velocity;\r\n acceleration = config.acceleration;\r\n startSize = config.startSize;\r\n endSize = config.endSize;\r\n }\r\n this.emitter = emitter;\r\n this.life = life || this.life;\r\n this.opacity = opacity || this.opacity;\r\n this.endColor = endColor || this.endColor.clone();\r\n this.beginColor = beginColor || this.beginColor.clone();\r\n this._currentColor = this.beginColor.clone();\r\n this.position = (position || this.position).add(this.emitter.pos);\r\n this.velocity = velocity || this.velocity;\r\n this.acceleration = acceleration || this.acceleration;\r\n this._rRate = (this.endColor.r - this.beginColor.r) / this.life;\r\n this._gRate = (this.endColor.g - this.beginColor.g) / this.life;\r\n this._bRate = (this.endColor.b - this.beginColor.b) / this.life;\r\n this._aRate = this.opacity / this.life;\r\n this.startSize = startSize || 0;\r\n this.endSize = endSize || 0;\r\n if (this.endSize > 0 && this.startSize > 0) {\r\n this.sizeRate = (this.endSize - this.startSize) / this.life;\r\n this.particleSize = this.startSize;\r\n }\r\n this.addComponent((this.transform = new TransformComponent()));\r\n this.addComponent((this.graphics = new GraphicsComponent()));\r\n this.transform.pos = this.position;\r\n this.transform.rotation = this.currentRotation;\r\n this.transform.scale = vec(1, 1); // TODO wut\r\n if (this.particleSprite) {\r\n this.graphics.opacity = this.opacity;\r\n this.graphics.use(this.particleSprite);\r\n }\r\n else {\r\n this.graphics.localBounds = BoundingBox.fromDimension(this.particleSize, this.particleSize, Vector.Half);\r\n this.graphics.onPostDraw = (ctx) => {\r\n ctx.save();\r\n this.graphics.opacity = this.opacity;\r\n const tmpColor = this._currentColor.clone();\r\n tmpColor.a = 1;\r\n ctx.debug.drawPoint(vec(0, 0), { color: tmpColor, size: this.particleSize });\r\n ctx.restore();\r\n };\r\n }\r\n }\r\n kill() {\r\n this.emitter.removeParticle(this);\r\n }\r\n update(_engine, delta) {\r\n this.life = this.life - delta;\r\n this.elapsedMultiplier = this.elapsedMultiplier + delta;\r\n if (this.life < 0) {\r\n this.kill();\r\n }\r\n if (this.fadeFlag) {\r\n this.opacity = clamp(this._aRate * this.life, 0.0001, 1);\r\n }\r\n if (this.startSize > 0 && this.endSize > 0) {\r\n this.particleSize = clamp(this.sizeRate * delta + this.particleSize, Math.min(this.startSize, this.endSize), Math.max(this.startSize, this.endSize));\r\n }\r\n this._currentColor.r = clamp(this._currentColor.r + this._rRate * delta, 0, 255);\r\n this._currentColor.g = clamp(this._currentColor.g + this._gRate * delta, 0, 255);\r\n this._currentColor.b = clamp(this._currentColor.b + this._bRate * delta, 0, 255);\r\n this._currentColor.a = clamp(this.opacity, 0.0001, 1);\r\n if (this.focus) {\r\n const accel = this.focus\r\n .sub(this.position)\r\n .normalize()\r\n .scale(this.focusAccel)\r\n .scale(delta / 1000);\r\n this.velocity = this.velocity.add(accel);\r\n }\r\n else {\r\n this.velocity = this.velocity.add(this.acceleration.scale(delta / 1000));\r\n }\r\n this.position = this.position.add(this.velocity.scale(delta / 1000));\r\n if (this.particleRotationalVelocity) {\r\n this.currentRotation = (this.currentRotation + (this.particleRotationalVelocity * delta) / 1000) % (2 * Math.PI);\r\n }\r\n this.transform.pos = this.position;\r\n this.transform.rotation = this.currentRotation;\r\n this.transform.scale = vec(1, 1); // todo wut\r\n this.graphics.opacity = this.opacity;\r\n }\r\n}\r\n/**\r\n * Particle is used in a [[ParticleEmitter]]\r\n */\r\nclass Particle extends Configurable(ParticleImpl) {\r\n constructor(emitterOrConfig, life, opacity, beginColor, endColor, position, velocity, acceleration, startSize, endSize) {\r\n super(emitterOrConfig, life, opacity, beginColor, endColor, position, velocity, acceleration, startSize, endSize);\r\n }\r\n}\r\n/**\r\n * Using a particle emitter is a great way to create interesting effects\r\n * in your game, like smoke, fire, water, explosions, etc. `ParticleEmitter`\r\n * extend [[Actor]] allowing you to use all of the features that come with.\r\n */\r\nclass ParticleEmitter extends Actor {\r\n /**\r\n * @param config particle emitter options bag\r\n */\r\n constructor(config) {\r\n var _a, _b;\r\n super({ width: (_a = config.width) !== null && _a !== void 0 ? _a : 0, height: (_b = config.height) !== null && _b !== void 0 ? _b : 0 });\r\n this._particlesToEmit = 0;\r\n this.numParticles = 0;\r\n /**\r\n * Gets or sets the isEmitting flag\r\n */\r\n this.isEmitting = true;\r\n /**\r\n * Gets or sets the backing particle collection\r\n */\r\n this.particles = [];\r\n /**\r\n * Gets or sets the backing deadParticle collection\r\n */\r\n this.deadParticles = [];\r\n /**\r\n * Gets or sets the minimum particle velocity\r\n */\r\n this.minVel = 0;\r\n /**\r\n * Gets or sets the maximum particle velocity\r\n */\r\n this.maxVel = 0;\r\n /**\r\n * Gets or sets the acceleration vector for all particles\r\n */\r\n this.acceleration = new Vector(0, 0);\r\n /**\r\n * Gets or sets the minimum angle in radians\r\n */\r\n this.minAngle = 0;\r\n /**\r\n * Gets or sets the maximum angle in radians\r\n */\r\n this.maxAngle = 0;\r\n /**\r\n * Gets or sets the emission rate for particles (particles/sec)\r\n */\r\n this.emitRate = 1; //particles/sec\r\n /**\r\n * Gets or sets the life of each particle in milliseconds\r\n */\r\n this.particleLife = 2000;\r\n /**\r\n * Gets or sets the fade flag which causes particles to gradually fade out over the course of their life.\r\n */\r\n this.fadeFlag = false;\r\n /**\r\n * Gets or sets the optional focus where all particles should accelerate towards\r\n */\r\n this.focus = null;\r\n /**\r\n * Gets or sets the acceleration for focusing particles if a focus has been specified\r\n */\r\n this.focusAccel = null;\r\n /**\r\n * Gets or sets the optional starting size for the particles\r\n */\r\n this.startSize = null;\r\n /**\r\n * Gets or sets the optional ending size for the particles\r\n */\r\n this.endSize = null;\r\n /**\r\n * Gets or sets the minimum size of all particles\r\n */\r\n this.minSize = 5;\r\n /**\r\n * Gets or sets the maximum size of all particles\r\n */\r\n this.maxSize = 5;\r\n /**\r\n * Gets or sets the beginning color of all particles\r\n */\r\n this.beginColor = Color.White;\r\n /**\r\n * Gets or sets the ending color of all particles\r\n */\r\n this.endColor = Color.White;\r\n this._sprite = null;\r\n /**\r\n * Gets or sets the emitter type for the particle emitter\r\n */\r\n this.emitterType = EmitterType.Rectangle;\r\n /**\r\n * Gets or sets the emitter radius, only takes effect when the [[emitterType]] is [[EmitterType.Circle]]\r\n */\r\n this.radius = 0;\r\n /**\r\n * Gets or sets the particle rotational speed velocity\r\n */\r\n this.particleRotationalVelocity = 0;\r\n /**\r\n * Indicates whether particles should start with a random rotation\r\n */\r\n this.randomRotation = false;\r\n const { x, y, pos, isEmitting, minVel, maxVel, acceleration, minAngle, maxAngle, emitRate, particleLife, opacity, fadeFlag, focus, focusAccel, startSize, endSize, minSize, maxSize, beginColor, endColor, particleSprite, emitterType, radius, particleRotationalVelocity, randomRotation, random } = { ...config };\r\n this.pos = pos !== null && pos !== void 0 ? pos : vec(x !== null && x !== void 0 ? x : 0, y !== null && y !== void 0 ? y : 0);\r\n this.isEmitting = isEmitting !== null && isEmitting !== void 0 ? isEmitting : this.isEmitting;\r\n this.minVel = minVel !== null && minVel !== void 0 ? minVel : this.minVel;\r\n this.maxVel = maxVel !== null && maxVel !== void 0 ? maxVel : this.maxVel;\r\n this.acceleration = acceleration !== null && acceleration !== void 0 ? acceleration : this.acceleration;\r\n this.minAngle = minAngle !== null && minAngle !== void 0 ? minAngle : this.minAngle;\r\n this.maxAngle = maxAngle !== null && maxAngle !== void 0 ? maxAngle : this.maxAngle;\r\n this.emitRate = emitRate !== null && emitRate !== void 0 ? emitRate : this.emitRate;\r\n this.particleLife = particleLife !== null && particleLife !== void 0 ? particleLife : this.particleLife;\r\n this.opacity = opacity !== null && opacity !== void 0 ? opacity : this.opacity;\r\n this.fadeFlag = fadeFlag !== null && fadeFlag !== void 0 ? fadeFlag : this.fadeFlag;\r\n this.focus = focus !== null && focus !== void 0 ? focus : this.focus;\r\n this.focusAccel = focusAccel !== null && focusAccel !== void 0 ? focusAccel : this.focusAccel;\r\n this.startSize = startSize !== null && startSize !== void 0 ? startSize : this.startSize;\r\n this.endSize = endSize !== null && endSize !== void 0 ? endSize : this.endSize;\r\n this.minSize = minSize !== null && minSize !== void 0 ? minSize : this.minSize;\r\n this.maxSize = maxSize !== null && maxSize !== void 0 ? maxSize : this.maxSize;\r\n this.beginColor = beginColor !== null && beginColor !== void 0 ? beginColor : this.beginColor;\r\n this.endColor = endColor !== null && endColor !== void 0 ? endColor : this.endColor;\r\n this.particleSprite = particleSprite !== null && particleSprite !== void 0 ? particleSprite : this.particleSprite;\r\n this.emitterType = emitterType !== null && emitterType !== void 0 ? emitterType : this.emitterType;\r\n this.radius = radius !== null && radius !== void 0 ? radius : this.radius;\r\n this.particleRotationalVelocity = particleRotationalVelocity !== null && particleRotationalVelocity !== void 0 ? particleRotationalVelocity : this.particleRotationalVelocity;\r\n this.randomRotation = randomRotation !== null && randomRotation !== void 0 ? randomRotation : this.randomRotation;\r\n this.body.collisionType = CollisionType.PreventCollision;\r\n this.random = random !== null && random !== void 0 ? random : new Random();\r\n }\r\n /**\r\n * Gets the opacity of each particle from 0 to 1.0\r\n */\r\n get opacity() {\r\n return super.graphics.opacity;\r\n }\r\n /**\r\n * Gets the opacity of each particle from 0 to 1.0\r\n */\r\n set opacity(opacity) {\r\n super.graphics.opacity = opacity;\r\n }\r\n /**\r\n * Gets or sets the sprite that a particle should use\r\n */\r\n get particleSprite() {\r\n return this._sprite;\r\n }\r\n set particleSprite(val) {\r\n if (val) {\r\n this._sprite = val;\r\n }\r\n }\r\n removeParticle(particle) {\r\n this.deadParticles.push(particle);\r\n }\r\n /**\r\n * Causes the emitter to emit particles\r\n * @param particleCount Number of particles to emit right now\r\n */\r\n emitParticles(particleCount) {\r\n var _a;\r\n for (let i = 0; i < particleCount; i++) {\r\n const p = this._createParticle();\r\n this.particles.push(p);\r\n if ((_a = this === null || this === void 0 ? void 0 : this.scene) === null || _a === void 0 ? void 0 : _a.world) {\r\n this.scene.world.add(p);\r\n }\r\n }\r\n }\r\n clearParticles() {\r\n this.particles.length = 0;\r\n }\r\n // Creates a new particle given the constraints of the emitter\r\n _createParticle() {\r\n // todo implement emitter constraints;\r\n let ranX = 0;\r\n let ranY = 0;\r\n const angle = randomInRange(this.minAngle, this.maxAngle, this.random);\r\n const vel = randomInRange(this.minVel, this.maxVel, this.random);\r\n const size = this.startSize || randomInRange(this.minSize, this.maxSize, this.random);\r\n const dx = vel * Math.cos(angle);\r\n const dy = vel * Math.sin(angle);\r\n if (this.emitterType === EmitterType.Rectangle) {\r\n ranX = randomInRange(0, this.width, this.random);\r\n ranY = randomInRange(0, this.height, this.random);\r\n }\r\n else if (this.emitterType === EmitterType.Circle) {\r\n const radius = randomInRange(0, this.radius, this.random);\r\n ranX = radius * Math.cos(angle);\r\n ranY = radius * Math.sin(angle);\r\n }\r\n const p = new Particle(this, this.particleLife, this.opacity, this.beginColor, this.endColor, new Vector(ranX, ranY), new Vector(dx, dy), this.acceleration, this.startSize, this.endSize);\r\n p.fadeFlag = this.fadeFlag;\r\n p.particleSize = size;\r\n if (this.particleSprite) {\r\n p.particleSprite = this.particleSprite;\r\n p.graphics.opacity = this.opacity;\r\n p.graphics.use(this._sprite);\r\n }\r\n p.particleRotationalVelocity = this.particleRotationalVelocity;\r\n if (this.randomRotation) {\r\n p.currentRotation = randomInRange(0, Math.PI * 2, this.random);\r\n }\r\n if (this.focus) {\r\n p.focus = this.focus.add(new Vector(this.pos.x, this.pos.y));\r\n p.focusAccel = this.focusAccel;\r\n }\r\n return p;\r\n }\r\n update(engine, delta) {\r\n var _a;\r\n super.update(engine, delta);\r\n if (this.isEmitting) {\r\n this._particlesToEmit += this.emitRate * (delta / 1000);\r\n if (this._particlesToEmit > 1.0) {\r\n this.emitParticles(Math.floor(this._particlesToEmit));\r\n this._particlesToEmit = this._particlesToEmit - Math.floor(this._particlesToEmit);\r\n }\r\n }\r\n // deferred removal\r\n for (let i = 0; i < this.deadParticles.length; i++) {\r\n removeItemFromArray(this.deadParticles[i], this.particles);\r\n if ((_a = this === null || this === void 0 ? void 0 : this.scene) === null || _a === void 0 ? void 0 : _a.world) {\r\n this.scene.world.remove(this.deadParticles[i], false);\r\n }\r\n }\r\n this.deadParticles.length = 0;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/GraphicsSystem.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass GraphicsSystem extends System {\r\n constructor() {\r\n super(...arguments);\r\n this.types = ['ex.transform', 'ex.graphics'];\r\n this.systemType = SystemType.Draw;\r\n this.priority = 0;\r\n this._token = 0;\r\n this._sortedTransforms = [];\r\n this._zHasChanged = false;\r\n this._zIndexUpdate = () => {\r\n this._zHasChanged = true;\r\n };\r\n }\r\n get sortedTransforms() {\r\n return this._sortedTransforms;\r\n }\r\n initialize(scene) {\r\n this._camera = scene.camera;\r\n this._engine = scene.engine;\r\n }\r\n preupdate() {\r\n // Graphics context could be switched to fallback in a new frame\r\n this._graphicsContext = this._engine.graphicsContext;\r\n if (this._zHasChanged) {\r\n this._sortedTransforms.sort((a, b) => {\r\n return a.z - b.z;\r\n });\r\n this._zHasChanged = false;\r\n }\r\n }\r\n notify(entityAddedOrRemoved) {\r\n if (isAddedSystemEntity(entityAddedOrRemoved)) {\r\n const tx = entityAddedOrRemoved.data.get(TransformComponent);\r\n this._sortedTransforms.push(tx);\r\n tx.zIndexChanged$.subscribe(this._zIndexUpdate);\r\n this._zHasChanged = true;\r\n }\r\n else {\r\n const tx = entityAddedOrRemoved.data.get(TransformComponent);\r\n tx.zIndexChanged$.unsubscribe(this._zIndexUpdate);\r\n const index = this._sortedTransforms.indexOf(tx);\r\n if (index > -1) {\r\n this._sortedTransforms.splice(index, 1);\r\n }\r\n }\r\n }\r\n update(_entities, delta) {\r\n this._token++;\r\n let graphics;\r\n // This is a performance enhancement, most things are in world space\r\n // so if we can only do this once saves a ton of transform updates\r\n this._graphicsContext.save();\r\n if (this._camera) {\r\n this._camera.draw(this._graphicsContext);\r\n }\r\n for (const transform of this._sortedTransforms) {\r\n const entity = transform.owner;\r\n // If the entity is offscreen skip\r\n if (entity.hasTag('ex.offscreen')) {\r\n continue;\r\n }\r\n graphics = entity.get(GraphicsComponent);\r\n // Exit if graphics set to not visible\r\n if (!graphics.visible) {\r\n continue;\r\n }\r\n // This optionally sets our camera based on the entity coord plan (world vs. screen)\r\n if (transform.coordPlane === CoordPlane.Screen) {\r\n this._graphicsContext.restore();\r\n }\r\n this._graphicsContext.save();\r\n // Tick any graphics state (but only once) for animations and graphics groups\r\n graphics.update(delta, this._token);\r\n // Apply parallax\r\n const parallax = entity.get(ParallaxComponent);\r\n if (parallax) {\r\n // We use the Tiled formula\r\n // https://doc.mapeditor.org/en/latest/manual/layers/#parallax-scrolling-factor\r\n // cameraPos * (1 - parallaxFactor)\r\n const oneMinusFactor = Vector.One.sub(parallax.parallaxFactor);\r\n const parallaxOffset = this._camera.pos.scale(oneMinusFactor);\r\n this._graphicsContext.translate(parallaxOffset.x, parallaxOffset.y);\r\n }\r\n // Position the entity + estimate lag\r\n this._applyTransform(entity);\r\n // Optionally run the onPreDraw graphics lifecycle draw\r\n if (graphics.onPreDraw) {\r\n graphics.onPreDraw(this._graphicsContext, delta);\r\n }\r\n // TODO remove this hack on the particle redo\r\n const particleOpacity = (entity instanceof Particle) ? entity.opacity : 1;\r\n this._graphicsContext.opacity = graphics.opacity * particleOpacity;\r\n // Draw the graphics component\r\n this._drawGraphicsComponent(graphics);\r\n // Optionally run the onPostDraw graphics lifecycle draw\r\n if (graphics.onPostDraw) {\r\n graphics.onPostDraw(this._graphicsContext, delta);\r\n }\r\n this._graphicsContext.restore();\r\n // Reset the transform back to the original world space\r\n if (transform.coordPlane === CoordPlane.Screen) {\r\n this._graphicsContext.save();\r\n if (this._camera) {\r\n this._camera.draw(this._graphicsContext);\r\n }\r\n }\r\n }\r\n this._graphicsContext.restore();\r\n }\r\n _drawGraphicsComponent(graphicsComponent) {\r\n var _a, _b;\r\n if (graphicsComponent.visible) {\r\n // this should be moved to the graphics system\r\n for (const layer of graphicsComponent.layers.get()) {\r\n for (const { graphic, options } of layer.graphics) {\r\n let anchor = graphicsComponent.anchor;\r\n let offset = graphicsComponent.offset;\r\n if (options === null || options === void 0 ? void 0 : options.anchor) {\r\n anchor = options.anchor;\r\n }\r\n if (options === null || options === void 0 ? void 0 : options.offset) {\r\n offset = options.offset;\r\n }\r\n // See https://github.com/excaliburjs/Excalibur/pull/619 for discussion on this formula\r\n const offsetX = -graphic.width * anchor.x + offset.x;\r\n const offsetY = -graphic.height * anchor.y + offset.y;\r\n graphic === null || graphic === void 0 ? void 0 : graphic.draw(this._graphicsContext, offsetX + layer.offset.x, offsetY + layer.offset.y);\r\n if (((_a = this._engine) === null || _a === void 0 ? void 0 : _a.isDebug) && this._engine.debug.graphics.showBounds) {\r\n const offset = vec(offsetX + layer.offset.x, offsetY + layer.offset.y);\r\n if (graphic instanceof GraphicsGroup) {\r\n for (const g of graphic.members) {\r\n (_b = g.graphic) === null || _b === void 0 ? void 0 : _b.localBounds.translate(offset.add(g.pos)).draw(this._graphicsContext, this._engine.debug.graphics.boundsColor);\r\n }\r\n }\r\n else {\r\n /* istanbul ignore next */\r\n graphic === null || graphic === void 0 ? void 0 : graphic.localBounds.translate(offset).draw(this._graphicsContext, this._engine.debug.graphics.boundsColor);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * This applies the current entity transform to the graphics context\r\n * @param entity\r\n */\r\n _applyTransform(entity) {\r\n const ancestors = entity.getAncestors();\r\n for (const ancestor of ancestors) {\r\n const transform = ancestor === null || ancestor === void 0 ? void 0 : ancestor.get(TransformComponent);\r\n const optionalBody = ancestor === null || ancestor === void 0 ? void 0 : ancestor.get(BodyComponent);\r\n let interpolatedPos = transform.pos;\r\n let interpolatedScale = transform.scale;\r\n let interpolatedRotation = transform.rotation;\r\n if (optionalBody) {\r\n if (this._engine.fixedUpdateFps &&\r\n optionalBody.__oldTransformCaptured &&\r\n optionalBody.enableFixedUpdateInterpolate) {\r\n // Interpolate graphics if needed\r\n const blend = this._engine.currentFrameLagMs / (1000 / this._engine.fixedUpdateFps);\r\n interpolatedPos = transform.pos.scale(blend).add(optionalBody.oldPos.scale(1.0 - blend));\r\n interpolatedScale = transform.scale.scale(blend).add(optionalBody.oldScale.scale(1.0 - blend));\r\n // Rotational lerp https://stackoverflow.com/a/30129248\r\n const cosine = (1.0 - blend) * Math.cos(optionalBody.oldRotation) + blend * Math.cos(transform.rotation);\r\n const sine = (1.0 - blend) * Math.sin(optionalBody.oldRotation) + blend * Math.sin(transform.rotation);\r\n interpolatedRotation = Math.atan2(sine, cosine);\r\n }\r\n }\r\n if (transform) {\r\n this._graphicsContext.z = transform.z;\r\n this._graphicsContext.translate(interpolatedPos.x, interpolatedPos.y);\r\n this._graphicsContext.scale(interpolatedScale.x, interpolatedScale.y);\r\n this._graphicsContext.rotate(interpolatedRotation);\r\n }\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Debug/DebugSystem.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass DebugSystem extends System {\r\n constructor() {\r\n super(...arguments);\r\n this.types = ['ex.transform'];\r\n this.systemType = SystemType.Draw;\r\n this.priority = 999; // lowest priority\r\n }\r\n initialize(scene) {\r\n this._graphicsContext = scene.engine.graphicsContext;\r\n this._camera = scene.camera;\r\n this._engine = scene.engine;\r\n this._collisionSystem = scene.world.systemManager.get(CollisionSystem);\r\n }\r\n update(entities, _delta) {\r\n var _a;\r\n if (!this._engine.isDebug) {\r\n return;\r\n }\r\n const filterSettings = this._engine.debug.filter;\r\n let id;\r\n let name;\r\n const entitySettings = this._engine.debug.entity;\r\n let tx;\r\n const txSettings = this._engine.debug.transform;\r\n let motion;\r\n const motionSettings = this._engine.debug.motion;\r\n let colliderComp;\r\n const colliderSettings = this._engine.debug.collider;\r\n const physicsSettings = this._engine.debug.physics;\r\n let graphics;\r\n const graphicsSettings = this._engine.debug.graphics;\r\n let debugDraw;\r\n let body;\r\n const bodySettings = this._engine.debug.body;\r\n const cameraSettings = this._engine.debug.camera;\r\n for (const entity of entities) {\r\n if (entity.hasTag('offscreen')) {\r\n // skip offscreen entities\r\n continue;\r\n }\r\n if (entity instanceof Particle) {\r\n // Particles crush the renderer :(\r\n continue;\r\n }\r\n if (filterSettings.useFilter) {\r\n const allIds = filterSettings.ids.length === 0;\r\n const idMatch = allIds || filterSettings.ids.includes(entity.id);\r\n if (!idMatch) {\r\n continue;\r\n }\r\n const allNames = filterSettings.nameQuery === '';\r\n const nameMatch = allNames || entity.name.includes(filterSettings.nameQuery);\r\n if (!nameMatch) {\r\n continue;\r\n }\r\n }\r\n let cursor = Vector.Zero;\r\n const lineHeight = vec(0, 16);\r\n id = entity.id;\r\n name = entity.name;\r\n tx = entity.get(TransformComponent);\r\n // This optionally sets our camera based on the entity coord plan (world vs. screen)\r\n this._pushCameraTransform(tx);\r\n this._graphicsContext.save();\r\n this._applyTransform(entity);\r\n if (tx) {\r\n if (txSettings.showAll || txSettings.showPosition) {\r\n this._graphicsContext.debug.drawPoint(Vector.Zero, { size: 4, color: txSettings.positionColor });\r\n }\r\n if (txSettings.showAll || txSettings.showPositionLabel) {\r\n this._graphicsContext.debug.drawText(`pos${tx.pos.toString(2)}`, cursor);\r\n cursor = cursor.add(lineHeight);\r\n }\r\n if (txSettings.showAll || txSettings.showZIndex) {\r\n this._graphicsContext.debug.drawText(`z(${tx.z.toFixed(1)})`, cursor);\r\n cursor = cursor.add(lineHeight);\r\n }\r\n if (entitySettings.showAll || entitySettings.showId) {\r\n this._graphicsContext.debug.drawText(`id(${id}) ${entity.parent ? 'child of id(' + ((_a = entity.parent) === null || _a === void 0 ? void 0 : _a.id) + ')' : ''}`, cursor);\r\n cursor = cursor.add(lineHeight);\r\n }\r\n if (entitySettings.showAll || entitySettings.showName) {\r\n this._graphicsContext.debug.drawText(`name(${name})`, cursor);\r\n cursor = cursor.add(lineHeight);\r\n }\r\n if (txSettings.showAll || txSettings.showRotation) {\r\n this._graphicsContext.drawLine(Vector.Zero, Vector.fromAngle(tx.rotation).scale(50).add(Vector.Zero), txSettings.rotationColor, 2);\r\n this._graphicsContext.debug.drawText(`rot deg(${toDegrees(tx.rotation).toFixed(2)})`, cursor);\r\n cursor = cursor.add(lineHeight);\r\n }\r\n if (txSettings.showAll || txSettings.showScale) {\r\n this._graphicsContext.drawLine(Vector.Zero, tx.scale.add(Vector.Zero), txSettings.scaleColor, 2);\r\n }\r\n }\r\n graphics = entity.get(GraphicsComponent);\r\n if (graphics) {\r\n if (graphicsSettings.showAll || graphicsSettings.showBounds) {\r\n const bounds = graphics.localBounds;\r\n bounds.draw(this._graphicsContext, graphicsSettings.boundsColor);\r\n }\r\n }\r\n debugDraw = entity.get(DebugGraphicsComponent);\r\n if (debugDraw) {\r\n if (!debugDraw.useTransform) {\r\n this._graphicsContext.restore();\r\n }\r\n debugDraw.draw(this._graphicsContext);\r\n if (!debugDraw.useTransform) {\r\n this._graphicsContext.save();\r\n this._applyTransform(entity);\r\n }\r\n }\r\n body = entity.get(BodyComponent);\r\n if (body) {\r\n if (bodySettings.showAll || bodySettings.showCollisionGroup) {\r\n this._graphicsContext.debug.drawText(`collision group(${body.group.name})`, cursor);\r\n cursor = cursor.add(lineHeight);\r\n }\r\n if (bodySettings.showAll || bodySettings.showCollisionType) {\r\n this._graphicsContext.debug.drawText(`collision type(${body.collisionType})`, cursor);\r\n cursor = cursor.add(lineHeight);\r\n }\r\n if (bodySettings.showAll || bodySettings.showMass) {\r\n this._graphicsContext.debug.drawText(`mass(${body.mass})`, cursor);\r\n cursor = cursor.add(lineHeight);\r\n }\r\n if (bodySettings.showAll || bodySettings.showMotion) {\r\n this._graphicsContext.debug.drawText(`motion(${body.sleepMotion})`, cursor);\r\n cursor = cursor.add(lineHeight);\r\n }\r\n if (bodySettings.showAll || bodySettings.showSleeping) {\r\n this._graphicsContext.debug.drawText(`sleeping(${body.canSleep ? body.sleeping : 'cant sleep'})`, cursor);\r\n cursor = cursor.add(lineHeight);\r\n }\r\n }\r\n this._graphicsContext.restore();\r\n motion = entity.get(MotionComponent);\r\n if (motion) {\r\n if (motionSettings.showAll || motionSettings.showVelocity) {\r\n this._graphicsContext.debug.drawText(`vel${motion.vel.toString(2)}`, cursor.add(tx.globalPos));\r\n this._graphicsContext.drawLine(tx.globalPos, tx.globalPos.add(motion.vel), motionSettings.velocityColor, 2);\r\n cursor = cursor.add(lineHeight);\r\n }\r\n if (motionSettings.showAll || motionSettings.showAcceleration) {\r\n this._graphicsContext.drawLine(tx.globalPos, tx.globalPos.add(motion.acc), motionSettings.accelerationColor, 2);\r\n }\r\n }\r\n // Colliders live in world space already so after the restore()\r\n colliderComp = entity.get(ColliderComponent);\r\n if (colliderComp) {\r\n const collider = colliderComp.get();\r\n if ((colliderSettings.showAll || colliderSettings.showGeometry) && collider) {\r\n collider.debug(this._graphicsContext, colliderSettings.geometryColor);\r\n }\r\n if (colliderSettings.showAll || colliderSettings.showBounds) {\r\n if (collider instanceof CompositeCollider) {\r\n const colliders = collider.getColliders();\r\n for (const collider of colliders) {\r\n const bounds = collider.bounds;\r\n const pos = vec(bounds.left, bounds.top);\r\n this._graphicsContext.debug.drawRect(pos.x, pos.y, bounds.width, bounds.height, { color: colliderSettings.boundsColor });\r\n if (colliderSettings.showAll || colliderSettings.showOwner) {\r\n this._graphicsContext.debug.drawText(`owner id(${collider.owner.id})`, pos);\r\n }\r\n }\r\n colliderComp.bounds.draw(this._graphicsContext, colliderSettings.boundsColor);\r\n }\r\n else if (collider) {\r\n const bounds = colliderComp.bounds;\r\n const pos = vec(bounds.left, bounds.top);\r\n this._graphicsContext.debug.drawRect(pos.x, pos.y, bounds.width, bounds.height, { color: colliderSettings.boundsColor });\r\n if (colliderSettings.showAll || colliderSettings.showOwner) {\r\n this._graphicsContext.debug.drawText(`owner id(${colliderComp.owner.id})`, pos);\r\n }\r\n }\r\n }\r\n }\r\n this._popCameraTransform(tx);\r\n }\r\n this._graphicsContext.save();\r\n this._camera.draw(this._graphicsContext);\r\n if (physicsSettings.showAll || physicsSettings.showBroadphaseSpacePartitionDebug) {\r\n this._collisionSystem.debug(this._graphicsContext);\r\n }\r\n if (physicsSettings.showAll || physicsSettings.showCollisionContacts || physicsSettings.showCollisionNormals) {\r\n for (const [_, contact] of this._engine.debug.stats.currFrame.physics.contacts) {\r\n if (physicsSettings.showAll || physicsSettings.showCollisionContacts) {\r\n for (const point of contact.points) {\r\n this._graphicsContext.debug.drawPoint(point, { size: 5, color: physicsSettings.collisionContactColor });\r\n }\r\n }\r\n if (physicsSettings.showAll || physicsSettings.showCollisionNormals) {\r\n for (const point of contact.points) {\r\n this._graphicsContext.debug.drawLine(point, contact.normal.scale(30).add(point), {\r\n color: physicsSettings.collisionNormalColor\r\n });\r\n }\r\n }\r\n }\r\n }\r\n this._graphicsContext.restore();\r\n if (cameraSettings) {\r\n this._graphicsContext.save();\r\n this._camera.draw(this._graphicsContext);\r\n if (cameraSettings.showAll || cameraSettings.showFocus) {\r\n this._graphicsContext.drawCircle(this._camera.pos, 4, cameraSettings.focusColor);\r\n }\r\n if (cameraSettings.showAll || cameraSettings.showZoom) {\r\n this._graphicsContext.debug.drawText(`zoom(${this._camera.zoom})`, this._camera.pos);\r\n }\r\n this._graphicsContext.restore();\r\n }\r\n this._graphicsContext.flush();\r\n }\r\n /**\r\n * This applies the current entity transform to the graphics context\r\n * @param entity\r\n */\r\n _applyTransform(entity) {\r\n const ancestors = entity.getAncestors();\r\n for (const ancestor of ancestors) {\r\n const transform = ancestor === null || ancestor === void 0 ? void 0 : ancestor.get(TransformComponent);\r\n if (transform) {\r\n this._graphicsContext.translate(transform.pos.x, transform.pos.y);\r\n this._graphicsContext.scale(transform.scale.x, transform.scale.y);\r\n this._graphicsContext.rotate(transform.rotation);\r\n }\r\n }\r\n }\r\n /**\r\n * Applies the current camera transform if in world coordinates\r\n * @param transform\r\n */\r\n _pushCameraTransform(transform) {\r\n // Establish camera offset per entity\r\n if (transform.coordPlane === CoordPlane.World) {\r\n this._graphicsContext.save();\r\n if (this._camera) {\r\n this._camera.draw(this._graphicsContext);\r\n }\r\n }\r\n }\r\n /**\r\n * Resets the current camera transform if in world coordinates\r\n * @param transform\r\n */\r\n _popCameraTransform(transform) {\r\n if (transform.coordPlane === CoordPlane.World) {\r\n // Apply camera world offset\r\n this._graphicsContext.restore();\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Input/PointerSystem.ts\n\r\n\r\n\r\n\r\n\r\n/**\r\n * The PointerSystem is responsible for dispatching pointer events to entities\r\n * that need them.\r\n *\r\n * The PointerSystem can be optionally configured by the [[PointerComponent]], by default Entities use\r\n * the [[Collider]]'s shape for pointer events.\r\n */\r\nclass PointerSystem extends System {\r\n constructor() {\r\n super(...arguments);\r\n this.types = ['ex.transform', 'ex.pointer'];\r\n this.systemType = SystemType.Update;\r\n this.priority = -1;\r\n /**\r\n * Optionally override component configuration for all entities\r\n */\r\n this.overrideUseColliderShape = false;\r\n /**\r\n * Optionally override component configuration for all entities\r\n */\r\n this.overrideUseGraphicsBounds = false;\r\n this.lastFrameEntityToPointers = new Map();\r\n this.currentFrameEntityToPointers = new Map();\r\n this._sortedTransforms = [];\r\n this._sortedEntities = [];\r\n this._zHasChanged = false;\r\n this._zIndexUpdate = () => {\r\n this._zHasChanged = true;\r\n };\r\n }\r\n initialize(scene) {\r\n this._engine = scene.engine;\r\n }\r\n preupdate() {\r\n // event receiver might change per frame\r\n this._receiver = this._engine.input.pointers;\r\n if (this._zHasChanged) {\r\n this._sortedTransforms.sort((a, b) => {\r\n return b.z - a.z;\r\n });\r\n this._sortedEntities = this._sortedTransforms.map(t => t.owner);\r\n this._zHasChanged = false;\r\n }\r\n }\r\n notify(entityAddedOrRemoved) {\r\n if (isAddedSystemEntity(entityAddedOrRemoved)) {\r\n const tx = entityAddedOrRemoved.data.get(TransformComponent);\r\n this._sortedTransforms.push(tx);\r\n this._sortedEntities.push(tx.owner);\r\n tx.zIndexChanged$.subscribe(this._zIndexUpdate);\r\n this._zHasChanged = true;\r\n }\r\n else {\r\n const tx = entityAddedOrRemoved.data.get(TransformComponent);\r\n tx.zIndexChanged$.unsubscribe(this._zIndexUpdate);\r\n const index = this._sortedTransforms.indexOf(tx);\r\n if (index > -1) {\r\n this._sortedTransforms.splice(index, 1);\r\n this._sortedEntities.splice(index, 1);\r\n }\r\n }\r\n }\r\n entityCurrentlyUnderPointer(entity, pointerId) {\r\n return this.currentFrameEntityToPointers.has(entity.id) &&\r\n this.currentFrameEntityToPointers.get(entity.id).includes(pointerId);\r\n }\r\n entityWasUnderPointer(entity, pointerId) {\r\n return this.lastFrameEntityToPointers.has(entity.id) &&\r\n this.lastFrameEntityToPointers.get(entity.id).includes(pointerId);\r\n }\r\n entered(entity, pointerId) {\r\n return this.entityCurrentlyUnderPointer(entity, pointerId) &&\r\n !this.lastFrameEntityToPointers.has(entity.id);\r\n }\r\n left(entity, pointerId) {\r\n return !this.currentFrameEntityToPointers.has(entity.id) &&\r\n this.entityWasUnderPointer(entity, pointerId);\r\n }\r\n addPointerToEntity(entity, pointerId) {\r\n if (!this.currentFrameEntityToPointers.has(entity.id)) {\r\n this.currentFrameEntityToPointers.set(entity.id, [pointerId]);\r\n return;\r\n }\r\n const pointers = this.currentFrameEntityToPointers.get(entity.id);\r\n this.currentFrameEntityToPointers.set(entity.id, pointers.concat(pointerId));\r\n }\r\n update(_entities) {\r\n // Locate all the pointer/entity mappings\r\n this._processPointerToEntity(this._sortedEntities);\r\n // Dispatch pointer events on entities\r\n this._dispatchEvents(this._sortedEntities);\r\n // Clear last frame's events\r\n this._receiver.update();\r\n this.lastFrameEntityToPointers.clear();\r\n this.lastFrameEntityToPointers = new Map(this.currentFrameEntityToPointers);\r\n this.currentFrameEntityToPointers.clear();\r\n this._receiver.clear();\r\n }\r\n _processPointerToEntity(entities) {\r\n var _a;\r\n let transform;\r\n let collider;\r\n let graphics;\r\n let pointer;\r\n // TODO probably a spatial partition optimization here to quickly query bounds for pointer\r\n // doesn't seem to cause issues tho for perf\r\n // Pre-process find entities under pointers\r\n for (const entity of entities) {\r\n transform = entity.get(TransformComponent);\r\n pointer = (_a = entity.get(PointerComponent)) !== null && _a !== void 0 ? _a : new PointerComponent;\r\n // Check collider contains pointer\r\n collider = entity.get(ColliderComponent);\r\n if (collider && (pointer.useColliderShape || this.overrideUseColliderShape)) {\r\n collider.update();\r\n const geom = collider.get();\r\n if (geom) {\r\n for (const [pointerId, pos] of this._receiver.currentFramePointerCoords.entries()) {\r\n if (geom.contains(transform.coordPlane === CoordPlane.World ? pos.worldPos : pos.screenPos)) {\r\n this.addPointerToEntity(entity, pointerId);\r\n }\r\n }\r\n }\r\n }\r\n // Check graphics contains pointer\r\n graphics = entity.get(GraphicsComponent);\r\n if (graphics && (pointer.useGraphicsBounds || this.overrideUseGraphicsBounds)) {\r\n const graphicBounds = graphics.localBounds.transform(transform.get().matrix);\r\n for (const [pointerId, pos] of this._receiver.currentFramePointerCoords.entries()) {\r\n if (graphicBounds.contains(transform.coordPlane === CoordPlane.World ? pos.worldPos : pos.screenPos)) {\r\n this.addPointerToEntity(entity, pointerId);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n _processDownAndEmit(entity) {\r\n const lastDownPerPointer = new Map();\r\n // Loop through down and dispatch to entities\r\n for (const event of this._receiver.currentFrameDown) {\r\n if (event.active && entity.active && this.entityCurrentlyUnderPointer(entity, event.pointerId)) {\r\n entity.events.emit('pointerdown', event);\r\n if (this._receiver.isDragStart(event.pointerId)) {\r\n entity.events.emit('pointerdragstart', event);\r\n }\r\n }\r\n lastDownPerPointer.set(event.pointerId, event);\r\n }\r\n return lastDownPerPointer;\r\n }\r\n _processUpAndEmit(entity) {\r\n const lastUpPerPointer = new Map();\r\n // Loop through up and dispatch to entities\r\n for (const event of this._receiver.currentFrameUp) {\r\n if (event.active && entity.active && this.entityCurrentlyUnderPointer(entity, event.pointerId)) {\r\n entity.events.emit('pointerup', event);\r\n if (this._receiver.isDragEnd(event.pointerId)) {\r\n entity.events.emit('pointerdragend', event);\r\n }\r\n }\r\n lastUpPerPointer.set(event.pointerId, event);\r\n }\r\n return lastUpPerPointer;\r\n }\r\n _processMoveAndEmit(entity) {\r\n const lastMovePerPointer = new Map();\r\n // Loop through move and dispatch to entities\r\n for (const event of this._receiver.currentFrameMove) {\r\n if (event.active && entity.active && this.entityCurrentlyUnderPointer(entity, event.pointerId)) {\r\n // move\r\n entity.events.emit('pointermove', event);\r\n if (this._receiver.isDragging(event.pointerId)) {\r\n entity.events.emit('pointerdragmove', event);\r\n }\r\n }\r\n lastMovePerPointer.set(event.pointerId, event);\r\n }\r\n return lastMovePerPointer;\r\n }\r\n _processEnterLeaveAndEmit(entity, lastUpDownMoveEvents) {\r\n // up, down, and move are considered for enter and leave\r\n for (const event of lastUpDownMoveEvents) {\r\n // enter\r\n if (event.active && entity.active && this.entered(entity, event.pointerId)) {\r\n entity.events.emit('pointerenter', event);\r\n if (this._receiver.isDragging(event.pointerId)) {\r\n entity.events.emit('pointerdragenter', event);\r\n }\r\n break;\r\n }\r\n if (event.active && entity.active &&\r\n // leave can happen on move\r\n (this.left(entity, event.pointerId) ||\r\n // or leave can happen on pointer up\r\n (this.entityCurrentlyUnderPointer(entity, event.pointerId) && event.type === 'up'))) {\r\n entity.events.emit('pointerleave', event);\r\n if (this._receiver.isDragging(event.pointerId)) {\r\n entity.events.emit('pointerdragleave', event);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n _processCancelAndEmit(entity) {\r\n // cancel\r\n for (const event of this._receiver.currentFrameCancel) {\r\n if (event.active && entity.active && this.entityCurrentlyUnderPointer(entity, event.pointerId)) {\r\n entity.events.emit('pointercancel', event);\r\n }\r\n }\r\n }\r\n _processWheelAndEmit(entity) {\r\n // wheel\r\n for (const event of this._receiver.currentFrameWheel) {\r\n // Currently the wheel only fires under the primary pointer '0'\r\n if (event.active && entity.active && this.entityCurrentlyUnderPointer(entity, 0)) {\r\n entity.events.emit('pointerwheel', event);\r\n }\r\n }\r\n }\r\n _dispatchEvents(entities) {\r\n const lastFrameEntities = new Set(this.lastFrameEntityToPointers.keys());\r\n const currentFrameEntities = new Set(this.currentFrameEntityToPointers.keys());\r\n // Filter preserves z order\r\n const entitiesWithEvents = entities.filter(e => lastFrameEntities.has(e.id) || currentFrameEntities.has(e.id));\r\n let lastMovePerPointer;\r\n let lastUpPerPointer;\r\n let lastDownPerPointer;\r\n // Dispatch events in entity z order\r\n for (const entity of entitiesWithEvents) {\r\n lastDownPerPointer = this._processDownAndEmit(entity);\r\n lastUpPerPointer = this._processUpAndEmit(entity);\r\n lastMovePerPointer = this._processMoveAndEmit(entity);\r\n const lastUpDownMoveEvents = [\r\n ...lastMovePerPointer.values(),\r\n ...lastDownPerPointer.values(),\r\n ...lastUpPerPointer.values()\r\n ];\r\n this._processEnterLeaveAndEmit(entity, lastUpDownMoveEvents);\r\n this._processCancelAndEmit(entity);\r\n this._processWheelAndEmit(entity);\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/ActionsSystem.ts\n\r\n\r\nclass ActionsSystem extends System {\r\n constructor() {\r\n super(...arguments);\r\n this.types = ['ex.actions'];\r\n this.systemType = SystemType.Update;\r\n this.priority = -1;\r\n this._actions = [];\r\n }\r\n notify(entityAddedOrRemoved) {\r\n if (isAddedSystemEntity(entityAddedOrRemoved)) {\r\n const action = entityAddedOrRemoved.data.get(ActionsComponent);\r\n this._actions.push(action);\r\n }\r\n else {\r\n const action = entityAddedOrRemoved.data.get(ActionsComponent);\r\n const index = this._actions.indexOf(action);\r\n if (index > -1) {\r\n this._actions.splice(index, 1);\r\n }\r\n }\r\n }\r\n update(_entities, delta) {\r\n for (const actions of this._actions) {\r\n actions.update(delta);\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./TileMap/IsometricEntityComponent.ts\n\r\nclass IsometricEntityComponent extends Component {\r\n /**\r\n * Specify the isometric map to use to position this entity's z-index\r\n * @param map\r\n */\r\n constructor(map) {\r\n super();\r\n this.type = 'ex.isometricentity';\r\n /**\r\n * Vertical \"height\" in the isometric world\r\n */\r\n this.elevation = 0;\r\n this.map = map;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./TileMap/IsometricEntitySystem.ts\n\r\n\r\n\r\nclass IsometricEntitySystem extends System {\r\n constructor() {\r\n super(...arguments);\r\n this.types = ['ex.transform', 'ex.isometricentity'];\r\n this.systemType = SystemType.Update;\r\n this.priority = 99;\r\n }\r\n update(entities, _delta) {\r\n let transform;\r\n let iso;\r\n for (const entity of entities) {\r\n transform = entity.get(TransformComponent);\r\n iso = entity.get(IsometricEntityComponent);\r\n const maxZindexPerElevation = Math.max(iso.map.columns * iso.map.tileWidth, iso.map.rows * iso.map.tileHeight);\r\n const newZ = maxZindexPerElevation * iso.elevation + transform.pos.y;\r\n transform.z = newZ;\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/OffscreenSystem.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass OffscreenSystem extends System {\r\n constructor() {\r\n super(...arguments);\r\n this.types = ['ex.transform', 'ex.graphics'];\r\n this.systemType = SystemType.Draw;\r\n this.priority = -1;\r\n }\r\n initialize(scene) {\r\n this._camera = scene.camera;\r\n }\r\n update(entities) {\r\n let transform;\r\n let graphics;\r\n let maybeParallax;\r\n for (const entity of entities) {\r\n graphics = entity.get(GraphicsComponent);\r\n transform = entity.get(TransformComponent);\r\n maybeParallax = entity.get(ParallaxComponent);\r\n let parallaxOffset;\r\n if (maybeParallax) {\r\n // We use the Tiled formula\r\n // https://doc.mapeditor.org/en/latest/manual/layers/#parallax-scrolling-factor\r\n // cameraPos * (1 - parallaxFactor)\r\n const oneMinusFactor = Vector.One.sub(maybeParallax.parallaxFactor);\r\n parallaxOffset = this._camera.pos.scale(oneMinusFactor);\r\n }\r\n // Figure out if entities are offscreen\r\n const entityOffscreen = this._isOffscreen(transform, graphics, parallaxOffset);\r\n if (entityOffscreen && !entity.hasTag('ex.offscreen')) {\r\n entity.eventDispatcher.emit('exitviewport', new ExitViewPortEvent(entity));\r\n entity.addTag('ex.offscreen');\r\n }\r\n if (!entityOffscreen && entity.hasTag('ex.offscreen')) {\r\n entity.eventDispatcher.emit('enterviewport', new EnterViewPortEvent(entity));\r\n entity.removeTag('ex.offscreen');\r\n }\r\n }\r\n }\r\n _isOffscreen(transform, graphics, parallaxOffset) {\r\n if (transform.coordPlane === CoordPlane.World) {\r\n let bounds = graphics.localBounds;\r\n if (parallaxOffset) {\r\n bounds = bounds.translate(parallaxOffset);\r\n }\r\n const transformedBounds = bounds.transform(transform.get().matrix);\r\n const graphicsOffscreen = !this._camera.viewport.overlaps(transformedBounds);\r\n return graphicsOffscreen;\r\n }\r\n else {\r\n // TODO screen coordinates\r\n return false;\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Scene.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * [[Actor|Actors]] are composed together into groupings called Scenes in\r\n * Excalibur. The metaphor models the same idea behind real world\r\n * actors in a scene. Only actors in scenes will be updated and drawn.\r\n *\r\n * Typical usages of a scene include: levels, menus, loading screens, etc.\r\n */\r\nclass Scene extends Class {\r\n constructor() {\r\n super();\r\n this._logger = Logger.getInstance();\r\n /**\r\n * Gets or sets the current camera for the scene\r\n */\r\n this.camera = new Camera();\r\n /**\r\n * The ECS world for the scene\r\n */\r\n this.world = new World(this);\r\n this._isInitialized = false;\r\n this._timers = [];\r\n this._cancelQueue = [];\r\n // Initialize systems\r\n // Update\r\n this.world.add(new ActionsSystem());\r\n this.world.add(new MotionSystem());\r\n this.world.add(new CollisionSystem());\r\n this.world.add(new PointerSystem());\r\n this.world.add(new IsometricEntitySystem());\r\n // Draw\r\n this.world.add(new OffscreenSystem());\r\n this.world.add(new GraphicsSystem());\r\n this.world.add(new DebugSystem());\r\n }\r\n /**\r\n * The actors in the current scene\r\n */\r\n get actors() {\r\n return this.world.entityManager.entities.filter((e) => {\r\n return e instanceof Actor;\r\n });\r\n }\r\n /**\r\n * The entities in the current scene\r\n */\r\n get entities() {\r\n return this.world.entityManager.entities;\r\n }\r\n /**\r\n * The triggers in the current scene\r\n */\r\n get triggers() {\r\n return this.world.entityManager.entities.filter((e) => {\r\n return e instanceof Trigger;\r\n });\r\n }\r\n /**\r\n * The [[TileMap]]s in the scene, if any\r\n */\r\n get tileMaps() {\r\n return this.world.entityManager.entities.filter((e) => {\r\n return e instanceof TileMap;\r\n });\r\n }\r\n get timers() {\r\n return this._timers;\r\n }\r\n on(eventName, handler) {\r\n super.on(eventName, handler);\r\n }\r\n once(eventName, handler) {\r\n super.once(eventName, handler);\r\n }\r\n off(eventName, handler) {\r\n super.off(eventName, handler);\r\n }\r\n /**\r\n * This is called before the first update of the [[Scene]]. Initializes scene members like the camera. This method is meant to be\r\n * overridden. This is where initialization of child actors should take place.\r\n */\r\n onInitialize(_engine) {\r\n // will be overridden\r\n }\r\n /**\r\n * This is called when the scene is made active and started. It is meant to be overridden,\r\n * this is where you should setup any DOM UI or event handlers needed for the scene.\r\n */\r\n onActivate(_context) {\r\n // will be overridden\r\n }\r\n /**\r\n * This is called when the scene is made transitioned away from and stopped. It is meant to be overridden,\r\n * this is where you should cleanup any DOM UI or event handlers needed for the scene.\r\n */\r\n onDeactivate(_context) {\r\n // will be overridden\r\n }\r\n /**\r\n * Safe to override onPreUpdate lifecycle event handler. Synonymous with `.on('preupdate', (evt) =>{...})`\r\n *\r\n * `onPreUpdate` is called directly before a scene is updated.\r\n */\r\n onPreUpdate(_engine, _delta) {\r\n // will be overridden\r\n }\r\n /**\r\n * Safe to override onPostUpdate lifecycle event handler. Synonymous with `.on('preupdate', (evt) =>{...})`\r\n *\r\n * `onPostUpdate` is called directly after a scene is updated.\r\n */\r\n onPostUpdate(_engine, _delta) {\r\n // will be overridden\r\n }\r\n /**\r\n * Safe to override onPreDraw lifecycle event handler. Synonymous with `.on('preupdate', (evt) =>{...})`\r\n *\r\n * `onPreDraw` is called directly before a scene is drawn.\r\n *\r\n */\r\n onPreDraw(_ctx, _delta) {\r\n // will be overridden\r\n }\r\n /**\r\n * Safe to override onPostDraw lifecycle event handler. Synonymous with `.on('preupdate', (evt) =>{...})`\r\n *\r\n * `onPostDraw` is called directly after a scene is drawn.\r\n *\r\n */\r\n onPostDraw(_ctx, _delta) {\r\n // will be overridden\r\n }\r\n /**\r\n * Initializes actors in the scene\r\n */\r\n _initializeChildren() {\r\n for (const child of this.entities) {\r\n child._initialize(this.engine);\r\n }\r\n }\r\n /**\r\n * Gets whether or not the [[Scene]] has been initialized\r\n */\r\n get isInitialized() {\r\n return this._isInitialized;\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Initializes the scene before the first update, meant to be called by engine not by users of\r\n * Excalibur\r\n * @internal\r\n */\r\n _initialize(engine) {\r\n if (!this.isInitialized) {\r\n this.engine = engine;\r\n // Initialize camera first\r\n this.camera._initialize(engine);\r\n this.world.systemManager.initialize();\r\n // This order is important! we want to be sure any custom init that add actors\r\n // fire before the actor init\r\n this.onInitialize.call(this, engine);\r\n this._initializeChildren();\r\n this._logger.debug('Scene.onInitialize', this, engine);\r\n this.eventDispatcher.emit('initialize', new InitializeEvent(engine, this));\r\n this._isInitialized = true;\r\n }\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Activates the scene with the base behavior, then calls the overridable `onActivate` implementation.\r\n * @internal\r\n */\r\n _activate(context) {\r\n this._logger.debug('Scene.onActivate', this);\r\n this.onActivate(context);\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Deactivates the scene with the base behavior, then calls the overridable `onDeactivate` implementation.\r\n * @internal\r\n */\r\n _deactivate(context) {\r\n this._logger.debug('Scene.onDeactivate', this);\r\n this.onDeactivate(context);\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Internal _preupdate handler for [[onPreUpdate]] lifecycle event\r\n * @internal\r\n */\r\n _preupdate(_engine, delta) {\r\n this.emit('preupdate', new PreUpdateEvent(_engine, delta, this));\r\n this.onPreUpdate(_engine, delta);\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Internal _preupdate handler for [[onPostUpdate]] lifecycle event\r\n * @internal\r\n */\r\n _postupdate(_engine, delta) {\r\n this.emit('postupdate', new PostUpdateEvent(_engine, delta, this));\r\n this.onPostUpdate(_engine, delta);\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Internal _predraw handler for [[onPreDraw]] lifecycle event\r\n *\r\n * @internal\r\n */\r\n _predraw(_ctx, _delta) {\r\n this.emit('predraw', new PreDrawEvent(_ctx, _delta, this));\r\n this.onPreDraw(_ctx, _delta);\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Internal _postdraw handler for [[onPostDraw]] lifecycle event\r\n *\r\n * @internal\r\n */\r\n _postdraw(_ctx, _delta) {\r\n this.emit('postdraw', new PostDrawEvent(_ctx, _delta, this));\r\n this.onPostDraw(_ctx, _delta);\r\n }\r\n /**\r\n * Updates all the actors and timers in the scene. Called by the [[Engine]].\r\n * @param engine Reference to the current Engine\r\n * @param delta The number of milliseconds since the last update\r\n */\r\n update(engine, delta) {\r\n this._preupdate(engine, delta);\r\n // TODO differed entity removal for timers\r\n let i, len;\r\n // Remove timers in the cancel queue before updating them\r\n for (i = 0, len = this._cancelQueue.length; i < len; i++) {\r\n this.removeTimer(this._cancelQueue[i]);\r\n }\r\n this._cancelQueue.length = 0;\r\n // Cycle through timers updating timers\r\n for (const timer of this._timers) {\r\n timer.update(delta);\r\n }\r\n this.world.update(SystemType.Update, delta);\r\n // Camera last keeps renders smooth that are based on entity/actor\r\n if (this.camera) {\r\n this.camera.update(engine, delta);\r\n }\r\n this._collectActorStats(engine);\r\n this._postupdate(engine, delta);\r\n }\r\n /**\r\n * Draws all the actors in the Scene. Called by the [[Engine]].\r\n *\r\n * @param ctx The current rendering context\r\n * @param delta The number of milliseconds since the last draw\r\n */\r\n draw(ctx, delta) {\r\n var _a;\r\n this._predraw(ctx, delta);\r\n this.world.update(SystemType.Draw, delta);\r\n if ((_a = this.engine) === null || _a === void 0 ? void 0 : _a.isDebug) {\r\n this.debugDraw(ctx);\r\n }\r\n this._postdraw(ctx, delta);\r\n }\r\n /**\r\n * Draws all the actors' debug information in the Scene. Called by the [[Engine]].\r\n * @param ctx The current rendering context\r\n */\r\n /* istanbul ignore next */\r\n debugDraw(ctx) {\r\n this.emit('predebugdraw', new PreDebugDrawEvent(ctx, this));\r\n // pass\r\n this.emit('postdebugdraw', new PostDebugDrawEvent(ctx, this));\r\n }\r\n /**\r\n * Checks whether an actor is contained in this scene or not\r\n */\r\n contains(actor) {\r\n return this.actors.indexOf(actor) > -1;\r\n }\r\n add(entity) {\r\n this.emit('entityadded', { target: entity });\r\n this.world.add(entity);\r\n entity.scene = this;\r\n if (entity instanceof Timer) {\r\n if (!contains(this._timers, entity)) {\r\n this.addTimer(entity);\r\n }\r\n return;\r\n }\r\n }\r\n remove(entity) {\r\n if (entity instanceof Entity) {\r\n this.emit('entityremoved', { target: entity });\r\n this.world.remove(entity);\r\n }\r\n if (entity instanceof Timer) {\r\n this.removeTimer(entity);\r\n }\r\n }\r\n /**\r\n * Removes all entities and timers from the scene, optionally indicate whether deferred should or shouldn't be used.\r\n *\r\n * By default entities use deferred removal\r\n * @param deferred\r\n */\r\n clear(deferred = true) {\r\n for (const entity of this.entities) {\r\n this.world.remove(entity, deferred);\r\n }\r\n for (const timer of this.timers) {\r\n this.removeTimer(timer);\r\n }\r\n }\r\n /**\r\n * Adds a [[Timer]] to the scene\r\n * @param timer The timer to add\r\n */\r\n addTimer(timer) {\r\n this._timers.push(timer);\r\n timer.scene = this;\r\n return timer;\r\n }\r\n /**\r\n * Removes a [[Timer]] from the scene.\r\n * @warning Can be dangerous, use [[cancelTimer]] instead\r\n * @param timer The timer to remove\r\n */\r\n removeTimer(timer) {\r\n const i = this._timers.indexOf(timer);\r\n if (i !== -1) {\r\n this._timers.splice(i, 1);\r\n }\r\n return timer;\r\n }\r\n /**\r\n * Cancels a [[Timer]], removing it from the scene nicely\r\n * @param timer The timer to cancel\r\n */\r\n cancelTimer(timer) {\r\n this._cancelQueue.push(timer);\r\n return timer;\r\n }\r\n /**\r\n * Tests whether a [[Timer]] is active in the scene\r\n */\r\n isTimerActive(timer) {\r\n return this._timers.indexOf(timer) > -1 && !timer.complete;\r\n }\r\n isCurrentScene() {\r\n if (this.engine) {\r\n return this.engine.currentScene === this;\r\n }\r\n return false;\r\n }\r\n _collectActorStats(engine) {\r\n const screenElements = this.actors.filter((a) => a instanceof ScreenElement);\r\n for (const _ui of screenElements) {\r\n engine.stats.currFrame.actors.ui++;\r\n }\r\n for (const actor of this.actors) {\r\n engine.stats.currFrame.actors.alive++;\r\n for (const child of actor.children) {\r\n if (isScreenElement(child)) {\r\n // TODO not true\r\n engine.stats.currFrame.actors.ui++;\r\n }\r\n else {\r\n engine.stats.currFrame.actors.alive++;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/PostProcessor/ColorBlindnessMode.ts\nvar ColorBlindnessMode;\r\n(function (ColorBlindnessMode) {\r\n ColorBlindnessMode[\"Protanope\"] = \"Protanope\";\r\n ColorBlindnessMode[\"Deuteranope\"] = \"Deuteranope\";\r\n ColorBlindnessMode[\"Tritanope\"] = \"Tritanope\";\r\n})(ColorBlindnessMode || (ColorBlindnessMode = {}));\r\n\n;// CONCATENATED MODULE: ./Graphics/PostProcessor/color-blind-fragment.glsl\n/* harmony default export */ const color_blind_fragment = (\"#version 300 es\\r\\nprecision mediump float;\\r\\n// our texture\\r\\nuniform sampler2D u_image;\\r\\n// the texCoords passed in from the vertex shader.\\r\\nin vec2 v_texcoord;\\r\\n\\r\\n// color blind type\\r\\nuniform int u_type;\\r\\n\\r\\n// simulation?\\r\\nuniform bool u_simulate;\\r\\n\\r\\nout vec4 fragColor;\\r\\n\\r\\nvoid main() {\\r\\n vec4 o = texture(u_image, v_texcoord);\\r\\n // RGB to LMS matrix conversion\\r\\n float L = (17.8824 * o.r) + (43.5161 * o.g) + (4.11935 * o.b);\\r\\n float M = (3.45565 * o.r) + (27.1554 * o.g) + (3.86714 * o.b);\\r\\n float S = (0.0299566 * o.r) + (0.184309 * o.g) + (1.46709 * o.b);\\r\\n // Simulate color blindness\\r\\n float l;\\r\\n float m;\\r\\n float s;\\r\\n //MODE CODE//\\r\\n if (u_type == 0) {\\r\\n // Protanope\\r\\n l = 0.0 * L + 2.02344 * M + -2.52581 * S;\\r\\n m = 0.0 * L + 1.0 * M + 0.0 * S;\\r\\n s = 0.0 * L + 0.0 * M + 1.0 * S;;\\r\\n } else if (u_type == 1) {\\r\\n // Deuteranope\\r\\n l = 1.0 * L + 0.0 * M + 0.0 * S;\\r\\n m = 0.494207 * L + 0.0 * M + 1.24827 * S;\\r\\n s = 0.0 * L + 0.0 * M + 1.0 * S;\\r\\n } else if (u_type == 2) {\\r\\n // Tritanope\\r\\n l = 1.0 * L + 0.0 * M + 0.0 * S;\\r\\n m = 0.0 * L + 1.0 * M + 0.0 * S;\\r\\n s = -0.395913 * L + 0.801109 * M + 0.0 * S;\\r\\n }\\r\\n\\r\\n // LMS to RGB matrix conversion\\r\\n vec4 error; // simulate the colors\\r\\n error.r = (0.0809444479 * l) + (-0.130504409 * m) + (0.116721066 * s);\\r\\n error.g = (-0.0102485335 * l) + (0.0540193266 * m) + (-0.113614708 * s);\\r\\n error.b = (-0.000365296938 * l) + (-0.00412161469 * m) + (0.693511405 * s);\\r\\n error.a = 1.0;\\r\\n vec4 diff = o - error;\\r\\n vec4 correction; // correct the colors\\r\\n correction.r = 0.0;\\r\\n correction.g = (diff.r * 0.7) + (diff.g * 1.0);\\r\\n correction.b = (diff.r * 0.7) + (diff.b * 1.0);\\r\\n correction = o + correction;\\r\\n correction.a = o.a;\\r\\n //SIMULATE//\\r\\n\\r\\n // sim \\r\\n if (u_simulate) {\\r\\n fragColor = error.rgba;\\r\\n } else {\\r\\n fragColor = correction.rgba;\\r\\n }\\r\\n}\");\n;// CONCATENATED MODULE: ./Graphics/PostProcessor/ScreenShader.ts\n\r\n\r\n\r\n/**\r\n * Helper that defines a whole screen renderer, just provide a fragment source!\r\n *\r\n * Currently supports 1 varying\r\n * - vec2 a_texcoord between 0-1 which corresponds to screen position\r\n */\r\nclass ScreenShader {\r\n constructor(fragmentSource) {\r\n this._shader = new Shader({\r\n vertexSource: `#version 300 es\r\n in vec2 a_position;\r\n in vec2 a_texcoord;\r\n out vec2 v_texcoord;\r\n\r\n void main() {\r\n gl_Position = vec4(a_position, 0.0, 1.0);\r\n // Pass the texcoord to the fragment shader.\r\n v_texcoord = a_texcoord;\r\n }`,\r\n fragmentSource: fragmentSource\r\n });\r\n this._shader.compile();\r\n // Setup memory layout\r\n this._buffer = new VertexBuffer({\r\n type: 'static',\r\n // clip space quad + uv since we don't need a camera\r\n data: new Float32Array([\r\n -1, -1, 0, 0,\r\n -1, 1, 0, 1,\r\n 1, -1, 1, 0,\r\n 1, -1, 1, 0,\r\n -1, 1, 0, 1,\r\n 1, 1, 1, 1\r\n ])\r\n });\r\n this._layout = new VertexLayout({\r\n shader: this._shader,\r\n vertexBuffer: this._buffer,\r\n attributes: [\r\n ['a_position', 2],\r\n ['a_texcoord', 2]\r\n ]\r\n });\r\n this._buffer.upload();\r\n }\r\n getShader() {\r\n return this._shader;\r\n }\r\n getLayout() {\r\n return this._layout;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/PostProcessor/ColorBlindnessPostProcessor.ts\n\r\n\r\n\r\nclass ColorBlindnessPostProcessor {\r\n constructor(_colorBlindnessMode, simulate = false) {\r\n this._colorBlindnessMode = _colorBlindnessMode;\r\n this._simulate = false;\r\n this._simulate = simulate;\r\n }\r\n initialize(_gl) {\r\n this._shader = new ScreenShader(color_blind_fragment);\r\n this.simulate = this._simulate;\r\n this.colorBlindnessMode = this._colorBlindnessMode;\r\n }\r\n getShader() {\r\n return this._shader.getShader();\r\n }\r\n getLayout() {\r\n return this._shader.getLayout();\r\n }\r\n set colorBlindnessMode(colorBlindMode) {\r\n this._colorBlindnessMode = colorBlindMode;\r\n if (this._shader) {\r\n const shader = this._shader.getShader();\r\n shader.use();\r\n if (this._colorBlindnessMode === ColorBlindnessMode.Protanope) {\r\n shader.setUniformInt('u_type', 0);\r\n }\r\n else if (this._colorBlindnessMode === ColorBlindnessMode.Deuteranope) {\r\n shader.setUniformInt('u_type', 1);\r\n }\r\n else if (this._colorBlindnessMode === ColorBlindnessMode.Tritanope) {\r\n shader.setUniformInt('u_type', 2);\r\n }\r\n }\r\n }\r\n get colorBlindnessMode() {\r\n return this._colorBlindnessMode;\r\n }\r\n set simulate(value) {\r\n this._simulate = value;\r\n if (this._shader) {\r\n const shader = this._shader.getShader();\r\n shader.use();\r\n shader.setUniformBoolean('u_simulate', value);\r\n }\r\n }\r\n get simulate() {\r\n return this._simulate;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Debug/DebugFlags.ts\n\r\n\r\n\r\nclass ColorBlindFlags {\r\n constructor(engine) {\r\n this._engine = engine;\r\n this._colorBlindPostProcessor = new ColorBlindnessPostProcessor(ColorBlindnessMode.Protanope);\r\n }\r\n /**\r\n * Correct colors for a specified color blindness\r\n * @param colorBlindness\r\n */\r\n correct(colorBlindness) {\r\n if (this._engine.graphicsContext instanceof ExcaliburGraphicsContextWebGL) {\r\n this.clear();\r\n this._colorBlindPostProcessor.colorBlindnessMode = colorBlindness;\r\n this._colorBlindPostProcessor.simulate = false;\r\n this._engine.graphicsContext.addPostProcessor(this._colorBlindPostProcessor);\r\n }\r\n }\r\n /**\r\n * Simulate colors for a specified color blindness\r\n * @param colorBlindness\r\n */\r\n simulate(colorBlindness) {\r\n if (this._engine.graphicsContext instanceof ExcaliburGraphicsContextWebGL) {\r\n this.clear();\r\n this._colorBlindPostProcessor.colorBlindnessMode = colorBlindness;\r\n this._colorBlindPostProcessor.simulate = true;\r\n this._engine.graphicsContext.addPostProcessor(this._colorBlindPostProcessor);\r\n }\r\n }\r\n /**\r\n * Remove color blindness post processor\r\n */\r\n clear() {\r\n this._engine.graphicsContext.removePostProcessor(this._colorBlindPostProcessor);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Debug/Debug.ts\n\r\n\r\n/**\r\n * Debug statistics and flags for Excalibur. If polling these values, it would be\r\n * best to do so on the `postupdate` event for [[Engine]], after all values have been\r\n * updated during a frame.\r\n */\r\nclass Debug {\r\n constructor(engine) {\r\n /**\r\n * Performance statistics\r\n */\r\n this.stats = {\r\n /**\r\n * Current frame statistics. Engine reuses this instance, use [[FrameStats.clone]] to copy frame stats.\r\n * Best accessed on [[postframe]] event. See [[FrameStats]]\r\n */\r\n currFrame: new FrameStats(),\r\n /**\r\n * Previous frame statistics. Engine reuses this instance, use [[FrameStats.clone]] to copy frame stats.\r\n * Best accessed on [[preframe]] event. Best inspected on engine event `preframe`. See [[FrameStats]]\r\n */\r\n prevFrame: new FrameStats()\r\n };\r\n /**\r\n * Filter debug context to named entities or entity ids\r\n */\r\n this.filter = {\r\n /**\r\n * Toggle filter on or off (default off) must be on for DebugDraw to use filters\r\n */\r\n useFilter: false,\r\n /**\r\n * Query for entities by name, if the entity name contains `nameQuery` it will be included\r\n */\r\n nameQuery: '',\r\n /**\r\n * Query for Entity ids, if the id matches it will be included\r\n */\r\n ids: []\r\n };\r\n /**\r\n * Entity debug settings\r\n */\r\n this.entity = {\r\n showAll: false,\r\n showId: true,\r\n showName: false\r\n };\r\n /**\r\n * Transform component debug settings\r\n */\r\n this.transform = {\r\n showAll: false,\r\n showPosition: false,\r\n showPositionLabel: false,\r\n positionColor: Color.Yellow,\r\n showZIndex: false,\r\n showScale: false,\r\n scaleColor: Color.Green,\r\n showRotation: false,\r\n rotationColor: Color.Blue\r\n };\r\n /**\r\n * Graphics component debug settings\r\n */\r\n this.graphics = {\r\n showAll: false,\r\n showBounds: true,\r\n boundsColor: Color.Yellow\r\n };\r\n /**\r\n * Collider component debug settings\r\n */\r\n this.collider = {\r\n showAll: false,\r\n showBounds: true,\r\n boundsColor: Color.Blue,\r\n showOwner: false,\r\n showGeometry: true,\r\n geometryColor: Color.Green\r\n };\r\n /**\r\n * Physics simulation debug settings\r\n */\r\n this.physics = {\r\n showAll: false,\r\n showBroadphaseSpacePartitionDebug: false,\r\n showCollisionNormals: false,\r\n collisionNormalColor: Color.Cyan,\r\n showCollisionContacts: true,\r\n collisionContactColor: Color.Red\r\n };\r\n /**\r\n * Motion component debug settings\r\n */\r\n this.motion = {\r\n showAll: false,\r\n showVelocity: false,\r\n velocityColor: Color.Yellow,\r\n showAcceleration: false,\r\n accelerationColor: Color.Red\r\n };\r\n /**\r\n * Body component debug settings\r\n */\r\n this.body = {\r\n showAll: false,\r\n showCollisionGroup: false,\r\n showCollisionType: false,\r\n showSleeping: false,\r\n showMotion: false,\r\n showMass: false\r\n };\r\n /**\r\n * Camera debug settings\r\n */\r\n this.camera = {\r\n showAll: false,\r\n showFocus: false,\r\n focusColor: Color.Red,\r\n showZoom: false\r\n };\r\n this._engine = engine;\r\n this.colorBlindMode = new ColorBlindFlags(this._engine);\r\n }\r\n /**\r\n * Switch the current excalibur clock with the [[TestClock]] and return\r\n * it in the same running state.\r\n *\r\n * This is useful when you need to debug frame by frame.\r\n */\r\n useTestClock() {\r\n const clock = this._engine.clock;\r\n const wasRunning = clock.isRunning();\r\n clock.stop();\r\n const testClock = clock.toTestClock();\r\n if (wasRunning) {\r\n testClock.start();\r\n }\r\n this._engine.clock = testClock;\r\n return testClock;\r\n }\r\n /**\r\n * Switch the current excalibur clock with the [[StandardClock]] and\r\n * return it in the same running state.\r\n *\r\n * This is useful when you need to switch back to normal mode after\r\n * debugging.\r\n */\r\n useStandardClock() {\r\n const currentClock = this._engine.clock;\r\n const wasRunning = currentClock.isRunning();\r\n currentClock.stop();\r\n const standardClock = currentClock.toStandardClock();\r\n if (wasRunning) {\r\n standardClock.start();\r\n }\r\n this._engine.clock = standardClock;\r\n return standardClock;\r\n }\r\n}\r\n/**\r\n * Implementation of a frame's stats. Meant to have values copied via [[FrameStats.reset]], avoid\r\n * creating instances of this every frame.\r\n */\r\nclass FrameStats {\r\n constructor() {\r\n this._id = 0;\r\n this._delta = 0;\r\n this._fps = 0;\r\n this._actorStats = {\r\n alive: 0,\r\n killed: 0,\r\n ui: 0,\r\n get remaining() {\r\n return this.alive - this.killed;\r\n },\r\n get total() {\r\n return this.remaining + this.ui;\r\n }\r\n };\r\n this._durationStats = {\r\n update: 0,\r\n draw: 0,\r\n get total() {\r\n return this.update + this.draw;\r\n }\r\n };\r\n this._physicsStats = new PhysicsStats();\r\n this._graphicsStats = {\r\n drawCalls: 0,\r\n drawnImages: 0\r\n };\r\n }\r\n /**\r\n * Zero out values or clone other IFrameStat stats. Allows instance reuse.\r\n *\r\n * @param [otherStats] Optional stats to clone\r\n */\r\n reset(otherStats) {\r\n if (otherStats) {\r\n this.id = otherStats.id;\r\n this.delta = otherStats.delta;\r\n this.fps = otherStats.fps;\r\n this.actors.alive = otherStats.actors.alive;\r\n this.actors.killed = otherStats.actors.killed;\r\n this.actors.ui = otherStats.actors.ui;\r\n this.duration.update = otherStats.duration.update;\r\n this.duration.draw = otherStats.duration.draw;\r\n this._physicsStats.reset(otherStats.physics);\r\n this.graphics.drawCalls = otherStats.graphics.drawCalls;\r\n this.graphics.drawnImages = otherStats.graphics.drawnImages;\r\n }\r\n else {\r\n this.id = this.delta = this.fps = 0;\r\n this.actors.alive = this.actors.killed = this.actors.ui = 0;\r\n this.duration.update = this.duration.draw = 0;\r\n this._physicsStats.reset();\r\n this.graphics.drawnImages = this.graphics.drawCalls = 0;\r\n }\r\n }\r\n /**\r\n * Provides a clone of this instance.\r\n */\r\n clone() {\r\n const fs = new FrameStats();\r\n fs.reset(this);\r\n return fs;\r\n }\r\n /**\r\n * Gets the frame's id\r\n */\r\n get id() {\r\n return this._id;\r\n }\r\n /**\r\n * Sets the frame's id\r\n */\r\n set id(value) {\r\n this._id = value;\r\n }\r\n /**\r\n * Gets the frame's delta (time since last frame)\r\n */\r\n get delta() {\r\n return this._delta;\r\n }\r\n /**\r\n * Sets the frame's delta (time since last frame). Internal use only.\r\n * @internal\r\n */\r\n set delta(value) {\r\n this._delta = value;\r\n }\r\n /**\r\n * Gets the frame's frames-per-second (FPS)\r\n */\r\n get fps() {\r\n return this._fps;\r\n }\r\n /**\r\n * Sets the frame's frames-per-second (FPS). Internal use only.\r\n * @internal\r\n */\r\n set fps(value) {\r\n this._fps = value;\r\n }\r\n /**\r\n * Gets the frame's actor statistics\r\n */\r\n get actors() {\r\n return this._actorStats;\r\n }\r\n /**\r\n * Gets the frame's duration statistics\r\n */\r\n get duration() {\r\n return this._durationStats;\r\n }\r\n /**\r\n * Gets the frame's physics statistics\r\n */\r\n get physics() {\r\n return this._physicsStats;\r\n }\r\n /**\r\n * Gets the frame's graphics statistics\r\n */\r\n get graphics() {\r\n return this._graphicsStats;\r\n }\r\n}\r\nclass PhysicsStats {\r\n constructor() {\r\n this._pairs = 0;\r\n this._collisions = 0;\r\n this._contacts = new Map();\r\n this._fastBodies = 0;\r\n this._fastBodyCollisions = 0;\r\n this._broadphase = 0;\r\n this._narrowphase = 0;\r\n }\r\n /**\r\n * Zero out values or clone other IPhysicsStats stats. Allows instance reuse.\r\n *\r\n * @param [otherStats] Optional stats to clone\r\n */\r\n reset(otherStats) {\r\n if (otherStats) {\r\n this.pairs = otherStats.pairs;\r\n this.collisions = otherStats.collisions;\r\n this.contacts = otherStats.contacts;\r\n this.fastBodies = otherStats.fastBodies;\r\n this.fastBodyCollisions = otherStats.fastBodyCollisions;\r\n this.broadphase = otherStats.broadphase;\r\n this.narrowphase = otherStats.narrowphase;\r\n }\r\n else {\r\n this.pairs = this.collisions = this.fastBodies = 0;\r\n this.fastBodyCollisions = this.broadphase = this.narrowphase = 0;\r\n this.contacts.clear();\r\n }\r\n }\r\n /**\r\n * Provides a clone of this instance.\r\n */\r\n clone() {\r\n const ps = new PhysicsStats();\r\n ps.reset(this);\r\n return ps;\r\n }\r\n get pairs() {\r\n return this._pairs;\r\n }\r\n set pairs(value) {\r\n this._pairs = value;\r\n }\r\n get collisions() {\r\n return this._collisions;\r\n }\r\n set collisions(value) {\r\n this._collisions = value;\r\n }\r\n get contacts() {\r\n return this._contacts;\r\n }\r\n set contacts(contacts) {\r\n this._contacts = contacts;\r\n }\r\n get fastBodies() {\r\n return this._fastBodies;\r\n }\r\n set fastBodies(value) {\r\n this._fastBodies = value;\r\n }\r\n get fastBodyCollisions() {\r\n return this._fastBodyCollisions;\r\n }\r\n set fastBodyCollisions(value) {\r\n this._fastBodyCollisions = value;\r\n }\r\n get broadphase() {\r\n return this._broadphase;\r\n }\r\n set broadphase(value) {\r\n this._broadphase = value;\r\n }\r\n get narrowphase() {\r\n return this._narrowphase;\r\n }\r\n set narrowphase(value) {\r\n this._narrowphase = value;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Input/PointerScope.ts\n/**\r\n * Determines the scope of handling mouse/touch events.\r\n */\r\nvar PointerScope;\r\n(function (PointerScope) {\r\n /**\r\n * Handle events on the `canvas` element only. Events originating outside the\r\n * `canvas` will not be handled.\r\n */\r\n PointerScope[\"Canvas\"] = \"Canvas\";\r\n /**\r\n * Handles events on the entire document. All events will be handled by Excalibur.\r\n */\r\n PointerScope[\"Document\"] = \"Document\";\r\n})(PointerScope || (PointerScope = {}));\r\n\n;// CONCATENATED MODULE: ./Input/Keyboard.ts\n\r\n\r\n\r\n/**\r\n * Enum representing physical input key codes\r\n */\r\nvar Keys;\r\n(function (Keys) {\r\n // NUMPAD\r\n Keys[\"Num0\"] = \"Numpad0\";\r\n Keys[\"Num1\"] = \"Numpad1\";\r\n Keys[\"Num2\"] = \"Numpad2\";\r\n Keys[\"Num3\"] = \"Numpad3\";\r\n Keys[\"Num4\"] = \"Numpad4\";\r\n Keys[\"Num5\"] = \"Numpad5\";\r\n Keys[\"Num6\"] = \"Numpad6\";\r\n Keys[\"Num7\"] = \"Numpad7\";\r\n Keys[\"Num8\"] = \"Numpad8\";\r\n Keys[\"Num9\"] = \"Numpad9\";\r\n Keys[\"NumAdd\"] = \"NumpadAdd\";\r\n Keys[\"NumSubtract\"] = \"NumpadSubtract\";\r\n Keys[\"NumMultiply\"] = \"NumpadMultiply\";\r\n Keys[\"NumDivide\"] = \"NumpadDivide\";\r\n // NumComma = 'NumpadComma', // not x-browser\r\n Keys[\"NumDecimal\"] = \"NumpadDecimal\";\r\n Keys[\"Numpad0\"] = \"Numpad0\";\r\n Keys[\"Numpad1\"] = \"Numpad1\";\r\n Keys[\"Numpad2\"] = \"Numpad2\";\r\n Keys[\"Numpad3\"] = \"Numpad3\";\r\n Keys[\"Numpad4\"] = \"Numpad4\";\r\n Keys[\"Numpad5\"] = \"Numpad5\";\r\n Keys[\"Numpad6\"] = \"Numpad6\";\r\n Keys[\"Numpad7\"] = \"Numpad7\";\r\n Keys[\"Numpad8\"] = \"Numpad8\";\r\n Keys[\"Numpad9\"] = \"Numpad9\";\r\n Keys[\"NumpadAdd\"] = \"NumpadAdd\";\r\n Keys[\"NumpadSubtract\"] = \"NumpadSubtract\";\r\n Keys[\"NumpadMultiply\"] = \"NumpadMultiply\";\r\n Keys[\"NumpadDivide\"] = \"NumpadDivide\";\r\n // NumpadComma = 'NumpadComma', // not x-browser\r\n Keys[\"NumpadDecimal\"] = \"NumpadDecimal\";\r\n // MODIFIERS\r\n Keys[\"NumLock\"] = \"NumLock\";\r\n Keys[\"ShiftLeft\"] = \"ShiftLeft\";\r\n Keys[\"ShiftRight\"] = \"ShiftRight\";\r\n Keys[\"AltLeft\"] = \"AltLeft\";\r\n Keys[\"AltRight\"] = \"AltRight\";\r\n Keys[\"ControlLeft\"] = \"ControlLeft\";\r\n Keys[\"ControlRight\"] = \"ControlRight\";\r\n Keys[\"MetaLeft\"] = \"MetaLeft\";\r\n Keys[\"MetaRight\"] = \"MetaRight\";\r\n // NUMBERS\r\n Keys[\"Key0\"] = \"Digit0\";\r\n Keys[\"Key1\"] = \"Digit1\";\r\n Keys[\"Key2\"] = \"Digit2\";\r\n Keys[\"Key3\"] = \"Digit3\";\r\n Keys[\"Key4\"] = \"Digit4\";\r\n Keys[\"Key5\"] = \"Digit5\";\r\n Keys[\"Key6\"] = \"Digit6\";\r\n Keys[\"Key7\"] = \"Digit7\";\r\n Keys[\"Key8\"] = \"Digit8\";\r\n Keys[\"Key9\"] = \"Digit9\";\r\n Keys[\"Digit0\"] = \"Digit0\";\r\n Keys[\"Digit1\"] = \"Digit1\";\r\n Keys[\"Digit2\"] = \"Digit2\";\r\n Keys[\"Digit3\"] = \"Digit3\";\r\n Keys[\"Digit4\"] = \"Digit4\";\r\n Keys[\"Digit5\"] = \"Digit5\";\r\n Keys[\"Digit6\"] = \"Digit6\";\r\n Keys[\"Digit7\"] = \"Digit7\";\r\n Keys[\"Digit8\"] = \"Digit8\";\r\n Keys[\"Digit9\"] = \"Digit9\";\r\n // FUNCTION KEYS\r\n Keys[\"F1\"] = \"F1\";\r\n Keys[\"F2\"] = \"F2\";\r\n Keys[\"F3\"] = \"F3\";\r\n Keys[\"F4\"] = \"F4\";\r\n Keys[\"F5\"] = \"F5\";\r\n Keys[\"F6\"] = \"F6\";\r\n Keys[\"F7\"] = \"F7\";\r\n Keys[\"F8\"] = \"F8\";\r\n Keys[\"F9\"] = \"F9\";\r\n Keys[\"F10\"] = \"F10\";\r\n Keys[\"F11\"] = \"F11\";\r\n Keys[\"F12\"] = \"F12\";\r\n // LETTERS\r\n Keys[\"A\"] = \"KeyA\";\r\n Keys[\"B\"] = \"KeyB\";\r\n Keys[\"C\"] = \"KeyC\";\r\n Keys[\"D\"] = \"KeyD\";\r\n Keys[\"E\"] = \"KeyE\";\r\n Keys[\"F\"] = \"KeyF\";\r\n Keys[\"G\"] = \"KeyG\";\r\n Keys[\"H\"] = \"KeyH\";\r\n Keys[\"I\"] = \"KeyI\";\r\n Keys[\"J\"] = \"KeyJ\";\r\n Keys[\"K\"] = \"KeyK\";\r\n Keys[\"L\"] = \"KeyL\";\r\n Keys[\"M\"] = \"KeyM\";\r\n Keys[\"N\"] = \"KeyN\";\r\n Keys[\"O\"] = \"KeyO\";\r\n Keys[\"P\"] = \"KeyP\";\r\n Keys[\"Q\"] = \"KeyQ\";\r\n Keys[\"R\"] = \"KeyR\";\r\n Keys[\"S\"] = \"KeyS\";\r\n Keys[\"T\"] = \"KeyT\";\r\n Keys[\"U\"] = \"KeyU\";\r\n Keys[\"V\"] = \"KeyV\";\r\n Keys[\"W\"] = \"KeyW\";\r\n Keys[\"X\"] = \"KeyX\";\r\n Keys[\"Y\"] = \"KeyY\";\r\n Keys[\"Z\"] = \"KeyZ\";\r\n Keys[\"KeyA\"] = \"KeyA\";\r\n Keys[\"KeyB\"] = \"KeyB\";\r\n Keys[\"KeyC\"] = \"KeyC\";\r\n Keys[\"KeyD\"] = \"KeyD\";\r\n Keys[\"KeyE\"] = \"KeyE\";\r\n Keys[\"KeyF\"] = \"KeyF\";\r\n Keys[\"KeyG\"] = \"KeyG\";\r\n Keys[\"KeyH\"] = \"KeyH\";\r\n Keys[\"KeyI\"] = \"KeyI\";\r\n Keys[\"KeyJ\"] = \"KeyJ\";\r\n Keys[\"KeyK\"] = \"KeyK\";\r\n Keys[\"KeyL\"] = \"KeyL\";\r\n Keys[\"KeyM\"] = \"KeyM\";\r\n Keys[\"KeyN\"] = \"KeyN\";\r\n Keys[\"KeyO\"] = \"KeyO\";\r\n Keys[\"KeyP\"] = \"KeyP\";\r\n Keys[\"KeyQ\"] = \"KeyQ\";\r\n Keys[\"KeyR\"] = \"KeyR\";\r\n Keys[\"KeyS\"] = \"KeyS\";\r\n Keys[\"KeyT\"] = \"KeyT\";\r\n Keys[\"KeyU\"] = \"KeyU\";\r\n Keys[\"KeyV\"] = \"KeyV\";\r\n Keys[\"KeyW\"] = \"KeyW\";\r\n Keys[\"KeyX\"] = \"KeyX\";\r\n Keys[\"KeyY\"] = \"KeyY\";\r\n Keys[\"KeyZ\"] = \"KeyZ\";\r\n // SYMBOLS\r\n Keys[\"Semicolon\"] = \"Semicolon\";\r\n Keys[\"Quote\"] = \"Quote\";\r\n Keys[\"Comma\"] = \"Comma\";\r\n Keys[\"Minus\"] = \"Minus\";\r\n Keys[\"Period\"] = \"Period\";\r\n Keys[\"Slash\"] = \"Slash\";\r\n Keys[\"Equal\"] = \"Equal\";\r\n Keys[\"BracketLeft\"] = \"BracketLeft\";\r\n Keys[\"Backslash\"] = \"Backslash\";\r\n Keys[\"BracketRight\"] = \"BracketRight\";\r\n Keys[\"Backquote\"] = \"Backquote\";\r\n // DIRECTIONS\r\n Keys[\"Up\"] = \"ArrowUp\";\r\n Keys[\"Down\"] = \"ArrowDown\";\r\n Keys[\"Left\"] = \"ArrowLeft\";\r\n Keys[\"Right\"] = \"ArrowRight\";\r\n Keys[\"ArrowUp\"] = \"ArrowUp\";\r\n Keys[\"ArrowDown\"] = \"ArrowDown\";\r\n Keys[\"ArrowLeft\"] = \"ArrowLeft\";\r\n Keys[\"ArrowRight\"] = \"ArrowRight\";\r\n // OTHER\r\n Keys[\"Space\"] = \"Space\";\r\n Keys[\"Backspace\"] = \"Backspace\";\r\n Keys[\"Delete\"] = \"Delete\";\r\n Keys[\"Esc\"] = \"Escape\";\r\n Keys[\"Escape\"] = \"Escape\";\r\n Keys[\"Enter\"] = \"Enter\";\r\n Keys[\"NumpadEnter\"] = \"NumpadEnter\";\r\n Keys[\"ContextMenu\"] = \"ContextMenu\";\r\n})(Keys || (Keys = {}));\r\n/**\r\n * Event thrown on a game object for a key event\r\n */\r\nclass KeyEvent extends GameEvent {\r\n /**\r\n * @param key The key responsible for throwing the event\r\n * @param value The key's typed value the browser detected\r\n * @param originalEvent The original keyboard event that Excalibur handled\r\n */\r\n constructor(key, value, originalEvent) {\r\n super();\r\n this.key = key;\r\n this.value = value;\r\n this.originalEvent = originalEvent;\r\n }\r\n}\r\n/**\r\n * Provides keyboard support for Excalibur.\r\n */\r\nclass Keyboard extends Class {\r\n constructor() {\r\n super();\r\n this._keys = [];\r\n this._keysUp = [];\r\n this._keysDown = [];\r\n this._handleKeyDown = (ev) => {\r\n const code = ev.code;\r\n if (this._keys.indexOf(code) === -1) {\r\n this._keys.push(code);\r\n this._keysDown.push(code);\r\n const keyEvent = new KeyEvent(code, ev.key, ev);\r\n this.eventDispatcher.emit('down', keyEvent);\r\n this.eventDispatcher.emit('press', keyEvent);\r\n }\r\n };\r\n this._handleKeyUp = (ev) => {\r\n const code = ev.code;\r\n const key = this._keys.indexOf(code);\r\n this._keys.splice(key, 1);\r\n this._keysUp.push(code);\r\n const keyEvent = new KeyEvent(code, ev.key, ev);\r\n // alias the old api, we may want to deprecate this in the future\r\n this.eventDispatcher.emit('up', keyEvent);\r\n this.eventDispatcher.emit('release', keyEvent);\r\n };\r\n }\r\n on(eventName, handler) {\r\n super.on(eventName, handler);\r\n }\r\n /**\r\n * Initialize Keyboard event listeners\r\n */\r\n init(global) {\r\n if (!global) {\r\n try {\r\n // Try and listen to events on top window frame if within an iframe.\r\n //\r\n // See https://github.com/excaliburjs/Excalibur/issues/1294\r\n //\r\n // Attempt to add an event listener, which triggers a DOMException on\r\n // cross-origin iframes\r\n const noop = () => {\r\n return;\r\n };\r\n window.top.addEventListener('blur', noop);\r\n window.top.removeEventListener('blur', noop);\r\n // this will be the same as window if not embedded within an iframe\r\n global = window.top;\r\n }\r\n catch (_a) {\r\n // fallback to current frame\r\n global = window;\r\n Logger.getInstance().warn('Failed to bind to keyboard events to top frame. ' +\r\n 'If you are trying to embed Excalibur in a cross-origin iframe, keyboard events will not fire.');\r\n }\r\n }\r\n global.addEventListener('blur', () => {\r\n this._keys.length = 0; // empties array efficiently\r\n });\r\n // key up is on window because canvas cannot have focus\r\n global.addEventListener('keyup', this._handleKeyUp);\r\n // key down is on window because canvas cannot have focus\r\n global.addEventListener('keydown', this._handleKeyDown);\r\n }\r\n update() {\r\n // Reset keysDown and keysUp after update is complete\r\n this._keysDown.length = 0;\r\n this._keysUp.length = 0;\r\n // Emit synthetic \"hold\" event\r\n for (let i = 0; i < this._keys.length; i++) {\r\n this.eventDispatcher.emit('hold', new KeyEvent(this._keys[i]));\r\n }\r\n }\r\n /**\r\n * Gets list of keys being pressed down\r\n */\r\n getKeys() {\r\n return this._keys;\r\n }\r\n /**\r\n * Tests if a certain key was just pressed this frame. This is cleared at the end of the update frame.\r\n * @param key Test whether a key was just pressed\r\n */\r\n wasPressed(key) {\r\n return this._keysDown.indexOf(key) > -1;\r\n }\r\n /**\r\n * Tests if a certain key is held down. This is persisted between frames.\r\n * @param key Test whether a key is held down\r\n */\r\n isHeld(key) {\r\n return this._keys.indexOf(key) > -1;\r\n }\r\n /**\r\n * Tests if a certain key was just released this frame. This is cleared at the end of the update frame.\r\n * @param key Test whether a key was just released\r\n */\r\n wasReleased(key) {\r\n return this._keysUp.indexOf(key) > -1;\r\n }\r\n /**\r\n * Trigger a manual key event\r\n * @param type\r\n * @param key\r\n * @param character\r\n */\r\n triggerEvent(type, key, character) {\r\n if (type === 'down') {\r\n this._handleKeyDown(new KeyboardEvent('keydown', {\r\n code: key,\r\n key: character !== null && character !== void 0 ? character : null\r\n }));\r\n }\r\n if (type === 'up') {\r\n this._handleKeyUp(new KeyboardEvent('keyup', {\r\n code: key,\r\n key: character !== null && character !== void 0 ? character : null\r\n }));\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Input/Gamepad.ts\n\r\n\r\n/**\r\n * Excalibur leverages the HTML5 Gamepad API [where it is supported](http://caniuse.com/#feat=gamepad)\r\n * to provide controller support for your games.\r\n */\r\nclass Gamepads extends Class {\r\n constructor() {\r\n super();\r\n /**\r\n * Whether or not to poll for Gamepad input (default: `false`)\r\n */\r\n this.enabled = false;\r\n /**\r\n * Whether or not Gamepad API is supported\r\n */\r\n this.supported = !!navigator.getGamepads;\r\n this._gamePadTimeStamps = [0, 0, 0, 0];\r\n this._oldPads = [];\r\n this._pads = [];\r\n this._initSuccess = false;\r\n this._navigator = navigator;\r\n this._minimumConfiguration = null;\r\n }\r\n init() {\r\n if (!this.supported) {\r\n return;\r\n }\r\n if (this._initSuccess) {\r\n return;\r\n }\r\n // In Chrome, this will return 4 undefined items until a button is pressed\r\n // In FF, this will not return any items until a button is pressed\r\n this._oldPads = this._clonePads(this._navigator.getGamepads());\r\n if (this._oldPads.length && this._oldPads[0]) {\r\n this._initSuccess = true;\r\n }\r\n }\r\n /**\r\n * Sets the minimum gamepad configuration, for example {axis: 4, buttons: 4} means\r\n * this game requires at minimum 4 axis inputs and 4 buttons, this is not restrictive\r\n * all other controllers with more axis or buttons are valid as well. If no minimum\r\n * configuration is set all pads are valid.\r\n */\r\n setMinimumGamepadConfiguration(config) {\r\n this._enableAndUpdate(); // if config is used, implicitly enable\r\n this._minimumConfiguration = config;\r\n }\r\n /**\r\n * When implicitly enabled, set the enabled flag and run an update so information is updated\r\n */\r\n _enableAndUpdate() {\r\n if (!this.enabled) {\r\n this.enabled = true;\r\n this.update();\r\n }\r\n }\r\n /**\r\n * Checks a navigator gamepad against the minimum configuration if present.\r\n */\r\n _isGamepadValid(pad) {\r\n if (!this._minimumConfiguration) {\r\n return true;\r\n }\r\n if (!pad) {\r\n return false;\r\n }\r\n const axesLength = pad.axes.filter((value) => {\r\n return typeof value !== undefined;\r\n }).length;\r\n const buttonLength = pad.buttons.filter((value) => {\r\n return typeof value !== undefined;\r\n }).length;\r\n return axesLength >= this._minimumConfiguration.axis && buttonLength >= this._minimumConfiguration.buttons && pad.connected;\r\n }\r\n on(eventName, handler) {\r\n this._enableAndUpdate(); // implicitly enable\r\n super.on(eventName, handler);\r\n }\r\n off(eventName, handler) {\r\n this._enableAndUpdate(); // implicitly enable\r\n super.off(eventName, handler);\r\n }\r\n /**\r\n * Updates Gamepad state and publishes Gamepad events\r\n */\r\n update() {\r\n if (!this.enabled || !this.supported) {\r\n return;\r\n }\r\n this.init();\r\n const gamepads = this._navigator.getGamepads();\r\n for (let i = 0; i < gamepads.length; i++) {\r\n if (!gamepads[i]) {\r\n const gamepad = this.at(i);\r\n // If was connected, but now isn't emit the disconnect event\r\n if (gamepad.connected) {\r\n this.eventDispatcher.emit('disconnect', new GamepadDisconnectEvent(i, gamepad));\r\n }\r\n // Reset connection status\r\n gamepad.connected = false;\r\n continue;\r\n }\r\n else {\r\n if (!this.at(i).connected && this._isGamepadValid(gamepads[i])) {\r\n this.eventDispatcher.emit('connect', new GamepadConnectEvent(i, this.at(i)));\r\n }\r\n // Set connection status\r\n this.at(i).connected = true;\r\n }\r\n // Only supported in Chrome\r\n if (gamepads[i].timestamp && gamepads[i].timestamp === this._gamePadTimeStamps[i]) {\r\n continue;\r\n }\r\n this._gamePadTimeStamps[i] = gamepads[i].timestamp;\r\n // Add reference to navigator gamepad\r\n this.at(i).navigatorGamepad = gamepads[i];\r\n // Buttons\r\n let b, bi, a, ai, value;\r\n for (b in Buttons) {\r\n bi = Buttons[b];\r\n if (typeof bi === 'number') {\r\n if (gamepads[i].buttons[bi]) {\r\n value = gamepads[i].buttons[bi].value;\r\n if (value !== this._oldPads[i].getButton(bi)) {\r\n if (gamepads[i].buttons[bi].pressed) {\r\n this.at(i).updateButton(bi, value);\r\n this.at(i).eventDispatcher.emit('button', new GamepadButtonEvent(bi, value, this.at(i)));\r\n }\r\n else {\r\n this.at(i).updateButton(bi, 0);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n // Axes\r\n for (a in Axes) {\r\n ai = Axes[a];\r\n if (typeof ai === 'number') {\r\n value = gamepads[i].axes[ai];\r\n if (value !== this._oldPads[i].getAxes(ai)) {\r\n this.at(i).updateAxes(ai, value);\r\n this.at(i).eventDispatcher.emit('axis', new GamepadAxisEvent(ai, value, this.at(i)));\r\n }\r\n }\r\n }\r\n this._oldPads[i] = this._clonePad(gamepads[i]);\r\n }\r\n }\r\n /**\r\n * Safely retrieves a Gamepad at a specific index and creates one if it doesn't yet exist\r\n */\r\n at(index) {\r\n this._enableAndUpdate(); // implicitly enable gamepads when at() is called\r\n if (index >= this._pads.length) {\r\n // Ensure there is a pad to retrieve\r\n for (let i = this._pads.length - 1, max = index; i < max; i++) {\r\n this._pads.push(new Gamepad());\r\n this._oldPads.push(new Gamepad());\r\n }\r\n }\r\n return this._pads[index];\r\n }\r\n /**\r\n * Returns a list of all valid gamepads that meet the minimum configuration requirement.\r\n */\r\n getValidGamepads() {\r\n this._enableAndUpdate();\r\n const result = [];\r\n for (let i = 0; i < this._pads.length; i++) {\r\n if (this._isGamepadValid(this.at(i).navigatorGamepad) && this.at(i).connected) {\r\n result.push(this.at(i));\r\n }\r\n }\r\n return result;\r\n }\r\n /**\r\n * Gets the number of connected gamepads\r\n */\r\n count() {\r\n return this._pads.filter((p) => p.connected).length;\r\n }\r\n _clonePads(pads) {\r\n const arr = [];\r\n for (let i = 0, len = pads.length; i < len; i++) {\r\n arr.push(this._clonePad(pads[i]));\r\n }\r\n return arr;\r\n }\r\n /**\r\n * Fastest way to clone a known object is to do it yourself\r\n */\r\n _clonePad(pad) {\r\n let i, len;\r\n const clonedPad = new Gamepad();\r\n if (!pad) {\r\n return clonedPad;\r\n }\r\n for (i = 0, len = pad.buttons.length; i < len; i++) {\r\n if (pad.buttons[i]) {\r\n clonedPad.updateButton(i, pad.buttons[i].value);\r\n }\r\n }\r\n for (i = 0, len = pad.axes.length; i < len; i++) {\r\n clonedPad.updateAxes(i, pad.axes[i]);\r\n }\r\n return clonedPad;\r\n }\r\n}\r\n/**\r\n * The minimum value an axis has to move before considering it a change\r\n */\r\nGamepads.MinAxisMoveThreshold = 0.05;\r\n/**\r\n * Gamepad holds state information for a connected controller. See [[Gamepads]]\r\n * for more information on handling controller input.\r\n */\r\nclass Gamepad extends Class {\r\n constructor() {\r\n super();\r\n this.connected = false;\r\n this._buttons = new Array(16);\r\n this._axes = new Array(4);\r\n for (let i = 0; i < this._buttons.length; i++) {\r\n this._buttons[i] = 0;\r\n }\r\n for (let i = 0; i < this._axes.length; i++) {\r\n this._axes[i] = 0;\r\n }\r\n }\r\n /**\r\n * Whether or not the given button is pressed\r\n * @param button The button to query\r\n * @param threshold The threshold over which the button is considered to be pressed\r\n */\r\n isButtonPressed(button, threshold = 1) {\r\n return this._buttons[button] >= threshold;\r\n }\r\n /**\r\n * Gets the given button value between 0 and 1\r\n */\r\n getButton(button) {\r\n return this._buttons[button];\r\n }\r\n /**\r\n * Gets the given axis value between -1 and 1. Values below\r\n * [[MinAxisMoveThreshold]] are considered 0.\r\n */\r\n getAxes(axes) {\r\n const value = this._axes[axes];\r\n if (Math.abs(value) < Gamepads.MinAxisMoveThreshold) {\r\n return 0;\r\n }\r\n else {\r\n return value;\r\n }\r\n }\r\n updateButton(buttonIndex, value) {\r\n this._buttons[buttonIndex] = value;\r\n }\r\n updateAxes(axesIndex, value) {\r\n this._axes[axesIndex] = value;\r\n }\r\n}\r\n/**\r\n * Gamepad Buttons enumeration\r\n */\r\nvar Buttons;\r\n(function (Buttons) {\r\n /**\r\n * Face 1 button (e.g. A)\r\n */\r\n Buttons[Buttons[\"Face1\"] = 0] = \"Face1\";\r\n /**\r\n * Face 2 button (e.g. B)\r\n */\r\n Buttons[Buttons[\"Face2\"] = 1] = \"Face2\";\r\n /**\r\n * Face 3 button (e.g. X)\r\n */\r\n Buttons[Buttons[\"Face3\"] = 2] = \"Face3\";\r\n /**\r\n * Face 4 button (e.g. Y)\r\n */\r\n Buttons[Buttons[\"Face4\"] = 3] = \"Face4\";\r\n /**\r\n * Left bumper button\r\n */\r\n Buttons[Buttons[\"LeftBumper\"] = 4] = \"LeftBumper\";\r\n /**\r\n * Right bumper button\r\n */\r\n Buttons[Buttons[\"RightBumper\"] = 5] = \"RightBumper\";\r\n /**\r\n * Left trigger button\r\n */\r\n Buttons[Buttons[\"LeftTrigger\"] = 6] = \"LeftTrigger\";\r\n /**\r\n * Right trigger button\r\n */\r\n Buttons[Buttons[\"RightTrigger\"] = 7] = \"RightTrigger\";\r\n /**\r\n * Select button\r\n */\r\n Buttons[Buttons[\"Select\"] = 8] = \"Select\";\r\n /**\r\n * Start button\r\n */\r\n Buttons[Buttons[\"Start\"] = 9] = \"Start\";\r\n /**\r\n * Left analog stick press (e.g. L3)\r\n */\r\n Buttons[Buttons[\"LeftStick\"] = 10] = \"LeftStick\";\r\n /**\r\n * Right analog stick press (e.g. R3)\r\n */\r\n Buttons[Buttons[\"RightStick\"] = 11] = \"RightStick\";\r\n /**\r\n * D-pad up\r\n */\r\n Buttons[Buttons[\"DpadUp\"] = 12] = \"DpadUp\";\r\n /**\r\n * D-pad down\r\n */\r\n Buttons[Buttons[\"DpadDown\"] = 13] = \"DpadDown\";\r\n /**\r\n * D-pad left\r\n */\r\n Buttons[Buttons[\"DpadLeft\"] = 14] = \"DpadLeft\";\r\n /**\r\n * D-pad right\r\n */\r\n Buttons[Buttons[\"DpadRight\"] = 15] = \"DpadRight\";\r\n})(Buttons || (Buttons = {}));\r\n/**\r\n * Gamepad Axes enumeration\r\n */\r\nvar Axes;\r\n(function (Axes) {\r\n /**\r\n * Left analogue stick X direction\r\n */\r\n Axes[Axes[\"LeftStickX\"] = 0] = \"LeftStickX\";\r\n /**\r\n * Left analogue stick Y direction\r\n */\r\n Axes[Axes[\"LeftStickY\"] = 1] = \"LeftStickY\";\r\n /**\r\n * Right analogue stick X direction\r\n */\r\n Axes[Axes[\"RightStickX\"] = 2] = \"RightStickX\";\r\n /**\r\n * Right analogue stick Y direction\r\n */\r\n Axes[Axes[\"RightStickY\"] = 3] = \"RightStickY\";\r\n})(Axes || (Axes = {}));\r\n\n;// CONCATENATED MODULE: ./Util/Browser.ts\nclass BrowserComponent {\r\n constructor(nativeComponent) {\r\n this.nativeComponent = nativeComponent;\r\n this._paused = false;\r\n this._nativeHandlers = {};\r\n }\r\n on(eventName, handler) {\r\n if (this._nativeHandlers[eventName]) {\r\n this.off(eventName, this._nativeHandlers[eventName]);\r\n }\r\n this._nativeHandlers[eventName] = this._decorate(handler);\r\n this.nativeComponent.addEventListener(eventName, this._nativeHandlers[eventName]);\r\n }\r\n off(eventName, handler) {\r\n if (!handler) {\r\n handler = this._nativeHandlers[eventName];\r\n }\r\n this.nativeComponent.removeEventListener(eventName, handler);\r\n this._nativeHandlers[eventName] = null;\r\n }\r\n _decorate(handler) {\r\n return (evt) => {\r\n if (!this._paused) {\r\n handler(evt);\r\n }\r\n };\r\n }\r\n pause() {\r\n this._paused = true;\r\n }\r\n resume() {\r\n this._paused = false;\r\n }\r\n clear() {\r\n for (const event in this._nativeHandlers) {\r\n this.off(event);\r\n }\r\n }\r\n}\r\nclass BrowserEvents {\r\n constructor(_windowGlobal, _documentGlobal) {\r\n this._windowGlobal = _windowGlobal;\r\n this._documentGlobal = _documentGlobal;\r\n this._windowComponent = new BrowserComponent(this._windowGlobal);\r\n this._documentComponent = new BrowserComponent(this._documentGlobal);\r\n }\r\n get window() {\r\n return this._windowComponent;\r\n }\r\n get document() {\r\n return this._documentComponent;\r\n }\r\n pause() {\r\n this.window.pause();\r\n this.document.pause();\r\n }\r\n resume() {\r\n this.window.resume();\r\n this.document.resume();\r\n }\r\n clear() {\r\n this.window.clear();\r\n this.document.clear();\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Math/global-coordinates.ts\n\r\nclass GlobalCoordinates {\r\n constructor(worldPos, pagePos, screenPos) {\r\n this.worldPos = worldPos;\r\n this.pagePos = pagePos;\r\n this.screenPos = screenPos;\r\n }\r\n static fromPagePosition(xOrPos, yOrEngine, engineOrUndefined) {\r\n let pageX;\r\n let pageY;\r\n let pagePos;\r\n let engine;\r\n if (arguments.length === 3) {\r\n pageX = xOrPos;\r\n pageY = yOrEngine;\r\n pagePos = new Vector(pageX, pageY);\r\n engine = engineOrUndefined;\r\n }\r\n else {\r\n pagePos = xOrPos;\r\n pageX = pagePos.x;\r\n pageY = pagePos.y;\r\n engine = yOrEngine;\r\n }\r\n const screenPos = engine.screen.pageToScreenCoordinates(pagePos);\r\n const worldPos = engine.screen.screenToWorldCoordinates(screenPos);\r\n return new GlobalCoordinates(worldPos, pagePos, screenPos);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Input/PointerEvent.ts\nclass PointerEvent {\r\n constructor(type, pointerId, button, pointerType, coordinates, nativeEvent) {\r\n this.type = type;\r\n this.pointerId = pointerId;\r\n this.button = button;\r\n this.pointerType = pointerType;\r\n this.coordinates = coordinates;\r\n this.nativeEvent = nativeEvent;\r\n this.active = true;\r\n }\r\n cancel() {\r\n this.active = false;\r\n }\r\n get pagePos() {\r\n return this.coordinates.pagePos;\r\n }\r\n get screenPos() {\r\n return this.coordinates.screenPos;\r\n }\r\n get worldPos() {\r\n return this.coordinates.worldPos;\r\n }\r\n ;\r\n}\r\n\n;// CONCATENATED MODULE: ./Input/WheelEvent.ts\nclass WheelEvent {\r\n constructor(x, y, pageX, pageY, screenX, screenY, index, deltaX, deltaY, deltaZ, deltaMode, ev) {\r\n this.x = x;\r\n this.y = y;\r\n this.pageX = pageX;\r\n this.pageY = pageY;\r\n this.screenX = screenX;\r\n this.screenY = screenY;\r\n this.index = index;\r\n this.deltaX = deltaX;\r\n this.deltaY = deltaY;\r\n this.deltaZ = deltaZ;\r\n this.deltaMode = deltaMode;\r\n this.ev = ev;\r\n this.active = true;\r\n }\r\n cancel() {\r\n this.active = false;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Input/PointerAbstraction.ts\n\r\n\r\nclass PointerAbstraction extends Class {\r\n constructor() {\r\n super();\r\n /**\r\n * The last position on the document this pointer was at. Can be `null` if pointer was never active.\r\n */\r\n this.lastPagePos = Vector.Zero;\r\n /**\r\n * The last position on the screen this pointer was at. Can be `null` if pointer was never active.\r\n */\r\n this.lastScreenPos = Vector.Zero;\r\n /**\r\n * The last position in the game world coordinates this pointer was at. Can be `null` if pointer was never active.\r\n */\r\n this.lastWorldPos = Vector.Zero;\r\n this._onPointerMove = (ev) => {\r\n this.lastPagePos = new Vector(ev.pagePos.x, ev.pagePos.y);\r\n this.lastScreenPos = new Vector(ev.screenPos.x, ev.screenPos.y);\r\n this.lastWorldPos = new Vector(ev.worldPos.x, ev.worldPos.y);\r\n };\r\n this._onPointerDown = (ev) => {\r\n this.lastPagePos = new Vector(ev.pagePos.x, ev.pagePos.y);\r\n this.lastScreenPos = new Vector(ev.screenPos.x, ev.screenPos.y);\r\n this.lastWorldPos = new Vector(ev.worldPos.x, ev.worldPos.y);\r\n };\r\n this.on('move', this._onPointerMove);\r\n this.on('down', this._onPointerDown);\r\n }\r\n on(event, handler) {\r\n super.on(event, handler);\r\n }\r\n once(event, handler) {\r\n super.once(event, handler);\r\n }\r\n off(event, handler) {\r\n super.off(event, handler);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Input/WheelDeltaMode.ts\nvar WheelDeltaMode;\r\n(function (WheelDeltaMode) {\r\n WheelDeltaMode[\"Pixel\"] = \"Pixel\";\r\n WheelDeltaMode[\"Line\"] = \"Line\";\r\n WheelDeltaMode[\"Page\"] = \"Page\";\r\n})(WheelDeltaMode || (WheelDeltaMode = {}));\r\n\n;// CONCATENATED MODULE: ./Input/NativePointerButton.ts\n/**\r\n * Native browser button enumeration\r\n */\r\nvar NativePointerButton;\r\n(function (NativePointerButton) {\r\n NativePointerButton[NativePointerButton[\"NoButton\"] = -1] = \"NoButton\";\r\n NativePointerButton[NativePointerButton[\"Left\"] = 0] = \"Left\";\r\n NativePointerButton[NativePointerButton[\"Middle\"] = 1] = \"Middle\";\r\n NativePointerButton[NativePointerButton[\"Right\"] = 2] = \"Right\";\r\n NativePointerButton[NativePointerButton[\"Unknown\"] = 3] = \"Unknown\";\r\n})(NativePointerButton || (NativePointerButton = {}));\r\n\n;// CONCATENATED MODULE: ./Input/PointerButton.ts\n/**\r\n * The mouse button being pressed.\r\n */\r\nvar PointerButton;\r\n(function (PointerButton) {\r\n PointerButton[\"Left\"] = \"Left\";\r\n PointerButton[\"Middle\"] = \"Middle\";\r\n PointerButton[\"Right\"] = \"Right\";\r\n PointerButton[\"Unknown\"] = \"Unknown\";\r\n PointerButton[\"NoButton\"] = \"NoButton\";\r\n})(PointerButton || (PointerButton = {}));\r\n\n;// CONCATENATED MODULE: ./Input/PointerType.ts\n/**\r\n * The type of pointer for a [[PointerEvent]].\r\n */\r\nvar PointerType;\r\n(function (PointerType) {\r\n PointerType[\"Touch\"] = \"Touch\";\r\n PointerType[\"Mouse\"] = \"Mouse\";\r\n PointerType[\"Pen\"] = \"Pen\";\r\n PointerType[\"Unknown\"] = \"Unknown\";\r\n})(PointerType || (PointerType = {}));\r\n\n;// CONCATENATED MODULE: ./Input/PointerEventReceiver.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Is this event a native touch event?\r\n */\r\nfunction isTouchEvent(value) {\r\n // Guard for Safari <= 13.1\r\n return globalThis.TouchEvent && value instanceof globalThis.TouchEvent;\r\n}\r\n/**\r\n * Is this event a native pointer event\r\n */\r\nfunction isPointerEvent(value) {\r\n // Guard for Safari <= 13.1\r\n return globalThis.PointerEvent && value instanceof globalThis.PointerEvent;\r\n}\r\n/**\r\n * The PointerEventProcessor is responsible for collecting all the events from the canvas and transforming them into GlobalCoordinates\r\n */\r\nclass PointerEventReceiver extends Class {\r\n constructor(target, engine) {\r\n super();\r\n this.target = target;\r\n this.engine = engine;\r\n this.primary = new PointerAbstraction();\r\n this._activeNativePointerIdsToNormalized = new Map();\r\n this.lastFramePointerCoords = new Map();\r\n this.currentFramePointerCoords = new Map();\r\n this.currentFramePointerDown = new Map();\r\n this.lastFramePointerDown = new Map();\r\n this.currentFrameDown = [];\r\n this.currentFrameUp = [];\r\n this.currentFrameMove = [];\r\n this.currentFrameCancel = [];\r\n this.currentFrameWheel = [];\r\n this._pointers = [this.primary];\r\n this._boundHandle = this._handle.bind(this);\r\n this._boundWheel = this._handleWheel.bind(this);\r\n }\r\n /**\r\n * Creates a new PointerEventReceiver with a new target and engine while preserving existing pointer event\r\n * handlers.\r\n * @param target\r\n * @param engine\r\n */\r\n recreate(target, engine) {\r\n const eventReceiver = new PointerEventReceiver(target, engine);\r\n eventReceiver.primary = this.primary;\r\n eventReceiver._pointers = this._pointers;\r\n return eventReceiver;\r\n }\r\n /**\r\n * Locates a specific pointer by id, creates it if it doesn't exist\r\n * @param index\r\n */\r\n at(index) {\r\n if (index >= this._pointers.length) {\r\n // Ensure there is a pointer to retrieve\r\n for (let i = this._pointers.length - 1, max = index; i < max; i++) {\r\n this._pointers.push(new PointerAbstraction());\r\n }\r\n }\r\n return this._pointers[index];\r\n }\r\n /**\r\n * The number of pointers currently being tracked by excalibur\r\n */\r\n count() {\r\n return this._pointers.length;\r\n }\r\n /**\r\n * Is the specified pointer id down this frame\r\n * @param pointerId\r\n */\r\n isDown(pointerId) {\r\n var _a;\r\n return (_a = this.currentFramePointerDown.get(pointerId)) !== null && _a !== void 0 ? _a : false;\r\n }\r\n /**\r\n * Was the specified pointer id down last frame\r\n * @param pointerId\r\n */\r\n wasDown(pointerId) {\r\n var _a;\r\n return (_a = this.lastFramePointerDown.get(pointerId)) !== null && _a !== void 0 ? _a : false;\r\n }\r\n /**\r\n * Whether the Pointer is currently dragging.\r\n */\r\n isDragging(pointerId) {\r\n return this.isDown(pointerId);\r\n }\r\n /**\r\n * Whether the Pointer just started dragging.\r\n */\r\n isDragStart(pointerId) {\r\n return this.isDown(pointerId) && !this.wasDown(pointerId);\r\n }\r\n /**\r\n * Whether the Pointer just ended dragging.\r\n */\r\n isDragEnd(pointerId) {\r\n return !this.isDown(pointerId) && this.wasDown(pointerId);\r\n }\r\n on(event, handler) {\r\n super.on(event, handler);\r\n }\r\n once(event, handler) {\r\n super.once(event, handler);\r\n }\r\n off(event, handler) {\r\n super.off(event, handler);\r\n }\r\n /**\r\n * Called internally by excalibur\r\n *\r\n * Updates the current frame pointer info and emits raw pointer events\r\n *\r\n * This does not emit events to entities, see PointerSystem\r\n */\r\n update() {\r\n this.lastFramePointerDown = new Map(this.currentFramePointerDown);\r\n this.lastFramePointerCoords = new Map(this.currentFramePointerCoords);\r\n for (const event of this.currentFrameDown) {\r\n this.emit('down', event);\r\n const pointer = this.at(event.pointerId);\r\n pointer.emit('down', event);\r\n this.primary.emit('pointerdown', event);\r\n }\r\n for (const event of this.currentFrameUp) {\r\n this.emit('up', event);\r\n const pointer = this.at(event.pointerId);\r\n pointer.emit('up', event);\r\n }\r\n for (const event of this.currentFrameMove) {\r\n this.emit('move', event);\r\n const pointer = this.at(event.pointerId);\r\n pointer.emit('move', event);\r\n }\r\n for (const event of this.currentFrameCancel) {\r\n this.emit('cancel', event);\r\n const pointer = this.at(event.pointerId);\r\n pointer.emit('cancel', event);\r\n }\r\n for (const event of this.currentFrameWheel) {\r\n this.emit('wheel', event);\r\n this.primary.emit('pointerwheel', event);\r\n }\r\n }\r\n /**\r\n * Clears the current frame event and pointer data\r\n */\r\n clear() {\r\n for (const event of this.currentFrameUp) {\r\n this.currentFramePointerCoords.delete(event.pointerId);\r\n const ids = this._activeNativePointerIdsToNormalized.entries();\r\n for (const [native, normalized] of ids) {\r\n if (normalized === event.pointerId) {\r\n this._activeNativePointerIdsToNormalized.delete(native);\r\n }\r\n }\r\n }\r\n this.currentFrameDown.length = 0;\r\n this.currentFrameUp.length = 0;\r\n this.currentFrameMove.length = 0;\r\n this.currentFrameCancel.length = 0;\r\n this.currentFrameWheel.length = 0;\r\n }\r\n /**\r\n * Initializes the pointer event receiver so that it can start listening to native\r\n * browser events.\r\n */\r\n init() {\r\n // Disabling the touch action avoids browser/platform gestures from firing on the canvas\r\n // It is important on mobile to have touch action 'none'\r\n // https://stackoverflow.com/questions/48124372/pointermove-event-not-working-with-touch-why-not\r\n if (this.target === this.engine.canvas) {\r\n this.engine.canvas.style.touchAction = 'none';\r\n }\r\n else {\r\n document.body.style.touchAction = 'none';\r\n }\r\n // Preferred pointer events\r\n if (window.PointerEvent) {\r\n this.target.addEventListener('pointerdown', this._boundHandle);\r\n this.target.addEventListener('pointerup', this._boundHandle);\r\n this.target.addEventListener('pointermove', this._boundHandle);\r\n this.target.addEventListener('pointercancel', this._boundHandle);\r\n }\r\n else {\r\n // Touch Events\r\n this.target.addEventListener('touchstart', this._boundHandle);\r\n this.target.addEventListener('touchend', this._boundHandle);\r\n this.target.addEventListener('touchmove', this._boundHandle);\r\n this.target.addEventListener('touchcancel', this._boundHandle);\r\n // Mouse Events\r\n this.target.addEventListener('mousedown', this._boundHandle);\r\n this.target.addEventListener('mouseup', this._boundHandle);\r\n this.target.addEventListener('mousemove', this._boundHandle);\r\n }\r\n // MDN MouseWheelEvent\r\n const wheelOptions = {\r\n passive: !(this.engine.pageScrollPreventionMode === ScrollPreventionMode.All ||\r\n this.engine.pageScrollPreventionMode === ScrollPreventionMode.Canvas)\r\n };\r\n if ('onwheel' in document.createElement('div')) {\r\n // Modern Browsers\r\n this.target.addEventListener('wheel', this._boundWheel, wheelOptions);\r\n }\r\n else if (document.onmousewheel !== undefined) {\r\n // Webkit and IE\r\n this.target.addEventListener('mousewheel', this._boundWheel, wheelOptions);\r\n }\r\n else {\r\n // Remaining browser and older Firefox\r\n this.target.addEventListener('MozMousePixelScroll', this._boundWheel, wheelOptions);\r\n }\r\n }\r\n detach() {\r\n // Preferred pointer events\r\n if (window.PointerEvent) {\r\n this.target.removeEventListener('pointerdown', this._boundHandle);\r\n this.target.removeEventListener('pointerup', this._boundHandle);\r\n this.target.removeEventListener('pointermove', this._boundHandle);\r\n this.target.removeEventListener('pointercancel', this._boundHandle);\r\n }\r\n else {\r\n // Touch Events\r\n this.target.removeEventListener('touchstart', this._boundHandle);\r\n this.target.removeEventListener('touchend', this._boundHandle);\r\n this.target.removeEventListener('touchmove', this._boundHandle);\r\n this.target.removeEventListener('touchcancel', this._boundHandle);\r\n // Mouse Events\r\n this.target.removeEventListener('mousedown', this._boundHandle);\r\n this.target.removeEventListener('mouseup', this._boundHandle);\r\n this.target.removeEventListener('mousemove', this._boundHandle);\r\n }\r\n if ('onwheel' in document.createElement('div')) {\r\n // Modern Browsers\r\n this.target.removeEventListener('wheel', this._boundWheel);\r\n }\r\n else if (document.onmousewheel !== undefined) {\r\n // Webkit and IE\r\n this.target.addEventListener('mousewheel', this._boundWheel);\r\n }\r\n else {\r\n // Remaining browser and older Firefox\r\n this.target.addEventListener('MozMousePixelScroll', this._boundWheel);\r\n }\r\n }\r\n /**\r\n * Take native pointer id and map it to index in active pointers\r\n * @param nativePointerId\r\n */\r\n _normalizePointerId(nativePointerId) {\r\n // Add to the the native pointer set id\r\n this._activeNativePointerIdsToNormalized.set(nativePointerId, -1);\r\n // Native pointer ids in ascending order\r\n const currentPointerIds = Array.from(this._activeNativePointerIdsToNormalized.keys()).sort((a, b) => a - b);\r\n // The index into sorted ids will be the new id, will always have an id\r\n const id = currentPointerIds.findIndex(p => p === nativePointerId);\r\n // Save the mapping so we can reverse it later\r\n this._activeNativePointerIdsToNormalized.set(nativePointerId, id);\r\n // ignore pointer because game isn't watching\r\n return id;\r\n }\r\n /**\r\n * Responsible for handling and parsing pointer events\r\n */\r\n _handle(ev) {\r\n ev.preventDefault();\r\n const eventCoords = new Map();\r\n let button;\r\n let pointerType;\r\n if (isTouchEvent(ev)) {\r\n button = PointerButton.Unknown;\r\n pointerType = PointerType.Touch;\r\n // https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent\r\n for (let i = 0; i < ev.changedTouches.length; i++) {\r\n const touch = ev.changedTouches[i];\r\n const coordinates = GlobalCoordinates.fromPagePosition(touch.pageX, touch.pageY, this.engine);\r\n const nativePointerId = i + 1;\r\n const pointerId = this._normalizePointerId(nativePointerId);\r\n this.currentFramePointerCoords.set(pointerId, coordinates);\r\n eventCoords.set(pointerId, coordinates);\r\n }\r\n }\r\n else {\r\n button = this._nativeButtonToPointerButton(ev.button);\r\n pointerType = PointerType.Mouse;\r\n const coordinates = GlobalCoordinates.fromPagePosition(ev.pageX, ev.pageY, this.engine);\r\n let nativePointerId = 1;\r\n if (isPointerEvent(ev)) {\r\n nativePointerId = ev.pointerId;\r\n pointerType = this._stringToPointerType(ev.pointerType);\r\n }\r\n const pointerId = this._normalizePointerId(nativePointerId);\r\n this.currentFramePointerCoords.set(pointerId, coordinates);\r\n eventCoords.set(pointerId, coordinates);\r\n }\r\n for (const [pointerId, coord] of eventCoords.entries()) {\r\n switch (ev.type) {\r\n case 'mousedown':\r\n case 'pointerdown':\r\n case 'touchstart':\r\n this.currentFrameDown.push(new PointerEvent('down', pointerId, button, pointerType, coord, ev));\r\n this.currentFramePointerDown.set(pointerId, true);\r\n break;\r\n case 'mouseup':\r\n case 'pointerup':\r\n case 'touchend':\r\n this.currentFrameUp.push(new PointerEvent('up', pointerId, button, pointerType, coord, ev));\r\n this.currentFramePointerDown.set(pointerId, false);\r\n break;\r\n case 'mousemove':\r\n case 'pointermove':\r\n case 'touchmove':\r\n this.currentFrameMove.push(new PointerEvent('move', pointerId, button, pointerType, coord, ev));\r\n break;\r\n case 'touchcancel':\r\n case 'pointercancel':\r\n this.currentFrameCancel.push(new PointerEvent('cancel', pointerId, button, pointerType, coord, ev));\r\n break;\r\n }\r\n }\r\n }\r\n _handleWheel(ev) {\r\n // Should we prevent page scroll because of this event\r\n if (this.engine.pageScrollPreventionMode === ScrollPreventionMode.All ||\r\n (this.engine.pageScrollPreventionMode === ScrollPreventionMode.Canvas && ev.target === this.engine.canvas)) {\r\n ev.preventDefault();\r\n }\r\n const screen = this.engine.screen.pageToScreenCoordinates(vec(ev.pageX, ev.pageY));\r\n const world = this.engine.screen.screenToWorldCoordinates(screen);\r\n /**\r\n * A constant used to normalize wheel events across different browsers\r\n *\r\n * This normalization factor is pulled from\r\n * https://developer.mozilla.org/en-US/docs/Web/Events/wheel#Listening_to_this_event_across_browser\r\n */\r\n const ScrollWheelNormalizationFactor = -1 / 40;\r\n const deltaX = ev.deltaX || ev.wheelDeltaX * ScrollWheelNormalizationFactor || 0;\r\n const deltaY = ev.deltaY || ev.wheelDeltaY * ScrollWheelNormalizationFactor || ev.wheelDelta * ScrollWheelNormalizationFactor || ev.detail || 0;\r\n const deltaZ = ev.deltaZ || 0;\r\n let deltaMode = WheelDeltaMode.Pixel;\r\n if (ev.deltaMode) {\r\n if (ev.deltaMode === 1) {\r\n deltaMode = WheelDeltaMode.Line;\r\n }\r\n else if (ev.deltaMode === 2) {\r\n deltaMode = WheelDeltaMode.Page;\r\n }\r\n }\r\n const we = new WheelEvent(world.x, world.y, ev.pageX, ev.pageY, screen.x, screen.y, 0, deltaX, deltaY, deltaZ, deltaMode, ev);\r\n this.currentFrameWheel.push(we);\r\n }\r\n /**\r\n * Triggers an excalibur pointer event in a world space pos\r\n *\r\n * Useful for testing pointers in excalibur\r\n * @param type\r\n * @param pos\r\n */\r\n triggerEvent(type, pos) {\r\n const page = this.engine.screen.worldToPageCoordinates(pos);\r\n // Send an event to the event receiver\r\n if (window.PointerEvent) {\r\n this._handle(new window.PointerEvent('pointer' + type, {\r\n pointerId: 0,\r\n clientX: page.x,\r\n clientY: page.y\r\n }));\r\n }\r\n else {\r\n // Safari hack\r\n this._handle(new window.MouseEvent('mouse' + type, {\r\n clientX: page.x,\r\n clientY: page.y\r\n }));\r\n }\r\n // Force update pointer system\r\n const pointerSystem = this.engine.currentScene.world.systemManager.get(PointerSystem);\r\n const transformEntities = this.engine.currentScene.world.queryManager.createQuery(pointerSystem.types);\r\n pointerSystem.preupdate();\r\n pointerSystem.update(transformEntities.getEntities());\r\n }\r\n _nativeButtonToPointerButton(s) {\r\n switch (s) {\r\n case NativePointerButton.NoButton:\r\n return PointerButton.NoButton;\r\n case NativePointerButton.Left:\r\n return PointerButton.Left;\r\n case NativePointerButton.Middle:\r\n return PointerButton.Middle;\r\n case NativePointerButton.Right:\r\n return PointerButton.Right;\r\n case NativePointerButton.Unknown:\r\n return PointerButton.Unknown;\r\n default:\r\n return fail(s);\r\n }\r\n }\r\n _stringToPointerType(s) {\r\n switch (s) {\r\n case 'touch':\r\n return PointerType.Touch;\r\n case 'mouse':\r\n return PointerType.Mouse;\r\n case 'pen':\r\n return PointerType.Pen;\r\n default:\r\n return PointerType.Unknown;\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Util/Fps.ts\nclass FpsSampler {\r\n constructor(options) {\r\n var _a;\r\n this._samplePeriod = 100;\r\n this._currentFrameTime = 0;\r\n this._frames = 0;\r\n this._previousSampleTime = 0;\r\n this._beginFrameTime = 0;\r\n this._fps = options.initialFps;\r\n this._samplePeriod = (_a = options.samplePeriod) !== null && _a !== void 0 ? _a : this._samplePeriod;\r\n this._currentFrameTime = 1000 / options.initialFps;\r\n this._nowFn = options.nowFn;\r\n this._previousSampleTime = this._nowFn();\r\n }\r\n /**\r\n * Start of code block to sample FPS for\r\n */\r\n start() {\r\n this._beginFrameTime = this._nowFn();\r\n }\r\n /**\r\n * End of code block to sample FPS for\r\n */\r\n end() {\r\n this._frames++;\r\n const time = this._nowFn();\r\n this._currentFrameTime = time - this._beginFrameTime;\r\n if (time >= this._previousSampleTime + this._samplePeriod) {\r\n this._fps = (this._frames * 1000) / (time - this._previousSampleTime);\r\n this._previousSampleTime = time;\r\n this._frames = 0;\r\n }\r\n }\r\n /**\r\n * Return the currently sampled fps over the last sample period, by default every 100ms\r\n */\r\n get fps() {\r\n return this._fps;\r\n }\r\n /**\r\n * Return the instantaneous fps, this can be less useful because it will fluctuate given the current frames time\r\n */\r\n get instant() {\r\n return 1000 / this._currentFrameTime;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Util/Clock.ts\n\r\n\r\n/**\r\n * Abstract Clock is the base type of all Clocks\r\n *\r\n * It has a few opinions\r\n * 1. It manages the calculation of what \"elapsed\" time means and thus maximum fps\r\n * 2. The default timing api is implemented in now()\r\n *\r\n * To implement your own clock, extend Clock and override start/stop to start and stop the clock, then call update() with whatever\r\n * method is unique to your clock implementation.\r\n */\r\nclass Clock {\r\n constructor(options) {\r\n var _a, _b, _c;\r\n this._onFatalException = () => { };\r\n this._maxFps = Infinity;\r\n this._lastTime = 0;\r\n this._elapsed = 1;\r\n this._scheduledCbs = [];\r\n this._totalElapsed = 0;\r\n this._options = options;\r\n this.tick = options.tick;\r\n this._lastTime = (_a = this.now()) !== null && _a !== void 0 ? _a : 0;\r\n this._maxFps = (_b = options.maxFps) !== null && _b !== void 0 ? _b : this._maxFps;\r\n this._onFatalException = (_c = options.onFatalException) !== null && _c !== void 0 ? _c : this._onFatalException;\r\n this.fpsSampler = new FpsSampler({\r\n initialFps: 60,\r\n nowFn: () => this.now()\r\n });\r\n }\r\n /**\r\n * Get the elapsed time for the last completed frame\r\n */\r\n elapsed() {\r\n return this._elapsed;\r\n }\r\n /**\r\n * Get the current time in milliseconds\r\n */\r\n now() {\r\n return performance.now();\r\n }\r\n toTestClock() {\r\n const testClock = new TestClock({\r\n ...this._options,\r\n defaultUpdateMs: 16.6\r\n });\r\n return testClock;\r\n }\r\n toStandardClock() {\r\n const clock = new StandardClock({\r\n ...this._options\r\n });\r\n return clock;\r\n }\r\n setFatalExceptionHandler(handler) {\r\n this._onFatalException = handler;\r\n }\r\n /**\r\n * Schedule a callback to fire given a timeout in milliseconds using the excalibur [[Clock]]\r\n *\r\n * This is useful to use over the built in browser `setTimeout` because callbacks will be tied to the\r\n * excalibur update clock, instead of browser time, this means that callbacks wont fire if the game is\r\n * stopped or paused.\r\n *\r\n * @param cb callback to fire\r\n * @param timeoutMs Optionally specify a timeout in milliseconds from now, default is 0ms which means the next possible tick\r\n */\r\n schedule(cb, timeoutMs = 0) {\r\n // Scheduled based on internal elapsed time\r\n const scheduledTime = this._totalElapsed + timeoutMs;\r\n this._scheduledCbs.push([cb, scheduledTime]);\r\n }\r\n _runScheduledCbs() {\r\n // walk backwards to delete items as we loop\r\n for (let i = this._scheduledCbs.length - 1; i > -1; i--) {\r\n if (this._scheduledCbs[i][1] <= this._totalElapsed) {\r\n this._scheduledCbs[i][0]();\r\n this._scheduledCbs.splice(i, 1);\r\n }\r\n }\r\n }\r\n update(overrideUpdateMs) {\r\n try {\r\n this.fpsSampler.start();\r\n // Get the time to calculate time-elapsed\r\n const now = this.now();\r\n let elapsed = now - this._lastTime || 1; // first frame\r\n // Constrain fps\r\n const fpsInterval = (1000 / this._maxFps);\r\n // only run frame if enough time has elapsed\r\n if (elapsed >= fpsInterval) {\r\n let leftover = 0;\r\n if (fpsInterval !== 0) {\r\n leftover = (elapsed % fpsInterval);\r\n elapsed = elapsed - leftover; // shift elapsed to be \"in phase\" with the current loop fps\r\n }\r\n // Resolves issue #138 if the game has been paused, or blurred for\r\n // more than a 200 milliseconds, reset elapsed time to 1. This improves reliability\r\n // and provides more expected behavior when the engine comes back\r\n // into focus\r\n if (elapsed > 200) {\r\n elapsed = 1;\r\n }\r\n // tick the mainloop and run scheduled callbacks\r\n this._elapsed = overrideUpdateMs || elapsed;\r\n this._totalElapsed += this._elapsed;\r\n this._runScheduledCbs();\r\n this.tick(overrideUpdateMs || elapsed);\r\n if (fpsInterval !== 0) {\r\n this._lastTime = now - leftover;\r\n }\r\n else {\r\n this._lastTime = now;\r\n }\r\n this.fpsSampler.end();\r\n }\r\n }\r\n catch (e) {\r\n this._onFatalException(e);\r\n this.stop();\r\n }\r\n }\r\n}\r\n/**\r\n * The [[StandardClock]] implements the requestAnimationFrame browser api to run the tick()\r\n */\r\nclass StandardClock extends Clock {\r\n constructor(options) {\r\n super(options);\r\n this._running = false;\r\n }\r\n isRunning() {\r\n return this._running;\r\n }\r\n start() {\r\n if (this._running) {\r\n return;\r\n }\r\n this._running = true;\r\n const mainloop = () => {\r\n // stop the loop\r\n if (!this._running) {\r\n return;\r\n }\r\n try {\r\n // request next loop\r\n this._requestId = window.requestAnimationFrame(mainloop);\r\n this.update();\r\n }\r\n catch (e) {\r\n window.cancelAnimationFrame(this._requestId);\r\n throw e;\r\n }\r\n };\r\n // begin the first frame\r\n mainloop();\r\n }\r\n stop() {\r\n this._running = false;\r\n }\r\n}\r\n/**\r\n * The TestClock is meant for debugging interactions in excalibur that require precise timing to replicate or test\r\n */\r\nclass TestClock extends Clock {\r\n constructor(options) {\r\n super({\r\n ...options\r\n });\r\n this._logger = Logger.getInstance();\r\n this._running = false;\r\n this._currentTime = 0;\r\n this._updateMs = options.defaultUpdateMs;\r\n }\r\n /**\r\n * Get the current time in milliseconds\r\n */\r\n now() {\r\n var _a;\r\n return (_a = this._currentTime) !== null && _a !== void 0 ? _a : 0;\r\n }\r\n isRunning() {\r\n return this._running;\r\n }\r\n start() {\r\n this._running = true;\r\n }\r\n stop() {\r\n this._running = false;\r\n }\r\n /**\r\n * Manually step the clock forward 1 tick, optionally specify an elapsed time in milliseconds\r\n * @param overrideUpdateMs\r\n */\r\n step(overrideUpdateMs) {\r\n const time = overrideUpdateMs !== null && overrideUpdateMs !== void 0 ? overrideUpdateMs : this._updateMs;\r\n if (this._running) {\r\n // to be comparable to RAF this needs to be a full blown Task\r\n // For example, images cannot decode synchronously in a single step\r\n this.update(time);\r\n this._currentTime += time;\r\n }\r\n else {\r\n this._logger.warn('The clock is not running, no step will be performed');\r\n }\r\n }\r\n /**\r\n * Run a number of steps that tick the clock, optionally specify an elapsed time in milliseconds\r\n * @param numberOfSteps\r\n * @param overrideUpdateMs\r\n */\r\n run(numberOfSteps, overrideUpdateMs) {\r\n for (let i = 0; i < numberOfSteps; i++) {\r\n this.step(overrideUpdateMs !== null && overrideUpdateMs !== void 0 ? overrideUpdateMs : this._updateMs);\r\n }\r\n }\r\n}\r\n\n// EXTERNAL MODULE: ./Util/Toaster.css\nvar Util_Toaster = __webpack_require__(7379);\n;// CONCATENATED MODULE: ./Util/Toaster.ts\n\r\n/**\r\n * The Toaster is only meant to be called from inside Excalibur to display messages to players\r\n */\r\nclass Toaster {\r\n constructor() {\r\n this._toasterCss = Util_Toaster/* default.toString */.Z.toString();\r\n this._isInitialized = false;\r\n }\r\n _initialize() {\r\n if (!this._isInitialized) {\r\n this._container = document.createElement('div');\r\n this._container.id = 'ex-toast-container';\r\n document.body.appendChild(this._container);\r\n this._isInitialized = true;\r\n this._styleBlock = document.createElement('style');\r\n this._styleBlock.textContent = this._toasterCss;\r\n document.head.appendChild(this._styleBlock);\r\n }\r\n }\r\n dispose() {\r\n this._container.parentElement.removeChild(this._container);\r\n this._styleBlock.parentElement.removeChild(this._styleBlock);\r\n this._isInitialized = false;\r\n }\r\n _createFragment(message) {\r\n const toastMessage = document.createElement('span');\r\n toastMessage.innerText = message;\r\n return toastMessage;\r\n }\r\n /**\r\n * Display a toast message to a player\r\n * @param message Text of the message, messages may have a single \"[LINK]\" to influence placement\r\n * @param linkTarget Optionally specify a link location\r\n * @param linkName Optionally specify a name for that link location\r\n */\r\n toast(message, linkTarget, linkName) {\r\n this._initialize();\r\n const toast = document.createElement('div');\r\n toast.className = 'ex-toast-message';\r\n const messageFragments = message.split('[LINK]').map(message => this._createFragment(message));\r\n if (linkTarget) {\r\n const link = document.createElement('a');\r\n link.href = linkTarget;\r\n if (linkName) {\r\n link.innerText = linkName;\r\n }\r\n else {\r\n link.innerText = linkTarget;\r\n }\r\n messageFragments.splice(1, 0, link);\r\n }\r\n // Assembly message\r\n const finalMessage = document.createElement('div');\r\n messageFragments.forEach(message => {\r\n finalMessage.appendChild(message);\r\n });\r\n toast.appendChild(finalMessage);\r\n // Dismiss button\r\n const dismissBtn = document.createElement('button');\r\n dismissBtn.innerText = 'x';\r\n dismissBtn.addEventListener('click', () => {\r\n this._container.removeChild(toast);\r\n });\r\n toast.appendChild(dismissBtn);\r\n // Escape to dismiss\r\n const keydownHandler = (evt) => {\r\n if (evt.key === 'Escape') {\r\n try {\r\n this._container.removeChild(toast);\r\n }\r\n catch (_a) {\r\n // pass\r\n }\r\n }\r\n document.removeEventListener('keydown', keydownHandler);\r\n };\r\n document.addEventListener('keydown', keydownHandler);\r\n // Insert into container\r\n const first = this._container.firstChild;\r\n this._container.insertBefore(toast, first);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Engine.ts\n\r\n\r\n\r\npolyfill();\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Enum representing the different mousewheel event bubble prevention\r\n */\r\nvar ScrollPreventionMode;\r\n(function (ScrollPreventionMode) {\r\n /**\r\n * Do not prevent any page scrolling\r\n */\r\n ScrollPreventionMode[ScrollPreventionMode[\"None\"] = 0] = \"None\";\r\n /**\r\n * Prevent page scroll if mouse is over the game canvas\r\n */\r\n ScrollPreventionMode[ScrollPreventionMode[\"Canvas\"] = 1] = \"Canvas\";\r\n /**\r\n * Prevent all page scrolling via mouse wheel\r\n */\r\n ScrollPreventionMode[ScrollPreventionMode[\"All\"] = 2] = \"All\";\r\n})(ScrollPreventionMode || (ScrollPreventionMode = {}));\r\n/**\r\n * The Excalibur Engine\r\n *\r\n * The [[Engine]] is the main driver for a game. It is responsible for\r\n * starting/stopping the game, maintaining state, transmitting events,\r\n * loading resources, and managing the scene.\r\n */\r\nclass Engine extends Class {\r\n /**\r\n * Creates a new game using the given [[EngineOptions]]. By default, if no options are provided,\r\n * the game will be rendered full screen (taking up all available browser window space).\r\n * You can customize the game rendering through [[EngineOptions]].\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var game = new ex.Engine({\r\n * width: 0, // the width of the canvas\r\n * height: 0, // the height of the canvas\r\n * enableCanvasTransparency: true, // the transparencySection of the canvas\r\n * canvasElementId: '', // the DOM canvas element ID, if you are providing your own\r\n * displayMode: ex.DisplayMode.FullScreen, // the display mode\r\n * pointerScope: ex.Input.PointerScope.Document, // the scope of capturing pointer (mouse/touch) events\r\n * backgroundColor: ex.Color.fromHex('#2185d0') // background color of the engine\r\n * });\r\n *\r\n * // call game.start, which is a Promise\r\n * game.start().then(function () {\r\n * // ready, set, go!\r\n * });\r\n * ```\r\n */\r\n constructor(options) {\r\n var _a, _b, _c, _d, _e, _f;\r\n super();\r\n /**\r\n * Optionally set the maximum fps if not set Excalibur will go as fast as the device allows.\r\n *\r\n * You may want to constrain max fps if your game cannot maintain fps consistently, it can look and feel better to have a 30fps game than\r\n * one that bounces between 30fps and 60fps\r\n */\r\n this.maxFps = Number.POSITIVE_INFINITY;\r\n /**\r\n * Contains all the scenes currently registered with Excalibur\r\n */\r\n this.scenes = {};\r\n this._suppressPlayButton = false;\r\n /**\r\n * Indicates whether audio should be paused when the game is no longer visible.\r\n */\r\n this.pauseAudioWhenHidden = true;\r\n /**\r\n * Indicates whether the engine should draw with debug information\r\n */\r\n this._isDebug = false;\r\n /**\r\n * Sets the Transparency for the engine.\r\n */\r\n this.enableCanvasTransparency = true;\r\n /**\r\n * The action to take when a fatal exception is thrown\r\n */\r\n this.onFatalException = (e) => {\r\n Logger.getInstance().fatal(e);\r\n };\r\n this._toaster = new Toaster();\r\n this._timescale = 1.0;\r\n this._isInitialized = false;\r\n this._deferredGoTo = null;\r\n this._originalOptions = {};\r\n this._performanceThresholdTriggered = false;\r\n this._fpsSamples = [];\r\n this._loadingComplete = false;\r\n this._isReady = false;\r\n this._isReadyPromise = new Promise(resolve => {\r\n this._isReadyResolve = resolve;\r\n });\r\n /**\r\n * Returns the current frames elapsed milliseconds\r\n */\r\n this.currentFrameElapsedMs = 0;\r\n /**\r\n * Returns the current frame lag when in fixed update mode\r\n */\r\n this.currentFrameLagMs = 0;\r\n this._lagMs = 0;\r\n this._screenShotRequests = [];\r\n options = { ...Engine._DEFAULT_ENGINE_OPTIONS, ...options };\r\n this._originalOptions = options;\r\n Flags.freeze();\r\n // Initialize browser events facade\r\n this.browser = new BrowserEvents(window, document);\r\n // Check compatibility\r\n const detector = new Detector();\r\n if (!options.suppressMinimumBrowserFeatureDetection && !(this._compatible = detector.test())) {\r\n const message = document.createElement('div');\r\n message.innerText = 'Sorry, your browser does not support all the features needed for Excalibur';\r\n document.body.appendChild(message);\r\n detector.failedTests.forEach(function (test) {\r\n const testMessage = document.createElement('div');\r\n testMessage.innerText = 'Browser feature missing ' + test;\r\n document.body.appendChild(testMessage);\r\n });\r\n if (options.canvasElementId) {\r\n const canvas = document.getElementById(options.canvasElementId);\r\n if (canvas) {\r\n canvas.parentElement.removeChild(canvas);\r\n }\r\n }\r\n return;\r\n }\r\n else {\r\n this._compatible = true;\r\n }\r\n // Use native console API for color fun\r\n // eslint-disable-next-line no-console\r\n if (console.log && !options.suppressConsoleBootMessage) {\r\n // eslint-disable-next-line no-console\r\n console.log(`%cPowered by Excalibur.js (v${EX_VERSION})`, 'background: #176BAA; color: white; border-radius: 5px; padding: 15px; font-size: 1.5em; line-height: 80px;');\r\n // eslint-disable-next-line no-console\r\n console.log('\\n\\\r\n /| ________________\\n\\\r\nO|===|* >________________>\\n\\\r\n \\\\|');\r\n // eslint-disable-next-line no-console\r\n console.log('Visit', 'http://excaliburjs.com', 'for more information');\r\n }\r\n // Suppress play button\r\n if (options.suppressPlayButton) {\r\n this._suppressPlayButton = true;\r\n }\r\n this._logger = Logger.getInstance();\r\n // If debug is enabled, let's log browser features to the console.\r\n if (this._logger.defaultLevel === LogLevel.Debug) {\r\n detector.logBrowserFeatures();\r\n }\r\n this._logger.debug('Building engine...');\r\n this.canvasElementId = options.canvasElementId;\r\n if (options.canvasElementId) {\r\n this._logger.debug('Using Canvas element specified: ' + options.canvasElementId);\r\n this.canvas = document.getElementById(options.canvasElementId);\r\n }\r\n else if (options.canvasElement) {\r\n this._logger.debug('Using Canvas element specified:', options.canvasElement);\r\n this.canvas = options.canvasElement;\r\n }\r\n else {\r\n this._logger.debug('Using generated canvas element');\r\n this.canvas = document.createElement('canvas');\r\n }\r\n let displayMode = (_a = options.displayMode) !== null && _a !== void 0 ? _a : DisplayMode.Fixed;\r\n if ((options.width && options.height) || options.viewport) {\r\n if (options.displayMode === undefined) {\r\n displayMode = DisplayMode.Fixed;\r\n }\r\n this._logger.debug('Engine viewport is size ' + options.width + ' x ' + options.height);\r\n }\r\n else if (!options.displayMode) {\r\n this._logger.debug('Engine viewport is fit');\r\n displayMode = DisplayMode.FitScreen;\r\n }\r\n this._originalDisplayMode = displayMode;\r\n // Canvas 2D fallback can be flagged on\r\n let useCanvasGraphicsContext = Flags.isEnabled('use-canvas-context');\r\n if (!useCanvasGraphicsContext) {\r\n // Attempt webgl first\r\n try {\r\n this.graphicsContext = new ExcaliburGraphicsContextWebGL({\r\n canvasElement: this.canvas,\r\n enableTransparency: this.enableCanvasTransparency,\r\n smoothing: options.antialiasing,\r\n backgroundColor: options.backgroundColor,\r\n snapToPixel: options.snapToPixel,\r\n useDrawSorting: options.useDrawSorting\r\n });\r\n }\r\n catch (e) {\r\n this._logger.warn(`Excalibur could not load webgl for some reason (${e.message}) and loaded a Canvas 2D fallback. ` +\r\n `Some features of Excalibur will not work in this mode. \\n\\n` +\r\n 'Read more about this issue at https://excaliburjs.com/docs/webgl');\r\n // fallback to canvas in case of failure\r\n useCanvasGraphicsContext = true;\r\n }\r\n }\r\n if (useCanvasGraphicsContext) {\r\n this.graphicsContext = new ExcaliburGraphicsContext2DCanvas({\r\n canvasElement: this.canvas,\r\n enableTransparency: this.enableCanvasTransparency,\r\n smoothing: options.antialiasing,\r\n backgroundColor: options.backgroundColor,\r\n snapToPixel: options.snapToPixel,\r\n useDrawSorting: options.useDrawSorting\r\n });\r\n }\r\n this.screen = new Screen({\r\n canvas: this.canvas,\r\n context: this.graphicsContext,\r\n antialiasing: (_b = options.antialiasing) !== null && _b !== void 0 ? _b : true,\r\n browser: this.browser,\r\n viewport: (_c = options.viewport) !== null && _c !== void 0 ? _c : (options.width && options.height ? { width: options.width, height: options.height } : Resolution.SVGA),\r\n resolution: options.resolution,\r\n displayMode,\r\n pixelRatio: options.suppressHiDPIScaling ? 1 : ((_d = options.pixelRatio) !== null && _d !== void 0 ? _d : null)\r\n });\r\n // Set default filtering based on antialiasing\r\n TextureLoader.filtering = options.antialiasing ? ImageFiltering.Blended : ImageFiltering.Pixel;\r\n if (options.backgroundColor) {\r\n this.backgroundColor = options.backgroundColor.clone();\r\n }\r\n this.maxFps = (_e = options.maxFps) !== null && _e !== void 0 ? _e : this.maxFps;\r\n this.fixedUpdateFps = (_f = options.fixedUpdateFps) !== null && _f !== void 0 ? _f : this.fixedUpdateFps;\r\n this.clock = new StandardClock({\r\n maxFps: this.maxFps,\r\n tick: this._mainloop.bind(this),\r\n onFatalException: (e) => this.onFatalException(e)\r\n });\r\n this.enableCanvasTransparency = options.enableCanvasTransparency;\r\n this._loader = new Loader();\r\n this._loader.wireEngine(this);\r\n this.debug = new Debug(this);\r\n this._initialize(options);\r\n this.rootScene = this.currentScene = new Scene();\r\n this.addScene('root', this.rootScene);\r\n window.___EXCALIBUR_DEVTOOL = this;\r\n }\r\n /**\r\n * The width of the game canvas in pixels (physical width component of the\r\n * resolution of the canvas element)\r\n */\r\n get canvasWidth() {\r\n return this.screen.canvasWidth;\r\n }\r\n /**\r\n * Returns half width of the game canvas in pixels (half physical width component)\r\n */\r\n get halfCanvasWidth() {\r\n return this.screen.halfCanvasWidth;\r\n }\r\n /**\r\n * The height of the game canvas in pixels, (physical height component of\r\n * the resolution of the canvas element)\r\n */\r\n get canvasHeight() {\r\n return this.screen.canvasHeight;\r\n }\r\n /**\r\n * Returns half height of the game canvas in pixels (half physical height component)\r\n */\r\n get halfCanvasHeight() {\r\n return this.screen.halfCanvasHeight;\r\n }\r\n /**\r\n * Returns the width of the engine's visible drawing surface in pixels including zoom and device pixel ratio.\r\n */\r\n get drawWidth() {\r\n return this.screen.drawWidth;\r\n }\r\n /**\r\n * Returns half the width of the engine's visible drawing surface in pixels including zoom and device pixel ratio.\r\n */\r\n get halfDrawWidth() {\r\n return this.screen.halfDrawWidth;\r\n }\r\n /**\r\n * Returns the height of the engine's visible drawing surface in pixels including zoom and device pixel ratio.\r\n */\r\n get drawHeight() {\r\n return this.screen.drawHeight;\r\n }\r\n /**\r\n * Returns half the height of the engine's visible drawing surface in pixels including zoom and device pixel ratio.\r\n */\r\n get halfDrawHeight() {\r\n return this.screen.halfDrawHeight;\r\n }\r\n /**\r\n * Returns whether excalibur detects the current screen to be HiDPI\r\n */\r\n get isHiDpi() {\r\n return this.screen.isHiDpi;\r\n }\r\n /**\r\n * Access [[stats]] that holds frame statistics.\r\n */\r\n get stats() {\r\n return this.debug.stats;\r\n }\r\n /**\r\n * Indicates whether the engine is set to fullscreen or not\r\n */\r\n get isFullscreen() {\r\n return this.screen.isFullScreen;\r\n }\r\n /**\r\n * Indicates the current [[DisplayMode]] of the engine.\r\n */\r\n get displayMode() {\r\n return this.screen.displayMode;\r\n }\r\n /**\r\n * Returns the calculated pixel ration for use in rendering\r\n */\r\n get pixelRatio() {\r\n return this.screen.pixelRatio;\r\n }\r\n get isDebug() {\r\n return this._isDebug;\r\n }\r\n /**\r\n * Hints the graphics context to truncate fractional world space coordinates\r\n */\r\n get snapToPixel() {\r\n return this.graphicsContext.snapToPixel;\r\n }\r\n ;\r\n set snapToPixel(shouldSnapToPixel) {\r\n this.graphicsContext.snapToPixel = shouldSnapToPixel;\r\n }\r\n ;\r\n on(eventName, handler) {\r\n super.on(eventName, handler);\r\n }\r\n once(eventName, handler) {\r\n super.once(eventName, handler);\r\n }\r\n off(eventName, handler) {\r\n super.off(eventName, handler);\r\n }\r\n _monitorPerformanceThresholdAndTriggerFallback() {\r\n const { allow } = this._originalOptions.configurePerformanceCanvas2DFallback;\r\n let { threshold, showPlayerMessage } = this._originalOptions.configurePerformanceCanvas2DFallback;\r\n if (threshold === undefined) {\r\n threshold = Engine._DEFAULT_ENGINE_OPTIONS.configurePerformanceCanvas2DFallback.threshold;\r\n }\r\n if (showPlayerMessage === undefined) {\r\n showPlayerMessage = Engine._DEFAULT_ENGINE_OPTIONS.configurePerformanceCanvas2DFallback.showPlayerMessage;\r\n }\r\n if (!Flags.isEnabled('use-canvas-context') && allow && this.ready && !this._performanceThresholdTriggered) {\r\n // Calculate Average fps for last X number of frames after start\r\n if (this._fpsSamples.length === threshold.numberOfFrames) {\r\n this._fpsSamples.splice(0, 1);\r\n }\r\n this._fpsSamples.push(this.clock.fpsSampler.fps);\r\n let total = 0;\r\n for (let i = 0; i < this._fpsSamples.length; i++) {\r\n total += this._fpsSamples[i];\r\n }\r\n const average = total / this._fpsSamples.length;\r\n if (this._fpsSamples.length === threshold.numberOfFrames) {\r\n if (average <= threshold.fps) {\r\n this._performanceThresholdTriggered = true;\r\n this._logger.warn(`Switching to browser 2D Canvas fallback due to performance. Some features of Excalibur will not work in this mode.\\n` +\r\n 'this might mean your browser doesn\\'t have webgl enabled or hardware acceleration is unavailable.\\n\\n' +\r\n 'If in Chrome:\\n' +\r\n ' * Visit Settings > Advanced > System, and ensure \"Use Hardware Acceleration\" is checked.\\n' +\r\n ' * Visit chrome://flags/#ignore-gpu-blocklist and ensure \"Override software rendering list\" is \"enabled\"\\n' +\r\n 'If in Firefox, visit about:config\\n' +\r\n ' * Ensure webgl.disabled = false\\n' +\r\n ' * Ensure webgl.force-enabled = true\\n' +\r\n ' * Ensure layers.acceleration.force-enabled = true\\n\\n' +\r\n 'Read more about this issue at https://excaliburjs.com/docs/performance');\r\n if (showPlayerMessage) {\r\n this._toaster.toast('Excalibur is encountering performance issues. ' +\r\n 'It\\'s possible that your browser doesn\\'t have hardware acceleration enabled. ' +\r\n 'Visit [LINK] for more information and potential solutions.', 'https://excaliburjs.com/docs/performance');\r\n }\r\n this.useCanvas2DFallback();\r\n this.emit('fallbackgraphicscontext', this.graphicsContext);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Switches the engine's graphics context to the 2D Canvas.\r\n * @warning Some features of Excalibur will not work in this mode.\r\n */\r\n useCanvas2DFallback() {\r\n var _a, _b, _c;\r\n // Swap out the canvas\r\n const newCanvas = this.canvas.cloneNode(false);\r\n this.canvas.parentNode.replaceChild(newCanvas, this.canvas);\r\n this.canvas = newCanvas;\r\n const options = this._originalOptions;\r\n const displayMode = this._originalDisplayMode;\r\n // New graphics context\r\n this.graphicsContext = new ExcaliburGraphicsContext2DCanvas({\r\n canvasElement: this.canvas,\r\n enableTransparency: this.enableCanvasTransparency,\r\n smoothing: options.antialiasing,\r\n backgroundColor: options.backgroundColor,\r\n snapToPixel: options.snapToPixel,\r\n useDrawSorting: options.useDrawSorting\r\n });\r\n // Reset screen\r\n if (this.screen) {\r\n this.screen.dispose();\r\n }\r\n this.screen = new Screen({\r\n canvas: this.canvas,\r\n context: this.graphicsContext,\r\n antialiasing: (_a = options.antialiasing) !== null && _a !== void 0 ? _a : true,\r\n browser: this.browser,\r\n viewport: (_b = options.viewport) !== null && _b !== void 0 ? _b : (options.width && options.height ? { width: options.width, height: options.height } : Resolution.SVGA),\r\n resolution: options.resolution,\r\n displayMode,\r\n pixelRatio: options.suppressHiDPIScaling ? 1 : ((_c = options.pixelRatio) !== null && _c !== void 0 ? _c : null)\r\n });\r\n this.screen.setCurrentCamera(this.currentScene.camera);\r\n // Reset pointers\r\n this.input.pointers.detach();\r\n const pointerTarget = options && options.pointerScope === PointerScope.Document ? document : this.canvas;\r\n this.input.pointers = this.input.pointers.recreate(pointerTarget, this);\r\n this.input.pointers.init();\r\n }\r\n /**\r\n * Returns a BoundingBox of the top left corner of the screen\r\n * and the bottom right corner of the screen.\r\n */\r\n getWorldBounds() {\r\n return this.screen.getWorldBounds();\r\n }\r\n /**\r\n * Gets the current engine timescale factor (default is 1.0 which is 1:1 time)\r\n */\r\n get timescale() {\r\n return this._timescale;\r\n }\r\n /**\r\n * Sets the current engine timescale factor. Useful for creating slow-motion effects or fast-forward effects\r\n * when using time-based movement.\r\n */\r\n set timescale(value) {\r\n if (value <= 0) {\r\n Logger.getInstance().error('Cannot set engine.timescale to a value of 0 or less than 0.');\r\n return;\r\n }\r\n this._timescale = value;\r\n }\r\n /**\r\n * Adds a [[Timer]] to the [[currentScene]].\r\n * @param timer The timer to add to the [[currentScene]].\r\n */\r\n addTimer(timer) {\r\n return this.currentScene.addTimer(timer);\r\n }\r\n /**\r\n * Removes a [[Timer]] from the [[currentScene]].\r\n * @param timer The timer to remove to the [[currentScene]].\r\n */\r\n removeTimer(timer) {\r\n return this.currentScene.removeTimer(timer);\r\n }\r\n /**\r\n * Adds a [[Scene]] to the engine, think of scenes in Excalibur as you\r\n * would levels or menus.\r\n *\r\n * @param key The name of the scene, must be unique\r\n * @param scene The scene to add to the engine\r\n */\r\n addScene(key, scene) {\r\n if (this.scenes[key]) {\r\n this._logger.warn('Scene', key, 'already exists overwriting');\r\n }\r\n this.scenes[key] = scene;\r\n }\r\n /**\r\n * @internal\r\n */\r\n removeScene(entity) {\r\n if (entity instanceof Scene) {\r\n // remove scene\r\n for (const key in this.scenes) {\r\n if (this.scenes.hasOwnProperty(key)) {\r\n if (this.scenes[key] === entity) {\r\n delete this.scenes[key];\r\n }\r\n }\r\n }\r\n }\r\n if (typeof entity === 'string') {\r\n // remove scene\r\n delete this.scenes[entity];\r\n }\r\n }\r\n add(entity) {\r\n if (arguments.length === 2) {\r\n this.addScene(arguments[0], arguments[1]);\r\n return;\r\n }\r\n if (this._deferredGoTo && this.scenes[this._deferredGoTo]) {\r\n this.scenes[this._deferredGoTo].add(entity);\r\n }\r\n else {\r\n this.currentScene.add(entity);\r\n }\r\n }\r\n remove(entity) {\r\n if (entity instanceof Entity) {\r\n this.currentScene.remove(entity);\r\n }\r\n if (entity instanceof Scene) {\r\n this.removeScene(entity);\r\n }\r\n if (typeof entity === 'string') {\r\n this.removeScene(entity);\r\n }\r\n }\r\n /**\r\n * Changes the currently updating and drawing scene to a different,\r\n * named scene. Calls the [[Scene]] lifecycle events.\r\n * @param key The key of the scene to transition to.\r\n * @param data Optional data to send to the scene's onActivate method\r\n */\r\n goToScene(key, data) {\r\n // if not yet initialized defer goToScene\r\n if (!this.isInitialized) {\r\n this._deferredGoTo = key;\r\n return;\r\n }\r\n if (this.scenes[key]) {\r\n const previousScene = this.currentScene;\r\n const nextScene = this.scenes[key];\r\n this._logger.debug('Going to scene:', key);\r\n // only deactivate when initialized\r\n if (this.currentScene.isInitialized) {\r\n const context = { engine: this, previousScene, nextScene };\r\n this.currentScene._deactivate.apply(this.currentScene, [context, nextScene]);\r\n this.currentScene.eventDispatcher.emit('deactivate', new DeactivateEvent(context, this.currentScene));\r\n }\r\n // set current scene to new one\r\n this.currentScene = nextScene;\r\n this.screen.setCurrentCamera(nextScene.camera);\r\n // initialize the current scene if has not been already\r\n this.currentScene._initialize(this);\r\n const context = { engine: this, previousScene, nextScene, data };\r\n this.currentScene._activate.apply(this.currentScene, [context, nextScene]);\r\n this.currentScene.eventDispatcher.emit('activate', new ActivateEvent(context, this.currentScene));\r\n }\r\n else {\r\n this._logger.error('Scene', key, 'does not exist!');\r\n }\r\n }\r\n /**\r\n * Transforms the current x, y from screen coordinates to world coordinates\r\n * @param point Screen coordinate to convert\r\n */\r\n screenToWorldCoordinates(point) {\r\n return this.screen.screenToWorldCoordinates(point);\r\n }\r\n /**\r\n * Transforms a world coordinate, to a screen coordinate\r\n * @param point World coordinate to convert\r\n */\r\n worldToScreenCoordinates(point) {\r\n return this.screen.worldToScreenCoordinates(point);\r\n }\r\n /**\r\n * Initializes the internal canvas, rendering context, display mode, and native event listeners\r\n */\r\n _initialize(options) {\r\n this.pageScrollPreventionMode = options.scrollPreventionMode;\r\n // initialize inputs\r\n const pointerTarget = options && options.pointerScope === PointerScope.Document ? document : this.canvas;\r\n this.input = {\r\n keyboard: new Keyboard(),\r\n pointers: new PointerEventReceiver(pointerTarget, this),\r\n gamepads: new Gamepads()\r\n };\r\n this.input.keyboard.init();\r\n this.input.pointers.init();\r\n this.input.gamepads.init();\r\n // Issue #385 make use of the visibility api\r\n // https://developer.mozilla.org/en-US/docs/Web/Guide/User_experience/Using_the_Page_Visibility_API\r\n let hidden, visibilityChange;\r\n if (typeof document.hidden !== 'undefined') {\r\n // Opera 12.10 and Firefox 18 and later support\r\n hidden = 'hidden';\r\n visibilityChange = 'visibilitychange';\r\n }\r\n else if ('msHidden' in document) {\r\n hidden = 'msHidden';\r\n visibilityChange = 'msvisibilitychange';\r\n }\r\n else if ('webkitHidden' in document) {\r\n hidden = 'webkitHidden';\r\n visibilityChange = 'webkitvisibilitychange';\r\n }\r\n this.browser.document.on(visibilityChange, () => {\r\n if (document[hidden]) {\r\n this.eventDispatcher.emit('hidden', new HiddenEvent(this));\r\n this._logger.debug('Window hidden');\r\n }\r\n else {\r\n this.eventDispatcher.emit('visible', new VisibleEvent(this));\r\n this._logger.debug('Window visible');\r\n }\r\n });\r\n if (!this.canvasElementId && !options.canvasElement) {\r\n document.body.appendChild(this.canvas);\r\n }\r\n }\r\n onInitialize(_engine) {\r\n // Override me\r\n }\r\n /**\r\n * If supported by the browser, this will set the antialiasing flag on the\r\n * canvas. Set this to `false` if you want a 'jagged' pixel art look to your\r\n * image resources.\r\n * @param isSmooth Set smoothing to true or false\r\n */\r\n setAntialiasing(isSmooth) {\r\n this.screen.antialiasing = isSmooth;\r\n }\r\n /**\r\n * Return the current smoothing status of the canvas\r\n */\r\n getAntialiasing() {\r\n return this.screen.antialiasing;\r\n }\r\n /**\r\n * Gets whether the actor is Initialized\r\n */\r\n get isInitialized() {\r\n return this._isInitialized;\r\n }\r\n _overrideInitialize(engine) {\r\n if (!this.isInitialized) {\r\n this.onInitialize(engine);\r\n super.emit('initialize', new InitializeEvent(engine, this));\r\n this._isInitialized = true;\r\n if (this._deferredGoTo) {\r\n const deferredScene = this._deferredGoTo;\r\n this._deferredGoTo = null;\r\n this.goToScene(deferredScene);\r\n }\r\n else {\r\n this.goToScene('root');\r\n }\r\n }\r\n }\r\n /**\r\n * Updates the entire state of the game\r\n * @param delta Number of milliseconds elapsed since the last update.\r\n */\r\n _update(delta) {\r\n if (!this.ready) {\r\n // suspend updates until loading is finished\r\n this._loader.update(this, delta);\r\n // Update input listeners\r\n this.input.keyboard.update();\r\n this.input.gamepads.update();\r\n return;\r\n }\r\n // Publish preupdate events\r\n this._preupdate(delta);\r\n // process engine level events\r\n this.currentScene.update(this, delta);\r\n // Publish update event\r\n this._postupdate(delta);\r\n // Update input listeners\r\n this.input.keyboard.update();\r\n this.input.gamepads.update();\r\n }\r\n /**\r\n * @internal\r\n */\r\n _preupdate(delta) {\r\n this.emit('preupdate', new PreUpdateEvent(this, delta, this));\r\n this.onPreUpdate(this, delta);\r\n }\r\n onPreUpdate(_engine, _delta) {\r\n // Override me\r\n }\r\n /**\r\n * @internal\r\n */\r\n _postupdate(delta) {\r\n this.emit('postupdate', new PostUpdateEvent(this, delta, this));\r\n this.onPostUpdate(this, delta);\r\n }\r\n onPostUpdate(_engine, _delta) {\r\n // Override me\r\n }\r\n /**\r\n * Draws the entire game\r\n * @param delta Number of milliseconds elapsed since the last draw.\r\n */\r\n _draw(delta) {\r\n this.graphicsContext.beginDrawLifecycle();\r\n this.graphicsContext.clear();\r\n this._predraw(this.graphicsContext, delta);\r\n // Drawing nothing else while loading\r\n if (!this._isReady) {\r\n this._loader.canvas.draw(this.graphicsContext, 0, 0);\r\n this.graphicsContext.flush();\r\n return;\r\n }\r\n this.graphicsContext.backgroundColor = this.backgroundColor;\r\n this.currentScene.draw(this.graphicsContext, delta);\r\n this._postdraw(this.graphicsContext, delta);\r\n // Flush any pending drawings\r\n this.graphicsContext.flush();\r\n this.graphicsContext.endDrawLifecycle();\r\n this._checkForScreenShots();\r\n }\r\n /**\r\n * @internal\r\n */\r\n _predraw(_ctx, delta) {\r\n this.emit('predraw', new PreDrawEvent(_ctx, delta, this));\r\n this.onPreDraw(_ctx, delta);\r\n }\r\n onPreDraw(_ctx, _delta) {\r\n // Override me\r\n }\r\n /**\r\n * @internal\r\n */\r\n _postdraw(_ctx, delta) {\r\n this.emit('postdraw', new PostDrawEvent(_ctx, delta, this));\r\n this.onPostDraw(_ctx, delta);\r\n }\r\n onPostDraw(_ctx, _delta) {\r\n // Override me\r\n }\r\n /**\r\n * Enable or disable Excalibur debugging functionality.\r\n * @param toggle a value that debug drawing will be changed to\r\n */\r\n showDebug(toggle) {\r\n this._isDebug = toggle;\r\n }\r\n /**\r\n * Toggle Excalibur debugging functionality.\r\n */\r\n toggleDebug() {\r\n this._isDebug = !this._isDebug;\r\n return this._isDebug;\r\n }\r\n /**\r\n * Returns true when loading is totally complete and the player has clicked start\r\n */\r\n get loadingComplete() {\r\n return this._loadingComplete;\r\n }\r\n get ready() {\r\n return this._isReady;\r\n }\r\n isReady() {\r\n return this._isReadyPromise;\r\n }\r\n /**\r\n * Starts the internal game loop for Excalibur after loading\r\n * any provided assets.\r\n * @param loader Optional [[Loader]] to use to load resources. The default loader is [[Loader]], override to provide your own\r\n * custom loader.\r\n *\r\n * Note: start() only resolves AFTER the user has clicked the play button\r\n */\r\n async start(loader) {\r\n if (!this._compatible) {\r\n throw new Error('Excalibur is incompatible with your browser');\r\n }\r\n // Wire loader if we have it\r\n if (loader) {\r\n // Push the current user entered resolution/viewport\r\n this.screen.pushResolutionAndViewport();\r\n // Configure resolution for loader, it expects resolution === viewport\r\n this.screen.resolution = this.screen.viewport;\r\n this.screen.applyResolutionAndViewport();\r\n this._loader = loader;\r\n this._loader.suppressPlayButton = this._suppressPlayButton || this._loader.suppressPlayButton;\r\n this._loader.wireEngine(this);\r\n }\r\n // Start the excalibur clock which drives the mainloop\r\n // has started is a slight misnomer, it's really mainloop started\r\n this._logger.debug('Starting game clock...');\r\n this.browser.resume();\r\n this.clock.start();\r\n this._logger.debug('Game clock started');\r\n if (loader) {\r\n await this.load(this._loader);\r\n this._loadingComplete = true;\r\n // reset back to previous user resolution/viewport\r\n this.screen.popResolutionAndViewport();\r\n this.screen.applyResolutionAndViewport();\r\n }\r\n this._loadingComplete = true;\r\n // Initialize before ready\r\n this._overrideInitialize(this);\r\n this._isReady = true;\r\n this._isReadyResolve();\r\n this.emit('start', new GameStartEvent(this));\r\n return this._isReadyPromise;\r\n }\r\n _mainloop(elapsed) {\r\n this.emit('preframe', new PreFrameEvent(this, this.stats.prevFrame));\r\n const delta = elapsed * this.timescale;\r\n this.currentFrameElapsedMs = delta;\r\n // reset frame stats (reuse existing instances)\r\n const frameId = this.stats.prevFrame.id + 1;\r\n this.stats.currFrame.reset();\r\n this.stats.currFrame.id = frameId;\r\n this.stats.currFrame.delta = delta;\r\n this.stats.currFrame.fps = this.clock.fpsSampler.fps;\r\n GraphicsDiagnostics.clear();\r\n const beforeUpdate = this.clock.now();\r\n const fixedTimestepMs = 1000 / this.fixedUpdateFps;\r\n if (this.fixedUpdateFps) {\r\n this._lagMs += delta;\r\n while (this._lagMs >= fixedTimestepMs) {\r\n this._update(fixedTimestepMs);\r\n this._lagMs -= fixedTimestepMs;\r\n }\r\n }\r\n else {\r\n this._update(delta);\r\n }\r\n const afterUpdate = this.clock.now();\r\n this.currentFrameLagMs = this._lagMs;\r\n this._draw(delta);\r\n const afterDraw = this.clock.now();\r\n this.stats.currFrame.duration.update = afterUpdate - beforeUpdate;\r\n this.stats.currFrame.duration.draw = afterDraw - afterUpdate;\r\n this.stats.currFrame.graphics.drawnImages = GraphicsDiagnostics.DrawnImagesCount;\r\n this.stats.currFrame.graphics.drawCalls = GraphicsDiagnostics.DrawCallCount;\r\n this.emit('postframe', new PostFrameEvent(this, this.stats.currFrame));\r\n this.stats.prevFrame.reset(this.stats.currFrame);\r\n this._monitorPerformanceThresholdAndTriggerFallback();\r\n }\r\n /**\r\n * Stops Excalibur's main loop, useful for pausing the game.\r\n */\r\n stop() {\r\n if (this.clock.isRunning()) {\r\n this.emit('stop', new GameStopEvent(this));\r\n this.browser.pause();\r\n this.clock.stop();\r\n this._logger.debug('Game stopped');\r\n }\r\n }\r\n /**\r\n * Returns the Engine's running status, Useful for checking whether engine is running or paused.\r\n */\r\n isRunning() {\r\n return this.clock.isRunning();\r\n }\r\n /**\r\n * Takes a screen shot of the current viewport and returns it as an\r\n * HTML Image Element.\r\n * @param preserveHiDPIResolution in the case of HiDPI return the full scaled backing image, by default false\r\n */\r\n screenshot(preserveHiDPIResolution = false) {\r\n const screenShotPromise = new Promise((resolve) => {\r\n this._screenShotRequests.push({ preserveHiDPIResolution, resolve });\r\n });\r\n return screenShotPromise;\r\n }\r\n _checkForScreenShots() {\r\n // We must grab the draw buffer before we yield to the browser\r\n // the draw buffer is cleared after compositing\r\n // the reason for the asynchrony is setting `preserveDrawingBuffer: true`\r\n // forces the browser to copy buffers which can have a mass perf impact on mobile\r\n for (const request of this._screenShotRequests) {\r\n const finalWidth = request.preserveHiDPIResolution ? this.canvas.width : this.screen.resolution.width;\r\n const finalHeight = request.preserveHiDPIResolution ? this.canvas.height : this.screen.resolution.height;\r\n const screenshot = document.createElement('canvas');\r\n screenshot.width = finalWidth;\r\n screenshot.height = finalHeight;\r\n const ctx = screenshot.getContext('2d');\r\n ctx.drawImage(this.canvas, 0, 0, finalWidth, finalHeight);\r\n const result = new Image();\r\n const raw = screenshot.toDataURL('image/png');\r\n result.src = raw;\r\n request.resolve(result);\r\n }\r\n // Reset state\r\n this._screenShotRequests.length = 0;\r\n }\r\n /**\r\n * Another option available to you to load resources into the game.\r\n * Immediately after calling this the game will pause and the loading screen\r\n * will appear.\r\n * @param loader Some [[Loadable]] such as a [[Loader]] collection, [[Sound]], or [[Texture]].\r\n */\r\n async load(loader) {\r\n try {\r\n await loader.load();\r\n }\r\n catch (e) {\r\n this._logger.error('Error loading resources, things may not behave properly', e);\r\n await Promise.resolve();\r\n }\r\n }\r\n}\r\n/**\r\n * Default [[EngineOptions]]\r\n */\r\nEngine._DEFAULT_ENGINE_OPTIONS = {\r\n width: 0,\r\n height: 0,\r\n enableCanvasTransparency: true,\r\n useDrawSorting: true,\r\n configurePerformanceCanvas2DFallback: {\r\n allow: true,\r\n showPlayerMessage: false,\r\n threshold: { fps: 20, numberOfFrames: 100 }\r\n },\r\n canvasElementId: '',\r\n canvasElement: undefined,\r\n snapToPixel: false,\r\n pointerScope: PointerScope.Canvas,\r\n suppressConsoleBootMessage: null,\r\n suppressMinimumBrowserFeatureDetection: null,\r\n suppressHiDPIScaling: null,\r\n suppressPlayButton: null,\r\n scrollPreventionMode: ScrollPreventionMode.Canvas,\r\n backgroundColor: Color.fromHex('#2185d0') // Excalibur blue\r\n};\r\n\n;// CONCATENATED MODULE: ./Math/Index.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\n;// CONCATENATED MODULE: ./Debug/index.ts\n\r\n\r\n\r\n\n;// CONCATENATED MODULE: ./Label.ts\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Labels are the way to draw small amounts of text to the screen. They are\r\n * actors and inherit all of the benefits and capabilities.\r\n */\r\nclass Label extends Actor {\r\n /**\r\n * Build a new label\r\n * @param options\r\n */\r\n constructor(options) {\r\n super(options);\r\n this._font = new Font();\r\n this._text = new Text({ text: '', font: this._font });\r\n const { text, pos, x, y, spriteFont, font, color } = options;\r\n this.pos = pos !== null && pos !== void 0 ? pos : (x && y ? vec(x, y) : this.pos);\r\n this.text = text !== null && text !== void 0 ? text : this.text;\r\n this.font = font !== null && font !== void 0 ? font : this.font;\r\n this.spriteFont = spriteFont !== null && spriteFont !== void 0 ? spriteFont : this.spriteFont;\r\n this._text.color = color !== null && color !== void 0 ? color : this.color;\r\n const gfx = this.get(GraphicsComponent);\r\n gfx.anchor = Vector.Zero;\r\n gfx.use(this._text);\r\n }\r\n get font() {\r\n return this._font;\r\n }\r\n set font(newFont) {\r\n this._font = newFont;\r\n this._text.font = newFont;\r\n }\r\n /**\r\n * The text to draw.\r\n */\r\n get text() {\r\n return this._text.text;\r\n }\r\n set text(text) {\r\n this._text.text = text;\r\n }\r\n get color() {\r\n return this._text.color;\r\n }\r\n set color(color) {\r\n if (this._text) {\r\n this._text.color = color;\r\n }\r\n }\r\n get opacity() {\r\n return this._text.opacity;\r\n }\r\n set opacity(opacity) {\r\n this._text.opacity = opacity;\r\n }\r\n /**\r\n * The [[SpriteFont]] to use, if any. Overrides [[Font|font]] if present.\r\n */\r\n get spriteFont() {\r\n return this._spriteFont;\r\n }\r\n set spriteFont(sf) {\r\n if (sf) {\r\n this._spriteFont = sf;\r\n this._text.font = this._spriteFont;\r\n }\r\n }\r\n _initialize(engine) {\r\n super._initialize(engine);\r\n }\r\n /**\r\n * Returns the width of the text in the label (in pixels);\r\n */\r\n getTextWidth() {\r\n return this._text.width;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./TileMap/IsometricMap.ts\n\r\n\r\n\r\n\r\n\r\nclass IsometricTile extends Entity {\r\n /**\r\n * Construct a new IsometricTile\r\n * @param x tile coordinate in x (not world position)\r\n * @param y tile coordinate in y (not world position)\r\n * @param graphicsOffset offset that tile should be shifted by (default (0, 0))\r\n * @param map reference to owning IsometricMap\r\n */\r\n constructor(x, y, graphicsOffset, map) {\r\n super([\r\n new TransformComponent(),\r\n new GraphicsComponent({\r\n offset: graphicsOffset !== null && graphicsOffset !== void 0 ? graphicsOffset : Vector.Zero,\r\n onPostDraw: (gfx, elapsed) => this.draw(gfx, elapsed)\r\n }),\r\n new IsometricEntityComponent(map)\r\n ]);\r\n /**\r\n * Indicates whether this tile is solid\r\n */\r\n this.solid = false;\r\n this._tileBounds = new BoundingBox();\r\n this._graphics = [];\r\n /**\r\n * Tile colliders\r\n */\r\n this._colliders = [];\r\n this.x = x;\r\n this.y = y;\r\n this.map = map;\r\n this._transform = this.get(TransformComponent);\r\n this._isometricEntityComponent = this.get(IsometricEntityComponent);\r\n const halfTileWidth = this.map.tileWidth / 2;\r\n const halfTileHeight = this.map.tileHeight / 2;\r\n // See https://clintbellanger.net/articles/isometric_math/ for formula\r\n // The x position shifts left with every y step\r\n const xPos = (this.x - this.y) * halfTileWidth;\r\n // The y position needs to go down with every x step\r\n const yPos = (this.x + this.y) * halfTileHeight;\r\n this._transform.pos = vec(xPos, yPos);\r\n this._isometricEntityComponent.elevation = 0;\r\n this._gfx = this.get(GraphicsComponent);\r\n this._gfx.visible = false; // start not visible\r\n const totalWidth = this.map.tileWidth;\r\n const totalHeight = this.map.tileHeight;\r\n // initial guess at gfx bounds based on the tile\r\n const offset = vec(0, (this.map.renderFromTopOfGraphic ? totalHeight : 0));\r\n this._gfx.localBounds = this._tileBounds = new BoundingBox({\r\n left: -totalWidth / 2,\r\n top: -totalHeight,\r\n right: totalWidth / 2,\r\n bottom: totalHeight\r\n }).translate(offset);\r\n }\r\n getGraphics() {\r\n return this._graphics;\r\n }\r\n /**\r\n * Tile graphics\r\n */\r\n addGraphic(graphic) {\r\n this._graphics.push(graphic);\r\n this._gfx.visible = true;\r\n this._gfx.localBounds = this._recalculateBounds();\r\n }\r\n _recalculateBounds() {\r\n let bounds = this._tileBounds.clone();\r\n for (const graphic of this._graphics) {\r\n const offset = vec(this.map.graphicsOffset.x - this.map.tileWidth / 2, this.map.graphicsOffset.y - (this.map.renderFromTopOfGraphic ? 0 : (graphic.height - this.map.tileHeight)));\r\n bounds = bounds.combine(graphic.localBounds.translate(offset));\r\n }\r\n return bounds;\r\n }\r\n removeGraphic(graphic) {\r\n const index = this._graphics.indexOf(graphic);\r\n if (index > -1) {\r\n this._graphics.splice(index, 1);\r\n }\r\n this._gfx.localBounds = this._recalculateBounds();\r\n }\r\n clearGraphics() {\r\n this._graphics.length = 0;\r\n this._gfx.visible = false;\r\n this._gfx.localBounds = this._recalculateBounds();\r\n }\r\n getColliders() {\r\n return this._colliders;\r\n }\r\n /**\r\n * Adds a collider to the IsometricTile\r\n *\r\n * **Note!** the [[Tile.solid]] must be set to true for it to act as a \"fixed\" collider\r\n * @param collider\r\n */\r\n addCollider(collider) {\r\n this._colliders.push(collider);\r\n this.map.flagCollidersDirty();\r\n }\r\n /**\r\n * Removes a collider from the IsometricTile\r\n * @param collider\r\n */\r\n removeCollider(collider) {\r\n const index = this._colliders.indexOf(collider);\r\n if (index > -1) {\r\n this._colliders.splice(index, 1);\r\n }\r\n this.map.flagCollidersDirty();\r\n }\r\n /**\r\n * Clears all colliders from the IsometricTile\r\n */\r\n clearColliders() {\r\n this._colliders.length = 0;\r\n this.map.flagCollidersDirty();\r\n }\r\n /**\r\n * Returns the top left corner of the [[IsometricTile]] in world space\r\n */\r\n get pos() {\r\n return this.map.tileToWorld(vec(this.x, this.y));\r\n }\r\n /**\r\n * Returns the center of the [[IsometricTile]]\r\n */\r\n get center() {\r\n return this.pos.add(vec(0, this.map.tileHeight / 2));\r\n }\r\n draw(gfx, _elapsed) {\r\n const halfTileWidth = this.map.tileWidth / 2;\r\n gfx.save();\r\n // shift left origin to corner of map, not the left corner of the first sprite\r\n gfx.translate(-halfTileWidth, 0);\r\n for (const graphic of this._graphics) {\r\n graphic.draw(gfx, this.map.graphicsOffset.x, this.map.graphicsOffset.y - (this.map.renderFromTopOfGraphic ? 0 : (graphic.height - this.map.tileHeight)));\r\n }\r\n gfx.restore();\r\n }\r\n}\r\n/**\r\n * The IsometricMap is a special tile map that provides isometric rendering support to Excalibur\r\n *\r\n * The tileWidth and tileHeight should be the height and width in pixels of the parallelogram of the base of the tile art asset.\r\n * The tileWidth and tileHeight is not necessarily the same as your graphic pixel width and height.\r\n *\r\n * Please refer to the docs https://excaliburjs.com for more details calculating what your tile width and height should be given\r\n * your art assets.\r\n */\r\nclass IsometricMap extends Entity {\r\n constructor(options) {\r\n super([\r\n new TransformComponent(),\r\n new BodyComponent({\r\n type: CollisionType.Fixed\r\n }),\r\n new ColliderComponent(),\r\n new DebugGraphicsComponent((ctx) => this.debug(ctx), false)\r\n ], options.name);\r\n /**\r\n * Render the tile graphic from the top instead of the bottom\r\n *\r\n * default is `false` meaning rendering from the bottom\r\n */\r\n this.renderFromTopOfGraphic = false;\r\n this.graphicsOffset = vec(0, 0);\r\n this._collidersDirty = false;\r\n this._originalOffsets = new WeakMap();\r\n const { pos, tileWidth, tileHeight, columns: width, rows: height, renderFromTopOfGraphic, graphicsOffset } = options;\r\n this.transform = this.get(TransformComponent);\r\n if (pos) {\r\n this.transform.pos = pos;\r\n }\r\n this.collider = this.get(ColliderComponent);\r\n if (this.collider) {\r\n this.collider.set(this._composite = new CompositeCollider([]));\r\n }\r\n this.renderFromTopOfGraphic = renderFromTopOfGraphic !== null && renderFromTopOfGraphic !== void 0 ? renderFromTopOfGraphic : this.renderFromTopOfGraphic;\r\n this.graphicsOffset = graphicsOffset !== null && graphicsOffset !== void 0 ? graphicsOffset : this.graphicsOffset;\r\n this.tileWidth = tileWidth;\r\n this.tileHeight = tileHeight;\r\n this.columns = width;\r\n this.rows = height;\r\n this.tiles = new Array(width * height);\r\n // build up tile representation\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const tile = new IsometricTile(x, y, this.graphicsOffset, this);\r\n this.tiles[x + y * width] = tile;\r\n this.addChild(tile);\r\n // TODO row/columns helpers\r\n }\r\n }\r\n }\r\n update() {\r\n if (this._collidersDirty) {\r\n this.updateColliders();\r\n this._collidersDirty = false;\r\n }\r\n }\r\n flagCollidersDirty() {\r\n this._collidersDirty = true;\r\n }\r\n _getOrSetColliderOriginalOffset(collider) {\r\n if (!this._originalOffsets.has(collider)) {\r\n const originalOffset = collider.offset;\r\n this._originalOffsets.set(collider, originalOffset);\r\n return originalOffset;\r\n }\r\n else {\r\n return this._originalOffsets.get(collider);\r\n }\r\n }\r\n updateColliders() {\r\n this._composite.clearColliders();\r\n const pos = this.get(TransformComponent).pos;\r\n for (const tile of this.tiles) {\r\n if (tile.solid) {\r\n for (const collider of tile.getColliders()) {\r\n const originalOffset = this._getOrSetColliderOriginalOffset(collider);\r\n collider.offset = this.tileToWorld(vec(tile.x, tile.y))\r\n .sub(pos)\r\n .add(originalOffset)\r\n .sub(vec(this.tileWidth / 2, this.tileHeight)); // We need to unshift height based on drawing\r\n collider.owner = this;\r\n this._composite.addCollider(collider);\r\n }\r\n }\r\n }\r\n this.collider.update();\r\n }\r\n /**\r\n * Convert world space coordinates to the tile x, y coordinate\r\n * @param worldCoordinate\r\n */\r\n worldToTile(worldCoordinate) {\r\n worldCoordinate = worldCoordinate.sub(this.transform.globalPos);\r\n const halfTileWidth = this.tileWidth / 2;\r\n const halfTileHeight = this.tileHeight / 2;\r\n // See https://clintbellanger.net/articles/isometric_math/ for formula\r\n return vec(~~((worldCoordinate.x / halfTileWidth + (worldCoordinate.y / halfTileHeight)) / 2), ~~((worldCoordinate.y / halfTileHeight - (worldCoordinate.x / halfTileWidth)) / 2));\r\n }\r\n /**\r\n * Given a tile coordinate, return the top left corner in world space\r\n * @param tileCoordinate\r\n */\r\n tileToWorld(tileCoordinate) {\r\n const halfTileWidth = this.tileWidth / 2;\r\n const halfTileHeight = this.tileHeight / 2;\r\n // The x position shifts left with every y step\r\n const xPos = (tileCoordinate.x - tileCoordinate.y) * halfTileWidth;\r\n // The y position needs to go down with every x step\r\n const yPos = (tileCoordinate.x + tileCoordinate.y) * halfTileHeight;\r\n return vec(xPos, yPos).add(this.transform.pos);\r\n }\r\n /**\r\n * Returns the [[IsometricTile]] by its x and y coordinates\r\n */\r\n getTile(x, y) {\r\n if (x < 0 || y < 0 || x >= this.columns || y >= this.rows) {\r\n return null;\r\n }\r\n return this.tiles[x + y * this.columns];\r\n }\r\n /**\r\n * Returns the [[IsometricTile]] by testing a point in world coordinates,\r\n * returns `null` if no Tile was found.\r\n */\r\n getTileByPoint(point) {\r\n const tileCoord = this.worldToTile(point);\r\n const tile = this.getTile(tileCoord.x, tileCoord.y);\r\n return tile;\r\n }\r\n _getMaxZIndex() {\r\n let maxZ = Number.NEGATIVE_INFINITY;\r\n for (const tile of this.tiles) {\r\n const currentZ = tile.get(TransformComponent).z;\r\n if (currentZ > maxZ) {\r\n maxZ = currentZ;\r\n }\r\n }\r\n return maxZ;\r\n }\r\n /**\r\n * Debug draw for IsometricMap, called internally by excalibur when debug mode is toggled on\r\n * @param gfx\r\n */\r\n debug(gfx) {\r\n gfx.save();\r\n gfx.z = this._getMaxZIndex() + 0.5;\r\n for (let y = 0; y < this.rows + 1; y++) {\r\n const left = this.tileToWorld(vec(0, y));\r\n const right = this.tileToWorld(vec(this.columns, y));\r\n gfx.drawLine(left, right, Color.Red, 2);\r\n }\r\n for (let x = 0; x < this.columns + 1; x++) {\r\n const top = this.tileToWorld(vec(x, 0));\r\n const bottom = this.tileToWorld(vec(x, this.rows));\r\n gfx.drawLine(top, bottom, Color.Red, 2);\r\n }\r\n for (const tile of this.tiles) {\r\n gfx.drawCircle(this.tileToWorld(vec(tile.x, tile.y)), 3, Color.Yellow);\r\n }\r\n gfx.restore();\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./TileMap/index.ts\n\r\n\r\n\r\n\r\n\n;// CONCATENATED MODULE: ./Actions/Action/ActionSequence.ts\n\r\n/**\r\n * Action that can represent a sequence of actions, this can be useful in conjunction with\r\n * [[ParallelActions]] to run multiple sequences in parallel.\r\n */\r\nclass ActionSequence {\r\n constructor(entity, actionBuilder) {\r\n this._stopped = false;\r\n this._sequenceBuilder = actionBuilder;\r\n this._sequenceContext = new ActionContext(entity);\r\n this._actionQueue = this._sequenceContext.getQueue();\r\n this._sequenceBuilder(this._sequenceContext);\r\n }\r\n update(delta) {\r\n this._actionQueue.update(delta);\r\n }\r\n isComplete() {\r\n return this._stopped || this._actionQueue.isComplete();\r\n }\r\n stop() {\r\n this._stopped = true;\r\n }\r\n reset() {\r\n this._stopped = false;\r\n this._actionQueue.reset();\r\n }\r\n clone(entity) {\r\n return new ActionSequence(entity, this._sequenceBuilder);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/ParallelActions.ts\n/**\r\n * Action that can run multiple [[Action]]s or [[ActionSequence]]s at the same time\r\n */\r\nclass ParallelActions {\r\n constructor(parallelActions) {\r\n this._actions = parallelActions;\r\n }\r\n update(delta) {\r\n for (let i = 0; i < this._actions.length; i++) {\r\n this._actions[i].update(delta);\r\n }\r\n }\r\n isComplete(entity) {\r\n return this._actions.every(a => a.isComplete(entity));\r\n }\r\n reset() {\r\n this._actions.forEach(a => a.reset());\r\n }\r\n stop() {\r\n this._actions.forEach(a => a.stop());\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Index.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\n;// CONCATENATED MODULE: ./Collision/Group/CollisionGroupManager.ts\n\r\n/**\r\n * Static class for managing collision groups in excalibur, there is a maximum of 32 collision groups possible in excalibur\r\n */\r\nclass CollisionGroupManager {\r\n /**\r\n * Create a new named collision group up to a max of 32.\r\n * @param name Name for the collision group\r\n * @param mask Optionally provide your own 32-bit mask, if none is provide the manager will generate one\r\n */\r\n static create(name, mask) {\r\n if (this._CURRENT_GROUP > this._MAX_GROUPS) {\r\n throw new Error(`Cannot have more than ${this._MAX_GROUPS} collision groups`);\r\n }\r\n if (this._GROUPS.get(name)) {\r\n throw new Error(`Collision group ${name} already exists`);\r\n }\r\n const group = new CollisionGroup(name, this._CURRENT_BIT, mask !== undefined ? mask : ~this._CURRENT_BIT);\r\n this._CURRENT_BIT = (this._CURRENT_BIT << 1) | 0;\r\n this._CURRENT_GROUP++;\r\n this._GROUPS.set(name, group);\r\n return group;\r\n }\r\n /**\r\n * Get all collision groups currently tracked by excalibur\r\n */\r\n static get groups() {\r\n return Array.from(this._GROUPS.values());\r\n }\r\n /**\r\n * Get a collision group by it's name\r\n * @param name\r\n */\r\n static groupByName(name) {\r\n return this._GROUPS.get(name);\r\n }\r\n /**\r\n * Resets the managers internal group management state\r\n */\r\n static reset() {\r\n this._GROUPS = new Map();\r\n this._CURRENT_BIT = this._STARTING_BIT;\r\n this._CURRENT_GROUP = 1;\r\n }\r\n}\r\n// using bitmasking the maximum number of groups is 32, because that is the highest 32bit integer that JS can present.\r\nCollisionGroupManager._STARTING_BIT = 0b1 | 0;\r\nCollisionGroupManager._MAX_GROUPS = 32;\r\nCollisionGroupManager._CURRENT_GROUP = 1;\r\nCollisionGroupManager._CURRENT_BIT = CollisionGroupManager._STARTING_BIT;\r\nCollisionGroupManager._GROUPS = new Map();\r\n\n;// CONCATENATED MODULE: ./Collision/Index.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\n;// CONCATENATED MODULE: ./Interfaces/LifecycleEvents.ts\n/**\r\n * Type guard checking for internal initialize method\r\n * @internal\r\n * @param a\r\n */\r\nfunction has_initialize(a) {\r\n return !!a._initialize;\r\n}\r\n/**\r\n *\r\n */\r\nfunction hasOnInitialize(a) {\r\n return !!a.onInitialize;\r\n}\r\n/**\r\n *\r\n */\r\nfunction has_preupdate(a) {\r\n return !!a._preupdate;\r\n}\r\n/**\r\n *\r\n */\r\nfunction hasOnPreUpdate(a) {\r\n return !!a.onPreUpdate;\r\n}\r\n/**\r\n *\r\n */\r\nfunction has_postupdate(a) {\r\n return !!a.onPostUpdate;\r\n}\r\n/**\r\n *\r\n */\r\nfunction hasOnPostUpdate(a) {\r\n return !!a.onPostUpdate;\r\n}\r\n/**\r\n *\r\n */\r\nfunction hasPreDraw(a) {\r\n return !!a.onPreDraw;\r\n}\r\n/**\r\n *\r\n */\r\nfunction hasPostDraw(a) {\r\n return !!a.onPostDraw;\r\n}\r\n\n;// CONCATENATED MODULE: ./Interfaces/Index.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\n;// CONCATENATED MODULE: ./Resources/Sound/Index.ts\n\r\n\r\n\r\n\n;// CONCATENATED MODULE: ./Resources/Gif.ts\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * The [[Texture]] object allows games built in Excalibur to load image resources.\r\n * [[Texture]] is an [[Loadable]] which means it can be passed to a [[Loader]]\r\n * to pre-load before starting a level or game.\r\n */\r\nclass Gif {\r\n /**\r\n * @param path Path to the image resource\r\n * @param color Optionally set the color to treat as transparent the gif, by default [[Color.Magenta]]\r\n * @param bustCache Optionally load texture with cache busting\r\n */\r\n constructor(path, color = Color.Magenta, bustCache = true) {\r\n this.path = path;\r\n this.color = color;\r\n this.bustCache = bustCache;\r\n this._stream = null;\r\n this._gif = null;\r\n this._textures = [];\r\n this._animation = null;\r\n this._transparentColor = null;\r\n this._resource = new Resource(path, 'arraybuffer', bustCache);\r\n this._transparentColor = color;\r\n }\r\n /**\r\n * Begins loading the texture and returns a promise to be resolved on completion\r\n */\r\n async load() {\r\n const arraybuffer = await this._resource.load();\r\n this._stream = new Stream(arraybuffer);\r\n this._gif = new ParseGif(this._stream, this._transparentColor);\r\n const images = this._gif.images.map(i => new ImageSource(i.src, false));\r\n // Load all textures\r\n await Promise.all(images.map(t => t.load()));\r\n return this.data = this._textures = images;\r\n }\r\n isLoaded() {\r\n return !!this.data;\r\n }\r\n /**\r\n * Return a frame of the gif as a sprite by id\r\n * @param id\r\n */\r\n toSprite(id = 0) {\r\n const sprite = this._textures[id].toSprite();\r\n return sprite;\r\n }\r\n /**\r\n * Return the gif as a spritesheet\r\n */\r\n toSpriteSheet() {\r\n const sprites = this._textures.map((image) => {\r\n return image.toSprite();\r\n });\r\n return new SpriteSheet({ sprites });\r\n }\r\n /**\r\n * Transform the GIF into an animation with duration per frame\r\n */\r\n toAnimation(durationPerFrameMs) {\r\n const spriteSheet = this.toSpriteSheet();\r\n const length = spriteSheet.sprites.length;\r\n this._animation = Animation.fromSpriteSheet(spriteSheet, range(0, length), durationPerFrameMs);\r\n return this._animation;\r\n }\r\n get readCheckBytes() {\r\n return this._gif.checkBytes;\r\n }\r\n}\r\nconst bitsToNum = (ba) => {\r\n return ba.reduce(function (s, n) {\r\n return s * 2 + n;\r\n }, 0);\r\n};\r\nconst byteToBitArr = (bite) => {\r\n const a = [];\r\n for (let i = 7; i >= 0; i--) {\r\n a.push(!!(bite & (1 << i)));\r\n }\r\n return a;\r\n};\r\nclass Stream {\r\n constructor(dataArray) {\r\n this.data = null;\r\n this.len = 0;\r\n this.position = 0;\r\n this.readByte = () => {\r\n if (this.position >= this.data.byteLength) {\r\n throw new Error('Attempted to read past end of stream.');\r\n }\r\n return this.data[this.position++];\r\n };\r\n this.readBytes = (n) => {\r\n const bytes = [];\r\n for (let i = 0; i < n; i++) {\r\n bytes.push(this.readByte());\r\n }\r\n return bytes;\r\n };\r\n this.read = (n) => {\r\n let s = '';\r\n for (let i = 0; i < n; i++) {\r\n s += String.fromCharCode(this.readByte());\r\n }\r\n return s;\r\n };\r\n this.readUnsigned = () => {\r\n // Little-endian.\r\n const a = this.readBytes(2);\r\n return (a[1] << 8) + a[0];\r\n };\r\n this.data = new Uint8Array(dataArray);\r\n this.len = this.data.byteLength;\r\n if (this.len === 0) {\r\n throw new Error('No data loaded from file');\r\n }\r\n }\r\n}\r\nconst lzwDecode = function (minCodeSize, data) {\r\n // TODO: Now that the GIF parser is a bit different, maybe this should get an array of bytes instead of a String?\r\n let pos = 0; // Maybe this streaming thing should be merged with the Stream?\r\n const readCode = function (size) {\r\n let code = 0;\r\n for (let i = 0; i < size; i++) {\r\n if (data.charCodeAt(pos >> 3) & (1 << (pos & 7))) {\r\n code |= 1 << i;\r\n }\r\n pos++;\r\n }\r\n return code;\r\n };\r\n const output = [];\r\n const clearCode = 1 << minCodeSize;\r\n const eoiCode = clearCode + 1;\r\n let codeSize = minCodeSize + 1;\r\n let dict = [];\r\n const clear = function () {\r\n dict = [];\r\n codeSize = minCodeSize + 1;\r\n for (let i = 0; i < clearCode; i++) {\r\n dict[i] = [i];\r\n }\r\n dict[clearCode] = [];\r\n dict[eoiCode] = null;\r\n };\r\n let code;\r\n let last;\r\n while (true) {\r\n last = code;\r\n code = readCode(codeSize);\r\n if (code === clearCode) {\r\n clear();\r\n continue;\r\n }\r\n if (code === eoiCode) {\r\n break;\r\n }\r\n if (code < dict.length) {\r\n if (last !== clearCode) {\r\n dict.push(dict[last].concat(dict[code][0]));\r\n }\r\n }\r\n else {\r\n if (code !== dict.length) {\r\n throw new Error('Invalid LZW code.');\r\n }\r\n dict.push(dict[last].concat(dict[last][0]));\r\n }\r\n output.push.apply(output, dict[code]);\r\n if (dict.length === 1 << codeSize && codeSize < 12) {\r\n // If we're at the last code and codeSize is 12, the next code will be a clearCode, and it'll be 12 bits long.\r\n codeSize++;\r\n }\r\n }\r\n // I don't know if this is technically an error, but some GIFs do it.\r\n //if (Math.ceil(pos / 8) !== data.length) throw new Error('Extraneous LZW bytes.');\r\n return output;\r\n};\r\n// The actual parsing; returns an object with properties.\r\nclass ParseGif {\r\n constructor(stream, color = Color.Magenta) {\r\n this._st = null;\r\n this._handler = {};\r\n this._transparentColor = null;\r\n this.frames = [];\r\n this.images = [];\r\n this.globalColorTable = [];\r\n this.checkBytes = [];\r\n // LZW (GIF-specific)\r\n this.parseColorTable = (entries) => {\r\n // Each entry is 3 bytes, for RGB.\r\n const ct = [];\r\n for (let i = 0; i < entries; i++) {\r\n const rgb = this._st.readBytes(3);\r\n const rgba = '#' +\r\n rgb\r\n .map((x) => {\r\n const hex = x.toString(16);\r\n return hex.length === 1 ? '0' + hex : hex;\r\n })\r\n .join('');\r\n ct.push(rgba);\r\n }\r\n return ct;\r\n };\r\n this.readSubBlocks = () => {\r\n let size, data;\r\n data = '';\r\n do {\r\n size = this._st.readByte();\r\n data += this._st.read(size);\r\n } while (size !== 0);\r\n return data;\r\n };\r\n this.parseHeader = () => {\r\n const hdr = {\r\n sig: null,\r\n ver: null,\r\n width: null,\r\n height: null,\r\n colorRes: null,\r\n globalColorTableSize: null,\r\n gctFlag: null,\r\n sorted: null,\r\n globalColorTable: [],\r\n bgColor: null,\r\n pixelAspectRatio: null // if not 0, aspectRatio = (pixelAspectRatio + 15) / 64\r\n };\r\n hdr.sig = this._st.read(3);\r\n hdr.ver = this._st.read(3);\r\n if (hdr.sig !== 'GIF') {\r\n throw new Error('Not a GIF file.'); // XXX: This should probably be handled more nicely.\r\n }\r\n hdr.width = this._st.readUnsigned();\r\n hdr.height = this._st.readUnsigned();\r\n const bits = byteToBitArr(this._st.readByte());\r\n hdr.gctFlag = bits.shift();\r\n hdr.colorRes = bitsToNum(bits.splice(0, 3));\r\n hdr.sorted = bits.shift();\r\n hdr.globalColorTableSize = bitsToNum(bits.splice(0, 3));\r\n hdr.bgColor = this._st.readByte();\r\n hdr.pixelAspectRatio = this._st.readByte(); // if not 0, aspectRatio = (pixelAspectRatio + 15) / 64\r\n if (hdr.gctFlag) {\r\n hdr.globalColorTable = this.parseColorTable(1 << (hdr.globalColorTableSize + 1));\r\n this.globalColorTable = hdr.globalColorTable;\r\n }\r\n if (this._handler.hdr && this._handler.hdr(hdr)) {\r\n this.checkBytes.push(this._handler.hdr);\r\n }\r\n };\r\n this.parseExt = (block) => {\r\n const parseGCExt = (block) => {\r\n this.checkBytes.push(this._st.readByte()); // Always 4\r\n const bits = byteToBitArr(this._st.readByte());\r\n block.reserved = bits.splice(0, 3); // Reserved; should be 000.\r\n block.disposalMethod = bitsToNum(bits.splice(0, 3));\r\n block.userInput = bits.shift();\r\n block.transparencyGiven = bits.shift();\r\n block.delayTime = this._st.readUnsigned();\r\n block.transparencyIndex = this._st.readByte();\r\n block.terminator = this._st.readByte();\r\n if (this._handler.gce && this._handler.gce(block)) {\r\n this.checkBytes.push(this._handler.gce);\r\n }\r\n };\r\n const parseComExt = (block) => {\r\n block.comment = this.readSubBlocks();\r\n if (this._handler.com && this._handler.com(block)) {\r\n this.checkBytes.push(this._handler.com);\r\n }\r\n };\r\n const parsePTExt = (block) => {\r\n this.checkBytes.push(this._st.readByte()); // Always 12\r\n block.ptHeader = this._st.readBytes(12);\r\n block.ptData = this.readSubBlocks();\r\n if (this._handler.pte && this._handler.pte(block)) {\r\n this.checkBytes.push(this._handler.pte);\r\n }\r\n };\r\n const parseAppExt = (block) => {\r\n const parseNetscapeExt = (block) => {\r\n this.checkBytes.push(this._st.readByte()); // Always 3\r\n block.unknown = this._st.readByte(); // Q: Always 1? What is this?\r\n block.iterations = this._st.readUnsigned();\r\n block.terminator = this._st.readByte();\r\n if (this._handler.app && this._handler.app.NETSCAPE && this._handler.app.NETSCAPE(block)) {\r\n this.checkBytes.push(this._handler.app);\r\n }\r\n };\r\n const parseUnknownAppExt = (block) => {\r\n block.appData = this.readSubBlocks();\r\n // FIXME: This won't work if a handler wants to match on any identifier.\r\n if (this._handler.app && this._handler.app[block.identifier] && this._handler.app[block.identifier](block)) {\r\n this.checkBytes.push(this._handler.app[block.identifier]);\r\n }\r\n };\r\n this.checkBytes.push(this._st.readByte()); // Always 11\r\n block.identifier = this._st.read(8);\r\n block.authCode = this._st.read(3);\r\n switch (block.identifier) {\r\n case 'NETSCAPE':\r\n parseNetscapeExt(block);\r\n break;\r\n default:\r\n parseUnknownAppExt(block);\r\n break;\r\n }\r\n };\r\n const parseUnknownExt = (block) => {\r\n block.data = this.readSubBlocks();\r\n if (this._handler.unknown && this._handler.unknown(block)) {\r\n this.checkBytes.push(this._handler.unknown);\r\n }\r\n };\r\n block.label = this._st.readByte();\r\n switch (block.label) {\r\n case 0xf9:\r\n block.extType = 'gce';\r\n parseGCExt(block);\r\n break;\r\n case 0xfe:\r\n block.extType = 'com';\r\n parseComExt(block);\r\n break;\r\n case 0x01:\r\n block.extType = 'pte';\r\n parsePTExt(block);\r\n break;\r\n case 0xff:\r\n block.extType = 'app';\r\n parseAppExt(block);\r\n break;\r\n default:\r\n block.extType = 'unknown';\r\n parseUnknownExt(block);\r\n break;\r\n }\r\n };\r\n this.parseImg = (img) => {\r\n const deinterlace = (pixels, width) => {\r\n // Of course this defeats the purpose of interlacing. And it's *probably*\r\n // the least efficient way it's ever been implemented. But nevertheless...\r\n const newPixels = new Array(pixels.length);\r\n const rows = pixels.length / width;\r\n const cpRow = (toRow, fromRow) => {\r\n const fromPixels = pixels.slice(fromRow * width, (fromRow + 1) * width);\r\n newPixels.splice.apply(newPixels, [toRow * width, width].concat(fromPixels));\r\n };\r\n const offsets = [0, 4, 2, 1];\r\n const steps = [8, 8, 4, 2];\r\n let fromRow = 0;\r\n for (let pass = 0; pass < 4; pass++) {\r\n for (let toRow = offsets[pass]; toRow < rows; toRow += steps[pass]) {\r\n cpRow(toRow, fromRow);\r\n fromRow++;\r\n }\r\n }\r\n return newPixels;\r\n };\r\n img.leftPos = this._st.readUnsigned();\r\n img.topPos = this._st.readUnsigned();\r\n img.width = this._st.readUnsigned();\r\n img.height = this._st.readUnsigned();\r\n const bits = byteToBitArr(this._st.readByte());\r\n img.lctFlag = bits.shift();\r\n img.interlaced = bits.shift();\r\n img.sorted = bits.shift();\r\n img.reserved = bits.splice(0, 2);\r\n img.lctSize = bitsToNum(bits.splice(0, 3));\r\n if (img.lctFlag) {\r\n img.lct = this.parseColorTable(1 << (img.lctSize + 1));\r\n }\r\n img.lzwMinCodeSize = this._st.readByte();\r\n const lzwData = this.readSubBlocks();\r\n img.pixels = lzwDecode(img.lzwMinCodeSize, lzwData);\r\n if (img.interlaced) {\r\n // Move\r\n img.pixels = deinterlace(img.pixels, img.width);\r\n }\r\n this.frames.push(img);\r\n this.arrayToImage(img);\r\n if (this._handler.img && this._handler.img(img)) {\r\n this.checkBytes.push(this._handler);\r\n }\r\n };\r\n this.parseBlock = () => {\r\n const block = {\r\n sentinel: this._st.readByte(),\r\n type: ''\r\n };\r\n const blockChar = String.fromCharCode(block.sentinel);\r\n switch (blockChar) {\r\n case '!':\r\n block.type = 'ext';\r\n this.parseExt(block);\r\n break;\r\n case ',':\r\n block.type = 'img';\r\n this.parseImg(block);\r\n break;\r\n case ';':\r\n block.type = 'eof';\r\n if (this._handler.eof && this._handler.eof(block)) {\r\n this.checkBytes.push(this._handler.eof);\r\n }\r\n break;\r\n default:\r\n throw new Error('Unknown block: 0x' + block.sentinel.toString(16));\r\n }\r\n if (block.type !== 'eof') {\r\n this.parseBlock();\r\n }\r\n };\r\n this.arrayToImage = (frame) => {\r\n let count = 0;\r\n const c = document.createElement('canvas');\r\n c.id = count.toString();\r\n c.width = frame.width;\r\n c.height = frame.height;\r\n count++;\r\n const context = c.getContext('2d');\r\n const pixSize = 1;\r\n let y = 0;\r\n let x = 0;\r\n for (let i = 0; i < frame.pixels.length; i++) {\r\n if (x % frame.width === 0) {\r\n y++;\r\n x = 0;\r\n }\r\n if (this.globalColorTable[frame.pixels[i]] === this._transparentColor.toHex()) {\r\n context.fillStyle = `rgba(0, 0, 0, 0)`;\r\n }\r\n else {\r\n context.fillStyle = this.globalColorTable[frame.pixels[i]];\r\n }\r\n context.fillRect(x, y, pixSize, pixSize);\r\n x++;\r\n }\r\n const img = new Image();\r\n img.src = c.toDataURL();\r\n this.images.push(img);\r\n };\r\n this._st = stream;\r\n this._handler = {};\r\n this._transparentColor = color;\r\n this.parseHeader();\r\n this.parseBlock();\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Resources/Index.ts\n\r\n\r\n\r\n\n;// CONCATENATED MODULE: ./EntityComponentSystem/index.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\n;// CONCATENATED MODULE: ./Graphics/Line.ts\n\r\n\r\n\r\nclass Line extends Graphic {\r\n constructor(options) {\r\n super();\r\n this.color = Color.Black;\r\n this.thickness = 1;\r\n const { start, end, color, thickness } = options;\r\n this.start = start;\r\n this.end = end;\r\n this.color = color !== null && color !== void 0 ? color : this.color;\r\n this.thickness = thickness !== null && thickness !== void 0 ? thickness : this.thickness;\r\n const { width, height } = BoundingBox.fromPoints([start, end]);\r\n this.width = width;\r\n this.height = height;\r\n }\r\n _drawImage(ctx, _x, _y) {\r\n ctx.drawLine(this.start, this.end, this.color, this.thickness);\r\n }\r\n clone() {\r\n return new Line({\r\n start: this.start,\r\n end: this.end,\r\n color: this.color,\r\n thickness: this.thickness\r\n });\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Polygon.ts\n\r\n\r\n\r\n/**\r\n * A polygon [[Graphic]] for drawing arbitrary polygons to the [[ExcaliburGraphicsContext]]\r\n *\r\n * Polygons default to [[ImageFiltering.Blended]]\r\n */\r\nclass Polygon extends Raster {\r\n constructor(options) {\r\n super(options);\r\n this.points = options.points;\r\n this.filtering = ImageFiltering.Blended;\r\n this.rasterize();\r\n }\r\n get points() {\r\n return this._points;\r\n }\r\n set points(points) {\r\n this._points = points;\r\n const min = this.minPoint;\r\n this.width = this._points.reduce((max, p) => Math.max(p.x, max), 0) - min.x;\r\n this.height = this._points.reduce((max, p) => Math.max(p.y, max), 0) - min.y;\r\n this.flagDirty();\r\n }\r\n get minPoint() {\r\n const minX = this._points.reduce((min, p) => Math.min(p.x, min), Infinity);\r\n const minY = this._points.reduce((min, p) => Math.min(p.y, min), Infinity);\r\n return vec(minX, minY);\r\n }\r\n clone() {\r\n return new Polygon({\r\n points: this.points.map((p) => p.clone()),\r\n ...this.cloneGraphicOptions(),\r\n ...this.cloneRasterOptions()\r\n });\r\n }\r\n execute(ctx) {\r\n if (this.points && this.points.length) {\r\n ctx.beginPath();\r\n // Iterate through the supplied points and construct a 'polygon'\r\n const min = this.minPoint.negate();\r\n const firstPoint = this.points[0].add(min);\r\n ctx.moveTo(firstPoint.x, firstPoint.y);\r\n this.points.forEach((point) => {\r\n ctx.lineTo(point.x + min.x, point.y + min.y);\r\n });\r\n ctx.lineTo(firstPoint.x, firstPoint.y);\r\n ctx.closePath();\r\n if (this.color) {\r\n ctx.fill();\r\n }\r\n if (this.strokeColor) {\r\n ctx.stroke();\r\n }\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/index.ts\n// Graphics\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Graphics ECS\r\n\r\n\r\n\r\n\r\n\r\n// Raster graphics\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Post Processor\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Rendering\r\n\r\n\r\n\r\n\r\n\r\n// Util\r\n\r\n\r\n\n;// CONCATENATED MODULE: ./Input/Index.ts\n/**\r\n * @module\r\n * Provides support for mice, keyboards, and controllers.\r\n */\r\n/**\r\n * @typedoc\r\n */\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\n;// CONCATENATED MODULE: ./Util/Index.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\n;// CONCATENATED MODULE: ./Util/Semaphore.ts\n\r\nclass AsyncWaitQueue {\r\n constructor() {\r\n // Code from StephenCleary https://gist.github.com/StephenCleary/ba50b2da419c03b9cba1d20cb4654d5e\r\n this._queue = [];\r\n }\r\n get length() {\r\n return this._queue.length;\r\n }\r\n enqueue() {\r\n const future = new Future();\r\n this._queue.push(future);\r\n return future.promise;\r\n }\r\n dequeue(value) {\r\n const future = this._queue.shift();\r\n future.resolve(value);\r\n }\r\n}\r\n/**\r\n * Semaphore allows you to limit the amount of async calls happening between `enter()` and `exit()`\r\n *\r\n * This can be useful when limiting the number of http calls, browser api calls, etc either for performance or to work\r\n * around browser limitations like max Image.decode() calls in chromium being 256.\r\n */\r\nclass Semaphore {\r\n constructor(_count) {\r\n this._count = _count;\r\n this._waitQueue = new AsyncWaitQueue();\r\n }\r\n get count() {\r\n return this._count;\r\n }\r\n get waiting() {\r\n return this._waitQueue.length;\r\n }\r\n async enter() {\r\n if (this._count !== 0) {\r\n this._count--;\r\n return Promise.resolve();\r\n }\r\n return this._waitQueue.enqueue();\r\n }\r\n exit(count = 1) {\r\n if (count === 0) {\r\n return;\r\n }\r\n while (count !== 0 && this._waitQueue.length !== 0) {\r\n this._waitQueue.dequeue(null);\r\n count--;\r\n }\r\n this._count += count;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./index.ts\n/**\r\n * The current Excalibur version string\r\n * @description `process.env.__EX_VERSION` gets replaced by Webpack on build\r\n */\r\nconst EX_VERSION = \"0.27.0\";\r\n\r\npolyfill();\r\n// This file is used as the bundle entry point and exports everything\r\n// that will be exposed as the `ex` global variable.\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// ex.Events namespace\r\n\r\n\r\n// ex.Input namespace\r\n\r\n\r\n\r\n\r\n// ex.Util namespaces\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// ex.Deprecated\r\n// import * as deprecated from './Deprecated';\r\n// export { deprecated as Deprecated };\r\n// export * from './Deprecated';\r\n\n})();\n\nvar __webpack_exports__ActionContext = __webpack_exports__.fWn;\nvar __webpack_exports__ActionQueue = __webpack_exports__.Ia8;\nvar __webpack_exports__ActionSequence = __webpack_exports__.rqv;\nvar __webpack_exports__ActionsComponent = __webpack_exports__.hLI;\nvar __webpack_exports__ActionsSystem = __webpack_exports__.yyv;\nvar __webpack_exports__ActivateEvent = __webpack_exports__.tX5;\nvar __webpack_exports__Actor = __webpack_exports__.vtX;\nvar __webpack_exports__AddedComponent = __webpack_exports__.r7K;\nvar __webpack_exports__AddedEntity = __webpack_exports__.lCh;\nvar __webpack_exports__AffineMatrix = __webpack_exports__.cE4;\nvar __webpack_exports__Animation = __webpack_exports__.fwF;\nvar __webpack_exports__AnimationDirection = __webpack_exports__.sce;\nvar __webpack_exports__AnimationStrategy = __webpack_exports__._c7;\nvar __webpack_exports__ArcadeSolver = __webpack_exports__.KUs;\nvar __webpack_exports__AudioContextFactory = __webpack_exports__.Ajp;\nvar __webpack_exports__Axis = __webpack_exports__.RDh;\nvar __webpack_exports__BaseAlign = __webpack_exports__._H9;\nvar __webpack_exports__Blink = __webpack_exports__.mxs;\nvar __webpack_exports__BodyComponent = __webpack_exports__.OmD;\nvar __webpack_exports__BoundingBox = __webpack_exports__.kBf;\nvar __webpack_exports__BroadphaseStrategy = __webpack_exports__.C4F;\nvar __webpack_exports__BrowserComponent = __webpack_exports__.NQt;\nvar __webpack_exports__BrowserEvents = __webpack_exports__.JjN;\nvar __webpack_exports__Camera = __webpack_exports__.V1s;\nvar __webpack_exports__Canvas = __webpack_exports__.Xz7;\nvar __webpack_exports__Circle = __webpack_exports__.Cdc;\nvar __webpack_exports__CircleCollider = __webpack_exports__.FKn;\nvar __webpack_exports__Class = __webpack_exports__.wTW;\nvar __webpack_exports__Clock = __webpack_exports__.SUY;\nvar __webpack_exports__ClosestLine = __webpack_exports__.ab2;\nvar __webpack_exports__ClosestLineJumpTable = __webpack_exports__.GfZ;\nvar __webpack_exports__Collider = __webpack_exports__.YMS;\nvar __webpack_exports__ColliderComponent = __webpack_exports__.oyv;\nvar __webpack_exports__CollisionContact = __webpack_exports__.aUb;\nvar __webpack_exports__CollisionEndEvent = __webpack_exports__.SdD;\nvar __webpack_exports__CollisionGroup = __webpack_exports__.JUv;\nvar __webpack_exports__CollisionGroupManager = __webpack_exports__.jEj;\nvar __webpack_exports__CollisionJumpTable = __webpack_exports__.TFq;\nvar __webpack_exports__CollisionPostSolveEvent = __webpack_exports__.HDU;\nvar __webpack_exports__CollisionPreSolveEvent = __webpack_exports__.R_y;\nvar __webpack_exports__CollisionResolutionStrategy = __webpack_exports__.ydN;\nvar __webpack_exports__CollisionStartEvent = __webpack_exports__.t50;\nvar __webpack_exports__CollisionSystem = __webpack_exports__.s$$;\nvar __webpack_exports__CollisionType = __webpack_exports__.v2G;\nvar __webpack_exports__Color = __webpack_exports__.Ilk;\nvar __webpack_exports__ColorBlindFlags = __webpack_exports__.s9i;\nvar __webpack_exports__ColorBlindnessMode = __webpack_exports__.dxL;\nvar __webpack_exports__ColorBlindnessPostProcessor = __webpack_exports__.LLX;\nvar __webpack_exports__Component = __webpack_exports__.wA2;\nvar __webpack_exports__CompositeCollider = __webpack_exports__.R_p;\nvar __webpack_exports__Configurable = __webpack_exports__.IQ$;\nvar __webpack_exports__ConsoleAppender = __webpack_exports__.I5F;\nvar __webpack_exports__ContactConstraintPoint = __webpack_exports__.X8$;\nvar __webpack_exports__ContactEndEvent = __webpack_exports__.FR6;\nvar __webpack_exports__ContactStartEvent = __webpack_exports__.U8o;\nvar __webpack_exports__CoordPlane = __webpack_exports__.kbG;\nvar __webpack_exports__DeactivateEvent = __webpack_exports__.iS_;\nvar __webpack_exports__Debug = __webpack_exports__.cGG;\nvar __webpack_exports__DebugGraphicsComponent = __webpack_exports__.RPN;\nvar __webpack_exports__DebugSystem = __webpack_exports__.skb;\nvar __webpack_exports__DebugText = __webpack_exports__.SLU;\nvar __webpack_exports__DegreeOfFreedom = __webpack_exports__.RdJ;\nvar __webpack_exports__Delay = __webpack_exports__.cNu;\nvar __webpack_exports__Detector = __webpack_exports__.gU7;\nvar __webpack_exports__Die = __webpack_exports__.LSk;\nvar __webpack_exports__Direction = __webpack_exports__.Nmp;\nvar __webpack_exports__DisplayMode = __webpack_exports__.d1Y;\nvar __webpack_exports__DynamicTree = __webpack_exports__.xrL;\nvar __webpack_exports__DynamicTreeCollisionProcessor = __webpack_exports__.sRW;\nvar __webpack_exports__EX_VERSION = __webpack_exports__.cmV;\nvar __webpack_exports__EaseBy = __webpack_exports__.qWz;\nvar __webpack_exports__EaseTo = __webpack_exports__.N0Q;\nvar __webpack_exports__EasingFunctions = __webpack_exports__.q8b;\nvar __webpack_exports__EdgeCollider = __webpack_exports__.ynB;\nvar __webpack_exports__ElasticToActorStrategy = __webpack_exports__.jT9;\nvar __webpack_exports__EmitterType = __webpack_exports__.wAz;\nvar __webpack_exports__Engine = __webpack_exports__.D4V;\nvar __webpack_exports__EnterTriggerEvent = __webpack_exports__.N6H;\nvar __webpack_exports__EnterViewPortEvent = __webpack_exports__.W1A;\nvar __webpack_exports__Entity = __webpack_exports__.JHW;\nvar __webpack_exports__EntityManager = __webpack_exports__.v2K;\nvar __webpack_exports__EventDispatcher = __webpack_exports__.pBf;\nvar __webpack_exports__EventTypes = __webpack_exports__.GMl;\nvar __webpack_exports__Events = __webpack_exports__.zW2;\nvar __webpack_exports__ExResponse = __webpack_exports__.B0K;\nvar __webpack_exports__ExcaliburGraphicsContext2DCanvas = __webpack_exports__.Nv7;\nvar __webpack_exports__ExcaliburGraphicsContextWebGL = __webpack_exports__.C_p;\nvar __webpack_exports__ExcaliburWebGLContextAccessor = __webpack_exports__.iqw;\nvar __webpack_exports__ExitTriggerEvent = __webpack_exports__.MUA;\nvar __webpack_exports__ExitViewPortEvent = __webpack_exports__.xqU;\nvar __webpack_exports__Fade = __webpack_exports__.pTp;\nvar __webpack_exports__Flags = __webpack_exports__.vUK;\nvar __webpack_exports__Follow = __webpack_exports__.j9l;\nvar __webpack_exports__Font = __webpack_exports__.Zxw;\nvar __webpack_exports__FontStyle = __webpack_exports__.Hdx;\nvar __webpack_exports__FontUnit = __webpack_exports__.Z$d;\nvar __webpack_exports__FpsSampler = __webpack_exports__.iqV;\nvar __webpack_exports__FrameStats = __webpack_exports__.o$7;\nvar __webpack_exports__Future = __webpack_exports__.olM;\nvar __webpack_exports__GameEvent = __webpack_exports__.Zm$;\nvar __webpack_exports__GameStartEvent = __webpack_exports__.$QH;\nvar __webpack_exports__GameStopEvent = __webpack_exports__.i78;\nvar __webpack_exports__GamepadAxisEvent = __webpack_exports__.h6u;\nvar __webpack_exports__GamepadButtonEvent = __webpack_exports__.hts;\nvar __webpack_exports__GamepadConnectEvent = __webpack_exports__.j88;\nvar __webpack_exports__GamepadDisconnectEvent = __webpack_exports__.VME;\nvar __webpack_exports__Gif = __webpack_exports__.nt;\nvar __webpack_exports__GlobalCoordinates = __webpack_exports__.Ukr;\nvar __webpack_exports__Graphic = __webpack_exports__.zsu;\nvar __webpack_exports__GraphicsComponent = __webpack_exports__.oA6;\nvar __webpack_exports__GraphicsGroup = __webpack_exports__.TVh;\nvar __webpack_exports__GraphicsLayer = __webpack_exports__.TwZ;\nvar __webpack_exports__GraphicsLayers = __webpack_exports__.GTT;\nvar __webpack_exports__GraphicsSystem = __webpack_exports__.xxj;\nvar __webpack_exports__HiddenEvent = __webpack_exports__.XdK;\nvar __webpack_exports__ImageFiltering = __webpack_exports__.Jmb;\nvar __webpack_exports__ImageSource = __webpack_exports__.cXo;\nvar __webpack_exports__InitializeEvent = __webpack_exports__.Dm5;\nvar __webpack_exports__Input = __webpack_exports__.IIB;\nvar __webpack_exports__Integrator = __webpack_exports__.zI0;\nvar __webpack_exports__IsometricEntityComponent = __webpack_exports__.LYD;\nvar __webpack_exports__IsometricEntitySystem = __webpack_exports__.cEG;\nvar __webpack_exports__IsometricMap = __webpack_exports__.SEl;\nvar __webpack_exports__IsometricTile = __webpack_exports__.t9V;\nvar __webpack_exports__KillEvent = __webpack_exports__.SKZ;\nvar __webpack_exports__Label = __webpack_exports__.__J;\nvar __webpack_exports__LimitCameraBoundsStrategy = __webpack_exports__.RI$;\nvar __webpack_exports__Line = __webpack_exports__.x12;\nvar __webpack_exports__LineSegment = __webpack_exports__.ccz;\nvar __webpack_exports__Loader = __webpack_exports__.aNw;\nvar __webpack_exports__LockCameraToActorAxisStrategy = __webpack_exports__.xwn;\nvar __webpack_exports__LockCameraToActorStrategy = __webpack_exports__.dNK;\nvar __webpack_exports__LogLevel = __webpack_exports__.ini;\nvar __webpack_exports__Logger = __webpack_exports__.YdH;\nvar __webpack_exports__Matrix = __webpack_exports__.y3G;\nvar __webpack_exports__MatrixLocations = __webpack_exports__.l57;\nvar __webpack_exports__MediaEvent = __webpack_exports__.xn0;\nvar __webpack_exports__Meet = __webpack_exports__.t2V;\nvar __webpack_exports__MotionComponent = __webpack_exports__.uxB;\nvar __webpack_exports__MotionSystem = __webpack_exports__.cpd;\nvar __webpack_exports__MoveBy = __webpack_exports__.fiy;\nvar __webpack_exports__MoveTo = __webpack_exports__.$XZ;\nvar __webpack_exports__NativeSoundEvent = __webpack_exports__.uqK;\nvar __webpack_exports__NativeSoundProcessedEvent = __webpack_exports__.STE;\nvar __webpack_exports__Observable = __webpack_exports__.y$z;\nvar __webpack_exports__OffscreenSystem = __webpack_exports__.mAD;\nvar __webpack_exports__Pair = __webpack_exports__.sOq;\nvar __webpack_exports__ParallaxComponent = __webpack_exports__.hUw;\nvar __webpack_exports__ParallelActions = __webpack_exports__._0G;\nvar __webpack_exports__ParseGif = __webpack_exports__.Sqs;\nvar __webpack_exports__Particle = __webpack_exports__.hpZ;\nvar __webpack_exports__ParticleEmitter = __webpack_exports__.Vol;\nvar __webpack_exports__Physics = __webpack_exports__.wIZ;\nvar __webpack_exports__PhysicsStats = __webpack_exports__.cBi;\nvar __webpack_exports__PointerComponent = __webpack_exports__.RFv;\nvar __webpack_exports__PointerSystem = __webpack_exports__.kfC;\nvar __webpack_exports__Polygon = __webpack_exports__.mgq;\nvar __webpack_exports__PolygonCollider = __webpack_exports__.YVA;\nvar __webpack_exports__Pool = __webpack_exports__.Kgp;\nvar __webpack_exports__PostCollisionEvent = __webpack_exports__.HH$;\nvar __webpack_exports__PostDebugDrawEvent = __webpack_exports__.M_d;\nvar __webpack_exports__PostDrawEvent = __webpack_exports__.rgh;\nvar __webpack_exports__PostFrameEvent = __webpack_exports__.Ra6;\nvar __webpack_exports__PostKillEvent = __webpack_exports__.KhR;\nvar __webpack_exports__PostUpdateEvent = __webpack_exports__.BS5;\nvar __webpack_exports__PreCollisionEvent = __webpack_exports__.xhz;\nvar __webpack_exports__PreDebugDrawEvent = __webpack_exports__.xOq;\nvar __webpack_exports__PreDrawEvent = __webpack_exports__.a9j;\nvar __webpack_exports__PreFrameEvent = __webpack_exports__.bHk;\nvar __webpack_exports__PreKillEvent = __webpack_exports__.CgK;\nvar __webpack_exports__PreUpdateEvent = __webpack_exports__.cuY;\nvar __webpack_exports__Projection = __webpack_exports__.kvE;\nvar __webpack_exports__QuadIndexBuffer = __webpack_exports__.SBu;\nvar __webpack_exports__Query = __webpack_exports__.AE_;\nvar __webpack_exports__QueryManager = __webpack_exports__.ctO;\nvar __webpack_exports__RadiusAroundActorStrategy = __webpack_exports__.OLH;\nvar __webpack_exports__Random = __webpack_exports__.kky;\nvar __webpack_exports__Raster = __webpack_exports__.nSF;\nvar __webpack_exports__Ray = __webpack_exports__.zHn;\nvar __webpack_exports__RealisticSolver = __webpack_exports__.zwx;\nvar __webpack_exports__Rectangle = __webpack_exports__.AeJ;\nvar __webpack_exports__RemovedComponent = __webpack_exports__.hLz;\nvar __webpack_exports__RemovedEntity = __webpack_exports__.D9g;\nvar __webpack_exports__Repeat = __webpack_exports__.wA;\nvar __webpack_exports__RepeatForever = __webpack_exports__.jhr;\nvar __webpack_exports__Resolution = __webpack_exports__.GVs;\nvar __webpack_exports__Resource = __webpack_exports__._zO;\nvar __webpack_exports__RotateBy = __webpack_exports__.w6$;\nvar __webpack_exports__RotateTo = __webpack_exports__.mhV;\nvar __webpack_exports__RotationType = __webpack_exports__.MOD;\nvar __webpack_exports__ScaleBy = __webpack_exports__.kwd;\nvar __webpack_exports__ScaleTo = __webpack_exports__.Lmr;\nvar __webpack_exports__Scene = __webpack_exports__.xsS;\nvar __webpack_exports__Screen = __webpack_exports__.lLr;\nvar __webpack_exports__ScreenAppender = __webpack_exports__.Z$r;\nvar __webpack_exports__ScreenElement = __webpack_exports__.IXb;\nvar __webpack_exports__ScreenShader = __webpack_exports__.SGH;\nvar __webpack_exports__ScrollPreventionMode = __webpack_exports__.SMj;\nvar __webpack_exports__Semaphore = __webpack_exports__.L34;\nvar __webpack_exports__Shader = __webpack_exports__.exe;\nvar __webpack_exports__Shape = __webpack_exports__.bnF;\nvar __webpack_exports__Side = __webpack_exports__.MFA;\nvar __webpack_exports__Sound = __webpack_exports__.$uU;\nvar __webpack_exports__Sprite = __webpack_exports__.jyi;\nvar __webpack_exports__SpriteFont = __webpack_exports__.E03;\nvar __webpack_exports__SpriteSheet = __webpack_exports__.V6q;\nvar __webpack_exports__StandardClock = __webpack_exports__.rg2;\nvar __webpack_exports__StateMachine = __webpack_exports__.DVW;\nvar __webpack_exports__StrategyContainer = __webpack_exports__.nVo;\nvar __webpack_exports__Stream = __webpack_exports__.F6N;\nvar __webpack_exports__System = __webpack_exports__.xP7;\nvar __webpack_exports__SystemManager = __webpack_exports__.Odq;\nvar __webpack_exports__SystemType = __webpack_exports__.Zif;\nvar __webpack_exports__TagComponent = __webpack_exports__.ZGJ;\nvar __webpack_exports__TestClock = __webpack_exports__.MJk;\nvar __webpack_exports__Text = __webpack_exports__.xvT;\nvar __webpack_exports__TextAlign = __webpack_exports__.PHM;\nvar __webpack_exports__TextureLoader = __webpack_exports__.dpR;\nvar __webpack_exports__Tile = __webpack_exports__.n9L;\nvar __webpack_exports__TileMap = __webpack_exports__.KwO;\nvar __webpack_exports__Timer = __webpack_exports__.B7y;\nvar __webpack_exports__Toaster = __webpack_exports__.x7r;\nvar __webpack_exports__Transform = __webpack_exports__.wx7;\nvar __webpack_exports__TransformComponent = __webpack_exports__.Uvn;\nvar __webpack_exports__TreeNode = __webpack_exports__.OFT;\nvar __webpack_exports__Trigger = __webpack_exports__.xzN;\nvar __webpack_exports__TwoPI = __webpack_exports__.M5Z;\nvar __webpack_exports__Util = __webpack_exports__.ZrN;\nvar __webpack_exports__Vector = __webpack_exports__.OWs;\nvar __webpack_exports__VectorView = __webpack_exports__.dF9;\nvar __webpack_exports__VertexBuffer = __webpack_exports__.oZy;\nvar __webpack_exports__VertexLayout = __webpack_exports__.rD2;\nvar __webpack_exports__VisibleEvent = __webpack_exports__.VHo;\nvar __webpack_exports__WebAudio = __webpack_exports__.ohE;\nvar __webpack_exports__WebAudioInstance = __webpack_exports__.R$E;\nvar __webpack_exports__World = __webpack_exports__.q3I;\nvar __webpack_exports__canonicalizeAngle = __webpack_exports__.Pab;\nvar __webpack_exports__clamp = __webpack_exports__.uZ5;\nvar __webpack_exports__createId = __webpack_exports__.McK;\nvar __webpack_exports__frac = __webpack_exports__.F9c;\nvar __webpack_exports__hasGraphicsTick = __webpack_exports__.k0b;\nvar __webpack_exports__hasOnInitialize = __webpack_exports__.hnT;\nvar __webpack_exports__hasOnPostUpdate = __webpack_exports__.RSJ;\nvar __webpack_exports__hasOnPreUpdate = __webpack_exports__.Mku;\nvar __webpack_exports__hasPostDraw = __webpack_exports__.h90;\nvar __webpack_exports__hasPreDraw = __webpack_exports__.rms;\nvar __webpack_exports__has_initialize = __webpack_exports__.ErP;\nvar __webpack_exports__has_postupdate = __webpack_exports__.aVg;\nvar __webpack_exports__has_preupdate = __webpack_exports__.lPc;\nvar __webpack_exports__isAddedComponent = __webpack_exports__.Z8E;\nvar __webpack_exports__isAddedSystemEntity = __webpack_exports__._N2;\nvar __webpack_exports__isRemoveSystemEntity = __webpack_exports__.yFn;\nvar __webpack_exports__isRemovedComponent = __webpack_exports__.lNv;\nvar __webpack_exports__isScreenElement = __webpack_exports__.cu9;\nvar __webpack_exports__maxMessages = __webpack_exports__.MZQ;\nvar __webpack_exports__obsolete = __webpack_exports__.FUM;\nvar __webpack_exports__pixelSnapEpsilon = __webpack_exports__.BxR;\nvar __webpack_exports__randomInRange = __webpack_exports__.vdf;\nvar __webpack_exports__randomIntInRange = __webpack_exports__.iaL;\nvar __webpack_exports__range = __webpack_exports__.w6H;\nvar __webpack_exports__resetObsoleteCounter = __webpack_exports__.Q4c;\nvar __webpack_exports__sign = __webpack_exports__.Xxe;\nvar __webpack_exports__toDegrees = __webpack_exports__.Uxb;\nvar __webpack_exports__toRadians = __webpack_exports__.Yr5;\nvar __webpack_exports__vec = __webpack_exports__.Bhw;\nvar __webpack_exports__webgl = __webpack_exports__.yOA;\nexport { __webpack_exports__ActionContext as ActionContext, __webpack_exports__ActionQueue as ActionQueue, __webpack_exports__ActionSequence as ActionSequence, __webpack_exports__ActionsComponent as ActionsComponent, __webpack_exports__ActionsSystem as ActionsSystem, __webpack_exports__ActivateEvent as ActivateEvent, __webpack_exports__Actor as Actor, __webpack_exports__AddedComponent as AddedComponent, __webpack_exports__AddedEntity as AddedEntity, __webpack_exports__AffineMatrix as AffineMatrix, __webpack_exports__Animation as Animation, __webpack_exports__AnimationDirection as AnimationDirection, __webpack_exports__AnimationStrategy as AnimationStrategy, __webpack_exports__ArcadeSolver as ArcadeSolver, __webpack_exports__AudioContextFactory as AudioContextFactory, __webpack_exports__Axis as Axis, __webpack_exports__BaseAlign as BaseAlign, __webpack_exports__Blink as Blink, __webpack_exports__BodyComponent as BodyComponent, __webpack_exports__BoundingBox as BoundingBox, __webpack_exports__BroadphaseStrategy as BroadphaseStrategy, __webpack_exports__BrowserComponent as BrowserComponent, __webpack_exports__BrowserEvents as BrowserEvents, __webpack_exports__Camera as Camera, __webpack_exports__Canvas as Canvas, __webpack_exports__Circle as Circle, __webpack_exports__CircleCollider as CircleCollider, __webpack_exports__Class as Class, __webpack_exports__Clock as Clock, __webpack_exports__ClosestLine as ClosestLine, __webpack_exports__ClosestLineJumpTable as ClosestLineJumpTable, __webpack_exports__Collider as Collider, __webpack_exports__ColliderComponent as ColliderComponent, __webpack_exports__CollisionContact as CollisionContact, __webpack_exports__CollisionEndEvent as CollisionEndEvent, __webpack_exports__CollisionGroup as CollisionGroup, __webpack_exports__CollisionGroupManager as CollisionGroupManager, __webpack_exports__CollisionJumpTable as CollisionJumpTable, __webpack_exports__CollisionPostSolveEvent as CollisionPostSolveEvent, __webpack_exports__CollisionPreSolveEvent as CollisionPreSolveEvent, __webpack_exports__CollisionResolutionStrategy as CollisionResolutionStrategy, __webpack_exports__CollisionStartEvent as CollisionStartEvent, __webpack_exports__CollisionSystem as CollisionSystem, __webpack_exports__CollisionType as CollisionType, __webpack_exports__Color as Color, __webpack_exports__ColorBlindFlags as ColorBlindFlags, __webpack_exports__ColorBlindnessMode as ColorBlindnessMode, __webpack_exports__ColorBlindnessPostProcessor as ColorBlindnessPostProcessor, __webpack_exports__Component as Component, __webpack_exports__CompositeCollider as CompositeCollider, __webpack_exports__Configurable as Configurable, __webpack_exports__ConsoleAppender as ConsoleAppender, __webpack_exports__ContactConstraintPoint as ContactConstraintPoint, __webpack_exports__ContactEndEvent as ContactEndEvent, __webpack_exports__ContactStartEvent as ContactStartEvent, __webpack_exports__CoordPlane as CoordPlane, __webpack_exports__DeactivateEvent as DeactivateEvent, __webpack_exports__Debug as Debug, __webpack_exports__DebugGraphicsComponent as DebugGraphicsComponent, __webpack_exports__DebugSystem as DebugSystem, __webpack_exports__DebugText as DebugText, __webpack_exports__DegreeOfFreedom as DegreeOfFreedom, __webpack_exports__Delay as Delay, __webpack_exports__Detector as Detector, __webpack_exports__Die as Die, __webpack_exports__Direction as Direction, __webpack_exports__DisplayMode as DisplayMode, __webpack_exports__DynamicTree as DynamicTree, __webpack_exports__DynamicTreeCollisionProcessor as DynamicTreeCollisionProcessor, __webpack_exports__EX_VERSION as EX_VERSION, __webpack_exports__EaseBy as EaseBy, __webpack_exports__EaseTo as EaseTo, __webpack_exports__EasingFunctions as EasingFunctions, __webpack_exports__EdgeCollider as EdgeCollider, __webpack_exports__ElasticToActorStrategy as ElasticToActorStrategy, __webpack_exports__EmitterType as EmitterType, __webpack_exports__Engine as Engine, __webpack_exports__EnterTriggerEvent as EnterTriggerEvent, __webpack_exports__EnterViewPortEvent as EnterViewPortEvent, __webpack_exports__Entity as Entity, __webpack_exports__EntityManager as EntityManager, __webpack_exports__EventDispatcher as EventDispatcher, __webpack_exports__EventTypes as EventTypes, __webpack_exports__Events as Events, __webpack_exports__ExResponse as ExResponse, __webpack_exports__ExcaliburGraphicsContext2DCanvas as ExcaliburGraphicsContext2DCanvas, __webpack_exports__ExcaliburGraphicsContextWebGL as ExcaliburGraphicsContextWebGL, __webpack_exports__ExcaliburWebGLContextAccessor as ExcaliburWebGLContextAccessor, __webpack_exports__ExitTriggerEvent as ExitTriggerEvent, __webpack_exports__ExitViewPortEvent as ExitViewPortEvent, __webpack_exports__Fade as Fade, __webpack_exports__Flags as Flags, __webpack_exports__Follow as Follow, __webpack_exports__Font as Font, __webpack_exports__FontStyle as FontStyle, __webpack_exports__FontUnit as FontUnit, __webpack_exports__FpsSampler as FpsSampler, __webpack_exports__FrameStats as FrameStats, __webpack_exports__Future as Future, __webpack_exports__GameEvent as GameEvent, __webpack_exports__GameStartEvent as GameStartEvent, __webpack_exports__GameStopEvent as GameStopEvent, __webpack_exports__GamepadAxisEvent as GamepadAxisEvent, __webpack_exports__GamepadButtonEvent as GamepadButtonEvent, __webpack_exports__GamepadConnectEvent as GamepadConnectEvent, __webpack_exports__GamepadDisconnectEvent as GamepadDisconnectEvent, __webpack_exports__Gif as Gif, __webpack_exports__GlobalCoordinates as GlobalCoordinates, __webpack_exports__Graphic as Graphic, __webpack_exports__GraphicsComponent as GraphicsComponent, __webpack_exports__GraphicsGroup as GraphicsGroup, __webpack_exports__GraphicsLayer as GraphicsLayer, __webpack_exports__GraphicsLayers as GraphicsLayers, __webpack_exports__GraphicsSystem as GraphicsSystem, __webpack_exports__HiddenEvent as HiddenEvent, __webpack_exports__ImageFiltering as ImageFiltering, __webpack_exports__ImageSource as ImageSource, __webpack_exports__InitializeEvent as InitializeEvent, __webpack_exports__Input as Input, __webpack_exports__Integrator as Integrator, __webpack_exports__IsometricEntityComponent as IsometricEntityComponent, __webpack_exports__IsometricEntitySystem as IsometricEntitySystem, __webpack_exports__IsometricMap as IsometricMap, __webpack_exports__IsometricTile as IsometricTile, __webpack_exports__KillEvent as KillEvent, __webpack_exports__Label as Label, __webpack_exports__LimitCameraBoundsStrategy as LimitCameraBoundsStrategy, __webpack_exports__Line as Line, __webpack_exports__LineSegment as LineSegment, __webpack_exports__Loader as Loader, __webpack_exports__LockCameraToActorAxisStrategy as LockCameraToActorAxisStrategy, __webpack_exports__LockCameraToActorStrategy as LockCameraToActorStrategy, __webpack_exports__LogLevel as LogLevel, __webpack_exports__Logger as Logger, __webpack_exports__Matrix as Matrix, __webpack_exports__MatrixLocations as MatrixLocations, __webpack_exports__MediaEvent as MediaEvent, __webpack_exports__Meet as Meet, __webpack_exports__MotionComponent as MotionComponent, __webpack_exports__MotionSystem as MotionSystem, __webpack_exports__MoveBy as MoveBy, __webpack_exports__MoveTo as MoveTo, __webpack_exports__NativeSoundEvent as NativeSoundEvent, __webpack_exports__NativeSoundProcessedEvent as NativeSoundProcessedEvent, __webpack_exports__Observable as Observable, __webpack_exports__OffscreenSystem as OffscreenSystem, __webpack_exports__Pair as Pair, __webpack_exports__ParallaxComponent as ParallaxComponent, __webpack_exports__ParallelActions as ParallelActions, __webpack_exports__ParseGif as ParseGif, __webpack_exports__Particle as Particle, __webpack_exports__ParticleEmitter as ParticleEmitter, __webpack_exports__Physics as Physics, __webpack_exports__PhysicsStats as PhysicsStats, __webpack_exports__PointerComponent as PointerComponent, __webpack_exports__PointerSystem as PointerSystem, __webpack_exports__Polygon as Polygon, __webpack_exports__PolygonCollider as PolygonCollider, __webpack_exports__Pool as Pool, __webpack_exports__PostCollisionEvent as PostCollisionEvent, __webpack_exports__PostDebugDrawEvent as PostDebugDrawEvent, __webpack_exports__PostDrawEvent as PostDrawEvent, __webpack_exports__PostFrameEvent as PostFrameEvent, __webpack_exports__PostKillEvent as PostKillEvent, __webpack_exports__PostUpdateEvent as PostUpdateEvent, __webpack_exports__PreCollisionEvent as PreCollisionEvent, __webpack_exports__PreDebugDrawEvent as PreDebugDrawEvent, __webpack_exports__PreDrawEvent as PreDrawEvent, __webpack_exports__PreFrameEvent as PreFrameEvent, __webpack_exports__PreKillEvent as PreKillEvent, __webpack_exports__PreUpdateEvent as PreUpdateEvent, __webpack_exports__Projection as Projection, __webpack_exports__QuadIndexBuffer as QuadIndexBuffer, __webpack_exports__Query as Query, __webpack_exports__QueryManager as QueryManager, __webpack_exports__RadiusAroundActorStrategy as RadiusAroundActorStrategy, __webpack_exports__Random as Random, __webpack_exports__Raster as Raster, __webpack_exports__Ray as Ray, __webpack_exports__RealisticSolver as RealisticSolver, __webpack_exports__Rectangle as Rectangle, __webpack_exports__RemovedComponent as RemovedComponent, __webpack_exports__RemovedEntity as RemovedEntity, __webpack_exports__Repeat as Repeat, __webpack_exports__RepeatForever as RepeatForever, __webpack_exports__Resolution as Resolution, __webpack_exports__Resource as Resource, __webpack_exports__RotateBy as RotateBy, __webpack_exports__RotateTo as RotateTo, __webpack_exports__RotationType as RotationType, __webpack_exports__ScaleBy as ScaleBy, __webpack_exports__ScaleTo as ScaleTo, __webpack_exports__Scene as Scene, __webpack_exports__Screen as Screen, __webpack_exports__ScreenAppender as ScreenAppender, __webpack_exports__ScreenElement as ScreenElement, __webpack_exports__ScreenShader as ScreenShader, __webpack_exports__ScrollPreventionMode as ScrollPreventionMode, __webpack_exports__Semaphore as Semaphore, __webpack_exports__Shader as Shader, __webpack_exports__Shape as Shape, __webpack_exports__Side as Side, __webpack_exports__Sound as Sound, __webpack_exports__Sprite as Sprite, __webpack_exports__SpriteFont as SpriteFont, __webpack_exports__SpriteSheet as SpriteSheet, __webpack_exports__StandardClock as StandardClock, __webpack_exports__StateMachine as StateMachine, __webpack_exports__StrategyContainer as StrategyContainer, __webpack_exports__Stream as Stream, __webpack_exports__System as System, __webpack_exports__SystemManager as SystemManager, __webpack_exports__SystemType as SystemType, __webpack_exports__TagComponent as TagComponent, __webpack_exports__TestClock as TestClock, __webpack_exports__Text as Text, __webpack_exports__TextAlign as TextAlign, __webpack_exports__TextureLoader as TextureLoader, __webpack_exports__Tile as Tile, __webpack_exports__TileMap as TileMap, __webpack_exports__Timer as Timer, __webpack_exports__Toaster as Toaster, __webpack_exports__Transform as Transform, __webpack_exports__TransformComponent as TransformComponent, __webpack_exports__TreeNode as TreeNode, __webpack_exports__Trigger as Trigger, __webpack_exports__TwoPI as TwoPI, __webpack_exports__Util as Util, __webpack_exports__Vector as Vector, __webpack_exports__VectorView as VectorView, __webpack_exports__VertexBuffer as VertexBuffer, __webpack_exports__VertexLayout as VertexLayout, __webpack_exports__VisibleEvent as VisibleEvent, __webpack_exports__WebAudio as WebAudio, __webpack_exports__WebAudioInstance as WebAudioInstance, __webpack_exports__World as World, __webpack_exports__canonicalizeAngle as canonicalizeAngle, __webpack_exports__clamp as clamp, __webpack_exports__createId as createId, __webpack_exports__frac as frac, __webpack_exports__hasGraphicsTick as hasGraphicsTick, __webpack_exports__hasOnInitialize as hasOnInitialize, __webpack_exports__hasOnPostUpdate as hasOnPostUpdate, __webpack_exports__hasOnPreUpdate as hasOnPreUpdate, __webpack_exports__hasPostDraw as hasPostDraw, __webpack_exports__hasPreDraw as hasPreDraw, __webpack_exports__has_initialize as has_initialize, __webpack_exports__has_postupdate as has_postupdate, __webpack_exports__has_preupdate as has_preupdate, __webpack_exports__isAddedComponent as isAddedComponent, __webpack_exports__isAddedSystemEntity as isAddedSystemEntity, __webpack_exports__isRemoveSystemEntity as isRemoveSystemEntity, __webpack_exports__isRemovedComponent as isRemovedComponent, __webpack_exports__isScreenElement as isScreenElement, __webpack_exports__maxMessages as maxMessages, __webpack_exports__obsolete as obsolete, __webpack_exports__pixelSnapEpsilon as pixelSnapEpsilon, __webpack_exports__randomInRange as randomInRange, __webpack_exports__randomIntInRange as randomIntInRange, __webpack_exports__range as range, __webpack_exports__resetObsoleteCounter as resetObsoleteCounter, __webpack_exports__sign as sign, __webpack_exports__toDegrees as toDegrees, __webpack_exports__toRadians as toRadians, __webpack_exports__vec as vec, __webpack_exports__webgl as webgl };\n\n//# sourceMappingURL=excalibur.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Config = void 0;\nexports.Config = {\n PlayerSpeed: 16 * 2,\n PlayerFrameSpeed: 200, // ms\n};\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ex = __importStar(require(\"excalibur\"));\nconst resources_1 = require(\"./resources\");\nconst player_1 = require(\"./player\");\nconst game = new ex.Engine({\n width: 800,\n height: 600,\n canvasElementId: 'game',\n antialiasing: false\n});\ngame.start(resources_1.loader).then(() => {\n var _a, _b;\n const objects = resources_1.Resources.TiledMap.data.getObjectLayerByName(\"Objects\");\n const camera = objects.getObjectByName(\"Camera\");\n if (camera) {\n game.currentScene.camera.pos = ex.vec(camera.x, camera.y);\n game.currentScene.camera.zoom = (_b = (_a = camera.getProperty('zoom')) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : 1.0;\n }\n const player = objects.getObjectByName(\"Player\");\n if (player) {\n const playerActor = new player_1.Player(ex.vec(player.x, player.y));\n game.currentScene.add(playerActor);\n playerActor.z = 100;\n }\n resources_1.Resources.TiledMap.addTiledMapToScene(game.currentScene);\n});\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Player = void 0;\nconst ex = __importStar(require(\"excalibur\"));\nconst resources_1 = require(\"./resources\");\nconst config_1 = require(\"./config\");\nclass Player extends ex.Actor {\n constructor(pos) {\n super({\n pos,\n width: 16,\n height: 16,\n collisionType: ex.CollisionType.Active\n });\n }\n onInitialize(engine) {\n const playerSpriteSheet = ex.SpriteSheet.fromImageSource({\n image: resources_1.Resources.HeroSpriteSheetPng,\n grid: {\n spriteWidth: 16,\n spriteHeight: 16,\n rows: 8,\n columns: 8\n }\n });\n const leftIdle = new ex.Animation({\n frames: [\n { graphic: playerSpriteSheet.getSprite(0, 1), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(1, 1), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(2, 1), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(3, 1), duration: config_1.Config.PlayerFrameSpeed },\n ]\n });\n this.graphics.add('left-idle', leftIdle);\n const rightIdle = new ex.Animation({\n frames: [\n { graphic: playerSpriteSheet.getSprite(0, 2), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(1, 2), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(2, 2), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(3, 2), duration: config_1.Config.PlayerFrameSpeed },\n ]\n });\n this.graphics.add('right-idle', rightIdle);\n const upIdle = new ex.Animation({\n frames: [\n { graphic: playerSpriteSheet.getSprite(0, 3), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(1, 3), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(2, 3), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(3, 3), duration: config_1.Config.PlayerFrameSpeed },\n ]\n });\n this.graphics.add('up-idle', upIdle);\n const downIdle = new ex.Animation({\n frames: [\n { graphic: playerSpriteSheet.getSprite(0, 0), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(1, 0), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(2, 0), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(3, 0), duration: config_1.Config.PlayerFrameSpeed },\n ]\n });\n this.graphics.add('down-idle', downIdle);\n const leftWalk = new ex.Animation({\n frames: [\n { graphic: playerSpriteSheet.getSprite(0, 5), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(1, 5), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(2, 5), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(3, 5), duration: config_1.Config.PlayerFrameSpeed },\n ]\n });\n this.graphics.add('left-walk', leftWalk);\n const rightWalk = new ex.Animation({\n frames: [\n { graphic: playerSpriteSheet.getSprite(0, 6), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(1, 6), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(2, 6), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(3, 6), duration: config_1.Config.PlayerFrameSpeed },\n ]\n });\n this.graphics.add('right-walk', rightWalk);\n const upWalk = new ex.Animation({\n frames: [\n { graphic: playerSpriteSheet.getSprite(0, 7), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(1, 7), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(2, 7), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(3, 7), duration: config_1.Config.PlayerFrameSpeed },\n ]\n });\n this.graphics.add('up-walk', upWalk);\n const downWalk = new ex.Animation({\n frames: [\n { graphic: playerSpriteSheet.getSprite(0, 4), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(1, 4), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(2, 4), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(3, 4), duration: config_1.Config.PlayerFrameSpeed },\n ]\n });\n this.graphics.add('down-walk', downWalk);\n }\n onPreUpdate(engine, elapsedMs) {\n this.vel = ex.Vector.Zero;\n this.graphics.use('down-idle');\n if (engine.input.keyboard.isHeld(ex.Input.Keys.ArrowRight)) {\n this.vel = ex.vec(config_1.Config.PlayerSpeed, 0);\n this.graphics.use('right-walk');\n }\n if (engine.input.keyboard.isHeld(ex.Input.Keys.ArrowLeft)) {\n this.vel = ex.vec(-config_1.Config.PlayerSpeed, 0);\n this.graphics.use('left-walk');\n }\n if (engine.input.keyboard.isHeld(ex.Input.Keys.ArrowUp)) {\n this.vel = ex.vec(0, -config_1.Config.PlayerSpeed);\n this.graphics.use('up-walk');\n }\n if (engine.input.keyboard.isHeld(ex.Input.Keys.ArrowDown)) {\n this.vel = ex.vec(0, config_1.Config.PlayerSpeed);\n this.graphics.use('down-walk');\n }\n }\n}\nexports.Player = Player;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.loader = exports.Resources = void 0;\nconst excalibur_1 = require(\"excalibur\");\nconst plugin_tiled_1 = require(\"@excaliburjs/plugin-tiled\");\nexports.Resources = {\n HeroSpriteSheetPng: new excalibur_1.ImageSource('../img/Solaria Demo Pack Update 03/Solaria Demo Pack Update 03/16x16/Sprites/Hero 01.png', false, excalibur_1.ImageFiltering.Pixel),\n TiledMap: new plugin_tiled_1.TiledMapResource('../res/first-level.tmx')\n};\nexports.loader = new excalibur_1.Loader();\nfor (let resource of Object.values(exports.Resources)) {\n exports.loader.addResource(resource);\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(519);\n"],"names":["t","self","A","e","i","buildOptions","a","attributeNamePrefix","attrNodeName","textNodeName","ignoreAttributes","cdataTagName","cdataPositionChar","format","indentBy","supressEmptyNode","tagValueProcessor","attrValueProcessor","s","o","this","options","isAttribute","attrPrefixLen","length","E","isCDATA","d","replaceCDATAstr","g","replaceCDATAarr","n","processTextOrObjNode","r","indentate","Q","tagEndChar","newLine","buildTextNode","C","buildObjNode","l","B","I","buildTextValNode","buildObjectNode","j2x","Object","keys","val","attrStr","replace","join","indexOf","repeat","startsWith","substr","prototype","parse","Array","isArray","rootNodeName","Date","exports","String","fromCharCode","nilChar","missingChar","nilPremitive","missingPremitive","emptyChar","emptyValue","boundryChar","objStart","arrStart","arrayEnd","child","attrsMap","convert2nimn","defaultOptions","props","alwaysCreateTextNode","isEmptyObject","isExist","isTagNameInArrayMode","tagname","arrayMode","merge","hasOwnProperty","push","convertToJson","isNaN","convertToJsonString","validate","Error","err","msg","parseTrueNumberOnly","parseNodeValue","numParseOptions","leadingZeros","getTraversalObj","convertTonimn","j2xParser","parseToNimn","RegExp","getValue","test","isName","exec","getAllMatches","startIndex","lastIndex","nameRegexp","allowBooleanAttributes","value","index","tagClosed","h","trim","substring","c","u","code","line","pop","tagName","tagStartPos","col","JSON","stringify","map","match","split","parent","addChild","Number","parseInt","window","parseFloat","ignoreNameSpace","parseAttributeValue","trimValues","hex","stopNodes","charAt","data","includes","lastIndexOf","assign","toString","level","method","chunkSize","windowBits","memLevel","strategy","to","raw","gzip","ended","chunks","strm","avail_out","deflateInit2","header","deflateSetHeader","dictionary","string2buf","call","Uint8Array","deflateSetDictionary","_dict_set","result","input","next_in","avail_in","output","Buf8","next_out","deflate","onEnd","onData","buf2binstring","shrinkBuf","deflateEnd","flattenChunks","Deflate","deflateRaw","inflateInit2","Z_OK","inflateGetHeader","inflateSetDictionary","Z_FINISH","Z_NO_FLUSH","binstring2buf","inflate","Z_NEED_DICT","Z_BUF_ERROR","Z_STREAM_END","Z_SYNC_FLUSH","utf8border","buf2string","arraySet","inflateEnd","Inflate","inflateRaw","ungzip","Uint16Array","Int32Array","slice","arguments","shift","TypeError","subarray","set","concat","apply","setTyped","Buf16","Buf32","charCodeAt","Z_PARTIAL_FLUSH","Z_FULL_FLUSH","Z_BLOCK","Z_TREES","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","state","pending","pending_buf","pending_out","total_out","_tr_flush_block","block_start","strstart","f","p","w","max_chain_length","prev_length","nice_match","w_size","w_mask","prev","good_match","lookahead","match_start","m","window_size","hash_size","head","wrap","adler","total_in","insert","ins_h","hash_shift","hash_mask","y","match_length","_tr_tally","max_lazy_match","last_lit","D","prev_match","match_available","_","good_length","max_lazy","nice_length","max_chain","func","b","status","pending_buf_size","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","heap","heap_len","heap_max","depth","l_buf","lit_bufsize","d_buf","opt_len","static_len","matches","bi_buf","bi_valid","k","data_type","_tr_init","F","v","deflateInit","deflateReset","deflateResetKeep","text","hcrc","extra","name","comment","time","os","_tr_align","_tr_stored_block","deflateInfo","xflags","extra_len","done","dmax","wsize","whave","wnext","hold","bits","lencode","distcode","lenbits","distbits","mode","sane","last","havedict","flags","check","total","wbits","offset","ncode","nlen","ndist","have","next","lens","work","lendyn","distdyn","back","was","inflateReset","inflateReset2","inflateResetKeep","inflateInit","G","N","x","S","L","R","M","U","J","inflateInfo","static_tree","extra_bits","extra_base","elems","max_length","has_stree","dyn_tree","max_code","stat_desc","decimalPoint","skipLike","FLIPPED_DIAGONALLY_FLAG","FLIPPED_HORIZONTALLY_FLAG","FLIPPED_VERTICALLY_FLAG","TiledEntity","TiledLayer","TiledLayerComponent","TiledMap","TiledMapFormat","TiledMapResource","TiledObject","TiledObjectComponent","TiledObjectGroup","TiledTileset","TiledTilesetTile","getCanonicalGid","getProperty","isFlippedDiagonally","isFlippedHorizontally","isFlippedVertically","parseExternalJson","parseExternalTsx","filter","toLocaleLowerCase","constructor","properties","Component","super","layer","type","Vector","Zero","parallaxFactor","encoding","id","vec","offsetx","offsety","parallaxx","parallaxy","width","height","compression","order","rawLayer","Promise","throw","then","layers","tileSets","objectGroups","getExcaliburObjects","getObjectLayerByProperty","getObjectLayerByName","getTileLayerByName","getTileLayersByProperty","fromTmx","property","objectgroup","objects","object","forEach","halign","valign","fontfamily","pixelsize","kerning","italic","bold","underline","strikeout","color","point","ellipse","polyline","points","polygon","imagelayers","image","source","imagelayer","tilesets","imagewidth","imageheight","objectalignment","tiles","_fromRawTiledMap","fromJson","_decompresslayers","orientation","rawMap","tileWidth","tilewidth","tileHeight","tileheight","decompressBase64","decompressCsv","ZSTDDecoder","init","decode","TMX","path","isoLayers","_layerZIndexStart","_mapToRawLayer","Map","mapFormatOverride","startingLayerZIndex","_resource","Resource","mapFormat","ex","imageMap","sheetMap","tileImageMap","convertPath","_addTiledCamera","camera","zoom","_addTiledColliders","colliders","Actor","pos","collisionType","CollisionType","Fixed","Color","fromHex","collider","useBoxCollider","useCircleCollider","radius","addComponent","tiled","add","zIndex","z","_addTiledText","getText","Label","pixelSize","_getEntityName","font","Font","family","fontFamily","size","unit","FontUnit","Px","textAlign","TextAlign","Left","baseAlign","BaseAlign","Top","rotation","Shape","Box","_calculateZIndex","_addTiledInsertedTiles","getInsertedTiles","PreventCollision","gid","getSpriteForGid","getCollidersForGid","anchor","clear","CompositeCollider","graphics","use","useSolidLayers","getTileMapLayers","get","solid","addTiledMapToScene","_parseExcaliburInfo","find","getObjectByClass","getCamera","getObjectsByClass","Math","max","isLoaded","load","_importMapData","firstgid","Logger","getInstance","error","all","ImageSource","debug","_createTileMap","getTilesetForTile","firstGid","tileCount","sprites","clone","PI","scale","_transformPoints","diagonalFlipTransform","multiply","horizontalFlipTransform","verticalFlipTransform","getPolygons","Polygon","getBoxes","getEllipses","Circle","min","getAnimationForGid","hasAnimation","getAnimation","spacing","floor","SpriteSheet","fromImageSource","grid","columns","rows","spriteWidth","spriteHeight","margin","toSprite","TileMap","ParallaxComponent","addGraphic","addCollider","clearGraphics","IsometricMap","TransformComponent","IsometricEntityComponent","elevation","updateColliders","getIsometricMapLayers","getObjectByType","getObjectsByType","class","getObjectByName","getObjectsByName","getPoints","getPolyLines","rawObjectGroup","visible","toRadians","rawObject","tilecount","tileOffset","tileoffset","tiledVersion","tiledversion","backgroundColor","backgroundcolor","transparentColor","transparentcolor","wangSets","wangsets","imageWidth","imageHeight","objectAlignment","Matrix","identity","translate","rotate","animation","graphic","tileid","tileset","duration","Animation","frames","animationStrategy","AnimationStrategy","Loop","terrain","frame","toLowerCase","End","Freeze","PingPong","env","emscripten_notify_memory_growth","memory","buffer","fetch","arrayBuffer","WebAssembly","instantiate","_init","Buffer","from","instance","byteLength","malloc","ZSTD_findDecompressedSize","ZSTD_decompress","free","excalibur","__esModule","default","defineProperty","enumerable","Symbol","toStringTag","module","__webpack_modules__","__unused_webpack_exports","entryUnbind","isCallable","tryToString","$TypeError","argument","isObject","$String","toIndexedObject","toAbsoluteIndex","lengthOfArrayLike","createMethod","IS_INCLUDES","$this","el","fromIndex","O","fails","METHOD_NAME","createProperty","$Array","start","end","fin","undefined","arraySlice","mergeSort","array","comparefn","middle","insertionSort","element","j","left","right","llength","rlength","lindex","rindex","uncurryThis","stringSlice","it","TO_STRING_TAG_SUPPORT","classofRaw","TO_STRING_TAG","wellKnownSymbol","$Object","CORRECT_ARGUMENTS","tag","key","tryGet","callee","hasOwn","ownKeys","getOwnPropertyDescriptorModule","definePropertyModule","target","exceptions","getOwnPropertyDescriptor","DESCRIPTORS","createPropertyDescriptor","bitmap","configurable","writable","toPropertyKey","propertyKey","makeBuiltIn","defineGlobalProperty","simple","global","unsafe","nonConfigurable","nonWritable","P","document","EXISTS","createElement","firefox","UA","getBuiltIn","version","userAgent","process","Deno","versions","v8","webkit","CONSTRUCTOR","METHOD","createNonEnumerableProperty","defineBuiltIn","copyConstructorProperties","isForced","targetProperty","sourceProperty","descriptor","TARGET","GLOBAL","STATIC","stat","dontCallGetSet","forced","sham","bind","NATIVE_BIND","Function","FunctionPrototype","getDescriptor","PROPER","CONFIGURABLE","fn","namespace","aCallable","V","globalThis","toObject","classof","propertyIsEnumerable","store","functionToString","inspectSource","has","NATIVE_WEAK_MAP","shared","sharedKey","hiddenKeys","OBJECT_ALREADY_INITIALIZED","WeakMap","wmget","wmhas","wmset","metadata","facade","STATE","enforce","getterFor","TYPE","replacement","feature","detection","normalize","POLYFILL","NATIVE","string","isPrototypeOf","USE_SYMBOL_AS_UID","$Symbol","toLength","obj","CONFIGURABLE_FUNCTION_NAME","InternalStateModule","enforceInternalState","getInternalState","CONFIGURABLE_LENGTH","TEMPLATE","getter","setter","arity","ceil","trunc","V8_VERSION","getOwnPropertySymbols","symbol","__unused_webpack_module","IE8_DOM_DEFINE","V8_PROTOTYPE_DEFINE_BUG","anObject","$defineProperty","$getOwnPropertyDescriptor","ENUMERABLE","WRITABLE","Attributes","current","propertyIsEnumerableModule","internalObjectKeys","getOwnPropertyNames","names","enumBugKeys","$propertyIsEnumerable","NASHORN_BUG","pref","valueOf","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","uid","SHARED","IS_PURE","copyright","license","toIntegerOrInfinity","integer","IndexedObject","requireObjectCoercible","number","isSymbol","getMethod","ordinaryToPrimitive","TO_PRIMITIVE","exoticToPrim","toPrimitive","postfix","random","NATIVE_SYMBOL","iterator","WellKnownSymbolsStore","symbolFor","createWellKnownSymbol","withoutSetter","description","$","deletePropertyOrThrow","internalSort","arrayMethodIsStrict","FF","IE_OR_EDGE","V8","WEBKIT","un$Sort","sort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","STRICT_METHOD","STABLE_SORT","chr","proto","itemsLength","items","arrayLength","getSortCompare","nativeKeys","_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__","_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__","___CSS_LOADER_EXPORT___","_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default","__WEBPACK_DEFAULT_EXPORT__","cssWithMappingToString","list","item","content","needLayer","modules","media","dedupe","supports","alreadyImportedModules","_k","cssMapping","btoa","base64","unescape","encodeURIComponent","sourceMapping","sourceURLs","sources","sourceRoot","__webpack_module_cache__","moduleId","cachedModule","definition","prop","Events_namespaceObject","webgl_util_namespaceObject","DrawUtil_namespaceObject","Input_Index_namespaceObject","Util_Index_namespaceObject","polyfill","audioContext","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","callback","setInterval","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","AudioContext","webkitAudioContext","replaceMe","decodeAudioData","resolve","reject","mozAudioContext","msAudioContext","oAudioContext","devicePixelRatio","Flags","useCanvasGraphicsContext","enable","freeze","_FROZEN","_reset","_FLAGS","flagName","disable","isEnabled","show","createId","BITMASK32","Random","seed","_lowerMask","_upperMask","_w","_n","_m","_a","_u","_s","_b","_t","_c","_l","_f","_mt","now","_index","_twist","mag01","nextInt","floating","bool","likelihood","pickOne","pickSet","numPicks","allowDuplicates","_pickSetWithDuplicates","_pickSetWithoutDuplicates","currentPick","tempArray","splice","shuffle","swap","randomIndex","range","d4","d6","d8","d10","d12","d20","TwoPI","frac","sign","clamp","canonicalizeAngle","angle","tmpAngle","toDegrees","radians","degrees","_x","randomInRange","randomIntInRange","round","_y","One","Half","Up","Down","Right","fromAngle","cos","sin","isValid","Infinity","distance","vec1","vec2","sqrt","pow","setTo","equals","vector","tolerance","abs","deltaX","deltaY","squareDistance","clampMagnitude","magnitude","newSize","newLength","average","sizeOrScale","dest","sub","addEqual","subEqual","scaleEqual","dot","cross","num","perpendicular","normal","negate","toAngle","atan2","sinAngle","cosAngle","fixed","toFixed","LogLevel","Side","MatrixLocations","EventTypes","ImageFiltering","_appenders","defaultLevel","Info","_INSTANCE","addAppender","ConsoleAppender","appender","clearAppenders","_log","args","len","log","Debug","info","warn","Warn","fatal","Fatal","console","consoleArgs","unshift","ScreenAppender","_messages","_canvas","innerWidth","innerHeight","style","position","_ctx","getContext","body","appendChild","message","clearRect","opacity","fillStyle","fillText","fromRGB","fromRGBString","fromHSL","HSLColor","toRGBA","lighten","factor","temp","fromRGBA","darken","saturate","desaturate","newR","newG","newB","newA","screen","color1","invert","color2","equal","toHSLA","toHex","_componentToHex","Black","White","Gray","LightGray","DarkGray","Yellow","Orange","Red","Vermilion","Rose","Magenta","Violet","Blue","Azure","Cyan","Viridian","Green","Chartreuse","Transparent","ExcaliburBlue","hue2rgb","q","getOpposite","side","Bottom","None","fromDirection","direction","directions","directionEnum","MAX_VALUE","maxIndex","BoundingBox","leftOrOptions","top","bottom","getSideFromIntersection","intersection","fromPoints","minX","minY","maxX","maxY","fromDimension","hasZeroDimensions","center","shifted","transform","matrix","xa1","xa2","xb1","xb2","ya1","ya2","yb1","yb2","matrixPos","getPosition","getPerimeter","results","rayCast","ray","farClipDistance","tmin","tmax","xinv","dir","yinv","tx1","tx2","ty1","ty2","rayCastTime","contains","combine","other","dimensions","overlaps","epsilon","totalBoundingBox","intersect","overlapX","overlapY","intersectWithSide","bb","draw","drawRect","Future","_isCompleted","promise","_resolver","_rejecter","isCompleted","oLeft","oTop","calcOffsetLeft","offsetLeft","offsetParent","calcOffsetTop","offsetTop","addItemToArray","removeItemFromArray","fail","delay","milliseconds","clock","future","schedule","setTimeout","Float32Array","_scaleX","_scaleSignX","_scaleY","_scaleSignY","ortho","near","far","mat","toDOMMatrix","DOMMatrix","fromFloat32Array","reset","translation","sx","sy","angleRadians","vectorOrMatrix","resultX","resultY","a11","a21","a31","a41","a12","a22","a32","a42","a13","a23","a33","a43","a14","a24","a34","a44","b11","b21","b31","b41","b12","b22","b32","b42","b13","b23","b33","b43","b14","b24","b34","b44","getScale","setPosition","sine","cosine","setRotation","currentScale","getRotation","getScaleY","getScaleX","xscale","yscale","setScaleX","setScaleY","setScale","getBasisDeterminant","getAffineInverse","inverseDet","tx","ty","isIdentity","AffineMatrix","Float64Array","_scale","determinant","inverse","to4x4","TransformStack","_transforms","_currentTransform","save","restore","StateStack","_states","_currentState","_getDefaultState","tint","_cloneState","GameEvent","_bubbles","bubbles","stopPropagation","KillEvent","PreKillEvent","PostKillEvent","GameStartEvent","GameStopEvent","PreDrawEvent","ctx","delta","PostDrawEvent","PreDebugDrawEvent","PostDebugDrawEvent","PreUpdateEvent","engine","PostUpdateEvent","PreFrameEvent","prevStats","PostFrameEvent","stats","GamepadConnectEvent","gamepad","GamepadDisconnectEvent","GamepadButtonEvent","button","GamepadAxisEvent","axis","VisibleEvent","HiddenEvent","PreCollisionEvent","actor","PostCollisionEvent","ContactStartEvent","contact","ContactEndEvent","CollisionPreSolveEvent","CollisionPostSolveEvent","CollisionStartEvent","CollisionEndEvent","InitializeEvent","ActivateEvent","context","DeactivateEvent","ExitViewPortEvent","EnterViewPortEvent","EnterTriggerEvent","ExitTriggerEvent","EventDispatcher","_handlers","_wiredEventDispatchers","_deferedHandlerRemovals","_processDeferredHandlerRemovals","eventHandler","_removeHandler","handler","emit","eventName","event","on","off","eventHandlers","once","metaHandler","ev","wire","eventDispatcher","unwire","responseType","bustCache","logger","events","_cacheBust","uri","request","XMLHttpRequest","open","addEventListener","response","statusText","send","watch","change","__isProxy","Proxy","watchAny","Graphic","_d","_e","_ID","_transformStale","showDebug","_flipHorizontal","_flipVertical","_rotation","_origin","_width","_height","origin","flipHorizontal","flipVertical","isStale","cloneGraphicOptions","localBounds","_preDraw","_drawImage","_postDraw","_rotate","_flip","scaleDirX","scaleDirY","Sprite","_logger","_dirty","_logNotLoadedWarning","sourceView","destSize","_updateSpriteDimensions","ready","newWidth","newHeight","nativeWidth","nativeHeight","drawImage","TextureLoader","register","_GL","_MAX_TEXTURE_SIZE","getParameter","MAX_TEXTURE_SIZE","_TEXTURE_MAP","filtering","forceUpdate","gl","tex","bindTexture","TEXTURE_2D","texImage2D","RGBA","UNSIGNED_BYTE","createTexture","checkImageSizeSupportedAndLog","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","filterMode","TEXTURE_MIN_FILTER","Pixel","NEAREST","LINEAR","TEXTURE_MAG_FILTER","deleteTexture","originalSrc","dataset","_LOGGER","Blended","Image","_readyFuture","_filtering","endsWith","naturalWidth","naturalHeight","_src","src","url","blob","URL","createObjectURL","loadedFuture","onload","setAttribute","unload","getSprite","spriteIndex","fromImageSourceWithSourceViews","sourceViews","cols","originOffset","offsetDefaults","marginDefaults","SpriteFont","_text","alphabet","shadow","caseInsensitive","_alreadyWarnedAlphabet","_alreadyWarnedSpriteSheet","spriteSheet","_getCharacterSprites","textToRender","letterIndex","letter","letterSprite","measureText","lines","maxWidthLine","reduce","sprite","xCursor","yCursor","render","_color","bounds","DebugText","fontSheet","_imageSource","_spriteSheet","_spriteFont","write","RenderSource","_gl","_texture","activeTexture","TEXTURE0","RenderTarget","_setupFramebuffer","setResolution","_frameTexture","frameBuffer","_frameBuffer","frameTexture","attachmentPoint","COLOR_ATTACHMENT0","createFramebuffer","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","toRenderSource","viewport","ExcaliburWebGLContextAccessor","getGlTypeSizeBytes","FLOAT","SHORT","UNSIGNED_SHORT","BYTE","getAttributeComponentSize","LOW_FLOAT","HIGH_FLOAT","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","getAttributePointerType","Shader","uniforms","attributes","_compiled","vertexSource","fragmentSource","compiled","useProgram","program","_ACTIVE_SHADER_INSTANCE","isCurrentlyBound","compile","vertexShader","_compileShader","VERTEX_SHADER","fragmentShader","FRAGMENT_SHADER","_createProgram","getAttributes","attribute","getUniforms","uniform","uniformCount","getProgramParameter","ACTIVE_UNIFORMS","getActiveUniform","uniformLocation","getUniformLocation","glType","location","attributeCount","ACTIVE_ATTRIBUTES","getActiveAttrib","attributeLocation","getAttribLocation","normalized","setTexture","slotNumber","texture","setUniformInt","setUniform","setUniformIntArray","setUniformBoolean","setUniformFloat","setUniformFloatArray","setUniformFloatVector","setUniformMatrix","uniformType","createProgram","attachShader","linkProgram","LINK_STATUS","getProgramInfoLog","typeName","shader","createShader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","errorInfo","getShaderInfoLog","_processSourceForError","errorLineStart","search","errorLineEnd","error2","VertexBuffer","createBuffer","bufferData","bindBuffer","ARRAY_BUFFER","STATIC_DRAW","DYNAMIC_DRAW","upload","count","bufferSubData","VertexLayout","_layout","_attributes","_vertexTotalSizeBytes","vertexBuffer","_vertexBuffer","_shader","initialize","totalVertexSizeBytes","shaderAttributes","attrib","componentsPerVertex","vertAttribute","typeSize","uploadBuffer","vert","vertexAttribPointer","enableVertexAttribArray","GraphicsDiagnostics","DrawCallCount","DrawnImagesCount","LineRenderer","priority","_maxLines","_vertexIndex","_lineCount","_context","_isFull","flush","getTransform","finalStart","finalEnd","hasPendingDraws","drawArrays","LINES","PointRenderer","_maxPoints","_pointCount","_buffer","snapToPixel","finalPoint","pixelSnapEpsilon","POINTS","ScreenPassPainter","renderWithPostProcessor","postprocessor","getShader","getLayout","TRIANGLES","renderToScreen","QuadIndexBuffer","numberOfQuads","useUint16","ELEMENT_ARRAY_BUFFER","totalVertices","maxUint16","maxUint16Index","bufferGlType","Uint32Array","currentQuad","ImageRenderer","_maxImages","_maxTextures","_imageCount","_textures","MAX_TEXTURE_IMAGE_UNITS","transformedFrag","_transformFragmentSource","_quads","maxTextures","newSource","texturePickerBuilder","_addImageAsTexture","_bindTextures","_getTextureIdForImage","swidth","sheight","dx","dy","dwidth","dheight","view","sw","sh","topLeft","topRight","bottomLeft","bottomRight","textureId","uvx0","uvy0","uvx1","uvy1","drawElements","RectangleRenderer","_maxRectangles","_rectangleCount","drawLine","drawRectangle","thickness","halfThick","startTop","startBottom","endTop","endBottom","stroke","strokeThickness","CircleRenderer","_maxCircles","_circleCount","Pool","builder","recycler","maxObjects","totalAllocations","disableWarnings","preallocate","using","borrow","poolIndex","DrawCall","ExcaliburGraphicsContextWebGLDebug","_webglCtx","_debugText","rectOptions","lineOptions","drawPoint","pointOptions","drawText","ExcaliburGraphicsContextWebGL","_renderers","_isDrawLifecycle","useDrawSorting","_drawCallPool","renderer","_drawCalls","_postProcessTargets","_postprocessors","_transform","_state","smoothing","_alreadyWarnedDrawLifecycle","canvasElement","enableTransparency","__gl","antialias","premultipliedAlpha","alpha","powerPreference","canvas","_ortho","checkIfResolutionSupported","dim","supported","clearColor","COLOR_BUFFER_BIT","BLEND","blendEquation","FUNC_ADD","blendFunc","ONE","ONE_MINUS_SRC_ALPHA","blendEquationSeparate","blendFuncSeparate","_screenRenderer","_renderTarget","rendererName","_isCurrentRenderer","_currentRenderer","beginDrawLifecycle","endDrawLifecycle","drawCall","resetTransform","updateViewport","resolution","trace","drawCircle","addPostProcessor","removePostProcessor","clearPostProcessors","originalSort","firstIndex","findIndex","dc","originalSortOrder","oldTransform","oldState","currentRendererName","currentRenderer","values","ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon","ExcaliburGraphicsContext2DCanvasDebug","_ex","__ctx","strokeStyle","strokeRect","beginPath","moveTo","lineTo","lineWidth","closePath","arc","fill","ExcaliburGraphicsContext2DCanvas","imageSmoothingEnabled","_resolution","globalAlpha","fillRect","setTransform","_postprocessor","DisplayMode","Resolution","SVGA","Standard","Atari2600","GameBoy","GameBoyAdvance","NintendoDS","NES","SNES","Screen","_antialiasing","_resolutionStack","_viewportStack","_pixelRatioOverride","_isFullScreen","_isDisposed","_fullscreenChangeHandler","_pixelRatioChangeHandler","_listenForPixelRatio","_devicePixelRatio","_calculateDevicePixelRatio","applyResolutionAndViewport","_resizeHandler","_setResolutionAndViewportByDisplayMode","_alreadyWarned","_contentArea","_contentResolution","_displayMode","displayMode","graphicsContext","antialiasing","_browser","browser","pixelRatio","_applyDisplayMode","_mediaQueryList","removeListener","nativeComponent","matchMedia","addListener","dispose","_resizeObserver","disconnect","removeEventListener","isHiDpi","FillContainer","FitContainer","FitContainerAndFill","FitContainerAndZoom","parentElement","_viewport","aspectRatio","scaledWidth","scaledHeight","setCurrentCamera","_camera","pushResolutionAndViewport","peekViewport","peekResolution","popResolutionAndViewport","imageRendering","isSmooth","isFullScreen","goFullScreen","elementId","maybeElement","getElementById","requestFullscreen","exitFullScreen","exitFullscreen","pageToScreenCoordinates","newX","newY","screenHeight","screenWidth","screenToPageCoordinates","screenMarginY","screenMarginX","screenToWorldCoordinates","worldToScreenCoordinates","pageToWorldCoordinates","worldToPageCoordinates","getWorldBounds","drawWidth","drawHeight","canvasWidth","halfCanvasWidth","canvasHeight","halfCanvasHeight","halfDrawWidth","halfDrawHeight","contentArea","_computeFit","overflow","aspect","adjustedWidth","adjustedHeight","_computeFitScreenAndFill","vw","vh","_computeFitAndFill","_computeFitContainerAndFill","clientWidth","clientHeight","clip","_computeFitScreenAndZoom","_computeFitAndZoom","_computeFitContainerAndZoom","scaleX","scaleY","maxScaleFactor","zoomedWidth","zoomedHeight","_computeFitContainer","Window","ResizeObserver","observe","FillScreen","FitScreen","FitScreenAndFill","FitScreenAndZoom","AudioContextFactory","create","WebAudio","unlock","_UNLOCKED","unlockTimeoutTimer","resume","createBufferSource","connect","destination","onended","playbackState","isLegacyWebAudioSource","currentTime","PLAYING_STATE","FINISHED_STATE","clearTimeout","isUnlocked","Class","eventObject","x1","y1","x2","y2","cap","lineCap","roundRect","br","tl","tr","bl","defaultRadius","quadraticCurveTo","circle","Loader_0","Raster","_g","_h","_j","quality","_smoothing","flagDirty","_lineWidth","_lineDash","_padding","strokeColor","lineDash","padding","_bitmap","bitmapWidth","bitmapHeight","maybeCtx","cloneRasterOptions","dirty","_getTotalWidth","_originalWidth","_getTotalHeight","_originalHeight","_strokeColor","rasterize","_applyRasterProperties","execute","setLineDash","getLineDash","Canvas","_options","cache","ExResponse","any","json","arraybuffer","StateMachine","states","currentState","machineDescription","machine","stateName","transitionState","transitions","startState","go","eventData","potentialNewState","onExit","onEnter","onState","update","elapsedMs","onUpdate","saveKey","localStorage","setItem","getItem","WebAudioInstance","_audioContext","_volumeNode","createGain","_playingPromise","_playingResolve","_stateMachine","PLAYING","_createNewBufferSource","_handleEnd","_instance","pausedAt","_playbackRate","startedAt","_playStarted","stop","SEEK","STOPPED","PAUSED","_volume","_loop","loop","playbackRate","volume","in","gain","setTargetAtTime","_duration","getTotalPlaybackDuration","isPlaying","isPaused","play","playStarted","pause","seek","getPlaybackPosition","MediaEvent","_name","_value","_path","_val","action","propagate","layPath","_actor","NativeSoundEvent","track","NativeSoundProcessedEvent","_processedData","canPlayFile","file","Audio","filetype","canPlayType","Sound","paths","_isStopped","_tracks","_wasPlayingOnHidden","instances","audiobuffer","decodeAudio","wireEngine","_engine","pauseAudioWhenHidden","instanceCount","some","_resumePlayback","_startPlayback","trackId","_getTrackInstance","getTrackId","resumed","complete","newTrack","Loader","loadables","_resourceList","_playButtonShown","_resourceCount","_numLoaded","_progressCounts","_totalCounts","logo","logoWidth","logoHeight","loadingBarColor","suppressPlayButton","_playButtonStyles","Z","playButtonText","startButtonFactory","buttonElement","textContent","display","_loadingFuture","addResources","_image","_imageElement","playButtonRootElement","_playButtonRootElement","playButtonElement","_playButtonElement","_playButton","existingRoot","_styleBlock","addResource","loadable","showPlayButton","resizeHandler","_positionPlayButton","evt","click","playButtonClicked","startButtonHandler","hidePlayButton","removeChild","_delta","areResourcesLoaded","async","finally","resource","markResourceComplete","progress","buttonWidth","buttonHeight","playButtonPosition","logoY","logoX","logoPosition","oldAntialias","getAntialiasing","setAntialiasing","loadingX","loadingY","loadingBarPosition","progressWidth","REPORTED_FEATURES","webgl","webaudio","gamepadapi","Detector","_features","failedTests","_criticalTests","canvasSupport","elem","arrayBufferSupport","xhr","dataUrlSupport","toDataURL","objectUrlSupport","rgbaSupport","cssText","_warningTest","webAudioSupport","webglSupport","_loadBrowserFeatures","getBrowserFeatures","logBrowserFeatures","dataurl","objecturl","rgba","navigator","getGamepads","failedCritical","warning","maxMessages","obsoleteMessage","resetObsoleteCounter","logMessage","suppressObsoleteMessages","showStackTrace","obsolete","alternateMethod","SyntaxError","DecoratedClass","CollisionResolutionStrategy","BroadphaseStrategy","Integrator","CoordPlane","Physics","gravity","acc","useArcadePhysics","collisionResolutionStrategy","Arcade","useRealisticPhysics","Realistic","dynamicTreeVelocityMultiplyer","dynamicTreeVelocityMultiplier","enabled","broadphaseStrategy","DynamicAABBTree","defaultMass","integrator","Euler","boundsPadding","positionIterations","velocityIterations","slop","steeringFactor","warmStart","bodiesCanSleepByDefault","surfaceEpsilon","sleepEpsilon","wakeThreshold","sleepBias","checkForFastBodies","disableMinimumSpeedForFastBody","decorators","desc","Reflect","decorate","__decorate","VectorView","_getX","getX","_getY","getY","_setX","setX","_setY","setY","WatchVector","original","Transform","_parent","_children","_pos","_isDirty","_isInverseDirty","_matrix","_inverse","children","globalPos","localPos","canonRotation","globalRotation","inverseRotation","globalScale","inverseScale","globalScaleX","globalScaleY","_calculateMatrix","applyInverse","owner","newComponent","TagComponent","Observable","observers","subscriptions","observer","subscribe","unregister","unsubscribe","notifyAll","observersLength","notify","subscriptionsLength","_addChildTransform","childTxComponent","zIndexChanged$","_z","coordPlane","World","onAdd","childrenAdded$","childrenRemoved$","onRemove","_previousOwner","oldz","MotionComponent","vel","scaleFactor","angularVelocity","torque","inertia","CollisionGroup","category","mask","_category","_mask","canCollide","collisionGroups","combinedName","combinedCategory","collidesWith","All","Pair","colliderA","colliderB","calculatePairHash","bodyA","BodyComponent","bodyB","group","active","collide","hasCollider","idA","idB","Projection","projection","getOverlap","TreeNode","isLeaf","DynamicTree","worldBounds","root","nodes","_insert","leaf","leafAABB","currentRoot","area","combinedArea","cost","inheritanceCost","leftCost","leftCombined","newArea","oldArea","rightCost","rightCombined","oldParent","newParent","currentNode","_balance","_remove","grandParent","sibling","trackCollider","node","updateCollider","untrackCollider","multdx","multdy","balance","getHeight","query","helper","rayCastQuery","getNodes","Ray","numerator","begin","getSlope","divisor","getLength","intersectPoint","getPoint","DynamicTreeCollisionProcessor","_dynamicCollisionTree","_pairs","Set","_collisionPairCache","_colliders","getColliders","untrack","_pairExists","hash","broadphase","targets","seconds","potentialColliders","pair","physics","pairs","Active","updateDistance","minDimension","fastBodies","updateVec","oldPos","centerPoint","furthestPoint","getFurthestPoint","minCollider","minTranslate","hitPoint","fastBodyCollisions","narrowphase","contacts","newContacts","collisions","updated","Collider","__compositeColliderId","touching","_collisionProcessor","_dynamicAABBTree","clearColliders","removeCollider","worldPos","axes","furthestPoints","bestPoint","maxDistance","getInertia","mass","totalInertia","otherColliders","potentialCollider","getClosestLineBetween","maybeLine","minLength","minLine","minPoint","minDistance","project","projs","proj","newProjection","LineSegment","slope","intercept","_normal","_dir","_slope","getEdge","_length","midpoint","flip","below","sideVector","clipTime","distanceToPoint","signed","x0","y0","findVectorToPoint","aMinusP","findPoint","hasPoint","currPoint","threshold","dxc","dyc","dx1","dy1","ClosestLine","p0","q0","w0","denom","sDenom","tDenom","tClosestParallel","sClosest","tClosest","ClosestLineJumpTable","PolygonPolygonClosestLine","polygonA","polygonB","otherWorldPos","otherDirection","thisDirection","rayTowardsOther","rayTowardsThis","thisPoint","otherPoint","thisFace","getClosestFace","otherFace","face","PolygonEdgeClosestLine","edge","edgeLine","asLine","PolygonCircleClosestLine","circlex","circley","CircleCircleClosestLine","circleA","circleB","CircleEdgeClosestLine","circleWorlPos","EdgeEdgeClosestLine","edgeA","edgeB","edgeLineA","edgeLineB","CircleCollider","_globalMatrix","_naturalRadius","orig","discriminant","toi","toi1","toi2","positiveToi","mintoi","shape","PolygonCollider","EdgeCollider","CollisionJumpTable","CollideCircleCircle","CollideCirclePolygon","CollideCircleEdge","getFurthestLocalPoint","scalars","dotProduct","CollisionContact","mtv","tangent","localPoints","_canceled","matchAwake","sleeping","sleepMotion","setSleeping","isCanceled","cancel","SeparatingAxis","findPolygonPolygonSeparation","polyA","polyB","bestSeparation","bestSide","bestAxis","bestSideIndex","bestOtherPoint","sides","getSides","localSides","getLocalSides","vertB","vertSeparation","separation","localSide","sideId","localPoint","findCirclePolygonSeparation","polyDir","closestPointOnPoly","minOverlap","minAxis","minIndex","proj1","proj2","overlap","circleAPos","circleBPos","combinedRadius","mvt","local","samedir","findSide","findLocalSide","cc","edgeWorld","asLocalLine","da","dda","db","ddb","den","pointOnEdge","dd","CollideEdgeEdge","CollidePolygonEdge","pc","linePoly","CollidePolygonPolygon","separationA","separationB","incident","reference","refDir","clipRight","clipLeft","xf","FindContactSeparation","shapeA","txA","shapeB","txB","worldPoint","circlePoint","dist","_getTransformedBegin","_getTransformedEnd","transformedBegin","transformedEnd","_boundsFromBeginEnd","edgeNormal","_transformedPoints","_sides","_localSides","_transformedPointsDirty","_sidesDirty","_localSidesDirty","_localBoundsDirty","_isCounterClockwiseWinding","reverse","isConvex","_calculateTransformation","_points","sum","oldPoint","newPoint","oldDirection","angleSum","entries","tessellate","polygons","triangulate","isPointInTriangle","ab","bc","ca","ap","bp","cp","cross1","cross2","cross3","triangles","vertices","indices","va","vb","vc","leftArm","isEar","vertIndex","getTransformedPoints","currentSide","mostDirection","testRay","accum","pts","POSITIVE_INFINITY","faceIndex","_localBounds","_cachedMass","_cachedInertia","denominator","iplusone","crossTerm","minContactTime","contactIndex","contactTime","scalar","firstPoint","Edge","Capsule","ColliderComponent","$colliderAdded","$colliderRemoved","_collider","flipped","entity","precollision","postcollision","usePolygonCollider","poly","useEdgeCollider","useCompositeCollider","DegreeOfFreedom","RotationType","FontStyle","Direction","Axis","dependencies","_oldTransform","__oldTransformCaptured","enableFixedUpdateInterpolate","_mass","canSleep","_sleeping","bounciness","friction","useGravity","limitDegreeOfFreedom","oldVel","oldAcc","newMass","_cachedInverseInertia","inverseMass","updateMotion","currentMotion","bias","maybeCollider","inverseInertia","motion","oldRotation","oldScale","applyImpulse","impulse","finalImpulse","X","Y","Rotation","distanceFromCenter","applyLinearImpulse","applyAngularImpulse","captureOldTransform","AddedComponent","isAddedComponent","RemovedComponent","isRemovedComponent","Entity","components","_componentsToRemove","_componentTypeToInstance","_componentStringToInstance","_tagsMemo","_typesMemo","componentAdded$","componentRemoved$","_isInitialized","_setName","component","kill","isKilled","tags","hasTag","addTag","removeTag","force","removeComponent","types","_rebuildMemos","getComponents","_notifyAddComponent","added","_notifyRemoveComponent","removed","unparent","getAncestors","removeAllChildren","getDescendants","queue","curr","newEntity","addTemplate","templateEntity","ctor","constuctorType","componentOrType","_removeComponentByType","delete","processComponentRemoval","isInitialized","_initialize","onInitialize","_preupdate","onPreUpdate","_postupdate","onPostUpdate","hasGraphicsTick","tick","GraphicsLayer","_graphics","hide","nameOrGraphic","gfx","getGraphic","recalculateBounds","copyGraphics","getNames","currentKeys","GraphicsLayers","_component","_layers","_layerMap","_maybeAddLayer","_getLayer","graphicsLayerKeys","GraphicsComponent","onPreDraw","onPostDraw","graphicToSet","offsetX","offsetY","elapsed","idempotencyToken","Rectangle","_radius","PointerComponent","useColliderShape","useGraphicsBounds","EasingFunctions","CreateReversibleEasingFunction","easing","CreateVectorEasingFunction","Linear","startValue","endValue","EaseInQuad","EaseOutQuad","EaseInOutQuad","EaseInCubic","EaseOutCubic","EaseInOutCubic","ActionQueue","_actions","_completedActions","_entity","remove","clearActions","_currentAction","getActions","hasNext","isComplete","Repeat","repeatBuilder","_stopped","_repeatBuilder","_repeatContext","ActionContext","_actionQueue","getQueue","_repeat","_originalRepeat","RepeatForever","MoveBy","speed","_started","_tx","_motion","_speed","_offset","_start","_end","_distance","MoveTo","destx","desty","RotateTo","rotationType","_rotationType","ShortestPath","_currentNonCannonAngle","distance1","distance2","_shortDistance","_longDistance","_shortestPathIsPositive","_direction","LongestPath","Clockwise","CounterClockwise","distanceTraveled","RotateBy","angleRadiansOffset","ScaleTo","speedX","speedY","_endX","_endY","_speedX","_speedY","_startX","_startY","_distanceX","_distanceY","directionX","directionY","ScaleBy","scaleOffsetX","scaleOffsetY","_startScale","_endScale","_directionX","_directionY","CallMethod","_method","_hasBeenCalled","EaseTo","easingFcn","_currentLerpTime","_lerpDuration","_lerpStart","_lerpEnd","_initialized","EaseBy","Blink","timeVisible","timeNotVisible","numBlinks","_timeVisible","_timeNotVisible","_elapsedTime","_totalTime","Fade","endOpacity","_multiplier","_endOpacity","_ogspeed","Delay","_delay","Die","ActionsComponent","Follow","entityToFollow","followDistance","_followTx","_followMotion","_current","_maximumDistance","_distanceBetween","actorToFollowSpeed","Meet","actorToMeet","_speedWasSpecified","_meetTx","_meetMotion","actorToMeetSpeed","_queue","runAction","easeTo","easeBy","xOrPos","yOrSpeed","speedOrUndefined","moveBy","xOffsetOrVector","yOffsetOrSpeed","xOffset","yOffset","rotateTo","rotateBy","scaleTo","sizeXOrVector","sizeYOrSpeed","speedXOrUndefined","speedYOrUndefined","sizeX","sizeY","scaleBy","sizeOffsetXOrVector","sizeOffsetYOrSpeed","sizeOffsetX","sizeOffsetY","blink","fade","die","callMethod","times","repeatForever","follow","meet","toPromise","_o","_p","_q","_r","Normal","Alphabetic","LeftToRight","_textBounds","_cachedTextMeasurement","_bitmapToTextMeasurement","_textToBitmap","_bitmapUsage","_textFragments","blur","fontString","measurementDirty","cached","rasterProps","_getRasterPropertiesHash","_getTextBitmap","_applyFont","metrics","textHeight","actualBoundingBoxAscent","actualBoundingBoxDescent","lineAdjustedHeight","bottomBounds","measurement","actualBoundingBoxLeft","actualBoundingBoxRight","_setDimension","textBounds","textBaseline","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","_drawText","colorOverride","lineHeight","strokeText","textAndHash","_splitTextBitmap","textImages","currentX","currentY","clearCache","checkAndClearCache","isNewBitmap","frag","performance","cacheSize","Text","_textWidth","_textHeight","_font","_calculateDimension","config","_anchor","_handleAnchorChange","scene","_draggable","_dragging","_pointerDragStartHandler","_pointerDragEndHandler","_pointerDragMoveHandler","pe","_pointerDragLeaveHandler","collisionGroup","defaults","Passive","pointer","actions","thePos","theVel","theAcc","theAngle","isOffScreen","draggable","isDraggable","currentGraphic","_prekill","_scene","onPreKill","_postkill","onPostKill","unkill","newZ","getGlobalPos","localCenter","getGlobalScale","getGlobalRotation","recurse","geom","containment","within","otherCollider","me","isScreenElement","ScreenElement","useWorld","coords","Timer","fcn","interval","repeats","numberOfRepeats","randomRange","_totalTimeAlive","_running","_numberOfTicks","maxNumberOfRepeats","_baseInterval","_generateRandomInterval","_complete","_MAX_ID","_callbacks","newInterval","newNumberOfRepeats","timesRepeated","getTimeRunning","timeToNextAction","timeElapsedTowardNextAction","isRunning","cancelTimer","DebugGraphicsComponent","useTransform","_token","_onScreenXStart","_onScreenXEnd","_onScreenYStart","_onScreenYEnd","_rows","_cols","renderFromTopOfGraphic","_collidersDirty","_originalOffsets","_composite","_oldPos","currentCol","cd","Tile","flagCollidersDirty","_getOrSetColliderOriginalOffset","originalOffset","_updateColliders","tile","getTileByIndex","getTile","getTileByPoint","getRows","getColumns","worldCoordsUpperLeft","worldCoordsLowerRight","maybeParallax","parallaxOffset","oneMinusFactor","currentScene","xEnd","yEnd","graphicsIndex","graphicsLen","getGraphics","grayish","_posDirty","_solid","_recalculate","removeGraphic","_bounds","StrategyContainer","lockToActor","addStrategy","LockCameraToActorStrategy","lockToActorAxis","LockCameraToActorAxisStrategy","elasticToActor","cameraElasticity","cameraFriction","ElasticToActorStrategy","radiusAroundActor","RadiusAroundActorStrategy","limitCameraBounds","box","LimitCameraBoundsStrategy","_cam","_eng","cam","currentFocus","getFocus","focus","cameraVel","stretch","boundSizeChecked","focusX","focusY","Camera","_cameraStrategies","dz","az","_angularVelocity","_posChanged","_cameraMoving","_isShaking","_shakeMagnitudeX","_shakeMagnitudeY","_shakeDuration","_elapsedShakeTime","_xShake","_yShake","_isZooming","_zoomStart","_zoomEnd","_currentZoomTime","_zoomDuration","_zoomEasing","_easing","_halfWidth","_halfHeight","_follow","ax","ay","move","easingFn","_lerpPromise","_lerpResolve","shake","magnitudeX","magnitudeY","zoomOverTime","_zoomPromise","_zoomResolve","cameraStrategy","removeStrategy","clearAllStrategies","_screen","currentRes","loadingComplete","res","updateTransform","runStrategies","newZoom","zoomEasing","lerpPoint","moveEasing","_isDoneShaking","newCanvasWidth","newCanvasHeight","cameraPos","triggerDefaults","Trigger","opts","_dispatchAction","_target","SystemType","System","_entityAddedOrRemoved","AddedEntity","isAddedSystemEntity","RemovedEntity","isRemoveSystemEntity","EntityManager","_world","entities","_entityIndex","_entitiesToRemove","updateEntities","removeEntity","findEntitiesForRemoval","queryManager","addEntity","idOrEntity","deferred","currFrame","actors","killed","processEntityRemovals","processComponentRemovals","getById","getByName","buildTypeKey","localeCompare","Query","_entities","T","_key","getEntities","typesOrEntity","contain","QueryManager","_queries","_addQuery","entityManager","maybeRemoveQuery","queryType","createQuery","maybeExistingQuery","getQuery","SystemManager","systems","initialized","systemType","addSystem","system","removeSystem","updateSystems","preupdate","Scene","postupdate","systemManager","Update","entityOrSystem","clearEntities","clearSystems","EulerIntegrator","integrate","totalAcc","_ACC","_VEL","_POS","_VEL_ACC","_SCALE_FACTOR","_SCALE","MotionSystem","optionalBody","ArcadeSolver","directionMap","distanceMap","solve","preSolve","solvePosition","solveVelocity","postSolve","opposite","velAdj","ContactConstraintPoint","normalImpulse","tangentImpulse","normalMass","tangentMass","aToContact","bToContact","originalVelocityAndRestitution","aToContactNormal","bToContactNormal","aToContactTangent","bToContactTangent","getRelativeVelocity","velA","RealisticSolver","lastFrameContacts","idToContactConstraint","getContactConstraints","finishedContactIds","contactPoints","pointIndex","restitution","relativeVelocity","constraints","maxCorrection","steeringForce","impulseForce","impulseDelta","maxFriction","newImpulse","normalVelocity","CollisionSystem","_realisticSolver","_arcadeSolver","_processor","_lastFrameContacts","_currentFrameContacts","_trackCollider","_untrackCollider","colliderComponent","colliderComp","compositeColliders","getSolver","compositeId","runContactStartEnd","AnimationDirection","EmitterType","ColorBlindnessMode","PointerScope","Keys","Buttons","Axes","WheelDeltaMode","NativePointerButton","PointerButton","PointerType","frameDuration","timeScale","_idempotencyToken","_firstTick","_currentFrame","_timeLeftInFrame","_done","_playing","_reversed","totalDuration","goToFrame","maybeFrame","currentFrame","fromSpriteSheet","frameIndices","durationPerFrameMs","invalidIndices","currentFrameIndex","Backward","Forward","canFinish","frameNumber","_nextFrame","elapsedMilliseconds","GraphicsGroup","members","_updateDimensions","_isAnimationOrGroup","member","maybeAnimation","Configurable","base","ParticleImpl","emitterOrConfig","life","beginColor","endColor","velocity","acceleration","startSize","endSize","particleRotationalVelocity","currentRotation","focusAccel","fadeFlag","_rRate","_gRate","_bRate","_aRate","_currentColor","emitter","particleSize","particleSprite","sizeRate","elapsedMultiplier","isOffscreen","ParticleEmitter","tmpColor","removeParticle","accel","Particle","_particlesToEmit","numParticles","isEmitting","particles","deadParticles","minVel","maxVel","minAngle","maxAngle","emitRate","particleLife","minSize","maxSize","_sprite","emitterType","randomRotation","particle","emitParticles","particleCount","_createParticle","world","clearParticles","ranX","ranY","GraphicsSystem","Draw","_sortedTransforms","_zHasChanged","_zIndexUpdate","sortedTransforms","_graphicsContext","entityAddedOrRemoved","parallax","_applyTransform","particleOpacity","_drawGraphicsComponent","graphicsComponent","isDebug","showBounds","boundsColor","ancestors","ancestor","interpolatedPos","interpolatedScale","interpolatedRotation","fixedUpdateFps","blend","currentFrameLagMs","DebugSystem","_collisionSystem","filterSettings","entitySettings","txSettings","motionSettings","colliderSettings","physicsSettings","graphicsSettings","debugDraw","bodySettings","cameraSettings","useFilter","ids","nameQuery","cursor","_pushCameraTransform","showAll","showPosition","positionColor","showPositionLabel","showZIndex","showId","showName","showRotation","rotationColor","showScale","scaleColor","showCollisionGroup","showCollisionType","showMass","showMotion","showSleeping","showVelocity","velocityColor","showAcceleration","accelerationColor","showGeometry","geometryColor","showOwner","_popCameraTransform","showBroadphaseSpacePartitionDebug","showCollisionContacts","showCollisionNormals","collisionContactColor","collisionNormalColor","showFocus","focusColor","showZoom","PointerSystem","overrideUseColliderShape","overrideUseGraphicsBounds","lastFrameEntityToPointers","currentFrameEntityToPointers","_sortedEntities","_receiver","pointers","entityCurrentlyUnderPointer","pointerId","entityWasUnderPointer","entered","addPointerToEntity","_processPointerToEntity","_dispatchEvents","currentFramePointerCoords","screenPos","graphicBounds","_processDownAndEmit","lastDownPerPointer","currentFrameDown","isDragStart","_processUpAndEmit","lastUpPerPointer","currentFrameUp","isDragEnd","_processMoveAndEmit","lastMovePerPointer","currentFrameMove","isDragging","_processEnterLeaveAndEmit","lastUpDownMoveEvents","_processCancelAndEmit","currentFrameCancel","_processWheelAndEmit","currentFrameWheel","lastFrameEntities","currentFrameEntities","entitiesWithEvents","ActionsSystem","IsometricEntitySystem","iso","OffscreenSystem","entityOffscreen","_isOffscreen","transformedBounds","_timers","_cancelQueue","triggers","tileMaps","timers","onActivate","onDeactivate","_initializeChildren","_activate","_deactivate","_predraw","_postdraw","removeTimer","timer","_collectActorStats","addTimer","isTimerActive","isCurrentScene","screenElements","_ui","ui","alive","ScreenShader","ColorBlindnessPostProcessor","_colorBlindnessMode","simulate","_simulate","colorBlindnessMode","colorBlindMode","Protanope","Deuteranope","Tritanope","ColorBlindFlags","_colorBlindPostProcessor","correct","colorBlindness","FrameStats","prevFrame","useTestClock","wasRunning","testClock","toTestClock","useStandardClock","currentClock","standardClock","toStandardClock","_id","_fps","_actorStats","remaining","_durationStats","_physicsStats","PhysicsStats","_graphicsStats","drawCalls","drawnImages","otherStats","fps","fs","_collisions","_contacts","_fastBodies","_fastBodyCollisions","_broadphase","_narrowphase","ps","KeyEvent","originalEvent","Keyboard","_keys","_keysUp","_keysDown","_handleKeyDown","keyEvent","_handleKeyUp","noop","getKeys","wasPressed","isHeld","wasReleased","triggerEvent","character","KeyboardEvent","Gamepads","_gamePadTimeStamps","_oldPads","_pads","_initSuccess","_navigator","_minimumConfiguration","_clonePads","setMinimumGamepadConfiguration","_enableAndUpdate","_isGamepadValid","pad","axesLength","buttonLength","buttons","connected","gamepads","at","timestamp","bi","ai","navigatorGamepad","getButton","pressed","updateButton","getAxes","updateAxes","_clonePad","Gamepad","getValidGamepads","pads","arr","clonedPad","MinAxisMoveThreshold","_buttons","_axes","isButtonPressed","buttonIndex","axesIndex","BrowserComponent","_paused","_nativeHandlers","_decorate","BrowserEvents","_windowGlobal","_documentGlobal","_windowComponent","_documentComponent","GlobalCoordinates","pagePos","fromPagePosition","yOrEngine","engineOrUndefined","pageX","pageY","PointerEvent","pointerType","coordinates","nativeEvent","WheelEvent","screenX","screenY","deltaZ","deltaMode","PointerAbstraction","lastPagePos","lastScreenPos","lastWorldPos","_onPointerMove","_onPointerDown","PointerEventReceiver","primary","_activeNativePointerIdsToNormalized","lastFramePointerCoords","currentFramePointerDown","lastFramePointerDown","_pointers","_boundHandle","_handle","_boundWheel","_handleWheel","recreate","eventReceiver","isDown","wasDown","native","touchAction","wheelOptions","passive","pageScrollPreventionMode","ScrollPreventionMode","onmousewheel","detach","_normalizePointerId","nativePointerId","preventDefault","eventCoords","TouchEvent","Unknown","Touch","changedTouches","touch","_nativeButtonToPointerButton","Mouse","isPointerEvent","_stringToPointerType","coord","ScrollWheelNormalizationFactor","wheelDeltaX","wheelDeltaY","wheelDelta","detail","Line","Page","we","page","clientX","clientY","MouseEvent","pointerSystem","transformEntities","NoButton","Middle","Pen","FpsSampler","_samplePeriod","_currentFrameTime","_frames","_previousSampleTime","_beginFrameTime","initialFps","samplePeriod","_nowFn","nowFn","instant","Clock","_onFatalException","_maxFps","_lastTime","_elapsed","_scheduledCbs","_totalElapsed","maxFps","onFatalException","fpsSampler","TestClock","defaultUpdateMs","StandardClock","setFatalExceptionHandler","cb","timeoutMs","scheduledTime","_runScheduledCbs","overrideUpdateMs","fpsInterval","leftover","mainloop","_requestId","_currentTime","_updateMs","step","run","numberOfSteps","Util_Toaster","Toaster","_toasterCss","_container","_createFragment","toastMessage","innerText","toast","linkTarget","linkName","className","messageFragments","link","href","finalMessage","dismissBtn","keydownHandler","first","firstChild","insertBefore","Engine","scenes","_suppressPlayButton","_isDebug","enableCanvasTransparency","_toaster","_timescale","_deferredGoTo","_originalOptions","_performanceThresholdTriggered","_fpsSamples","_loadingComplete","_isReady","_isReadyPromise","_isReadyResolve","currentFrameElapsedMs","_lagMs","_screenShotRequests","_DEFAULT_ENGINE_OPTIONS","detector","suppressMinimumBrowserFeatureDetection","_compatible","testMessage","canvasElementId","suppressConsoleBootMessage","EX_VERSION","_originalDisplayMode","suppressHiDPIScaling","_mainloop","_loader","rootScene","addScene","___EXCALIBUR_DEVTOOL","isFullscreen","shouldSnapToPixel","_monitorPerformanceThresholdAndTriggerFallback","allow","configurePerformanceCanvas2DFallback","showPlayerMessage","numberOfFrames","useCanvas2DFallback","newCanvas","cloneNode","parentNode","replaceChild","pointerTarget","pointerScope","Document","timescale","removeScene","goToScene","previousScene","nextScene","scrollPreventionMode","hidden","visibilityChange","keyboard","_overrideInitialize","deferredScene","_update","_draw","_checkForScreenShots","toggle","toggleDebug","isReady","loader","frameId","beforeUpdate","fixedTimestepMs","afterUpdate","afterDraw","screenshot","preserveHiDPIResolution","finalWidth","finalHeight","spriteFont","newFont","sf","getTextWidth","IsometricTile","graphicsOffset","_tileBounds","_isometricEntityComponent","halfTileWidth","halfTileHeight","xPos","yPos","_gfx","totalWidth","totalHeight","_recalculateBounds","tileToWorld","worldToTile","worldCoordinate","tileCoordinate","tileCoord","_getMaxZIndex","maxZ","NEGATIVE_INFINITY","currentZ","ActionSequence","actionBuilder","_sequenceBuilder","_sequenceContext","ParallelActions","parallelActions","every","CollisionGroupManager","_CURRENT_GROUP","_MAX_GROUPS","_GROUPS","_CURRENT_BIT","groups","groupByName","_STARTING_BIT","has_initialize","hasOnInitialize","has_preupdate","hasOnPreUpdate","has_postupdate","hasOnPostUpdate","hasPreDraw","hasPostDraw","Gif","_stream","_gif","_animation","_transparentColor","Stream","ParseGif","images","toSpriteSheet","toAnimation","readCheckBytes","checkBytes","bitsToNum","ba","byteToBitArr","bite","dataArray","readByte","readBytes","bytes","read","readUnsigned","stream","_st","_handler","globalColorTable","parseColorTable","ct","readSubBlocks","parseHeader","hdr","sig","ver","colorRes","globalColorTableSize","gctFlag","sorted","bgColor","pixelAspectRatio","parseExt","block","parseGCExt","reserved","disposalMethod","userInput","transparencyGiven","delayTime","transparencyIndex","terminator","gce","parseComExt","com","parsePTExt","ptHeader","ptData","pte","parseAppExt","identifier","authCode","unknown","iterations","app","NETSCAPE","parseNetscapeExt","appData","parseUnknownAppExt","parseUnknownExt","label","extType","parseImg","img","leftPos","topPos","lctFlag","interlaced","lctSize","lct","lzwMinCodeSize","lzwData","pixels","minCodeSize","readCode","clearCode","eoiCode","codeSize","dict","lzwDecode","newPixels","cpRow","toRow","fromRow","fromPixels","offsets","steps","pass","deinterlace","arrayToImage","parseBlock","sentinel","eof","AsyncWaitQueue","enqueue","dequeue","Semaphore","_count","_waitQueue","waiting","enter","exit","__webpack_exports__ActionContext","fWn","__webpack_exports__ActionQueue","Ia8","__webpack_exports__ActionSequence","rqv","__webpack_exports__ActionsComponent","hLI","__webpack_exports__ActionsSystem","yyv","__webpack_exports__ActivateEvent","tX5","__webpack_exports__Actor","vtX","__webpack_exports__AddedComponent","r7K","__webpack_exports__AddedEntity","lCh","__webpack_exports__AffineMatrix","cE4","__webpack_exports__Animation","fwF","__webpack_exports__AnimationDirection","sce","__webpack_exports__AnimationStrategy","_c7","__webpack_exports__ArcadeSolver","KUs","__webpack_exports__AudioContextFactory","Ajp","__webpack_exports__Axis","RDh","__webpack_exports__BaseAlign","_H9","__webpack_exports__Blink","mxs","__webpack_exports__BodyComponent","OmD","__webpack_exports__BoundingBox","kBf","__webpack_exports__BroadphaseStrategy","C4F","__webpack_exports__BrowserComponent","NQt","__webpack_exports__BrowserEvents","JjN","__webpack_exports__Camera","V1s","__webpack_exports__Canvas","Xz7","__webpack_exports__Circle","Cdc","__webpack_exports__CircleCollider","FKn","__webpack_exports__Class","wTW","__webpack_exports__Clock","SUY","__webpack_exports__ClosestLine","ab2","__webpack_exports__ClosestLineJumpTable","GfZ","__webpack_exports__Collider","YMS","__webpack_exports__ColliderComponent","oyv","__webpack_exports__CollisionContact","aUb","__webpack_exports__CollisionEndEvent","SdD","__webpack_exports__CollisionGroup","JUv","__webpack_exports__CollisionGroupManager","jEj","__webpack_exports__CollisionJumpTable","TFq","__webpack_exports__CollisionPostSolveEvent","HDU","__webpack_exports__CollisionPreSolveEvent","R_y","__webpack_exports__CollisionResolutionStrategy","ydN","__webpack_exports__CollisionStartEvent","t50","__webpack_exports__CollisionSystem","s$$","__webpack_exports__CollisionType","v2G","__webpack_exports__Color","Ilk","__webpack_exports__ColorBlindFlags","s9i","__webpack_exports__ColorBlindnessMode","dxL","__webpack_exports__ColorBlindnessPostProcessor","LLX","__webpack_exports__Component","wA2","__webpack_exports__CompositeCollider","R_p","__webpack_exports__Configurable","IQ$","__webpack_exports__ConsoleAppender","I5F","__webpack_exports__ContactConstraintPoint","X8$","__webpack_exports__ContactEndEvent","FR6","__webpack_exports__ContactStartEvent","U8o","__webpack_exports__CoordPlane","kbG","__webpack_exports__DeactivateEvent","iS_","__webpack_exports__Debug","cGG","__webpack_exports__DebugGraphicsComponent","RPN","__webpack_exports__DebugSystem","skb","__webpack_exports__DebugText","SLU","__webpack_exports__DegreeOfFreedom","RdJ","__webpack_exports__Delay","cNu","__webpack_exports__Detector","gU7","__webpack_exports__Die","LSk","__webpack_exports__Direction","Nmp","__webpack_exports__DisplayMode","d1Y","__webpack_exports__DynamicTree","xrL","__webpack_exports__DynamicTreeCollisionProcessor","sRW","__webpack_exports__EX_VERSION","cmV","__webpack_exports__EaseBy","qWz","__webpack_exports__EaseTo","N0Q","__webpack_exports__EasingFunctions","q8b","__webpack_exports__EdgeCollider","ynB","__webpack_exports__ElasticToActorStrategy","jT9","__webpack_exports__EmitterType","wAz","__webpack_exports__Engine","D4V","__webpack_exports__EnterTriggerEvent","N6H","__webpack_exports__EnterViewPortEvent","W1A","__webpack_exports__Entity","JHW","__webpack_exports__EntityManager","v2K","__webpack_exports__EventDispatcher","pBf","__webpack_exports__EventTypes","GMl","__webpack_exports__Events","zW2","__webpack_exports__ExResponse","B0K","__webpack_exports__ExcaliburGraphicsContext2DCanvas","Nv7","__webpack_exports__ExcaliburGraphicsContextWebGL","C_p","__webpack_exports__ExcaliburWebGLContextAccessor","iqw","__webpack_exports__ExitTriggerEvent","MUA","__webpack_exports__ExitViewPortEvent","xqU","__webpack_exports__Fade","pTp","__webpack_exports__Flags","vUK","__webpack_exports__Follow","j9l","__webpack_exports__Font","Zxw","__webpack_exports__FontStyle","Hdx","__webpack_exports__FontUnit","Z$d","__webpack_exports__FpsSampler","iqV","__webpack_exports__FrameStats","o$7","__webpack_exports__Future","olM","__webpack_exports__GameEvent","Zm$","__webpack_exports__GameStartEvent","$QH","__webpack_exports__GameStopEvent","i78","__webpack_exports__GamepadAxisEvent","h6u","__webpack_exports__GamepadButtonEvent","hts","__webpack_exports__GamepadConnectEvent","j88","__webpack_exports__GamepadDisconnectEvent","VME","__webpack_exports__Gif","nt","__webpack_exports__GlobalCoordinates","Ukr","__webpack_exports__Graphic","zsu","__webpack_exports__GraphicsComponent","oA6","__webpack_exports__GraphicsGroup","TVh","__webpack_exports__GraphicsLayer","TwZ","__webpack_exports__GraphicsLayers","GTT","__webpack_exports__GraphicsSystem","xxj","__webpack_exports__HiddenEvent","XdK","__webpack_exports__ImageFiltering","Jmb","__webpack_exports__ImageSource","cXo","__webpack_exports__InitializeEvent","Dm5","__webpack_exports__Input","IIB","__webpack_exports__Integrator","zI0","__webpack_exports__IsometricEntityComponent","LYD","__webpack_exports__IsometricEntitySystem","cEG","__webpack_exports__IsometricMap","SEl","__webpack_exports__IsometricTile","t9V","__webpack_exports__KillEvent","SKZ","__webpack_exports__Label","__J","__webpack_exports__LimitCameraBoundsStrategy","RI$","__webpack_exports__Line","x12","__webpack_exports__LineSegment","ccz","__webpack_exports__Loader","aNw","__webpack_exports__LockCameraToActorAxisStrategy","xwn","__webpack_exports__LockCameraToActorStrategy","dNK","__webpack_exports__LogLevel","ini","__webpack_exports__Logger","YdH","__webpack_exports__Matrix","y3G","__webpack_exports__MatrixLocations","l57","__webpack_exports__MediaEvent","xn0","__webpack_exports__Meet","t2V","__webpack_exports__MotionComponent","uxB","__webpack_exports__MotionSystem","cpd","__webpack_exports__MoveBy","fiy","__webpack_exports__MoveTo","$XZ","__webpack_exports__NativeSoundEvent","uqK","__webpack_exports__NativeSoundProcessedEvent","STE","__webpack_exports__Observable","y$z","__webpack_exports__OffscreenSystem","mAD","__webpack_exports__Pair","sOq","__webpack_exports__ParallaxComponent","hUw","__webpack_exports__ParallelActions","_0G","__webpack_exports__ParseGif","Sqs","__webpack_exports__Particle","hpZ","__webpack_exports__ParticleEmitter","Vol","__webpack_exports__Physics","wIZ","__webpack_exports__PhysicsStats","cBi","__webpack_exports__PointerComponent","RFv","__webpack_exports__PointerSystem","kfC","__webpack_exports__Polygon","mgq","__webpack_exports__PolygonCollider","YVA","__webpack_exports__Pool","Kgp","__webpack_exports__PostCollisionEvent","HH$","__webpack_exports__PostDebugDrawEvent","M_d","__webpack_exports__PostDrawEvent","rgh","__webpack_exports__PostFrameEvent","Ra6","__webpack_exports__PostKillEvent","KhR","__webpack_exports__PostUpdateEvent","BS5","__webpack_exports__PreCollisionEvent","xhz","__webpack_exports__PreDebugDrawEvent","xOq","__webpack_exports__PreDrawEvent","a9j","__webpack_exports__PreFrameEvent","bHk","__webpack_exports__PreKillEvent","CgK","__webpack_exports__PreUpdateEvent","cuY","__webpack_exports__Projection","kvE","__webpack_exports__QuadIndexBuffer","SBu","__webpack_exports__Query","AE_","__webpack_exports__QueryManager","ctO","__webpack_exports__RadiusAroundActorStrategy","OLH","__webpack_exports__Random","kky","__webpack_exports__Raster","nSF","__webpack_exports__Ray","zHn","__webpack_exports__RealisticSolver","zwx","__webpack_exports__Rectangle","AeJ","__webpack_exports__RemovedComponent","hLz","__webpack_exports__RemovedEntity","D9g","__webpack_exports__Repeat","wA","__webpack_exports__RepeatForever","jhr","__webpack_exports__Resolution","GVs","__webpack_exports__Resource","_zO","__webpack_exports__RotateBy","w6$","__webpack_exports__RotateTo","mhV","__webpack_exports__RotationType","MOD","__webpack_exports__ScaleBy","kwd","__webpack_exports__ScaleTo","Lmr","__webpack_exports__Scene","xsS","__webpack_exports__Screen","lLr","__webpack_exports__ScreenAppender","Z$r","__webpack_exports__ScreenElement","IXb","__webpack_exports__ScreenShader","SGH","__webpack_exports__ScrollPreventionMode","SMj","__webpack_exports__Semaphore","L34","__webpack_exports__Shader","exe","__webpack_exports__Shape","bnF","__webpack_exports__Side","MFA","__webpack_exports__Sound","$uU","__webpack_exports__Sprite","jyi","__webpack_exports__SpriteFont","E03","__webpack_exports__SpriteSheet","V6q","__webpack_exports__StandardClock","rg2","__webpack_exports__StateMachine","DVW","__webpack_exports__StrategyContainer","nVo","__webpack_exports__Stream","F6N","__webpack_exports__System","xP7","__webpack_exports__SystemManager","Odq","__webpack_exports__SystemType","Zif","__webpack_exports__TagComponent","ZGJ","__webpack_exports__TestClock","MJk","__webpack_exports__Text","xvT","__webpack_exports__TextAlign","PHM","__webpack_exports__TextureLoader","dpR","__webpack_exports__Tile","n9L","__webpack_exports__TileMap","KwO","__webpack_exports__Timer","B7y","__webpack_exports__Toaster","x7r","__webpack_exports__Transform","wx7","__webpack_exports__TransformComponent","Uvn","__webpack_exports__TreeNode","OFT","__webpack_exports__Trigger","xzN","__webpack_exports__TwoPI","M5Z","__webpack_exports__Util","ZrN","__webpack_exports__Vector","OWs","__webpack_exports__VectorView","dF9","__webpack_exports__VertexBuffer","oZy","__webpack_exports__VertexLayout","rD2","__webpack_exports__VisibleEvent","VHo","__webpack_exports__WebAudio","ohE","__webpack_exports__WebAudioInstance","R$E","__webpack_exports__World","q3I","__webpack_exports__canonicalizeAngle","Pab","__webpack_exports__clamp","uZ5","__webpack_exports__createId","McK","__webpack_exports__frac","F9c","__webpack_exports__hasGraphicsTick","k0b","__webpack_exports__hasOnInitialize","hnT","__webpack_exports__hasOnPostUpdate","RSJ","__webpack_exports__hasOnPreUpdate","Mku","__webpack_exports__hasPostDraw","h90","__webpack_exports__hasPreDraw","rms","__webpack_exports__has_initialize","ErP","__webpack_exports__has_postupdate","aVg","__webpack_exports__has_preupdate","lPc","__webpack_exports__isAddedComponent","Z8E","__webpack_exports__isAddedSystemEntity","_N2","__webpack_exports__isRemoveSystemEntity","yFn","__webpack_exports__isRemovedComponent","lNv","__webpack_exports__isScreenElement","cu9","__webpack_exports__maxMessages","MZQ","__webpack_exports__obsolete","FUM","__webpack_exports__pixelSnapEpsilon","BxR","__webpack_exports__randomInRange","vdf","__webpack_exports__randomIntInRange","iaL","__webpack_exports__range","w6H","__webpack_exports__resetObsoleteCounter","Q4c","__webpack_exports__sign","Xxe","__webpack_exports__toDegrees","Uxb","__webpack_exports__toRadians","Yr5","__webpack_exports__vec","Bhw","__webpack_exports__webgl","yOA","Config","PlayerSpeed","PlayerFrameSpeed","__createBinding","k2","__setModuleDefault","__importStar","mod","resources_1","player_1","game","Resources","player","playerActor","Player","config_1","playerSpriteSheet","HeroSpriteSheetPng","leftIdle","rightIdle","upIdle","downIdle","leftWalk","rightWalk","upWalk","downWalk","Input","ArrowRight","ArrowLeft","ArrowUp","ArrowDown","excalibur_1","plugin_tiled_1","__webpack_require__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"main.js","mappings":"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AAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,EACXC,IAAK,IAAM,EACXC,IAAK,IAAM,GACXC,IAAK,IAAM,EACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,EACXC,IAAK,IAAM,EACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,EACXC,IAAK,IAAM,EACXC,IAAK,IAAM,EACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,EACXC,IAAK,IAAM,EACXC,IAAK,IAAM,GACXC,IAAK,IAAM,EACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,EACXC,IAAK,IAAM,EACXC,IAAK,IAAM,EACXC,IAAK,IAAM,EACXC,IAAK,IAAM,EACXC,IAAK,IAAM,EACXC,IAAK,IAAM,EACXC,IAAK,IAAM,EACXC,IAAK,IAAM,EACXC,GAAI,IAAM,GACVC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,EACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,EACXC,IAAK,IAAM,EACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,EACXC,IAAK,IAAM,EACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,EACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,EACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,EACXC,IAAK,IAAM,EACXC,IAAK,IAAM,EACXC,IAAK,IAAM,EACXC,IAAK,IAAM,EACXC,IAAK,IAAM,EACXC,IAAK,IAAM,EACXC,IAAK,IAAM,EACXC,IAAK,IAAM,EACXC,IAAK,IAAM,EACXC,IAAK,IAAM,EACXC,IAAK,IAAM,EACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,GAAI,IAAM,GACVC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,EACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,EACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,EACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,IAAK,IAAM,GACXC,I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","sources":["webpack://sample-tiled-webpack/./node_modules/@excaliburjs/plugin-tiled/dist/excalibur-tiled.min.js","webpack://sample-tiled-webpack/./node_modules/excalibur/build/esm/excalibur.js","webpack://sample-tiled-webpack/./src/config.ts","webpack://sample-tiled-webpack/./src/main.ts","webpack://sample-tiled-webpack/./src/player.ts","webpack://sample-tiled-webpack/./src/resources.ts","webpack://sample-tiled-webpack/webpack/bootstrap","webpack://sample-tiled-webpack/webpack/runtime/define property getters","webpack://sample-tiled-webpack/webpack/runtime/hasOwnProperty shorthand","webpack://sample-tiled-webpack/webpack/runtime/make namespace object","webpack://sample-tiled-webpack/webpack/startup"],"sourcesContent":["/*! For license information please see excalibur-tiled.min.js.LICENSE.txt */\n!function(A,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t(require(\"excalibur\")):\"function\"==typeof define&&define.amd?define([\"excalibur\"],t):\"object\"==typeof exports?exports.ex=t(require(\"excalibur\")):(A.ex=A.ex||{},A.ex.Plugin=A.ex.Plugin||{},A.ex.Plugin.Tiled=t(A.ex))}(self,(A=>(()=>{var t={\"./node_modules/fast-xml-parser/src/json2xml.js\":(A,t,e)=>{\"use strict\";const i=e(\"./node_modules/fast-xml-parser/src/util.js\").buildOptions,a={attributeNamePrefix:\"@_\",attrNodeName:!1,textNodeName:\"#text\",ignoreAttributes:!0,cdataTagName:!1,cdataPositionChar:\"\\\\c\",format:!1,indentBy:\" \",supressEmptyNode:!1,tagValueProcessor:function(A){return A},attrValueProcessor:function(A){return A}},s=[\"attributeNamePrefix\",\"attrNodeName\",\"textNodeName\",\"ignoreAttributes\",\"cdataTagName\",\"cdataPositionChar\",\"format\",\"indentBy\",\"supressEmptyNode\",\"tagValueProcessor\",\"attrValueProcessor\",\"rootNodeName\"];function o(A){this.options=i(A,a,s),this.options.ignoreAttributes||this.options.attrNodeName?this.isAttribute=function(){return!1}:(this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=E),this.options.cdataTagName?this.isCDATA=d:this.isCDATA=function(){return!1},this.replaceCDATAstr=g,this.replaceCDATAarr=n,this.processTextOrObjNode=r,this.options.format?(this.indentate=Q,this.tagEndChar=\">\\n\",this.newLine=\"\\n\"):(this.indentate=function(){return\"\"},this.tagEndChar=\">\",this.newLine=\"\"),this.options.supressEmptyNode?(this.buildTextNode=C,this.buildObjNode=l):(this.buildTextNode=B,this.buildObjNode=I),this.buildTextValNode=B,this.buildObjectNode=I}function r(A,t,e){const i=this.j2x(A,e+1);return void 0!==A[this.options.textNodeName]&&1===Object.keys(A).length?this.buildTextNode(i.val,t,i.attrStr,e):this.buildObjNode(i.val,t,i.attrStr,e)}function g(A,t){return A=this.options.tagValueProcessor(\"\"+A),\"\"===this.options.cdataPositionChar||\"\"===A?A+\"\");return A+this.newLine}function I(A,t,e,i){return e&&-1===A.indexOf(\"<\")?this.indentate(i)+\"<\"+t+e+\">\"+A+\"\"+this.options.tagValueProcessor(A)+\"1&&(A={[this.options.rootNodeName]:A}),this.j2x(A,0).val},o.prototype.j2x=function(A,t){let e=\"\",i=\"\";for(let a in A)if(void 0===A[a]);else if(null===A[a])i+=this.indentate(t)+\"<\"+a+\"/\"+this.tagEndChar;else if(A[a]instanceof Date)i+=this.buildTextNode(A[a],a,\"\",t);else if(\"object\"!=typeof A[a]){const s=this.isAttribute(a);s?e+=\" \"+s+'=\"'+this.options.attrValueProcessor(\"\"+A[a])+'\"':this.isCDATA(a)?A[this.options.textNodeName]?i+=this.replaceCDATAstr(A[this.options.textNodeName],A[a]):i+=this.replaceCDATAstr(\"\",A[a]):a===this.options.textNodeName?A[this.options.cdataTagName]||(i+=this.options.tagValueProcessor(\"\"+A[a])):i+=this.buildTextNode(A[a],a,\"\",t)}else if(Array.isArray(A[a]))if(this.isCDATA(a))i+=this.indentate(t),A[this.options.textNodeName]?i+=this.replaceCDATAarr(A[this.options.textNodeName],A[a]):i+=this.replaceCDATAarr(\"\",A[a]);else{const e=A[a].length;for(let s=0;s{\"use strict\";const i=function(A){return String.fromCharCode(A)},a={nilChar:i(176),missingChar:i(201),nilPremitive:i(175),missingPremitive:i(200),emptyChar:i(178),emptyValue:i(177),boundryChar:i(179),objStart:i(198),arrStart:i(204),arrayEnd:i(185)},s=[a.nilChar,a.nilPremitive,a.missingChar,a.missingPremitive,a.boundryChar,a.emptyChar,a.emptyValue,a.arrayEnd,a.objStart,a.arrStart],o=function(A,t,e){if(\"string\"==typeof t)return A&&A[0]&&void 0!==A[0].val?r(A[0].val,t):r(A,t);{const s=void 0===(i=A)?a.missingChar:null===i?a.nilChar:!(i.child&&0===Object.keys(i.child).length&&(!i.attrsMap||0===Object.keys(i.attrsMap).length))||a.emptyChar;if(!0===s){let i=\"\";if(Array.isArray(t)){i+=a.arrStart;const s=t[0],n=A.length;if(\"string\"==typeof s)for(let t=0;t{\"use strict\";const i=e(\"./node_modules/fast-xml-parser/src/util.js\"),a=function(A,t,e){const s={};if(!t.alwaysCreateTextNode&&(!A.child||i.isEmptyObject(A.child))&&(!A.attrsMap||i.isEmptyObject(A.attrsMap)))return i.isExist(A.val)?A.val:\"\";if(i.isExist(A.val)&&(\"string\"!=typeof A.val||\"\"!==A.val&&A.val!==t.cdataPositionChar)){const a=i.isTagNameInArrayMode(A.tagname,t.arrayMode,e);s[t.textNodeName]=a?[A.val]:A.val}i.merge(s,A.attrsMap,t.arrayMode);const o=Object.keys(A.child);for(let r=0;r1){s[g]=[];for(let e in A.child[g])A.child[g].hasOwnProperty(e)&&s[g].push(a(A.child[g][e],t,g))}else{const o=a(A.child[g][0],t,g),r=!0===t.arrayMode&&\"object\"==typeof o||i.isTagNameInArrayMode(g,t.arrayMode,e);s[g]=r?[o]:o}}return s};t.convertToJson=a},\"./node_modules/fast-xml-parser/src/node2json_str.js\":(A,t,e)=>{\"use strict\";const i=e(\"./node_modules/fast-xml-parser/src/util.js\"),a=e(\"./node_modules/fast-xml-parser/src/util.js\").buildOptions,s=e(\"./node_modules/fast-xml-parser/src/xmlstr2xmlnode.js\"),o=function(A,t,e){let a=\"{\";const s=Object.keys(A.child);for(let e=0;e1){a+='\"'+i+'\" : [ ';for(let e in A.child[i])a+=o(A.child[i][e],t)+\" , \";a=a.substr(0,a.length-1)+\" ] \"}else a+='\"'+i+'\" : '+o(A.child[i][0],t)+\" ,\"}return i.merge(a,A.attrsMap),i.isEmptyObject(a)?i.isExist(A.val)?A.val:\"\":(i.isExist(A.val)&&(\"string\"!=typeof A.val||\"\"!==A.val&&A.val!==t.cdataPositionChar)&&(a+='\"'+t.textNodeName+'\" : '+(!0!==(r=A.val)&&!1!==r&&isNaN(r)?'\"'+r+'\"':r)),\",\"===a[a.length-1]&&(a=a.substr(0,a.length-2)),a+\"}\");var r};t.convertToJsonString=function(A,t){return(t=a(t,s.defaultOptions,s.props)).indentBy=t.indentBy||\"\",o(A,t,0)}},\"./node_modules/fast-xml-parser/src/parser.js\":(A,t,e)=>{\"use strict\";const i=e(\"./node_modules/fast-xml-parser/src/node2json.js\"),a=e(\"./node_modules/fast-xml-parser/src/xmlstr2xmlnode.js\"),s=e(\"./node_modules/fast-xml-parser/src/xmlstr2xmlnode.js\"),o=e(\"./node_modules/fast-xml-parser/src/util.js\").buildOptions,r=e(\"./node_modules/fast-xml-parser/src/validator.js\");t.parse=function(A,t={},e){if(e){!0===e&&(e={});const t=r.validate(A,e);if(!0!==t)throw Error(t.err.msg)}t.parseTrueNumberOnly&&!1!==t.parseNodeValue&&!t.numParseOptions&&(t.numParseOptions={leadingZeros:!1});let g=o(t,s.defaultOptions,s.props);const n=a.getTraversalObj(A,g);return i.convertToJson(n,g)},t.convertTonimn=e(\"./node_modules/fast-xml-parser/src/nimndata.js\").convert2nimn,t.getTraversalObj=a.getTraversalObj,t.convertToJson=i.convertToJson,t.convertToJsonString=e(\"./node_modules/fast-xml-parser/src/node2json_str.js\").convertToJsonString,t.validate=r.validate,t.j2xParser=e(\"./node_modules/fast-xml-parser/src/json2xml.js\"),t.parseToNimn=function(A,e,i){return t.convertTonimn(t.getTraversalObj(A,i),e,i)}},\"./node_modules/fast-xml-parser/src/util.js\":(A,t)=>{\"use strict\";const e=\"[:A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD][:A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*\",i=new RegExp(\"^\"+e+\"$\");t.isExist=function(A){return void 0!==A},t.isEmptyObject=function(A){return 0===Object.keys(A).length},t.merge=function(A,t,e){if(t){const i=Object.keys(t),a=i.length;for(let s=0;s{\"use strict\";const i=e(\"./node_modules/fast-xml-parser/src/util.js\"),a={allowBooleanAttributes:!1},s=[\"allowBooleanAttributes\"];function o(A,t){const e=t;for(;t5&&\"xml\"===i)return B(\"InvalidXml\",\"XML declaration allowed only at the start of the document.\",Q(A,t));if(\"?\"==A[t]&&\">\"==A[t+1]){t++;break}}return t}function r(A,t){if(A.length>t+5&&\"-\"===A[t+1]&&\"-\"===A[t+2]){for(t+=3;t\"===A[t+2]){t+=2;break}}else if(A.length>t+8&&\"D\"===A[t+1]&&\"O\"===A[t+2]&&\"C\"===A[t+3]&&\"T\"===A[t+4]&&\"Y\"===A[t+5]&&\"P\"===A[t+6]&&\"E\"===A[t+7]){let e=1;for(t+=8;t\"===A[t]&&(e--,0===e))break}else if(A.length>t+9&&\"[\"===A[t+1]&&\"C\"===A[t+2]&&\"D\"===A[t+3]&&\"A\"===A[t+4]&&\"T\"===A[t+5]&&\"A\"===A[t+6]&&\"[\"===A[t+7])for(t+=8;t\"===A[t+2]){t+=2;break}return t}function g(A,t){let e=\"\",i=\"\",a=!1;for(;t\"===A[t]&&\"\"===i){a=!0;break}e+=A[t]}return\"\"===i&&{value:e,index:t,tagClosed:a}}t.validate=function(A,t){t=i.buildOptions(t,a,s);const e=[];let n=!1,C=!1;\"\\ufeff\"===A[0]&&(A=A.substr(1));for(let a=0;a\"!==A[a]&&\" \"!==A[a]&&\"\\t\"!==A[a]&&\"\\n\"!==A[a]&&\"\\r\"!==A[a];a++)h+=A[a];if(h=h.trim(),\"/\"===h[h.length-1]&&(h=h.substring(0,h.length-1),a--),E=h,!i.isName(E)){let t;return t=0===h.trim().length?\"Invalid space after '<'.\":\"Tag '\"+h+\"' is an invalid name.\",B(\"InvalidTag\",t,Q(A,a))}const c=g(A,a);if(!1===c)return B(\"InvalidAttr\",\"Attributes for '\"+h+\"' have open quote.\",Q(A,a));let u=c.value;if(a=c.index,\"/\"===u[u.length-1]){const e=a-u.length;u=u.substring(0,u.length-1);const i=I(u,t);if(!0!==i)return B(i.err.code,i.err.msg,Q(A,e+i.err.line));n=!0}else if(d){if(!c.tagClosed)return B(\"InvalidTag\",\"Closing tag '\"+h+\"' doesn't have proper closing.\",Q(A,a));if(u.trim().length>0)return B(\"InvalidTag\",\"Closing tag '\"+h+\"' can't have attributes or invalid starting.\",Q(A,s));{const t=e.pop();if(h!==t.tagName){let e=Q(A,t.tagStartPos);return B(\"InvalidTag\",\"Expected closing tag '\"+t.tagName+\"' (opened in line \"+e.line+\", col \"+e.col+\") instead of closing tag '\"+h+\"'.\",Q(A,s))}0==e.length&&(C=!0)}}else{const i=I(u,t);if(!0!==i)return B(i.err.code,i.err.msg,Q(A,a-u.length+i.err.line));if(!0===C)return B(\"InvalidXml\",\"Multiple possible root nodes found.\",Q(A,a));e.push({tagName:h,tagStartPos:s}),n=!0}for(a++;a0)||B(\"InvalidXml\",\"Invalid '\"+JSON.stringify(e.map((A=>A.tagName)),null,4).replace(/\\r?\\n/g,\"\")+\"' found.\",{line:1,col:1}):B(\"InvalidXml\",\"Start tag expected.\",1)};const n=new RegExp(\"(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*(['\\\"])(([\\\\s\\\\S])*?)\\\\5)?\",\"g\");function I(A,t){const e=i.getAllMatches(A,n),a={};for(let A=0;A{\"use strict\";A.exports=function(A,t,e){this.tagname=A,this.parent=t,this.child={},this.attrsMap={},this.val=e,this.addChild=function(A){Array.isArray(this.child[A.tagname])?this.child[A.tagname].push(A):this.child[A.tagname]=[A]}}},\"./node_modules/fast-xml-parser/src/xmlstr2xmlnode.js\":(A,t,e)=>{\"use strict\";const i=e(\"./node_modules/fast-xml-parser/src/util.js\"),a=e(\"./node_modules/fast-xml-parser/src/util.js\").buildOptions,s=e(\"./node_modules/fast-xml-parser/src/xmlNode.js\"),o=e(\"./node_modules/strnum/strnum.js\");\"<((!\\\\[CDATA\\\\[([\\\\s\\\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\\\/)(NAME)\\\\s*>))([^<]*)\".replace(/NAME/g,i.nameRegexp),!Number.parseInt&&window.parseInt&&(Number.parseInt=window.parseInt),!Number.parseFloat&&window.parseFloat&&(Number.parseFloat=window.parseFloat);const r={attributeNamePrefix:\"@_\",attrNodeName:!1,textNodeName:\"#text\",ignoreAttributes:!0,ignoreNameSpace:!1,allowBooleanAttributes:!1,parseNodeValue:!0,parseAttributeValue:!1,arrayMode:!1,trimValues:!0,cdataTagName:!1,cdataPositionChar:\"\\\\c\",numParseOptions:{hex:!0,leadingZeros:!0},tagValueProcessor:function(A,t){return A},attrValueProcessor:function(A,t){return A},stopNodes:[],alwaysCreateTextNode:!1};t.defaultOptions=r;const g=[\"attributeNamePrefix\",\"attrNodeName\",\"textNodeName\",\"ignoreAttributes\",\"ignoreNameSpace\",\"allowBooleanAttributes\",\"parseNodeValue\",\"parseAttributeValue\",\"arrayMode\",\"trimValues\",\"cdataTagName\",\"cdataPositionChar\",\"tagValueProcessor\",\"attrValueProcessor\",\"parseTrueNumberOnly\",\"numParseOptions\",\"stopNodes\",\"alwaysCreateTextNode\"];function n(A,t,e){return t&&(e.trimValues&&(t=t.trim()),t=l(t=e.tagValueProcessor(t,A),e.parseNodeValue,e.numParseOptions)),t}function I(A,t){if(t.ignoreNameSpace){const t=A.split(\":\"),e=\"/\"===A.charAt(0)?\"/\":\"\";if(\"xmlns\"===t[0])return\"\";2===t.length&&(A=e+t[1])}return A}function l(A,t,e){if(t&&\"string\"==typeof A){const t=A.trim();return\"true\"===t||\"false\"!==t&&o(A,e)}return i.isExist(A)?A:\"\"}t.props=g;const B=new RegExp(\"([^\\\\s=]+)\\\\s*(=\\\\s*(['\\\"])(.*?)\\\\3)?\",\"g\");function C(A,t){if(!t.ignoreAttributes&&\"string\"==typeof A){A=A.replace(/\\r?\\n/g,\" \");const e=i.getAllMatches(A,B),a=e.length,s={};for(let A=0;A\"===t)return{data:i,index:a};\"\\t\"===t&&(t=\" \")}i+=t}}function E(A,t,e,i){const a=A.indexOf(t,e);if(-1===a)throw new Error(i);return a+t.length-1}t.getTraversalObj=function(A,t){A=A.replace(/\\r\\n?/g,\"\\n\"),t=a(t,r,g);const e=new s(\"!xml\");let o=e,I=\"\";for(let e=0;e\",e,\"Closing Tag is not closed.\");let s=A.substring(e+2,a).trim();if(t.ignoreNameSpace){const A=s.indexOf(\":\");-1!==A&&(s=s.substr(A+1))}o&&(o.val?o.val=i.getValue(o.val)+\"\"+n(s,I,t):o.val=n(s,I,t)),t.stopNodes.length&&t.stopNodes.includes(o.tagname)&&(o.child=[],null==o.attrsMap&&(o.attrsMap={}),o.val=A.substr(o.startIndex+1,e-o.startIndex-1)),o=o.parent,I=\"\",e=a}else if(\"?\"===A[e+1])e=E(A,\"?>\",e,\"Pi Tag is not closed.\");else if(\"!--\"===A.substr(e+1,3))e=E(A,\"--\\x3e\",e,\"Comment is not closed.\");else if(\"!D\"===A.substr(e+1,2)){const t=E(A,\">\",e,\"DOCTYPE is not closed.\");e=A.substring(e,t).indexOf(\"[\")>=0?A.indexOf(\"]>\",e)+1:t}else if(\"![\"===A.substr(e+1,2)){const a=E(A,\"]]>\",e,\"CDATA is not closed.\")-2,r=A.substring(e+9,a);if(I&&(o.val=i.getValue(o.val)+\"\"+n(o.tagname,I,t),I=\"\"),t.cdataTagName){const A=new s(t.cdataTagName,o,r);o.addChild(A),o.val=i.getValue(o.val)+t.cdataPositionChar,r&&(A.val=r)}else o.val=(o.val||\"\")+(r||\"\");e=a+2}else{const a=Q(A,e+1);let r=a.data;const g=a.index,l=r.indexOf(\" \");let B=r,E=!0;if(-1!==l&&(B=r.substr(0,l).replace(/\\s\\s*$/,\"\"),r=r.substr(l+1)),t.ignoreNameSpace){const A=B.indexOf(\":\");-1!==A&&(B=B.substr(A+1),E=B!==a.data.substr(A+1))}if(o&&I&&\"!xml\"!==o.tagname&&(o.val=i.getValue(o.val)+\"\"+n(o.tagname,I,t)),r.length>0&&r.lastIndexOf(\"/\")===r.length-1){\"/\"===B[B.length-1]?(B=B.substr(0,B.length-1),r=B):r=r.substr(0,r.length-1);const A=new s(B,o,\"\");B!==r&&(A.attrsMap=C(r,t)),o.addChild(A)}else{const A=new s(B,o);t.stopNodes.length&&t.stopNodes.includes(A.tagname)&&(A.startIndex=g),B!==r&&E&&(A.attrsMap=C(r,t)),o.addChild(A),o=A}I=\"\",e=g}else I+=A[e];return e}},\"./node_modules/pako/index.js\":(A,t,e)=>{\"use strict\";var i={};(0,e(\"./node_modules/pako/lib/utils/common.js\").assign)(i,e(\"./node_modules/pako/lib/deflate.js\"),e(\"./node_modules/pako/lib/inflate.js\"),e(\"./node_modules/pako/lib/zlib/constants.js\")),A.exports=i},\"./node_modules/pako/lib/deflate.js\":(A,t,e)=>{\"use strict\";var i=e(\"./node_modules/pako/lib/zlib/deflate.js\"),a=e(\"./node_modules/pako/lib/utils/common.js\"),s=e(\"./node_modules/pako/lib/utils/strings.js\"),o=e(\"./node_modules/pako/lib/zlib/messages.js\"),r=e(\"./node_modules/pako/lib/zlib/zstream.js\"),g=Object.prototype.toString;function n(A){if(!(this instanceof n))return new n(A);this.options=a.assign({level:-1,method:8,chunkSize:16384,windowBits:15,memLevel:8,strategy:0,to:\"\"},A||{});var t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new r,this.strm.avail_out=0;var e=i.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(0!==e)throw new Error(o[e]);if(t.header&&i.deflateSetHeader(this.strm,t.header),t.dictionary){var I;if(I=\"string\"==typeof t.dictionary?s.string2buf(t.dictionary):\"[object ArrayBuffer]\"===g.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,0!==(e=i.deflateSetDictionary(this.strm,I)))throw new Error(o[e]);this._dict_set=!0}}function I(A,t){var e=new n(t);if(e.push(A,!0),e.err)throw e.msg||o[e.err];return e.result}n.prototype.push=function(A,t){var e,o,r=this.strm,n=this.options.chunkSize;if(this.ended)return!1;o=t===~~t?t:!0===t?4:0,\"string\"==typeof A?r.input=s.string2buf(A):\"[object ArrayBuffer]\"===g.call(A)?r.input=new Uint8Array(A):r.input=A,r.next_in=0,r.avail_in=r.input.length;do{if(0===r.avail_out&&(r.output=new a.Buf8(n),r.next_out=0,r.avail_out=n),1!==(e=i.deflate(r,o))&&0!==e)return this.onEnd(e),this.ended=!0,!1;0!==r.avail_out&&(0!==r.avail_in||4!==o&&2!==o)||(\"string\"===this.options.to?this.onData(s.buf2binstring(a.shrinkBuf(r.output,r.next_out))):this.onData(a.shrinkBuf(r.output,r.next_out)))}while((r.avail_in>0||0===r.avail_out)&&1!==e);return 4===o?(e=i.deflateEnd(this.strm),this.onEnd(e),this.ended=!0,0===e):2!==o||(this.onEnd(0),r.avail_out=0,!0)},n.prototype.onData=function(A){this.chunks.push(A)},n.prototype.onEnd=function(A){0===A&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=a.flattenChunks(this.chunks)),this.chunks=[],this.err=A,this.msg=this.strm.msg},t.Deflate=n,t.deflate=I,t.deflateRaw=function(A,t){return(t=t||{}).raw=!0,I(A,t)},t.gzip=function(A,t){return(t=t||{}).gzip=!0,I(A,t)}},\"./node_modules/pako/lib/inflate.js\":(A,t,e)=>{\"use strict\";var i=e(\"./node_modules/pako/lib/zlib/inflate.js\"),a=e(\"./node_modules/pako/lib/utils/common.js\"),s=e(\"./node_modules/pako/lib/utils/strings.js\"),o=e(\"./node_modules/pako/lib/zlib/constants.js\"),r=e(\"./node_modules/pako/lib/zlib/messages.js\"),g=e(\"./node_modules/pako/lib/zlib/zstream.js\"),n=e(\"./node_modules/pako/lib/zlib/gzheader.js\"),I=Object.prototype.toString;function l(A){if(!(this instanceof l))return new l(A);this.options=a.assign({chunkSize:16384,windowBits:0,to:\"\"},A||{});var t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||A&&A.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new g,this.strm.avail_out=0;var e=i.inflateInit2(this.strm,t.windowBits);if(e!==o.Z_OK)throw new Error(r[e]);if(this.header=new n,i.inflateGetHeader(this.strm,this.header),t.dictionary&&(\"string\"==typeof t.dictionary?t.dictionary=s.string2buf(t.dictionary):\"[object ArrayBuffer]\"===I.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(e=i.inflateSetDictionary(this.strm,t.dictionary))!==o.Z_OK))throw new Error(r[e])}function B(A,t){var e=new l(t);if(e.push(A,!0),e.err)throw e.msg||r[e.err];return e.result}l.prototype.push=function(A,t){var e,r,g,n,l,B=this.strm,C=this.options.chunkSize,Q=this.options.dictionary,E=!1;if(this.ended)return!1;r=t===~~t?t:!0===t?o.Z_FINISH:o.Z_NO_FLUSH,\"string\"==typeof A?B.input=s.binstring2buf(A):\"[object ArrayBuffer]\"===I.call(A)?B.input=new Uint8Array(A):B.input=A,B.next_in=0,B.avail_in=B.input.length;do{if(0===B.avail_out&&(B.output=new a.Buf8(C),B.next_out=0,B.avail_out=C),(e=i.inflate(B,o.Z_NO_FLUSH))===o.Z_NEED_DICT&&Q&&(e=i.inflateSetDictionary(this.strm,Q)),e===o.Z_BUF_ERROR&&!0===E&&(e=o.Z_OK,E=!1),e!==o.Z_STREAM_END&&e!==o.Z_OK)return this.onEnd(e),this.ended=!0,!1;B.next_out&&(0!==B.avail_out&&e!==o.Z_STREAM_END&&(0!==B.avail_in||r!==o.Z_FINISH&&r!==o.Z_SYNC_FLUSH)||(\"string\"===this.options.to?(g=s.utf8border(B.output,B.next_out),n=B.next_out-g,l=s.buf2string(B.output,g),B.next_out=n,B.avail_out=C-n,n&&a.arraySet(B.output,B.output,g,n,0),this.onData(l)):this.onData(a.shrinkBuf(B.output,B.next_out)))),0===B.avail_in&&0===B.avail_out&&(E=!0)}while((B.avail_in>0||0===B.avail_out)&&e!==o.Z_STREAM_END);return e===o.Z_STREAM_END&&(r=o.Z_FINISH),r===o.Z_FINISH?(e=i.inflateEnd(this.strm),this.onEnd(e),this.ended=!0,e===o.Z_OK):r!==o.Z_SYNC_FLUSH||(this.onEnd(o.Z_OK),B.avail_out=0,!0)},l.prototype.onData=function(A){this.chunks.push(A)},l.prototype.onEnd=function(A){A===o.Z_OK&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=a.flattenChunks(this.chunks)),this.chunks=[],this.err=A,this.msg=this.strm.msg},t.Inflate=l,t.inflate=B,t.inflateRaw=function(A,t){return(t=t||{}).raw=!0,B(A,t)},t.ungzip=B},\"./node_modules/pako/lib/utils/common.js\":(A,t)=>{\"use strict\";var e=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;function i(A,t){return Object.prototype.hasOwnProperty.call(A,t)}t.assign=function(A){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var e=t.shift();if(e){if(\"object\"!=typeof e)throw new TypeError(e+\"must be non-object\");for(var a in e)i(e,a)&&(A[a]=e[a])}}return A},t.shrinkBuf=function(A,t){return A.length===t?A:A.subarray?A.subarray(0,t):(A.length=t,A)};var a={arraySet:function(A,t,e,i,a){if(t.subarray&&A.subarray)A.set(t.subarray(e,e+i),a);else for(var s=0;s{\"use strict\";var i=e(\"./node_modules/pako/lib/utils/common.js\"),a=!0,s=!0;try{String.fromCharCode.apply(null,[0])}catch(A){a=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(A){s=!1}for(var o=new i.Buf8(256),r=0;r<256;r++)o[r]=r>=252?6:r>=248?5:r>=240?4:r>=224?3:r>=192?2:1;function g(A,t){if(t<65534&&(A.subarray&&s||!A.subarray&&a))return String.fromCharCode.apply(null,i.shrinkBuf(A,t));for(var e=\"\",o=0;o>>6,t[o++]=128|63&e):e<65536?(t[o++]=224|e>>>12,t[o++]=128|e>>>6&63,t[o++]=128|63&e):(t[o++]=240|e>>>18,t[o++]=128|e>>>12&63,t[o++]=128|e>>>6&63,t[o++]=128|63&e);return t},t.buf2binstring=function(A){return g(A,A.length)},t.binstring2buf=function(A){for(var t=new i.Buf8(A.length),e=0,a=t.length;e4)n[i++]=65533,e+=s-1;else{for(a&=2===s?31:3===s?15:7;s>1&&e1?n[i++]=65533:a<65536?n[i++]=a:(a-=65536,n[i++]=55296|a>>10&1023,n[i++]=56320|1023&a)}return g(n,i)},t.utf8border=function(A,t){var e;for((t=t||A.length)>A.length&&(t=A.length),e=t-1;e>=0&&128==(192&A[e]);)e--;return e<0||0===e?t:e+o[A[e]]>t?e:t}},\"./node_modules/pako/lib/zlib/adler32.js\":A=>{\"use strict\";A.exports=function(A,t,e,i){for(var a=65535&A|0,s=A>>>16&65535|0,o=0;0!==e;){e-=o=e>2e3?2e3:e;do{s=s+(a=a+t[i++]|0)|0}while(--o);a%=65521,s%=65521}return a|s<<16|0}},\"./node_modules/pako/lib/zlib/constants.js\":A=>{\"use strict\";A.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},\"./node_modules/pako/lib/zlib/crc32.js\":A=>{\"use strict\";var t=function(){for(var A,t=[],e=0;e<256;e++){A=e;for(var i=0;i<8;i++)A=1&A?3988292384^A>>>1:A>>>1;t[e]=A}return t}();A.exports=function(A,e,i,a){var s=t,o=a+i;A^=-1;for(var r=a;r>>8^s[255&(A^e[r])];return-1^A}},\"./node_modules/pako/lib/zlib/deflate.js\":(A,t,e)=>{\"use strict\";var i,a=e(\"./node_modules/pako/lib/utils/common.js\"),s=e(\"./node_modules/pako/lib/zlib/trees.js\"),o=e(\"./node_modules/pako/lib/zlib/adler32.js\"),r=e(\"./node_modules/pako/lib/zlib/crc32.js\"),g=e(\"./node_modules/pako/lib/zlib/messages.js\"),n=-2,I=258,l=262,B=103,C=113,Q=666;function E(A,t){return A.msg=g[t],t}function d(A){return(A<<1)-(A>4?9:0)}function h(A){for(var t=A.length;--t>=0;)A[t]=0}function c(A){var t=A.state,e=t.pending;e>A.avail_out&&(e=A.avail_out),0!==e&&(a.arraySet(A.output,t.pending_buf,t.pending_out,e,A.next_out),A.next_out+=e,t.pending_out+=e,A.total_out+=e,A.avail_out-=e,t.pending-=e,0===t.pending&&(t.pending_out=0))}function u(A,t){s._tr_flush_block(A,A.block_start>=0?A.block_start:-1,A.strstart-A.block_start,t),A.block_start=A.strstart,c(A.strm)}function f(A,t){A.pending_buf[A.pending++]=t}function p(A,t){A.pending_buf[A.pending++]=t>>>8&255,A.pending_buf[A.pending++]=255&t}function w(A,t){var e,i,a=A.max_chain_length,s=A.strstart,o=A.prev_length,r=A.nice_match,g=A.strstart>A.w_size-l?A.strstart-(A.w_size-l):0,n=A.window,B=A.w_mask,C=A.prev,Q=A.strstart+I,E=n[s+o-1],d=n[s+o];A.prev_length>=A.good_match&&(a>>=2),r>A.lookahead&&(r=A.lookahead);do{if(n[(e=t)+o]===d&&n[e+o-1]===E&&n[e]===n[s]&&n[++e]===n[s+1]){s+=2,e++;do{}while(n[++s]===n[++e]&&n[++s]===n[++e]&&n[++s]===n[++e]&&n[++s]===n[++e]&&n[++s]===n[++e]&&n[++s]===n[++e]&&n[++s]===n[++e]&&n[++s]===n[++e]&&so){if(A.match_start=t,o=i,i>=r)break;E=n[s+o-1],d=n[s+o]}}}while((t=C[t&B])>g&&0!=--a);return o<=A.lookahead?o:A.lookahead}function m(A){var t,e,i,s,g,n,I,B,C,Q,E=A.w_size;do{if(s=A.window_size-A.lookahead-A.strstart,A.strstart>=E+(E-l)){a.arraySet(A.window,A.window,E,E,0),A.match_start-=E,A.strstart-=E,A.block_start-=E,t=e=A.hash_size;do{i=A.head[--t],A.head[t]=i>=E?i-E:0}while(--e);t=e=E;do{i=A.prev[--t],A.prev[t]=i>=E?i-E:0}while(--e);s+=E}if(0===A.strm.avail_in)break;if(n=A.strm,I=A.window,B=A.strstart+A.lookahead,C=s,Q=void 0,(Q=n.avail_in)>C&&(Q=C),e=0===Q?0:(n.avail_in-=Q,a.arraySet(I,n.input,n.next_in,Q,B),1===n.state.wrap?n.adler=o(n.adler,I,Q,B):2===n.state.wrap&&(n.adler=r(n.adler,I,Q,B)),n.next_in+=Q,n.total_in+=Q,Q),A.lookahead+=e,A.lookahead+A.insert>=3)for(g=A.strstart-A.insert,A.ins_h=A.window[g],A.ins_h=(A.ins_h<=3&&(A.ins_h=(A.ins_h<=3)if(i=s._tr_tally(A,A.strstart-A.match_start,A.match_length-3),A.lookahead-=A.match_length,A.match_length<=A.max_lazy_match&&A.lookahead>=3){A.match_length--;do{A.strstart++,A.ins_h=(A.ins_h<=3&&(A.ins_h=(A.ins_h<4096)&&(A.match_length=2)),A.prev_length>=3&&A.match_length<=A.prev_length){a=A.strstart+A.lookahead-3,i=s._tr_tally(A,A.strstart-1-A.prev_match,A.prev_length-3),A.lookahead-=A.prev_length-1,A.prev_length-=2;do{++A.strstart<=a&&(A.ins_h=(A.ins_h<15&&(r=2,i-=16),s<1||s>9||8!==e||i<8||i>15||t<0||t>9||o<0||o>4)return E(A,n);8===i&&(i=9);var g=new b;return A.state=g,g.strm=A,g.wrap=r,g.gzhead=null,g.w_bits=i,g.w_size=1<A.pending_buf_size-5&&(e=A.pending_buf_size-5);;){if(A.lookahead<=1){if(m(A),0===A.lookahead&&0===t)return 1;if(0===A.lookahead)break}A.strstart+=A.lookahead,A.lookahead=0;var i=A.block_start+e;if((0===A.strstart||A.strstart>=i)&&(A.lookahead=A.strstart-i,A.strstart=i,u(A,!1),0===A.strm.avail_out))return 1;if(A.strstart-A.block_start>=A.w_size-l&&(u(A,!1),0===A.strm.avail_out))return 1}return A.insert=0,4===t?(u(A,!0),0===A.strm.avail_out?3:4):(A.strstart>A.block_start&&(u(A,!1),A.strm.avail_out),1)})),new _(4,4,8,4,y),new _(4,5,16,8,y),new _(4,6,32,32,y),new _(4,4,16,16,D),new _(8,16,32,32,D),new _(8,16,128,128,D),new _(8,32,128,256,D),new _(32,128,258,1024,D),new _(32,258,258,4096,D)],t.deflateInit=function(A,t){return F(A,t,8,15,8,0)},t.deflateInit2=F,t.deflateReset=v,t.deflateResetKeep=k,t.deflateSetHeader=function(A,t){return A&&A.state?2!==A.state.wrap?n:(A.state.gzhead=t,0):n},t.deflate=function(A,t){var e,a,o,g;if(!A||!A.state||t>5||t<0)return A?E(A,n):n;if(a=A.state,!A.output||!A.input&&0!==A.avail_in||a.status===Q&&4!==t)return E(A,0===A.avail_out?-5:n);if(a.strm=A,e=a.last_flush,a.last_flush=t,42===a.status)if(2===a.wrap)A.adler=0,f(a,31),f(a,139),f(a,8),a.gzhead?(f(a,(a.gzhead.text?1:0)+(a.gzhead.hcrc?2:0)+(a.gzhead.extra?4:0)+(a.gzhead.name?8:0)+(a.gzhead.comment?16:0)),f(a,255&a.gzhead.time),f(a,a.gzhead.time>>8&255),f(a,a.gzhead.time>>16&255),f(a,a.gzhead.time>>24&255),f(a,9===a.level?2:a.strategy>=2||a.level<2?4:0),f(a,255&a.gzhead.os),a.gzhead.extra&&a.gzhead.extra.length&&(f(a,255&a.gzhead.extra.length),f(a,a.gzhead.extra.length>>8&255)),a.gzhead.hcrc&&(A.adler=r(A.adler,a.pending_buf,a.pending,0)),a.gzindex=0,a.status=69):(f(a,0),f(a,0),f(a,0),f(a,0),f(a,0),f(a,9===a.level?2:a.strategy>=2||a.level<2?4:0),f(a,3),a.status=C);else{var l=8+(a.w_bits-8<<4)<<8;l|=(a.strategy>=2||a.level<2?0:a.level<6?1:6===a.level?2:3)<<6,0!==a.strstart&&(l|=32),l+=31-l%31,a.status=C,p(a,l),0!==a.strstart&&(p(a,A.adler>>>16),p(a,65535&A.adler)),A.adler=1}if(69===a.status)if(a.gzhead.extra){for(o=a.pending;a.gzindex<(65535&a.gzhead.extra.length)&&(a.pending!==a.pending_buf_size||(a.gzhead.hcrc&&a.pending>o&&(A.adler=r(A.adler,a.pending_buf,a.pending-o,o)),c(A),o=a.pending,a.pending!==a.pending_buf_size));)f(a,255&a.gzhead.extra[a.gzindex]),a.gzindex++;a.gzhead.hcrc&&a.pending>o&&(A.adler=r(A.adler,a.pending_buf,a.pending-o,o)),a.gzindex===a.gzhead.extra.length&&(a.gzindex=0,a.status=73)}else a.status=73;if(73===a.status)if(a.gzhead.name){o=a.pending;do{if(a.pending===a.pending_buf_size&&(a.gzhead.hcrc&&a.pending>o&&(A.adler=r(A.adler,a.pending_buf,a.pending-o,o)),c(A),o=a.pending,a.pending===a.pending_buf_size)){g=1;break}g=a.gzindexo&&(A.adler=r(A.adler,a.pending_buf,a.pending-o,o)),0===g&&(a.gzindex=0,a.status=91)}else a.status=91;if(91===a.status)if(a.gzhead.comment){o=a.pending;do{if(a.pending===a.pending_buf_size&&(a.gzhead.hcrc&&a.pending>o&&(A.adler=r(A.adler,a.pending_buf,a.pending-o,o)),c(A),o=a.pending,a.pending===a.pending_buf_size)){g=1;break}g=a.gzindexo&&(A.adler=r(A.adler,a.pending_buf,a.pending-o,o)),0===g&&(a.status=B)}else a.status=B;if(a.status===B&&(a.gzhead.hcrc?(a.pending+2>a.pending_buf_size&&c(A),a.pending+2<=a.pending_buf_size&&(f(a,255&A.adler),f(a,A.adler>>8&255),A.adler=0,a.status=C)):a.status=C),0!==a.pending){if(c(A),0===A.avail_out)return a.last_flush=-1,0}else if(0===A.avail_in&&d(t)<=d(e)&&4!==t)return E(A,-5);if(a.status===Q&&0!==A.avail_in)return E(A,-5);if(0!==A.avail_in||0!==a.lookahead||0!==t&&a.status!==Q){var w=2===a.strategy?function(A,t){for(var e;;){if(0===A.lookahead&&(m(A),0===A.lookahead)){if(0===t)return 1;break}if(A.match_length=0,e=s._tr_tally(A,0,A.window[A.strstart]),A.lookahead--,A.strstart++,e&&(u(A,!1),0===A.strm.avail_out))return 1}return A.insert=0,4===t?(u(A,!0),0===A.strm.avail_out?3:4):A.last_lit&&(u(A,!1),0===A.strm.avail_out)?1:2}(a,t):3===a.strategy?function(A,t){for(var e,i,a,o,r=A.window;;){if(A.lookahead<=I){if(m(A),A.lookahead<=I&&0===t)return 1;if(0===A.lookahead)break}if(A.match_length=0,A.lookahead>=3&&A.strstart>0&&(i=r[a=A.strstart-1])===r[++a]&&i===r[++a]&&i===r[++a]){o=A.strstart+I;do{}while(i===r[++a]&&i===r[++a]&&i===r[++a]&&i===r[++a]&&i===r[++a]&&i===r[++a]&&i===r[++a]&&i===r[++a]&&aA.lookahead&&(A.match_length=A.lookahead)}if(A.match_length>=3?(e=s._tr_tally(A,1,A.match_length-3),A.lookahead-=A.match_length,A.strstart+=A.match_length,A.match_length=0):(e=s._tr_tally(A,0,A.window[A.strstart]),A.lookahead--,A.strstart++),e&&(u(A,!1),0===A.strm.avail_out))return 1}return A.insert=0,4===t?(u(A,!0),0===A.strm.avail_out?3:4):A.last_lit&&(u(A,!1),0===A.strm.avail_out)?1:2}(a,t):i[a.level].func(a,t);if(3!==w&&4!==w||(a.status=Q),1===w||3===w)return 0===A.avail_out&&(a.last_flush=-1),0;if(2===w&&(1===t?s._tr_align(a):5!==t&&(s._tr_stored_block(a,0,0,!1),3===t&&(h(a.head),0===a.lookahead&&(a.strstart=0,a.block_start=0,a.insert=0))),c(A),0===A.avail_out))return a.last_flush=-1,0}return 4!==t?0:a.wrap<=0?1:(2===a.wrap?(f(a,255&A.adler),f(a,A.adler>>8&255),f(a,A.adler>>16&255),f(a,A.adler>>24&255),f(a,255&A.total_in),f(a,A.total_in>>8&255),f(a,A.total_in>>16&255),f(a,A.total_in>>24&255)):(p(a,A.adler>>>16),p(a,65535&A.adler)),c(A),a.wrap>0&&(a.wrap=-a.wrap),0!==a.pending?0:1)},t.deflateEnd=function(A){var t;return A&&A.state?42!==(t=A.state.status)&&69!==t&&73!==t&&91!==t&&t!==B&&t!==C&&t!==Q?E(A,n):(A.state=null,t===C?E(A,-3):0):n},t.deflateSetDictionary=function(A,t){var e,i,s,r,g,I,l,B,C=t.length;if(!A||!A.state)return n;if(2===(r=(e=A.state).wrap)||1===r&&42!==e.status||e.lookahead)return n;for(1===r&&(A.adler=o(A.adler,t,C,0)),e.wrap=0,C>=e.w_size&&(0===r&&(h(e.head),e.strstart=0,e.block_start=0,e.insert=0),B=new a.Buf8(e.w_size),a.arraySet(B,t,C-e.w_size,e.w_size,0),t=B,C=e.w_size),g=A.avail_in,I=A.next_in,l=A.input,A.avail_in=C,A.next_in=0,A.input=t,m(e);e.lookahead>=3;){i=e.strstart,s=e.lookahead-2;do{e.ins_h=(e.ins_h<{\"use strict\";A.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1}},\"./node_modules/pako/lib/zlib/inffast.js\":A=>{\"use strict\";A.exports=function(A,t){var e,i,a,s,o,r,g,n,I,l,B,C,Q,E,d,h,c,u,f,p,w,m,y,D,_;e=A.state,i=A.next_in,D=A.input,a=i+(A.avail_in-5),s=A.next_out,_=A.output,o=s-(t-A.avail_out),r=s+(A.avail_out-257),g=e.dmax,n=e.wsize,I=e.whave,l=e.wnext,B=e.window,C=e.hold,Q=e.bits,E=e.lencode,d=e.distcode,h=(1<>>=f=u>>>24,Q-=f,0==(f=u>>>16&255))_[s++]=65535&u;else{if(!(16&f)){if(0==(64&f)){u=E[(65535&u)+(C&(1<>>=f,Q-=f),Q<15&&(C+=D[i++]<>>=f=u>>>24,Q-=f,!(16&(f=u>>>16&255))){if(0==(64&f)){u=d[(65535&u)+(C&(1<g){A.msg=\"invalid distance too far back\",e.mode=30;break A}if(C>>>=f,Q-=f,w>(f=s-o)){if((f=w-f)>I&&e.sane){A.msg=\"invalid distance too far back\",e.mode=30;break A}if(m=0,y=B,0===l){if(m+=n-f,f2;)_[s++]=y[m++],_[s++]=y[m++],_[s++]=y[m++],p-=3;p&&(_[s++]=y[m++],p>1&&(_[s++]=y[m++]))}else{m=s-w;do{_[s++]=_[m++],_[s++]=_[m++],_[s++]=_[m++],p-=3}while(p>2);p&&(_[s++]=_[m++],p>1&&(_[s++]=_[m++]))}break}}break}}while(i>3,C&=(1<<(Q-=p<<3))-1,A.next_in=i,A.next_out=s,A.avail_in=i{\"use strict\";var i=e(\"./node_modules/pako/lib/utils/common.js\"),a=e(\"./node_modules/pako/lib/zlib/adler32.js\"),s=e(\"./node_modules/pako/lib/zlib/crc32.js\"),o=e(\"./node_modules/pako/lib/zlib/inffast.js\"),r=e(\"./node_modules/pako/lib/zlib/inftrees.js\"),g=-2,n=12,I=30;function l(A){return(A>>>24&255)+(A>>>8&65280)+((65280&A)<<8)+((255&A)<<24)}function B(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new i.Buf16(320),this.work=new i.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function C(A){var t;return A&&A.state?(t=A.state,A.total_in=A.total_out=t.total=0,A.msg=\"\",t.wrap&&(A.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new i.Buf32(852),t.distcode=t.distdyn=new i.Buf32(592),t.sane=1,t.back=-1,0):g}function Q(A){var t;return A&&A.state?((t=A.state).wsize=0,t.whave=0,t.wnext=0,C(A)):g}function E(A,t){var e,i;return A&&A.state?(i=A.state,t<0?(e=0,t=-t):(e=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?g:(null!==i.window&&i.wbits!==t&&(i.window=null),i.wrap=e,i.wbits=t,Q(A))):g}function d(A,t){var e,i;return A?(i=new B,A.state=i,i.window=null,0!==(e=E(A,t))&&(A.state=null),e):g}var h,c,u=!0;function f(A){if(u){var t;for(h=new i.Buf32(512),c=new i.Buf32(32),t=0;t<144;)A.lens[t++]=8;for(;t<256;)A.lens[t++]=9;for(;t<280;)A.lens[t++]=7;for(;t<288;)A.lens[t++]=8;for(r(1,A.lens,0,288,h,0,A.work,{bits:9}),t=0;t<32;)A.lens[t++]=5;r(2,A.lens,0,32,c,0,A.work,{bits:5}),u=!1}A.lencode=h,A.lenbits=9,A.distcode=c,A.distbits=5}function p(A,t,e,a){var s,o=A.state;return null===o.window&&(o.wsize=1<=o.wsize?(i.arraySet(o.window,t,e-o.wsize,o.wsize,0),o.wnext=0,o.whave=o.wsize):((s=o.wsize-o.wnext)>a&&(s=a),i.arraySet(o.window,t,e-a,s,o.wnext),(a-=s)?(i.arraySet(o.window,t,e-a,a,0),o.wnext=a,o.whave=o.wsize):(o.wnext+=s,o.wnext===o.wsize&&(o.wnext=0),o.whave>>8&255,e.check=s(e.check,U,2,0),c=0,u=0,e.mode=2;break}if(e.flags=0,e.head&&(e.head.done=!1),!(1&e.wrap)||(((255&c)<<8)+(c>>8))%31){A.msg=\"incorrect header check\",e.mode=I;break}if(8!=(15&c)){A.msg=\"unknown compression method\",e.mode=I;break}if(u-=4,N=8+(15&(c>>>=4)),0===e.wbits)e.wbits=N;else if(N>e.wbits){A.msg=\"invalid window size\",e.mode=I;break}e.dmax=1<>8&1),512&e.flags&&(U[0]=255&c,U[1]=c>>>8&255,e.check=s(e.check,U,2,0)),c=0,u=0,e.mode=3;case 3:for(;u<32;){if(0===d)break A;d--,c+=B[Q++]<>>8&255,U[2]=c>>>16&255,U[3]=c>>>24&255,e.check=s(e.check,U,4,0)),c=0,u=0,e.mode=4;case 4:for(;u<16;){if(0===d)break A;d--,c+=B[Q++]<>8),512&e.flags&&(U[0]=255&c,U[1]=c>>>8&255,e.check=s(e.check,U,2,0)),c=0,u=0,e.mode=5;case 5:if(1024&e.flags){for(;u<16;){if(0===d)break A;d--,c+=B[Q++]<>>8&255,e.check=s(e.check,U,2,0)),c=0,u=0}else e.head&&(e.head.extra=null);e.mode=6;case 6:if(1024&e.flags&&((y=e.length)>d&&(y=d),y&&(e.head&&(N=e.head.extra_len-e.length,e.head.extra||(e.head.extra=new Array(e.head.extra_len)),i.arraySet(e.head.extra,B,Q,y,N)),512&e.flags&&(e.check=s(e.check,B,y,Q)),d-=y,Q+=y,e.length-=y),e.length))break A;e.length=0,e.mode=7;case 7:if(2048&e.flags){if(0===d)break A;y=0;do{N=B[Q+y++],e.head&&N&&e.length<65536&&(e.head.name+=String.fromCharCode(N))}while(N&&y>9&1,e.head.done=!0),A.adler=e.check=0,e.mode=n;break;case 10:for(;u<32;){if(0===d)break A;d--,c+=B[Q++]<>>=7&u,u-=7&u,e.mode=27;break}for(;u<3;){if(0===d)break A;d--,c+=B[Q++]<>>=1)){case 0:e.mode=14;break;case 1:if(f(e),e.mode=20,6===t){c>>>=2,u-=2;break A}break;case 2:e.mode=17;break;case 3:A.msg=\"invalid block type\",e.mode=I}c>>>=2,u-=2;break;case 14:for(c>>>=7&u,u-=7&u;u<32;){if(0===d)break A;d--,c+=B[Q++]<>>16^65535)){A.msg=\"invalid stored block lengths\",e.mode=I;break}if(e.length=65535&c,c=0,u=0,e.mode=15,6===t)break A;case 15:e.mode=16;case 16:if(y=e.length){if(y>d&&(y=d),y>h&&(y=h),0===y)break A;i.arraySet(C,B,Q,y,E),d-=y,Q+=y,h-=y,E+=y,e.length-=y;break}e.mode=n;break;case 17:for(;u<14;){if(0===d)break A;d--,c+=B[Q++]<>>=5,u-=5,e.ndist=1+(31&c),c>>>=5,u-=5,e.ncode=4+(15&c),c>>>=4,u-=4,e.nlen>286||e.ndist>30){A.msg=\"too many length or distance symbols\",e.mode=I;break}e.have=0,e.mode=18;case 18:for(;e.have>>=3,u-=3}for(;e.have<19;)e.lens[J[e.have++]]=0;if(e.lencode=e.lendyn,e.lenbits=7,L={bits:e.lenbits},S=r(0,e.lens,0,19,e.lencode,0,e.work,L),e.lenbits=L.bits,S){A.msg=\"invalid code lengths set\",e.mode=I;break}e.have=0,e.mode=19;case 19:for(;e.have>>16&255,v=65535&M,!((b=M>>>24)<=u);){if(0===d)break A;d--,c+=B[Q++]<>>=b,u-=b,e.lens[e.have++]=v;else{if(16===v){for(R=b+2;u>>=b,u-=b,0===e.have){A.msg=\"invalid bit length repeat\",e.mode=I;break}N=e.lens[e.have-1],y=3+(3&c),c>>>=2,u-=2}else if(17===v){for(R=b+3;u>>=b)),c>>>=3,u-=3}else{for(R=b+7;u>>=b)),c>>>=7,u-=7}if(e.have+y>e.nlen+e.ndist){A.msg=\"invalid bit length repeat\",e.mode=I;break}for(;y--;)e.lens[e.have++]=N}}if(e.mode===I)break;if(0===e.lens[256]){A.msg=\"invalid code -- missing end-of-block\",e.mode=I;break}if(e.lenbits=9,L={bits:e.lenbits},S=r(1,e.lens,0,e.nlen,e.lencode,0,e.work,L),e.lenbits=L.bits,S){A.msg=\"invalid literal/lengths set\",e.mode=I;break}if(e.distbits=6,e.distcode=e.distdyn,L={bits:e.distbits},S=r(2,e.lens,e.nlen,e.ndist,e.distcode,0,e.work,L),e.distbits=L.bits,S){A.msg=\"invalid distances set\",e.mode=I;break}if(e.mode=20,6===t)break A;case 20:e.mode=21;case 21:if(d>=6&&h>=258){A.next_out=E,A.avail_out=h,A.next_in=Q,A.avail_in=d,e.hold=c,e.bits=u,o(A,m),E=A.next_out,C=A.output,h=A.avail_out,Q=A.next_in,B=A.input,d=A.avail_in,c=e.hold,u=e.bits,e.mode===n&&(e.back=-1);break}for(e.back=0;k=(M=e.lencode[c&(1<>>16&255,v=65535&M,!((b=M>>>24)<=u);){if(0===d)break A;d--,c+=B[Q++]<>F)])>>>16&255,v=65535&M,!(F+(b=M>>>24)<=u);){if(0===d)break A;d--,c+=B[Q++]<>>=F,u-=F,e.back+=F}if(c>>>=b,u-=b,e.back+=b,e.length=v,0===k){e.mode=26;break}if(32&k){e.back=-1,e.mode=n;break}if(64&k){A.msg=\"invalid literal/length code\",e.mode=I;break}e.extra=15&k,e.mode=22;case 22:if(e.extra){for(R=e.extra;u>>=e.extra,u-=e.extra,e.back+=e.extra}e.was=e.length,e.mode=23;case 23:for(;k=(M=e.distcode[c&(1<>>16&255,v=65535&M,!((b=M>>>24)<=u);){if(0===d)break A;d--,c+=B[Q++]<>F)])>>>16&255,v=65535&M,!(F+(b=M>>>24)<=u);){if(0===d)break A;d--,c+=B[Q++]<>>=F,u-=F,e.back+=F}if(c>>>=b,u-=b,e.back+=b,64&k){A.msg=\"invalid distance code\",e.mode=I;break}e.offset=v,e.extra=15&k,e.mode=24;case 24:if(e.extra){for(R=e.extra;u>>=e.extra,u-=e.extra,e.back+=e.extra}if(e.offset>e.dmax){A.msg=\"invalid distance too far back\",e.mode=I;break}e.mode=25;case 25:if(0===h)break A;if(y=m-h,e.offset>y){if((y=e.offset-y)>e.whave&&e.sane){A.msg=\"invalid distance too far back\",e.mode=I;break}y>e.wnext?(y-=e.wnext,D=e.wsize-y):D=e.wnext-y,y>e.length&&(y=e.length),_=e.window}else _=C,D=E-e.offset,y=e.length;y>h&&(y=h),h-=y,e.length-=y;do{C[E++]=_[D++]}while(--y);0===e.length&&(e.mode=21);break;case 26:if(0===h)break A;C[E++]=e.length,h--,e.mode=21;break;case 27:if(e.wrap){for(;u<32;){if(0===d)break A;d--,c|=B[Q++]<{\"use strict\";var i=e(\"./node_modules/pako/lib/utils/common.js\"),a=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],s=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],o=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],r=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];A.exports=function(A,t,e,g,n,I,l,B){var C,Q,E,d,h,c,u,f,p,w=B.bits,m=0,y=0,D=0,_=0,b=0,k=0,v=0,F=0,G=0,x=0,N=null,S=0,L=new i.Buf16(16),R=new i.Buf16(16),M=null,U=0;for(m=0;m<=15;m++)L[m]=0;for(y=0;y=1&&0===L[_];_--);if(b>_&&(b=_),0===_)return n[I++]=20971520,n[I++]=20971520,B.bits=1,0;for(D=1;D<_&&0===L[D];D++);for(b0&&(0===A||1!==_))return-1;for(R[1]=0,m=1;m<15;m++)R[m+1]=R[m]+L[m];for(y=0;y852||2===A&&G>592)return 1;for(;;){u=m-v,l[y]c?(f=M[U+l[y]],p=N[S+l[y]]):(f=96,p=0),C=1<>v)+(Q-=C)]=u<<24|f<<16|p|0}while(0!==Q);for(C=1<>=1;if(0!==C?(x&=C-1,x+=C):x=0,y++,0==--L[m]){if(m===_)break;m=t[e+l[y]]}if(m>b&&(x&d)!==E){for(0===v&&(v=b),h+=D,F=1<<(k=m-v);k+v<_&&!((F-=L[k+v])<=0);)k++,F<<=1;if(G+=1<852||2===A&&G>592)return 1;n[E=x&d]=b<<24|k<<16|h-I|0}}return 0!==x&&(n[h+x]=m-v<<24|64<<16|0),B.bits=b,0}},\"./node_modules/pako/lib/zlib/messages.js\":A=>{\"use strict\";A.exports={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"}},\"./node_modules/pako/lib/zlib/trees.js\":(A,t,e)=>{\"use strict\";var i=e(\"./node_modules/pako/lib/utils/common.js\");function a(A){for(var t=A.length;--t>=0;)A[t]=0}var s=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],o=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],r=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],g=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],n=new Array(576);a(n);var I=new Array(60);a(I);var l=new Array(512);a(l);var B=new Array(256);a(B);var C=new Array(29);a(C);var Q,E,d,h=new Array(30);function c(A,t,e,i,a){this.static_tree=A,this.extra_bits=t,this.extra_base=e,this.elems=i,this.max_length=a,this.has_stree=A&&A.length}function u(A,t){this.dyn_tree=A,this.max_code=0,this.stat_desc=t}function f(A){return A<256?l[A]:l[256+(A>>>7)]}function p(A,t){A.pending_buf[A.pending++]=255&t,A.pending_buf[A.pending++]=t>>>8&255}function w(A,t,e){A.bi_valid>16-e?(A.bi_buf|=t<>16-A.bi_valid,A.bi_valid+=e-16):(A.bi_buf|=t<>>=1,e<<=1}while(--t>0);return e>>>1}function D(A,t,e){var i,a,s=new Array(16),o=0;for(i=1;i<=15;i++)s[i]=o=o+e[i-1]<<1;for(a=0;a<=t;a++){var r=A[2*a+1];0!==r&&(A[2*a]=y(s[r]++,r))}}function _(A){var t;for(t=0;t<286;t++)A.dyn_ltree[2*t]=0;for(t=0;t<30;t++)A.dyn_dtree[2*t]=0;for(t=0;t<19;t++)A.bl_tree[2*t]=0;A.dyn_ltree[512]=1,A.opt_len=A.static_len=0,A.last_lit=A.matches=0}function b(A){A.bi_valid>8?p(A,A.bi_buf):A.bi_valid>0&&(A.pending_buf[A.pending++]=A.bi_buf),A.bi_buf=0,A.bi_valid=0}function k(A,t,e,i){var a=2*t,s=2*e;return A[a]>1;e>=1;e--)v(A,s,e);a=g;do{e=A.heap[1],A.heap[1]=A.heap[A.heap_len--],v(A,s,1),i=A.heap[1],A.heap[--A.heap_max]=e,A.heap[--A.heap_max]=i,s[2*a]=s[2*e]+s[2*i],A.depth[a]=(A.depth[e]>=A.depth[i]?A.depth[e]:A.depth[i])+1,s[2*e+1]=s[2*i+1]=a,A.heap[1]=a++,v(A,s,1)}while(A.heap_len>=2);A.heap[--A.heap_max]=A.heap[1],function(A,t){var e,i,a,s,o,r,g=t.dyn_tree,n=t.max_code,I=t.stat_desc.static_tree,l=t.stat_desc.has_stree,B=t.stat_desc.extra_bits,C=t.stat_desc.extra_base,Q=t.stat_desc.max_length,E=0;for(s=0;s<=15;s++)A.bl_count[s]=0;for(g[2*A.heap[A.heap_max]+1]=0,e=A.heap_max+1;e<573;e++)(s=g[2*g[2*(i=A.heap[e])+1]+1]+1)>Q&&(s=Q,E++),g[2*i+1]=s,i>n||(A.bl_count[s]++,o=0,i>=C&&(o=B[i-C]),r=g[2*i],A.opt_len+=r*(s+o),l&&(A.static_len+=r*(I[2*i+1]+o)));if(0!==E){do{for(s=Q-1;0===A.bl_count[s];)s--;A.bl_count[s]--,A.bl_count[s+1]+=2,A.bl_count[Q]--,E-=2}while(E>0);for(s=Q;0!==s;s--)for(i=A.bl_count[s];0!==i;)(a=A.heap[--e])>n||(g[2*a+1]!==s&&(A.opt_len+=(s-g[2*a+1])*g[2*a],g[2*a+1]=s),i--)}}(A,t),D(s,n,A.bl_count)}function x(A,t,e){var i,a,s=-1,o=t[1],r=0,g=7,n=4;for(0===o&&(g=138,n=3),t[2*(e+1)+1]=65535,i=0;i<=e;i++)a=o,o=t[2*(i+1)+1],++r>=7;i<30;i++)for(h[i]=a<<7,A=0;A<1<0?(2===A.strm.data_type&&(A.strm.data_type=function(A){var t,e=4093624447;for(t=0;t<=31;t++,e>>>=1)if(1&e&&0!==A.dyn_ltree[2*t])return 0;if(0!==A.dyn_ltree[18]||0!==A.dyn_ltree[20]||0!==A.dyn_ltree[26])return 1;for(t=32;t<256;t++)if(0!==A.dyn_ltree[2*t])return 1;return 0}(A)),G(A,A.l_desc),G(A,A.d_desc),o=function(A){var t;for(x(A,A.dyn_ltree,A.l_desc.max_code),x(A,A.dyn_dtree,A.d_desc.max_code),G(A,A.bl_desc),t=18;t>=3&&0===A.bl_tree[2*g[t]+1];t--);return A.opt_len+=3*(t+1)+5+5+4,t}(A),a=A.opt_len+3+7>>>3,(s=A.static_len+3+7>>>3)<=a&&(a=s)):a=s=e+5,e+4<=a&&-1!==t?L(A,t,e,i):4===A.strategy||s===a?(w(A,2+(i?1:0),3),F(A,n,I)):(w(A,4+(i?1:0),3),function(A,t,e,i){var a;for(w(A,t-257,5),w(A,e-1,5),w(A,i-4,4),a=0;a>>8&255,A.pending_buf[A.d_buf+2*A.last_lit+1]=255&t,A.pending_buf[A.l_buf+A.last_lit]=255&e,A.last_lit++,0===t?A.dyn_ltree[2*e]++:(A.matches++,t--,A.dyn_ltree[2*(B[e]+256+1)]++,A.dyn_dtree[2*f(t)]++),A.last_lit===A.lit_bufsize-1},t._tr_align=function(A){w(A,2,3),m(A,256,n),function(A){16===A.bi_valid?(p(A,A.bi_buf),A.bi_buf=0,A.bi_valid=0):A.bi_valid>=8&&(A.pending_buf[A.pending++]=255&A.bi_buf,A.bi_buf>>=8,A.bi_valid-=8)}(A)}},\"./node_modules/pako/lib/zlib/zstream.js\":A=>{\"use strict\";A.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},\"./node_modules/strnum/strnum.js\":A=>{const t=/^[-+]?0x[a-fA-F0-9]+$/,e=/^([\\-\\+])?(0*)(\\.[0-9]+([eE]\\-?[0-9]+)?|[0-9]+(\\.[0-9]+([eE]\\-?[0-9]+)?)?)$/,i={hex:!0,leadingZeros:!0,decimalPoint:\".\"};A.exports=function(A,a={}){if(a=Object.assign({},i,a),!A||\"string\"!=typeof A)return A;let s=A.trim();if(void 0!==a.skipLike&&a.skipLike.test(s))return A;if(a.hex&&t.test(s))return Number.parseInt(s,16);{const t=e.exec(s);if(t){t[1];const e=t[2],i=t[3];return t[4]||t[6],1===e.length&&\".\"===i[0]?Number(A):!a.leadingZeros&&e.length>0?A:Number(s)}return A}}},\"./src/index.ts\":(A,t,e)=>{\"use strict\";e.r(t),e.d(t,{FLIPPED_DIAGONALLY_FLAG:()=>o.FLIPPED_DIAGONALLY_FLAG,FLIPPED_HORIZONTALLY_FLAG:()=>o.FLIPPED_HORIZONTALLY_FLAG,FLIPPED_VERTICALLY_FLAG:()=>o.FLIPPED_VERTICALLY_FLAG,TiledEntity:()=>s.TiledEntity,TiledLayer:()=>o.TiledLayer,TiledLayerComponent:()=>I.TiledLayerComponent,TiledMap:()=>a.TiledMap,TiledMapFormat:()=>i.TiledMapFormat,TiledMapResource:()=>i.TiledMapResource,TiledObject:()=>r.TiledObject,TiledObjectComponent:()=>n.TiledObjectComponent,TiledObjectGroup:()=>r.TiledObjectGroup,TiledTileset:()=>g.TiledTileset,TiledTilesetTile:()=>g.TiledTilesetTile,getCanonicalGid:()=>o.getCanonicalGid,getProperty:()=>s.getProperty,isFlippedDiagonally:()=>o.isFlippedDiagonally,isFlippedHorizontally:()=>o.isFlippedHorizontally,isFlippedVertically:()=>o.isFlippedVertically,parseExternalJson:()=>g.parseExternalJson,parseExternalTsx:()=>g.parseExternalTsx}),e(\"./src/tiled-types.ts\");var i=e(\"./src/tiled-map-resource.ts\"),a=e(\"./src/tiled-map-parser.ts\"),s=e(\"./src/tiled-entity.ts\"),o=e(\"./src/tiled-layer.ts\"),r=e(\"./src/tiled-object.ts\"),g=e(\"./src/tiled-tileset.ts\"),n=e(\"./src/tiled-object-component.ts\"),I=e(\"./src/tiled-layer-component.ts\");e(\"./src/raw-tiled-layer.ts\"),e(\"./src/raw-tiled-map.ts\"),e(\"./src/raw-tiled-object.ts\"),e(\"./src/raw-tiled-text.ts\"),e(\"./src/raw-tiled-tileset.ts\"),e(\"./src/raw-tileset-tile.ts\")},\"./src/raw-tiled-layer.ts\":(A,t,e)=>{\"use strict\";e.r(t)},\"./src/raw-tiled-map.ts\":(A,t,e)=>{\"use strict\";e.r(t)},\"./src/raw-tiled-object.ts\":(A,t,e)=>{\"use strict\";e.r(t)},\"./src/raw-tiled-text.ts\":(A,t,e)=>{\"use strict\";e.r(t)},\"./src/raw-tiled-tileset.ts\":(A,t,e)=>{\"use strict\";e.r(t)},\"./src/raw-tileset-tile.ts\":(A,t,e)=>{\"use strict\";e.r(t)},\"./src/tiled-entity.ts\":(A,t,e)=>{\"use strict\";e.r(t),e.d(t,{TiledEntity:()=>a,getProperty:()=>i});const i=(A,t)=>{if(Array.isArray(A))return null==A?void 0:A.filter((A=>{var e;return(null===(e=A.name)||void 0===e?void 0:e.toLocaleLowerCase())===t.toLocaleLowerCase()}))[0]};class a{constructor(){this.properties=[]}getProperty(A){return i(this.properties,A)}}},\"./src/tiled-layer-component.ts\":(A,t,e)=>{\"use strict\";e.r(t),e.d(t,{TiledLayerComponent:()=>a});var i=e(\"excalibur\");class a extends i.Component{constructor(A){super(),this.layer=A,this.type=\"ex.tiledlayer\"}}},\"./src/tiled-layer.ts\":(A,t,e)=>{\"use strict\";e.r(t),e.d(t,{FLIPPED_DIAGONALLY_FLAG:()=>r,FLIPPED_HORIZONTALLY_FLAG:()=>s,FLIPPED_VERTICALLY_FLAG:()=>o,TiledLayer:()=>B,getCanonicalGid:()=>l,isFlippedDiagonally:()=>I,isFlippedHorizontally:()=>g,isFlippedVertically:()=>n});var i=e(\"./src/tiled-entity.ts\"),a=e(\"excalibur\");const s=2147483648,o=1073741824,r=536870912,g=A=>!!(A&s),n=A=>!!(A&o),I=A=>!!(A&r),l=A=>A&~(s|o|r);class B extends i.TiledEntity{constructor(){super(...arguments),this.offset=a.Vector.Zero,this.parallaxFactor=null,this.encoding=\"csv\"}static parse(A){var t,e,i,s,o,r;if(\"tilelayer\"!==A.type)throw Error(\"Cannot parse a non tilelayer type layer\");const g=new B;return g.id=+A.id,g.name=A.name,g.data=A.data,g.offset=(0,a.vec)(null!==(t=A.offsetx)&&void 0!==t?t:0,null!==(e=A.offsety)&&void 0!==e?e:0),g.parallaxFactor=A.parallaxx||A.parallaxy?(0,a.vec)(null!==(i=A.parallaxx)&&void 0!==i?i:1,null!==(s=A.parallaxy)&&void 0!==s?s:1):null,g.width=A.width,g.height=A.height,g.encoding=null!==(o=A.encoding)&&void 0!==o?o:\"csv\",g.compression=A.compression,g.order=A.order,g.properties=null!==(r=A.properties)&&void 0!==r?r:[],g.rawLayer=A,g}}},\"./src/tiled-map-parser.ts\":(A,t,e)=>{\"use strict\";e.r(t),e.d(t,{TiledMap:()=>I});var i=e(\"./node_modules/fast-xml-parser/src/parser.js\"),a=e(\"./node_modules/pako/index.js\"),s=e(\"./node_modules/zstddec/dist/zstddec.modern.js\"),o=e(\"./src/tiled-layer.ts\"),r=e(\"./src/tiled-object.ts\"),g=e(\"./src/tiled-tileset.ts\"),n=function(A,t,e,i){return new(e||(e=Promise))((function(a,s){function o(A){try{g(i.next(A))}catch(A){s(A)}}function r(A){try{g(i.throw(A))}catch(A){s(A)}}function g(A){var t;A.done?a(A.value):(t=A.value,t instanceof e?t:new e((function(A){A(t)}))).then(o,r)}g((i=i.apply(A,t||[])).next())}))};class I{constructor(){this.layers=[],this.tileSets=[],this.objectGroups=[]}getExcaliburObjects(){return this.getObjectLayerByProperty(\"excalibur\",!0)}getObjects(){var A;return null!==(A=this.objectGroups.filter((A=>{var t;return!(null===(t=A.getProperty(\"excalibur-exclude\"))||void 0===t?void 0:t.value)})))&&void 0!==A?A:[]}getObjectLayerByName(A){return this.objectGroups.filter((t=>t.name===A))[0]}getObjectLayerByProperty(A,t){return this.objectGroups.filter((e=>{var i;return(null===(i=e.getProperty(A))||void 0===i?void 0:i.value)===t}))}getTileLayerByName(A){return this.layers.filter((t=>t.name===A))[0]}getTileLayersByProperty(A,t){return this.layers.filter((e=>{var i;return(null===(i=e.getProperty(A))||void 0===i?void 0:i.value)===t}))}static fromTmx(A){var t,e,a,s,o,r,g,l,B,C,Q,E,d,h,c,u;return n(this,void 0,void 0,(function*(){const n=(A,t,e=!1)=>{A[t]?(A[t+(e?\"s\":\"\")]=Array.isArray(A[t])?A[t]:[A[t]],e&&delete A[t]):A[t+(e?\"s\":\"\")]=[]},f=i.parse(A,{attributeNamePrefix:\"\",textNodeName:\"#text\",ignoreAttributes:!1,ignoreNameSpace:!1,allowBooleanAttributes:!0,parseNodeValue:!0,parseAttributeValue:!0,trimValues:!0,parseTrueNumberOnly:!1,arrayMode:!1,stopNodes:[\"parse-me-as-string\"]}).map;n(f,\"layer\",!0);for(let A of f.layers)A.type=null!==(t=A.type)&&void 0!==t?t:\"tilelayer\",A.encoding=A.data.encoding,A.compression=A.data.compression,\"csv\"===A.encoding?A.data=A.data[\"#text\"].split(\",\").map((A=>+A)):A.data=A.data[\"#text\"],A.properties=null!==(a=null===(e=A.properties)||void 0===e?void 0:e.property)&&void 0!==a?a:[],n(A,\"properties\");f.objectgroup=null!==(s=f.objectgroup)&&void 0!==s?s:[];let p=Array.isArray(f.objectgroup)?f.objectgroup:[f.objectgroup];for(let A of p)if(A.type=null!==(o=A.type)&&void 0!==o?o:\"objectgroup\",A.properties=null!==(g=null===(r=A.properties)||void 0===r?void 0:r.property)&&void 0!==g?g:[],n(A,\"properties\"),A.object){A.objects=Array.isArray(A.object)?A.object:[A.object],A.objects.forEach((A=>{var t,e;return A.properties=null!==(e=null===(t=A.properties)||void 0===t?void 0:t.property)&&void 0!==e?e:[]})),A.objects.forEach((A=>n(A,\"properties\"))),delete A.object;for(let t of A.objects)t.text&&(t.text.text=t.text[\"#text\"],t.text.halign=null!==(l=t.text.halign)&&void 0!==l?l:\"left\",t.text.valign=null!==(B=t.text.valign)&&void 0!==B?B:\"top\",t.text.fontfamily=null!==(C=t.text.fontfamily)&&void 0!==C?C:\"sans-serif\",t.text.pixelsize=+(null!==(Q=t.text.pixelsize)&&void 0!==Q?Q:16),t.text.kerning=!!t.text.kerning,t.text.italic=!!t.text.italic,t.text.bold=!!t.text.bold,t.text.underline=!!t.text.underline,t.text.strikeout=!!t.text.strikeout,t.text.color=null!==(E=t.text.color)&&void 0!==E?E:\"#000000\"),\"\"===t.point&&(t.point=!0),\"\"===t.ellipse&&(t.ellipse=!0),t.polyline&&(t.polyline=t.polyline.points.split(\" \").map((A=>{const t=A.split(\",\");return{x:+t[0],y:+t[1]}}))),t.polygon&&(t.polygon=t.polygon.points.split(\" \").map((A=>{const t=A.split(\",\");return{x:+t[0],y:+t[1]}})));f.layers.push(A)}delete f.objectgroup,n(f,\"imagelayer\",!0);for(let A of f.imagelayers)A.type=null!==(d=A.type)&&void 0!==d?d:\"imagelayer\",A.image=A.image.source,A.properties=null!==(c=null===(h=A.properties)||void 0===h?void 0:h.property)&&void 0!==c?c:[],n(A,\"properties\"),f.layers.push(A);delete f.imagelayer,n(f,\"tileset\",!0);for(let A of f.tilesets)A.source||(A.image&&(A.imagewidth=A.image.width,A.imageheight=A.image.height,A.image=A.image.source),A.objectalignment=null!==(u=A.objectalignment)&&void 0!==u?u:\"unspecified\",n(A,\"tile\",!0),A.tiles.forEach((A=>{var t;(null===(t=A.image)||void 0===t?void 0:t.source)&&(A.image=A.image.source),A.objectgroup&&(A.objectgroup.type=\"objectgroup\",n(A.objectgroup,\"object\",!0))})));return yield I._fromRawTiledMap(f)}))}static fromJson(A){return n(this,void 0,void 0,(function*(){return yield I._fromRawTiledMap(A)}))}static _fromRawTiledMap(A){return n(this,void 0,void 0,(function*(){yield I._decompresslayers(A);const t=new I;t.orientation=A.orientation,t.rawMap=A,t.width=+A.width,t.height=+A.height,t.tileWidth=+A.tilewidth,t.tileHeight=+A.tileheight,l(A);for(let e of A.layers)\"tilelayer\"==e.type&&t.layers.push(o.TiledLayer.parse(e)),\"objectgroup\"==e.type&&t.objectGroups.push(r.TiledObjectGroup.parse(e));for(let e of A.tilesets)e.source||t.tileSets.push(g.TiledTileset.parse(e));return t}))}static _decompresslayers(A){var t;return n(this,void 0,void 0,(function*(){if(A.layers)for(var e of A.layers)\"string\"==typeof e.data?\"base64\"===e.encoding&&(e.data=yield B.decompressBase64(e.data,e.encoding,null!==(t=e.compression)&&void 0!==t?t:\"\")):e.data=B.decompressCsv(e.data);return A}))}}const l=A=>{let t=0;for(let e of A.layers)e.order=t++},B={decompressCsv:A=>A,decompressBase64:(A,t,e)=>{var i,o,r,g,n,I;if(A.length%4>0)throw new Error(\"Invalid string. Length must be a multiple of 4\");var l=\"+\".charCodeAt(0),B=\"/\".charCodeAt(0),C=\"0\".charCodeAt(0),Q=\"a\".charCodeAt(0),E=\"A\".charCodeAt(0),d=\"-\".charCodeAt(0),h=\"_\".charCodeAt(0);function c(A){var t=A.charCodeAt(0);if(t===l||t===d)return 62;if(t===B||t===h)return 63;if(t0?A.length-4:A.length;var f=0;function p(A){I[f++]=A}for(i=0,o=0;i>16),p((65280&g)>>8),p(255&g);return 2===n?p(255&(g=c(A.charAt(i))<<2|c(A.charAt(i+1))>>4)):1===n&&(p((g=c(A.charAt(i))<<10|c(A.charAt(i+1))<<4|c(A.charAt(i+2))>>2)>>8&255),p(255&g)),new Promise((A=>{const t=function(A){for(var t=0,e=A.length-1;e>=0;e--)t=256*t+1*A[e];return t};if(\"zlib\"===e||\"gzip\"===e){var o=(I=(0,a.inflate)(I)).length/4,r=new Array(o);for(i=0;i{var a=(I=e.decode(I)).length/4,s=new Array(a);for(i=0;i{\"use strict\";e.r(t),e.d(t,{TiledMapFormat:()=>i,TiledMapResource:()=>B});var i,a=e(\"excalibur\"),s=e(\"./src/tiled-map-parser.ts\"),o=e(\"./src/tiled-tileset.ts\"),r=e(\"./src/tiled-layer.ts\"),g=e(\"./src/tiled-entity.ts\"),n=e(\"./src/tiled-object-component.ts\"),I=e(\"./src/tiled-layer-component.ts\"),l=function(A,t,e,i){return new(e||(e=Promise))((function(a,s){function o(A){try{g(i.next(A))}catch(A){s(A)}}function r(A){try{g(i.throw(A))}catch(A){s(A)}}function g(A){var t;A.done?a(A.value):(t=A.value,t instanceof e?t:new e((function(A){A(t)}))).then(o,r)}g((i=i.apply(A,t||[])).next())}))};!function(A){A.TMX=\"TMX\",A.JSON=\"JSON\"}(i||(i={}));class B{constructor(A,t){this.path=A,this.layers=[],this.isoLayers=[],this._layerZIndexStart=-1,this._mapToRawLayer=new Map;const{mapFormatOverride:e,startingLayerZIndex:s}=Object.assign({},t);this._layerZIndexStart=null!=s?s:this._layerZIndexStart;const o=null!=e?e:A.includes(\".tmx\")?i.TMX:i.JSON;switch(o){case i.TMX:this._resource=new a.Resource(A,\"text\");break;case i.JSON:this._resource=new a.Resource(A,\"json\");break;default:throw`The format ${o} is not currently supported. Please export Tiled map as JSON.`}this.mapFormat=o,this.ex={},this.imageMap={},this.sheetMap={},this.tileImageMap={},this.convertPath=(A,t)=>{if(0===t.indexOf(\"/\"))return t;const e=A.split(\"/\"),i=t.split(\"/\");return e[e.length-1].includes(\".\")&&e.pop(),e.concat(i).join(\"/\")}}_addTiledCamera(A){const t=this.ex.camera;if(t){let e=(0,a.vec)(t.x,t.y);this.isIsometric()&&(e=this._isoTileToScreenCoords(t.x,t.y)),A.camera.x=e.x,A.camera.y=e.y,A.camera.zoom=t.zoom}}_addTiledColliders(A){var t;const e=this.ex.colliders;if(e)for(let i of e){const e=new a.Actor({pos:(0,a.vec)(i.x,i.y),name:i.name,collisionType:null!==(t=i.collisionType)&&void 0!==t?t:a.CollisionType.Fixed});if(i.color&&(e.color=a.Color.fromHex(i.color.value)),\"box\"===i.type)if(this.isIsometric()){e.pos=this._isoTileToScreenCoords(i.x,i.y);const A=new a.BoundingBox({left:0,top:0,right:i.width,bottom:i.height}).getPoints().map((A=>this._isoTileToScreenCoords(A.x,A.y)));e.collider.usePolygonCollider(A,a.Vector.Zero)}else e.collider.useBoxCollider(i.width,i.height,a.Vector.Zero);\"circle\"===i.type&&e.collider.useCircleCollider(i.radius),e.addComponent(new n.TiledObjectComponent(i.tiled)),A.add(e),i.zIndex&&(e.z=i.zIndex)}}_isoTileToScreenCoords(A,t){if(this.isIsometric()){const e=this.isoLayers[0],i=e.tileWidth,s=e.tileHeight,o=0,r=t/s,g=A/s;return(0,a.vec)((g-r)*i/2+o,(g+r)*s/2)}return(0,a.vec)(A,t)}_addTiledText(A){var t,e,i,s,o,r,g,I,l,B,C,Q;const E=null===(t=this.data)||void 0===t?void 0:t.getObjects();if(E&&E.length>0)for(const t of E){const E=t.getText();for(const d of E){let E=(0,a.vec)(d.x,d.y+((null!==(e=d.height)&&void 0!==e?e:0)-(null!==(s=null===(i=d.text)||void 0===i?void 0:i.pixelSize)&&void 0!==s?s:0)));this.isIsometric()&&(E=this._isoTileToScreenCoords(d.x,d.y));const h=new a.Label({anchor:a.Vector.Zero,x:E.x,y:E.y,text:null!==(r=null===(o=d.text)||void 0===o?void 0:o.text)&&void 0!==r?r:\"\",name:this._getEntityName(d),font:new a.Font({family:null===(g=d.text)||void 0===g?void 0:g.fontFamily,size:null===(I=d.text)||void 0===I?void 0:I.pixelSize,unit:a.FontUnit.Px})});if(h.font.textAlign=a.TextAlign.Left,h.font.baseAlign=a.BaseAlign.Top,h.rotation=d.rotation,h.color=a.Color.fromHex(null!==(B=null===(l=d.text)||void 0===l?void 0:l.color)&&void 0!==B?B:\"#000000\"),h.collider.set(a.Shape.Box(null!==(C=d.width)&&void 0!==C?C:0,null!==(Q=d.height)&&void 0!==Q?Q:0)),h.body.collisionType=a.CollisionType.PreventCollision,h.addComponent(new n.TiledObjectComponent(d)),h.z=this._calculateZIndex(d,t),this.isIsometric()){const A=new a.IsometricEntityComponent(this.isoLayers[0]);h.addComponent(A),A.elevation=t.order}A.add(h)}}}_addTiledInsertedTiles(A){var t,e,i;const s=null===(t=this.data)||void 0===t?void 0:t.getObjects();if(s&&s.length>0)for(const t of s){const s=t.getInsertedTiles();for(const o of s){const s=o.getProperty(\"collisionType\");let r=a.CollisionType.PreventCollision;s&&(r=s.value);let g=(0,a.vec)(o.x,o.y);if(this.isIsometric()&&(g=this._isoTileToScreenCoords(o.x,o.y)),o.gid){const s=this.getSpriteForGid(o.gid),I=this.getCollidersForGid(o.gid),l=new a.Actor({x:g.x,y:g.y,width:o.width,height:o.height,anchor:this.isIsometric()?(0,a.vec)(.5,1):(0,a.vec)(0,1),rotation:o.rotation,collisionType:r,name:this._getEntityName(o)});if(this.isIsometric()){const A=this.isoLayers[0];for(let t of I)t.offset=(0,a.vec)(-A.tileWidth/2,2*-A.tileHeight)}if(I.length&&(l.collider.clear(),l.collider.set(new a.CompositeCollider(I))),l.addComponent(new n.TiledObjectComponent(o)),l.graphics.anchor=this.isIsometric()?(0,a.vec)(.5,1):(0,a.vec)(0,1),s.destSize.width=null!==(e=o.width)&&void 0!==e?e:s.destSize.width,s.destSize.height=null!==(i=o.height)&&void 0!==i?i:s.destSize.height,l.graphics.use(s),this.isIsometric()){const A=new a.IsometricEntityComponent(this.isoLayers[0]);l.addComponent(A),A.elevation=t.order}A.add(l),l.z=this._calculateZIndex(o,t)}}}}useSolidLayers(){var A,t,e;let i=this.getTileMapLayers();i=i.concat(this.isoLayers);for(const a of i){const i=this._mapToRawLayer.get(a);if(i&&null!==(t=null===(A=(0,g.getProperty)(i.properties,\"solid\"))||void 0===A?void 0:A.value)&&void 0!==t&&t)for(let A=0;A0){B.camera=null===(t=l.find((A=>A.getObjectByClass(\"camera\"))))||void 0===t?void 0:t.getCamera(),B.colliders=[];for(let A of l){const t=A.getObjectsByClass(\"boxcollider\");for(let o of t){const t=o.getProperty(\"collisiontype\"),r=o.getProperty(\"color\"),g=this._calculateZIndex(o,A);B.colliders.push(Object.assign(Object.assign({},o),{width:+(null!==(e=o.width)&&void 0!==e?e:0),height:+(null!==(i=o.height)&&void 0!==i?i:0),collisionType:null!==(s=null==t?void 0:t.value)&&void 0!==s?s:a.CollisionType.Fixed,color:r,zIndex:g,radius:0,type:\"box\",tiled:o,name:this._getEntityName(o)}))}const l=A.getObjectsByClass(\"circlecollider\");for(let t of l){const e=t.getProperty(\"collisiontype\"),i=t.getProperty(\"color\"),s=this._calculateZIndex(t,A);B.colliders.push({x:t.x,y:t.y,radius:Math.max(null!==(o=t.width)&&void 0!==o?o:0,null!==(r=t.height)&&void 0!==r?r:0),collisionType:null!==(g=null==e?void 0:e.value)&&void 0!==g?g:a.CollisionType.Fixed,color:i,zIndex:s,width:null!==(n=t.width)&&void 0!==n?n:0,height:null!==(I=t.height)&&void 0!==I?I:0,type:\"circle\",tiled:t,name:this._getEntityName(t)})}}}this.ex=B}isLoaded(){return!!this.data}isIsometric(){return!!this.isoLayers.length}load(){return l(this,void 0,void 0,(function*(){const A=yield this._resource.load(),t=yield this._importMapData(A);let e=[];return t.rawMap.tilesets.forEach((A=>{if(A.source){const s=A.source.includes(\".tsx\")?\"text\":\"json\";var i=new a.Resource(this.convertPath(this.path,A.source),s);e.push(i.load().then((e=>{e=\"text\"===s?(0,o.parseExternalTsx)(e,A.firstgid,A.source):(0,o.parseExternalJson)(e,A.firstgid,A.source),Object.assign(A,e),t.tileSets.push(e)}),(()=>{a.Logger.getInstance().error(`[Tiled] Error loading external tileset file ${i.path}`)})))}})),yield Promise.all(e).then((()=>{let A=[];return t.rawMap.tilesets.forEach((t=>{let e=[];if(t.image){e=t.source?[this.convertPath(t.source,t.image)]:[this.convertPath(this.path,t.image)];for(let i of e){const e=new a.ImageSource(i);this.imageMap[t.firstgid]=e,A.push(e.load()),a.Logger.getInstance().debug(\"[Tiled] Loading associated tileset image: \"+t.image)}}else for(let e of t.tiles){let i;i=t.source?this.convertPath(t.source,e.image):this.convertPath(this.path,e.image);const s=new a.ImageSource(i);A.push(s.load()),this.tileImageMap[t.firstgid]||(this.tileImageMap[t.firstgid]=[]),this.tileImageMap[t.firstgid].push([e,s]),a.Logger.getInstance().debug(\"[Tiled] Loading associated tileset image: \"+i)}})),Promise.all(A).then((()=>{this._createTileMap()}),(()=>{a.Logger.getInstance().error(\"[Tiled] Error loading tileset images\")}))})),this._parseExcaliburInfo(),t}))}_importMapData(A){return l(this,void 0,void 0,(function*(){if(void 0===A)throw`Tiled map resource ${this.path} is empty`;switch(this.mapFormat){case i.TMX:return this.data=yield s.TiledMap.fromTmx(A);case i.JSON:return this.data=yield s.TiledMap.fromJson(A);default:throw new Error(\"Unknown map format: \"+this.mapFormat)}}))}getTilesetForTile(A){if(this.data)for(var t=this.data.tileSets.length-1;t>=0;t--){var e=this.data.tileSets[t];if(A>=e.firstGid&&A<=e.firstGid+e.tileCount-1)return e}throw Error(`No tileset exists for tiled gid [${A}]!`)}getSpriteForGid(A){const t=(0,r.isFlippedHorizontally)(A),e=(0,r.isFlippedVertically)(A),i=(0,r.isFlippedDiagonally)(A),s=(0,r.getCanonicalGid)(A),o=this.getTilesetForTile(s),g=s-o.firstGid,n=this.sheetMap[o.firstGid.toString()];if(n){let A=n.sprites[g];return(i||t||e)&&(A=A.clone()),i&&(A.rotation=-Math.PI/2,A.scale=(0,a.vec)(-1,1)),t&&(A.scale=(0,a.vec)((i?1:-1)*A.scale.x,(i?-1:1)*A.scale.y)),e&&(A.scale=(0,a.vec)((i?-1:1)*A.scale.x,(i?1:-1)*A.scale.y)),A}throw new Error(`Could not find sprite for gid: [${A}] normalized gid: [${s}]`)}_transformPoints(A,t,e){const i=(0,r.isFlippedHorizontally)(e),a=(0,r.isFlippedVertically)(e);return(0,r.isFlippedDiagonally)(e)&&(A=A.map((A=>t.diagonalFlipTransform.multiply(A)))),i&&(A=A.map((A=>t.horizontalFlipTransform.multiply(A)))),a&&(A=A.map((A=>t.verticalFlipTransform.multiply(A)))),A}getCollidersForGid(A){const t=(0,r.getCanonicalGid)(A),e=this.getTilesetForTile(t),i=t-e.firstGid,s=e.tiles.find((A=>A.id===i));if(s&&s.objectgroup){const t=[];for(const i of s.objectgroup.getPolygons()){const s=(0,a.vec)(i.x,i.y),o=i.polygon.points.split(\" \").map((A=>{const t=A.split(\",\");return(0,a.vec)(Number.parseFloat(t[0]),Number.parseFloat(t[1])).add(s)})),r=a.Shape.Polygon(o);r.points=this._transformPoints(r.points,e,A),t.push(r)}for(const i of s.objectgroup.getBoxes()){const s=a.Shape.Box(i.width,i.height,a.Vector.Zero);s.points=s.points.map((A=>A.add((0,a.vec)(i.x,i.y)))),s.points=this._transformPoints(s.points,e,A),t.push(s)}for(const A of s.objectgroup.getEllipses()){const e=a.Shape.Circle(Math.min(A.width/2,A.height/2),(0,a.vec)(A.width/2,A.height/2).add((0,a.vec)(A.x,A.y)));t.push(e)}return t}return[]}getAnimationForGid(A){const t=(0,r.getCanonicalGid)(A),e=this.getTilesetForTile(t),i=t-e.firstGid,a=e.tiles.find((A=>A.id===i));return a&&a.hasAnimation()?a.getAnimation(this):null}_calculateZIndex(A,t){var e,i,a;let s=null!==(i=null===(e=A.getProperty(\"z\"))||void 0===e?void 0:e.value)&&void 0!==i?i:null===(a=A.getProperty(\"zindex\"))||void 0===a?void 0:a.value;return null!=s||(s=t.order+this._layerZIndexStart),+s}_getEntityName(A){return A.name}_createTileMap(){var A,t,e,i,s,o,r,g,n;for(const o of this.data.rawMap.tilesets){const r=null!==(A=o.spacing)&&void 0!==A?A:0,g=Math.floor((o.imagewidth+r)/(o.tilewidth+r)),n=Math.floor((o.imageheight+r)/(o.tileheight+r));if(this.imageMap[o.firstgid]){const A=a.SpriteSheet.fromImageSource({image:this.imageMap[o.firstgid],grid:{columns:g,rows:n,spriteWidth:o.tilewidth,spriteHeight:o.tileheight},spacing:{originOffset:{x:null!==(t=o.margin)&&void 0!==t?t:0,y:null!==(e=o.margin)&&void 0!==e?e:0},margin:{x:null!==(i=o.spacing)&&void 0!==i?i:0,y:null!==(s=o.spacing)&&void 0!==s?s:0}}});this.sheetMap[o.firstgid.toString()]=A}else{const A=this.tileImageMap[o.firstgid].map((([A,t])=>t.toSprite())),t=new a.SpriteSheet({sprites:A});this.sheetMap[o.firstgid.toString()]=t}}for(var l of this.data.layers)if(\"tilelayer\"===l.rawLayer.type){if(\"orthogonal\"===this.data.orientation){const A=l.rawLayer,t=new a.TileMap({name:l.rawLayer.name,pos:(0,a.vec)(l.offset.x,l.offset.y),tileWidth:this.data.rawMap.tilewidth,tileHeight:this.data.rawMap.tileheight,columns:this.data.width,rows:this.data.height});if(t.addComponent(new I.TiledLayerComponent(l)),l.rawLayer.parallaxx||l.rawLayer.parallaxy){const A=(0,a.vec)(null!==(o=l.rawLayer.parallaxx)&&void 0!==o?o:1,null!==(r=l.rawLayer.parallaxy)&&void 0!==r?r:1);t.addComponent(new a.ParallaxComponent(A))}t.z=this._calculateZIndex(l,l);for(let e=0;eA.id===s-1))||{id:s-1,tileset:o,properties:{}}}getTileByPoint(A,t){const e=this.getTileMapLayers().find((t=>t.name===A));if(e){const i=e.getTileByPoint(t);return this._lookupTile(e,i,A)}return null}getTileByCoordinate(A,t,e){const i=this.getTileMapLayers().find((t=>t.name===A));if(i){const a=i.getTile(t,e);return this._lookupTile(i,a,A)}return null}}},\"./src/tiled-object-component.ts\":(A,t,e)=>{\"use strict\";e.r(t),e.d(t,{TiledObjectComponent:()=>a});var i=e(\"excalibur\");class a extends i.Component{constructor(A){super(),this.object=A,this.type=\"ex.tiledobject\"}}},\"./src/tiled-object.ts\":(A,t,e)=>{\"use strict\";e.r(t),e.d(t,{TiledObject:()=>o,TiledObjectGroup:()=>s});var i=e(\"./src/tiled-entity.ts\"),a=e(\"excalibur\");class s extends i.TiledEntity{constructor(){super(...arguments),this.objects=[]}getCamera(){var A;const t=this.getObjectByClass(\"camera\");if(t){const e=t.getProperty(\"zoom\");return{x:t.x,y:t.y,zoom:e?+(null!==(A=null==e?void 0:e.value)&&void 0!==A?A:1):1}}}getObjectByType(A){return this.getObjectsByType(A)[0]}getObjectByClass(A){return this.getObjectsByClass(A)[0]}getObjectsByType(A){return this.objects.filter((t=>{var e;return(null===(e=t.type)||void 0===e?void 0:e.toLocaleLowerCase())===A.toLocaleLowerCase()}))}getObjectsByClass(A){return this.objects.filter((t=>{var e,i;return(null===(e=t.class)||void 0===e?void 0:e.toLocaleLowerCase())===A.toLocaleLowerCase()||(null===(i=t.type)||void 0===i?void 0:i.toLocaleLowerCase())===A.toLocaleLowerCase()}))}getObjectByName(A){return this.getObjectsByName(A)[0]}getObjectsByName(A){return this.objects.filter((t=>{var e;return(null===(e=t.name)||void 0===e?void 0:e.toString().toLocaleLowerCase())===A.toString().toLocaleLowerCase()}))}getPoints(){return this.objects.filter((A=>!!A.point))}getEllipses(){return this.objects.filter((A=>!!A.ellipse))}getText(){return this.objects.filter((A=>!!A.text))}getPolyLines(){return this.objects.filter((A=>!!A.polyline))}getPolygons(){return this.objects.filter((A=>!!A.polygon))}getBoxes(){return this.objects.filter((A=>!!A.width&&!!A.height&&!A.ellipse))}getInsertedTiles(){return this.objects.filter((A=>!!A.gid))}static parse(A){var t;if(\"objectgroup\"!==A.type)throw Error(\"Cannot parse non objectgroup type layer\");const e=new s;e.id=+A.id,e.name=A.name,e.properties=null!==(t=A.properties)&&void 0!==t?t:[],e.rawObjectGroup=A,e.order=A.order;for(let t of A.objects)e.objects.push(o.parse(t));return e}}class o extends i.TiledEntity{static parse(A){var t,e,i,s;const r=new o;return r.id=+A.id,r.gid=A.gid,r.visible=null===(t=A.visible)||void 0===t||t,r.name=A.name,r.type=A.type,r.class=A.class,r.x=+A.x,r.y=+A.y,r.rotation=A.rotation?(0,a.toRadians)(A.rotation):0,r.width=null!==(e=A.width)&&void 0!==e?e:0,r.height=null!==(i=A.height)&&void 0!==i?i:0,r.point=A.point,r.ellipse=!0===A.ellipse||\"\"===A.ellipse,r.polyline=A.polyline,r.polygon=A.polygon,r.rawObject=A,A.text&&(r.text=Object.assign(Object.assign({},A.text),{pixelSize:A.text.pixelsize,fontFamily:A.text.fontfamily})),r.properties=null!==(s=A.properties)&&void 0!==s?s:[],r}}},\"./src/tiled-tileset.ts\":(A,t,e)=>{\"use strict\";e.r(t),e.d(t,{TiledTileset:()=>r,TiledTilesetTile:()=>g,parseExternalJson:()=>I,parseExternalTsx:()=>n});var i=e(\"excalibur\"),a=e(\"./node_modules/fast-xml-parser/src/parser.js\"),s=e(\"./src/index.ts\"),o=e(\"./src/tiled-entity.ts\");class r{constructor(){this.tiles=[]}static parse(A){var t,e;const a=new r;let s=[];if(Array.isArray(A.tiles))s=(null!==(t=A.tiles)&&void 0!==t?t:[]).map((A=>g.parse(A,a)));else for(let t in A.tiles)s.push(g.parse(Object.assign(Object.assign({},A.tiles[t]),{id:+t}),a));return a.tiles=s,a.firstGid=A.firstgid,a.tileWidth=A.tilewidth,a.tileHeight=A.tileheight,a.tileCount=A.tilecount,a.tileOffset=A.tileoffset,a.tiledVersion=A.tiledversion,a.backgroundColor=A.backgroundcolor,a.transparentColor=A.transparentcolor,a.wangSets=A.wangsets,a.imageWidth=A.imagewidth,a.imageHeight=A.imageheight,a.objectAlignment=null!==(e=A.objectalignment)&&void 0!==e?e:\"unspecified\",a.image=A.image,a.spacing=isNaN(A.spacing)?0:A.spacing,a.horizontalFlipTransform=i.Matrix.identity().translate(a.tileWidth,0).scale(-1,1),a.verticalFlipTransform=i.Matrix.identity().translate(0,a.tileHeight).scale(1,-1),a.diagonalFlipTransform=i.Matrix.identity().translate(0,0).rotate(-Math.PI/2).scale(-1,1),a}}class g{hasAnimation(){return!!this.animation}getAnimation(A){var t;if(this.animation){let e=[];for(let t of this.animation)e.push({graphic:A.getSpriteForGid(t.tileid+this.tileset.firstGid),duration:t.duration});return new i.Animation({frames:e,strategy:null!==(t=this.animationStrategy)&&void 0!==t?t:i.AnimationStrategy.Loop})}return null}static parse(A,t){var e,a,r;const n=new g;if(n.id=+A.id,n.image=A.image,n.tileset=t,n.properties=Array.isArray(A.properties)?A.properties:null!==(a=null===(e=A.properties)||void 0===e?void 0:e.property)&&void 0!==a?a:[],A.objectgroup&&(n.objectgroup=s.TiledObjectGroup.parse(A.objectgroup)),A.terrain&&(n.terrain=A.terrain),A.animation&&(n.animation=Array.isArray(A.animation)?A.animation:[...A.animation.frame],n.properties)){const A=null===(r=(0,o.getProperty)(n.properties,\"animationstrategy\"))||void 0===r?void 0:r.value;switch(null==A?void 0:A.toLowerCase()){case i.AnimationStrategy.End.toLowerCase():n.animationStrategy=i.AnimationStrategy.End;break;case i.AnimationStrategy.Freeze.toLowerCase():n.animationStrategy=i.AnimationStrategy.Freeze;break;case i.AnimationStrategy.Loop.toLowerCase():n.animationStrategy=i.AnimationStrategy.Loop;break;case i.AnimationStrategy.PingPong.toLowerCase():n.animationStrategy=i.AnimationStrategy.PingPong;break;default:n.animationStrategy=i.AnimationStrategy.Loop}}return n}}const n=(A,t,e)=>{var s,o,r,n,I;const l=(A,t,e=!1)=>{A[t]?(A[t+(e?\"s\":\"\")]=Array.isArray(A[t])?A[t]:[A[t]],e&&delete A[t]):A[t+(e?\"s\":\"\")]=[]},B=a.parse(A,{attributeNamePrefix:\"\",textNodeName:\"#text\",ignoreAttributes:!1,ignoreNameSpace:!1,allowBooleanAttributes:!0,parseNodeValue:!0,parseAttributeValue:!0,trimValues:!0,parseTrueNumberOnly:!1,arrayMode:!1,stopNodes:[\"parse-me-as-string\"]}).tileset,C=B;C.firstgid=t,C.source=e,C.imagewidth=null===(s=B.image)||void 0===s?void 0:s.width,C.imageheight=null===(o=B.image)||void 0===o?void 0:o.height,C.objectalignment=null!==(r=B.objectalignment)&&void 0!==r?r:\"unspecified\",C.image=null===(n=B.image)||void 0===n?void 0:n.source,C.spacing=isNaN(B.spacing)?0:B.spacing,l(B,\"tile\",!0),B.tiles.forEach((A=>{var t;(null===(t=A.image)||void 0===t?void 0:t.source)&&(A.image=A.image.source),A.objectgroup&&(A.objectgroup.type=\"objectgroup\",l(A.objectgroup,\"object\",!0))})),C.tiles=B.tiles;const Q=Object.assign(Object.assign({},C),{tiles:[],firstGid:C.firstgid,tileWidth:C.tilewidth,tileHeight:C.tileheight,tileCount:C.tilecount,tileOffset:C.tileoffset,tiledVersion:C.tiledversion,backgroundColor:C.backgroundcolor,transparentColor:C.transparentcolor,wangSets:C.wangsets,imageWidth:C.imagewidth,imageHeight:C.imageheight,objectAlignment:null!==(I=C.objectalignment)&&void 0!==I?I:\"unspecified\",image:C.image,spacing:isNaN(C.spacing)?0:C.spacing,horizontalFlipTransform:i.Matrix.identity().translate(C.tilewidth,0).scale(-1,1),verticalFlipTransform:i.Matrix.identity().translate(0,C.tileheight).scale(1,-1),diagonalFlipTransform:i.Matrix.identity().translate(C.tilewidth,C.tileheight).rotate(-Math.PI/2).scale(-1,1)});return Q.tiles=C.tiles.map((A=>g.parse(A,Q))),Q},I=(A,t,e)=>{var a,s;let o=[];A.tiles=null!==(a=A.tiles)&&void 0!==a?a:[],(0,i.vec)(A.tilewidth/2,A.tileheight/2);const r=Object.assign(Object.assign({},A),{source:e,tiles:o,firstGid:t,tileWidth:A.tilewidth,tileHeight:A.tileheight,tileCount:A.tilecount,tileOffset:A.tileoffset,tiledVersion:A.tiledversion,backgroundColor:A.backgroundcolor,transparentColor:A.transparentcolor,wangSets:A.wangsets,imageWidth:A.imagewidth,imageHeight:A.imageheight,spacing:isNaN(A.spacing)?0:A.spacing,objectAlignment:null!==(s=A.objectalignment)&&void 0!==s?s:\"unspecified\",image:A.image,horizontalFlipTransform:i.Matrix.identity().translate(A.tilewidth,0).scale(-1,1),verticalFlipTransform:i.Matrix.identity().translate(0,A.tileheight).scale(1,-1),diagonalFlipTransform:i.Matrix.identity().translate(A.tilewidth,A.tileheight).rotate(-Math.PI/2).scale(-1,1)});for(let t in A.tiles)o.push(g.parse(Object.assign(Object.assign({},A.tiles[t]),{id:+t}),r));return r}},\"./src/tiled-types.ts\":(A,t,e)=>{\"use strict\";e.r(t)},\"./node_modules/zstddec/dist/zstddec.modern.js\":(A,t,e)=>{\"use strict\";let i,a,s;e.r(t),e.d(t,{ZSTDDecoder:()=>r});const o={env:{emscripten_notify_memory_growth:function(A){s=new Uint8Array(a.exports.memory.buffer)}}};class r{init(){return i||(i=\"undefined\"!=typeof fetch?fetch(\"data:application/wasm;base64,\"+g).then((A=>A.arrayBuffer())).then((A=>WebAssembly.instantiate(A,o))).then(this._init):WebAssembly.instantiate(Buffer.from(g,\"base64\"),o).then(this._init),i)}_init(A){a=A.instance,o.env.emscripten_notify_memory_growth(0)}decode(A,t=0){if(!a)throw new Error(\"ZSTDDecoder: Await .init() before decoding.\");const e=A.byteLength,i=a.exports.malloc(e);s.set(A,i),t=t||Number(a.exports.ZSTD_findDecompressedSize(i,e));const o=a.exports.malloc(t),r=a.exports.ZSTD_decompress(o,t,i,e),g=s.slice(o,o+r);return a.exports.free(i),a.exports.free(o),g}}const g=\"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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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\"},excalibur:t=>{\"use strict\";t.exports=A}},e={};function i(A){var a=e[A];if(void 0!==a)return a.exports;var s=e[A]={exports:{}};return t[A](s,s.exports,i),s.exports}return i.n=A=>{var t=A&&A.__esModule?()=>A.default:()=>A;return i.d(t,{a:t}),t},i.d=(A,t)=>{for(var e in t)i.o(t,e)&&!i.o(A,e)&&Object.defineProperty(A,e,{enumerable:!0,get:t[e]})},i.o=(A,t)=>Object.prototype.hasOwnProperty.call(A,t),i.r=A=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(A,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(A,\"__esModule\",{value:!0})},i(\"./src/index.ts\")})()));\n//# sourceMappingURL=excalibur-tiled.min.js.map","/*!\n * excalibur - 0.28.0 - 2023-8-10\n * https://github.com/excaliburjs/Excalibur\n * Copyright (c) 2023 Excalibur.js \n * Licensed BSD-2-Clause\n * @preserve\n */\n/******/ var __webpack_modules__ = ({\n\n/***/ 4662:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n__webpack_require__(3430);\nvar entryUnbind = __webpack_require__(8791);\n\nmodule.exports = entryUnbind('Array', 'sort');\n\n\n/***/ }),\n\n/***/ 8343:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n__webpack_require__(4769);\nvar path = __webpack_require__(9276);\n\nmodule.exports = path.Object.keys;\n\n\n/***/ }),\n\n/***/ 7111:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar isCallable = __webpack_require__(6733);\nvar tryToString = __webpack_require__(9821);\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw $TypeError(tryToString(argument) + ' is not a function');\n};\n\n\n/***/ }),\n\n/***/ 1176:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar isObject = __webpack_require__(5052);\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw $TypeError($String(argument) + ' is not an object');\n};\n\n\n/***/ }),\n\n/***/ 9540:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar toIndexedObject = __webpack_require__(905);\nvar toAbsoluteIndex = __webpack_require__(3231);\nvar lengthOfArrayLike = __webpack_require__(9646);\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n\n\n/***/ }),\n\n/***/ 6038:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar fails = __webpack_require__(4229);\n\nmodule.exports = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call -- required for testing\n method.call(null, argument || function () { return 1; }, 1);\n });\n};\n\n\n/***/ }),\n\n/***/ 9794:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar toAbsoluteIndex = __webpack_require__(3231);\nvar lengthOfArrayLike = __webpack_require__(9646);\nvar createProperty = __webpack_require__(2324);\n\nvar $Array = Array;\nvar max = Math.max;\n\nmodule.exports = function (O, start, end) {\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n var result = $Array(max(fin - k, 0));\n for (var n = 0; k < fin; k++, n++) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n};\n\n\n/***/ }),\n\n/***/ 3867:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar arraySlice = __webpack_require__(9794);\n\nvar floor = Math.floor;\n\nvar mergeSort = function (array, comparefn) {\n var length = array.length;\n var middle = floor(length / 2);\n return length < 8 ? insertionSort(array, comparefn) : merge(\n array,\n mergeSort(arraySlice(array, 0, middle), comparefn),\n mergeSort(arraySlice(array, middle), comparefn),\n comparefn\n );\n};\n\nvar insertionSort = function (array, comparefn) {\n var length = array.length;\n var i = 1;\n var element, j;\n\n while (i < length) {\n j = i;\n element = array[i];\n while (j && comparefn(array[j - 1], element) > 0) {\n array[j] = array[--j];\n }\n if (j !== i++) array[j] = element;\n } return array;\n};\n\nvar merge = function (array, left, right, comparefn) {\n var llength = left.length;\n var rlength = right.length;\n var lindex = 0;\n var rindex = 0;\n\n while (lindex < llength || rindex < rlength) {\n array[lindex + rindex] = (lindex < llength && rindex < rlength)\n ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]\n : lindex < llength ? left[lindex++] : right[rindex++];\n } return array;\n};\n\nmodule.exports = mergeSort;\n\n\n/***/ }),\n\n/***/ 7079:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar uncurryThis = __webpack_require__(5968);\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n\n\n/***/ }),\n\n/***/ 1589:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar TO_STRING_TAG_SUPPORT = __webpack_require__(1601);\nvar isCallable = __webpack_require__(6733);\nvar classofRaw = __webpack_require__(7079);\nvar wellKnownSymbol = __webpack_require__(95);\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar $Object = Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n\n\n/***/ }),\n\n/***/ 7081:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar hasOwn = __webpack_require__(8270);\nvar ownKeys = __webpack_require__(4826);\nvar getOwnPropertyDescriptorModule = __webpack_require__(7933);\nvar definePropertyModule = __webpack_require__(1787);\n\nmodule.exports = function (target, source, exceptions) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n }\n};\n\n\n/***/ }),\n\n/***/ 5762:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar DESCRIPTORS = __webpack_require__(7400);\nvar definePropertyModule = __webpack_require__(1787);\nvar createPropertyDescriptor = __webpack_require__(5358);\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\n\n/***/ }),\n\n/***/ 5358:\n/***/ ((module) => {\n\n\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\n\n/***/ }),\n\n/***/ 2324:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar toPropertyKey = __webpack_require__(9310);\nvar definePropertyModule = __webpack_require__(1787);\nvar createPropertyDescriptor = __webpack_require__(5358);\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n\n\n/***/ }),\n\n/***/ 4768:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar isCallable = __webpack_require__(6733);\nvar definePropertyModule = __webpack_require__(1787);\nvar makeBuiltIn = __webpack_require__(6039);\nvar defineGlobalProperty = __webpack_require__(8400);\n\nmodule.exports = function (O, key, value, options) {\n if (!options) options = {};\n var simple = options.enumerable;\n var name = options.name !== undefined ? options.name : key;\n if (isCallable(value)) makeBuiltIn(value, name, options);\n if (options.global) {\n if (simple) O[key] = value;\n else defineGlobalProperty(key, value);\n } else {\n try {\n if (!options.unsafe) delete O[key];\n else if (O[key]) simple = true;\n } catch (error) { /* empty */ }\n if (simple) O[key] = value;\n else definePropertyModule.f(O, key, {\n value: value,\n enumerable: false,\n configurable: !options.nonConfigurable,\n writable: !options.nonWritable\n });\n } return O;\n};\n\n\n/***/ }),\n\n/***/ 8400:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar global = __webpack_require__(9859);\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n\n\n/***/ }),\n\n/***/ 9563:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar tryToString = __webpack_require__(9821);\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (O, P) {\n if (!delete O[P]) throw $TypeError('Cannot delete property ' + tryToString(P) + ' of ' + tryToString(O));\n};\n\n\n/***/ }),\n\n/***/ 7400:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar fails = __webpack_require__(4229);\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n\n\n/***/ }),\n\n/***/ 3777:\n/***/ ((module) => {\n\n\nvar documentAll = typeof document == 'object' && document.all;\n\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nvar IS_HTMLDDA = typeof documentAll == 'undefined' && documentAll !== undefined;\n\nmodule.exports = {\n all: documentAll,\n IS_HTMLDDA: IS_HTMLDDA\n};\n\n\n/***/ }),\n\n/***/ 2635:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar global = __webpack_require__(9859);\nvar isObject = __webpack_require__(5052);\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n\n\n/***/ }),\n\n/***/ 2671:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar userAgent = __webpack_require__(598);\n\nvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\nmodule.exports = !!firefox && +firefox[1];\n\n\n/***/ }),\n\n/***/ 8506:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar UA = __webpack_require__(598);\n\nmodule.exports = /MSIE|Trident/.test(UA);\n\n\n/***/ }),\n\n/***/ 598:\n/***/ ((module) => {\n\n\nmodule.exports = typeof navigator != 'undefined' && String(navigator.userAgent) || '';\n\n\n/***/ }),\n\n/***/ 5884:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar global = __webpack_require__(9859);\nvar userAgent = __webpack_require__(598);\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n\n\n/***/ }),\n\n/***/ 9811:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar userAgent = __webpack_require__(598);\n\nvar webkit = userAgent.match(/AppleWebKit\\/(\\d+)\\./);\n\nmodule.exports = !!webkit && +webkit[1];\n\n\n/***/ }),\n\n/***/ 8791:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar global = __webpack_require__(9859);\nvar uncurryThis = __webpack_require__(5968);\n\nmodule.exports = function (CONSTRUCTOR, METHOD) {\n return uncurryThis(global[CONSTRUCTOR].prototype[METHOD]);\n};\n\n\n/***/ }),\n\n/***/ 3837:\n/***/ ((module) => {\n\n\n// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n\n\n/***/ }),\n\n/***/ 3103:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar global = __webpack_require__(9859);\nvar getOwnPropertyDescriptor = (__webpack_require__(7933).f);\nvar createNonEnumerableProperty = __webpack_require__(5762);\nvar defineBuiltIn = __webpack_require__(4768);\nvar defineGlobalProperty = __webpack_require__(8400);\nvar copyConstructorProperties = __webpack_require__(7081);\nvar isForced = __webpack_require__(6541);\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.dontCallGetSet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || defineGlobalProperty(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.dontCallGetSet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty == typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n defineBuiltIn(target, key, sourceProperty, options);\n }\n};\n\n\n/***/ }),\n\n/***/ 4229:\n/***/ ((module) => {\n\n\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n\n\n/***/ }),\n\n/***/ 7188:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar fails = __webpack_require__(4229);\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-function-prototype-bind -- safe\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n\n\n/***/ }),\n\n/***/ 266:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar NATIVE_BIND = __webpack_require__(7188);\n\nvar call = Function.prototype.call;\n\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n\n\n/***/ }),\n\n/***/ 1805:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar DESCRIPTORS = __webpack_require__(7400);\nvar hasOwn = __webpack_require__(8270);\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n\n\n/***/ }),\n\n/***/ 5968:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar NATIVE_BIND = __webpack_require__(7188);\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n return function () {\n return call.apply(fn, arguments);\n };\n};\n\n\n/***/ }),\n\n/***/ 1333:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar global = __webpack_require__(9859);\nvar isCallable = __webpack_require__(6733);\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n\n\n/***/ }),\n\n/***/ 5300:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar aCallable = __webpack_require__(7111);\nvar isNullOrUndefined = __webpack_require__(9650);\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n\n\n/***/ }),\n\n/***/ 9859:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\nvar check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof __webpack_require__.g == 'object' && __webpack_require__.g) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || this || Function('return this')();\n\n\n/***/ }),\n\n/***/ 8270:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar uncurryThis = __webpack_require__(5968);\nvar toObject = __webpack_require__(2991);\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n\n\n/***/ }),\n\n/***/ 5977:\n/***/ ((module) => {\n\n\nmodule.exports = {};\n\n\n/***/ }),\n\n/***/ 4394:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar DESCRIPTORS = __webpack_require__(7400);\nvar fails = __webpack_require__(4229);\nvar createElement = __webpack_require__(2635);\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n\n\n/***/ }),\n\n/***/ 9337:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar uncurryThis = __webpack_require__(5968);\nvar fails = __webpack_require__(4229);\nvar classof = __webpack_require__(7079);\n\nvar $Object = Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !$Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split(it, '') : $Object(it);\n} : $Object;\n\n\n/***/ }),\n\n/***/ 8511:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar uncurryThis = __webpack_require__(5968);\nvar isCallable = __webpack_require__(6733);\nvar store = __webpack_require__(5353);\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n\n\n/***/ }),\n\n/***/ 6407:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar NATIVE_WEAK_MAP = __webpack_require__(1180);\nvar global = __webpack_require__(9859);\nvar isObject = __webpack_require__(5052);\nvar createNonEnumerableProperty = __webpack_require__(5762);\nvar hasOwn = __webpack_require__(8270);\nvar shared = __webpack_require__(5353);\nvar sharedKey = __webpack_require__(4399);\nvar hiddenKeys = __webpack_require__(5977);\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n /* eslint-disable no-self-assign -- prototype methods protection */\n store.get = store.get;\n store.has = store.has;\n store.set = store.set;\n /* eslint-enable no-self-assign -- prototype methods protection */\n set = function (it, metadata) {\n if (store.has(it)) throw TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n store.set(it, metadata);\n return metadata;\n };\n get = function (it) {\n return store.get(it) || {};\n };\n has = function (it) {\n return store.has(it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n\n\n/***/ }),\n\n/***/ 6733:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar $documentAll = __webpack_require__(3777);\n\nvar documentAll = $documentAll.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = $documentAll.IS_HTMLDDA ? function (argument) {\n return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n return typeof argument == 'function';\n};\n\n\n/***/ }),\n\n/***/ 6541:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar fails = __webpack_require__(4229);\nvar isCallable = __webpack_require__(6733);\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n\n\n/***/ }),\n\n/***/ 9650:\n/***/ ((module) => {\n\n\n// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n return it === null || it === undefined;\n};\n\n\n/***/ }),\n\n/***/ 5052:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar isCallable = __webpack_require__(6733);\nvar $documentAll = __webpack_require__(3777);\n\nvar documentAll = $documentAll.all;\n\nmodule.exports = $documentAll.IS_HTMLDDA ? function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it) || it === documentAll;\n} : function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n\n\n/***/ }),\n\n/***/ 4231:\n/***/ ((module) => {\n\n\nmodule.exports = false;\n\n\n/***/ }),\n\n/***/ 9395:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar getBuiltIn = __webpack_require__(1333);\nvar isCallable = __webpack_require__(6733);\nvar isPrototypeOf = __webpack_require__(1321);\nvar USE_SYMBOL_AS_UID = __webpack_require__(6969);\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n\n\n/***/ }),\n\n/***/ 9646:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar toLength = __webpack_require__(4237);\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n\n\n/***/ }),\n\n/***/ 6039:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar uncurryThis = __webpack_require__(5968);\nvar fails = __webpack_require__(4229);\nvar isCallable = __webpack_require__(6733);\nvar hasOwn = __webpack_require__(8270);\nvar DESCRIPTORS = __webpack_require__(7400);\nvar CONFIGURABLE_FUNCTION_NAME = (__webpack_require__(1805).CONFIGURABLE);\nvar inspectSource = __webpack_require__(8511);\nvar InternalStateModule = __webpack_require__(6407);\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar $String = String;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\nvar stringSlice = uncurryThis(''.slice);\nvar replace = uncurryThis(''.replace);\nvar join = uncurryThis([].join);\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n if (stringSlice($String(name), 0, 7) === 'Symbol(') {\n name = '[' + replace($String(name), /^Symbol\\(([^)]*)\\)/, '$1') + ']';\n }\n if (options && options.getter) name = 'get ' + name;\n if (options && options.setter) name = 'set ' + name;\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });\n else value.name = name;\n }\n if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\n defineProperty(value, 'length', { value: options.arity });\n }\n try {\n if (options && hasOwn(options, 'constructor') && options.constructor) {\n if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });\n // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable\n } else if (value.prototype) value.prototype = undefined;\n } catch (error) { /* empty */ }\n var state = enforceInternalState(value);\n if (!hasOwn(state, 'source')) {\n state.source = join(TEMPLATE, typeof name == 'string' ? name : '');\n } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString');\n\n\n/***/ }),\n\n/***/ 917:\n/***/ ((module) => {\n\n\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `Math.trunc` method\n// https://tc39.es/ecma262/#sec-math.trunc\n// eslint-disable-next-line es/no-math-trunc -- safe\nmodule.exports = Math.trunc || function trunc(x) {\n var n = +x;\n return (n > 0 ? floor : ceil)(n);\n};\n\n\n/***/ }),\n\n/***/ 1787:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\nvar DESCRIPTORS = __webpack_require__(7400);\nvar IE8_DOM_DEFINE = __webpack_require__(4394);\nvar V8_PROTOTYPE_DEFINE_BUG = __webpack_require__(7137);\nvar anObject = __webpack_require__(1176);\nvar toPropertyKey = __webpack_require__(9310);\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw $TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n\n\n/***/ }),\n\n/***/ 7933:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\nvar DESCRIPTORS = __webpack_require__(7400);\nvar call = __webpack_require__(266);\nvar propertyIsEnumerableModule = __webpack_require__(9195);\nvar createPropertyDescriptor = __webpack_require__(5358);\nvar toIndexedObject = __webpack_require__(905);\nvar toPropertyKey = __webpack_require__(9310);\nvar hasOwn = __webpack_require__(8270);\nvar IE8_DOM_DEFINE = __webpack_require__(4394);\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n\n\n/***/ }),\n\n/***/ 8151:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\nvar internalObjectKeys = __webpack_require__(140);\nvar enumBugKeys = __webpack_require__(3837);\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n\n\n/***/ }),\n\n/***/ 894:\n/***/ ((__unused_webpack_module, exports) => {\n\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n\n\n/***/ }),\n\n/***/ 1321:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar uncurryThis = __webpack_require__(5968);\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n\n\n/***/ }),\n\n/***/ 140:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar uncurryThis = __webpack_require__(5968);\nvar hasOwn = __webpack_require__(8270);\nvar toIndexedObject = __webpack_require__(905);\nvar indexOf = (__webpack_require__(9540).indexOf);\nvar hiddenKeys = __webpack_require__(5977);\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n\n\n/***/ }),\n\n/***/ 5632:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar internalObjectKeys = __webpack_require__(140);\nvar enumBugKeys = __webpack_require__(3837);\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n\n\n/***/ }),\n\n/***/ 9195:\n/***/ ((__unused_webpack_module, exports) => {\n\n\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n\n\n/***/ }),\n\n/***/ 2914:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar call = __webpack_require__(266);\nvar isCallable = __webpack_require__(6733);\nvar isObject = __webpack_require__(5052);\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw $TypeError(\"Can't convert object to primitive value\");\n};\n\n\n/***/ }),\n\n/***/ 4826:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar getBuiltIn = __webpack_require__(1333);\nvar uncurryThis = __webpack_require__(5968);\nvar getOwnPropertyNamesModule = __webpack_require__(8151);\nvar getOwnPropertySymbolsModule = __webpack_require__(894);\nvar anObject = __webpack_require__(1176);\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n\n\n/***/ }),\n\n/***/ 9276:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar global = __webpack_require__(9859);\n\nmodule.exports = global;\n\n\n/***/ }),\n\n/***/ 8885:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar isNullOrUndefined = __webpack_require__(9650);\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (isNullOrUndefined(it)) throw $TypeError(\"Can't call method on \" + it);\n return it;\n};\n\n\n/***/ }),\n\n/***/ 4399:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar shared = __webpack_require__(3036);\nvar uid = __webpack_require__(1441);\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n\n\n/***/ }),\n\n/***/ 5353:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar global = __webpack_require__(9859);\nvar defineGlobalProperty = __webpack_require__(8400);\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || defineGlobalProperty(SHARED, {});\n\nmodule.exports = store;\n\n\n/***/ }),\n\n/***/ 3036:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar IS_PURE = __webpack_require__(4231);\nvar store = __webpack_require__(5353);\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.32.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2023 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.32.0/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n\n\n/***/ }),\n\n/***/ 4860:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = __webpack_require__(5884);\nvar fails = __webpack_require__(4229);\nvar global = __webpack_require__(9859);\n\nvar $String = global.String;\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will,\n // of course, fail.\n return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n\n\n/***/ }),\n\n/***/ 3231:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar toIntegerOrInfinity = __webpack_require__(3329);\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n\n\n/***/ }),\n\n/***/ 905:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = __webpack_require__(9337);\nvar requireObjectCoercible = __webpack_require__(8885);\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n\n\n/***/ }),\n\n/***/ 3329:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar trunc = __webpack_require__(917);\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- NaN check\n return number !== number || number === 0 ? 0 : trunc(number);\n};\n\n\n/***/ }),\n\n/***/ 4237:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar toIntegerOrInfinity = __webpack_require__(3329);\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n\n\n/***/ }),\n\n/***/ 2991:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar requireObjectCoercible = __webpack_require__(8885);\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return $Object(requireObjectCoercible(argument));\n};\n\n\n/***/ }),\n\n/***/ 2066:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar call = __webpack_require__(266);\nvar isObject = __webpack_require__(5052);\nvar isSymbol = __webpack_require__(9395);\nvar getMethod = __webpack_require__(5300);\nvar ordinaryToPrimitive = __webpack_require__(2914);\nvar wellKnownSymbol = __webpack_require__(95);\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw $TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n\n\n/***/ }),\n\n/***/ 9310:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar toPrimitive = __webpack_require__(2066);\nvar isSymbol = __webpack_require__(9395);\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n\n\n/***/ }),\n\n/***/ 1601:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar wellKnownSymbol = __webpack_require__(95);\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n\n\n/***/ }),\n\n/***/ 3326:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar classof = __webpack_require__(1589);\n\nvar $String = String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n return $String(argument);\n};\n\n\n/***/ }),\n\n/***/ 9821:\n/***/ ((module) => {\n\n\nvar $String = String;\n\nmodule.exports = function (argument) {\n try {\n return $String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n\n\n/***/ }),\n\n/***/ 1441:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar uncurryThis = __webpack_require__(5968);\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n\n\n/***/ }),\n\n/***/ 6969:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = __webpack_require__(4860);\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n\n\n/***/ }),\n\n/***/ 7137:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar DESCRIPTORS = __webpack_require__(7400);\nvar fails = __webpack_require__(4229);\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype != 42;\n});\n\n\n/***/ }),\n\n/***/ 1180:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar global = __webpack_require__(9859);\nvar isCallable = __webpack_require__(6733);\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n\n\n/***/ }),\n\n/***/ 95:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar global = __webpack_require__(9859);\nvar shared = __webpack_require__(3036);\nvar hasOwn = __webpack_require__(8270);\nvar uid = __webpack_require__(1441);\nvar NATIVE_SYMBOL = __webpack_require__(4860);\nvar USE_SYMBOL_AS_UID = __webpack_require__(6969);\n\nvar Symbol = global.Symbol;\nvar WellKnownSymbolsStore = shared('wks');\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name)) {\n WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n ? Symbol[name]\n : createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n\n\n/***/ }),\n\n/***/ 3430:\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar $ = __webpack_require__(3103);\nvar uncurryThis = __webpack_require__(5968);\nvar aCallable = __webpack_require__(7111);\nvar toObject = __webpack_require__(2991);\nvar lengthOfArrayLike = __webpack_require__(9646);\nvar deletePropertyOrThrow = __webpack_require__(9563);\nvar toString = __webpack_require__(3326);\nvar fails = __webpack_require__(4229);\nvar internalSort = __webpack_require__(3867);\nvar arrayMethodIsStrict = __webpack_require__(6038);\nvar FF = __webpack_require__(2671);\nvar IE_OR_EDGE = __webpack_require__(8506);\nvar V8 = __webpack_require__(5884);\nvar WEBKIT = __webpack_require__(9811);\n\nvar test = [];\nvar nativeSort = uncurryThis(test.sort);\nvar push = uncurryThis(test.push);\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n test.sort(null);\n});\n// Old WebKit\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\nvar STABLE_SORT = !fails(function () {\n // feature detection can be too slow, so check engines versions\n if (V8) return V8 < 70;\n if (FF && FF > 3) return;\n if (IE_OR_EDGE) return true;\n if (WEBKIT) return WEBKIT < 603;\n\n var result = '';\n var code, chr, value, index;\n\n // generate an array with more 512 elements (Chakra and old V8 fails only in this case)\n for (code = 65; code < 76; code++) {\n chr = String.fromCharCode(code);\n\n switch (code) {\n case 66: case 69: case 70: case 72: value = 3; break;\n case 68: case 71: value = 4; break;\n default: value = 2;\n }\n\n for (index = 0; index < 47; index++) {\n test.push({ k: chr + index, v: value });\n }\n }\n\n test.sort(function (a, b) { return b.v - a.v; });\n\n for (index = 0; index < test.length; index++) {\n chr = test[index].k.charAt(0);\n if (result.charAt(result.length - 1) !== chr) result += chr;\n }\n\n return result !== 'DGBEFHACIJK';\n});\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;\n\nvar getSortCompare = function (comparefn) {\n return function (x, y) {\n if (y === undefined) return -1;\n if (x === undefined) return 1;\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\n return toString(x) > toString(y) ? 1 : -1;\n };\n};\n\n// `Array.prototype.sort` method\n// https://tc39.es/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n sort: function sort(comparefn) {\n if (comparefn !== undefined) aCallable(comparefn);\n\n var array = toObject(this);\n\n if (STABLE_SORT) return comparefn === undefined ? nativeSort(array) : nativeSort(array, comparefn);\n\n var items = [];\n var arrayLength = lengthOfArrayLike(array);\n var itemsLength, index;\n\n for (index = 0; index < arrayLength; index++) {\n if (index in array) push(items, array[index]);\n }\n\n internalSort(items, getSortCompare(comparefn));\n\n itemsLength = lengthOfArrayLike(items);\n index = 0;\n\n while (index < itemsLength) array[index] = items[index++];\n while (index < arrayLength) deletePropertyOrThrow(array, index++);\n\n return array;\n }\n});\n\n\n/***/ }),\n\n/***/ 4769:\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {\n\n\nvar $ = __webpack_require__(3103);\nvar toObject = __webpack_require__(2991);\nvar nativeKeys = __webpack_require__(5632);\nvar fails = __webpack_require__(4229);\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n keys: function keys(it) {\n return nativeKeys(toObject(it));\n }\n});\n\n\n/***/ }),\n\n/***/ 1388:\n/***/ ((module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(272);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2609);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* Buttons styles start */\r\n\r\nbutton#excalibur-play {\r\n display: inline-block;\r\n position: relative;\r\n z-index: 999;\r\n border-radius: 6px;\r\n border: none;\r\n /*border: 3px solid;\r\n border-color: white;\r\n box-shadow: 0 0 10px #ccc;*/\r\n padding: 1rem 1.5rem 1rem 4rem;\r\n margin: 0;\r\n text-decoration: none;\r\n background: #00b233;\r\n color: #ffffff;\r\n font-family: sans-serif;\r\n font-size: 2rem;\r\n white-space: nowrap;\r\n line-height: 1;\r\n cursor: pointer;\r\n text-align: center;\r\n transition: background 250ms ease-in-out, transform 150ms ease;\r\n -webkit-appearance: none;\r\n -moz-appearance: none;\r\n\r\n -webkit-animation: excalibur-button-fadein 200ms; /* Safari, Chrome and Opera > 12.1 */\r\n -moz-animation: excalibur-button-fadein 200ms; /* Firefox < 16 */\r\n -ms-animation: excalibur-button-fadein 200ms; /* Internet Explorer */\r\n -o-animation: excalibur-button-fadein 200ms; /* Opera < 12.1 */\r\n animation: excalibur-button-fadein 200ms;\r\n}\r\n\r\n/*\r\nbutton#excalibur-play {\r\n display: none;\r\n}*/\r\n\r\nbutton#excalibur-play:after {\r\n position: absolute;\r\n content: '';\r\n border: 8px solid;\r\n border-color: transparent transparent transparent white;\r\n left: 35px;\r\n top: 24px;\r\n width: 0;\r\n height: 0;\r\n}\r\n\r\nbutton#excalibur-play:before {\r\n position: absolute;\r\n content: '';\r\n border: 3px solid;\r\n left: 19px;\r\n top: 14px;\r\n border-radius: 20px;\r\n width: 30px;\r\n height: 30px;\r\n}\r\n\r\nbutton#excalibur-play:hover,\r\nbutton#excalibur-play:focus {\r\n background: #00982c;\r\n}\r\n\r\nbutton#excalibur-play:focus {\r\n outline: 1px solid #fff;\r\n outline-offset: -4px;\r\n}\r\n\r\nbutton#excalibur-play:active {\r\n transform: scale(0.99);\r\n}\r\n\r\n@keyframes excalibur-button-fadein {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n/* Firefox < 16 */\r\n@-moz-keyframes excalibur-button-fadein {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n/* Safari, Chrome and Opera > 12.1 */\r\n@-webkit-keyframes excalibur-button-fadein {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n/* Internet Explorer */\r\n@-ms-keyframes excalibur-button-fadein {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n/* Opera < 12.1 */\r\n@-o-keyframes excalibur-button-fadein {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./Loader.css\"],\"names\":[],\"mappings\":\"AAAA,yBAAyB;;AAEzB;EACE,qBAAqB;EACrB,kBAAkB;EAClB,YAAY;EACZ,kBAAkB;EAClB,YAAY;EACZ;;+BAE6B;EAC7B,8BAA8B;EAC9B,SAAS;EACT,qBAAqB;EACrB,mBAAmB;EACnB,cAAc;EACd,uBAAuB;EACvB,eAAe;EACf,mBAAmB;EACnB,cAAc;EACd,eAAe;EACf,kBAAkB;EAClB,8DAA8D;EAC9D,wBAAwB;EACxB,qBAAqB;;EAErB,gDAAgD,EAAE,oCAAoC;EACtF,6CAA6C,EAAE,iBAAiB;EAChE,4CAA4C,EAAE,sBAAsB;EACpE,2CAA2C,EAAE,iBAAiB;EAC9D,wCAAwC;AAC1C;;AAEA;;;EAGE;;AAEF;EACE,kBAAkB;EAClB,WAAW;EACX,iBAAiB;EACjB,uDAAuD;EACvD,UAAU;EACV,SAAS;EACT,QAAQ;EACR,SAAS;AACX;;AAEA;EACE,kBAAkB;EAClB,WAAW;EACX,iBAAiB;EACjB,UAAU;EACV,SAAS;EACT,mBAAmB;EACnB,WAAW;EACX,YAAY;AACd;;AAEA;;EAEE,mBAAmB;AACrB;;AAEA;EACE,uBAAuB;EACvB,oBAAoB;AACtB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE;IACE,UAAU;EACZ;EACA;IACE,UAAU;EACZ;AACF;;AAEA,iBAAiB;AACjB;EACE;IACE,UAAU;EACZ;EACA;IACE,UAAU;EACZ;AACF;;AAEA,oCAAoC;AACpC;EACE;IACE,UAAU;EACZ;EACA;IACE,UAAU;EACZ;AACF;;AAEA,sBAAsB;AACtB;EACE;IACE,UAAU;EACZ;EACA;IACE,UAAU;EACZ;AACF;;AAEA,iBAAiB;AACjB;EACE;IACE,UAAU;EACZ;EACA;IACE,UAAU;EACZ;AACF\",\"sourcesContent\":[\"/* Buttons styles start */\\r\\n\\r\\nbutton#excalibur-play {\\r\\n display: inline-block;\\r\\n position: relative;\\r\\n z-index: 999;\\r\\n border-radius: 6px;\\r\\n border: none;\\r\\n /*border: 3px solid;\\r\\n border-color: white;\\r\\n box-shadow: 0 0 10px #ccc;*/\\r\\n padding: 1rem 1.5rem 1rem 4rem;\\r\\n margin: 0;\\r\\n text-decoration: none;\\r\\n background: #00b233;\\r\\n color: #ffffff;\\r\\n font-family: sans-serif;\\r\\n font-size: 2rem;\\r\\n white-space: nowrap;\\r\\n line-height: 1;\\r\\n cursor: pointer;\\r\\n text-align: center;\\r\\n transition: background 250ms ease-in-out, transform 150ms ease;\\r\\n -webkit-appearance: none;\\r\\n -moz-appearance: none;\\r\\n\\r\\n -webkit-animation: excalibur-button-fadein 200ms; /* Safari, Chrome and Opera > 12.1 */\\r\\n -moz-animation: excalibur-button-fadein 200ms; /* Firefox < 16 */\\r\\n -ms-animation: excalibur-button-fadein 200ms; /* Internet Explorer */\\r\\n -o-animation: excalibur-button-fadein 200ms; /* Opera < 12.1 */\\r\\n animation: excalibur-button-fadein 200ms;\\r\\n}\\r\\n\\r\\n/*\\r\\nbutton#excalibur-play {\\r\\n display: none;\\r\\n}*/\\r\\n\\r\\nbutton#excalibur-play:after {\\r\\n position: absolute;\\r\\n content: '';\\r\\n border: 8px solid;\\r\\n border-color: transparent transparent transparent white;\\r\\n left: 35px;\\r\\n top: 24px;\\r\\n width: 0;\\r\\n height: 0;\\r\\n}\\r\\n\\r\\nbutton#excalibur-play:before {\\r\\n position: absolute;\\r\\n content: '';\\r\\n border: 3px solid;\\r\\n left: 19px;\\r\\n top: 14px;\\r\\n border-radius: 20px;\\r\\n width: 30px;\\r\\n height: 30px;\\r\\n}\\r\\n\\r\\nbutton#excalibur-play:hover,\\r\\nbutton#excalibur-play:focus {\\r\\n background: #00982c;\\r\\n}\\r\\n\\r\\nbutton#excalibur-play:focus {\\r\\n outline: 1px solid #fff;\\r\\n outline-offset: -4px;\\r\\n}\\r\\n\\r\\nbutton#excalibur-play:active {\\r\\n transform: scale(0.99);\\r\\n}\\r\\n\\r\\n@keyframes excalibur-button-fadein {\\r\\n from {\\r\\n opacity: 0;\\r\\n }\\r\\n to {\\r\\n opacity: 1;\\r\\n }\\r\\n}\\r\\n\\r\\n/* Firefox < 16 */\\r\\n@-moz-keyframes excalibur-button-fadein {\\r\\n from {\\r\\n opacity: 0;\\r\\n }\\r\\n to {\\r\\n opacity: 1;\\r\\n }\\r\\n}\\r\\n\\r\\n/* Safari, Chrome and Opera > 12.1 */\\r\\n@-webkit-keyframes excalibur-button-fadein {\\r\\n from {\\r\\n opacity: 0;\\r\\n }\\r\\n to {\\r\\n opacity: 1;\\r\\n }\\r\\n}\\r\\n\\r\\n/* Internet Explorer */\\r\\n@-ms-keyframes excalibur-button-fadein {\\r\\n from {\\r\\n opacity: 0;\\r\\n }\\r\\n to {\\r\\n opacity: 1;\\r\\n }\\r\\n}\\r\\n\\r\\n/* Opera < 12.1 */\\r\\n@-o-keyframes excalibur-button-fadein {\\r\\n from {\\r\\n opacity: 0;\\r\\n }\\r\\n to {\\r\\n opacity: 1;\\r\\n }\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n/***/ }),\n\n/***/ 7379:\n/***/ ((module, __webpack_exports__, __webpack_require__) => {\n\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(272);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2609);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\r\n#ex-toast-container {\r\n position: absolute;\r\n height: 0;\r\n min-width: 50%;\r\n left: 50%;\r\n top: 0;\r\n}\r\n\r\n.ex-toast-message {\r\n left: -50%;\r\n position: relative;\r\n display: flex;\r\n justify-content: space-between;\r\n\r\n\r\n padding: 10px;\r\n margin-top: 5px;\r\n font-size: 18px;\r\n font-family: sans-serif;\r\n border-radius: 6px;\r\n border: 3px solid #b7b779;\r\n background-color: rgb(253, 253, 192);\r\n}\r\n\r\n\r\n.ex-toast-message button {\r\n align-self: flex-start;\r\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./Util/Toaster.css\"],\"names\":[],\"mappings\":\";AACA;EACE,kBAAkB;EAClB,SAAS;EACT,cAAc;EACd,SAAS;EACT,MAAM;AACR;;AAEA;EACE,UAAU;EACV,kBAAkB;EAClB,aAAa;EACb,8BAA8B;;;EAG9B,aAAa;EACb,eAAe;EACf,eAAe;EACf,uBAAuB;EACvB,kBAAkB;EAClB,yBAAyB;EACzB,oCAAoC;AACtC;;;AAGA;EACE,sBAAsB;AACxB\",\"sourcesContent\":[\"\\r\\n#ex-toast-container {\\r\\n position: absolute;\\r\\n height: 0;\\r\\n min-width: 50%;\\r\\n left: 50%;\\r\\n top: 0;\\r\\n}\\r\\n\\r\\n.ex-toast-message {\\r\\n left: -50%;\\r\\n position: relative;\\r\\n display: flex;\\r\\n justify-content: space-between;\\r\\n\\r\\n\\r\\n padding: 10px;\\r\\n margin-top: 5px;\\r\\n font-size: 18px;\\r\\n font-family: sans-serif;\\r\\n border-radius: 6px;\\r\\n border: 3px solid #b7b779;\\r\\n background-color: rgb(253, 253, 192);\\r\\n}\\r\\n\\r\\n\\r\\n.ex-toast-message button {\\r\\n align-self: flex-start;\\r\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n/***/ }),\n\n/***/ 2609:\n/***/ ((module) => {\n\n\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};\n\n/***/ }),\n\n/***/ 272:\n/***/ ((module) => {\n\n\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n return [content].concat([sourceMapping]).join(\"\\n\");\n }\n return [content].join(\"\\n\");\n};\n\n/***/ })\n\n/******/ });\n/************************************************************************/\n/******/ // The module cache\n/******/ var __webpack_module_cache__ = {};\n/******/ \n/******/ // The require function\n/******/ function __webpack_require__(moduleId) {\n/******/ \t// Check if module is in cache\n/******/ \tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \tif (cachedModule !== undefined) {\n/******/ \t\treturn cachedModule.exports;\n/******/ \t}\n/******/ \t// Create a new module (and put it into the cache)\n/******/ \tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\tid: moduleId,\n/******/ \t\t// no module.loaded needed\n/******/ \t\texports: {}\n/******/ \t};\n/******/ \n/******/ \t// Execute the module function\n/******/ \t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/ \n/******/ \t// Return the exports of the module\n/******/ \treturn module.exports;\n/******/ }\n/******/ \n/************************************************************************/\n/******/ /* webpack/runtime/compat get default export */\n/******/ (() => {\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = (module) => {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t() => (module['default']) :\n/******/ \t\t\t() => (module);\n/******/ \t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\treturn getter;\n/******/ \t};\n/******/ })();\n/******/ \n/******/ /* webpack/runtime/define property getters */\n/******/ (() => {\n/******/ \t// define getter functions for harmony exports\n/******/ \t__webpack_require__.d = (exports, definition) => {\n/******/ \t\tfor(var key in definition) {\n/******/ \t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t};\n/******/ })();\n/******/ \n/******/ /* webpack/runtime/global */\n/******/ (() => {\n/******/ \t__webpack_require__.g = (function() {\n/******/ \t\tif (typeof globalThis === 'object') return globalThis;\n/******/ \t\ttry {\n/******/ \t\t\treturn this || new Function('return this')();\n/******/ \t\t} catch (e) {\n/******/ \t\t\tif (typeof window === 'object') return window;\n/******/ \t\t}\n/******/ \t})();\n/******/ })();\n/******/ \n/******/ /* webpack/runtime/hasOwnProperty shorthand */\n/******/ (() => {\n/******/ \t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ })();\n/******/ \n/******/ /* webpack/runtime/make namespace object */\n/******/ (() => {\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = (exports) => {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/ })();\n/******/ \n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n(() => {\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n fWn: () => (/* reexport */ ActionContext),\n Ia8: () => (/* reexport */ ActionQueue),\n rqv: () => (/* reexport */ ActionSequence),\n hLI: () => (/* reexport */ ActionsComponent),\n yyv: () => (/* reexport */ ActionsSystem),\n tX5: () => (/* reexport */ ActivateEvent),\n vtX: () => (/* reexport */ Actor),\n r7K: () => (/* reexport */ AddedComponent),\n lCh: () => (/* reexport */ AddedEntity),\n cE4: () => (/* reexport */ AffineMatrix),\n fwF: () => (/* reexport */ Animation),\n sce: () => (/* reexport */ AnimationDirection),\n AQ6: () => (/* reexport */ AnimationEvents),\n _c7: () => (/* reexport */ AnimationStrategy),\n KUs: () => (/* reexport */ ArcadeSolver),\n Ajp: () => (/* reexport */ AudioContextFactory),\n dkO: () => (/* reexport */ Axes),\n RDh: () => (/* reexport */ Axis),\n _H9: () => (/* reexport */ BaseAlign),\n mxs: () => (/* reexport */ Blink),\n OmD: () => (/* reexport */ BodyComponent),\n kBf: () => (/* reexport */ BoundingBox),\n C4F: () => (/* reexport */ BroadphaseStrategy),\n NQt: () => (/* reexport */ BrowserComponent),\n JjN: () => (/* reexport */ BrowserEvents),\n EK_: () => (/* reexport */ Buttons),\n V1s: () => (/* reexport */ Camera),\n xHm: () => (/* reexport */ CameraEvents),\n Xz7: () => (/* reexport */ Canvas),\n Cdc: () => (/* reexport */ Circle),\n FKn: () => (/* reexport */ CircleCollider),\n SUY: () => (/* reexport */ Clock),\n ab2: () => (/* reexport */ ClosestLine),\n GfZ: () => (/* reexport */ ClosestLineJumpTable),\n YMS: () => (/* reexport */ Collider),\n oyv: () => (/* reexport */ ColliderComponent),\n aUb: () => (/* reexport */ CollisionContact),\n SdD: () => (/* reexport */ CollisionEndEvent),\n JUv: () => (/* reexport */ CollisionGroup),\n jEj: () => (/* reexport */ CollisionGroupManager),\n TFq: () => (/* reexport */ CollisionJumpTable),\n HDU: () => (/* reexport */ CollisionPostSolveEvent),\n R_y: () => (/* reexport */ CollisionPreSolveEvent),\n ydN: () => (/* reexport */ CollisionResolutionStrategy),\n t50: () => (/* reexport */ CollisionStartEvent),\n s$$: () => (/* reexport */ CollisionSystem),\n v2G: () => (/* reexport */ CollisionType),\n Ilk: () => (/* reexport */ Color),\n s9i: () => (/* reexport */ ColorBlindFlags),\n dxL: () => (/* reexport */ ColorBlindnessMode),\n LLX: () => (/* reexport */ ColorBlindnessPostProcessor),\n wA2: () => (/* reexport */ Component),\n R_p: () => (/* reexport */ CompositeCollider),\n IQ$: () => (/* reexport */ Configurable),\n I5F: () => (/* reexport */ ConsoleAppender),\n X8$: () => (/* reexport */ ContactConstraintPoint),\n FR6: () => (/* reexport */ ContactEndEvent),\n U8o: () => (/* reexport */ ContactStartEvent),\n kbG: () => (/* reexport */ CoordPlane),\n iS_: () => (/* reexport */ DeactivateEvent),\n cGG: () => (/* reexport */ Debug),\n RPN: () => (/* reexport */ DebugGraphicsComponent),\n skb: () => (/* reexport */ DebugSystem),\n SLU: () => (/* reexport */ DebugText),\n RdJ: () => (/* reexport */ DegreeOfFreedom),\n cNu: () => (/* reexport */ Delay),\n gU7: () => (/* reexport */ Detector),\n LSk: () => (/* reexport */ Die),\n Nmp: () => (/* reexport */ Direction),\n d1Y: () => (/* reexport */ DisplayMode),\n xrL: () => (/* reexport */ DynamicTree),\n sRW: () => (/* reexport */ DynamicTreeCollisionProcessor),\n cmV: () => (/* binding */ EX_VERSION),\n qWz: () => (/* reexport */ EaseBy),\n N0Q: () => (/* reexport */ EaseTo),\n q8b: () => (/* reexport */ EasingFunctions),\n ynB: () => (/* reexport */ EdgeCollider),\n jT9: () => (/* reexport */ ElasticToActorStrategy),\n wAz: () => (/* reexport */ EmitterType),\n D4V: () => (/* reexport */ Engine),\n NLr: () => (/* reexport */ EngineEvents),\n N6H: () => (/* reexport */ EnterTriggerEvent),\n W1A: () => (/* reexport */ EnterViewPortEvent),\n JHW: () => (/* reexport */ Entity),\n ZZ$: () => (/* reexport */ EntityEvents),\n v2K: () => (/* reexport */ EntityManager),\n pBf: () => (/* reexport */ EventDispatcher),\n vpe: () => (/* reexport */ EventEmitter),\n GMl: () => (/* reexport */ EventTypes),\n zW2: () => (/* reexport */ Events_namespaceObject),\n B0K: () => (/* reexport */ ExResponse),\n Nv7: () => (/* reexport */ ExcaliburGraphicsContext2DCanvas),\n C_p: () => (/* reexport */ ExcaliburGraphicsContextWebGL),\n MUA: () => (/* reexport */ ExitTriggerEvent),\n xqU: () => (/* reexport */ ExitViewPortEvent),\n pTp: () => (/* reexport */ Fade),\n vUK: () => (/* reexport */ Flags),\n j9l: () => (/* reexport */ Follow),\n Zxw: () => (/* reexport */ Font),\n v51: () => (/* reexport */ FontCache),\n Hdx: () => (/* reexport */ FontStyle),\n Z$d: () => (/* reexport */ FontUnit),\n iqV: () => (/* reexport */ FpsSampler),\n o$7: () => (/* reexport */ FrameStats),\n olM: () => (/* reexport */ Future),\n Zm$: () => (/* reexport */ GameEvent),\n $QH: () => (/* reexport */ GameStartEvent),\n i78: () => (/* reexport */ GameStopEvent),\n nJg: () => (/* reexport */ Gamepad),\n h6u: () => (/* reexport */ GamepadAxisEvent),\n hts: () => (/* reexport */ GamepadButtonEvent),\n j88: () => (/* reexport */ GamepadConnectEvent),\n VME: () => (/* reexport */ GamepadDisconnectEvent),\n fy2: () => (/* reexport */ Gamepads),\n nt: () => (/* reexport */ Gif),\n Ukr: () => (/* reexport */ GlobalCoordinates),\n zsu: () => (/* reexport */ Graphic),\n oA6: () => (/* reexport */ GraphicsComponent),\n TVh: () => (/* reexport */ GraphicsGroup),\n TwZ: () => (/* reexport */ GraphicsLayer),\n GTT: () => (/* reexport */ GraphicsLayers),\n xxj: () => (/* reexport */ GraphicsSystem),\n XdK: () => (/* reexport */ HiddenEvent),\n Jmb: () => (/* reexport */ ImageFiltering),\n cXo: () => (/* reexport */ ImageSource),\n Dm5: () => (/* reexport */ InitializeEvent),\n IIB: () => (/* reexport */ Input_Index_namespaceObject),\n ebW: () => (/* reexport */ InputMapper),\n zI0: () => (/* reexport */ Integrator),\n LYD: () => (/* reexport */ IsometricEntityComponent),\n cEG: () => (/* reexport */ IsometricEntitySystem),\n SEl: () => (/* reexport */ IsometricMap),\n t9V: () => (/* reexport */ IsometricTile),\n ez5: () => (/* reexport */ KeyEvent),\n N1d: () => (/* reexport */ Keyboard),\n R8U: () => (/* reexport */ Keys),\n SKZ: () => (/* reexport */ KillEvent),\n __J: () => (/* reexport */ Label),\n RI$: () => (/* reexport */ LimitCameraBoundsStrategy),\n x12: () => (/* reexport */ Line),\n ccz: () => (/* reexport */ LineSegment),\n aNw: () => (/* reexport */ Loader),\n XrL: () => (/* reexport */ LoaderEvents),\n xwn: () => (/* reexport */ LockCameraToActorAxisStrategy),\n dNK: () => (/* reexport */ LockCameraToActorStrategy),\n ini: () => (/* reexport */ LogLevel),\n YdH: () => (/* reexport */ Logger),\n F5T: () => (/* reexport */ Material),\n y3G: () => (/* reexport */ Matrix),\n l57: () => (/* reexport */ MatrixLocations),\n xn0: () => (/* reexport */ MediaEvent),\n t2V: () => (/* reexport */ Meet),\n uxB: () => (/* reexport */ MotionComponent),\n cpd: () => (/* reexport */ MotionSystem),\n fiy: () => (/* reexport */ MoveBy),\n $XZ: () => (/* reexport */ MoveTo),\n UG6: () => (/* reexport */ NativePointerButton),\n uqK: () => (/* reexport */ NativeSoundEvent),\n STE: () => (/* reexport */ NativeSoundProcessedEvent),\n y$z: () => (/* reexport */ Observable),\n mAD: () => (/* reexport */ OffscreenSystem),\n sOq: () => (/* reexport */ Pair),\n hUw: () => (/* reexport */ ParallaxComponent),\n _0G: () => (/* reexport */ ParallelActions),\n Sqs: () => (/* reexport */ ParseGif),\n hpZ: () => (/* reexport */ Particle),\n Vol: () => (/* reexport */ ParticleEmitter),\n vYX: () => (/* reexport */ ParticleTransform),\n wIZ: () => (/* reexport */ Physics),\n cBi: () => (/* reexport */ PhysicsStats),\n c30: () => (/* reexport */ PhysicsWorld),\n MPV: () => (/* reexport */ PointerButton),\n RFv: () => (/* reexport */ PointerComponent),\n Ux6: () => (/* reexport */ PointerEvent),\n rxy: () => (/* reexport */ PointerEventReceiver),\n I$c: () => (/* reexport */ PointerScope),\n kfC: () => (/* reexport */ PointerSystem),\n VjY: () => (/* reexport */ PointerType),\n mgq: () => (/* reexport */ Polygon),\n YVA: () => (/* reexport */ PolygonCollider),\n Kgp: () => (/* reexport */ Pool),\n HH$: () => (/* reexport */ PostCollisionEvent),\n M_d: () => (/* reexport */ PostDebugDrawEvent),\n rgh: () => (/* reexport */ PostDrawEvent),\n Ra6: () => (/* reexport */ PostFrameEvent),\n KhR: () => (/* reexport */ PostKillEvent),\n BS5: () => (/* reexport */ PostUpdateEvent),\n xhz: () => (/* reexport */ PreCollisionEvent),\n xOq: () => (/* reexport */ PreDebugDrawEvent),\n a9j: () => (/* reexport */ PreDrawEvent),\n bHk: () => (/* reexport */ PreFrameEvent),\n CgK: () => (/* reexport */ PreKillEvent),\n cuY: () => (/* reexport */ PreUpdateEvent),\n kvE: () => (/* reexport */ Projection),\n SBu: () => (/* reexport */ QuadIndexBuffer),\n AE_: () => (/* reexport */ Query),\n ctO: () => (/* reexport */ QueryManager),\n OLH: () => (/* reexport */ RadiusAroundActorStrategy),\n kky: () => (/* reexport */ Random),\n nSF: () => (/* reexport */ Raster),\n zHn: () => (/* reexport */ Ray),\n zwx: () => (/* reexport */ RealisticSolver),\n AeJ: () => (/* reexport */ Rectangle),\n hLz: () => (/* reexport */ RemovedComponent),\n D9g: () => (/* reexport */ RemovedEntity),\n wA: () => (/* reexport */ Repeat),\n jhr: () => (/* reexport */ RepeatForever),\n GVs: () => (/* reexport */ Resolution),\n _zO: () => (/* reexport */ Resource),\n LXZ: () => (/* reexport */ ResourceEvents),\n w6$: () => (/* reexport */ RotateBy),\n mhV: () => (/* reexport */ RotateTo),\n MOD: () => (/* reexport */ RotationType),\n kwd: () => (/* reexport */ ScaleBy),\n Lmr: () => (/* reexport */ ScaleTo),\n xsS: () => (/* reexport */ Scene),\n K5l: () => (/* reexport */ SceneEvents),\n lLr: () => (/* reexport */ Screen),\n Z$r: () => (/* reexport */ ScreenAppender),\n IXb: () => (/* reexport */ ScreenElement),\n SGH: () => (/* reexport */ ScreenShader),\n SMj: () => (/* reexport */ ScrollPreventionMode),\n L34: () => (/* reexport */ Semaphore),\n exe: () => (/* reexport */ Shader),\n bnF: () => (/* reexport */ Shape),\n MFA: () => (/* reexport */ Side),\n $uU: () => (/* reexport */ Sound),\n Sap: () => (/* reexport */ SoundEvents),\n jyi: () => (/* reexport */ Sprite),\n E03: () => (/* reexport */ SpriteFont),\n V6q: () => (/* reexport */ SpriteSheet),\n rg2: () => (/* reexport */ StandardClock),\n DVW: () => (/* reexport */ StateMachine),\n nVo: () => (/* reexport */ StrategyContainer),\n F6N: () => (/* reexport */ Stream),\n xP7: () => (/* reexport */ System),\n Odq: () => (/* reexport */ SystemManager),\n Zif: () => (/* reexport */ SystemType),\n ZGJ: () => (/* reexport */ TagComponent),\n MJk: () => (/* reexport */ TestClock),\n xvT: () => (/* reexport */ Text),\n PHM: () => (/* reexport */ TextAlign),\n dpR: () => (/* reexport */ TextureLoader),\n n9L: () => (/* reexport */ Tile),\n KwO: () => (/* reexport */ TileMap),\n SxM: () => (/* reexport */ TileMapEvents),\n B7y: () => (/* reexport */ Timer),\n x7r: () => (/* reexport */ Toaster),\n wx7: () => (/* reexport */ Transform),\n Uvn: () => (/* reexport */ TransformComponent),\n OFT: () => (/* reexport */ TreeNode),\n xzN: () => (/* reexport */ Trigger),\n CcZ: () => (/* reexport */ TriggerEvents),\n M5Z: () => (/* reexport */ TwoPI),\n ZrN: () => (/* reexport */ Util_Index_namespaceObject),\n OWs: () => (/* reexport */ Vector),\n dF9: () => (/* reexport */ VectorView),\n oZy: () => (/* reexport */ VertexBuffer),\n rD2: () => (/* reexport */ VertexLayout),\n VHo: () => (/* reexport */ VisibleEvent),\n ohE: () => (/* reexport */ WebAudio),\n R$E: () => (/* reexport */ WebAudioInstance),\n xQN: () => (/* reexport */ WheelDeltaMode),\n AdJ: () => (/* reexport */ WheelEvent),\n q3I: () => (/* reexport */ World),\n Pab: () => (/* reexport */ canonicalizeAngle),\n uZ5: () => (/* reexport */ clamp),\n McK: () => (/* reexport */ createId),\n F9c: () => (/* reexport */ frac),\n k0b: () => (/* reexport */ hasGraphicsTick),\n hnT: () => (/* reexport */ hasOnInitialize),\n RSJ: () => (/* reexport */ hasOnPostUpdate),\n Mku: () => (/* reexport */ hasOnPreUpdate),\n h90: () => (/* reexport */ hasPostDraw),\n rms: () => (/* reexport */ hasPreDraw),\n ErP: () => (/* reexport */ has_initialize),\n aVg: () => (/* reexport */ has_postupdate),\n lPc: () => (/* reexport */ has_preupdate),\n Z8E: () => (/* reexport */ isAddedComponent),\n _N2: () => (/* reexport */ isAddedSystemEntity),\n yFn: () => (/* reexport */ isRemoveSystemEntity),\n lNv: () => (/* reexport */ isRemovedComponent),\n cu9: () => (/* reexport */ isScreenElement),\n MZQ: () => (/* reexport */ maxMessages),\n FUM: () => (/* reexport */ obsolete),\n BxR: () => (/* reexport */ pixelSnapEpsilon),\n vdf: () => (/* reexport */ randomInRange),\n iaL: () => (/* reexport */ randomIntInRange),\n w6H: () => (/* reexport */ range),\n Q4c: () => (/* reexport */ resetObsoleteCounter),\n Xxe: () => (/* reexport */ sign),\n Uxb: () => (/* reexport */ toDegrees),\n Yr5: () => (/* reexport */ toRadians),\n Bhw: () => (/* reexport */ vec),\n yOA: () => (/* reexport */ webgl_util_namespaceObject)\n});\n\n// NAMESPACE OBJECT: ./Events.ts\nvar Events_namespaceObject = {};\n__webpack_require__.r(Events_namespaceObject);\n__webpack_require__.d(Events_namespaceObject, {\n ActivateEvent: () => (ActivateEvent),\n CollisionEndEvent: () => (CollisionEndEvent),\n CollisionPostSolveEvent: () => (CollisionPostSolveEvent),\n CollisionPreSolveEvent: () => (CollisionPreSolveEvent),\n CollisionStartEvent: () => (CollisionStartEvent),\n ContactEndEvent: () => (ContactEndEvent),\n ContactStartEvent: () => (ContactStartEvent),\n DeactivateEvent: () => (DeactivateEvent),\n EnterTriggerEvent: () => (EnterTriggerEvent),\n EnterViewPortEvent: () => (EnterViewPortEvent),\n EventTypes: () => (EventTypes),\n ExitTriggerEvent: () => (ExitTriggerEvent),\n ExitViewPortEvent: () => (ExitViewPortEvent),\n GameEvent: () => (GameEvent),\n GameStartEvent: () => (GameStartEvent),\n GameStopEvent: () => (GameStopEvent),\n GamepadAxisEvent: () => (GamepadAxisEvent),\n GamepadButtonEvent: () => (GamepadButtonEvent),\n GamepadConnectEvent: () => (GamepadConnectEvent),\n GamepadDisconnectEvent: () => (GamepadDisconnectEvent),\n HiddenEvent: () => (HiddenEvent),\n InitializeEvent: () => (InitializeEvent),\n KillEvent: () => (KillEvent),\n PostCollisionEvent: () => (PostCollisionEvent),\n PostDebugDrawEvent: () => (PostDebugDrawEvent),\n PostDrawEvent: () => (PostDrawEvent),\n PostFrameEvent: () => (PostFrameEvent),\n PostKillEvent: () => (PostKillEvent),\n PostUpdateEvent: () => (PostUpdateEvent),\n PreCollisionEvent: () => (PreCollisionEvent),\n PreDebugDrawEvent: () => (PreDebugDrawEvent),\n PreDrawEvent: () => (PreDrawEvent),\n PreFrameEvent: () => (PreFrameEvent),\n PreKillEvent: () => (PreKillEvent),\n PreUpdateEvent: () => (PreUpdateEvent),\n VisibleEvent: () => (VisibleEvent)\n});\n\n// NAMESPACE OBJECT: ./Graphics/Context/webgl-util.ts\nvar webgl_util_namespaceObject = {};\n__webpack_require__.r(webgl_util_namespaceObject);\n__webpack_require__.d(webgl_util_namespaceObject, {\n getAttributeComponentSize: () => (getAttributeComponentSize),\n getAttributePointerType: () => (getAttributePointerType),\n getGlTypeSizeBytes: () => (getGlTypeSizeBytes)\n});\n\n// NAMESPACE OBJECT: ./Util/DrawUtil.ts\nvar DrawUtil_namespaceObject = {};\n__webpack_require__.r(DrawUtil_namespaceObject);\n__webpack_require__.d(DrawUtil_namespaceObject, {\n circle: () => (circle),\n line: () => (line),\n point: () => (point),\n roundRect: () => (roundRect),\n vector: () => (vector)\n});\n\n// NAMESPACE OBJECT: ./Input/Index.ts\nvar Input_Index_namespaceObject = {};\n__webpack_require__.r(Input_Index_namespaceObject);\n__webpack_require__.d(Input_Index_namespaceObject, {\n Axes: () => (Axes),\n Buttons: () => (Buttons),\n Gamepad: () => (Gamepad),\n Gamepads: () => (Gamepads),\n KeyEvent: () => (KeyEvent),\n Keyboard: () => (Keyboard),\n Keys: () => (Keys),\n NativePointerButton: () => (NativePointerButton),\n PointerButton: () => (PointerButton),\n PointerComponent: () => (PointerComponent),\n PointerEvent: () => (PointerEvent),\n PointerEventReceiver: () => (PointerEventReceiver),\n PointerScope: () => (PointerScope),\n PointerSystem: () => (PointerSystem),\n PointerType: () => (PointerType),\n WheelDeltaMode: () => (WheelDeltaMode),\n WheelEvent: () => (WheelEvent)\n});\n\n// NAMESPACE OBJECT: ./Util/Index.ts\nvar Util_Index_namespaceObject = {};\n__webpack_require__.r(Util_Index_namespaceObject);\n__webpack_require__.d(Util_Index_namespaceObject, {\n ConsoleAppender: () => (ConsoleAppender),\n DrawUtil: () => (DrawUtil_namespaceObject),\n EasingFunctions: () => (EasingFunctions),\n LogLevel: () => (LogLevel),\n Logger: () => (Logger),\n Observable: () => (Observable),\n ScreenAppender: () => (ScreenAppender),\n addItemToArray: () => (addItemToArray),\n contains: () => (contains),\n delay: () => (delay),\n fail: () => (fail),\n getPosition: () => (getPosition),\n removeItemFromArray: () => (removeItemFromArray)\n});\n\n// EXTERNAL MODULE: ../../node_modules/core-js/es/array/sort.js\nvar sort = __webpack_require__(4662);\n// EXTERNAL MODULE: ../../node_modules/core-js/es/object/keys.js\nvar keys = __webpack_require__(8343);\n;// CONCATENATED MODULE: ./Polyfill.ts\n\r\n\r\n/**\r\n * Polyfill adding function\r\n */\r\nfunction polyfill() {\r\n /* istanbul ignore next */\r\n if (typeof window === 'undefined') {\r\n window = {\r\n audioContext: function () {\r\n return;\r\n }\r\n };\r\n }\r\n /* istanbul ignore next */\r\n if (typeof window !== 'undefined' && !window.requestAnimationFrame) {\r\n window.requestAnimationFrame =\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n function (callback) {\r\n window.setInterval(callback, 1000 / 60);\r\n };\r\n }\r\n /* istanbul ignore next */\r\n if (typeof window !== 'undefined' && !window.cancelAnimationFrame) {\r\n window.cancelAnimationFrame =\r\n window.webkitCancelAnimationFrame ||\r\n window.mozCancelAnimationFrame ||\r\n function () {\r\n return;\r\n };\r\n }\r\n /* istanbul ignore next */\r\n if (typeof window !== 'undefined' && !window.AudioContext) {\r\n if (window.webkitAudioContext) {\r\n const ctx = window.webkitAudioContext;\r\n const replaceMe = ctx.prototype.decodeAudioData;\r\n window.webkitAudioContext.prototype.decodeAudioData = function (arrayBuffer) {\r\n return new Promise((resolve, reject) => {\r\n replaceMe.call(this, arrayBuffer, resolve, reject);\r\n });\r\n };\r\n }\r\n window.AudioContext =\r\n window.AudioContext ||\r\n window.webkitAudioContext ||\r\n window.mozAudioContext ||\r\n window.msAudioContext ||\r\n window.oAudioContext;\r\n }\r\n /* istanbul ignore next */\r\n if (typeof window !== 'undefined' && !window.devicePixelRatio) {\r\n window.devicePixelRatio = window.devicePixelRatio || 1;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Flags.ts\n/**\r\n * Flags is a feature flag implementation for Excalibur. They can only be operated **before [[Engine]] construction**\r\n * after which they are frozen and are read-only.\r\n *\r\n * Flags are used to enable experimental or preview features in Excalibur.\r\n */\r\nclass Flags {\r\n /**\r\n * Force excalibur to load the Canvas 2D graphics context fallback\r\n *\r\n * @warning not all features of excalibur are supported in the Canvas 2D fallback\r\n */\r\n static useCanvasGraphicsContext() {\r\n Flags.enable('use-canvas-context');\r\n }\r\n /**\r\n * Freeze all flag modifications making them readonly\r\n */\r\n static freeze() {\r\n Flags._FROZEN = true;\r\n }\r\n /**\r\n * Resets internal flag state, not meant to be called by users. Only used for testing.\r\n *\r\n * Calling this in your game is UNSUPPORTED\r\n * @internal\r\n */\r\n static _reset() {\r\n Flags._FROZEN = false;\r\n Flags._FLAGS = {};\r\n }\r\n /**\r\n * Enable a specific feature flag by name. **Note: can only be set before [[Engine]] constructor time**\r\n * @param flagName\r\n */\r\n static enable(flagName) {\r\n if (this._FROZEN) {\r\n throw Error('Feature flags can only be enabled before Engine constructor time');\r\n }\r\n Flags._FLAGS[flagName] = true;\r\n }\r\n /**\r\n * Disable a specific feature flag by name. **Note: can only be set before [[Engine]] constructor time**\r\n * @param flagName\r\n */\r\n static disable(flagName) {\r\n if (this._FROZEN) {\r\n throw Error('Feature flags can only be disabled before Engine constructor time');\r\n }\r\n Flags._FLAGS[flagName] = false;\r\n }\r\n /**\r\n * Check if a flag is enabled. If the flag is disabled or does not exist `false` is returned\r\n * @param flagName\r\n */\r\n static isEnabled(flagName) {\r\n return !!Flags._FLAGS[flagName];\r\n }\r\n /**\r\n * Show a list of currently known flags\r\n */\r\n static show() {\r\n return Object.keys(Flags._FLAGS);\r\n }\r\n}\r\nFlags._FROZEN = false;\r\nFlags._FLAGS = {};\r\n\n;// CONCATENATED MODULE: ./Id.ts\n/**\r\n * Create a branded ID type from a number\r\n */\r\nfunction createId(type, value) {\r\n return { type, value };\r\n}\r\n;\r\n\n;// CONCATENATED MODULE: ./EventEmitter.ts\n/**\r\n * Excalibur's typed event emitter, this allows events to be sent with any string to Type mapping\r\n */\r\nclass EventEmitter {\r\n constructor() {\r\n this._paused = false;\r\n this._listeners = {};\r\n this._listenersOnce = {};\r\n this._pipes = [];\r\n }\r\n clear() {\r\n this._listeners = {};\r\n this._listenersOnce = {};\r\n this._pipes.length = 0;\r\n }\r\n on(eventName, handler) {\r\n var _a;\r\n this._listeners[eventName] = (_a = this._listeners[eventName]) !== null && _a !== void 0 ? _a : [];\r\n this._listeners[eventName].push(handler);\r\n return {\r\n close: () => this.off(eventName, handler)\r\n };\r\n }\r\n once(eventName, handler) {\r\n var _a;\r\n this._listenersOnce[eventName] = (_a = this._listenersOnce[eventName]) !== null && _a !== void 0 ? _a : [];\r\n this._listenersOnce[eventName].push(handler);\r\n return {\r\n close: () => this.off(eventName, handler)\r\n };\r\n }\r\n off(eventName, handler) {\r\n var _a, _b, _c, _d;\r\n if (handler) {\r\n const listenerIndex = (_a = this._listeners[eventName]) === null || _a === void 0 ? void 0 : _a.indexOf(handler);\r\n if (listenerIndex > -1) {\r\n (_b = this._listeners[eventName]) === null || _b === void 0 ? void 0 : _b.splice(listenerIndex, 1);\r\n }\r\n const onceIndex = (_c = this._listenersOnce[eventName]) === null || _c === void 0 ? void 0 : _c.indexOf(handler);\r\n if (onceIndex > -1) {\r\n (_d = this._listenersOnce[eventName]) === null || _d === void 0 ? void 0 : _d.splice(onceIndex, 1);\r\n }\r\n }\r\n else {\r\n delete this._listeners[eventName];\r\n }\r\n }\r\n emit(eventName, event) {\r\n var _a;\r\n if (this._paused) {\r\n return;\r\n }\r\n (_a = this._listeners[eventName]) === null || _a === void 0 ? void 0 : _a.forEach((fn) => fn(event));\r\n const onces = this._listenersOnce[eventName];\r\n this._listenersOnce[eventName] = [];\r\n if (onces) {\r\n onces.forEach((fn) => fn(event));\r\n }\r\n this._pipes.forEach((pipe) => {\r\n pipe.emit(eventName, event);\r\n });\r\n }\r\n pipe(emitter) {\r\n if (this === emitter) {\r\n throw Error('Cannot pipe to self');\r\n }\r\n this._pipes.push(emitter);\r\n return {\r\n close: () => {\r\n const i = this._pipes.indexOf(emitter);\r\n if (i > -1) {\r\n this._pipes.splice(i, 1);\r\n }\r\n }\r\n };\r\n }\r\n unpipe(emitter) {\r\n const i = this._pipes.indexOf(emitter);\r\n if (i > -1) {\r\n this._pipes.splice(i, 1);\r\n }\r\n }\r\n pause() {\r\n this._paused = true;\r\n }\r\n unpause() {\r\n this._paused = false;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Events.ts\nvar EventTypes;\r\n(function (EventTypes) {\r\n EventTypes[\"Kill\"] = \"kill\";\r\n EventTypes[\"PreKill\"] = \"prekill\";\r\n EventTypes[\"PostKill\"] = \"postkill\";\r\n EventTypes[\"PreDraw\"] = \"predraw\";\r\n EventTypes[\"PostDraw\"] = \"postdraw\";\r\n EventTypes[\"PreDebugDraw\"] = \"predebugdraw\";\r\n EventTypes[\"PostDebugDraw\"] = \"postdebugdraw\";\r\n EventTypes[\"PreUpdate\"] = \"preupdate\";\r\n EventTypes[\"PostUpdate\"] = \"postupdate\";\r\n EventTypes[\"PreFrame\"] = \"preframe\";\r\n EventTypes[\"PostFrame\"] = \"postframe\";\r\n EventTypes[\"PreCollision\"] = \"precollision\";\r\n EventTypes[\"CollisionStart\"] = \"collisionstart\";\r\n EventTypes[\"CollisionEnd\"] = \"collisionend\";\r\n EventTypes[\"PostCollision\"] = \"postcollision\";\r\n EventTypes[\"Initialize\"] = \"initialize\";\r\n EventTypes[\"Activate\"] = \"activate\";\r\n EventTypes[\"Deactivate\"] = \"deactivate\";\r\n EventTypes[\"ExitViewport\"] = \"exitviewport\";\r\n EventTypes[\"EnterViewport\"] = \"enterviewport\";\r\n EventTypes[\"ExitTrigger\"] = \"exit\";\r\n EventTypes[\"EnterTrigger\"] = \"enter\";\r\n EventTypes[\"Connect\"] = \"connect\";\r\n EventTypes[\"Disconnect\"] = \"disconnect\";\r\n EventTypes[\"Button\"] = \"button\";\r\n EventTypes[\"Axis\"] = \"axis\";\r\n EventTypes[\"Visible\"] = \"visible\";\r\n EventTypes[\"Hidden\"] = \"hidden\";\r\n EventTypes[\"Start\"] = \"start\";\r\n EventTypes[\"Stop\"] = \"stop\";\r\n EventTypes[\"PointerUp\"] = \"pointerup\";\r\n EventTypes[\"PointerDown\"] = \"pointerdown\";\r\n EventTypes[\"PointerMove\"] = \"pointermove\";\r\n EventTypes[\"PointerEnter\"] = \"pointerenter\";\r\n EventTypes[\"PointerLeave\"] = \"pointerleave\";\r\n EventTypes[\"PointerCancel\"] = \"pointercancel\";\r\n EventTypes[\"PointerWheel\"] = \"pointerwheel\";\r\n EventTypes[\"Up\"] = \"up\";\r\n EventTypes[\"Down\"] = \"down\";\r\n EventTypes[\"Move\"] = \"move\";\r\n EventTypes[\"Enter\"] = \"enter\";\r\n EventTypes[\"Leave\"] = \"leave\";\r\n EventTypes[\"Cancel\"] = \"cancel\";\r\n EventTypes[\"Wheel\"] = \"wheel\";\r\n EventTypes[\"Press\"] = \"press\";\r\n EventTypes[\"Release\"] = \"release\";\r\n EventTypes[\"Hold\"] = \"hold\";\r\n EventTypes[\"PointerDragStart\"] = \"pointerdragstart\";\r\n EventTypes[\"PointerDragEnd\"] = \"pointerdragend\";\r\n EventTypes[\"PointerDragEnter\"] = \"pointerdragenter\";\r\n EventTypes[\"PointerDragLeave\"] = \"pointerdragleave\";\r\n EventTypes[\"PointerDragMove\"] = \"pointerdragmove\";\r\n})(EventTypes || (EventTypes = {}));\r\n/**\r\n * Base event type in Excalibur that all other event types derive from. Not all event types are thrown on all Excalibur game objects,\r\n * some events are unique to a type, others are not.\r\n *\r\n */\r\nclass GameEvent {\r\n constructor() {\r\n this._bubbles = true;\r\n }\r\n /**\r\n * If set to false, prevents event from propagating to other actors. If true it will be propagated\r\n * to all actors that apply.\r\n */\r\n get bubbles() {\r\n return this._bubbles;\r\n }\r\n set bubbles(value) {\r\n this._bubbles = value;\r\n }\r\n /**\r\n * Prevents event from bubbling\r\n */\r\n stopPropagation() {\r\n this.bubbles = false;\r\n }\r\n}\r\n/**\r\n * The 'kill' event is emitted on actors when it is killed. The target is the actor that was killed.\r\n */\r\nclass KillEvent extends GameEvent {\r\n constructor(target) {\r\n super();\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * The 'prekill' event is emitted directly before an actor is killed.\r\n */\r\nclass PreKillEvent extends GameEvent {\r\n constructor(target) {\r\n super();\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * The 'postkill' event is emitted directly after the actor is killed.\r\n */\r\nclass PostKillEvent extends GameEvent {\r\n constructor(target) {\r\n super();\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * The 'start' event is emitted on engine when has started and is ready for interaction.\r\n */\r\nclass GameStartEvent extends GameEvent {\r\n constructor(target) {\r\n super();\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * The 'stop' event is emitted on engine when has been stopped and will no longer take input, update or draw.\r\n */\r\nclass GameStopEvent extends GameEvent {\r\n constructor(target) {\r\n super();\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * The 'predraw' event is emitted on actors, scenes, and engine before drawing starts. Actors' predraw happens inside their graphics\r\n * transform so that all drawing takes place with the actor as the origin.\r\n *\r\n */\r\nclass PreDrawEvent extends GameEvent {\r\n constructor(ctx, delta, target) {\r\n super();\r\n this.ctx = ctx;\r\n this.delta = delta;\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * The 'postdraw' event is emitted on actors, scenes, and engine after drawing finishes. Actors' postdraw happens inside their graphics\r\n * transform so that all drawing takes place with the actor as the origin.\r\n *\r\n */\r\nclass PostDrawEvent extends GameEvent {\r\n constructor(ctx, delta, target) {\r\n super();\r\n this.ctx = ctx;\r\n this.delta = delta;\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * The 'predebugdraw' event is emitted on actors, scenes, and engine before debug drawing starts.\r\n */\r\nclass PreDebugDrawEvent extends GameEvent {\r\n constructor(ctx, target) {\r\n super();\r\n this.ctx = ctx;\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * The 'postdebugdraw' event is emitted on actors, scenes, and engine after debug drawing starts.\r\n */\r\nclass PostDebugDrawEvent extends GameEvent {\r\n constructor(ctx, target) {\r\n super();\r\n this.ctx = ctx;\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * The 'preupdate' event is emitted on actors, scenes, camera, and engine before the update starts.\r\n */\r\nclass PreUpdateEvent extends GameEvent {\r\n constructor(engine, delta, target) {\r\n super();\r\n this.engine = engine;\r\n this.delta = delta;\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * The 'postupdate' event is emitted on actors, scenes, camera, and engine after the update ends.\r\n */\r\nclass PostUpdateEvent extends GameEvent {\r\n constructor(engine, delta, target) {\r\n super();\r\n this.engine = engine;\r\n this.delta = delta;\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * The 'preframe' event is emitted on the engine, before the frame begins.\r\n */\r\nclass PreFrameEvent extends GameEvent {\r\n constructor(engine, prevStats) {\r\n super();\r\n this.engine = engine;\r\n this.prevStats = prevStats;\r\n this.target = engine;\r\n }\r\n}\r\n/**\r\n * The 'postframe' event is emitted on the engine, after a frame ends.\r\n */\r\nclass PostFrameEvent extends GameEvent {\r\n constructor(engine, stats) {\r\n super();\r\n this.engine = engine;\r\n this.stats = stats;\r\n this.target = engine;\r\n }\r\n}\r\n/**\r\n * Event received when a gamepad is connected to Excalibur. [[Gamepads]] receives this event.\r\n */\r\nclass GamepadConnectEvent extends GameEvent {\r\n constructor(index, gamepad) {\r\n super();\r\n this.index = index;\r\n this.gamepad = gamepad;\r\n this.target = gamepad;\r\n }\r\n}\r\n/**\r\n * Event received when a gamepad is disconnected from Excalibur. [[Gamepads]] receives this event.\r\n */\r\nclass GamepadDisconnectEvent extends GameEvent {\r\n constructor(index, gamepad) {\r\n super();\r\n this.index = index;\r\n this.gamepad = gamepad;\r\n this.target = gamepad;\r\n }\r\n}\r\n/**\r\n * Gamepad button event. See [[Gamepads]] for information on responding to controller input. [[Gamepad]] instances receive this event;\r\n */\r\nclass GamepadButtonEvent extends GameEvent {\r\n /**\r\n * @param button The Gamepad button\r\n * @param value A numeric value between 0 and 1\r\n */\r\n constructor(button, value, target) {\r\n super();\r\n this.button = button;\r\n this.value = value;\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * Gamepad axis event. See [[Gamepads]] for information on responding to controller input. [[Gamepad]] instances receive this event;\r\n */\r\nclass GamepadAxisEvent extends GameEvent {\r\n /**\r\n * @param axis The Gamepad axis\r\n * @param value A numeric value between -1 and 1\r\n */\r\n constructor(axis, value, target) {\r\n super();\r\n this.axis = axis;\r\n this.value = value;\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * Event received by the [[Engine]] when the browser window is visible on a screen.\r\n */\r\nclass VisibleEvent extends GameEvent {\r\n constructor(target) {\r\n super();\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * Event received by the [[Engine]] when the browser window is hidden from all screens.\r\n */\r\nclass HiddenEvent extends GameEvent {\r\n constructor(target) {\r\n super();\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * Event thrown on an [[Actor|actor]] when a collision will occur this frame if it resolves\r\n */\r\nclass PreCollisionEvent extends GameEvent {\r\n /**\r\n * @param actor The actor the event was thrown on\r\n * @param other The actor that will collided with the current actor\r\n * @param side The side that will be collided with the current actor\r\n * @param intersection Intersection vector\r\n */\r\n constructor(actor, other, side, intersection) {\r\n super();\r\n this.other = other;\r\n this.side = side;\r\n this.intersection = intersection;\r\n this.target = actor;\r\n }\r\n}\r\n/**\r\n * Event thrown on an [[Actor|actor]] when a collision has been resolved (body reacted) this frame\r\n */\r\nclass PostCollisionEvent extends GameEvent {\r\n /**\r\n * @param actor The actor the event was thrown on\r\n * @param other The actor that did collide with the current actor\r\n * @param side The side that did collide with the current actor\r\n * @param intersection Intersection vector\r\n */\r\n constructor(actor, other, side, intersection) {\r\n super();\r\n this.other = other;\r\n this.side = side;\r\n this.intersection = intersection;\r\n this.target = actor;\r\n }\r\n get actor() {\r\n return this.target;\r\n }\r\n set actor(actor) {\r\n this.target = actor;\r\n }\r\n}\r\nclass ContactStartEvent {\r\n constructor(target, other, contact) {\r\n this.target = target;\r\n this.other = other;\r\n this.contact = contact;\r\n }\r\n}\r\nclass ContactEndEvent {\r\n constructor(target, other) {\r\n this.target = target;\r\n this.other = other;\r\n }\r\n}\r\nclass CollisionPreSolveEvent {\r\n constructor(target, other, side, intersection, contact) {\r\n this.target = target;\r\n this.other = other;\r\n this.side = side;\r\n this.intersection = intersection;\r\n this.contact = contact;\r\n }\r\n}\r\nclass CollisionPostSolveEvent {\r\n constructor(target, other, side, intersection, contact) {\r\n this.target = target;\r\n this.other = other;\r\n this.side = side;\r\n this.intersection = intersection;\r\n this.contact = contact;\r\n }\r\n}\r\n/**\r\n * Event thrown the first time an [[Actor|actor]] collides with another, after an actor is in contact normal collision events are fired.\r\n */\r\nclass CollisionStartEvent extends GameEvent {\r\n /**\r\n *\r\n * @param actor\r\n * @param other\r\n * @param contact\r\n */\r\n constructor(actor, other, contact) {\r\n super();\r\n this.other = other;\r\n this.contact = contact;\r\n this.target = actor;\r\n }\r\n get actor() {\r\n return this.target;\r\n }\r\n set actor(actor) {\r\n this.target = actor;\r\n }\r\n}\r\n/**\r\n * Event thrown when the [[Actor|actor]] is no longer colliding with another\r\n */\r\nclass CollisionEndEvent extends GameEvent {\r\n /**\r\n *\r\n */\r\n constructor(actor, other) {\r\n super();\r\n this.other = other;\r\n this.target = actor;\r\n }\r\n get actor() {\r\n return this.target;\r\n }\r\n set actor(actor) {\r\n this.target = actor;\r\n }\r\n}\r\n/**\r\n * Event thrown on an [[Actor]], [[Scene]], and [[Engine]] only once before the first update call\r\n */\r\nclass InitializeEvent extends GameEvent {\r\n /**\r\n * @param engine The reference to the current engine\r\n */\r\n constructor(engine, target) {\r\n super();\r\n this.engine = engine;\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * Event thrown on a [[Scene]] on activation\r\n */\r\nclass ActivateEvent extends GameEvent {\r\n /**\r\n * @param context The context for the scene activation\r\n */\r\n constructor(context, target) {\r\n super();\r\n this.context = context;\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * Event thrown on a [[Scene]] on deactivation\r\n */\r\nclass DeactivateEvent extends GameEvent {\r\n /**\r\n * @param context The context for the scene deactivation\r\n */\r\n constructor(context, target) {\r\n super();\r\n this.context = context;\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * Event thrown on an [[Actor]] when it completely leaves the screen.\r\n */\r\nclass ExitViewPortEvent extends GameEvent {\r\n constructor(target) {\r\n super();\r\n this.target = target;\r\n }\r\n}\r\n/**\r\n * Event thrown on an [[Actor]] when it completely leaves the screen.\r\n */\r\nclass EnterViewPortEvent extends GameEvent {\r\n constructor(target) {\r\n super();\r\n this.target = target;\r\n }\r\n}\r\nclass EnterTriggerEvent extends GameEvent {\r\n constructor(target, actor) {\r\n super();\r\n this.target = target;\r\n this.actor = actor;\r\n }\r\n}\r\nclass ExitTriggerEvent extends GameEvent {\r\n constructor(target, actor) {\r\n super();\r\n this.target = target;\r\n this.actor = actor;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Input/Gamepad.ts\n\r\n\r\nconst GamepadEvents = {\r\n GamepadConnect: 'connect',\r\n GamepadDisconnect: 'disconnect',\r\n GamepadButton: 'button',\r\n GamepadAxis: 'axis'\r\n};\r\n/**\r\n * Excalibur leverages the HTML5 Gamepad API [where it is supported](http://caniuse.com/#feat=gamepad)\r\n * to provide controller support for your games.\r\n */\r\nclass Gamepads {\r\n constructor() {\r\n this.events = new EventEmitter();\r\n /**\r\n * Whether or not to poll for Gamepad input (default: `false`)\r\n */\r\n this.enabled = false;\r\n /**\r\n * Whether or not Gamepad API is supported\r\n */\r\n this.supported = !!navigator.getGamepads;\r\n this._gamePadTimeStamps = [0, 0, 0, 0];\r\n this._oldPads = [];\r\n this._pads = [];\r\n this._initSuccess = false;\r\n this._navigator = navigator;\r\n this._minimumConfiguration = null;\r\n }\r\n init() {\r\n if (!this.supported) {\r\n return;\r\n }\r\n if (this._initSuccess) {\r\n return;\r\n }\r\n // In Chrome, this will return 4 undefined items until a button is pressed\r\n // In FF, this will not return any items until a button is pressed\r\n this._oldPads = this._clonePads(this._navigator.getGamepads());\r\n if (this._oldPads.length && this._oldPads[0]) {\r\n this._initSuccess = true;\r\n }\r\n }\r\n /**\r\n * Sets the minimum gamepad configuration, for example {axis: 4, buttons: 4} means\r\n * this game requires at minimum 4 axis inputs and 4 buttons, this is not restrictive\r\n * all other controllers with more axis or buttons are valid as well. If no minimum\r\n * configuration is set all pads are valid.\r\n */\r\n setMinimumGamepadConfiguration(config) {\r\n this._enableAndUpdate(); // if config is used, implicitly enable\r\n this._minimumConfiguration = config;\r\n }\r\n /**\r\n * When implicitly enabled, set the enabled flag and run an update so information is updated\r\n */\r\n _enableAndUpdate() {\r\n if (!this.enabled) {\r\n this.enabled = true;\r\n this.update();\r\n }\r\n }\r\n /**\r\n * Checks a navigator gamepad against the minimum configuration if present.\r\n */\r\n _isGamepadValid(pad) {\r\n if (!this._minimumConfiguration) {\r\n return true;\r\n }\r\n if (!pad) {\r\n return false;\r\n }\r\n const axesLength = pad.axes.filter((value) => {\r\n return typeof value !== undefined;\r\n }).length;\r\n const buttonLength = pad.buttons.filter((value) => {\r\n return typeof value !== undefined;\r\n }).length;\r\n return axesLength >= this._minimumConfiguration.axis && buttonLength >= this._minimumConfiguration.buttons && pad.connected;\r\n }\r\n emit(eventName, event) {\r\n this.events.emit(eventName, event);\r\n }\r\n on(eventName, handler) {\r\n this._enableAndUpdate(); // implicitly enable\r\n return this.events.on(eventName, handler);\r\n }\r\n once(eventName, handler) {\r\n return this.events.once(eventName, handler);\r\n }\r\n off(eventName, handler) {\r\n this._enableAndUpdate(); // implicitly enable\r\n this.events.off(eventName, handler);\r\n }\r\n /**\r\n * Updates Gamepad state and publishes Gamepad events\r\n */\r\n update() {\r\n if (!this.enabled || !this.supported) {\r\n return;\r\n }\r\n this.init();\r\n const gamepads = this._navigator.getGamepads();\r\n for (let i = 0; i < gamepads.length; i++) {\r\n if (!gamepads[i]) {\r\n const gamepad = this.at(i);\r\n // If was connected, but now isn't emit the disconnect event\r\n if (gamepad.connected) {\r\n this.events.emit('disconnect', new GamepadDisconnectEvent(i, gamepad));\r\n }\r\n // Reset connection status\r\n gamepad.connected = false;\r\n continue;\r\n }\r\n else {\r\n if (!this.at(i).connected && this._isGamepadValid(gamepads[i])) {\r\n this.events.emit('connect', new GamepadConnectEvent(i, this.at(i)));\r\n }\r\n // Set connection status\r\n this.at(i).connected = true;\r\n }\r\n this.at(i).update();\r\n // Only supported in Chrome\r\n if (gamepads[i].timestamp && gamepads[i].timestamp === this._gamePadTimeStamps[i]) {\r\n continue;\r\n }\r\n this._gamePadTimeStamps[i] = gamepads[i].timestamp;\r\n // Add reference to navigator gamepad\r\n this.at(i).navigatorGamepad = gamepads[i];\r\n // Buttons\r\n let b, bi, a, ai, value;\r\n for (b in Buttons) {\r\n bi = Buttons[b];\r\n if (typeof bi === 'number') {\r\n if (gamepads[i].buttons[bi]) {\r\n value = gamepads[i].buttons[bi].value;\r\n if (value !== this._oldPads[i].getButton(bi)) {\r\n if (gamepads[i].buttons[bi].pressed) {\r\n this.at(i).updateButton(bi, value);\r\n this.at(i).events.emit('button', new GamepadButtonEvent(bi, value, this.at(i)));\r\n }\r\n else {\r\n this.at(i).updateButton(bi, 0);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n // Axes\r\n for (a in Axes) {\r\n ai = Axes[a];\r\n if (typeof ai === 'number') {\r\n value = gamepads[i].axes[ai];\r\n if (value !== this._oldPads[i].getAxes(ai)) {\r\n this.at(i).updateAxes(ai, value);\r\n this.at(i).events.emit('axis', new GamepadAxisEvent(ai, value, this.at(i)));\r\n }\r\n }\r\n }\r\n this._oldPads[i] = this._clonePad(gamepads[i]);\r\n }\r\n }\r\n /**\r\n * Safely retrieves a Gamepad at a specific index and creates one if it doesn't yet exist\r\n */\r\n at(index) {\r\n this._enableAndUpdate(); // implicitly enable gamepads when at() is called\r\n if (index >= this._pads.length) {\r\n // Ensure there is a pad to retrieve\r\n for (let i = this._pads.length - 1, max = index; i < max; i++) {\r\n this._pads.push(new Gamepad());\r\n this._oldPads.push(new Gamepad());\r\n }\r\n }\r\n return this._pads[index];\r\n }\r\n /**\r\n * Returns a list of all valid gamepads that meet the minimum configuration requirement.\r\n */\r\n getValidGamepads() {\r\n this._enableAndUpdate();\r\n const result = [];\r\n for (let i = 0; i < this._pads.length; i++) {\r\n if (this._isGamepadValid(this.at(i).navigatorGamepad) && this.at(i).connected) {\r\n result.push(this.at(i));\r\n }\r\n }\r\n return result;\r\n }\r\n /**\r\n * Gets the number of connected gamepads\r\n */\r\n count() {\r\n return this._pads.filter((p) => p.connected).length;\r\n }\r\n _clonePads(pads) {\r\n const arr = [];\r\n for (let i = 0, len = pads.length; i < len; i++) {\r\n arr.push(this._clonePad(pads[i]));\r\n }\r\n return arr;\r\n }\r\n /**\r\n * Fastest way to clone a known object is to do it yourself\r\n */\r\n _clonePad(pad) {\r\n let i, len;\r\n const clonedPad = new Gamepad();\r\n if (!pad) {\r\n return clonedPad;\r\n }\r\n for (i = 0, len = pad.buttons.length; i < len; i++) {\r\n if (pad.buttons[i]) {\r\n clonedPad.updateButton(i, pad.buttons[i].value);\r\n }\r\n }\r\n for (i = 0, len = pad.axes.length; i < len; i++) {\r\n clonedPad.updateAxes(i, pad.axes[i]);\r\n }\r\n return clonedPad;\r\n }\r\n}\r\n/**\r\n * The minimum value an axis has to move before considering it a change\r\n */\r\nGamepads.MinAxisMoveThreshold = 0.05;\r\n/**\r\n * Gamepad holds state information for a connected controller. See [[Gamepads]]\r\n * for more information on handling controller input.\r\n */\r\nclass Gamepad {\r\n constructor() {\r\n this.events = new EventEmitter();\r\n this.connected = false;\r\n this._axes = new Array(4);\r\n this._buttons = new Array(16);\r\n this._buttonsUp = new Array(16);\r\n this._buttonsDown = new Array(16);\r\n for (let i = 0; i < this._buttons.length; i++) {\r\n this._buttons[i] = 0;\r\n }\r\n for (let i = 0; i < this._axes.length; i++) {\r\n this._axes[i] = 0;\r\n }\r\n }\r\n update() {\r\n // Reset buttonsDown and buttonsUp after update is complete\r\n this._buttonsDown = new Array(16);\r\n this._buttonsUp = new Array(16);\r\n }\r\n /**\r\n * Whether or not the given button is pressed\r\n *\r\n * @deprecated will be removed in v0.28.0. Use isButtonHeld instead\r\n * @param button The button to query\r\n * @param threshold The threshold over which the button is considered to be pressed\r\n */\r\n isButtonPressed(button, threshold = 1) {\r\n return this._buttons[button] >= threshold;\r\n }\r\n /**\r\n * Tests if a certain button is held down. This is persisted between frames.\r\n *\r\n * @param button The button to query\r\n * @param threshold The threshold over which the button is considered to be pressed\r\n */\r\n isButtonHeld(button, threshold = 1) {\r\n return this._buttons[button] >= threshold;\r\n }\r\n /**\r\n * Tests if a certain button was just pressed this frame. This is cleared at the end of the update frame.\r\n *\r\n * @param button Test whether a button was just pressed\r\n * @param threshold The threshold over which the button is considered to be pressed\r\n */\r\n wasButtonPressed(button, threshold = 1) {\r\n return this._buttonsDown[button] >= threshold;\r\n }\r\n /**\r\n * Tests if a certain button was just released this frame. This is cleared at the end of the update frame.\r\n *\r\n * @param button Test whether a button was just released\r\n */\r\n wasButtonReleased(button) {\r\n return Boolean(this._buttonsUp[button]);\r\n }\r\n /**\r\n * Gets the given button value between 0 and 1\r\n */\r\n getButton(button) {\r\n return this._buttons[button];\r\n }\r\n /**\r\n * Gets the given axis value between -1 and 1. Values below\r\n * [[MinAxisMoveThreshold]] are considered 0.\r\n */\r\n getAxes(axes) {\r\n const value = this._axes[axes];\r\n if (Math.abs(value) < Gamepads.MinAxisMoveThreshold) {\r\n return 0;\r\n }\r\n else {\r\n return value;\r\n }\r\n }\r\n updateButton(buttonIndex, value) {\r\n // button was just released\r\n if (value === 0 && this._buttons[buttonIndex]) {\r\n this._buttonsUp[buttonIndex] = 1;\r\n // button was just pressed\r\n }\r\n else {\r\n this._buttonsDown[buttonIndex] = value;\r\n }\r\n this._buttons[buttonIndex] = value;\r\n }\r\n updateAxes(axesIndex, value) {\r\n this._axes[axesIndex] = value;\r\n }\r\n emit(eventName, event) {\r\n this.events.emit(eventName, event);\r\n }\r\n on(eventName, handler) {\r\n return this.events.on(eventName, handler);\r\n }\r\n once(eventName, handler) {\r\n return this.events.once(eventName, handler);\r\n }\r\n off(eventName, handler) {\r\n this.events.off(eventName, handler);\r\n }\r\n}\r\n/**\r\n * Gamepad Buttons enumeration\r\n */\r\nvar Buttons;\r\n(function (Buttons) {\r\n /**\r\n * Face 1 button (e.g. A)\r\n */\r\n Buttons[Buttons[\"Face1\"] = 0] = \"Face1\";\r\n /**\r\n * Face 2 button (e.g. B)\r\n */\r\n Buttons[Buttons[\"Face2\"] = 1] = \"Face2\";\r\n /**\r\n * Face 3 button (e.g. X)\r\n */\r\n Buttons[Buttons[\"Face3\"] = 2] = \"Face3\";\r\n /**\r\n * Face 4 button (e.g. Y)\r\n */\r\n Buttons[Buttons[\"Face4\"] = 3] = \"Face4\";\r\n /**\r\n * Left bumper button\r\n */\r\n Buttons[Buttons[\"LeftBumper\"] = 4] = \"LeftBumper\";\r\n /**\r\n * Right bumper button\r\n */\r\n Buttons[Buttons[\"RightBumper\"] = 5] = \"RightBumper\";\r\n /**\r\n * Left trigger button\r\n */\r\n Buttons[Buttons[\"LeftTrigger\"] = 6] = \"LeftTrigger\";\r\n /**\r\n * Right trigger button\r\n */\r\n Buttons[Buttons[\"RightTrigger\"] = 7] = \"RightTrigger\";\r\n /**\r\n * Select button\r\n */\r\n Buttons[Buttons[\"Select\"] = 8] = \"Select\";\r\n /**\r\n * Start button\r\n */\r\n Buttons[Buttons[\"Start\"] = 9] = \"Start\";\r\n /**\r\n * Left analog stick press (e.g. L3)\r\n */\r\n Buttons[Buttons[\"LeftStick\"] = 10] = \"LeftStick\";\r\n /**\r\n * Right analog stick press (e.g. R3)\r\n */\r\n Buttons[Buttons[\"RightStick\"] = 11] = \"RightStick\";\r\n /**\r\n * D-pad up\r\n */\r\n Buttons[Buttons[\"DpadUp\"] = 12] = \"DpadUp\";\r\n /**\r\n * D-pad down\r\n */\r\n Buttons[Buttons[\"DpadDown\"] = 13] = \"DpadDown\";\r\n /**\r\n * D-pad left\r\n */\r\n Buttons[Buttons[\"DpadLeft\"] = 14] = \"DpadLeft\";\r\n /**\r\n * D-pad right\r\n */\r\n Buttons[Buttons[\"DpadRight\"] = 15] = \"DpadRight\";\r\n})(Buttons || (Buttons = {}));\r\n/**\r\n * Gamepad Axes enumeration\r\n */\r\nvar Axes;\r\n(function (Axes) {\r\n /**\r\n * Left analogue stick X direction\r\n */\r\n Axes[Axes[\"LeftStickX\"] = 0] = \"LeftStickX\";\r\n /**\r\n * Left analogue stick Y direction\r\n */\r\n Axes[Axes[\"LeftStickY\"] = 1] = \"LeftStickY\";\r\n /**\r\n * Right analogue stick X direction\r\n */\r\n Axes[Axes[\"RightStickX\"] = 2] = \"RightStickX\";\r\n /**\r\n * Right analogue stick Y direction\r\n */\r\n Axes[Axes[\"RightStickY\"] = 3] = \"RightStickY\";\r\n})(Axes || (Axes = {}));\r\n\n;// CONCATENATED MODULE: ./Util/Log.ts\n/* eslint-disable no-console */\r\n/**\r\n * Logging level that Excalibur will tag\r\n */\r\nvar LogLevel;\r\n(function (LogLevel) {\r\n LogLevel[LogLevel[\"Debug\"] = 0] = \"Debug\";\r\n LogLevel[LogLevel[\"Info\"] = 1] = \"Info\";\r\n LogLevel[LogLevel[\"Warn\"] = 2] = \"Warn\";\r\n LogLevel[LogLevel[\"Error\"] = 3] = \"Error\";\r\n LogLevel[LogLevel[\"Fatal\"] = 4] = \"Fatal\";\r\n})(LogLevel || (LogLevel = {}));\r\n/**\r\n * Static singleton that represents the logging facility for Excalibur.\r\n * Excalibur comes built-in with a [[ConsoleAppender]] and [[ScreenAppender]].\r\n * Derive from [[Appender]] to create your own logging appenders.\r\n */\r\nclass Logger {\r\n constructor() {\r\n this._appenders = [];\r\n /**\r\n * Gets or sets the default logging level. Excalibur will only log\r\n * messages if equal to or above this level. Default: [[LogLevel.Info]]\r\n */\r\n this.defaultLevel = LogLevel.Info;\r\n if (Logger._INSTANCE) {\r\n throw new Error('Logger is a singleton');\r\n }\r\n Logger._INSTANCE = this;\r\n // Default console appender\r\n Logger._INSTANCE.addAppender(new ConsoleAppender());\r\n return Logger._INSTANCE;\r\n }\r\n /**\r\n * Gets the current static instance of Logger\r\n */\r\n static getInstance() {\r\n if (Logger._INSTANCE == null) {\r\n Logger._INSTANCE = new Logger();\r\n }\r\n return Logger._INSTANCE;\r\n }\r\n /**\r\n * Adds a new [[Appender]] to the list of appenders to write to\r\n */\r\n addAppender(appender) {\r\n this._appenders.push(appender);\r\n }\r\n /**\r\n * Clears all appenders from the logger\r\n */\r\n clearAppenders() {\r\n this._appenders.length = 0;\r\n }\r\n /**\r\n * Logs a message at a given LogLevel\r\n * @param level The LogLevel`to log the message at\r\n * @param args An array of arguments to write to an appender\r\n */\r\n _log(level, args) {\r\n if (level == null) {\r\n level = this.defaultLevel;\r\n }\r\n const len = this._appenders.length;\r\n for (let i = 0; i < len; i++) {\r\n if (level >= this.defaultLevel) {\r\n this._appenders[i].log(level, args);\r\n }\r\n }\r\n }\r\n /**\r\n * Writes a log message at the [[LogLevel.Debug]] level\r\n * @param args Accepts any number of arguments\r\n */\r\n debug(...args) {\r\n this._log(LogLevel.Debug, args);\r\n }\r\n /**\r\n * Writes a log message at the [[LogLevel.Info]] level\r\n * @param args Accepts any number of arguments\r\n */\r\n info(...args) {\r\n this._log(LogLevel.Info, args);\r\n }\r\n /**\r\n * Writes a log message at the [[LogLevel.Warn]] level\r\n * @param args Accepts any number of arguments\r\n */\r\n warn(...args) {\r\n this._log(LogLevel.Warn, args);\r\n }\r\n /**\r\n * Writes a log message at the [[LogLevel.Error]] level\r\n * @param args Accepts any number of arguments\r\n */\r\n error(...args) {\r\n this._log(LogLevel.Error, args);\r\n }\r\n /**\r\n * Writes a log message at the [[LogLevel.Fatal]] level\r\n * @param args Accepts any number of arguments\r\n */\r\n fatal(...args) {\r\n this._log(LogLevel.Fatal, args);\r\n }\r\n}\r\nLogger._INSTANCE = null;\r\n/**\r\n * Console appender for browsers (i.e. `console.log`)\r\n */\r\nclass ConsoleAppender {\r\n /**\r\n * Logs a message at the given [[LogLevel]]\r\n * @param level Level to log at\r\n * @param args Arguments to log\r\n */\r\n log(level, args) {\r\n // Check for console support\r\n if (!console && !console.log && console.warn && console.error) {\r\n // todo maybe do something better than nothing\r\n return;\r\n }\r\n // Create a new console args array\r\n const consoleArgs = [];\r\n consoleArgs.unshift.apply(consoleArgs, args);\r\n consoleArgs.unshift('[' + LogLevel[level] + '] : ');\r\n if (level < LogLevel.Warn) {\r\n // Call .log for Debug/Info\r\n if (console.log.apply) {\r\n // this is required on some older browsers that don't support apply on console.log :(\r\n console.log.apply(console, consoleArgs);\r\n }\r\n else {\r\n console.log(consoleArgs.join(' '));\r\n }\r\n }\r\n else if (level < LogLevel.Error) {\r\n // Call .warn for Warn\r\n if (console.warn.apply) {\r\n console.warn.apply(console, consoleArgs);\r\n }\r\n else {\r\n console.warn(consoleArgs.join(' '));\r\n }\r\n }\r\n else {\r\n // Call .error for Error/Fatal\r\n if (console.error.apply) {\r\n console.error.apply(console, consoleArgs);\r\n }\r\n else {\r\n console.error(consoleArgs.join(' '));\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * On-screen (canvas) appender\r\n */\r\nclass ScreenAppender {\r\n /**\r\n * @param width Width of the screen appender in pixels\r\n * @param height Height of the screen appender in pixels\r\n */\r\n constructor(width, height) {\r\n // @todo Clean this up\r\n this._messages = [];\r\n this._canvas = document.createElement('canvas');\r\n this._canvas.width = width || window.innerWidth;\r\n this._canvas.height = height || window.innerHeight;\r\n this._canvas.style.position = 'absolute';\r\n // eslint-disable-next-line\r\n this._ctx = this._canvas.getContext('2d'); // eslint-disable-line\r\n document.body.appendChild(this._canvas);\r\n }\r\n /**\r\n * Logs a message at the given [[LogLevel]]\r\n * @param level Level to log at\r\n * @param args Arguments to log\r\n */\r\n log(level, args) {\r\n const message = args.join(',');\r\n this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\r\n this._messages.unshift('[' + LogLevel[level] + '] : ' + message);\r\n let pos = 10;\r\n let opacity = 1.0;\r\n for (let i = 0; i < this._messages.length; i++) {\r\n this._ctx.fillStyle = 'rgba(255,255,255,' + opacity.toFixed(2) + ')';\r\n this._ctx.fillText(this._messages[i], 200, pos);\r\n pos += 10;\r\n opacity = opacity > 0 ? opacity - 0.05 : 0;\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Util/IFrame.ts\n/**\r\n * Checks if excalibur is in a x-origin iframe\r\n */\r\nfunction isCrossOriginIframe() {\r\n try {\r\n // Try and listen to events on top window frame if within an iframe.\r\n //\r\n // See https://github.com/excaliburjs/Excalibur/issues/1294\r\n //\r\n // Attempt to add an event listener, which triggers a DOMException on\r\n // cross-origin iframes\r\n const noop = () => {\r\n return;\r\n };\r\n window.top.addEventListener('blur', noop);\r\n window.top.removeEventListener('blur', noop);\r\n }\r\n catch (_a) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\n;// CONCATENATED MODULE: ./Input/Keyboard.ts\n\r\n\r\n\r\n\r\n/**\r\n * Enum representing physical input key codes\r\n */\r\nvar Keys;\r\n(function (Keys) {\r\n // NUMPAD\r\n Keys[\"Num0\"] = \"Numpad0\";\r\n Keys[\"Num1\"] = \"Numpad1\";\r\n Keys[\"Num2\"] = \"Numpad2\";\r\n Keys[\"Num3\"] = \"Numpad3\";\r\n Keys[\"Num4\"] = \"Numpad4\";\r\n Keys[\"Num5\"] = \"Numpad5\";\r\n Keys[\"Num6\"] = \"Numpad6\";\r\n Keys[\"Num7\"] = \"Numpad7\";\r\n Keys[\"Num8\"] = \"Numpad8\";\r\n Keys[\"Num9\"] = \"Numpad9\";\r\n Keys[\"NumAdd\"] = \"NumpadAdd\";\r\n Keys[\"NumSubtract\"] = \"NumpadSubtract\";\r\n Keys[\"NumMultiply\"] = \"NumpadMultiply\";\r\n Keys[\"NumDivide\"] = \"NumpadDivide\";\r\n // NumComma = 'NumpadComma', // not x-browser\r\n Keys[\"NumDecimal\"] = \"NumpadDecimal\";\r\n Keys[\"Numpad0\"] = \"Numpad0\";\r\n Keys[\"Numpad1\"] = \"Numpad1\";\r\n Keys[\"Numpad2\"] = \"Numpad2\";\r\n Keys[\"Numpad3\"] = \"Numpad3\";\r\n Keys[\"Numpad4\"] = \"Numpad4\";\r\n Keys[\"Numpad5\"] = \"Numpad5\";\r\n Keys[\"Numpad6\"] = \"Numpad6\";\r\n Keys[\"Numpad7\"] = \"Numpad7\";\r\n Keys[\"Numpad8\"] = \"Numpad8\";\r\n Keys[\"Numpad9\"] = \"Numpad9\";\r\n Keys[\"NumpadAdd\"] = \"NumpadAdd\";\r\n Keys[\"NumpadSubtract\"] = \"NumpadSubtract\";\r\n Keys[\"NumpadMultiply\"] = \"NumpadMultiply\";\r\n Keys[\"NumpadDivide\"] = \"NumpadDivide\";\r\n // NumpadComma = 'NumpadComma', // not x-browser\r\n Keys[\"NumpadDecimal\"] = \"NumpadDecimal\";\r\n // MODIFIERS\r\n Keys[\"NumLock\"] = \"NumLock\";\r\n Keys[\"ShiftLeft\"] = \"ShiftLeft\";\r\n Keys[\"ShiftRight\"] = \"ShiftRight\";\r\n Keys[\"AltLeft\"] = \"AltLeft\";\r\n Keys[\"AltRight\"] = \"AltRight\";\r\n Keys[\"ControlLeft\"] = \"ControlLeft\";\r\n Keys[\"ControlRight\"] = \"ControlRight\";\r\n Keys[\"MetaLeft\"] = \"MetaLeft\";\r\n Keys[\"MetaRight\"] = \"MetaRight\";\r\n // NUMBERS\r\n Keys[\"Key0\"] = \"Digit0\";\r\n Keys[\"Key1\"] = \"Digit1\";\r\n Keys[\"Key2\"] = \"Digit2\";\r\n Keys[\"Key3\"] = \"Digit3\";\r\n Keys[\"Key4\"] = \"Digit4\";\r\n Keys[\"Key5\"] = \"Digit5\";\r\n Keys[\"Key6\"] = \"Digit6\";\r\n Keys[\"Key7\"] = \"Digit7\";\r\n Keys[\"Key8\"] = \"Digit8\";\r\n Keys[\"Key9\"] = \"Digit9\";\r\n Keys[\"Digit0\"] = \"Digit0\";\r\n Keys[\"Digit1\"] = \"Digit1\";\r\n Keys[\"Digit2\"] = \"Digit2\";\r\n Keys[\"Digit3\"] = \"Digit3\";\r\n Keys[\"Digit4\"] = \"Digit4\";\r\n Keys[\"Digit5\"] = \"Digit5\";\r\n Keys[\"Digit6\"] = \"Digit6\";\r\n Keys[\"Digit7\"] = \"Digit7\";\r\n Keys[\"Digit8\"] = \"Digit8\";\r\n Keys[\"Digit9\"] = \"Digit9\";\r\n // FUNCTION KEYS\r\n Keys[\"F1\"] = \"F1\";\r\n Keys[\"F2\"] = \"F2\";\r\n Keys[\"F3\"] = \"F3\";\r\n Keys[\"F4\"] = \"F4\";\r\n Keys[\"F5\"] = \"F5\";\r\n Keys[\"F6\"] = \"F6\";\r\n Keys[\"F7\"] = \"F7\";\r\n Keys[\"F8\"] = \"F8\";\r\n Keys[\"F9\"] = \"F9\";\r\n Keys[\"F10\"] = \"F10\";\r\n Keys[\"F11\"] = \"F11\";\r\n Keys[\"F12\"] = \"F12\";\r\n // LETTERS\r\n Keys[\"A\"] = \"KeyA\";\r\n Keys[\"B\"] = \"KeyB\";\r\n Keys[\"C\"] = \"KeyC\";\r\n Keys[\"D\"] = \"KeyD\";\r\n Keys[\"E\"] = \"KeyE\";\r\n Keys[\"F\"] = \"KeyF\";\r\n Keys[\"G\"] = \"KeyG\";\r\n Keys[\"H\"] = \"KeyH\";\r\n Keys[\"I\"] = \"KeyI\";\r\n Keys[\"J\"] = \"KeyJ\";\r\n Keys[\"K\"] = \"KeyK\";\r\n Keys[\"L\"] = \"KeyL\";\r\n Keys[\"M\"] = \"KeyM\";\r\n Keys[\"N\"] = \"KeyN\";\r\n Keys[\"O\"] = \"KeyO\";\r\n Keys[\"P\"] = \"KeyP\";\r\n Keys[\"Q\"] = \"KeyQ\";\r\n Keys[\"R\"] = \"KeyR\";\r\n Keys[\"S\"] = \"KeyS\";\r\n Keys[\"T\"] = \"KeyT\";\r\n Keys[\"U\"] = \"KeyU\";\r\n Keys[\"V\"] = \"KeyV\";\r\n Keys[\"W\"] = \"KeyW\";\r\n Keys[\"X\"] = \"KeyX\";\r\n Keys[\"Y\"] = \"KeyY\";\r\n Keys[\"Z\"] = \"KeyZ\";\r\n Keys[\"KeyA\"] = \"KeyA\";\r\n Keys[\"KeyB\"] = \"KeyB\";\r\n Keys[\"KeyC\"] = \"KeyC\";\r\n Keys[\"KeyD\"] = \"KeyD\";\r\n Keys[\"KeyE\"] = \"KeyE\";\r\n Keys[\"KeyF\"] = \"KeyF\";\r\n Keys[\"KeyG\"] = \"KeyG\";\r\n Keys[\"KeyH\"] = \"KeyH\";\r\n Keys[\"KeyI\"] = \"KeyI\";\r\n Keys[\"KeyJ\"] = \"KeyJ\";\r\n Keys[\"KeyK\"] = \"KeyK\";\r\n Keys[\"KeyL\"] = \"KeyL\";\r\n Keys[\"KeyM\"] = \"KeyM\";\r\n Keys[\"KeyN\"] = \"KeyN\";\r\n Keys[\"KeyO\"] = \"KeyO\";\r\n Keys[\"KeyP\"] = \"KeyP\";\r\n Keys[\"KeyQ\"] = \"KeyQ\";\r\n Keys[\"KeyR\"] = \"KeyR\";\r\n Keys[\"KeyS\"] = \"KeyS\";\r\n Keys[\"KeyT\"] = \"KeyT\";\r\n Keys[\"KeyU\"] = \"KeyU\";\r\n Keys[\"KeyV\"] = \"KeyV\";\r\n Keys[\"KeyW\"] = \"KeyW\";\r\n Keys[\"KeyX\"] = \"KeyX\";\r\n Keys[\"KeyY\"] = \"KeyY\";\r\n Keys[\"KeyZ\"] = \"KeyZ\";\r\n // SYMBOLS\r\n Keys[\"Semicolon\"] = \"Semicolon\";\r\n Keys[\"Quote\"] = \"Quote\";\r\n Keys[\"Comma\"] = \"Comma\";\r\n Keys[\"Minus\"] = \"Minus\";\r\n Keys[\"Period\"] = \"Period\";\r\n Keys[\"Slash\"] = \"Slash\";\r\n Keys[\"Equal\"] = \"Equal\";\r\n Keys[\"BracketLeft\"] = \"BracketLeft\";\r\n Keys[\"Backslash\"] = \"Backslash\";\r\n Keys[\"BracketRight\"] = \"BracketRight\";\r\n Keys[\"Backquote\"] = \"Backquote\";\r\n // DIRECTIONS\r\n Keys[\"Up\"] = \"ArrowUp\";\r\n Keys[\"Down\"] = \"ArrowDown\";\r\n Keys[\"Left\"] = \"ArrowLeft\";\r\n Keys[\"Right\"] = \"ArrowRight\";\r\n Keys[\"ArrowUp\"] = \"ArrowUp\";\r\n Keys[\"ArrowDown\"] = \"ArrowDown\";\r\n Keys[\"ArrowLeft\"] = \"ArrowLeft\";\r\n Keys[\"ArrowRight\"] = \"ArrowRight\";\r\n // OTHER\r\n Keys[\"Space\"] = \"Space\";\r\n Keys[\"Backspace\"] = \"Backspace\";\r\n Keys[\"Delete\"] = \"Delete\";\r\n Keys[\"Esc\"] = \"Escape\";\r\n Keys[\"Escape\"] = \"Escape\";\r\n Keys[\"Enter\"] = \"Enter\";\r\n Keys[\"NumpadEnter\"] = \"NumpadEnter\";\r\n Keys[\"ContextMenu\"] = \"ContextMenu\";\r\n})(Keys || (Keys = {}));\r\n/**\r\n * Event thrown on a game object for a key event\r\n */\r\nclass KeyEvent extends GameEvent {\r\n /**\r\n * @param key The key responsible for throwing the event\r\n * @param value The key's typed value the browser detected\r\n * @param originalEvent The original keyboard event that Excalibur handled\r\n */\r\n constructor(key, value, originalEvent) {\r\n super();\r\n this.key = key;\r\n this.value = value;\r\n this.originalEvent = originalEvent;\r\n }\r\n}\r\nconst KeyEvents = {\r\n Press: 'press',\r\n Hold: 'hold',\r\n Release: 'release'\r\n};\r\n/**\r\n * Provides keyboard support for Excalibur.\r\n */\r\nclass Keyboard {\r\n constructor() {\r\n this.events = new EventEmitter();\r\n /**\r\n * Keys that are currently held down\r\n */\r\n this._keys = [];\r\n /**\r\n * Keys up in the current frame\r\n */\r\n this._keysUp = [];\r\n /**\r\n * Keys down in the current frame\r\n */\r\n this._keysDown = [];\r\n this._releaseAllKeys = (ev) => {\r\n for (const code of this._keys) {\r\n const keyEvent = new KeyEvent(code, ev.key, ev);\r\n this.events.emit('up', keyEvent);\r\n this.events.emit('release', keyEvent);\r\n }\r\n this._keysUp = Array.from((new Set(this._keys.concat(this._keysUp))));\r\n this._keys.length = 0;\r\n };\r\n this._handleKeyDown = (ev) => {\r\n // handle macos meta key issue\r\n // https://github.com/excaliburjs/Excalibur/issues/2608\r\n if (!ev.metaKey && (this._keys.includes(Keys.MetaLeft) || this._keys.includes(Keys.MetaRight))) {\r\n this._releaseAllKeys(ev);\r\n }\r\n const code = ev.code;\r\n if (this._keys.indexOf(code) === -1) {\r\n this._keys.push(code);\r\n this._keysDown.push(code);\r\n const keyEvent = new KeyEvent(code, ev.key, ev);\r\n this.events.emit('down', keyEvent);\r\n this.events.emit('press', keyEvent);\r\n }\r\n };\r\n this._handleKeyUp = (ev) => {\r\n const code = ev.code;\r\n const key = this._keys.indexOf(code);\r\n this._keys.splice(key, 1);\r\n this._keysUp.push(code);\r\n const keyEvent = new KeyEvent(code, ev.key, ev);\r\n // alias the old api, we may want to deprecate this in the future\r\n this.events.emit('up', keyEvent);\r\n this.events.emit('release', keyEvent);\r\n // handle macos meta key issue\r\n // https://github.com/excaliburjs/Excalibur/issues/2608\r\n if (ev.key === 'Meta') {\r\n this._releaseAllKeys(ev);\r\n }\r\n };\r\n }\r\n emit(eventName, event) {\r\n this.events.emit(eventName, event);\r\n }\r\n on(eventName, handler) {\r\n return this.events.on(eventName, handler);\r\n }\r\n once(eventName, handler) {\r\n return this.events.once(eventName, handler);\r\n }\r\n off(eventName, handler) {\r\n this.events.off(eventName, handler);\r\n }\r\n /**\r\n * Initialize Keyboard event listeners\r\n */\r\n init(keyboardOptions) {\r\n let { global } = keyboardOptions;\r\n const { grabWindowFocus } = keyboardOptions;\r\n if (!global) {\r\n if (isCrossOriginIframe()) {\r\n global = window;\r\n // Workaround for iframes like for itch.io or codesandbox\r\n // https://www.reddit.com/r/gamemaker/comments/kfs5cs/keyboard_inputs_no_longer_working_in_html5_game/\r\n // https://forum.gamemaker.io/index.php?threads/solved-keyboard-issue-on-itch-io.87336/\r\n if (grabWindowFocus) {\r\n window.focus();\r\n }\r\n Logger.getInstance().warn('Excalibur might be in a cross-origin iframe, in order to receive keyboard events it must be in focus');\r\n }\r\n else {\r\n global = window.top;\r\n }\r\n }\r\n global.addEventListener('blur', () => {\r\n this._keys.length = 0; // empties array efficiently\r\n });\r\n // key up is on window because canvas cannot have focus\r\n global.addEventListener('keyup', this._handleKeyUp);\r\n // key down is on window because canvas cannot have focus\r\n global.addEventListener('keydown', this._handleKeyDown);\r\n }\r\n update() {\r\n // Reset keysDown and keysUp after update is complete\r\n this._keysDown.length = 0;\r\n this._keysUp.length = 0;\r\n // Emit synthetic \"hold\" event\r\n for (let i = 0; i < this._keys.length; i++) {\r\n this.events.emit('hold', new KeyEvent(this._keys[i]));\r\n }\r\n }\r\n /**\r\n * Gets list of keys being pressed down\r\n */\r\n getKeys() {\r\n return this._keys;\r\n }\r\n /**\r\n * Tests if a certain key was just pressed this frame. This is cleared at the end of the update frame.\r\n * @param key Test whether a key was just pressed\r\n */\r\n wasPressed(key) {\r\n return this._keysDown.indexOf(key) > -1;\r\n }\r\n /**\r\n * Tests if a certain key is held down. This is persisted between frames.\r\n * @param key Test whether a key is held down\r\n */\r\n isHeld(key) {\r\n return this._keys.indexOf(key) > -1;\r\n }\r\n /**\r\n * Tests if a certain key was just released this frame. This is cleared at the end of the update frame.\r\n * @param key Test whether a key was just released\r\n */\r\n wasReleased(key) {\r\n return this._keysUp.indexOf(key) > -1;\r\n }\r\n /**\r\n * Trigger a manual key event\r\n * @param type\r\n * @param key\r\n * @param character\r\n */\r\n triggerEvent(type, key, character) {\r\n if (type === 'down') {\r\n this._handleKeyDown(new KeyboardEvent('keydown', {\r\n code: key,\r\n key: character !== null && character !== void 0 ? character : null\r\n }));\r\n }\r\n if (type === 'up') {\r\n this._handleKeyUp(new KeyboardEvent('keyup', {\r\n code: key,\r\n key: character !== null && character !== void 0 ? character : null\r\n }));\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Input/PointerScope.ts\n/**\r\n * Determines the scope of handling mouse/touch events.\r\n */\r\nvar PointerScope;\r\n(function (PointerScope) {\r\n /**\r\n * Handle events on the `canvas` element only. Events originating outside the\r\n * `canvas` will not be handled.\r\n */\r\n PointerScope[\"Canvas\"] = \"Canvas\";\r\n /**\r\n * Handles events on the entire document. All events will be handled by Excalibur.\r\n */\r\n PointerScope[\"Document\"] = \"Document\";\r\n})(PointerScope || (PointerScope = {}));\r\n\n;// CONCATENATED MODULE: ./Math/Random.ts\n/**\r\n * @module\r\n * Pseudo-Random Utility\r\n *\r\n * A pseudo-random utility to add seeded random support for help in\r\n * generating things like terrain or reproducible randomness. Uses the\r\n * [Mersenne Twister](https://en.wikipedia.org/wiki/Mersenne_Twister) algorithm.\r\n */\r\n/**\r\n * 32-bit mask\r\n */\r\nconst BITMASK32 = 0xffffffff;\r\n/**\r\n * Pseudo-random number generator following the Mersenne_Twister algorithm. Given a seed this generator will produce the same sequence\r\n * of numbers each time it is called.\r\n * See https://en.wikipedia.org/wiki/Mersenne_Twister for more details.\r\n * Uses the MT19937-32 (2002) implementation documented here http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html\r\n *\r\n * Api inspired by http://chancejs.com/# https://github.com/chancejs/chancejs\r\n */\r\nclass Random {\r\n /**\r\n * If no seed is specified, the Date.now() is used\r\n */\r\n constructor(seed) {\r\n this.seed = seed;\r\n // Separation point of one one word, the number of bits in the lower bitmask 0 <= r <= w-1\r\n this._lowerMask = 0x7fffffff; // 31 bits same as _r\r\n this._upperMask = 0x80000000; // 34 high bits\r\n // Word size, 64 bits\r\n this._w = 32;\r\n // Degree of recurrence\r\n this._n = 624;\r\n // Middle word, an offset used in the recurrence defining the series x, 1<=m>> 0;\r\n for (let i = 1; i < this._n; i++) {\r\n const s = this._mt[i - 1] ^ (this._mt[i - 1] >>> (this._w - 2));\r\n // numbers are bigger than the JS max safe int, add in 16-bit chunks to prevent IEEE rounding errors on high bits\r\n this._mt[i] = (((this._f * ((s & 0xffff0000) >>> 16)) << 16) + this._f * (s & 0xffff) + i) >>> 0;\r\n }\r\n this._index = this._n;\r\n }\r\n /**\r\n * Apply the twist\r\n */\r\n _twist() {\r\n const mag01 = [0x0, this._a];\r\n let y = 0, i = 0;\r\n for (; i < this._n - this._m; i++) {\r\n y = (this._mt[i] & this._upperMask) | (this._mt[i + 1] & this._lowerMask);\r\n this._mt[i] = this._mt[i + this._m] ^ (y >>> 1) ^ (mag01[y & 0x1] & BITMASK32);\r\n }\r\n for (; i < this._n - 1; i++) {\r\n y = (this._mt[i] & this._upperMask) | (this._mt[i + 1] & this._lowerMask);\r\n this._mt[i] = this._mt[i + (this._m - this._n)] ^ (y >>> 1) ^ (mag01[y & 0x1] & BITMASK32);\r\n }\r\n y = (this._mt[this._n - 1] & this._upperMask) | (this._mt[0] & this._lowerMask);\r\n this._mt[this._n - 1] = this._mt[this._m - 1] ^ (y >>> 1) ^ (mag01[y & 0x1] & BITMASK32);\r\n this._index = 0;\r\n }\r\n /**\r\n * Return next 32 bit integer number in sequence\r\n */\r\n nextInt() {\r\n if (this._index >= this._n) {\r\n this._twist();\r\n }\r\n let y = this._mt[this._index++];\r\n y ^= y >>> this._u;\r\n y ^= (y << this._s) & this._b;\r\n y ^= (y << this._t) & this._c;\r\n y ^= y >>> this._l;\r\n return y >>> 0;\r\n }\r\n /**\r\n * Return a random floating point number between [0, 1)\r\n */\r\n next() {\r\n return this.nextInt() * (1.0 / 4294967296.0); // divided by 2^32\r\n }\r\n /**\r\n * Return a random floating point in range [min, max) min is included, max is not included\r\n */\r\n floating(min, max) {\r\n return (max - min) * this.next() + min;\r\n }\r\n /**\r\n * Return a random integer in range [min, max] min is included, max is included.\r\n * Implemented with rejection sampling, see https://medium.com/@betable/tifu-by-using-math-random-f1c308c4fd9d#.i13tdiu5a\r\n */\r\n integer(min, max) {\r\n return Math.floor((max - min + 1) * this.next() + min);\r\n }\r\n /**\r\n * Returns true or false randomly with 50/50 odds by default.\r\n * By default the likelihood of returning a true is .5 (50%).\r\n * @param likelihood takes values between [0, 1]\r\n */\r\n bool(likelihood = 0.5) {\r\n return this.next() <= likelihood;\r\n }\r\n /**\r\n * Returns one element from an array at random\r\n */\r\n pickOne(array) {\r\n return array[this.integer(0, array.length - 1)];\r\n }\r\n /**\r\n * Returns a new array random picking elements from the original\r\n * @param array Original array to pick from\r\n * @param numPicks can be any positive number\r\n * @param allowDuplicates indicates whether the returned set is allowed duplicates (it does not mean there will always be duplicates\r\n * just that it is possible)\r\n */\r\n pickSet(array, numPicks, allowDuplicates = false) {\r\n if (allowDuplicates) {\r\n return this._pickSetWithDuplicates(array, numPicks);\r\n }\r\n else {\r\n return this._pickSetWithoutDuplicates(array, numPicks);\r\n }\r\n }\r\n /**\r\n * Returns a new array randomly picking elements in the original (not reused)\r\n * @param array Array to pick elements out of\r\n * @param numPicks must be less than or equal to the number of elements in the array.\r\n */\r\n _pickSetWithoutDuplicates(array, numPicks) {\r\n if (numPicks > array.length || numPicks < 0) {\r\n throw new Error('Invalid number of elements to pick, must pick a value 0 < n <= length');\r\n }\r\n if (numPicks === array.length) {\r\n return array;\r\n }\r\n const result = new Array(numPicks);\r\n let currentPick = 0;\r\n const tempArray = array.slice(0);\r\n while (currentPick < numPicks) {\r\n const index = this.integer(0, tempArray.length - 1);\r\n result[currentPick++] = tempArray[index];\r\n tempArray.splice(index, 1);\r\n }\r\n return result;\r\n }\r\n /**\r\n * Returns a new array random picking elements from the original allowing duplicates\r\n * @param array Array to pick elements out of\r\n * @param numPicks can be any positive number\r\n */\r\n _pickSetWithDuplicates(array, numPicks) {\r\n // Typescript numbers are all floating point, so do we add check for int? (or floor the input?)\r\n if (numPicks < 0) {\r\n throw new Error('Invalid number of elements to pick, must pick a value 0 <= n < MAX_INT');\r\n }\r\n const result = new Array(numPicks);\r\n for (let i = 0; i < numPicks; i++) {\r\n result[i] = this.pickOne(array);\r\n }\r\n return result;\r\n }\r\n /**\r\n * Returns a new array that has its elements shuffled. Using the Fisher/Yates method\r\n * https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle\r\n */\r\n shuffle(array) {\r\n const tempArray = array.slice(0);\r\n let swap = null;\r\n for (let i = 0; i < tempArray.length - 2; i++) {\r\n const randomIndex = this.integer(i, tempArray.length - 1);\r\n swap = tempArray[i];\r\n tempArray[i] = tempArray[randomIndex];\r\n tempArray[randomIndex] = swap;\r\n }\r\n return tempArray;\r\n }\r\n /**\r\n * Generate a list of random integer numbers\r\n * @param length the length of the final array\r\n * @param min the minimum integer number to generate inclusive\r\n * @param max the maximum integer number to generate inclusive\r\n */\r\n range(length, min, max) {\r\n const result = new Array(length);\r\n for (let i = 0; i < length; i++) {\r\n result[i] = this.integer(min, max);\r\n }\r\n return result;\r\n }\r\n /**\r\n * Returns the result of a d4 dice roll\r\n */\r\n d4() {\r\n return this.integer(1, 4);\r\n }\r\n /**\r\n * Returns the result of a d6 dice roll\r\n */\r\n d6() {\r\n return this.integer(1, 6);\r\n }\r\n /**\r\n * Returns the result of a d8 dice roll\r\n */\r\n d8() {\r\n return this.integer(1, 8);\r\n }\r\n /**\r\n * Returns the result of a d10 dice roll\r\n */\r\n d10() {\r\n return this.integer(1, 10);\r\n }\r\n /**\r\n * Returns the result of a d12 dice roll\r\n */\r\n d12() {\r\n return this.integer(1, 12);\r\n }\r\n /**\r\n * Returns the result of a d20 dice roll\r\n */\r\n d20() {\r\n return this.integer(1, 20);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Math/util.ts\n\r\n/**\r\n * Two PI constant\r\n */\r\nconst TwoPI = Math.PI * 2;\r\n/**\r\n * Returns the fractional part of a number\r\n * @param x\r\n */\r\nfunction frac(x) {\r\n if (x >= 0) {\r\n return x - Math.floor(x);\r\n }\r\n else {\r\n return x - Math.ceil(x);\r\n }\r\n}\r\n/**\r\n * Returns the sign of a number, if 0 returns 0\r\n */\r\nfunction sign(val) {\r\n if (val === 0) {\r\n return 0;\r\n }\r\n return val < 0 ? -1 : 1;\r\n}\r\n;\r\n/**\r\n * Clamps a value between a min and max inclusive\r\n */\r\nfunction clamp(val, min, max) {\r\n return Math.min(Math.max(min, val), max);\r\n}\r\n/**\r\n * Convert an angle to be the equivalent in the range [0, 2PI]\r\n */\r\nfunction canonicalizeAngle(angle) {\r\n let tmpAngle = angle;\r\n if (angle > TwoPI) {\r\n while (tmpAngle > TwoPI) {\r\n tmpAngle -= TwoPI;\r\n }\r\n }\r\n if (angle < 0) {\r\n while (tmpAngle < 0) {\r\n tmpAngle += TwoPI;\r\n }\r\n }\r\n return tmpAngle;\r\n}\r\n/**\r\n * Convert radians to degrees\r\n */\r\nfunction toDegrees(radians) {\r\n return (180 / Math.PI) * radians;\r\n}\r\n/**\r\n * Convert degrees to radians\r\n */\r\nfunction toRadians(degrees) {\r\n return (degrees / 180) * Math.PI;\r\n}\r\n/**\r\n * Generate a range of numbers\r\n * For example: range(0, 5) -> [0, 1, 2, 3, 4, 5]\r\n * @param from inclusive\r\n * @param to inclusive\r\n */\r\nconst range = (from, to) => Array.from(new Array(to - from + 1), (_x, i) => i + from);\r\n/**\r\n * Find a random floating point number in range\r\n */\r\nfunction randomInRange(min, max, random = new Random()) {\r\n return random ? random.floating(min, max) : min + Math.random() * (max - min);\r\n}\r\n/**\r\n * Find a random integer in a range\r\n */\r\nfunction randomIntInRange(min, max, random = new Random()) {\r\n return random ? random.integer(min, max) : Math.round(randomInRange(min, max));\r\n}\r\n\n;// CONCATENATED MODULE: ./Math/vector.ts\n\r\n/**\r\n * A 2D vector on a plane.\r\n */\r\nclass Vector {\r\n /**\r\n * A (0, 0) vector\r\n */\r\n static get Zero() {\r\n return new Vector(0, 0);\r\n }\r\n /**\r\n * A (1, 1) vector\r\n */\r\n static get One() {\r\n return new Vector(1, 1);\r\n }\r\n /**\r\n * A (0.5, 0.5) vector\r\n */\r\n static get Half() {\r\n return new Vector(0.5, 0.5);\r\n }\r\n /**\r\n * A unit vector pointing up (0, -1)\r\n */\r\n static get Up() {\r\n return new Vector(0, -1);\r\n }\r\n /**\r\n * A unit vector pointing down (0, 1)\r\n */\r\n static get Down() {\r\n return new Vector(0, 1);\r\n }\r\n /**\r\n * A unit vector pointing left (-1, 0)\r\n */\r\n static get Left() {\r\n return new Vector(-1, 0);\r\n }\r\n /**\r\n * A unit vector pointing right (1, 0)\r\n */\r\n static get Right() {\r\n return new Vector(1, 0);\r\n }\r\n /**\r\n * Returns a vector of unit length in the direction of the specified angle in Radians.\r\n * @param angle The angle to generate the vector\r\n */\r\n static fromAngle(angle) {\r\n return new Vector(Math.cos(angle), Math.sin(angle));\r\n }\r\n /**\r\n * Checks if vector is not null, undefined, or if any of its components are NaN or Infinity.\r\n */\r\n static isValid(vec) {\r\n if (vec === null || vec === undefined) {\r\n return false;\r\n }\r\n if (isNaN(vec.x) || isNaN(vec.y)) {\r\n return false;\r\n }\r\n if (vec.x === Infinity || vec.y === Infinity || vec.x === -Infinity || vec.y === -Infinity) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n /**\r\n * Calculates distance between two Vectors\r\n * @param vec1\r\n * @param vec2\r\n */\r\n static distance(vec1, vec2) {\r\n return Math.sqrt(Math.pow(vec1.x - vec2.x, 2) + Math.pow(vec1.y - vec2.y, 2));\r\n }\r\n static min(vec1, vec2) {\r\n return new Vector(Math.min(vec1.x, vec2.x), Math.min(vec1.y, vec2.y));\r\n }\r\n static max(vec1, vec2) {\r\n return new Vector(Math.max(vec1.x, vec2.x), Math.max(vec1.y, vec2.y));\r\n }\r\n /**\r\n * @param x X component of the Vector\r\n * @param y Y component of the Vector\r\n */\r\n constructor(x, y) {\r\n this._x = 0;\r\n this._y = 0;\r\n this._x = x;\r\n this._y = y;\r\n }\r\n /**\r\n * Get the x component of the vector\r\n */\r\n get x() {\r\n return this._x;\r\n }\r\n /**\r\n * Set the x component, THIS MUTATES the current vector. It is usually better to create a new vector.\r\n * @warning **Be very careful setting components on shared vectors, mutating shared vectors can cause hard to find bugs**\r\n */\r\n set x(val) {\r\n this._x = val;\r\n }\r\n /**\r\n * Get the y component of the vector\r\n */\r\n get y() {\r\n return this._y;\r\n }\r\n /**\r\n * Set the y component, THIS MUTATES the current vector. It is usually better to create a new vector.\r\n * @warning **Be very careful setting components on shared vectors, mutating shared vectors can cause hard to find bugs**\r\n */\r\n set y(val) {\r\n this._y = val;\r\n }\r\n /**\r\n * Sets the x and y components at once, THIS MUTATES the current vector. It is usually better to create a new vector.\r\n *\r\n * @warning **Be very careful using this, mutating vectors can cause hard to find bugs**\r\n */\r\n setTo(x, y) {\r\n this.x = x;\r\n this.y = y;\r\n }\r\n /**\r\n * Compares this point against another and tests for equality\r\n * @param vector The other point to compare to\r\n * @param tolerance Amount of euclidean distance off we are willing to tolerate\r\n */\r\n equals(vector, tolerance = 0.001) {\r\n return Math.abs(this.x - vector.x) <= tolerance && Math.abs(this.y - vector.y) <= tolerance;\r\n }\r\n /**\r\n * The distance to another vector. If no other Vector is specified, this will return the [[magnitude]].\r\n * @param v The other vector. Leave blank to use origin vector.\r\n */\r\n distance(v) {\r\n if (!v) {\r\n return Math.sqrt(this.x * this.x + this.y * this.y);\r\n }\r\n const deltaX = this.x - v.x;\r\n const deltaY = this.y - v.y;\r\n return Math.sqrt(deltaX * deltaX + deltaY * deltaY);\r\n }\r\n squareDistance(v) {\r\n if (!v) {\r\n v = Vector.Zero;\r\n }\r\n const deltaX = this.x - v.x;\r\n const deltaY = this.y - v.y;\r\n return deltaX * deltaX + deltaY * deltaY;\r\n }\r\n /**\r\n * Clamps the current vector's magnitude mutating it\r\n * @param magnitude\r\n */\r\n clampMagnitude(magnitude) {\r\n const size = this.size;\r\n const newSize = clamp(size, 0, magnitude);\r\n this.size = newSize;\r\n return this;\r\n }\r\n /**\r\n * The size (magnitude) of the Vector\r\n */\r\n get size() {\r\n return this.distance();\r\n }\r\n /**\r\n * Setting the size mutates the current vector\r\n *\r\n * @warning Can be used to set the size of the vector, **be very careful using this, mutating vectors can cause hard to find bugs**\r\n */\r\n set size(newLength) {\r\n const v = this.normalize().scale(newLength);\r\n this.setTo(v.x, v.y);\r\n }\r\n /**\r\n * Normalizes a vector to have a magnitude of 1.\r\n */\r\n normalize() {\r\n const d = this.distance();\r\n if (d > 0) {\r\n return new Vector(this.x / d, this.y / d);\r\n }\r\n else {\r\n return new Vector(0, 1);\r\n }\r\n }\r\n /**\r\n * Returns the average (midpoint) between the current point and the specified\r\n */\r\n average(vec) {\r\n return this.add(vec).scale(0.5);\r\n }\r\n scale(sizeOrScale, dest) {\r\n const result = dest || new Vector(0, 0);\r\n if (sizeOrScale instanceof Vector) {\r\n result.x = this.x * sizeOrScale.x;\r\n result.y = this.y * sizeOrScale.y;\r\n }\r\n else {\r\n result.x = this.x * sizeOrScale;\r\n result.y = this.y * sizeOrScale;\r\n }\r\n return result;\r\n }\r\n /**\r\n * Adds one vector to another\r\n * @param v The vector to add\r\n * @param dest Optionally copy the result into a provided vector\r\n */\r\n add(v, dest) {\r\n if (dest) {\r\n dest.x = this.x + v.x;\r\n dest.y = this.y + v.y;\r\n return dest;\r\n }\r\n return new Vector(this.x + v.x, this.y + v.y);\r\n }\r\n /**\r\n * Subtracts a vector from another, if you subtract vector `B.sub(A)` the resulting vector points from A -> B\r\n * @param v The vector to subtract\r\n */\r\n sub(v) {\r\n return new Vector(this.x - v.x, this.y - v.y);\r\n }\r\n /**\r\n * Adds one vector to this one modifying the original\r\n * @param v The vector to add\r\n * @warning Be very careful using this, mutating vectors can cause hard to find bugs\r\n */\r\n addEqual(v) {\r\n this.setTo(this.x + v.x, this.y + v.y);\r\n return this;\r\n }\r\n /**\r\n * Subtracts a vector from this one modifying the original\r\n * @param v The vector to subtract\r\n * @warning Be very careful using this, mutating vectors can cause hard to find bugs\r\n */\r\n subEqual(v) {\r\n this.setTo(this.x - v.x, this.y - v.y);\r\n return this;\r\n }\r\n /**\r\n * Scales this vector by a factor of size and modifies the original\r\n * @warning Be very careful using this, mutating vectors can cause hard to find bugs\r\n */\r\n scaleEqual(size) {\r\n this.setTo(this.x * size, this.y * size);\r\n return this;\r\n }\r\n /**\r\n * Performs a dot product with another vector\r\n * @param v The vector to dot\r\n */\r\n dot(v) {\r\n return this.x * v.x + this.y * v.y;\r\n }\r\n cross(v) {\r\n if (v instanceof Vector) {\r\n return this.x * v.y - this.y * v.x;\r\n }\r\n else if (typeof v === 'number') {\r\n return new Vector(v * this.y, -v * this.x);\r\n }\r\n }\r\n static cross(num, vec) {\r\n return new Vector(-num * vec.y, num * vec.x);\r\n }\r\n /**\r\n * Returns the perpendicular vector to this one\r\n */\r\n perpendicular() {\r\n return new Vector(this.y, -this.x);\r\n }\r\n /**\r\n * Returns the normal vector to this one, same as the perpendicular of length 1\r\n */\r\n normal() {\r\n return this.perpendicular().normalize();\r\n }\r\n /**\r\n * Negate the current vector\r\n */\r\n negate() {\r\n return this.scale(-1);\r\n }\r\n /**\r\n * Returns the angle of this vector.\r\n */\r\n toAngle() {\r\n return Math.atan2(this.y, this.x);\r\n }\r\n /**\r\n * Rotates the current vector around a point by a certain number of\r\n * degrees in radians\r\n */\r\n rotate(angle, anchor) {\r\n if (!anchor) {\r\n anchor = new Vector(0, 0);\r\n }\r\n const sinAngle = Math.sin(angle);\r\n const cosAngle = Math.cos(angle);\r\n const x = cosAngle * (this.x - anchor.x) - sinAngle * (this.y - anchor.y) + anchor.x;\r\n const y = sinAngle * (this.x - anchor.x) + cosAngle * (this.y - anchor.y) + anchor.y;\r\n return new Vector(x, y);\r\n }\r\n /**\r\n * Creates new vector that has the same values as the previous.\r\n */\r\n clone(dest) {\r\n const v = dest !== null && dest !== void 0 ? dest : new Vector(0, 0);\r\n v.x = this.x;\r\n v.y = this.y;\r\n return v;\r\n }\r\n /**\r\n * Returns a string representation of the vector.\r\n */\r\n toString(fixed) {\r\n if (fixed) {\r\n return `(${this.x.toFixed(fixed)}, ${this.y.toFixed(fixed)})`;\r\n }\r\n return `(${this.x}, ${this.y})`;\r\n }\r\n}\r\n/**\r\n * Shorthand for creating new Vectors - returns a new Vector instance with the\r\n * provided X and Y components.\r\n *\r\n * @param x X component of the Vector\r\n * @param y Y component of the Vector\r\n */\r\nfunction vec(x, y) {\r\n return new Vector(x, y);\r\n}\r\n\n;// CONCATENATED MODULE: ./Color.ts\n/**\r\n * Provides standard colors (e.g. [[Color.Black]])\r\n * but you can also create custom colors using RGB, HSL, or Hex. Also provides\r\n * useful color operations like [[Color.lighten]], [[Color.darken]], and more.\r\n */\r\nclass Color {\r\n /**\r\n * Creates a new instance of Color from an r, g, b, a\r\n *\r\n * @param r The red component of color (0-255)\r\n * @param g The green component of color (0-255)\r\n * @param b The blue component of color (0-255)\r\n * @param a The alpha component of color (0-1.0)\r\n */\r\n constructor(r, g, b, a) {\r\n this.r = r;\r\n this.g = g;\r\n this.b = b;\r\n this.a = a != null ? a : 1;\r\n }\r\n /**\r\n * Creates a new instance of Color from an r, g, b, a\r\n *\r\n * @param r The red component of color (0-255)\r\n * @param g The green component of color (0-255)\r\n * @param b The blue component of color (0-255)\r\n * @param a The alpha component of color (0-1.0)\r\n */\r\n static fromRGB(r, g, b, a) {\r\n return new Color(r, g, b, a);\r\n }\r\n /**\r\n * Creates a new instance of Color from a rgb string\r\n *\r\n * @param string CSS color string of the form rgba(255, 255, 255, 1) or rgb(255, 255, 255)\r\n */\r\n static fromRGBString(string) {\r\n const rgbaRegEx = /^rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*(\\d+(?:\\.\\d+)?))?\\)/i;\r\n let match = null;\r\n if ((match = string.match(rgbaRegEx))) {\r\n const r = parseInt(match[1], 10);\r\n const g = parseInt(match[2], 10);\r\n const b = parseInt(match[3], 10);\r\n let a = 1;\r\n if (match[4]) {\r\n a = parseFloat(match[4]);\r\n }\r\n return new Color(r, g, b, a);\r\n }\r\n else {\r\n throw new Error('Invalid rgb/a string: ' + string);\r\n }\r\n }\r\n /**\r\n * Creates a new instance of Color from a hex string\r\n *\r\n * @param hex CSS color string of the form #ffffff, the alpha component is optional\r\n */\r\n static fromHex(hex) {\r\n const hexRegEx = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})?$/i;\r\n let match = null;\r\n if ((match = hex.match(hexRegEx))) {\r\n const r = parseInt(match[1], 16);\r\n const g = parseInt(match[2], 16);\r\n const b = parseInt(match[3], 16);\r\n let a = 1;\r\n if (match[4]) {\r\n a = parseInt(match[4], 16) / 255;\r\n }\r\n return new Color(r, g, b, a);\r\n }\r\n else {\r\n throw new Error('Invalid hex string: ' + hex);\r\n }\r\n }\r\n /**\r\n * Creates a new instance of Color from hsla values\r\n *\r\n * @param h Hue is represented [0-1]\r\n * @param s Saturation is represented [0-1]\r\n * @param l Luminance is represented [0-1]\r\n * @param a Alpha is represented [0-1]\r\n */\r\n static fromHSL(h, s, l, a = 1.0) {\r\n const temp = new HSLColor(h, s, l, a);\r\n return temp.toRGBA();\r\n }\r\n /**\r\n * Lightens the current color by a specified amount\r\n *\r\n * @param factor The amount to lighten by [0-1]\r\n */\r\n lighten(factor = 0.1) {\r\n const temp = HSLColor.fromRGBA(this.r, this.g, this.b, this.a);\r\n temp.l += (1 - temp.l) * factor;\r\n return temp.toRGBA();\r\n }\r\n /**\r\n * Darkens the current color by a specified amount\r\n *\r\n * @param factor The amount to darken by [0-1]\r\n */\r\n darken(factor = 0.1) {\r\n const temp = HSLColor.fromRGBA(this.r, this.g, this.b, this.a);\r\n temp.l -= temp.l * factor;\r\n return temp.toRGBA();\r\n }\r\n /**\r\n * Saturates the current color by a specified amount\r\n *\r\n * @param factor The amount to saturate by [0-1]\r\n */\r\n saturate(factor = 0.1) {\r\n const temp = HSLColor.fromRGBA(this.r, this.g, this.b, this.a);\r\n temp.s += temp.s * factor;\r\n return temp.toRGBA();\r\n }\r\n /**\r\n * Desaturates the current color by a specified amount\r\n *\r\n * @param factor The amount to desaturate by [0-1]\r\n */\r\n desaturate(factor = 0.1) {\r\n const temp = HSLColor.fromRGBA(this.r, this.g, this.b, this.a);\r\n temp.s -= temp.s * factor;\r\n return temp.toRGBA();\r\n }\r\n /**\r\n * Multiplies a color by another, results in a darker color\r\n *\r\n * @param color The other color\r\n */\r\n multiply(color) {\r\n const newR = (((color.r / 255) * this.r) / 255) * 255;\r\n const newG = (((color.g / 255) * this.g) / 255) * 255;\r\n const newB = (((color.b / 255) * this.b) / 255) * 255;\r\n const newA = color.a * this.a;\r\n return new Color(newR, newG, newB, newA);\r\n }\r\n /**\r\n * Screens a color by another, results in a lighter color\r\n *\r\n * @param color The other color\r\n */\r\n screen(color) {\r\n const color1 = color.invert();\r\n const color2 = color.invert();\r\n return color1.multiply(color2).invert();\r\n }\r\n /**\r\n * Inverts the current color\r\n */\r\n invert() {\r\n return new Color(255 - this.r, 255 - this.g, 255 - this.b, 1.0 - this.a);\r\n }\r\n /**\r\n * Averages the current color with another\r\n *\r\n * @param color The other color\r\n */\r\n average(color) {\r\n const newR = (color.r + this.r) / 2;\r\n const newG = (color.g + this.g) / 2;\r\n const newB = (color.b + this.b) / 2;\r\n const newA = (color.a + this.a) / 2;\r\n return new Color(newR, newG, newB, newA);\r\n }\r\n equal(color) {\r\n return this.toString() === color.toString();\r\n }\r\n /**\r\n * Returns a CSS string representation of a color.\r\n *\r\n * @param format Color representation, accepts: rgb, hsl, or hex\r\n */\r\n toString(format = 'rgb') {\r\n switch (format) {\r\n case 'rgb':\r\n return this.toRGBA();\r\n case 'hsl':\r\n return this.toHSLA();\r\n case 'hex':\r\n return this.toHex();\r\n default:\r\n throw new Error('Invalid Color format');\r\n }\r\n }\r\n /**\r\n * Returns Hex Value of a color component\r\n * @param c color component\r\n * @see https://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb\r\n */\r\n _componentToHex(c) {\r\n const hex = c.toString(16);\r\n return hex.length === 1 ? '0' + hex : hex;\r\n }\r\n /**\r\n * Return Hex representation of a color.\r\n */\r\n toHex() {\r\n return '#' + this._componentToHex(this.r) + this._componentToHex(this.g) + this._componentToHex(this.b);\r\n }\r\n /**\r\n * Return RGBA representation of a color.\r\n */\r\n toRGBA() {\r\n const result = String(this.r.toFixed(0)) + ', ' + String(this.g.toFixed(0)) + ', ' + String(this.b.toFixed(0));\r\n if (this.a !== undefined || this.a !== null) {\r\n return 'rgba(' + result + ', ' + String(this.a) + ')';\r\n }\r\n return 'rgb(' + result + ')';\r\n }\r\n /**\r\n * Return HSLA representation of a color.\r\n */\r\n toHSLA() {\r\n return HSLColor.fromRGBA(this.r, this.g, this.b, this.a).toString();\r\n }\r\n /**\r\n * Returns a CSS string representation of a color.\r\n */\r\n fillStyle() {\r\n return this.toString();\r\n }\r\n /**\r\n * Returns a clone of the current color.\r\n */\r\n clone() {\r\n return new Color(this.r, this.g, this.b, this.a);\r\n }\r\n /**\r\n * Black (#000000)\r\n */\r\n static get Black() {\r\n return Color.fromHex('#000000');\r\n }\r\n /**\r\n * White (#FFFFFF)\r\n */\r\n static get White() {\r\n return Color.fromHex('#FFFFFF');\r\n }\r\n /**\r\n * Gray (#808080)\r\n */\r\n static get Gray() {\r\n return Color.fromHex('#808080');\r\n }\r\n /**\r\n * Light gray (#D3D3D3)\r\n */\r\n static get LightGray() {\r\n return Color.fromHex('#D3D3D3');\r\n }\r\n /**\r\n * Dark gray (#A9A9A9)\r\n */\r\n static get DarkGray() {\r\n return Color.fromHex('#A9A9A9');\r\n }\r\n /**\r\n * Yellow (#FFFF00)\r\n */\r\n static get Yellow() {\r\n return Color.fromHex('#FFFF00');\r\n }\r\n /**\r\n * Orange (#FFA500)\r\n */\r\n static get Orange() {\r\n return Color.fromHex('#FFA500');\r\n }\r\n /**\r\n * Red (#FF0000)\r\n */\r\n static get Red() {\r\n return Color.fromHex('#FF0000');\r\n }\r\n /**\r\n * Vermilion (#FF5B31)\r\n */\r\n static get Vermilion() {\r\n return Color.fromHex('#FF5B31');\r\n }\r\n /**\r\n * Rose (#FF007F)\r\n */\r\n static get Rose() {\r\n return Color.fromHex('#FF007F');\r\n }\r\n /**\r\n * Magenta (#FF00FF)\r\n */\r\n static get Magenta() {\r\n return Color.fromHex('#FF00FF');\r\n }\r\n /**\r\n * Violet (#7F00FF)\r\n */\r\n static get Violet() {\r\n return Color.fromHex('#7F00FF');\r\n }\r\n /**\r\n * Blue (#0000FF)\r\n */\r\n static get Blue() {\r\n return Color.fromHex('#0000FF');\r\n }\r\n /**\r\n * Azure (#007FFF)\r\n */\r\n static get Azure() {\r\n return Color.fromHex('#007FFF');\r\n }\r\n /**\r\n * Cyan (#00FFFF)\r\n */\r\n static get Cyan() {\r\n return Color.fromHex('#00FFFF');\r\n }\r\n /**\r\n * Viridian (#59978F)\r\n */\r\n static get Viridian() {\r\n return Color.fromHex('#59978F');\r\n }\r\n /**\r\n * Green (#00FF00)\r\n */\r\n static get Green() {\r\n return Color.fromHex('#00FF00');\r\n }\r\n /**\r\n * Chartreuse (#7FFF00)\r\n */\r\n static get Chartreuse() {\r\n return Color.fromHex('#7FFF00');\r\n }\r\n /**\r\n * Transparent (#FFFFFF00)\r\n */\r\n static get Transparent() {\r\n return Color.fromHex('#FFFFFF00');\r\n }\r\n /**\r\n * ExcaliburBlue (#176BAA)\r\n */\r\n static get ExcaliburBlue() {\r\n return Color.fromHex('#176BAA');\r\n }\r\n}\r\n/**\r\n * Internal HSL Color representation\r\n *\r\n * http://en.wikipedia.org/wiki/HSL_and_HSV\r\n * http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c\r\n */\r\nclass HSLColor {\r\n constructor(h, s, l, a) {\r\n this.h = h;\r\n this.s = s;\r\n this.l = l;\r\n this.a = a;\r\n }\r\n static hue2rgb(p, q, t) {\r\n if (t < 0) {\r\n t += 1;\r\n }\r\n if (t > 1) {\r\n t -= 1;\r\n }\r\n if (t < 1 / 6) {\r\n return p + (q - p) * 6 * t;\r\n }\r\n if (t < 1 / 2) {\r\n return q;\r\n }\r\n if (t < 2 / 3) {\r\n return p + (q - p) * (2 / 3 - t) * 6;\r\n }\r\n return p;\r\n }\r\n static fromRGBA(r, g, b, a) {\r\n r /= 255;\r\n g /= 255;\r\n b /= 255;\r\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\r\n let h, s;\r\n const l = (max + min) / 2;\r\n if (max === min) {\r\n h = s = 0; // achromatic\r\n }\r\n else {\r\n const d = max - min;\r\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n switch (max) {\r\n case r:\r\n h = (g - b) / d + (g < b ? 6 : 0);\r\n break;\r\n case g:\r\n h = (b - r) / d + 2;\r\n break;\r\n case b:\r\n h = (r - g) / d + 4;\r\n break;\r\n }\r\n h /= 6;\r\n }\r\n return new HSLColor(h, s, l, a);\r\n }\r\n toRGBA() {\r\n let r, g, b;\r\n if (this.s === 0) {\r\n r = g = b = this.l; // achromatic\r\n }\r\n else {\r\n const q = this.l < 0.5 ? this.l * (1 + this.s) : this.l + this.s - this.l * this.s;\r\n const p = 2 * this.l - q;\r\n r = HSLColor.hue2rgb(p, q, this.h + 1 / 3);\r\n g = HSLColor.hue2rgb(p, q, this.h);\r\n b = HSLColor.hue2rgb(p, q, this.h - 1 / 3);\r\n }\r\n return new Color(r * 255, g * 255, b * 255, this.a);\r\n }\r\n toString() {\r\n const h = this.h.toFixed(0), s = this.s.toFixed(0), l = this.l.toFixed(0), a = this.a.toFixed(0);\r\n return `hsla(${h}, ${s}, ${l}, ${a})`;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Side.ts\n\r\n/**\r\n * An enum that describes the sides of an axis aligned box for collision\r\n */\r\nvar Side;\r\n(function (Side) {\r\n Side[\"None\"] = \"None\";\r\n Side[\"Top\"] = \"Top\";\r\n Side[\"Bottom\"] = \"Bottom\";\r\n Side[\"Left\"] = \"Left\";\r\n Side[\"Right\"] = \"Right\";\r\n})(Side || (Side = {}));\r\n(function (Side) {\r\n /**\r\n * Returns the opposite side from the current\r\n */\r\n function getOpposite(side) {\r\n if (side === Side.Top) {\r\n return Side.Bottom;\r\n }\r\n if (side === Side.Bottom) {\r\n return Side.Top;\r\n }\r\n if (side === Side.Left) {\r\n return Side.Right;\r\n }\r\n if (side === Side.Right) {\r\n return Side.Left;\r\n }\r\n return Side.None;\r\n }\r\n Side.getOpposite = getOpposite;\r\n /**\r\n * Given a vector, return the Side most in that direction (via dot product)\r\n */\r\n function fromDirection(direction) {\r\n const directions = [Vector.Left, Vector.Right, Vector.Up, Vector.Down];\r\n const directionEnum = [Side.Left, Side.Right, Side.Top, Side.Bottom];\r\n let max = -Number.MAX_VALUE;\r\n let maxIndex = -1;\r\n for (let i = 0; i < directions.length; i++) {\r\n if (directions[i].dot(direction) > max) {\r\n max = directions[i].dot(direction);\r\n maxIndex = i;\r\n }\r\n }\r\n return directionEnum[maxIndex];\r\n }\r\n Side.fromDirection = fromDirection;\r\n})(Side || (Side = {}));\r\n\n;// CONCATENATED MODULE: ./Collision/BoundingBox.ts\n\r\n\r\n\r\n/**\r\n * Axis Aligned collision primitive for Excalibur.\r\n */\r\nclass BoundingBox {\r\n /**\r\n * Constructor allows passing of either an object with all coordinate components,\r\n * or the coordinate components passed separately.\r\n * @param leftOrOptions Either x coordinate of the left edge or an options object\r\n * containing the four coordinate components.\r\n * @param top y coordinate of the top edge\r\n * @param right x coordinate of the right edge\r\n * @param bottom y coordinate of the bottom edge\r\n */\r\n constructor(leftOrOptions = 0, top = 0, right = 0, bottom = 0) {\r\n if (typeof leftOrOptions === 'object') {\r\n this.left = leftOrOptions.left;\r\n this.top = leftOrOptions.top;\r\n this.right = leftOrOptions.right;\r\n this.bottom = leftOrOptions.bottom;\r\n }\r\n else if (typeof leftOrOptions === 'number') {\r\n this.left = leftOrOptions;\r\n this.top = top;\r\n this.right = right;\r\n this.bottom = bottom;\r\n }\r\n }\r\n /**\r\n * Returns a new instance of [[BoundingBox]] that is a copy of the current instance\r\n */\r\n clone() {\r\n return new BoundingBox(this.left, this.top, this.right, this.bottom);\r\n }\r\n /**\r\n * Given bounding box A & B, returns the side relative to A when intersection is performed.\r\n * @param intersection Intersection vector between 2 bounding boxes\r\n */\r\n static getSideFromIntersection(intersection) {\r\n if (!intersection) {\r\n return Side.None;\r\n }\r\n if (intersection) {\r\n if (Math.abs(intersection.x) > Math.abs(intersection.y)) {\r\n if (intersection.x < 0) {\r\n return Side.Right;\r\n }\r\n return Side.Left;\r\n }\r\n else {\r\n if (intersection.y < 0) {\r\n return Side.Bottom;\r\n }\r\n return Side.Top;\r\n }\r\n }\r\n return Side.None;\r\n }\r\n static fromPoints(points) {\r\n let minX = Infinity;\r\n let minY = Infinity;\r\n let maxX = -Infinity;\r\n let maxY = -Infinity;\r\n for (let i = 0; i < points.length; i++) {\r\n if (points[i].x < minX) {\r\n minX = points[i].x;\r\n }\r\n if (points[i].x > maxX) {\r\n maxX = points[i].x;\r\n }\r\n if (points[i].y < minY) {\r\n minY = points[i].y;\r\n }\r\n if (points[i].y > maxY) {\r\n maxY = points[i].y;\r\n }\r\n }\r\n return new BoundingBox(minX, minY, maxX, maxY);\r\n }\r\n static fromDimension(width, height, anchor = Vector.Half, pos = Vector.Zero) {\r\n return new BoundingBox(-width * anchor.x + pos.x, -height * anchor.y + pos.y, width - width * anchor.x + pos.x, height - height * anchor.y + pos.y);\r\n }\r\n /**\r\n * Returns the calculated width of the bounding box\r\n */\r\n get width() {\r\n return this.right - this.left;\r\n }\r\n /**\r\n * Returns the calculated height of the bounding box\r\n */\r\n get height() {\r\n return this.bottom - this.top;\r\n }\r\n /**\r\n * Return whether the bounding box has zero dimensions in height,width or both\r\n */\r\n hasZeroDimensions() {\r\n return this.width === 0 || this.height === 0;\r\n }\r\n /**\r\n * Returns the center of the bounding box\r\n */\r\n get center() {\r\n return new Vector((this.left + this.right) / 2, (this.top + this.bottom) / 2);\r\n }\r\n translate(pos) {\r\n return new BoundingBox(this.left + pos.x, this.top + pos.y, this.right + pos.x, this.bottom + pos.y);\r\n }\r\n /**\r\n * Rotates a bounding box by and angle and around a point, if no point is specified (0, 0) is used by default. The resulting bounding\r\n * box is also axis-align. This is useful when a new axis-aligned bounding box is needed for rotated geometry.\r\n */\r\n rotate(angle, point = Vector.Zero) {\r\n const points = this.getPoints().map((p) => p.rotate(angle, point));\r\n return BoundingBox.fromPoints(points);\r\n }\r\n /**\r\n * Scale a bounding box by a scale factor, optionally provide a point\r\n * @param scale\r\n * @param point\r\n */\r\n scale(scale, point = Vector.Zero) {\r\n const shifted = this.translate(point);\r\n return new BoundingBox(shifted.left * scale.x, shifted.top * scale.y, shifted.right * scale.x, shifted.bottom * scale.y);\r\n }\r\n /**\r\n * Transform the axis aligned bounding box by a [[Matrix]], producing a new axis aligned bounding box\r\n * @param matrix\r\n */\r\n transform(matrix) {\r\n // inlined these calculations to not use vectors would speed it up slightly\r\n // const matFirstColumn = vec(matrix.data[0], matrix.data[1]);\r\n // const xa = matFirstColumn.scale(this.left);\r\n const xa1 = matrix.data[0] * this.left;\r\n const xa2 = matrix.data[1] * this.left;\r\n // const xb = matFirstColumn.scale(this.right);\r\n const xb1 = matrix.data[0] * this.right;\r\n const xb2 = matrix.data[1] * this.right;\r\n // const matSecondColumn = vec(matrix.data[2], matrix.data[3]);\r\n // const ya = matSecondColumn.scale(this.top);\r\n const ya1 = matrix.data[2] * this.top;\r\n const ya2 = matrix.data[3] * this.top;\r\n // const yb = matSecondColumn.scale(this.bottom);\r\n const yb1 = matrix.data[2] * this.bottom;\r\n const yb2 = matrix.data[3] * this.bottom;\r\n const matrixPos = matrix.getPosition();\r\n // const topLeft = Vector.min(xa, xb).add(Vector.min(ya, yb)).add(matrixPos);\r\n // const bottomRight = Vector.max(xa, xb).add(Vector.max(ya, yb)).add(matrixPos);\r\n const left = Math.min(xa1, xb1) + Math.min(ya1, yb1) + matrixPos.x;\r\n const top = Math.min(xa2, xb2) + Math.min(ya2, yb2) + matrixPos.y;\r\n const right = Math.max(xa1, xb1) + Math.max(ya1, yb1) + matrixPos.x;\r\n const bottom = Math.max(xa2, xb2) + Math.max(ya2, yb2) + matrixPos.y;\r\n return new BoundingBox({\r\n left,\r\n top,\r\n right,\r\n bottom //: bottomRight.y\r\n });\r\n }\r\n /**\r\n * Returns the perimeter of the bounding box\r\n */\r\n getPerimeter() {\r\n const wx = this.width;\r\n const wy = this.height;\r\n return 2 * (wx + wy);\r\n }\r\n getPoints() {\r\n const results = [];\r\n results.push(new Vector(this.left, this.top));\r\n results.push(new Vector(this.right, this.top));\r\n results.push(new Vector(this.right, this.bottom));\r\n results.push(new Vector(this.left, this.bottom));\r\n return results;\r\n }\r\n /**\r\n * Determines whether a ray intersects with a bounding box\r\n */\r\n rayCast(ray, farClipDistance = Infinity) {\r\n // algorithm from https://tavianator.com/fast-branchless-raybounding-box-intersections/\r\n let tmin = -Infinity;\r\n let tmax = +Infinity;\r\n const xinv = ray.dir.x === 0 ? Number.MAX_VALUE : 1 / ray.dir.x;\r\n const yinv = ray.dir.y === 0 ? Number.MAX_VALUE : 1 / ray.dir.y;\r\n const tx1 = (this.left - ray.pos.x) * xinv;\r\n const tx2 = (this.right - ray.pos.x) * xinv;\r\n tmin = Math.min(tx1, tx2);\r\n tmax = Math.max(tx1, tx2);\r\n const ty1 = (this.top - ray.pos.y) * yinv;\r\n const ty2 = (this.bottom - ray.pos.y) * yinv;\r\n tmin = Math.max(tmin, Math.min(ty1, ty2));\r\n tmax = Math.min(tmax, Math.max(ty1, ty2));\r\n return tmax >= Math.max(0, tmin) && tmin < farClipDistance;\r\n }\r\n rayCastTime(ray, farClipDistance = Infinity) {\r\n // algorithm from https://tavianator.com/fast-branchless-raybounding-box-intersections/\r\n let tmin = -Infinity;\r\n let tmax = +Infinity;\r\n const xinv = ray.dir.x === 0 ? Number.MAX_VALUE : 1 / ray.dir.x;\r\n const yinv = ray.dir.y === 0 ? Number.MAX_VALUE : 1 / ray.dir.y;\r\n const tx1 = (this.left - ray.pos.x) * xinv;\r\n const tx2 = (this.right - ray.pos.x) * xinv;\r\n tmin = Math.min(tx1, tx2);\r\n tmax = Math.max(tx1, tx2);\r\n const ty1 = (this.top - ray.pos.y) * yinv;\r\n const ty2 = (this.bottom - ray.pos.y) * yinv;\r\n tmin = Math.max(tmin, Math.min(ty1, ty2));\r\n tmax = Math.min(tmax, Math.max(ty1, ty2));\r\n if (tmax >= Math.max(0, tmin) && tmin < farClipDistance) {\r\n return tmin;\r\n }\r\n return -1;\r\n }\r\n contains(val) {\r\n if (val instanceof Vector) {\r\n return this.left <= val.x && this.top <= val.y && this.bottom >= val.y && this.right >= val.x;\r\n }\r\n else if (val instanceof BoundingBox) {\r\n if (this.left <= val.left && this.top <= val.top && val.bottom <= this.bottom && val.right <= this.right) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n return false;\r\n }\r\n /**\r\n * Combines this bounding box and another together returning a new bounding box\r\n * @param other The bounding box to combine\r\n */\r\n combine(other) {\r\n const compositeBB = new BoundingBox(Math.min(this.left, other.left), Math.min(this.top, other.top), Math.max(this.right, other.right), Math.max(this.bottom, other.bottom));\r\n return compositeBB;\r\n }\r\n get dimensions() {\r\n return new Vector(this.width, this.height);\r\n }\r\n /**\r\n * Returns true if the bounding boxes overlap.\r\n * @param other\r\n * @param epsilon Optionally specify a small epsilon (default 0) as amount of overlap to ignore as overlap.\r\n * This epsilon is useful in stable collision simulations.\r\n */\r\n overlaps(other, epsilon) {\r\n const e = epsilon || 0;\r\n if (other.hasZeroDimensions()) {\r\n return this.contains(other);\r\n }\r\n if (this.hasZeroDimensions()) {\r\n return other.contains(this);\r\n }\r\n const totalBoundingBox = this.combine(other);\r\n return totalBoundingBox.width + e < other.width + this.width &&\r\n totalBoundingBox.height + e < other.height + this.height;\r\n }\r\n /**\r\n * Test wether this bounding box intersects with another returning\r\n * the intersection vector that can be used to resolve the collision. If there\r\n * is no intersection null is returned.\r\n *\r\n * @param other Other [[BoundingBox]] to test intersection with\r\n * @returns A Vector in the direction of the current BoundingBox, this <- other\r\n */\r\n intersect(other) {\r\n const totalBoundingBox = this.combine(other);\r\n // If the total bounding box is less than or equal the sum of the 2 bounds then there is collision\r\n if (totalBoundingBox.width < other.width + this.width &&\r\n totalBoundingBox.height < other.height + this.height &&\r\n !totalBoundingBox.dimensions.equals(other.dimensions) &&\r\n !totalBoundingBox.dimensions.equals(this.dimensions)) {\r\n // collision\r\n let overlapX = 0;\r\n // right edge is between the other's left and right edge\r\n /**\r\n * +-this-+\r\n * | |\r\n * | +-other-+\r\n * +----|-+ |\r\n * | |\r\n * +-------+\r\n * <---\r\n * ^ overlap\r\n */\r\n if (this.right >= other.left && this.right <= other.right) {\r\n overlapX = other.left - this.right;\r\n // right edge is past the other's right edge\r\n /**\r\n * +-other-+\r\n * | |\r\n * | +-this-+\r\n * +----|--+ |\r\n * | |\r\n * +------+\r\n * --->\r\n * ^ overlap\r\n */\r\n }\r\n else {\r\n overlapX = other.right - this.left;\r\n }\r\n let overlapY = 0;\r\n // top edge is between the other's top and bottom edge\r\n /**\r\n * +-other-+\r\n * | |\r\n * | +-this-+ | <- overlap\r\n * +----|--+ | |\r\n * | | \\ /\r\n * +------+ '\r\n */\r\n if (this.top <= other.bottom && this.top >= other.top) {\r\n overlapY = other.bottom - this.top;\r\n // top edge is above the other top edge\r\n /**\r\n * +-this-+ .\r\n * | | / \\\r\n * | +-other-+ | <- overlap\r\n * +----|-+ | |\r\n * | |\r\n * +-------+\r\n */\r\n }\r\n else {\r\n overlapY = other.top - this.bottom;\r\n }\r\n if (Math.abs(overlapX) < Math.abs(overlapY)) {\r\n return new Vector(overlapX, 0);\r\n }\r\n else {\r\n return new Vector(0, overlapY);\r\n }\r\n // Case of total containment of one bounding box by another\r\n }\r\n else if (totalBoundingBox.dimensions.equals(other.dimensions) || totalBoundingBox.dimensions.equals(this.dimensions)) {\r\n let overlapX = 0;\r\n // this is wider than the other\r\n if (this.width - other.width >= 0) {\r\n // This right edge is closest to the others right edge\r\n if (this.right - other.right <= other.left - this.left) {\r\n overlapX = other.left - this.right;\r\n // This left edge is closest to the others left edge\r\n }\r\n else {\r\n overlapX = other.right - this.left;\r\n }\r\n // other is wider than this\r\n }\r\n else {\r\n // This right edge is closest to the others right edge\r\n if (other.right - this.right <= this.left - other.left) {\r\n overlapX = this.left - other.right;\r\n // This left edge is closest to the others left edge\r\n }\r\n else {\r\n overlapX = this.right - other.left;\r\n }\r\n }\r\n let overlapY = 0;\r\n // this is taller than other\r\n if (this.height - other.height >= 0) {\r\n // The bottom edge is closest to the others bottom edge\r\n if (this.bottom - other.bottom <= other.top - this.top) {\r\n overlapY = other.top - this.bottom;\r\n }\r\n else {\r\n overlapY = other.bottom - this.top;\r\n }\r\n // other is taller than this\r\n }\r\n else {\r\n // The bottom edge is closest to the others bottom edge\r\n if (other.bottom - this.bottom <= this.top - other.top) {\r\n overlapY = this.top - other.bottom;\r\n }\r\n else {\r\n overlapY = this.bottom - other.top;\r\n }\r\n }\r\n if (Math.abs(overlapX) < Math.abs(overlapY)) {\r\n return new Vector(overlapX, 0);\r\n }\r\n else {\r\n return new Vector(0, overlapY);\r\n }\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n /**\r\n * Test whether the bounding box has intersected with another bounding box, returns the side of the current bb that intersected.\r\n * @param bb The other actor to test\r\n */\r\n intersectWithSide(bb) {\r\n const intersect = this.intersect(bb);\r\n return BoundingBox.getSideFromIntersection(intersect);\r\n }\r\n /**\r\n * Draw a debug bounding box\r\n * @param ex\r\n * @param color\r\n */\r\n draw(ex, color = Color.Yellow) {\r\n ex.debug.drawRect(this.left, this.top, this.width, this.height, { color });\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Util/Future.ts\n/**\r\n * Future is a wrapper around a native browser Promise to allow resolving/rejecting at any time\r\n */\r\nclass Future {\r\n constructor() {\r\n this._isCompleted = false;\r\n this.promise = new Promise((resolve, reject) => {\r\n this._resolver = resolve;\r\n this._rejecter = reject;\r\n });\r\n }\r\n get isCompleted() {\r\n return this._isCompleted;\r\n }\r\n resolve(value) {\r\n if (this._isCompleted) {\r\n return;\r\n }\r\n this._isCompleted = true;\r\n this._resolver(value);\r\n }\r\n reject(error) {\r\n if (this._isCompleted) {\r\n return;\r\n }\r\n this._isCompleted = true;\r\n this._rejecter(error);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Util/Util.ts\n\r\n\r\n/**\r\n * Find the screen position of an HTML element\r\n */\r\nfunction getPosition(el) {\r\n let oLeft = 0, oTop = 0;\r\n const calcOffsetLeft = (parent) => {\r\n oLeft += parent.offsetLeft;\r\n if (parent.offsetParent) {\r\n calcOffsetLeft(parent.offsetParent);\r\n }\r\n };\r\n const calcOffsetTop = (parent) => {\r\n oTop += parent.offsetTop;\r\n if (parent.offsetParent) {\r\n calcOffsetTop(parent.offsetParent);\r\n }\r\n };\r\n calcOffsetLeft(el);\r\n calcOffsetTop(el);\r\n return new Vector(oLeft, oTop);\r\n}\r\n/**\r\n * Add an item to an array list if it doesn't already exist. Returns true if added, false if not and already exists in the array.\r\n * @deprecated Will be removed in v0.26.0\r\n */\r\nfunction addItemToArray(item, array) {\r\n if (array.indexOf(item) === -1) {\r\n array.push(item);\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Remove an item from an list\r\n * @deprecated Will be removed in v0.26.0\r\n */\r\nfunction removeItemFromArray(item, array) {\r\n let index = -1;\r\n if ((index = array.indexOf(item)) > -1) {\r\n array.splice(index, 1);\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * See if an array contains something\r\n */\r\nfunction contains(array, obj) {\r\n for (let i = 0; i < array.length; i++) {\r\n if (array[i] === obj) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n/**\r\n * Used for exhaustive checks at compile time\r\n */\r\nfunction fail(message) {\r\n throw new Error(message);\r\n}\r\n/**\r\n * Create a promise that resolves after a certain number of milliseconds\r\n *\r\n * It is strongly recommended you pass the excalibur clock so delays are bound to the\r\n * excalibur clock which would be unaffected by stop/pause.\r\n * @param milliseconds\r\n * @param clock\r\n */\r\nfunction delay(milliseconds, clock) {\r\n var _a;\r\n const future = new Future();\r\n const schedule = (_a = clock === null || clock === void 0 ? void 0 : clock.schedule.bind(clock)) !== null && _a !== void 0 ? _a : setTimeout;\r\n schedule(() => {\r\n future.resolve();\r\n }, milliseconds);\r\n return future.promise;\r\n}\r\n\n;// CONCATENATED MODULE: ./Math/matrix.ts\n\r\n\r\n\r\nvar MatrixLocations;\r\n(function (MatrixLocations) {\r\n MatrixLocations[MatrixLocations[\"X\"] = 12] = \"X\";\r\n MatrixLocations[MatrixLocations[\"Y\"] = 13] = \"Y\";\r\n})(MatrixLocations || (MatrixLocations = {}));\r\n/**\r\n * Excalibur Matrix helper for 4x4 matrices\r\n *\r\n * Useful for webgl 4x4 matrices\r\n */\r\nclass Matrix {\r\n constructor() {\r\n /**\r\n * 4x4 matrix in column major order\r\n *\r\n * | | | | |\r\n * | ------- | ------- | -------- | -------- |\r\n * | data[0] | data[4] | data[8] | data[12] |\r\n * | data[1] | data[5] | data[9] | data[13] |\r\n * | data[2] | data[6] | data[10] | data[14] |\r\n * | data[3] | data[7] | data[11] | data[15] |\r\n *\r\n */\r\n this.data = new Float32Array(16);\r\n this._scaleX = 1;\r\n this._scaleSignX = 1;\r\n this._scaleY = 1;\r\n this._scaleSignY = 1;\r\n }\r\n /**\r\n * Creates an orthographic (flat non-perspective) projection\r\n * https://en.wikipedia.org/wiki/Orthographic_projection\r\n * @param left\r\n * @param right\r\n * @param bottom\r\n * @param top\r\n * @param near\r\n * @param far\r\n */\r\n static ortho(left, right, bottom, top, near, far) {\r\n const mat = new Matrix();\r\n mat.data[0] = 2 / (right - left);\r\n mat.data[1] = 0;\r\n mat.data[2] = 0;\r\n mat.data[3] = 0;\r\n mat.data[4] = 0;\r\n mat.data[5] = 2 / (top - bottom);\r\n mat.data[6] = 0;\r\n mat.data[7] = 0;\r\n mat.data[8] = 0;\r\n mat.data[9] = 0;\r\n mat.data[10] = -2 / (far - near);\r\n mat.data[11] = 0;\r\n mat.data[12] = -(right + left) / (right - left);\r\n mat.data[13] = -(top + bottom) / (top - bottom);\r\n mat.data[14] = -(far + near) / (far - near);\r\n mat.data[15] = 1;\r\n return mat;\r\n }\r\n /**\r\n * Creates a new Matrix with the same data as the current 4x4\r\n */\r\n clone(dest) {\r\n const mat = dest || new Matrix();\r\n mat.data[0] = this.data[0];\r\n mat.data[1] = this.data[1];\r\n mat.data[2] = this.data[2];\r\n mat.data[3] = this.data[3];\r\n mat.data[4] = this.data[4];\r\n mat.data[5] = this.data[5];\r\n mat.data[6] = this.data[6];\r\n mat.data[7] = this.data[7];\r\n mat.data[8] = this.data[8];\r\n mat.data[9] = this.data[9];\r\n mat.data[10] = this.data[10];\r\n mat.data[11] = this.data[11];\r\n mat.data[12] = this.data[12];\r\n mat.data[13] = this.data[13];\r\n mat.data[14] = this.data[14];\r\n mat.data[15] = this.data[15];\r\n return mat;\r\n }\r\n /**\r\n * Converts the current matrix into a DOMMatrix\r\n *\r\n * This is useful when working with the browser Canvas context\r\n * @returns {DOMMatrix} DOMMatrix\r\n */\r\n toDOMMatrix() {\r\n return new DOMMatrix([...this.data]);\r\n }\r\n static fromFloat32Array(data) {\r\n const matrix = new Matrix();\r\n matrix.data = data;\r\n return matrix;\r\n }\r\n /**\r\n * Creates a new identity matrix (a matrix that when applied does nothing)\r\n */\r\n static identity() {\r\n const mat = new Matrix();\r\n mat.data[0] = 1;\r\n mat.data[1] = 0;\r\n mat.data[2] = 0;\r\n mat.data[3] = 0;\r\n mat.data[4] = 0;\r\n mat.data[5] = 1;\r\n mat.data[6] = 0;\r\n mat.data[7] = 0;\r\n mat.data[8] = 0;\r\n mat.data[9] = 0;\r\n mat.data[10] = 1;\r\n mat.data[11] = 0;\r\n mat.data[12] = 0;\r\n mat.data[13] = 0;\r\n mat.data[14] = 0;\r\n mat.data[15] = 1;\r\n return mat;\r\n }\r\n /**\r\n * Resets the current matrix to the identity matrix, mutating it\r\n * @returns {Matrix} Current matrix as identity\r\n */\r\n reset() {\r\n const mat = this;\r\n mat.data[0] = 1;\r\n mat.data[1] = 0;\r\n mat.data[2] = 0;\r\n mat.data[3] = 0;\r\n mat.data[4] = 0;\r\n mat.data[5] = 1;\r\n mat.data[6] = 0;\r\n mat.data[7] = 0;\r\n mat.data[8] = 0;\r\n mat.data[9] = 0;\r\n mat.data[10] = 1;\r\n mat.data[11] = 0;\r\n mat.data[12] = 0;\r\n mat.data[13] = 0;\r\n mat.data[14] = 0;\r\n mat.data[15] = 1;\r\n return mat;\r\n }\r\n /**\r\n * Creates a brand new translation matrix at the specified 3d point\r\n * @param x\r\n * @param y\r\n */\r\n static translation(x, y) {\r\n const mat = Matrix.identity();\r\n mat.data[12] = x;\r\n mat.data[13] = y;\r\n return mat;\r\n }\r\n /**\r\n * Creates a brand new scaling matrix with the specified scaling factor\r\n * @param sx\r\n * @param sy\r\n */\r\n static scale(sx, sy) {\r\n const mat = Matrix.identity();\r\n mat.data[0] = sx;\r\n mat.data[5] = sy;\r\n mat.data[10] = 1;\r\n mat.data[15] = 1;\r\n return mat;\r\n }\r\n /**\r\n * Creates a brand new rotation matrix with the specified angle\r\n * @param angleRadians\r\n */\r\n static rotation(angleRadians) {\r\n const mat = Matrix.identity();\r\n mat.data[0] = Math.cos(angleRadians);\r\n mat.data[4] = -Math.sin(angleRadians);\r\n mat.data[1] = Math.sin(angleRadians);\r\n mat.data[5] = Math.cos(angleRadians);\r\n return mat;\r\n }\r\n multiply(vectorOrMatrix, dest) {\r\n if (vectorOrMatrix instanceof Vector) {\r\n const result = dest || new Vector(0, 0);\r\n const vector = vectorOrMatrix;\r\n // these shenanigans are to allow dest and vector to be the same instance\r\n const resultX = vector.x * this.data[0] + vector.y * this.data[4] + this.data[12];\r\n const resultY = vector.x * this.data[1] + vector.y * this.data[5] + this.data[13];\r\n result.x = resultX;\r\n result.y = resultY;\r\n return result;\r\n }\r\n else {\r\n const result = dest || new Matrix();\r\n const other = vectorOrMatrix;\r\n const a11 = this.data[0];\r\n const a21 = this.data[1];\r\n const a31 = this.data[2];\r\n const a41 = this.data[3];\r\n const a12 = this.data[4];\r\n const a22 = this.data[5];\r\n const a32 = this.data[6];\r\n const a42 = this.data[7];\r\n const a13 = this.data[8];\r\n const a23 = this.data[9];\r\n const a33 = this.data[10];\r\n const a43 = this.data[11];\r\n const a14 = this.data[12];\r\n const a24 = this.data[13];\r\n const a34 = this.data[14];\r\n const a44 = this.data[15];\r\n const b11 = other.data[0];\r\n const b21 = other.data[1];\r\n const b31 = other.data[2];\r\n const b41 = other.data[3];\r\n const b12 = other.data[4];\r\n const b22 = other.data[5];\r\n const b32 = other.data[6];\r\n const b42 = other.data[7];\r\n const b13 = other.data[8];\r\n const b23 = other.data[9];\r\n const b33 = other.data[10];\r\n const b43 = other.data[11];\r\n const b14 = other.data[12];\r\n const b24 = other.data[13];\r\n const b34 = other.data[14];\r\n const b44 = other.data[15];\r\n result.data[0] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\r\n result.data[1] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\r\n result.data[2] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\r\n result.data[3] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\r\n result.data[4] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\r\n result.data[5] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\r\n result.data[6] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\r\n result.data[7] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\r\n result.data[8] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\r\n result.data[9] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\r\n result.data[10] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\r\n result.data[11] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\r\n result.data[12] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\r\n result.data[13] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\r\n result.data[14] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\r\n result.data[15] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\r\n const s = this.getScale();\r\n result._scaleSignX = sign(s.x) * sign(result._scaleSignX);\r\n result._scaleSignY = sign(s.y) * sign(result._scaleSignY);\r\n return result;\r\n }\r\n }\r\n /**\r\n * Applies translation to the current matrix mutating it\r\n * @param x\r\n * @param y\r\n */\r\n translate(x, y) {\r\n const a11 = this.data[0];\r\n const a21 = this.data[1];\r\n const a31 = this.data[2];\r\n const a41 = this.data[3];\r\n const a12 = this.data[4];\r\n const a22 = this.data[5];\r\n const a32 = this.data[6];\r\n const a42 = this.data[7];\r\n const a13 = this.data[8];\r\n const a23 = this.data[9];\r\n const a33 = this.data[10];\r\n const a43 = this.data[11];\r\n const a14 = this.data[12];\r\n const a24 = this.data[13];\r\n const a34 = this.data[14];\r\n const a44 = this.data[15];\r\n // Doesn't change z\r\n const z = 0;\r\n const w = 1;\r\n this.data[12] = a11 * x + a12 * y + a13 * z + a14 * w;\r\n this.data[13] = a21 * x + a22 * y + a23 * z + a24 * w;\r\n this.data[14] = a31 * x + a32 * y + a33 * z + a34 * w;\r\n this.data[15] = a41 * x + a42 * y + a43 * z + a44 * w;\r\n return this;\r\n }\r\n setPosition(x, y) {\r\n this.data[12] = x;\r\n this.data[13] = y;\r\n }\r\n getPosition() {\r\n return vec(this.data[12], this.data[13]);\r\n }\r\n /**\r\n * Applies rotation to the current matrix mutating it\r\n * @param angle in Radians\r\n */\r\n rotate(angle) {\r\n const a11 = this.data[0];\r\n const a21 = this.data[1];\r\n const a31 = this.data[2];\r\n const a41 = this.data[3];\r\n const a12 = this.data[4];\r\n const a22 = this.data[5];\r\n const a32 = this.data[6];\r\n const a42 = this.data[7];\r\n const sine = Math.sin(angle);\r\n const cosine = Math.cos(angle);\r\n this.data[0] = cosine * a11 + sine * a12;\r\n this.data[1] = cosine * a21 + sine * a22;\r\n this.data[2] = cosine * a31 + sine * a32;\r\n this.data[3] = cosine * a41 + sine * a42;\r\n this.data[4] = cosine * a12 - sine * a11;\r\n this.data[5] = cosine * a22 - sine * a21;\r\n this.data[6] = cosine * a32 - sine * a31;\r\n this.data[7] = cosine * a42 - sine * a41;\r\n return this;\r\n }\r\n /**\r\n * Applies scaling to the current matrix mutating it\r\n * @param x\r\n * @param y\r\n */\r\n scale(x, y) {\r\n const a11 = this.data[0];\r\n const a21 = this.data[1];\r\n const a31 = this.data[2];\r\n const a41 = this.data[3];\r\n const a12 = this.data[4];\r\n const a22 = this.data[5];\r\n const a32 = this.data[6];\r\n const a42 = this.data[7];\r\n this.data[0] = a11 * x;\r\n this.data[1] = a21 * x;\r\n this.data[2] = a31 * x;\r\n this.data[3] = a41 * x;\r\n this.data[4] = a12 * y;\r\n this.data[5] = a22 * y;\r\n this.data[6] = a32 * y;\r\n this.data[7] = a42 * y;\r\n return this;\r\n }\r\n setRotation(angle) {\r\n const currentScale = this.getScale();\r\n const sine = Math.sin(angle);\r\n const cosine = Math.cos(angle);\r\n this.data[0] = cosine * currentScale.x;\r\n this.data[1] = sine * currentScale.y;\r\n this.data[4] = -sine * currentScale.x;\r\n this.data[5] = cosine * currentScale.y;\r\n }\r\n getRotation() {\r\n const angle = Math.atan2(this.data[1] / this.getScaleY(), this.data[0] / this.getScaleX());\r\n return canonicalizeAngle(angle);\r\n }\r\n getScaleX() {\r\n // absolute scale of the matrix (we lose sign so need to add it back)\r\n const xscale = vec(this.data[0], this.data[4]).size;\r\n return this._scaleSignX * xscale;\r\n }\r\n getScaleY() {\r\n // absolute scale of the matrix (we lose sign so need to add it back)\r\n const yscale = vec(this.data[1], this.data[5]).size;\r\n return this._scaleSignY * yscale;\r\n }\r\n /**\r\n * Get the scale of the matrix\r\n */\r\n getScale() {\r\n return vec(this.getScaleX(), this.getScaleY());\r\n }\r\n setScaleX(val) {\r\n if (this._scaleX === val) {\r\n return;\r\n }\r\n this._scaleSignX = sign(val);\r\n // negative scale acts like a 180 rotation, so flip\r\n const xscale = vec(this.data[0] * this._scaleSignX, this.data[4] * this._scaleSignX).normalize();\r\n this.data[0] = xscale.x * val;\r\n this.data[4] = xscale.y * val;\r\n this._scaleX = val;\r\n }\r\n setScaleY(val) {\r\n if (this._scaleY === val) {\r\n return;\r\n }\r\n this._scaleSignY = sign(val);\r\n // negative scale acts like a 180 rotation, so flip\r\n const yscale = vec(this.data[1] * this._scaleSignY, this.data[5] * this._scaleSignY).normalize();\r\n this.data[1] = yscale.x * val;\r\n this.data[5] = yscale.y * val;\r\n this._scaleY = val;\r\n }\r\n setScale(scale) {\r\n this.setScaleX(scale.x);\r\n this.setScaleY(scale.y);\r\n }\r\n /**\r\n * Determinant of the upper left 2x2 matrix\r\n */\r\n getBasisDeterminant() {\r\n return this.data[0] * this.data[5] - this.data[1] * this.data[4];\r\n }\r\n /**\r\n * Return the affine inverse, optionally store it in a target matrix.\r\n *\r\n * It's recommended you call .reset() the target unless you know what you're doing\r\n * @param target\r\n */\r\n getAffineInverse(target) {\r\n // See http://negativeprobability.blogspot.com/2011/11/affine-transformations-and-their.html\r\n // See https://www.mathsisfun.com/algebra/matrix-inverse.html\r\n // Since we are actually only doing 2D transformations we can use this hack\r\n // We don't actually use the 3rd or 4th dimension\r\n const det = this.getBasisDeterminant();\r\n const inverseDet = 1 / det; // todo zero check\r\n const a = this.data[0];\r\n const b = this.data[4];\r\n const c = this.data[1];\r\n const d = this.data[5];\r\n const m = target || Matrix.identity();\r\n // inverts rotation and scale\r\n m.data[0] = d * inverseDet;\r\n m.data[1] = -c * inverseDet;\r\n m.data[4] = -b * inverseDet;\r\n m.data[5] = a * inverseDet;\r\n const tx = this.data[12];\r\n const ty = this.data[13];\r\n // invert translation\r\n // transform translation into the matrix basis created by rot/scale\r\n m.data[12] = -(tx * m.data[0] + ty * m.data[4]);\r\n m.data[13] = -(tx * m.data[1] + ty * m.data[5]);\r\n return m;\r\n }\r\n isIdentity() {\r\n return (this.data[0] === 1 &&\r\n this.data[1] === 0 &&\r\n this.data[2] === 0 &&\r\n this.data[3] === 0 &&\r\n this.data[4] === 0 &&\r\n this.data[5] === 1 &&\r\n this.data[6] === 0 &&\r\n this.data[7] === 0 &&\r\n this.data[8] === 0 &&\r\n this.data[9] === 0 &&\r\n this.data[10] === 1 &&\r\n this.data[11] === 0 &&\r\n this.data[12] === 0 &&\r\n this.data[13] === 0 &&\r\n this.data[14] === 0 &&\r\n this.data[15] === 1);\r\n }\r\n toString() {\r\n return `\r\n[${this.data[0]} ${this.data[4]} ${this.data[8]} ${this.data[12]}]\r\n[${this.data[1]} ${this.data[5]} ${this.data[9]} ${this.data[13]}]\r\n[${this.data[2]} ${this.data[6]} ${this.data[10]} ${this.data[14]}]\r\n[${this.data[3]} ${this.data[7]} ${this.data[11]} ${this.data[15]}]\r\n`;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Math/affine-matrix.ts\n\r\n\r\n\r\nclass AffineMatrix {\r\n constructor() {\r\n /**\r\n * | | | |\r\n * | ------- | ------- | -------- |\r\n * | data[0] | data[2] | data[4] |\r\n * | data[1] | data[3] | data[5] |\r\n * | 0 | 0 | 1 |\r\n */\r\n this.data = new Float64Array(6);\r\n this._scale = new Float64Array([1, 1]);\r\n this._scaleSignX = 1;\r\n this._scaleSignY = 1;\r\n }\r\n /**\r\n * Converts the current matrix into a DOMMatrix\r\n *\r\n * This is useful when working with the browser Canvas context\r\n * @returns {DOMMatrix} DOMMatrix\r\n */\r\n toDOMMatrix() {\r\n return new DOMMatrix([...this.data]);\r\n }\r\n static identity() {\r\n const mat = new AffineMatrix();\r\n mat.data[0] = 1;\r\n mat.data[1] = 0;\r\n mat.data[2] = 0;\r\n mat.data[3] = 1;\r\n mat.data[4] = 0;\r\n mat.data[5] = 0;\r\n return mat;\r\n }\r\n /**\r\n * Creates a brand new translation matrix at the specified 3d point\r\n * @param x\r\n * @param y\r\n */\r\n static translation(x, y) {\r\n const mat = AffineMatrix.identity();\r\n mat.data[4] = x;\r\n mat.data[5] = y;\r\n return mat;\r\n }\r\n /**\r\n * Creates a brand new scaling matrix with the specified scaling factor\r\n * @param sx\r\n * @param sy\r\n */\r\n static scale(sx, sy) {\r\n const mat = AffineMatrix.identity();\r\n mat.data[0] = sx;\r\n mat.data[3] = sy;\r\n mat._scale[0] = sx;\r\n mat._scale[1] = sy;\r\n return mat;\r\n }\r\n /**\r\n * Creates a brand new rotation matrix with the specified angle\r\n * @param angleRadians\r\n */\r\n static rotation(angleRadians) {\r\n const mat = AffineMatrix.identity();\r\n mat.data[0] = Math.cos(angleRadians);\r\n mat.data[1] = Math.sin(angleRadians);\r\n mat.data[2] = -Math.sin(angleRadians);\r\n mat.data[3] = Math.cos(angleRadians);\r\n return mat;\r\n }\r\n setPosition(x, y) {\r\n this.data[4] = x;\r\n this.data[5] = y;\r\n }\r\n getPosition() {\r\n return vec(this.data[4], this.data[5]);\r\n }\r\n /**\r\n * Applies rotation to the current matrix mutating it\r\n * @param angle in Radians\r\n */\r\n rotate(angle) {\r\n const a11 = this.data[0];\r\n const a21 = this.data[1];\r\n const a12 = this.data[2];\r\n const a22 = this.data[3];\r\n const sine = Math.sin(angle);\r\n const cosine = Math.cos(angle);\r\n this.data[0] = cosine * a11 + sine * a12;\r\n this.data[1] = cosine * a21 + sine * a22;\r\n this.data[2] = cosine * a12 - sine * a11;\r\n this.data[3] = cosine * a22 - sine * a21;\r\n return this;\r\n }\r\n /**\r\n * Applies translation to the current matrix mutating it\r\n * @param x\r\n * @param y\r\n */\r\n translate(x, y) {\r\n const a11 = this.data[0];\r\n const a21 = this.data[1];\r\n // const a31 = 0;\r\n const a12 = this.data[2];\r\n const a22 = this.data[3];\r\n // const a32 = 0;\r\n const a13 = this.data[4];\r\n const a23 = this.data[5];\r\n // const a33 = 1;\r\n // Doesn't change z\r\n this.data[4] = a11 * x + a12 * y + a13;\r\n this.data[5] = a21 * x + a22 * y + a23;\r\n return this;\r\n }\r\n /**\r\n * Applies scaling to the current matrix mutating it\r\n * @param x\r\n * @param y\r\n */\r\n scale(x, y) {\r\n const a11 = this.data[0];\r\n const a21 = this.data[1];\r\n const a12 = this.data[2];\r\n const a22 = this.data[3];\r\n this.data[0] = a11 * x;\r\n this.data[1] = a21 * x;\r\n this.data[2] = a12 * y;\r\n this.data[3] = a22 * y;\r\n this._scale[0] = x;\r\n this._scale[1] = y;\r\n return this;\r\n }\r\n determinant() {\r\n return this.data[0] * this.data[3] - this.data[1] * this.data[2];\r\n }\r\n /**\r\n * Return the affine inverse, optionally store it in a target matrix.\r\n *\r\n * It's recommended you call .reset() the target unless you know what you're doing\r\n * @param target\r\n */\r\n inverse(target) {\r\n // See http://negativeprobability.blogspot.com/2011/11/affine-transformations-and-their.html\r\n // See https://www.mathsisfun.com/algebra/matrix-inverse.html\r\n // Since we are actually only doing 2D transformations we can use this hack\r\n // We don't actually use the 3rd or 4th dimension\r\n const det = this.determinant();\r\n const inverseDet = 1 / det; // TODO zero check\r\n const a = this.data[0];\r\n const b = this.data[2];\r\n const c = this.data[1];\r\n const d = this.data[3];\r\n const m = target || AffineMatrix.identity();\r\n // inverts rotation and scale\r\n m.data[0] = d * inverseDet;\r\n m.data[1] = -c * inverseDet;\r\n m.data[2] = -b * inverseDet;\r\n m.data[3] = a * inverseDet;\r\n const tx = this.data[4];\r\n const ty = this.data[5];\r\n // invert translation\r\n // transform translation into the matrix basis created by rot/scale\r\n m.data[4] = -(tx * m.data[0] + ty * m.data[2]);\r\n m.data[5] = -(tx * m.data[1] + ty * m.data[3]);\r\n return m;\r\n }\r\n multiply(vectorOrMatrix, dest) {\r\n if (vectorOrMatrix instanceof Vector) {\r\n const result = dest || new Vector(0, 0);\r\n const vector = vectorOrMatrix;\r\n // these shenanigans are to allow dest and vector to be the same instance\r\n const resultX = vector.x * this.data[0] + vector.y * this.data[2] + this.data[4];\r\n const resultY = vector.x * this.data[1] + vector.y * this.data[3] + this.data[5];\r\n result.x = resultX;\r\n result.y = resultY;\r\n return result;\r\n }\r\n else {\r\n const result = dest || new AffineMatrix();\r\n const other = vectorOrMatrix;\r\n const a11 = this.data[0];\r\n const a21 = this.data[1];\r\n // const a31 = 0;\r\n const a12 = this.data[2];\r\n const a22 = this.data[3];\r\n // const a32 = 0;\r\n const a13 = this.data[4];\r\n const a23 = this.data[5];\r\n // const a33 = 1;\r\n const b11 = other.data[0];\r\n const b21 = other.data[1];\r\n // const b31 = 0;\r\n const b12 = other.data[2];\r\n const b22 = other.data[3];\r\n // const b32 = 0;\r\n const b13 = other.data[4];\r\n const b23 = other.data[5];\r\n // const b33 = 1;\r\n result.data[0] = a11 * b11 + a12 * b21; // + a13 * b31; // zero\r\n result.data[1] = a21 * b11 + a22 * b21; // + a23 * b31; // zero\r\n result.data[2] = a11 * b12 + a12 * b22; // + a13 * b32; // zero\r\n result.data[3] = a21 * b12 + a22 * b22; // + a23 * b32; // zero\r\n result.data[4] = a11 * b13 + a12 * b23 + a13; // * b33; // one\r\n result.data[5] = a21 * b13 + a22 * b23 + a23; // * b33; // one\r\n const s = this.getScale();\r\n result._scaleSignX = sign(s.x) * sign(result._scaleSignX);\r\n result._scaleSignY = sign(s.y) * sign(result._scaleSignY);\r\n return result;\r\n }\r\n }\r\n to4x4() {\r\n const mat = new Matrix();\r\n mat.data[0] = this.data[0];\r\n mat.data[1] = this.data[1];\r\n mat.data[2] = 0;\r\n mat.data[3] = 0;\r\n mat.data[4] = this.data[2];\r\n mat.data[5] = this.data[3];\r\n mat.data[6] = 0;\r\n mat.data[7] = 0;\r\n mat.data[8] = 0;\r\n mat.data[9] = 0;\r\n mat.data[10] = 1;\r\n mat.data[11] = 0;\r\n mat.data[12] = this.data[4];\r\n mat.data[13] = this.data[5];\r\n mat.data[14] = 0;\r\n mat.data[15] = 1;\r\n return mat;\r\n }\r\n setRotation(angle) {\r\n const currentScale = this.getScale();\r\n const sine = Math.sin(angle);\r\n const cosine = Math.cos(angle);\r\n this.data[0] = cosine * currentScale.x;\r\n this.data[1] = sine * currentScale.y;\r\n this.data[2] = -sine * currentScale.x;\r\n this.data[3] = cosine * currentScale.y;\r\n }\r\n getRotation() {\r\n const angle = Math.atan2(this.data[1] / this.getScaleY(), this.data[0] / this.getScaleX());\r\n return canonicalizeAngle(angle);\r\n }\r\n getScaleX() {\r\n // absolute scale of the matrix (we lose sign so need to add it back)\r\n const xscale = vec(this.data[0], this.data[2]).distance();\r\n return this._scaleSignX * xscale;\r\n }\r\n getScaleY() {\r\n // absolute scale of the matrix (we lose sign so need to add it back)\r\n const yscale = vec(this.data[1], this.data[3]).distance();\r\n return this._scaleSignY * yscale;\r\n }\r\n /**\r\n * Get the scale of the matrix\r\n */\r\n getScale() {\r\n return vec(this.getScaleX(), this.getScaleY());\r\n }\r\n setScaleX(val) {\r\n if (val === this._scale[0]) {\r\n return;\r\n }\r\n this._scaleSignX = sign(val);\r\n // negative scale acts like a 180 rotation, so flip\r\n const xscale = vec(this.data[0] * this._scaleSignX, this.data[2] * this._scaleSignX).normalize();\r\n this.data[0] = xscale.x * val;\r\n this.data[2] = xscale.y * val;\r\n this._scale[0] = val;\r\n }\r\n setScaleY(val) {\r\n if (val === this._scale[1]) {\r\n return;\r\n }\r\n this._scaleSignY = sign(val);\r\n // negative scale acts like a 180 rotation, so flip\r\n const yscale = vec(this.data[1] * this._scaleSignY, this.data[3] * this._scaleSignY).normalize();\r\n this.data[1] = yscale.x * val;\r\n this.data[3] = yscale.y * val;\r\n this._scale[1] = val;\r\n }\r\n setScale(scale) {\r\n this.setScaleX(scale.x);\r\n this.setScaleY(scale.y);\r\n }\r\n isIdentity() {\r\n return (this.data[0] === 1 &&\r\n this.data[1] === 0 &&\r\n this.data[2] === 0 &&\r\n this.data[3] === 1 &&\r\n this.data[4] === 0 &&\r\n this.data[5] === 0);\r\n }\r\n /**\r\n * Resets the current matrix to the identity matrix, mutating it\r\n * @returns {AffineMatrix} Current matrix as identity\r\n */\r\n reset() {\r\n const mat = this;\r\n mat.data[0] = 1;\r\n mat.data[1] = 0;\r\n mat.data[2] = 0;\r\n mat.data[3] = 1;\r\n mat.data[4] = 0;\r\n mat.data[5] = 0;\r\n return mat;\r\n }\r\n /**\r\n * Creates a new Matrix with the same data as the current 4x4\r\n */\r\n clone(dest) {\r\n const mat = dest || new AffineMatrix();\r\n mat.data[0] = this.data[0];\r\n mat.data[1] = this.data[1];\r\n mat.data[2] = this.data[2];\r\n mat.data[3] = this.data[3];\r\n mat.data[4] = this.data[4];\r\n mat.data[5] = this.data[5];\r\n return mat;\r\n }\r\n toString() {\r\n return `\r\n[${this.data[0]} ${this.data[2]} ${this.data[4]}]\r\n[${this.data[1]} ${this.data[3]} ${this.data[5]}]\r\n[0 0 1]\r\n`;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/transform-stack.ts\n\r\nclass TransformStack {\r\n constructor() {\r\n this._transforms = [];\r\n this._currentTransform = AffineMatrix.identity();\r\n }\r\n save() {\r\n this._transforms.push(this._currentTransform);\r\n this._currentTransform = this._currentTransform.clone();\r\n }\r\n restore() {\r\n this._currentTransform = this._transforms.pop();\r\n }\r\n translate(x, y) {\r\n return this._currentTransform.translate(x, y);\r\n }\r\n rotate(angle) {\r\n return this._currentTransform.rotate(angle);\r\n }\r\n scale(x, y) {\r\n return this._currentTransform.scale(x, y);\r\n }\r\n set current(matrix) {\r\n this._currentTransform = matrix;\r\n }\r\n get current() {\r\n return this._currentTransform;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/state-stack.ts\n\r\nclass StateStack {\r\n constructor() {\r\n this._states = [];\r\n this._currentState = this._getDefaultState();\r\n }\r\n _getDefaultState() {\r\n return {\r\n opacity: 1,\r\n z: 0,\r\n tint: Color.White,\r\n material: null\r\n };\r\n }\r\n _cloneState() {\r\n return {\r\n opacity: this._currentState.opacity,\r\n z: this._currentState.z,\r\n tint: this._currentState.tint.clone(),\r\n material: this._currentState.material // TODO is this going to cause problems when cloning\r\n };\r\n }\r\n save() {\r\n this._states.push(this._currentState);\r\n this._currentState = this._cloneState();\r\n }\r\n restore() {\r\n this._currentState = this._states.pop();\r\n }\r\n get current() {\r\n return this._currentState;\r\n }\r\n set current(val) {\r\n this._currentState = val;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Resources/Resource.ts\n\r\n\r\nconst ResourceEvents = {\r\n Complete: 'complete',\r\n Load: 'load',\r\n LoadStart: 'loadstart',\r\n Progress: 'progress',\r\n Error: 'error'\r\n};\r\n/**\r\n * The [[Resource]] type allows games built in Excalibur to load generic resources.\r\n * For any type of remote resource it is recommended to use [[Resource]] for preloading.\r\n */\r\nclass Resource {\r\n /**\r\n * @param path Path to the remote resource\r\n * @param responseType The type to expect as a response: \"\" | \"arraybuffer\" | \"blob\" | \"document\" | \"json\" | \"text\";\r\n * @param bustCache Whether or not to cache-bust requests\r\n */\r\n constructor(path, responseType, bustCache = false) {\r\n this.path = path;\r\n this.responseType = responseType;\r\n this.bustCache = bustCache;\r\n this.data = null;\r\n this.logger = Logger.getInstance();\r\n this.events = new EventEmitter();\r\n }\r\n /**\r\n * Returns true if the Resource is completely loaded and is ready\r\n * to be drawn.\r\n */\r\n isLoaded() {\r\n return this.data !== null;\r\n }\r\n _cacheBust(uri) {\r\n const query = /\\?\\w*=\\w*/;\r\n if (query.test(uri)) {\r\n uri += '&__=' + Date.now();\r\n }\r\n else {\r\n uri += '?__=' + Date.now();\r\n }\r\n return uri;\r\n }\r\n /**\r\n * Begin loading the resource and returns a promise to be resolved on completion\r\n */\r\n load() {\r\n return new Promise((resolve, reject) => {\r\n // Exit early if we already have data\r\n if (this.data !== null) {\r\n this.logger.debug('Already have data for resource', this.path);\r\n this.events.emit('complete', this.data);\r\n resolve(this.data);\r\n return;\r\n }\r\n const request = new XMLHttpRequest();\r\n request.open('GET', this.bustCache ? this._cacheBust(this.path) : this.path, true);\r\n request.responseType = this.responseType;\r\n request.addEventListener('loadstart', (e) => this.events.emit('loadstart', e));\r\n request.addEventListener('progress', (e) => this.events.emit('progress', e));\r\n request.addEventListener('error', (e) => this.events.emit('error', e));\r\n request.addEventListener('load', (e) => this.events.emit('load', e));\r\n request.addEventListener('load', () => {\r\n // XHR on file:// success status is 0, such as with PhantomJS\r\n if (request.status !== 0 && request.status !== 200) {\r\n this.logger.error('Failed to load resource ', this.path, ' server responded with error code', request.status);\r\n this.events.emit('error', request.response);\r\n reject(new Error(request.statusText));\r\n return;\r\n }\r\n this.data = request.response;\r\n this.events.emit('complete', this.data);\r\n this.logger.debug('Completed loading resource', this.path);\r\n resolve(this.data);\r\n });\r\n request.send();\r\n });\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Util/Watch.ts\n/**\r\n * Watch an object with a proxy, only fires if property value is different\r\n */\r\nfunction watch(type, change) {\r\n if (!type) {\r\n return type;\r\n }\r\n if (type.__isProxy === undefined) {\r\n // expando hack to mark a proxy\r\n return new Proxy(type, {\r\n set: (obj, prop, value) => {\r\n // The default behavior to store the value\r\n if (obj[prop] !== value) {\r\n obj[prop] = value;\r\n // Avoid watching private junk\r\n if (typeof prop === 'string') {\r\n if (prop[0] !== '_') {\r\n change(obj);\r\n }\r\n }\r\n }\r\n // Indicate success\r\n return true;\r\n },\r\n get: (obj, prop) => {\r\n if (prop !== '__isProxy') {\r\n return obj[prop];\r\n }\r\n return true;\r\n }\r\n });\r\n }\r\n return type;\r\n}\r\n/**\r\n * Watch an object with a proxy, fires change on any property value change\r\n */\r\nfunction watchAny(type, change) {\r\n if (!type) {\r\n return type;\r\n }\r\n if (type.__isProxy === undefined) {\r\n // expando hack to mark a proxy\r\n return new Proxy(type, {\r\n set: (obj, prop, value) => {\r\n // The default behavior to store the value\r\n obj[prop] = value;\r\n // Avoid watching private junk\r\n if (typeof prop === 'string') {\r\n if (prop[0] !== '_') {\r\n change(obj);\r\n }\r\n }\r\n // Indicate success\r\n return true;\r\n },\r\n get: (obj, prop) => {\r\n if (prop !== '__isProxy') {\r\n return obj[prop];\r\n }\r\n return true;\r\n }\r\n });\r\n }\r\n return type;\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Graphic.ts\n\r\n\r\n\r\n\r\n/**\r\n * A Graphic is the base Excalibur primitive for something that can be drawn to the [[ExcaliburGraphicsContext]].\r\n * [[Sprite]], [[Animation]], [[GraphicsGroup]], [[Canvas]], [[Rectangle]], [[Circle]], and [[Polygon]] all derive from the\r\n * [[Graphic]] abstract class.\r\n *\r\n * Implementors of a Graphic must override the abstract [[Graphic._drawImage]] method to render an image to the graphics context. Graphic\r\n * handles all the position, rotation, and scale transformations in [[Graphic._preDraw]] and [[Graphic._postDraw]]\r\n */\r\nclass Graphic {\r\n isStale() {\r\n return this._transformStale;\r\n }\r\n /**\r\n * Gets or sets the flipHorizontal, which will flip the graphic horizontally (across the y axis)\r\n */\r\n get flipHorizontal() {\r\n return this._flipHorizontal;\r\n }\r\n set flipHorizontal(value) {\r\n this._flipHorizontal = value;\r\n this._transformStale = true;\r\n }\r\n /**\r\n * Gets or sets the flipVertical, which will flip the graphic vertically (across the x axis)\r\n */\r\n get flipVertical() {\r\n return this._flipVertical;\r\n }\r\n set flipVertical(value) {\r\n this._flipVertical = value;\r\n this._transformStale = true;\r\n }\r\n /**\r\n * Gets or sets the rotation of the graphic\r\n */\r\n get rotation() {\r\n return this._rotation;\r\n }\r\n set rotation(value) {\r\n this._rotation = value;\r\n this._transformStale = true;\r\n }\r\n /**\r\n * Gets or sets the scale of the graphic, this affects the width and\r\n */\r\n get scale() {\r\n return this._scale;\r\n }\r\n set scale(value) {\r\n this._scale = watch(value, () => {\r\n this._transformStale = true;\r\n });\r\n this._transformStale = true;\r\n }\r\n /**\r\n * Gets or sets the origin of the graphic, if not set the center of the graphic is the origin\r\n */\r\n get origin() {\r\n return this._origin;\r\n }\r\n set origin(value) {\r\n this._origin = watch(value, () => {\r\n this._transformStale = true;\r\n });\r\n this._transformStale = true;\r\n }\r\n constructor(options) {\r\n var _a, _b, _c, _d, _e, _f;\r\n this.id = Graphic._ID++;\r\n this.transform = AffineMatrix.identity();\r\n this.tint = null;\r\n this._transformStale = true;\r\n /**\r\n * Gets or sets wether to show debug information about the graphic\r\n */\r\n this.showDebug = false;\r\n this._flipHorizontal = false;\r\n this._flipVertical = false;\r\n this._rotation = 0;\r\n /**\r\n * Gets or sets the opacity of the graphic, 0 is transparent, 1 is solid (opaque).\r\n */\r\n this.opacity = 1;\r\n this._scale = Vector.One;\r\n this._origin = null;\r\n this._width = 0;\r\n this._height = 0;\r\n if (options) {\r\n this.origin = (_a = options.origin) !== null && _a !== void 0 ? _a : this.origin;\r\n this.flipHorizontal = (_b = options.flipHorizontal) !== null && _b !== void 0 ? _b : this.flipHorizontal;\r\n this.flipVertical = (_c = options.flipVertical) !== null && _c !== void 0 ? _c : this.flipVertical;\r\n this.rotation = (_d = options.rotation) !== null && _d !== void 0 ? _d : this.rotation;\r\n this.opacity = (_e = options.opacity) !== null && _e !== void 0 ? _e : this.opacity;\r\n this.scale = (_f = options.scale) !== null && _f !== void 0 ? _f : this.scale;\r\n }\r\n }\r\n cloneGraphicOptions() {\r\n return {\r\n origin: this.origin ? this.origin.clone() : null,\r\n flipHorizontal: this.flipHorizontal,\r\n flipVertical: this.flipVertical,\r\n rotation: this.rotation,\r\n opacity: this.opacity,\r\n scale: this.scale ? this.scale.clone() : null\r\n };\r\n }\r\n /**\r\n * Gets or sets the width of the graphic (always positive)\r\n */\r\n get width() {\r\n return Math.abs(this._width * this.scale.x);\r\n }\r\n /**\r\n * Gets or sets the height of the graphic (always positive)\r\n */\r\n get height() {\r\n return Math.abs(this._height * this.scale.y);\r\n }\r\n set width(value) {\r\n this._width = value;\r\n this._transformStale = true;\r\n }\r\n set height(value) {\r\n this._height = value;\r\n this._transformStale = true;\r\n }\r\n /**\r\n * Gets a copy of the bounds in pixels occupied by the graphic on the the screen. This includes scale.\r\n */\r\n get localBounds() {\r\n return BoundingBox.fromDimension(this.width, this.height, Vector.Zero);\r\n }\r\n /**\r\n * Draw the whole graphic to the context including transform\r\n * @param ex The excalibur graphics context\r\n * @param x\r\n * @param y\r\n */\r\n draw(ex, x, y) {\r\n this._preDraw(ex, x, y);\r\n this._drawImage(ex, 0, 0);\r\n this._postDraw(ex);\r\n }\r\n /**\r\n * Apply affine transformations to the graphics context to manipulate the graphic before [[Graphic._drawImage]]\r\n * @param ex\r\n * @param x\r\n * @param y\r\n */\r\n _preDraw(ex, x, y) {\r\n ex.save();\r\n ex.translate(x, y);\r\n if (this._transformStale) {\r\n this.transform.reset();\r\n this.transform.scale(Math.abs(this.scale.x), Math.abs(this.scale.y));\r\n this._rotate(this.transform);\r\n this._flip(this.transform);\r\n this._transformStale = false;\r\n }\r\n ex.multiply(this.transform);\r\n // it is important to multiply alphas so graphics respect the current context\r\n ex.opacity = ex.opacity * this.opacity;\r\n if (this.tint) {\r\n ex.tint = this.tint;\r\n }\r\n }\r\n _rotate(ex) {\r\n var _a;\r\n const scaleDirX = this.scale.x > 0 ? 1 : -1;\r\n const scaleDirY = this.scale.y > 0 ? 1 : -1;\r\n const origin = (_a = this.origin) !== null && _a !== void 0 ? _a : vec(this.width / 2, this.height / 2);\r\n ex.translate(origin.x, origin.y);\r\n ex.rotate(this.rotation);\r\n // This is for handling direction changes 1 or -1, that way we don't have mismatched translates()\r\n ex.scale(scaleDirX, scaleDirY);\r\n ex.translate(-origin.x, -origin.y);\r\n }\r\n _flip(ex) {\r\n if (this.flipHorizontal) {\r\n ex.translate(this.width / this.scale.x, 0);\r\n ex.scale(-1, 1);\r\n }\r\n if (this.flipVertical) {\r\n ex.translate(0, this.height / this.scale.y);\r\n ex.scale(1, -1);\r\n }\r\n }\r\n /**\r\n * Apply any additional work after [[Graphic._drawImage]] and restore the context state.\r\n * @param ex\r\n */\r\n _postDraw(ex) {\r\n if (this.showDebug) {\r\n ex.debug.drawRect(0, 0, this.width, this.height);\r\n }\r\n ex.restore();\r\n }\r\n}\r\nGraphic._ID = 0;\r\n\n;// CONCATENATED MODULE: ./Graphics/Sprite.ts\n\r\n\r\nclass Sprite extends Graphic {\r\n static from(image) {\r\n return new Sprite({\r\n image: image\r\n });\r\n }\r\n constructor(options) {\r\n var _a, _b;\r\n super(options);\r\n this._logger = Logger.getInstance();\r\n this._dirty = true;\r\n this._logNotLoadedWarning = false;\r\n this.image = options.image;\r\n const { width, height } = options;\r\n this.sourceView = (_a = options.sourceView) !== null && _a !== void 0 ? _a : { x: 0, y: 0, width: width !== null && width !== void 0 ? width : 0, height: height !== null && height !== void 0 ? height : 0 };\r\n this.destSize = (_b = options.destSize) !== null && _b !== void 0 ? _b : { width: width !== null && width !== void 0 ? width : 0, height: height !== null && height !== void 0 ? height : 0 };\r\n this._updateSpriteDimensions();\r\n this.image.ready.then(() => {\r\n this._updateSpriteDimensions();\r\n });\r\n }\r\n get width() {\r\n return Math.abs(this.destSize.width * this.scale.x);\r\n }\r\n get height() {\r\n return Math.abs(this.destSize.height * this.scale.y);\r\n }\r\n set width(newWidth) {\r\n newWidth /= Math.abs(this.scale.x);\r\n this.destSize.width = newWidth;\r\n super.width = Math.ceil(this.destSize.width);\r\n }\r\n set height(newHeight) {\r\n newHeight /= Math.abs(this.scale.y);\r\n this.destSize.height = newHeight;\r\n super.height = Math.ceil(this.destSize.height);\r\n }\r\n _updateSpriteDimensions() {\r\n var _a, _b, _c, _d, _e, _f;\r\n const { width: nativeWidth, height: nativeHeight } = this.image;\r\n // This code uses || to avoid 0's\r\n // If the source is not specified, use the native dimension\r\n this.sourceView.width = ((_a = this.sourceView) === null || _a === void 0 ? void 0 : _a.width) || nativeWidth;\r\n this.sourceView.height = ((_b = this.sourceView) === null || _b === void 0 ? void 0 : _b.height) || nativeHeight;\r\n // If the destination is not specified, use the source if specified, then native\r\n this.destSize.width = ((_c = this.destSize) === null || _c === void 0 ? void 0 : _c.width) || ((_d = this.sourceView) === null || _d === void 0 ? void 0 : _d.width) || nativeWidth;\r\n this.destSize.height = ((_e = this.destSize) === null || _e === void 0 ? void 0 : _e.height) || ((_f = this.sourceView) === null || _f === void 0 ? void 0 : _f.height) || nativeHeight;\r\n this.width = Math.ceil(this.destSize.width) * this.scale.x;\r\n this.height = Math.ceil(this.destSize.height) * this.scale.y;\r\n }\r\n _preDraw(ex, x, y) {\r\n if (this.image.isLoaded() && this._dirty) {\r\n this._dirty = false;\r\n this._updateSpriteDimensions();\r\n }\r\n super._preDraw(ex, x, y);\r\n }\r\n _drawImage(ex, x, y) {\r\n if (this.image.isLoaded()) {\r\n ex.drawImage(this.image.image, this.sourceView.x, this.sourceView.y, this.sourceView.width, this.sourceView.height, x, y, this.destSize.width, this.destSize.height);\r\n }\r\n else {\r\n if (!this._logNotLoadedWarning) {\r\n this._logger.warn(`ImageSource ${this.image.path}` +\r\n ` is not yet loaded and won't be drawn. Please call .load() or include in a Loader.\\n\\n` +\r\n `Read https://excaliburjs.com/docs/imagesource for more information.`);\r\n }\r\n this._logNotLoadedWarning = true;\r\n }\r\n }\r\n clone() {\r\n return new Sprite({\r\n image: this.image,\r\n sourceView: { ...this.sourceView },\r\n destSize: { ...this.destSize },\r\n ...this.cloneGraphicOptions()\r\n });\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Filtering.ts\n/**\r\n * Describes the different image filtering modes\r\n */\r\nvar ImageFiltering;\r\n(function (ImageFiltering) {\r\n /**\r\n * Pixel is useful when you do not want smoothing aka antialiasing applied to your graphics.\r\n *\r\n * Useful for Pixel art aesthetics.\r\n */\r\n ImageFiltering[\"Pixel\"] = \"Pixel\";\r\n /**\r\n * Blended is useful when you have high resolution artwork and would like it blended and smoothed\r\n */\r\n ImageFiltering[\"Blended\"] = \"Blended\";\r\n})(ImageFiltering || (ImageFiltering = {}));\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/texture-loader.ts\n\r\n\r\n/**\r\n * Manages loading image sources into webgl textures, a unique id is associated with all sources\r\n */\r\nclass TextureLoader {\r\n constructor(gl) {\r\n this._textureMap = new Map();\r\n this._gl = gl;\r\n TextureLoader._MAX_TEXTURE_SIZE = gl.getParameter(gl.MAX_TEXTURE_SIZE);\r\n }\r\n /**\r\n * Get the WebGL Texture from a source image\r\n * @param image\r\n */\r\n get(image) {\r\n return this._textureMap.get(image);\r\n }\r\n /**\r\n * Returns whether a source image has been loaded as a texture\r\n * @param image\r\n */\r\n has(image) {\r\n return this._textureMap.has(image);\r\n }\r\n /**\r\n * Loads a graphic into webgl and returns it's texture info, a webgl context must be previously registered\r\n * @param image Source graphic\r\n * @param filtering {ImageFiltering} The ImageFiltering mode to apply to the loaded texture\r\n * @param forceUpdate Optionally force a texture to be reloaded, useful if the source graphic has changed\r\n */\r\n load(image, filtering, forceUpdate = false) {\r\n // Ignore loading if webgl is not registered\r\n const gl = this._gl;\r\n if (!gl) {\r\n return null;\r\n }\r\n let tex = null;\r\n // If reuse the texture if it's from the same source\r\n if (this.has(image)) {\r\n tex = this.get(image);\r\n }\r\n // Update existing webgl texture and return early\r\n if (tex) {\r\n if (forceUpdate) {\r\n gl.bindTexture(gl.TEXTURE_2D, tex);\r\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);\r\n }\r\n return tex;\r\n }\r\n // No texture exists create a new one\r\n tex = gl.createTexture();\r\n TextureLoader.checkImageSizeSupportedAndLog(image);\r\n gl.bindTexture(gl.TEXTURE_2D, tex);\r\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n // NEAREST for pixel art, LINEAR for hi-res\r\n const filterMode = filtering !== null && filtering !== void 0 ? filtering : TextureLoader.filtering;\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, filterMode === ImageFiltering.Pixel ? gl.NEAREST : gl.LINEAR);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, filterMode === ImageFiltering.Pixel ? gl.NEAREST : gl.LINEAR);\r\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);\r\n this._textureMap.set(image, tex);\r\n return tex;\r\n }\r\n delete(image) {\r\n // Ignore loading if webgl is not registered\r\n const gl = this._gl;\r\n if (!gl) {\r\n return null;\r\n }\r\n let tex = null;\r\n if (this.has(image)) {\r\n tex = this.get(image);\r\n gl.deleteTexture(tex);\r\n }\r\n }\r\n /**\r\n * Takes an image and returns if it meets size criteria for hardware\r\n * @param image\r\n * @returns if the image will be supported at runtime\r\n */\r\n static checkImageSizeSupportedAndLog(image) {\r\n var _a;\r\n const originalSrc = (_a = image.dataset.originalSrc) !== null && _a !== void 0 ? _a : 'internal canvas bitmap';\r\n if (image.width > TextureLoader._MAX_TEXTURE_SIZE || image.height > TextureLoader._MAX_TEXTURE_SIZE) {\r\n TextureLoader._LOGGER.error(`The image [${originalSrc}] provided to Excalibur is too large for the device's maximum texture size of ` +\r\n `(${TextureLoader._MAX_TEXTURE_SIZE}x${TextureLoader._MAX_TEXTURE_SIZE}) please resize to an image `\r\n + `for excalibur to render properly.\\n\\nImages will likely render as black rectangles.\\n\\n` +\r\n `Read more here: https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/WebGL_best_practices#understand_system_limits`);\r\n return false;\r\n }\r\n else if (image.width > 4096 || image.height > 4096) {\r\n // https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/WebGL_best_practices#understand_system_limits\r\n TextureLoader._LOGGER.warn(`The image [${originalSrc}] provided to excalibur is too large may not work on all mobile devices, ` +\r\n `it is recommended you resize images to a maximum (4096x4096).\\n\\n` +\r\n `Images will likely render as black rectangles on some mobile platforms.\\n\\n` +\r\n `Read more here: https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/WebGL_best_practices#understand_system_limits`);\r\n }\r\n return true;\r\n }\r\n}\r\nTextureLoader._LOGGER = Logger.getInstance();\r\n/**\r\n * Sets the default filtering for the Excalibur texture loader, default [[ImageFiltering.Blended]]\r\n */\r\nTextureLoader.filtering = ImageFiltering.Blended;\r\nTextureLoader._MAX_TEXTURE_SIZE = 4096;\r\n\n;// CONCATENATED MODULE: ./Graphics/ImageSource.ts\n\r\n\r\n\r\n\r\n\r\nclass ImageSource {\r\n /**\r\n * The original size of the source image in pixels\r\n */\r\n get width() {\r\n return this.image.naturalWidth;\r\n }\r\n /**\r\n * The original height of the source image in pixels\r\n */\r\n get height() {\r\n return this.image.naturalHeight;\r\n }\r\n /**\r\n * Returns true if the Texture is completely loaded and is ready\r\n * to be drawn.\r\n */\r\n isLoaded() {\r\n if (!this._src) {\r\n // this boosts speed of access\r\n this._src = this.data.src;\r\n }\r\n return !!this._src;\r\n }\r\n get image() {\r\n return this.data;\r\n }\r\n /**\r\n * The path to the image, can also be a data url like 'data:image/'\r\n * @param path {string} Path to the image resource relative from the HTML document hosting the game, or absolute\r\n * @param bustCache {boolean} Should excalibur add a cache busting querystring?\r\n * @param filtering {ImageFiltering} Optionally override the image filtering set by [[EngineOptions.antialiasing]]\r\n */\r\n constructor(path, bustCache = false, filtering) {\r\n this.path = path;\r\n this._logger = Logger.getInstance();\r\n /**\r\n * Access to the underlying html image element\r\n */\r\n this.data = new Image();\r\n this._readyFuture = new Future();\r\n /**\r\n * Promise the resolves when the image is loaded and ready for use, does not initiate loading\r\n */\r\n this.ready = this._readyFuture.promise;\r\n this._resource = new Resource(path, 'blob', bustCache);\r\n this.filtering = filtering;\r\n if (path.endsWith('.svg') || path.endsWith('.gif')) {\r\n this._logger.warn(`Image type is not fully supported, you may have mixed results ${path}. Fully supported: jpg, bmp, and png`);\r\n }\r\n }\r\n /**\r\n * Should excalibur add a cache busting querystring? By default false.\r\n * Must be set before loading\r\n */\r\n get bustCache() {\r\n return this._resource.bustCache;\r\n }\r\n set bustCache(val) {\r\n this._resource.bustCache = val;\r\n }\r\n /**\r\n * Begins loading the image and returns a promise that resolves when the image is loaded\r\n */\r\n async load() {\r\n if (this.isLoaded()) {\r\n return this.data;\r\n }\r\n try {\r\n // Load base64 or blob if needed\r\n let url;\r\n if (!this.path.includes('data:image/')) {\r\n const blob = await this._resource.load();\r\n url = URL.createObjectURL(blob);\r\n }\r\n else {\r\n url = this.path;\r\n }\r\n // Decode the image\r\n const image = new Image();\r\n // Use Image.onload over Image.decode()\r\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1055828#c7\r\n // Otherwise chrome will throw still Image.decode() failures for large textures\r\n const loadedFuture = new Future();\r\n image.onload = () => loadedFuture.resolve();\r\n image.src = url;\r\n image.setAttribute('data-original-src', this.path);\r\n await loadedFuture.promise;\r\n // Set results\r\n // We defer loading the texture into webgl until the first draw that way we avoid a singleton\r\n // and for the multi-engine case the texture needs to be created in EACH webgl context to work\r\n // See image-renderer.ts draw()\r\n this.data = image;\r\n // emit warning if potentially too big\r\n TextureLoader.checkImageSizeSupportedAndLog(this.data);\r\n }\r\n catch (error) {\r\n throw `Error loading ImageSource from path '${this.path}' with error [${error.message}]`;\r\n }\r\n // Do a bad thing to pass the filtering as an attribute\r\n this.data.setAttribute('filtering', this.filtering);\r\n // todo emit complete\r\n this._readyFuture.resolve(this.data);\r\n return this.data;\r\n }\r\n /**\r\n * Build a sprite from this ImageSource\r\n */\r\n toSprite() {\r\n return Sprite.from(this);\r\n }\r\n /**\r\n * Unload images from memory\r\n */\r\n unload() {\r\n this.data = new Image();\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/SpriteSheet.ts\n\r\n\r\n/**\r\n * Represents a collection of sprites from a source image with some organization in a grid\r\n */\r\nclass SpriteSheet {\r\n /**\r\n * Build a new sprite sheet from a list of sprites\r\n *\r\n * Use [[SpriteSheet.fromImageSource]] to create a SpriteSheet from an [[ImageSource]] organized in a grid\r\n * @param options\r\n */\r\n constructor(options) {\r\n this._logger = Logger.getInstance();\r\n this.sprites = [];\r\n const { sprites, rows, columns } = options;\r\n this.sprites = sprites;\r\n this.rows = rows !== null && rows !== void 0 ? rows : 1;\r\n this.columns = columns !== null && columns !== void 0 ? columns : this.sprites.length;\r\n }\r\n /**\r\n * Find a sprite by their x/y position in the SpriteSheet, for example `getSprite(0, 0)` is the [[Sprite]] in the top-left\r\n * @param x\r\n * @param y\r\n */\r\n getSprite(x, y) {\r\n if (x >= this.columns || x < 0) {\r\n this._logger.warn(`No sprite exists in the SpriteSheet at (${x}, ${y}), x: ${x} should be between 0 and ${this.columns - 1}`);\r\n return null;\r\n }\r\n if (y >= this.rows || y < 0) {\r\n this._logger.warn(`No sprite exists in the SpriteSheet at (${x}, ${y}), y: ${y} should be between 0 and ${this.rows - 1}`);\r\n return null;\r\n }\r\n const spriteIndex = x + y * this.columns;\r\n return this.sprites[spriteIndex];\r\n }\r\n /**\r\n * Create a sprite sheet from a sparse set of [[SourceView]] rectangles\r\n * @param options\r\n */\r\n static fromImageSourceWithSourceViews(options) {\r\n const sprites = options.sourceViews.map(sourceView => {\r\n return new Sprite({\r\n image: options.image,\r\n sourceView\r\n });\r\n });\r\n return new SpriteSheet({ sprites });\r\n }\r\n /**\r\n * Create a SpriteSheet from an [[ImageSource]] organized in a grid\r\n *\r\n * Example:\r\n * ```\r\n * const spriteSheet = SpriteSheet.fromImageSource({\r\n * image: imageSource,\r\n * grid: {\r\n * rows: 5,\r\n * columns: 2,\r\n * spriteWidth: 32, // pixels\r\n * spriteHeight: 32 // pixels\r\n * },\r\n * // Optionally specify spacing\r\n * spacing: {\r\n * // pixels from the top left to start the sprite parsing\r\n * originOffset: {\r\n * x: 5,\r\n * y: 5\r\n * },\r\n * // pixels between each sprite while parsing\r\n * margin: {\r\n * x: 1,\r\n * y: 1\r\n * }\r\n * }\r\n * })\r\n * ```\r\n *\r\n * @param options\r\n */\r\n static fromImageSource(options) {\r\n var _a;\r\n const sprites = [];\r\n options.spacing = (_a = options.spacing) !== null && _a !== void 0 ? _a : {};\r\n const { image, grid: { rows, columns: cols, spriteWidth, spriteHeight }, spacing: { originOffset, margin } } = options;\r\n const offsetDefaults = { x: 0, y: 0, ...originOffset };\r\n const marginDefaults = { x: 0, y: 0, ...margin };\r\n for (let x = 0; x < cols; x++) {\r\n for (let y = 0; y < rows; y++) {\r\n sprites[x + y * cols] = new Sprite({\r\n image: image,\r\n sourceView: {\r\n x: x * spriteWidth + marginDefaults.x * x + offsetDefaults.x,\r\n y: y * spriteHeight + marginDefaults.y * y + offsetDefaults.y,\r\n width: spriteWidth,\r\n height: spriteHeight\r\n },\r\n destSize: { height: spriteHeight, width: spriteWidth }\r\n });\r\n }\r\n }\r\n return new SpriteSheet({\r\n sprites: sprites,\r\n rows: rows,\r\n columns: cols\r\n });\r\n }\r\n clone() {\r\n return new SpriteSheet({\r\n sprites: this.sprites.map(sprite => sprite.clone()),\r\n rows: this.rows,\r\n columns: this.columns\r\n });\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/SpriteFont.ts\n\r\n\r\n\r\n\r\nclass SpriteFont extends Graphic {\r\n constructor(options) {\r\n super(options);\r\n this._text = '';\r\n this.alphabet = '';\r\n this.shadow = null;\r\n this.caseInsensitive = false;\r\n this.spacing = 0;\r\n this._logger = Logger.getInstance();\r\n this._alreadyWarnedAlphabet = false;\r\n this._alreadyWarnedSpriteSheet = false;\r\n const { alphabet, spriteSheet, caseInsensitive, spacing, shadow } = options;\r\n this.alphabet = alphabet;\r\n this.spriteSheet = spriteSheet;\r\n this.caseInsensitive = caseInsensitive !== null && caseInsensitive !== void 0 ? caseInsensitive : this.caseInsensitive;\r\n this.spacing = spacing !== null && spacing !== void 0 ? spacing : this.spacing;\r\n this.shadow = shadow !== null && shadow !== void 0 ? shadow : this.shadow;\r\n }\r\n _getCharacterSprites(text) {\r\n const results = [];\r\n // handle case insensitive\r\n const textToRender = this.caseInsensitive ? text.toLocaleLowerCase() : text;\r\n const alphabet = this.caseInsensitive ? this.alphabet.toLocaleLowerCase() : this.alphabet;\r\n // for each letter in text\r\n for (let letterIndex = 0; letterIndex < textToRender.length; letterIndex++) {\r\n // find the sprite index in alphabet , if there is an error pick the first\r\n const letter = textToRender[letterIndex];\r\n let spriteIndex = alphabet.indexOf(letter);\r\n if (spriteIndex === -1) {\r\n spriteIndex = 0;\r\n if (!this._alreadyWarnedAlphabet) {\r\n this._logger.warn(`SpriteFont - Cannot find letter '${letter}' in configured alphabet '${alphabet}'.`);\r\n this._logger.warn('There maybe be more issues in the SpriteFont configuration. No additional warnings will be logged.');\r\n this._alreadyWarnedAlphabet = true;\r\n }\r\n }\r\n const letterSprite = this.spriteSheet.sprites[spriteIndex];\r\n if (letterSprite) {\r\n results.push(letterSprite);\r\n }\r\n else {\r\n if (!this._alreadyWarnedSpriteSheet) {\r\n this._logger.warn(`SpriteFont - Cannot find sprite for '${letter}' at index '${spriteIndex}' in configured SpriteSheet`);\r\n this._logger.warn('There maybe be more issues in the SpriteFont configuration. No additional warnings will be logged.');\r\n this._alreadyWarnedSpriteSheet = true;\r\n }\r\n }\r\n }\r\n return results;\r\n }\r\n measureText(text, maxWidth) {\r\n const lines = this._getLinesFromText(text, maxWidth);\r\n const maxWidthLine = lines.reduce((a, b) => {\r\n return a.length > b.length ? a : b;\r\n });\r\n const sprites = this._getCharacterSprites(maxWidthLine);\r\n let width = 0;\r\n let height = 0;\r\n for (const sprite of sprites) {\r\n width += sprite.width + this.spacing;\r\n height = Math.max(height, sprite.height);\r\n }\r\n return BoundingBox.fromDimension(width, height * lines.length, Vector.Zero);\r\n }\r\n _drawImage(ex, x, y, maxWidth) {\r\n let xCursor = 0;\r\n let yCursor = 0;\r\n let height = 0;\r\n const lines = this._getLinesFromText(this._text, maxWidth);\r\n for (const line of lines) {\r\n for (const sprite of this._getCharacterSprites(line)) {\r\n // draw it in the right spot and increase the cursor by sprite width\r\n sprite.draw(ex, x + xCursor, y + yCursor);\r\n xCursor += sprite.width + this.spacing;\r\n height = Math.max(height, sprite.height);\r\n }\r\n xCursor = 0;\r\n yCursor += height;\r\n }\r\n }\r\n render(ex, text, _color, x, y, maxWidth) {\r\n // SpriteFont doesn't support _color, yet...\r\n this._text = text;\r\n const bounds = this.measureText(text, maxWidth);\r\n this.width = bounds.width;\r\n this.height = bounds.height;\r\n if (this.shadow) {\r\n ex.save();\r\n ex.translate(this.shadow.offset.x, this.shadow.offset.y);\r\n this._preDraw(ex, x, y);\r\n this._drawImage(ex, 0, 0, maxWidth);\r\n this._postDraw(ex);\r\n ex.restore();\r\n }\r\n this._preDraw(ex, x, y);\r\n this._drawImage(ex, 0, 0, maxWidth);\r\n this._postDraw(ex);\r\n }\r\n clone() {\r\n return new SpriteFont({\r\n alphabet: this.alphabet,\r\n spriteSheet: this.spriteSheet,\r\n spacing: this.spacing\r\n });\r\n }\r\n _getLinesFromText(text, maxWidth) {\r\n if (this._cachedText === text && this._cachedRenderWidth === maxWidth) {\r\n return this._cachedLines;\r\n }\r\n const lines = text.split('\\n');\r\n if (maxWidth == null) {\r\n return lines;\r\n }\r\n // If the current line goes past the maxWidth, append a new line without modifying the underlying text.\r\n for (let i = 0; i < lines.length; i++) {\r\n let line = lines[i];\r\n let newLine = '';\r\n // Note: we subtract the spacing to counter the initial padding on the left side.\r\n if (this.measureText(line).width > maxWidth) {\r\n while (this.measureText(line).width > maxWidth) {\r\n newLine = line[line.length - 1] + newLine;\r\n line = line.slice(0, -1); // Remove last character from line\r\n }\r\n // Update the array with our new values\r\n lines[i] = line;\r\n lines[i + 1] = newLine;\r\n }\r\n }\r\n this._cachedText = text;\r\n this._cachedLines = lines;\r\n this._cachedRenderWidth = maxWidth;\r\n return lines;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/debug-font.png\n/* harmony default export */ const debug_font = (\"data:image/png;base64,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\");\n;// CONCATENATED MODULE: ./Graphics/Context/debug-text.ts\n\r\n\r\n/**\r\n * Internal debugtext helper\r\n */\r\nclass DebugText {\r\n constructor() {\r\n /**\r\n * base64 font\r\n */\r\n this.fontSheet = debug_font;\r\n this.size = 16;\r\n this.load();\r\n }\r\n load() {\r\n this._imageSource = new ImageSource(this.fontSheet);\r\n return this._imageSource.load().then(() => {\r\n this._spriteSheet = SpriteSheet.fromImageSource({\r\n image: this._imageSource,\r\n grid: {\r\n rows: 3,\r\n columns: 16,\r\n spriteWidth: 16,\r\n spriteHeight: 16\r\n }\r\n });\r\n this._spriteFont = new SpriteFont({\r\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ,!\\'&.\"?-()+ ',\r\n caseInsensitive: true,\r\n spriteSheet: this._spriteSheet,\r\n spacing: -6\r\n });\r\n });\r\n }\r\n /**\r\n * Writes debug text using the built in sprint font\r\n * @param ctx\r\n * @param text\r\n * @param pos\r\n */\r\n write(ctx, text, pos) {\r\n if (this._imageSource.isLoaded()) {\r\n this._spriteFont.render(ctx, text, null, pos.x, pos.y);\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/render-source.ts\nclass RenderSource {\r\n constructor(_gl, _texture) {\r\n this._gl = _gl;\r\n this._texture = _texture;\r\n }\r\n use() {\r\n const gl = this._gl;\r\n gl.activeTexture(gl.TEXTURE0);\r\n gl.bindTexture(gl.TEXTURE_2D, this._texture);\r\n }\r\n disable() {\r\n const gl = this._gl;\r\n gl.bindTexture(gl.TEXTURE_2D, null);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/render-target.ts\n\r\nclass RenderTarget {\r\n constructor(options) {\r\n this.width = options.width;\r\n this.height = options.height;\r\n this._gl = options.gl;\r\n this._setupFramebuffer();\r\n }\r\n setResolution(width, height) {\r\n const gl = this._gl;\r\n this.width = width;\r\n this.height = height;\r\n gl.bindTexture(gl.TEXTURE_2D, this._frameTexture);\r\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, this.width, this.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);\r\n }\r\n get frameBuffer() {\r\n return this._frameBuffer;\r\n }\r\n get frameTexture() {\r\n return this._frameTexture;\r\n }\r\n _setupFramebuffer() {\r\n // Allocates frame buffer\r\n const gl = this._gl;\r\n this._frameTexture = gl.createTexture();\r\n gl.bindTexture(gl.TEXTURE_2D, this._frameTexture);\r\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, this.width, this.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);\r\n // set the filtering so we don't need mips\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n // attach the texture as the first color attachment\r\n const attachmentPoint = gl.COLOR_ATTACHMENT0;\r\n // After this bind all draw calls will draw to this framebuffer texture\r\n this._frameBuffer = gl.createFramebuffer();\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._frameBuffer);\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, attachmentPoint, gl.TEXTURE_2D, this._frameTexture, 0);\r\n // Reset after initialized\r\n this.disable();\r\n }\r\n toRenderSource() {\r\n const source = new RenderSource(this._gl, this._frameTexture);\r\n return source;\r\n }\r\n /**\r\n * When called, all drawing gets redirected to this render target\r\n */\r\n use() {\r\n const gl = this._gl;\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._frameBuffer);\r\n // very important to set the viewport to the size of the framebuffer texture\r\n gl.viewport(0, 0, this.width, this.height);\r\n }\r\n /**\r\n * When called, all drawing is sent back to the canvas\r\n */\r\n disable() {\r\n const gl = this._gl;\r\n // passing null switches rendering back to the canvas\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\r\n gl.bindTexture(gl.TEXTURE_2D, null);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/line-renderer/line-vertex.glsl\n/* harmony default export */ const line_vertex = (\"#version 300 es\\r\\nin vec2 a_position;\\r\\nin vec4 a_color;\\r\\n\\r\\nout lowp vec4 v_color;\\r\\n\\r\\nuniform mat4 u_matrix;\\r\\n\\r\\nvoid main() {\\r\\n // Set the vertex position using the ortho transform matrix\\r\\n gl_Position = u_matrix * vec4(a_position, 0.0, 1.0);\\r\\n\\r\\n // Passthrough the color\\r\\n v_color = a_color;\\r\\n}\");\n;// CONCATENATED MODULE: ./Graphics/Context/line-renderer/line-fragment.glsl\n/* harmony default export */ const line_fragment = (\"#version 300 es\\r\\nprecision mediump float;\\r\\n\\r\\n// Color\\r\\nin lowp vec4 v_color;\\r\\n\\r\\nout vec4 fragColor;\\r\\n\\r\\nvoid main() {\\r\\n fragColor = v_color;\\r\\n}\");\n;// CONCATENATED MODULE: ./Graphics/Context/webgl-util.ts\n/**\r\n * Return the size of the GlType in bytes\r\n * @param gl\r\n * @param type\r\n */\r\nfunction getGlTypeSizeBytes(gl, type) {\r\n switch (type) {\r\n case gl.FLOAT:\r\n return 4;\r\n case gl.SHORT:\r\n return 2;\r\n case gl.UNSIGNED_SHORT:\r\n return 2;\r\n case gl.BYTE:\r\n return 1;\r\n case gl.UNSIGNED_BYTE:\r\n return 1;\r\n default:\r\n return 1;\r\n }\r\n}\r\n/**\r\n * Based on the type return the number of attribute components\r\n *\r\n * https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/vertexAttribPointer\r\n * @param gl\r\n * @param type\r\n */\r\nfunction getAttributeComponentSize(gl, type) {\r\n switch (type) {\r\n case gl.LOW_FLOAT:\r\n case gl.HIGH_FLOAT:\r\n case gl.FLOAT:\r\n return 1;\r\n case gl.FLOAT_VEC2:\r\n return 2;\r\n case gl.FLOAT_VEC3:\r\n return 3;\r\n case gl.FLOAT_VEC4:\r\n return 4;\r\n case gl.BYTE:\r\n return 1;\r\n case gl.UNSIGNED_BYTE:\r\n return 1;\r\n case gl.UNSIGNED_SHORT:\r\n case gl.SHORT:\r\n return 1;\r\n default:\r\n return 1;\r\n }\r\n}\r\n/**\r\n * Based on the attribute return the corresponding supported attrib pointer type\r\n * https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/vertexAttribPointer\r\n *\r\n * @param gl\r\n * @param type\r\n */\r\nfunction getAttributePointerType(gl, type) {\r\n switch (type) {\r\n case gl.LOW_FLOAT:\r\n case gl.HIGH_FLOAT:\r\n case gl.FLOAT:\r\n case gl.FLOAT_VEC2:\r\n case gl.FLOAT_VEC3:\r\n case gl.FLOAT_VEC4:\r\n return gl.FLOAT;\r\n case gl.BYTE:\r\n return gl.BYTE;\r\n case gl.UNSIGNED_BYTE:\r\n return gl.UNSIGNED_BYTE;\r\n case gl.SHORT:\r\n return gl.SHORT;\r\n case gl.UNSIGNED_SHORT:\r\n return gl.UNSIGNED_SHORT;\r\n default:\r\n return gl.FLOAT;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/shader.ts\n\r\n\r\nclass Shader {\r\n get compiled() {\r\n return this._compiled;\r\n }\r\n /**\r\n * Create a shader program in excalibur\r\n * @param options specify shader vertex and fragment source\r\n */\r\n constructor(options) {\r\n this._logger = Logger.getInstance();\r\n this.uniforms = {};\r\n this.attributes = {};\r\n this._compiled = false;\r\n const { gl, vertexSource, fragmentSource } = options;\r\n this._gl = gl;\r\n this.vertexSource = vertexSource;\r\n this.fragmentSource = fragmentSource;\r\n }\r\n /**\r\n * Binds the shader program\r\n */\r\n use() {\r\n const gl = this._gl;\r\n gl.useProgram(this.program);\r\n Shader._ACTIVE_SHADER_INSTANCE = this;\r\n }\r\n isCurrentlyBound() {\r\n return Shader._ACTIVE_SHADER_INSTANCE === this;\r\n }\r\n /**\r\n * Compile the current shader against a webgl context\r\n */\r\n compile() {\r\n const gl = this._gl;\r\n const vertexShader = this._compileShader(gl, this.vertexSource, gl.VERTEX_SHADER);\r\n const fragmentShader = this._compileShader(gl, this.fragmentSource, gl.FRAGMENT_SHADER);\r\n this.program = this._createProgram(gl, vertexShader, fragmentShader);\r\n const attributes = this.getAttributes();\r\n for (const attribute of attributes) {\r\n this.attributes[attribute.name] = attribute;\r\n }\r\n const uniforms = this.getUniforms();\r\n for (const uniform of uniforms) {\r\n this.uniforms[uniform.name] = uniform;\r\n }\r\n this._compiled = true;\r\n return this.program;\r\n }\r\n getUniforms() {\r\n const gl = this._gl;\r\n const uniformCount = gl.getProgramParameter(this.program, gl.ACTIVE_UNIFORMS);\r\n const uniforms = [];\r\n for (let i = 0; i < uniformCount; i++) {\r\n const uniform = gl.getActiveUniform(this.program, i);\r\n const uniformLocation = gl.getUniformLocation(this.program, uniform.name);\r\n uniforms.push({\r\n name: uniform.name,\r\n glType: uniform.type,\r\n location: uniformLocation\r\n });\r\n }\r\n return uniforms;\r\n }\r\n getAttributes() {\r\n const gl = this._gl;\r\n const attributeCount = gl.getProgramParameter(this.program, gl.ACTIVE_ATTRIBUTES);\r\n const attributes = [];\r\n for (let i = 0; i < attributeCount; i++) {\r\n const attribute = gl.getActiveAttrib(this.program, i);\r\n const attributeLocation = gl.getAttribLocation(this.program, attribute.name);\r\n attributes.push({\r\n name: attribute.name,\r\n glType: getAttributePointerType(gl, attribute.type),\r\n size: getAttributeComponentSize(gl, attribute.type),\r\n location: attributeLocation,\r\n normalized: false\r\n });\r\n }\r\n return attributes;\r\n }\r\n /**\r\n * Set a texture in a gpu texture slot\r\n * @param slotNumber\r\n * @param texture\r\n */\r\n setTexture(slotNumber, texture) {\r\n const gl = this._gl;\r\n gl.activeTexture(gl.TEXTURE0 + slotNumber);\r\n gl.bindTexture(gl.TEXTURE_2D, texture);\r\n }\r\n /**\r\n * Set an integer uniform for the current shader\r\n *\r\n * **Important** Must call ex.Shader.use() before setting a uniform!\r\n *\r\n * @param name\r\n * @param value\r\n */\r\n setUniformInt(name, value) {\r\n this.setUniform('uniform1i', name, ~~value);\r\n }\r\n /**\r\n * Set an integer uniform for the current shader, WILL NOT THROW on error.\r\n *\r\n * **Important** Must call ex.Shader.use() before setting a uniform!\r\n *\r\n * @param name\r\n * @param value\r\n */\r\n trySetUniformInt(name, value) {\r\n return this.trySetUniform('uniform1i', name, ~~value);\r\n }\r\n /**\r\n * Set an integer array uniform for the current shader\r\n *\r\n * **Important** Must call ex.Shader.use() before setting a uniform!\r\n *\r\n * @param name\r\n * @param value\r\n */\r\n setUniformIntArray(name, value) {\r\n this.setUniform('uniform1iv', name, value);\r\n }\r\n /**\r\n * Set an integer array uniform for the current shader, WILL NOT THROW on error.\r\n *\r\n * **Important** Must call ex.Shader.use() before setting a uniform!\r\n *\r\n * @param name\r\n * @param value\r\n */\r\n trySetUniformIntArray(name, value) {\r\n return this.trySetUniform('uniform1iv', name, value);\r\n }\r\n /**\r\n * Set a boolean uniform for the current shader\r\n *\r\n * **Important** Must call ex.Shader.use() before setting a uniform!\r\n *\r\n * @param name\r\n * @param value\r\n */\r\n setUniformBoolean(name, value) {\r\n this.setUniform('uniform1i', name, value ? 1 : 0);\r\n }\r\n /**\r\n * Set a boolean uniform for the current shader, WILL NOT THROW on error.\r\n *\r\n * **Important** Must call ex.Shader.use() before setting a uniform!\r\n *\r\n * @param name\r\n * @param value\r\n */\r\n trySetUniformBoolean(name, value) {\r\n return this.trySetUniform('uniform1i', name, value ? 1 : 0);\r\n }\r\n /**\r\n * Set a float uniform for the current shader\r\n *\r\n * **Important** Must call ex.Shader.use() before setting a uniform!\r\n *\r\n * @param name\r\n * @param value\r\n */\r\n setUniformFloat(name, value) {\r\n this.setUniform('uniform1f', name, value);\r\n }\r\n /**\r\n * Set a float uniform for the current shader, WILL NOT THROW on error.\r\n *\r\n * **Important** Must call ex.Shader.use() before setting a uniform!\r\n *\r\n * @param name\r\n * @param value\r\n */\r\n trySetUniformFloat(name, value) {\r\n return this.trySetUniform('uniform1f', name, value);\r\n }\r\n /**\r\n * Set a float array uniform for the current shader\r\n *\r\n * **Important** Must call ex.Shader.use() before setting a uniform!\r\n *\r\n * @param name\r\n * @param value\r\n */\r\n setUniformFloatArray(name, value) {\r\n this.setUniform('uniform1fv', name, value);\r\n }\r\n /**\r\n * Set a float array uniform for the current shader, WILL NOT THROW on error.\r\n *\r\n * **Important** Must call ex.Shader.use() before setting a uniform!\r\n *\r\n * @param name\r\n * @param value\r\n */\r\n trySetUniformFloatArray(name, value) {\r\n return this.trySetUniform('uniform1fv', name, value);\r\n }\r\n /**\r\n * Set a [[Vector]] uniform for the current shader\r\n *\r\n * **Important** Must call ex.Shader.use() before setting a uniform!\r\n *\r\n * @param name\r\n * @param value\r\n */\r\n setUniformFloatVector(name, value) {\r\n this.setUniform('uniform2f', name, value.x, value.y);\r\n }\r\n /**\r\n * Set a [[Vector]] uniform for the current shader, WILL NOT THROW on error.\r\n *\r\n * **Important** Must call ex.Shader.use() before setting a uniform!\r\n *\r\n * @param name\r\n * @param value\r\n */\r\n trySetUniformFloatVector(name, value) {\r\n return this.trySetUniform('uniform2f', name, value.x, value.y);\r\n }\r\n /**\r\n * Set a [[Color]] uniform for the current shader\r\n *\r\n * **Important** Must call ex.Shader.use() before setting a uniform!\r\n *\r\n * @param name\r\n * @param value\r\n */\r\n setUniformFloatColor(name, value) {\r\n this.setUniform('uniform4f', name, value.r / 255, value.g / 255, value.b / 255, value.a);\r\n }\r\n /**\r\n * Set a [[Color]] uniform for the current shader, WILL NOT THROW on error.\r\n *\r\n * **Important** Must call ex.Shader.use() before setting a uniform!\r\n *\r\n * @param name\r\n * @param value\r\n */\r\n trySetUniformFloatColor(name, value) {\r\n return this.trySetUniform('uniform4f', name, value.r / 255, value.g / 255, value.b / 255, value.a);\r\n }\r\n /**\r\n * Set an [[Matrix]] uniform for the current shader\r\n *\r\n * **Important** Must call ex.Shader.use() before setting a uniform!\r\n *\r\n * @param name\r\n * @param value\r\n */\r\n setUniformMatrix(name, value) {\r\n this.setUniform('uniformMatrix4fv', name, false, value.data);\r\n }\r\n /**\r\n * Set an [[Matrix]] uniform for the current shader, WILL NOT THROW on error.\r\n *\r\n * **Important** Must call ex.Shader.use() before setting a uniform!\r\n *\r\n * @param name\r\n * @param value\r\n */\r\n trySetUniformMatrix(name, value) {\r\n return this.trySetUniform('uniformMatrix4fv', name, false, value.data);\r\n }\r\n /**\r\n * Set any available uniform type in webgl\r\n *\r\n * For example setUniform('uniformMatrix2fv', 'u_my2x2_mat`, ...);\r\n */\r\n setUniform(uniformType, name, ...value) {\r\n if (!this._compiled) {\r\n throw Error(`Must compile shader before setting a uniform ${uniformType}:${name}`);\r\n }\r\n if (!this.isCurrentlyBound()) {\r\n throw Error('Currently accessed shader instance is not the current active shader in WebGL,' +\r\n ' must call `shader.use()` before setting uniforms');\r\n }\r\n const gl = this._gl;\r\n const location = gl.getUniformLocation(this.program, name);\r\n if (location) {\r\n const args = [location, ...value];\r\n this._gl[uniformType].apply(this._gl, args);\r\n }\r\n else {\r\n throw Error(`Uniform ${uniformType}:${name} doesn\\'t exist or is not used in the shader source code,` +\r\n ' unused uniforms are optimized away by most browsers');\r\n }\r\n }\r\n /**\r\n * Set any available uniform type in webgl. Will try to set the uniform, will return false if the uniform didn't exist,\r\n * true if it was set.\r\n *\r\n * WILL NOT THROW on error\r\n *\r\n * For example setUniform('uniformMatrix2fv', 'u_my2x2_mat`, ...);\r\n *\r\n */\r\n trySetUniform(uniformType, name, ...value) {\r\n if (!this._compiled) {\r\n this._logger.warn(`Must compile shader before setting a uniform ${uniformType}:${name}`);\r\n return false;\r\n }\r\n if (!this.isCurrentlyBound()) {\r\n this._logger.warn('Currently accessed shader instance is not the current active shader in WebGL,' +\r\n ' must call `shader.use()` before setting uniforms');\r\n return false;\r\n }\r\n const gl = this._gl;\r\n const location = gl.getUniformLocation(this.program, name);\r\n if (location) {\r\n const args = [location, ...value];\r\n this._gl[uniformType].apply(this._gl, args);\r\n }\r\n else {\r\n return false;\r\n }\r\n return true;\r\n }\r\n _createProgram(gl, vertexShader, fragmentShader) {\r\n const program = gl.createProgram();\r\n if (program === null) {\r\n throw Error('Could not create graphics shader program');\r\n }\r\n // attach the shaders.\r\n gl.attachShader(program, vertexShader);\r\n gl.attachShader(program, fragmentShader);\r\n // link the program.\r\n gl.linkProgram(program);\r\n const success = gl.getProgramParameter(program, gl.LINK_STATUS);\r\n if (!success) {\r\n throw Error(`Could not link the program: [${gl.getProgramInfoLog(program)}]`);\r\n }\r\n return program;\r\n }\r\n _compileShader(gl, source, type) {\r\n const typeName = gl.VERTEX_SHADER === type ? 'vertex' : 'fragment';\r\n const shader = gl.createShader(type);\r\n if (shader === null) {\r\n throw Error(`Could not build shader: [${source}]`);\r\n }\r\n gl.shaderSource(shader, source);\r\n gl.compileShader(shader);\r\n const success = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\r\n if (!success) {\r\n const errorInfo = gl.getShaderInfoLog(shader);\r\n throw Error(`Could not compile ${typeName} shader:\\n\\n${errorInfo}${this._processSourceForError(source, errorInfo)}`);\r\n }\r\n return shader;\r\n }\r\n _processSourceForError(source, errorInfo) {\r\n const lines = source.split('\\n');\r\n const errorLineStart = errorInfo.search(/\\d:\\d/);\r\n const errorLineEnd = errorInfo.indexOf(' ', errorLineStart);\r\n const [_, error2] = errorInfo.slice(errorLineStart, errorLineEnd).split(':').map(v => Number(v));\r\n for (let i = 0; i < lines.length; i++) {\r\n lines[i] = `${i + 1}: ${lines[i]}${error2 === (i + 1) ? ' <----- ERROR!' : ''}`;\r\n }\r\n return '\\n\\nSource:\\n' + lines.join('\\n');\r\n }\r\n}\r\nShader._ACTIVE_SHADER_INSTANCE = null;\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/vertex-buffer.ts\n/**\r\n * Helper around vertex buffer to simplify creating and uploading geometry\r\n *\r\n * Under the hood uses Float32Array\r\n */\r\nclass VertexBuffer {\r\n constructor(options) {\r\n /**\r\n * If the vertices never change switching 'static' can be more efficient on the gpu\r\n *\r\n * Default is 'dynamic'\r\n */\r\n this.type = 'dynamic';\r\n const { gl, size, type, data } = options;\r\n this._gl = gl;\r\n this.buffer = this._gl.createBuffer();\r\n if (!data && !size) {\r\n throw Error('Must either provide data or a size to the VertexBuffer');\r\n }\r\n if (!data) {\r\n this.bufferData = new Float32Array(size);\r\n }\r\n else {\r\n this.bufferData = data;\r\n }\r\n this.type = type !== null && type !== void 0 ? type : this.type;\r\n // Allocate buffer\r\n gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer);\r\n gl.bufferData(gl.ARRAY_BUFFER, this.bufferData, this.type === 'static' ? gl.STATIC_DRAW : gl.DYNAMIC_DRAW);\r\n }\r\n /**\r\n * Bind this vertex buffer\r\n */\r\n bind() {\r\n const gl = this._gl;\r\n gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer);\r\n }\r\n /**\r\n * Upload vertex buffer geometry to the GPU\r\n */\r\n upload(count) {\r\n const gl = this._gl;\r\n gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer);\r\n if (count) {\r\n gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.bufferData, 0, count);\r\n }\r\n else {\r\n // TODO always use bufferSubData? need to perf test it\r\n gl.bufferData(gl.ARRAY_BUFFER, this.bufferData, this.type === 'static' ? gl.STATIC_DRAW : gl.DYNAMIC_DRAW);\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/vertex-layout.ts\n\r\n\r\n/**\r\n * Helper around creating vertex attributes in a given [[VertexBuffer]], this is useful for describing\r\n * the memory layout for your vertices inside a particular buffer\r\n *\r\n * Note: This helper assumes interleaved attributes in one [[VertexBuffer]], not many.\r\n *\r\n * Working with `gl.vertexAttribPointer` can be tricky, and this attempts to double check you\r\n */\r\nclass VertexLayout {\r\n get vertexBuffer() {\r\n return this._vertexBuffer;\r\n }\r\n get attributes() {\r\n return this._attributes;\r\n }\r\n constructor(options) {\r\n this._logger = Logger.getInstance();\r\n this._layout = [];\r\n this._attributes = [];\r\n this._vertexTotalSizeBytes = 0;\r\n const { gl, shader, vertexBuffer, attributes } = options;\r\n this._gl = gl;\r\n this._vertexBuffer = vertexBuffer;\r\n this._attributes = attributes;\r\n this._shader = shader;\r\n if (shader) {\r\n this.initialize();\r\n }\r\n }\r\n /**\r\n * Total number of bytes that the vertex will take up\r\n */\r\n get totalVertexSizeBytes() {\r\n return this._vertexTotalSizeBytes;\r\n }\r\n set shader(shader) {\r\n if (shader && this._shader !== shader) {\r\n this._shader = shader;\r\n this.initialize();\r\n }\r\n }\r\n get shader() {\r\n return this._shader;\r\n }\r\n /**\r\n * Layouts need shader locations and must be bound to a shader\r\n */\r\n initialize() {\r\n if (!this._shader) {\r\n return;\r\n }\r\n if (!this._shader.compiled) {\r\n throw Error('Shader not compiled, shader must be compiled before defining a vertex layout');\r\n }\r\n this._layout.length = 0;\r\n const shaderAttributes = this._shader.attributes;\r\n for (const attribute of this._attributes) {\r\n const attrib = shaderAttributes[attribute[0]];\r\n if (!attrib) {\r\n throw Error(`The attribute named: ${attribute[0]} size ${attribute[1]}` +\r\n ` not found in the shader source code:\\n ${this._shader.vertexSource}`);\r\n }\r\n if (attrib.size !== attribute[1]) {\r\n throw Error(`VertexLayout size definition for attribute: [${attribute[0]}, ${attribute[1]}],`\r\n + ` doesnt match shader source size ${attrib.size}:\\n ${this._shader.vertexSource}`);\r\n }\r\n this._layout.push(attrib);\r\n }\r\n // calc size\r\n let componentsPerVertex = 0;\r\n for (const vertAttribute of this._layout) {\r\n const typeSize = getGlTypeSizeBytes(this._gl, vertAttribute.glType);\r\n this._vertexTotalSizeBytes += typeSize * vertAttribute.size;\r\n componentsPerVertex += vertAttribute.size;\r\n }\r\n if (this._vertexBuffer.bufferData.length % componentsPerVertex !== 0) {\r\n this._logger.warn(`The vertex component size (${componentsPerVertex}) does divide evenly into the specified vertex buffer`\r\n + ` (${this._vertexBuffer.bufferData.length})`);\r\n }\r\n }\r\n /**\r\n * Bind this layout with it's associated vertex buffer\r\n *\r\n * @param uploadBuffer Optionally indicate you wish to upload the buffer to the GPU associated with this layout\r\n */\r\n use(uploadBuffer = false, count) {\r\n if (!this._shader) {\r\n throw Error('No shader is associated with this vertex layout, a shader must be set');\r\n }\r\n const gl = this._gl;\r\n if (!this._shader.isCurrentlyBound()) {\r\n throw Error('Shader associated with this vertex layout is not active! Call shader.use() before layout.use()');\r\n }\r\n this._vertexBuffer.bind();\r\n if (uploadBuffer) {\r\n this._vertexBuffer.upload(count);\r\n }\r\n let offset = 0;\r\n // TODO switch to VAOs if the extension is\r\n for (const vert of this._layout) {\r\n gl.vertexAttribPointer(vert.location, vert.size, vert.glType, vert.normalized, this.totalVertexSizeBytes, offset);\r\n gl.enableVertexAttribArray(vert.location);\r\n offset += getGlTypeSizeBytes(gl, vert.glType) * vert.size;\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/GraphicsDiagnostics.ts\nclass GraphicsDiagnostics {\r\n static clear() {\r\n GraphicsDiagnostics.DrawCallCount = 0;\r\n GraphicsDiagnostics.DrawnImagesCount = 0;\r\n }\r\n}\r\nGraphicsDiagnostics.DrawCallCount = 0;\r\nGraphicsDiagnostics.DrawnImagesCount = 0;\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/line-renderer/line-renderer.ts\n\r\n\r\n\r\n\r\nclass LineRenderer {\r\n constructor() {\r\n this.type = 'ex.line';\r\n this.priority = 0;\r\n this._maxLines = 10922;\r\n this._vertexIndex = 0;\r\n this._lineCount = 0;\r\n }\r\n initialize(gl, context) {\r\n this._gl = gl;\r\n this._context = context;\r\n this._shader = new Shader({\r\n gl,\r\n vertexSource: line_vertex,\r\n fragmentSource: line_fragment\r\n });\r\n this._shader.compile();\r\n this._shader.use();\r\n this._shader.setUniformMatrix('u_matrix', this._context.ortho);\r\n this._vertexBuffer = new VertexBuffer({\r\n gl,\r\n size: 6 * 2 * this._maxLines,\r\n type: 'dynamic'\r\n });\r\n this._layout = new VertexLayout({\r\n gl,\r\n vertexBuffer: this._vertexBuffer,\r\n shader: this._shader,\r\n attributes: [\r\n ['a_position', 2],\r\n ['a_color', 4]\r\n ]\r\n });\r\n }\r\n draw(start, end, color) {\r\n // Force a render if the batch is full\r\n if (this._isFull()) {\r\n this.flush();\r\n }\r\n this._lineCount++;\r\n const transform = this._context.getTransform();\r\n const finalStart = transform.multiply(start);\r\n const finalEnd = transform.multiply(end);\r\n const vertexBuffer = this._vertexBuffer.bufferData;\r\n // Start\r\n vertexBuffer[this._vertexIndex++] = finalStart.x;\r\n vertexBuffer[this._vertexIndex++] = finalStart.y;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n // End\r\n vertexBuffer[this._vertexIndex++] = finalEnd.x;\r\n vertexBuffer[this._vertexIndex++] = finalEnd.y;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n }\r\n _isFull() {\r\n if (this._lineCount >= this._maxLines) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n hasPendingDraws() {\r\n return this._lineCount !== 0;\r\n }\r\n flush() {\r\n // nothing to draw early exit\r\n if (this._lineCount === 0) {\r\n return;\r\n }\r\n const gl = this._gl;\r\n this._shader.use();\r\n this._layout.use(true);\r\n this._shader.setUniformMatrix('u_matrix', this._context.ortho);\r\n gl.drawArrays(gl.LINES, 0, this._lineCount * 2); // 2 verts per line\r\n GraphicsDiagnostics.DrawnImagesCount += this._lineCount;\r\n GraphicsDiagnostics.DrawCallCount++;\r\n // reset\r\n this._vertexIndex = 0;\r\n this._lineCount = 0;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/point-renderer/point-vertex.glsl\n/* harmony default export */ const point_vertex = (\"#version 300 es\\r\\nin vec2 a_position;\\r\\nin vec4 a_color;\\r\\nin float a_size;\\r\\nout lowp vec4 v_color;\\r\\nuniform mat4 u_matrix;\\r\\n\\r\\nvoid main() {\\r\\n gl_Position = u_matrix * vec4(a_position, 0.0, 1.0);\\r\\n gl_PointSize = a_size * 2.0;\\r\\n v_color = a_color;\\r\\n}\");\n;// CONCATENATED MODULE: ./Graphics/Context/point-renderer/point-fragment.glsl\n/* harmony default export */ const point_fragment = (\"#version 300 es\\r\\n\\r\\nprecision mediump float;\\r\\nin lowp vec4 v_color;\\r\\n\\r\\nout vec4 fragColor;\\r\\n\\r\\nvoid main() {\\r\\n float r = 0.0, delta = 0.0, alpha = 1.0;\\r\\n vec2 cxy = 2.0 * gl_PointCoord - 1.0;\\r\\n r = dot(cxy, cxy);\\r\\n\\r\\n delta = fwidth(r);\\r\\n alpha = 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r);\\r\\n // \\\"premultiply\\\" the color by alpha\\r\\n vec4 color = v_color;\\r\\n color.a = color.a * alpha;\\r\\n color.rgb = color.rgb * color.a;\\r\\n fragColor = color;\\r\\n}\");\n;// CONCATENATED MODULE: ./Graphics/Context/point-renderer/point-renderer.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass PointRenderer {\r\n constructor() {\r\n this.type = 'ex.point';\r\n this.priority = 0;\r\n this._maxPoints = 10922;\r\n this._pointCount = 0;\r\n this._vertexIndex = 0;\r\n }\r\n initialize(gl, context) {\r\n this._gl = gl;\r\n this._context = context;\r\n this._shader = new Shader({\r\n gl,\r\n vertexSource: point_vertex,\r\n fragmentSource: point_fragment\r\n });\r\n this._shader.compile();\r\n this._shader.use();\r\n this._shader.setUniformMatrix('u_matrix', this._context.ortho);\r\n this._buffer = new VertexBuffer({\r\n gl,\r\n size: 7 * this._maxPoints,\r\n type: 'dynamic'\r\n });\r\n this._layout = new VertexLayout({\r\n gl,\r\n shader: this._shader,\r\n vertexBuffer: this._buffer,\r\n attributes: [\r\n ['a_position', 2],\r\n ['a_color', 4],\r\n ['a_size', 1]\r\n ]\r\n });\r\n }\r\n draw(point, color, size) {\r\n // Force a render if the batch is full\r\n if (this._isFull()) {\r\n this.flush();\r\n }\r\n this._pointCount++;\r\n const transform = this._context.getTransform();\r\n const opacity = this._context.opacity;\r\n const snapToPixel = this._context.snapToPixel;\r\n const finalPoint = transform.multiply(point);\r\n if (snapToPixel) {\r\n finalPoint.x = ~~(finalPoint.x + pixelSnapEpsilon);\r\n finalPoint.y = ~~(finalPoint.y + pixelSnapEpsilon);\r\n }\r\n const vertexBuffer = this._buffer.bufferData;\r\n vertexBuffer[this._vertexIndex++] = finalPoint.x;\r\n vertexBuffer[this._vertexIndex++] = finalPoint.y;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a * opacity;\r\n vertexBuffer[this._vertexIndex++] = size * Math.max(transform.getScaleX(), transform.getScaleY());\r\n }\r\n _isFull() {\r\n if (this._pointCount >= this._maxPoints) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n hasPendingDraws() {\r\n return this._pointCount !== 0;\r\n }\r\n flush() {\r\n // nothing to draw early exit\r\n if (this._pointCount === 0) {\r\n return;\r\n }\r\n const gl = this._gl;\r\n this._shader.use();\r\n this._layout.use(true);\r\n this._shader.setUniformMatrix('u_matrix', this._context.ortho);\r\n gl.drawArrays(gl.POINTS, 0, this._pointCount);\r\n GraphicsDiagnostics.DrawnImagesCount += this._pointCount;\r\n GraphicsDiagnostics.DrawCallCount++;\r\n this._pointCount = 0;\r\n this._vertexIndex = 0;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/screen-pass-painter/screen-vertex.glsl\n/* harmony default export */ const screen_vertex = (\"#version 300 es\\r\\nin vec2 a_position;\\r\\n\\r\\nin vec2 a_texcoord;\\r\\nout vec2 v_texcoord;\\r\\n\\r\\nvoid main() {\\r\\n gl_Position = vec4(a_position, 0.0, 1.0);\\r\\n\\r\\n // Pass the texcoord to the fragment shader.\\r\\n v_texcoord = a_texcoord;\\r\\n}\");\n;// CONCATENATED MODULE: ./Graphics/Context/screen-pass-painter/screen-fragment.glsl\n/* harmony default export */ const screen_fragment = (\"#version 300 es\\r\\nprecision mediump float;\\r\\n\\r\\n// Passed in from the vertex shader.\\r\\nin vec2 v_texcoord;\\r\\n\\r\\n// The texture.\\r\\nuniform sampler2D u_texture;\\r\\n\\r\\nout vec4 fragColor;\\r\\n\\r\\nvoid main() {\\r\\n fragColor = texture(u_texture, v_texcoord);\\r\\n}\");\n;// CONCATENATED MODULE: ./Graphics/Context/screen-pass-painter/screen-pass-painter.ts\n\r\n\r\n\r\n\r\n\r\n/**\r\n * This is responsible for painting the entire screen during the render passes\r\n */\r\nclass ScreenPassPainter {\r\n constructor(gl) {\r\n this._gl = gl;\r\n this._shader = new Shader({\r\n gl,\r\n vertexSource: screen_vertex,\r\n fragmentSource: screen_fragment\r\n });\r\n this._shader.compile();\r\n // Setup memory layout\r\n this._buffer = new VertexBuffer({\r\n gl,\r\n type: 'static',\r\n // clip space quad + uv since we don't need a camera\r\n data: new Float32Array([\r\n -1, -1, 0, 0,\r\n -1, 1, 0, 1,\r\n 1, -1, 1, 0,\r\n 1, -1, 1, 0,\r\n -1, 1, 0, 1,\r\n 1, 1, 1, 1\r\n ])\r\n });\r\n this._layout = new VertexLayout({\r\n gl,\r\n shader: this._shader,\r\n vertexBuffer: this._buffer,\r\n attributes: [\r\n ['a_position', 2],\r\n ['a_texcoord', 2]\r\n ]\r\n });\r\n this._buffer.upload();\r\n }\r\n renderWithPostProcessor(postprocessor) {\r\n const gl = this._gl;\r\n postprocessor.getShader().use();\r\n postprocessor.getLayout().use();\r\n gl.drawArrays(gl.TRIANGLES, 0, 6);\r\n }\r\n renderToScreen() {\r\n const gl = this._gl;\r\n this._shader.use();\r\n this._layout.use();\r\n gl.drawArrays(gl.TRIANGLES, 0, 6);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/quad-index-buffer.ts\n\r\n/**\r\n * Helper that defines and index buffer for quad geometry\r\n *\r\n * Index buffers allow you to save space in vertex buffers when you share vertices in geometry\r\n * it is almost always worth it in terms of performance to use an index buffer.\r\n */\r\nclass QuadIndexBuffer {\r\n /**\r\n * @param gl WebGL2RenderingContext this layout will be attached to, these cannot be reused across contexts.\r\n * @param numberOfQuads Specify the max number of quads you want to draw\r\n * @param useUint16 Optionally force a uint16 buffer\r\n */\r\n constructor(gl, numberOfQuads, useUint16) {\r\n this._logger = Logger.getInstance();\r\n this._gl = gl;\r\n this.buffer = gl.createBuffer();\r\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.buffer);\r\n const totalVertices = numberOfQuads * 6;\r\n if (!useUint16) {\r\n this.bufferData = new Uint32Array(totalVertices);\r\n }\r\n else {\r\n // fall back to using gl.UNSIGNED_SHORT or tell the user they are out of luck\r\n const maxUint16 = 65535;\r\n const maxUint16Index = Math.floor((maxUint16 - 1) / 4); // max quads\r\n this.bufferGlType = gl.UNSIGNED_SHORT;\r\n this.bufferData = new Uint16Array(totalVertices);\r\n // TODO Should we error if this happens?? maybe not might crash mid game\r\n if (numberOfQuads > maxUint16Index) {\r\n this._logger.warn(`Total quads exceeds hardware index buffer limit (uint16), max(${maxUint16Index}) requested quads(${numberOfQuads})`);\r\n }\r\n }\r\n let currentQuad = 0;\r\n for (let i = 0; i < totalVertices; i += 6) {\r\n // first triangle\r\n this.bufferData[i + 0] = currentQuad + 0;\r\n this.bufferData[i + 1] = currentQuad + 1;\r\n this.bufferData[i + 2] = currentQuad + 2;\r\n // second triangle\r\n this.bufferData[i + 3] = currentQuad + 2;\r\n this.bufferData[i + 4] = currentQuad + 1;\r\n this.bufferData[i + 5] = currentQuad + 3;\r\n currentQuad += 4;\r\n }\r\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.bufferData, gl.STATIC_DRAW);\r\n }\r\n get size() {\r\n return this.bufferData.length;\r\n }\r\n /**\r\n * Upload data to the GPU\r\n */\r\n upload() {\r\n const gl = this._gl;\r\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.buffer);\r\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.bufferData, gl.STATIC_DRAW);\r\n }\r\n /**\r\n * Bind this index buffer\r\n */\r\n bind() {\r\n const gl = this._gl;\r\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.buffer);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/image-renderer/image-renderer.frag.glsl\n/* harmony default export */ const image_renderer_frag = (\"#version 300 es\\r\\nprecision mediump float;\\r\\n\\r\\n// UV coord\\r\\nin vec2 v_texcoord;\\r\\n\\r\\n// Texture index\\r\\nin lowp float v_textureIndex;\\r\\n\\r\\n// Textures in the current draw\\r\\nuniform sampler2D u_textures[%%count%%];\\r\\n\\r\\n// Opacity\\r\\nin float v_opacity;\\r\\n\\r\\nin vec4 v_tint;\\r\\n\\r\\nout vec4 fragColor;\\r\\n\\r\\nvoid main() {\\r\\n // In order to support the most efficient sprite batching, we have multiple\\r\\n // textures loaded into the gpu (usually 8) this picker logic skips over textures\\r\\n // that do not apply to a particular sprite.\\r\\n\\r\\n vec4 color = vec4(1.0, 0, 0, 1.0);\\r\\n\\r\\n // GLSL is templated out to pick the right texture and set the vec4 color\\r\\n %%texture_picker%%\\r\\n\\r\\n color.rgb = color.rgb * v_opacity;\\r\\n color.a = color.a * v_opacity;\\r\\n fragColor = color * v_tint;\\r\\n}\");\n;// CONCATENATED MODULE: ./Graphics/Context/image-renderer/image-renderer.vert.glsl\n/* harmony default export */ const image_renderer_vert = (\"#version 300 es\\r\\nin vec2 a_position;\\r\\n\\r\\n// Opacity \\r\\nin float a_opacity;\\r\\nout float v_opacity;\\r\\n\\r\\n// UV coordinate\\r\\nin vec2 a_texcoord;\\r\\nout vec2 v_texcoord;\\r\\n\\r\\n// Texture number\\r\\nin lowp float a_textureIndex;\\r\\nout lowp float v_textureIndex;\\r\\n\\r\\nin vec4 a_tint;\\r\\nout vec4 v_tint;\\r\\n\\r\\nuniform mat4 u_matrix;\\r\\n\\r\\nvoid main() {\\r\\n // Set the vertex position using the ortho transform matrix\\r\\n gl_Position = u_matrix * vec4(a_position, 0.0, 1.0);\\r\\n\\r\\n // Pass through the Opacity to the fragment shader\\r\\n v_opacity = a_opacity;\\r\\n // Pass through the UV coord to the fragment shader\\r\\n v_texcoord = a_texcoord;\\r\\n // Pass through the texture number to the fragment shader\\r\\n v_textureIndex = a_textureIndex;\\r\\n // Pass through the tint\\r\\n v_tint = a_tint;\\r\\n}\");\n;// CONCATENATED MODULE: ./Graphics/Context/image-renderer/image-renderer.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass ImageRenderer {\r\n constructor() {\r\n this.type = 'ex.image';\r\n this.priority = 0;\r\n this._maxImages = 10922; // max(uint16) / 6 verts\r\n this._maxTextures = 0;\r\n // Per flush vars\r\n this._imageCount = 0;\r\n this._textures = [];\r\n this._vertexIndex = 0;\r\n }\r\n initialize(gl, context) {\r\n this._gl = gl;\r\n this._context = context;\r\n // Transform shader source\r\n // FIXME: PIXEL 6 complains `ERROR: Expression too complex.` if we use it's reported max texture units, 125 seems to work for now...\r\n this._maxTextures = Math.min(gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS), 125);\r\n const transformedFrag = this._transformFragmentSource(image_renderer_frag, this._maxTextures);\r\n // Compile shader\r\n this._shader = new Shader({\r\n gl,\r\n fragmentSource: transformedFrag,\r\n vertexSource: image_renderer_vert\r\n });\r\n this._shader.compile();\r\n // setup uniforms\r\n this._shader.use();\r\n this._shader.setUniformMatrix('u_matrix', context.ortho);\r\n // Initialize texture slots to [0, 1, 2, 3, 4, .... maxGPUTextures]\r\n this._shader.setUniformIntArray('u_textures', [...Array(this._maxTextures)].map((_, i) => i));\r\n // Setup memory layout\r\n this._buffer = new VertexBuffer({\r\n gl,\r\n size: 10 * 4 * this._maxImages,\r\n type: 'dynamic'\r\n });\r\n this._layout = new VertexLayout({\r\n gl,\r\n shader: this._shader,\r\n vertexBuffer: this._buffer,\r\n attributes: [\r\n ['a_position', 2],\r\n ['a_opacity', 1],\r\n ['a_texcoord', 2],\r\n ['a_textureIndex', 1],\r\n ['a_tint', 4]\r\n ]\r\n });\r\n // Setup index buffer\r\n this._quads = new QuadIndexBuffer(gl, this._maxImages, true);\r\n }\r\n _transformFragmentSource(source, maxTextures) {\r\n let newSource = source.replace('%%count%%', maxTextures.toString());\r\n let texturePickerBuilder = '';\r\n for (let i = 0; i < maxTextures; i++) {\r\n if (i === 0) {\r\n texturePickerBuilder += `if (v_textureIndex <= ${i}.5) {\\n`;\r\n }\r\n else {\r\n texturePickerBuilder += ` else if (v_textureIndex <= ${i}.5) {\\n`;\r\n }\r\n texturePickerBuilder += ` color = texture(u_textures[${i}], v_texcoord);\\n`;\r\n texturePickerBuilder += ` }\\n`;\r\n }\r\n newSource = newSource.replace('%%texture_picker%%', texturePickerBuilder);\r\n return newSource;\r\n }\r\n _addImageAsTexture(image) {\r\n const maybeFiltering = image.getAttribute('filtering');\r\n let filtering = null;\r\n if (maybeFiltering === ImageFiltering.Blended ||\r\n maybeFiltering === ImageFiltering.Pixel) {\r\n filtering = maybeFiltering;\r\n }\r\n const force = image.getAttribute('forceUpload') === 'true' ? true : false;\r\n const texture = this._context.textureLoader.load(image, filtering, force);\r\n // remove force attribute after upload\r\n image.removeAttribute('forceUpload');\r\n if (this._textures.indexOf(texture) === -1) {\r\n this._textures.push(texture);\r\n }\r\n }\r\n _bindTextures(gl) {\r\n // Bind textures in the correct order\r\n for (let i = 0; i < this._maxTextures; i++) {\r\n gl.activeTexture(gl.TEXTURE0 + i);\r\n gl.bindTexture(gl.TEXTURE_2D, this._textures[i] || this._textures[0]);\r\n }\r\n }\r\n _getTextureIdForImage(image) {\r\n if (image) {\r\n const maybeTexture = this._context.textureLoader.get(image);\r\n return this._textures.indexOf(maybeTexture);\r\n }\r\n return -1;\r\n }\r\n _isFull() {\r\n if (this._imageCount >= this._maxImages) {\r\n return true;\r\n }\r\n if (this._textures.length >= this._maxTextures) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n draw(image, sx, sy, swidth, sheight, dx, dy, dwidth, dheight) {\r\n var _a, _b, _c, _d;\r\n // Force a render if the batch is full\r\n if (this._isFull()) {\r\n this.flush();\r\n }\r\n this._imageCount++;\r\n // This creates and uploads the texture if not already done\r\n this._addImageAsTexture(image);\r\n let width = (image === null || image === void 0 ? void 0 : image.width) || swidth || 0;\r\n let height = (image === null || image === void 0 ? void 0 : image.height) || sheight || 0;\r\n let view = [0, 0, (_a = swidth !== null && swidth !== void 0 ? swidth : image === null || image === void 0 ? void 0 : image.width) !== null && _a !== void 0 ? _a : 0, (_b = sheight !== null && sheight !== void 0 ? sheight : image === null || image === void 0 ? void 0 : image.height) !== null && _b !== void 0 ? _b : 0];\r\n let dest = [sx !== null && sx !== void 0 ? sx : 1, sy !== null && sy !== void 0 ? sy : 1];\r\n // If destination is specified, update view and dest\r\n if (dx !== undefined && dy !== undefined && dwidth !== undefined && dheight !== undefined) {\r\n view = [sx !== null && sx !== void 0 ? sx : 1, sy !== null && sy !== void 0 ? sy : 1, (_c = swidth !== null && swidth !== void 0 ? swidth : image === null || image === void 0 ? void 0 : image.width) !== null && _c !== void 0 ? _c : 0, (_d = sheight !== null && sheight !== void 0 ? sheight : image === null || image === void 0 ? void 0 : image.height) !== null && _d !== void 0 ? _d : 0];\r\n dest = [dx, dy];\r\n width = dwidth;\r\n height = dheight;\r\n }\r\n sx = view[0];\r\n sy = view[1];\r\n const sw = view[2];\r\n const sh = view[3];\r\n // transform based on current context\r\n const transform = this._context.getTransform();\r\n const opacity = this._context.opacity;\r\n const snapToPixel = this._context.snapToPixel;\r\n let topLeft = vec(dest[0], dest[1]);\r\n let topRight = vec(dest[0] + width, dest[1]);\r\n let bottomLeft = vec(dest[0], dest[1] + height);\r\n let bottomRight = vec(dest[0] + width, dest[1] + height);\r\n topLeft = transform.multiply(topLeft);\r\n topRight = transform.multiply(topRight);\r\n bottomLeft = transform.multiply(bottomLeft);\r\n bottomRight = transform.multiply(bottomRight);\r\n if (snapToPixel) {\r\n topLeft.x = ~~(topLeft.x + pixelSnapEpsilon);\r\n topLeft.y = ~~(topLeft.y + pixelSnapEpsilon);\r\n topRight.x = ~~(topRight.x + pixelSnapEpsilon);\r\n topRight.y = ~~(topRight.y + pixelSnapEpsilon);\r\n bottomLeft.x = ~~(bottomLeft.x + pixelSnapEpsilon);\r\n bottomLeft.y = ~~(bottomLeft.y + pixelSnapEpsilon);\r\n bottomRight.x = ~~(bottomRight.x + pixelSnapEpsilon);\r\n bottomRight.y = ~~(bottomRight.y + pixelSnapEpsilon);\r\n }\r\n const tint = this._context.tint;\r\n const textureId = this._getTextureIdForImage(image);\r\n const imageWidth = image.width || width;\r\n const imageHeight = image.height || height;\r\n const uvx0 = (sx) / imageWidth;\r\n const uvy0 = (sy) / imageHeight;\r\n const uvx1 = (sx + sw - 0.01) / imageWidth;\r\n const uvy1 = (sy + sh - 0.01) / imageHeight;\r\n // update data\r\n const vertexBuffer = this._layout.vertexBuffer.bufferData;\r\n // (0, 0) - 0\r\n vertexBuffer[this._vertexIndex++] = topLeft.x;\r\n vertexBuffer[this._vertexIndex++] = topLeft.y;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = uvx0;\r\n vertexBuffer[this._vertexIndex++] = uvy0;\r\n vertexBuffer[this._vertexIndex++] = textureId;\r\n vertexBuffer[this._vertexIndex++] = tint.r / 255;\r\n vertexBuffer[this._vertexIndex++] = tint.g / 255;\r\n vertexBuffer[this._vertexIndex++] = tint.b / 255;\r\n vertexBuffer[this._vertexIndex++] = tint.a;\r\n // (0, 1) - 1\r\n vertexBuffer[this._vertexIndex++] = bottomLeft.x;\r\n vertexBuffer[this._vertexIndex++] = bottomLeft.y;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = uvx0;\r\n vertexBuffer[this._vertexIndex++] = uvy1;\r\n vertexBuffer[this._vertexIndex++] = textureId;\r\n vertexBuffer[this._vertexIndex++] = tint.r / 255;\r\n vertexBuffer[this._vertexIndex++] = tint.g / 255;\r\n vertexBuffer[this._vertexIndex++] = tint.b / 255;\r\n vertexBuffer[this._vertexIndex++] = tint.a;\r\n // (1, 0) - 2\r\n vertexBuffer[this._vertexIndex++] = topRight.x;\r\n vertexBuffer[this._vertexIndex++] = topRight.y;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = uvx1;\r\n vertexBuffer[this._vertexIndex++] = uvy0;\r\n vertexBuffer[this._vertexIndex++] = textureId;\r\n vertexBuffer[this._vertexIndex++] = tint.r / 255;\r\n vertexBuffer[this._vertexIndex++] = tint.g / 255;\r\n vertexBuffer[this._vertexIndex++] = tint.b / 255;\r\n vertexBuffer[this._vertexIndex++] = tint.a;\r\n // (1, 1) - 3\r\n vertexBuffer[this._vertexIndex++] = bottomRight.x;\r\n vertexBuffer[this._vertexIndex++] = bottomRight.y;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = uvx1;\r\n vertexBuffer[this._vertexIndex++] = uvy1;\r\n vertexBuffer[this._vertexIndex++] = textureId;\r\n vertexBuffer[this._vertexIndex++] = tint.r / 255;\r\n vertexBuffer[this._vertexIndex++] = tint.g / 255;\r\n vertexBuffer[this._vertexIndex++] = tint.b / 255;\r\n vertexBuffer[this._vertexIndex++] = tint.a;\r\n }\r\n hasPendingDraws() {\r\n return this._imageCount !== 0;\r\n }\r\n flush() {\r\n // nothing to draw early exit\r\n if (this._imageCount === 0) {\r\n return;\r\n }\r\n const gl = this._gl;\r\n // Bind the shader\r\n this._shader.use();\r\n // Bind the memory layout and upload data\r\n this._layout.use(true, 4 * 10 * this._imageCount);\r\n // Update ortho matrix uniform\r\n this._shader.setUniformMatrix('u_matrix', this._context.ortho);\r\n // Bind textures to\r\n this._bindTextures(gl);\r\n // Bind index buffer\r\n this._quads.bind();\r\n // Draw all the quads\r\n gl.drawElements(gl.TRIANGLES, this._imageCount * 6, this._quads.bufferGlType, 0);\r\n GraphicsDiagnostics.DrawnImagesCount += this._imageCount;\r\n GraphicsDiagnostics.DrawCallCount++;\r\n // Reset\r\n this._imageCount = 0;\r\n this._vertexIndex = 0;\r\n this._textures.length = 0;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/rectangle-renderer/rectangle-renderer.frag.glsl\n/* harmony default export */ const rectangle_renderer_frag = (\"#version 300 es\\r\\n\\r\\nprecision mediump float;\\r\\n\\r\\n// UV coord\\r\\nin vec2 v_uv;\\r\\n\\r\\nin vec2 v_size; // in pixels\\r\\n\\r\\n// Color coord to blend with image\\r\\nin lowp vec4 v_color;\\r\\n\\r\\n// Stroke color if used\\r\\nin lowp vec4 v_strokeColor;\\r\\n\\r\\n// Stroke thickness if used\\r\\nin lowp float v_strokeThickness; // in pixels\\r\\n\\r\\n// Opacity\\r\\nin float v_opacity;\\r\\n\\r\\nout vec4 fragColor;\\r\\n\\r\\nvoid main() {\\r\\n // modified from https://stackoverflow.com/questions/59197671/glsl-rounded-rectangle-with-variable-border\\r\\n vec2 uv = v_uv;\\r\\n vec2 fragCoord = uv * v_size;\\r\\n float maxX = v_size.x - v_strokeThickness;\\r\\n float minX = v_strokeThickness;\\r\\n float maxY = v_size.y - v_strokeThickness;\\r\\n float minY = v_strokeThickness;\\r\\n\\r\\n if (fragCoord.x < maxX && fragCoord.x > minX &&\\r\\n fragCoord.y < maxY && fragCoord.y > minY) {\\r\\n fragColor = v_color;\\r\\n } else {\\r\\n fragColor = v_strokeColor;\\r\\n }\\r\\n fragColor.a *= v_opacity;\\r\\n fragColor.rgb *= fragColor.a;\\r\\n\\r\\n // vec2 v2CenteredPos = abs(fragCoord - v_size.xy / 2.0);\\r\\n // vec2 v2HalfShapeSizePx = v_size.xy/2.0 - v_strokeThickness/2.0;\\r\\n\\r\\n // float fHalfBorderDist = 0.0;\\r\\n // float fHalfBorderThickness = 0.0;\\r\\n\\r\\n // if (fragCoord.x > max(v_radius, v_strokeThickness) && \\r\\n // fragCoord.x < v_size.x - max(v_radius, v_strokeThickness))\\r\\n // {\\r\\n // fHalfBorderDist = v2CenteredPos.y - v2HalfShapeSizePx.y;\\r\\n // fHalfBorderThickness = v_strokeThickness / 2.0;\\r\\n // }\\r\\n // else if (fragCoord.y > max(v_radius, v_strokeThickness) && \\r\\n // fragCoord.y < v_size.y - max(v_radius, v_strokeThickness))\\r\\n // {\\r\\n // fHalfBorderDist = v2CenteredPos.x - v2HalfShapeSizePx.x;\\r\\n // fHalfBorderThickness = v_strokeThickness / 2.0;\\r\\n // }\\r\\n // else\\r\\n // {\\r\\n // vec2 edgeVec = max(vec2(0.0), v_radius - vec2(\\r\\n // uv.x > 0.5 ? v_size.x - fragCoord.x : fragCoord.x,\\r\\n // uv.y > 0.5 ? v_size.y - fragCoord.y : fragCoord.y));\\r\\n \\r\\n // float ellipse_ab = v_radius-v_strokeThickness;\\r\\n // vec2 ellipse_isect = (v_strokeThickness > v_radius || v_strokeThickness > v_radius) ? vec2(0.0) :\\r\\n // edgeVec.xy * ellipse_ab*ellipse_ab / length(ellipse_ab*edgeVec.yx); \\r\\n \\r\\n // fHalfBorderThickness = (v_radius - length(ellipse_isect)) / 2.0;\\r\\n // fHalfBorderDist = length(edgeVec) - (v_radius - fHalfBorderThickness);\\r\\n // }\\r\\n\\r\\n // vec4 v4FromColor = v_strokeColor;\\r\\n // v4FromColor.rgb *= v4FromColor.a;\\r\\n // vec4 v4ToColor = vec4(0.0); // background color is transparent\\r\\n // if (fHalfBorderDist < 0.0) {\\r\\n // v4ToColor = v_color;\\r\\n // v4ToColor.rgb *= v4ToColor.a;\\r\\n // }\\r\\n\\r\\n // float mixPct = abs(fHalfBorderDist) - fHalfBorderThickness;\\r\\n\\r\\n // vec4 finalColor = mix(v4FromColor, v4ToColor, mixPct);\\r\\n // gl_FragColor = finalColor;\\r\\n}\");\n;// CONCATENATED MODULE: ./Graphics/Context/rectangle-renderer/rectangle-renderer.vert.glsl\n/* harmony default export */ const rectangle_renderer_vert = (\"#version 300 es\\r\\nin vec2 a_position;\\r\\n\\r\\n// UV coordinate\\r\\nin vec2 a_uv;\\r\\nout vec2 v_uv;\\r\\n\\r\\nin vec2 a_size;\\r\\nout vec2 v_size;\\r\\n\\r\\n// Opacity \\r\\nin float a_opacity;\\r\\nout float v_opacity;\\r\\n\\r\\nin vec4 a_color;\\r\\nout vec4 v_color;\\r\\n\\r\\nin vec4 a_strokeColor;\\r\\nout vec4 v_strokeColor;\\r\\n\\r\\nin float a_strokeThickness;\\r\\nout float v_strokeThickness;\\r\\n\\r\\nuniform mat4 u_matrix;\\r\\n\\r\\n\\r\\nvoid main() {\\r\\n // Set the vertex position using the ortho transform matrix\\r\\n gl_Position = u_matrix * vec4(a_position, 0.0, 1.0);\\r\\n\\r\\n // Pass through UV coords\\r\\n v_uv = a_uv;\\r\\n // Pass through size\\r\\n v_size = a_size;\\r\\n // Pass through the Opacity to the fragment shader\\r\\n v_opacity = a_opacity;\\r\\n // Pass through the color to the fragment shader\\r\\n v_color = a_color;\\r\\n // Pass through the stroke color to the fragment shader\\r\\n v_strokeColor = a_strokeColor;\\r\\n // Pass through the stroke thickenss to the fragment shader\\r\\n v_strokeThickness = a_strokeThickness;\\r\\n}\");\n;// CONCATENATED MODULE: ./Graphics/Context/rectangle-renderer/rectangle-renderer.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass RectangleRenderer {\r\n constructor() {\r\n this.type = 'ex.rectangle';\r\n this.priority = 0;\r\n this._maxRectangles = 10922; // max(uint16) / 6 verts\r\n this._rectangleCount = 0;\r\n this._vertexIndex = 0;\r\n }\r\n initialize(gl, context) {\r\n this._gl = gl;\r\n this._context = context;\r\n // https://stackoverflow.com/questions/59197671/glsl-rounded-rectangle-with-variable-border\r\n this._shader = new Shader({\r\n gl,\r\n fragmentSource: rectangle_renderer_frag,\r\n vertexSource: rectangle_renderer_vert\r\n });\r\n this._shader.compile();\r\n // setup uniforms\r\n this._shader.use();\r\n this._shader.setUniformMatrix('u_matrix', context.ortho);\r\n this._buffer = new VertexBuffer({\r\n gl,\r\n size: 16 * 4 * this._maxRectangles,\r\n type: 'dynamic'\r\n });\r\n this._layout = new VertexLayout({\r\n gl,\r\n shader: this._shader,\r\n vertexBuffer: this._buffer,\r\n attributes: [\r\n ['a_position', 2],\r\n ['a_uv', 2],\r\n ['a_size', 2],\r\n ['a_opacity', 1],\r\n ['a_color', 4],\r\n ['a_strokeColor', 4],\r\n ['a_strokeThickness', 1]\r\n ]\r\n });\r\n this._quads = new QuadIndexBuffer(gl, this._maxRectangles, true);\r\n }\r\n _isFull() {\r\n if (this._rectangleCount >= this._maxRectangles) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n draw(...args) {\r\n if (args[0] instanceof Vector && args[1] instanceof Vector) {\r\n this.drawLine.apply(this, args);\r\n }\r\n else {\r\n this.drawRectangle.apply(this, args);\r\n }\r\n }\r\n drawLine(start, end, color, thickness = 1) {\r\n if (this._isFull()) {\r\n this.flush();\r\n }\r\n this._rectangleCount++;\r\n // transform based on current context\r\n const transform = this._context.getTransform();\r\n const opacity = this._context.opacity;\r\n const snapToPixel = this._context.snapToPixel;\r\n const dir = end.sub(start);\r\n const length = dir.size;\r\n const normal = dir.normalize().perpendicular();\r\n const halfThick = thickness / 2;\r\n /**\r\n * +---------------------^----------------------+\r\n * | | (normal) |\r\n * (startx, starty)------------------>(endx, endy)\r\n * | |\r\n * + -------------------------------------------+\r\n */\r\n const startTop = transform.multiply(normal.scale(halfThick).add(start));\r\n const startBottom = transform.multiply(normal.scale(-halfThick).add(start));\r\n const endTop = transform.multiply(normal.scale(halfThick).add(end));\r\n const endBottom = transform.multiply(normal.scale(-halfThick).add(end));\r\n if (snapToPixel) {\r\n startTop.x = ~~(startTop.x + pixelSnapEpsilon);\r\n startTop.y = ~~(startTop.y + pixelSnapEpsilon);\r\n endTop.x = ~~(endTop.x + pixelSnapEpsilon);\r\n endTop.y = ~~(endTop.y + pixelSnapEpsilon);\r\n startBottom.x = ~~(startBottom.x + pixelSnapEpsilon);\r\n startBottom.y = ~~(startBottom.y + pixelSnapEpsilon);\r\n endBottom.x = ~~(endBottom.x + pixelSnapEpsilon);\r\n endBottom.y = ~~(endBottom.y + pixelSnapEpsilon);\r\n }\r\n // TODO uv could be static vertex buffer\r\n const uvx0 = 0;\r\n const uvy0 = 0;\r\n const uvx1 = 1;\r\n const uvy1 = 1;\r\n const stroke = Color.Transparent;\r\n const strokeThickness = 0;\r\n const width = 1;\r\n // update data\r\n const vertexBuffer = this._layout.vertexBuffer.bufferData;\r\n // (0, 0) - 0\r\n vertexBuffer[this._vertexIndex++] = startTop.x;\r\n vertexBuffer[this._vertexIndex++] = startTop.y;\r\n vertexBuffer[this._vertexIndex++] = uvx0;\r\n vertexBuffer[this._vertexIndex++] = uvy0;\r\n vertexBuffer[this._vertexIndex++] = length;\r\n vertexBuffer[this._vertexIndex++] = thickness;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n vertexBuffer[this._vertexIndex++] = stroke.r / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.g / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.b / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.a;\r\n vertexBuffer[this._vertexIndex++] = strokeThickness / width;\r\n // (0, 1) - 1\r\n vertexBuffer[this._vertexIndex++] = startBottom.x;\r\n vertexBuffer[this._vertexIndex++] = startBottom.y;\r\n vertexBuffer[this._vertexIndex++] = uvx0;\r\n vertexBuffer[this._vertexIndex++] = uvy1;\r\n vertexBuffer[this._vertexIndex++] = length;\r\n vertexBuffer[this._vertexIndex++] = thickness;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n vertexBuffer[this._vertexIndex++] = stroke.r / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.g / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.b / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.a;\r\n vertexBuffer[this._vertexIndex++] = strokeThickness / width;\r\n // (1, 0) - 2\r\n vertexBuffer[this._vertexIndex++] = endTop.x;\r\n vertexBuffer[this._vertexIndex++] = endTop.y;\r\n vertexBuffer[this._vertexIndex++] = uvx1;\r\n vertexBuffer[this._vertexIndex++] = uvy0;\r\n vertexBuffer[this._vertexIndex++] = length;\r\n vertexBuffer[this._vertexIndex++] = thickness;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n vertexBuffer[this._vertexIndex++] = stroke.r / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.g / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.b / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.a;\r\n vertexBuffer[this._vertexIndex++] = strokeThickness / width;\r\n // (1, 1) - 3\r\n vertexBuffer[this._vertexIndex++] = endBottom.x;\r\n vertexBuffer[this._vertexIndex++] = endBottom.y;\r\n vertexBuffer[this._vertexIndex++] = uvx1;\r\n vertexBuffer[this._vertexIndex++] = uvy1;\r\n vertexBuffer[this._vertexIndex++] = length;\r\n vertexBuffer[this._vertexIndex++] = thickness;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n vertexBuffer[this._vertexIndex++] = stroke.r / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.g / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.b / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.a;\r\n vertexBuffer[this._vertexIndex++] = strokeThickness / width;\r\n }\r\n drawRectangle(pos, width, height, color, stroke = Color.Transparent, strokeThickness = 0) {\r\n if (this._isFull()) {\r\n this.flush();\r\n }\r\n this._rectangleCount++;\r\n // transform based on current context\r\n const transform = this._context.getTransform();\r\n const opacity = this._context.opacity;\r\n const snapToPixel = this._context.snapToPixel;\r\n const topLeft = transform.multiply(pos.add(vec(0, 0)));\r\n const topRight = transform.multiply(pos.add(vec(width, 0)));\r\n const bottomRight = transform.multiply(pos.add(vec(width, height)));\r\n const bottomLeft = transform.multiply(pos.add(vec(0, height)));\r\n if (snapToPixel) {\r\n topLeft.x = ~~(topLeft.x + pixelSnapEpsilon);\r\n topLeft.y = ~~(topLeft.y + pixelSnapEpsilon);\r\n topRight.x = ~~(topRight.x + pixelSnapEpsilon);\r\n topRight.y = ~~(topRight.y + pixelSnapEpsilon);\r\n bottomLeft.x = ~~(bottomLeft.x + pixelSnapEpsilon);\r\n bottomLeft.y = ~~(bottomLeft.y + pixelSnapEpsilon);\r\n bottomRight.x = ~~(bottomRight.x + pixelSnapEpsilon);\r\n bottomRight.y = ~~(bottomRight.y + pixelSnapEpsilon);\r\n }\r\n // TODO uv could be static vertex buffer\r\n const uvx0 = 0;\r\n const uvy0 = 0;\r\n const uvx1 = 1;\r\n const uvy1 = 1;\r\n // update data\r\n const vertexBuffer = this._layout.vertexBuffer.bufferData;\r\n // (0, 0) - 0\r\n vertexBuffer[this._vertexIndex++] = topLeft.x;\r\n vertexBuffer[this._vertexIndex++] = topLeft.y;\r\n vertexBuffer[this._vertexIndex++] = uvx0;\r\n vertexBuffer[this._vertexIndex++] = uvy0;\r\n vertexBuffer[this._vertexIndex++] = width;\r\n vertexBuffer[this._vertexIndex++] = height;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n vertexBuffer[this._vertexIndex++] = stroke.r / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.g / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.b / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.a;\r\n vertexBuffer[this._vertexIndex++] = strokeThickness;\r\n // (0, 1) - 1\r\n vertexBuffer[this._vertexIndex++] = bottomLeft.x;\r\n vertexBuffer[this._vertexIndex++] = bottomLeft.y;\r\n vertexBuffer[this._vertexIndex++] = uvx0;\r\n vertexBuffer[this._vertexIndex++] = uvy1;\r\n vertexBuffer[this._vertexIndex++] = width;\r\n vertexBuffer[this._vertexIndex++] = height;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n vertexBuffer[this._vertexIndex++] = stroke.r / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.g / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.b / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.a;\r\n vertexBuffer[this._vertexIndex++] = strokeThickness;\r\n // (1, 0) - 2\r\n vertexBuffer[this._vertexIndex++] = topRight.x;\r\n vertexBuffer[this._vertexIndex++] = topRight.y;\r\n vertexBuffer[this._vertexIndex++] = uvx1;\r\n vertexBuffer[this._vertexIndex++] = uvy0;\r\n vertexBuffer[this._vertexIndex++] = width;\r\n vertexBuffer[this._vertexIndex++] = height;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n vertexBuffer[this._vertexIndex++] = stroke.r / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.g / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.b / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.a;\r\n vertexBuffer[this._vertexIndex++] = strokeThickness;\r\n // (1, 1) - 3\r\n vertexBuffer[this._vertexIndex++] = bottomRight.x;\r\n vertexBuffer[this._vertexIndex++] = bottomRight.y;\r\n vertexBuffer[this._vertexIndex++] = uvx1;\r\n vertexBuffer[this._vertexIndex++] = uvy1;\r\n vertexBuffer[this._vertexIndex++] = width;\r\n vertexBuffer[this._vertexIndex++] = height;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n vertexBuffer[this._vertexIndex++] = stroke.r / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.g / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.b / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.a;\r\n vertexBuffer[this._vertexIndex++] = strokeThickness;\r\n }\r\n hasPendingDraws() {\r\n return this._rectangleCount !== 0;\r\n }\r\n flush() {\r\n // nothing to draw early exit\r\n if (this._rectangleCount === 0) {\r\n return;\r\n }\r\n const gl = this._gl;\r\n // Bind the shader\r\n this._shader.use();\r\n // Bind the memory layout and upload data\r\n this._layout.use(true);\r\n // Update ortho matrix uniform\r\n this._shader.setUniformMatrix('u_matrix', this._context.ortho);\r\n // Bind index buffer\r\n this._quads.bind();\r\n // Draw all the quads\r\n gl.drawElements(gl.TRIANGLES, this._rectangleCount * 6, this._quads.bufferGlType, 0);\r\n GraphicsDiagnostics.DrawnImagesCount += this._rectangleCount;\r\n GraphicsDiagnostics.DrawCallCount++;\r\n // Reset\r\n this._rectangleCount = 0;\r\n this._vertexIndex = 0;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/circle-renderer/circle-renderer.frag.glsl\n/* harmony default export */ const circle_renderer_frag = (\"#version 300 es\\r\\nprecision highp float;\\r\\n\\r\\n// UV coord\\r\\nin vec2 v_uv;\\r\\n\\r\\n// Color coord to blend with image\\r\\nin lowp vec4 v_color;\\r\\n\\r\\n// Stroke color if used\\r\\nin lowp vec4 v_strokeColor;\\r\\n\\r\\n// Stroke thickness if used\\r\\nin lowp float v_strokeThickness;\\r\\n\\r\\n// Opacity\\r\\nin float v_opacity;\\r\\n\\r\\nout vec4 fragColor;\\r\\n\\r\\nvoid main() {\\r\\n // make (0, 0) the center the uv \\r\\n vec2 uv = v_uv * 2.0 - 1.0;\\r\\n\\r\\n vec4 color = v_color;\\r\\n vec4 strokeColor = v_strokeColor;\\r\\n\\r\\n // circle border is at radius 1.0 \\r\\n // dist is > 0 when inside the circle \\r\\n float d = length(uv);\\r\\n float dist = 1.0 - length(uv);\\r\\n\\r\\n // Fade based on fwidth\\r\\n float fade = fwidth(dot(uv, uv));\\r\\n\\r\\n // if dist is greater than 0 step to 1;\\r\\n // when we cross this 0 threshold add a smooth fade\\r\\n float fill = smoothstep(-fade/2.0, fade/2.0, dist);\\r\\n\\r\\n // if dist is greater than the stroke thickness step to 1\\r\\n float stroke = 1.0 - smoothstep(v_strokeThickness, v_strokeThickness + fade, dist);\\r\\n\\r\\n strokeColor.a *= fill * stroke;\\r\\n strokeColor.rgb *= strokeColor.a;\\r\\n\\r\\n color.a *= fill * (1.0 - stroke);\\r\\n color.rgb *= color.a;\\r\\n\\r\\n vec4 finalColor = mix(vec4(0.0), (color + strokeColor), fill);\\r\\n finalColor.rgb = finalColor.rgb * v_opacity;\\r\\n finalColor.a = finalColor.a * v_opacity;\\r\\n fragColor = finalColor;\\r\\n}\");\n;// CONCATENATED MODULE: ./Graphics/Context/circle-renderer/circle-renderer.vert.glsl\n/* harmony default export */ const circle_renderer_vert = (\"#version 300 es\\r\\nin vec2 a_position;\\r\\n\\r\\n// UV coordinate\\r\\nin vec2 a_uv;\\r\\nout vec2 v_uv;\\r\\n\\r\\n// Opacity \\r\\nin float a_opacity;\\r\\nout float v_opacity;\\r\\n\\r\\nin vec4 a_color;\\r\\nout vec4 v_color;\\r\\n\\r\\nin vec4 a_strokeColor;\\r\\nout vec4 v_strokeColor;\\r\\n\\r\\nin float a_strokeThickness;\\r\\nout float v_strokeThickness;\\r\\n\\r\\nuniform mat4 u_matrix;\\r\\n\\r\\n\\r\\nvoid main() {\\r\\n // Set the vertex position using the ortho transform matrix\\r\\n gl_Position = u_matrix * vec4(a_position, 0.0, 1.0);\\r\\n\\r\\n // Pass through UV coords\\r\\n v_uv = a_uv;\\r\\n // Pass through the Opacity to the fragment shader\\r\\n v_opacity = a_opacity;\\r\\n // Pass through the color to the fragment shader\\r\\n v_color = a_color;\\r\\n // Pass through the stroke color to the fragment shader\\r\\n v_strokeColor = a_strokeColor;\\r\\n // Pass through the stroke thickenss to the fragment shader\\r\\n v_strokeThickness = a_strokeThickness;\\r\\n}\");\n;// CONCATENATED MODULE: ./Graphics/Context/circle-renderer/circle-renderer.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass CircleRenderer {\r\n constructor() {\r\n this.type = 'ex.circle';\r\n this.priority = 0;\r\n this._maxCircles = 10922; // max(uint16) / 6 verts\r\n this._circleCount = 0;\r\n this._vertexIndex = 0;\r\n }\r\n initialize(gl, context) {\r\n this._gl = gl;\r\n this._context = context;\r\n this._shader = new Shader({\r\n gl,\r\n fragmentSource: circle_renderer_frag,\r\n vertexSource: circle_renderer_vert\r\n });\r\n this._shader.compile();\r\n // setup uniforms\r\n this._shader.use();\r\n this._shader.setUniformMatrix('u_matrix', context.ortho);\r\n this._buffer = new VertexBuffer({\r\n gl,\r\n size: 14 * 4 * this._maxCircles,\r\n type: 'dynamic'\r\n });\r\n this._layout = new VertexLayout({\r\n gl,\r\n shader: this._shader,\r\n vertexBuffer: this._buffer,\r\n attributes: [\r\n ['a_position', 2],\r\n ['a_uv', 2],\r\n ['a_opacity', 1],\r\n ['a_color', 4],\r\n ['a_strokeColor', 4],\r\n ['a_strokeThickness', 1]\r\n ]\r\n });\r\n this._quads = new QuadIndexBuffer(gl, this._maxCircles, true);\r\n }\r\n _isFull() {\r\n if (this._circleCount >= this._maxCircles) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n draw(pos, radius, color, stroke = Color.Transparent, strokeThickness = 0) {\r\n if (this._isFull()) {\r\n this.flush();\r\n }\r\n this._circleCount++;\r\n // transform based on current context\r\n const transform = this._context.getTransform();\r\n const opacity = this._context.opacity;\r\n const snapToPixel = this._context.snapToPixel;\r\n const topLeft = transform.multiply(pos.add(vec(-radius, -radius)));\r\n const topRight = transform.multiply(pos.add(vec(radius, -radius)));\r\n const bottomRight = transform.multiply(pos.add(vec(radius, radius)));\r\n const bottomLeft = transform.multiply(pos.add(vec(-radius, radius)));\r\n if (snapToPixel) {\r\n topLeft.x = ~~(topLeft.x + pixelSnapEpsilon);\r\n topLeft.y = ~~(topLeft.y + pixelSnapEpsilon);\r\n topRight.x = ~~(topRight.x + pixelSnapEpsilon);\r\n topRight.y = ~~(topRight.y + pixelSnapEpsilon);\r\n bottomLeft.x = ~~(bottomLeft.x + pixelSnapEpsilon);\r\n bottomLeft.y = ~~(bottomLeft.y + pixelSnapEpsilon);\r\n bottomRight.x = ~~(bottomRight.x + pixelSnapEpsilon);\r\n bottomRight.y = ~~(bottomRight.y + pixelSnapEpsilon);\r\n }\r\n // TODO UV could be static vertex buffer\r\n const uvx0 = 0;\r\n const uvy0 = 0;\r\n const uvx1 = 1;\r\n const uvy1 = 1;\r\n // update data\r\n const vertexBuffer = this._layout.vertexBuffer.bufferData;\r\n // (0, 0) - 0\r\n vertexBuffer[this._vertexIndex++] = topLeft.x;\r\n vertexBuffer[this._vertexIndex++] = topLeft.y;\r\n vertexBuffer[this._vertexIndex++] = uvx0;\r\n vertexBuffer[this._vertexIndex++] = uvy0;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n vertexBuffer[this._vertexIndex++] = stroke.r / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.g / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.b / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.a;\r\n vertexBuffer[this._vertexIndex++] = strokeThickness / radius;\r\n // (0, 1) - 1\r\n vertexBuffer[this._vertexIndex++] = bottomLeft.x;\r\n vertexBuffer[this._vertexIndex++] = bottomLeft.y;\r\n vertexBuffer[this._vertexIndex++] = uvx0;\r\n vertexBuffer[this._vertexIndex++] = uvy1;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n vertexBuffer[this._vertexIndex++] = stroke.r / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.g / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.b / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.a;\r\n vertexBuffer[this._vertexIndex++] = strokeThickness / radius;\r\n // (1, 0) - 2\r\n vertexBuffer[this._vertexIndex++] = topRight.x;\r\n vertexBuffer[this._vertexIndex++] = topRight.y;\r\n vertexBuffer[this._vertexIndex++] = uvx1;\r\n vertexBuffer[this._vertexIndex++] = uvy0;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n vertexBuffer[this._vertexIndex++] = stroke.r / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.g / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.b / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.a;\r\n vertexBuffer[this._vertexIndex++] = strokeThickness / radius;\r\n // (1, 1) - 3\r\n vertexBuffer[this._vertexIndex++] = bottomRight.x;\r\n vertexBuffer[this._vertexIndex++] = bottomRight.y;\r\n vertexBuffer[this._vertexIndex++] = uvx1;\r\n vertexBuffer[this._vertexIndex++] = uvy1;\r\n vertexBuffer[this._vertexIndex++] = opacity;\r\n vertexBuffer[this._vertexIndex++] = color.r / 255;\r\n vertexBuffer[this._vertexIndex++] = color.g / 255;\r\n vertexBuffer[this._vertexIndex++] = color.b / 255;\r\n vertexBuffer[this._vertexIndex++] = color.a;\r\n vertexBuffer[this._vertexIndex++] = stroke.r / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.g / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.b / 255;\r\n vertexBuffer[this._vertexIndex++] = stroke.a;\r\n vertexBuffer[this._vertexIndex++] = strokeThickness / radius;\r\n }\r\n hasPendingDraws() {\r\n return this._circleCount !== 0;\r\n }\r\n flush() {\r\n // nothing to draw early exit\r\n if (this._circleCount === 0) {\r\n return;\r\n }\r\n const gl = this._gl;\r\n // Bind the shader\r\n this._shader.use();\r\n // Bind the memory layout and upload data\r\n this._layout.use(true);\r\n // Update ortho matrix uniform\r\n this._shader.setUniformMatrix('u_matrix', this._context.ortho);\r\n // Bind index buffer\r\n this._quads.bind();\r\n // Draw all the quads\r\n gl.drawElements(gl.TRIANGLES, this._circleCount * 6, this._quads.bufferGlType, 0);\r\n GraphicsDiagnostics.DrawnImagesCount += this._circleCount;\r\n GraphicsDiagnostics.DrawCallCount++;\r\n // Reset\r\n this._circleCount = 0;\r\n this._vertexIndex = 0;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Util/Pool.ts\n\r\nclass Pool {\r\n constructor(builder, recycler, maxObjects = 100) {\r\n this.builder = builder;\r\n this.recycler = recycler;\r\n this.maxObjects = maxObjects;\r\n this.totalAllocations = 0;\r\n this.index = 0;\r\n this.objects = [];\r\n this.disableWarnings = false;\r\n this._logger = Logger.getInstance();\r\n }\r\n preallocate() {\r\n for (let i = 0; i < this.maxObjects; i++) {\r\n this.objects[i] = this.builder();\r\n }\r\n }\r\n /**\r\n * Use many instances out of the in the context and return all to the pool.\r\n *\r\n * By returning values out of the context they will be un-hooked from the pool and are free to be passed to consumers\r\n * @param context\r\n */\r\n using(context) {\r\n const result = context(this);\r\n if (result) {\r\n return this.done(...result);\r\n }\r\n return this.done();\r\n }\r\n /**\r\n * Use a single instance out of th pool and immediately return it to the pool\r\n * @param context\r\n */\r\n borrow(context) {\r\n const object = this.get();\r\n context(object);\r\n this.index--;\r\n }\r\n /**\r\n * Retrieve a value from the pool, will allocate a new instance if necessary or recycle from the pool\r\n * @param args\r\n */\r\n get(...args) {\r\n if (this.index === this.maxObjects) {\r\n if (!this.disableWarnings) {\r\n this._logger.warn('Max pooled objects reached, possible memory leak? Doubling');\r\n }\r\n this.maxObjects = this.maxObjects * 2;\r\n }\r\n if (this.objects[this.index]) {\r\n // Pool has an available object already constructed\r\n return this.recycler(this.objects[this.index++], ...args);\r\n }\r\n else {\r\n // New allocation\r\n this.totalAllocations++;\r\n const object = (this.objects[this.index++] = this.builder(...args));\r\n return object;\r\n }\r\n }\r\n done(...objects) {\r\n // All objects in pool now considered \"free\"\r\n this.index = 0;\r\n for (const object of objects) {\r\n const poolIndex = this.objects.indexOf(object);\r\n // Build a new object to take the pool place\r\n this.objects[poolIndex] = this.builder(); // TODO problematic 0-arg only support\r\n this.totalAllocations++;\r\n }\r\n return objects;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/draw-call.ts\n\r\n\r\nclass DrawCall {\r\n constructor() {\r\n this.z = 0;\r\n this.priority = 0;\r\n this.transform = AffineMatrix.identity();\r\n this.state = {\r\n z: 0,\r\n opacity: 1,\r\n tint: Color.White,\r\n material: null\r\n };\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/material.ts\n\r\nconst defaultVertexSource = `#version 300 es\r\nin vec2 a_position;\r\n\r\nin vec2 a_uv;\r\nout vec2 v_uv;\r\n\r\nuniform mat4 u_matrix;\r\nuniform mat4 u_transform;\r\n\r\nvoid main() {\r\n // Set the vertex position using the ortho & transform matrix\r\n gl_Position = u_matrix * u_transform * vec4(a_position, 0.0, 1.0);\r\n\r\n // Pass through the UV coord to the fragment shader\r\n v_uv = a_uv;\r\n}\r\n`;\r\nclass Material {\r\n constructor(options) {\r\n this._color = Color.Transparent;\r\n this._initialized = false;\r\n const { color, name, vertexSource, fragmentSource } = options;\r\n this._name = name;\r\n this._vertexSource = vertexSource !== null && vertexSource !== void 0 ? vertexSource : defaultVertexSource;\r\n this._fragmentSource = fragmentSource;\r\n this._color = color !== null && color !== void 0 ? color : this._color;\r\n }\r\n initialize(_gl, _context) {\r\n if (this._initialized) {\r\n return;\r\n }\r\n this._shader = _context.createShader({\r\n vertexSource: this._vertexSource,\r\n fragmentSource: this._fragmentSource\r\n });\r\n this._shader.compile();\r\n this._initialized = true;\r\n }\r\n get name() {\r\n var _a;\r\n return (_a = this._name) !== null && _a !== void 0 ? _a : 'anonymous material';\r\n }\r\n getShader() {\r\n return this._shader;\r\n }\r\n use() {\r\n if (this._initialized) {\r\n // bind the shader\r\n this._shader.use();\r\n // Apply standard uniforms\r\n this._shader.trySetUniformFloatColor('u_color', this._color);\r\n }\r\n else {\r\n throw Error(`Material ${this.name} not yet initialized, use the ExcaliburGraphicsContext.createMaterial() to work around this.`);\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/material-renderer/material-renderer.ts\n\r\n\r\n\r\n\r\n\r\nclass MaterialRenderer {\r\n constructor() {\r\n this.type = 'ex.material';\r\n this.priority = 0;\r\n this._textures = [];\r\n }\r\n initialize(gl, context) {\r\n this._gl = gl;\r\n this._context = context;\r\n // Setup memory layout\r\n this._buffer = new VertexBuffer({\r\n gl,\r\n size: 4 * 4,\r\n type: 'dynamic'\r\n });\r\n // Setup a vertex layout/buffer to the material\r\n this._layout = new VertexLayout({\r\n gl,\r\n vertexBuffer: this._buffer,\r\n attributes: [\r\n ['a_position', 2],\r\n ['a_uv', 2]\r\n ]\r\n });\r\n // Setup index buffer\r\n this._quads = new QuadIndexBuffer(gl, 1, true);\r\n }\r\n draw(image, sx, sy, swidth, sheight, dx, dy, dwidth, dheight) {\r\n var _a, _b, _c, _d;\r\n const gl = this._gl;\r\n // Extract context info\r\n const material = this._context.material;\r\n material.initialize(gl, this._context);\r\n const transform = this._context.getTransform();\r\n const opacity = this._context.opacity;\r\n // material shader\r\n const shader = material.getShader();\r\n // construct geometry, or hold on to it in the material?\r\n // geometry primitive for drawing rectangles?\r\n // update data\r\n const vertexBuffer = this._layout.vertexBuffer.bufferData;\r\n let vertexIndex = 0;\r\n let width = (image === null || image === void 0 ? void 0 : image.width) || swidth || 0;\r\n let height = (image === null || image === void 0 ? void 0 : image.height) || sheight || 0;\r\n let view = [0, 0, (_a = swidth !== null && swidth !== void 0 ? swidth : image === null || image === void 0 ? void 0 : image.width) !== null && _a !== void 0 ? _a : 0, (_b = sheight !== null && sheight !== void 0 ? sheight : image === null || image === void 0 ? void 0 : image.height) !== null && _b !== void 0 ? _b : 0];\r\n let dest = [sx !== null && sx !== void 0 ? sx : 1, sy !== null && sy !== void 0 ? sy : 1];\r\n // If destination is specified, update view and dest\r\n if (dx !== undefined && dy !== undefined && dwidth !== undefined && dheight !== undefined) {\r\n view = [sx !== null && sx !== void 0 ? sx : 1, sy !== null && sy !== void 0 ? sy : 1, (_c = swidth !== null && swidth !== void 0 ? swidth : image === null || image === void 0 ? void 0 : image.width) !== null && _c !== void 0 ? _c : 0, (_d = sheight !== null && sheight !== void 0 ? sheight : image === null || image === void 0 ? void 0 : image.height) !== null && _d !== void 0 ? _d : 0];\r\n dest = [dx, dy];\r\n width = dwidth;\r\n height = dheight;\r\n }\r\n sx = view[0];\r\n sy = view[1];\r\n const sw = view[2];\r\n const sh = view[3];\r\n const topLeft = vec(dest[0], dest[1]);\r\n const topRight = vec(dest[0] + width, dest[1]);\r\n const bottomLeft = vec(dest[0], dest[1] + height);\r\n const bottomRight = vec(dest[0] + width, dest[1] + height);\r\n const imageWidth = image.width || width;\r\n const imageHeight = image.height || height;\r\n const uvx0 = (sx) / imageWidth;\r\n const uvy0 = (sy) / imageHeight;\r\n const uvx1 = (sx + sw - 0.01) / imageWidth;\r\n const uvy1 = (sy + sh - 0.01) / imageHeight;\r\n // (0, 0) - 0\r\n vertexBuffer[vertexIndex++] = topLeft.x;\r\n vertexBuffer[vertexIndex++] = topLeft.y;\r\n vertexBuffer[vertexIndex++] = uvx0;\r\n vertexBuffer[vertexIndex++] = uvy0;\r\n // (0, 1) - 1\r\n vertexBuffer[vertexIndex++] = bottomLeft.x;\r\n vertexBuffer[vertexIndex++] = bottomLeft.y;\r\n vertexBuffer[vertexIndex++] = uvx0;\r\n vertexBuffer[vertexIndex++] = uvy1;\r\n // (1, 0) - 2\r\n vertexBuffer[vertexIndex++] = topRight.x;\r\n vertexBuffer[vertexIndex++] = topRight.y;\r\n vertexBuffer[vertexIndex++] = uvx1;\r\n vertexBuffer[vertexIndex++] = uvy0;\r\n // (1, 1) - 3\r\n vertexBuffer[vertexIndex++] = bottomRight.x;\r\n vertexBuffer[vertexIndex++] = bottomRight.y;\r\n vertexBuffer[vertexIndex++] = uvx1;\r\n vertexBuffer[vertexIndex++] = uvy1;\r\n // This creates and uploads the texture if not already done\r\n const texture = this._addImageAsTexture(image);\r\n // apply material\r\n material.use();\r\n this._layout.shader = shader;\r\n // apply layout and geometry\r\n this._layout.use(true);\r\n // apply opacity\r\n shader.trySetUniformFloat('u_opacity', opacity);\r\n // apply resolution\r\n shader.trySetUniformFloatVector('u_resolution', vec(this._context.width, this._context.height));\r\n // apply size\r\n shader.trySetUniformFloatVector('u_size', vec(sw, sh));\r\n // apply orthographic projection\r\n shader.trySetUniformMatrix('u_matrix', this._context.ortho);\r\n // apply geometry transform\r\n shader.trySetUniformMatrix('u_transform', transform.to4x4());\r\n // bind graphic image texture 'uniform sampler2D u_graphic;'\r\n gl.activeTexture(gl.TEXTURE0 + 0);\r\n gl.bindTexture(gl.TEXTURE_2D, texture);\r\n shader.trySetUniformInt('u_graphic', 0);\r\n // bind quad index buffer\r\n this._quads.bind();\r\n // Draw a single quad\r\n gl.drawElements(gl.TRIANGLES, 6, this._quads.bufferGlType, 0);\r\n }\r\n _addImageAsTexture(image) {\r\n const maybeFiltering = image.getAttribute('filtering');\r\n let filtering = null;\r\n if (maybeFiltering === ImageFiltering.Blended ||\r\n maybeFiltering === ImageFiltering.Pixel) {\r\n filtering = maybeFiltering;\r\n }\r\n const force = image.getAttribute('forceUpload') === 'true' ? true : false;\r\n const texture = this._context.textureLoader.load(image, filtering, force);\r\n // remove force attribute after upload\r\n image.removeAttribute('forceUpload');\r\n if (this._textures.indexOf(texture) === -1) {\r\n this._textures.push(texture);\r\n }\r\n return texture;\r\n }\r\n hasPendingDraws() {\r\n return false;\r\n }\r\n flush() {\r\n // flush does not do anything, material renderer renders immediately per draw\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/ExcaliburGraphicsContextWebGL.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// renderers\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst pixelSnapEpsilon = 0.0001;\r\nclass ExcaliburGraphicsContextWebGLDebug {\r\n constructor(_webglCtx) {\r\n this._webglCtx = _webglCtx;\r\n this._debugText = new DebugText();\r\n }\r\n /**\r\n * Draw a debugging rectangle to the context\r\n * @param x\r\n * @param y\r\n * @param width\r\n * @param height\r\n */\r\n drawRect(x, y, width, height, rectOptions = { color: Color.Black }) {\r\n this.drawLine(vec(x, y), vec(x + width, y), { ...rectOptions });\r\n this.drawLine(vec(x + width, y), vec(x + width, y + height), { ...rectOptions });\r\n this.drawLine(vec(x + width, y + height), vec(x, y + height), { ...rectOptions });\r\n this.drawLine(vec(x, y + height), vec(x, y), { ...rectOptions });\r\n }\r\n /**\r\n * Draw a debugging line to the context\r\n * @param start\r\n * @param end\r\n * @param lineOptions\r\n */\r\n drawLine(start, end, lineOptions = { color: Color.Black }) {\r\n this._webglCtx.draw('ex.line', start, end, lineOptions.color);\r\n }\r\n /**\r\n * Draw a debugging point to the context\r\n * @param point\r\n * @param pointOptions\r\n */\r\n drawPoint(point, pointOptions = { color: Color.Black, size: 5 }) {\r\n this._webglCtx.draw('ex.point', point, pointOptions.color, pointOptions.size);\r\n }\r\n drawText(text, pos) {\r\n this._debugText.write(this._webglCtx, text, pos);\r\n }\r\n}\r\nclass ExcaliburGraphicsContextWebGL {\r\n get z() {\r\n return this._state.current.z;\r\n }\r\n set z(value) {\r\n this._state.current.z = value;\r\n }\r\n get opacity() {\r\n return this._state.current.opacity;\r\n }\r\n set opacity(value) {\r\n this._state.current.opacity = value;\r\n }\r\n get tint() {\r\n return this._state.current.tint;\r\n }\r\n set tint(color) {\r\n this._state.current.tint = color;\r\n }\r\n get width() {\r\n return this.__gl.canvas.width;\r\n }\r\n get height() {\r\n return this.__gl.canvas.height;\r\n }\r\n get ortho() {\r\n return this._ortho;\r\n }\r\n /**\r\n * Checks the underlying webgl implementation if the requested internal resolution is supported\r\n * @param dim\r\n */\r\n checkIfResolutionSupported(dim) {\r\n // Slight hack based on this thread https://groups.google.com/g/webgl-dev-list/c/AHONvz3oQTo\r\n let supported = true;\r\n if (dim.width > 4096 || dim.height > 4096) {\r\n supported = false;\r\n }\r\n return supported;\r\n }\r\n constructor(options) {\r\n this._logger = Logger.getInstance();\r\n this._renderers = new Map();\r\n this._isDrawLifecycle = false;\r\n this.useDrawSorting = true;\r\n this._drawCallPool = new Pool(() => new DrawCall(), (instance) => {\r\n instance.priority = 0;\r\n instance.z = 0;\r\n instance.renderer = undefined;\r\n instance.args = undefined;\r\n return instance;\r\n }, 4000);\r\n this._drawCalls = [];\r\n // Postprocessing is a tuple with 2 render targets, these are flip-flopped during the postprocessing process\r\n this._postProcessTargets = [];\r\n this._postprocessors = [];\r\n this._transform = new TransformStack();\r\n this._state = new StateStack();\r\n this.snapToPixel = false;\r\n this.smoothing = false;\r\n this.backgroundColor = Color.ExcaliburBlue;\r\n this._alreadyWarnedDrawLifecycle = false;\r\n this.debug = new ExcaliburGraphicsContextWebGLDebug(this);\r\n this._totalPostProcessorTime = 0;\r\n const { canvasElement, enableTransparency, smoothing, snapToPixel, backgroundColor, useDrawSorting } = options;\r\n this.__gl = canvasElement.getContext('webgl2', {\r\n antialias: smoothing !== null && smoothing !== void 0 ? smoothing : this.smoothing,\r\n premultipliedAlpha: false,\r\n alpha: enableTransparency !== null && enableTransparency !== void 0 ? enableTransparency : true,\r\n depth: true,\r\n powerPreference: 'high-performance'\r\n // TODO Chromium fixed the bug where this didn't work now it breaks CI :(\r\n // failIfMajorPerformanceCaveat: true\r\n });\r\n if (!this.__gl) {\r\n throw Error('Failed to retrieve webgl context from browser');\r\n }\r\n this.textureLoader = new TextureLoader(this.__gl);\r\n this.snapToPixel = snapToPixel !== null && snapToPixel !== void 0 ? snapToPixel : this.snapToPixel;\r\n this.smoothing = smoothing !== null && smoothing !== void 0 ? smoothing : this.smoothing;\r\n this.backgroundColor = backgroundColor !== null && backgroundColor !== void 0 ? backgroundColor : this.backgroundColor;\r\n this.useDrawSorting = useDrawSorting !== null && useDrawSorting !== void 0 ? useDrawSorting : this.useDrawSorting;\r\n this._drawCallPool.disableWarnings = true;\r\n this._drawCallPool.preallocate();\r\n this._init();\r\n }\r\n _init() {\r\n const gl = this.__gl;\r\n // Setup viewport and view matrix\r\n this._ortho = Matrix.ortho(0, gl.canvas.width, gl.canvas.height, 0, 400, -400);\r\n gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);\r\n // Clear background\r\n gl.clearColor(this.backgroundColor.r / 255, this.backgroundColor.g / 255, this.backgroundColor.b / 255, this.backgroundColor.a);\r\n gl.clear(gl.COLOR_BUFFER_BIT);\r\n // Enable alpha blending\r\n // https://www.realtimerendering.com/blog/gpus-prefer-premultiplication/\r\n gl.enable(gl.BLEND);\r\n gl.blendEquation(gl.FUNC_ADD);\r\n gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\r\n gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD);\r\n gl.blendFuncSeparate(gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\r\n // Setup builtin renderers\r\n this.register(new ImageRenderer());\r\n this.register(new MaterialRenderer());\r\n this.register(new RectangleRenderer());\r\n this.register(new CircleRenderer());\r\n this.register(new PointRenderer());\r\n this.register(new LineRenderer());\r\n this._screenRenderer = new ScreenPassPainter(gl);\r\n this._renderTarget = new RenderTarget({\r\n gl,\r\n width: gl.canvas.width,\r\n height: gl.canvas.height\r\n });\r\n this._postProcessTargets = [\r\n new RenderTarget({\r\n gl,\r\n width: gl.canvas.width,\r\n height: gl.canvas.height\r\n }),\r\n new RenderTarget({\r\n gl,\r\n width: gl.canvas.width,\r\n height: gl.canvas.height\r\n })\r\n ];\r\n }\r\n register(renderer) {\r\n this._renderers.set(renderer.type, renderer);\r\n renderer.initialize(this.__gl, this);\r\n }\r\n get(rendererName) {\r\n return this._renderers.get(rendererName);\r\n }\r\n _isCurrentRenderer(renderer) {\r\n if (!this._currentRenderer || this._currentRenderer === renderer) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n beginDrawLifecycle() {\r\n this._isDrawLifecycle = true;\r\n }\r\n endDrawLifecycle() {\r\n this._isDrawLifecycle = false;\r\n }\r\n draw(rendererName, ...args) {\r\n if (!this._isDrawLifecycle && !this._alreadyWarnedDrawLifecycle) {\r\n this._logger.warn(`Attempting to draw outside the the drawing lifecycle (preDraw/postDraw) is not supported and is a source of bugs/errors.\\n` +\r\n `If you want to do custom drawing, use Actor.graphics, or any onPreDraw or onPostDraw handler.`);\r\n this._alreadyWarnedDrawLifecycle = true;\r\n }\r\n const renderer = this._renderers.get(rendererName);\r\n if (renderer) {\r\n if (this.useDrawSorting) {\r\n const drawCall = this._drawCallPool.get();\r\n drawCall.z = this._state.current.z;\r\n drawCall.priority = renderer.priority;\r\n drawCall.renderer = rendererName;\r\n this.getTransform().clone(drawCall.transform);\r\n drawCall.state.z = this._state.current.z;\r\n drawCall.state.opacity = this._state.current.opacity;\r\n drawCall.state.tint = this._state.current.tint;\r\n drawCall.state.material = this._state.current.material;\r\n drawCall.args = args;\r\n this._drawCalls.push(drawCall);\r\n }\r\n else {\r\n // Set the current renderer if not defined\r\n if (!this._currentRenderer) {\r\n this._currentRenderer = renderer;\r\n }\r\n if (!this._isCurrentRenderer(renderer)) {\r\n // switching graphics means we must flush the previous\r\n this._currentRenderer.flush();\r\n }\r\n // If we are still using the same renderer we can add to the current batch\r\n renderer.draw(...args);\r\n this._currentRenderer = renderer;\r\n }\r\n }\r\n else {\r\n throw Error(`No renderer with name ${rendererName} has been registered`);\r\n }\r\n }\r\n resetTransform() {\r\n this._transform.current = AffineMatrix.identity();\r\n }\r\n updateViewport(resolution) {\r\n const gl = this.__gl;\r\n this._ortho = this._ortho = Matrix.ortho(0, resolution.width, resolution.height, 0, 400, -400);\r\n this._renderTarget.setResolution(gl.canvas.width, gl.canvas.height);\r\n this._postProcessTargets[0].setResolution(gl.canvas.width, gl.canvas.height);\r\n this._postProcessTargets[1].setResolution(gl.canvas.width, gl.canvas.height);\r\n }\r\n drawImage(image, sx, sy, swidth, sheight, dx, dy, dwidth, dheight) {\r\n if (swidth === 0 || sheight === 0) {\r\n return; // zero dimension dest exit early\r\n }\r\n else if (dwidth === 0 || dheight === 0) {\r\n return; // zero dimension dest exit early\r\n }\r\n else if (image.width === 0 || image.height === 0) {\r\n return; // zero dimension source exit early\r\n }\r\n if (!image) {\r\n Logger.getInstance().warn('Cannot draw a null or undefined image');\r\n // tslint:disable-next-line: no-console\r\n if (console.trace) {\r\n // tslint:disable-next-line: no-console\r\n console.trace();\r\n }\r\n return;\r\n }\r\n if (this._state.current.material) {\r\n this.draw('ex.material', image, sx, sy, swidth, sheight, dx, dy, dwidth, dheight);\r\n }\r\n else {\r\n this.draw('ex.image', image, sx, sy, swidth, sheight, dx, dy, dwidth, dheight);\r\n }\r\n }\r\n drawLine(start, end, color, thickness = 1) {\r\n this.draw('ex.rectangle', start, end, color, thickness);\r\n }\r\n drawRectangle(pos, width, height, color, stroke, strokeThickness) {\r\n this.draw('ex.rectangle', pos, width, height, color, stroke, strokeThickness);\r\n }\r\n drawCircle(pos, radius, color, stroke, thickness) {\r\n this.draw('ex.circle', pos, radius, color, stroke, thickness);\r\n }\r\n save() {\r\n this._transform.save();\r\n this._state.save();\r\n }\r\n restore() {\r\n this._transform.restore();\r\n this._state.restore();\r\n }\r\n translate(x, y) {\r\n this._transform.translate(this.snapToPixel ? ~~(x + pixelSnapEpsilon) : x, this.snapToPixel ? ~~(y + pixelSnapEpsilon) : y);\r\n }\r\n rotate(angle) {\r\n this._transform.rotate(angle);\r\n }\r\n scale(x, y) {\r\n this._transform.scale(x, y);\r\n }\r\n transform(matrix) {\r\n this._transform.current = matrix;\r\n }\r\n getTransform() {\r\n return this._transform.current;\r\n }\r\n multiply(m) {\r\n this._transform.current.multiply(m, this._transform.current);\r\n }\r\n addPostProcessor(postprocessor) {\r\n this._postprocessors.push(postprocessor);\r\n postprocessor.initialize(this.__gl);\r\n }\r\n removePostProcessor(postprocessor) {\r\n const index = this._postprocessors.indexOf(postprocessor);\r\n if (index !== -1) {\r\n this._postprocessors.splice(index, 1);\r\n }\r\n }\r\n clearPostProcessors() {\r\n this._postprocessors.length = 0;\r\n }\r\n updatePostProcessors(delta) {\r\n for (const postprocessor of this._postprocessors) {\r\n const shader = postprocessor.getShader();\r\n shader.use();\r\n const uniforms = shader.getUniforms();\r\n this._totalPostProcessorTime += delta;\r\n if (uniforms.find(u => u.name === 'u_time_ms')) {\r\n shader.setUniformFloat('u_time_ms', this._totalPostProcessorTime);\r\n }\r\n if (uniforms.find(u => u.name === 'u_elapsed_ms')) {\r\n shader.setUniformFloat('u_elapsed_ms', delta);\r\n }\r\n if (uniforms.find(u => u.name === 'u_resolution')) {\r\n shader.setUniformFloatVector('u_resolution', vec(this.width, this.height));\r\n }\r\n if (postprocessor.onUpdate) {\r\n postprocessor.onUpdate(delta);\r\n }\r\n }\r\n }\r\n set material(material) {\r\n this._state.current.material = material;\r\n }\r\n get material() {\r\n return this._state.current.material;\r\n }\r\n /**\r\n * Creates and initializes the material which compiles the internal shader\r\n * @param options\r\n * @returns Material\r\n */\r\n createMaterial(options) {\r\n const material = new Material(options);\r\n material.initialize(this.__gl, this);\r\n return material;\r\n }\r\n createShader(options) {\r\n const gl = this.__gl;\r\n const { vertexSource, fragmentSource } = options;\r\n const shader = new Shader({\r\n gl,\r\n vertexSource,\r\n fragmentSource\r\n });\r\n shader.compile();\r\n return shader;\r\n }\r\n clear() {\r\n const gl = this.__gl;\r\n this._renderTarget.use();\r\n gl.clearColor(this.backgroundColor.r / 255, this.backgroundColor.g / 255, this.backgroundColor.b / 255, this.backgroundColor.a);\r\n // Clear the context with the newly set color. This is\r\n // the function call that actually does the drawing.\r\n gl.clear(gl.COLOR_BUFFER_BIT);\r\n }\r\n /**\r\n * Flushes all batched rendering to the screen\r\n */\r\n flush() {\r\n const gl = this.__gl;\r\n // render target captures all draws and redirects to the render target\r\n this._renderTarget.use();\r\n if (this.useDrawSorting) {\r\n // sort draw calls\r\n // Find the original order of the first instance of the draw call\r\n const originalSort = new Map();\r\n for (const [name] of this._renderers) {\r\n const firstIndex = this._drawCalls.findIndex(dc => dc.renderer === name);\r\n originalSort.set(name, firstIndex);\r\n }\r\n this._drawCalls.sort((a, b) => {\r\n const zIndex = a.z - b.z;\r\n const originalSortOrder = originalSort.get(a.renderer) - originalSort.get(b.renderer);\r\n const priority = a.priority - b.priority;\r\n if (zIndex === 0) { // sort by z first\r\n if (priority === 0) { // sort by priority\r\n return originalSortOrder; // use the original order to inform draw call packing to maximally preserve painter order\r\n }\r\n return priority;\r\n }\r\n return zIndex;\r\n });\r\n const oldTransform = this._transform.current;\r\n const oldState = this._state.current;\r\n if (this._drawCalls.length) {\r\n let currentRendererName = this._drawCalls[0].renderer;\r\n let currentRenderer = this._renderers.get(currentRendererName);\r\n for (let i = 0; i < this._drawCalls.length; i++) {\r\n // hydrate the state for renderers\r\n this._transform.current = this._drawCalls[i].transform;\r\n this._state.current = this._drawCalls[i].state;\r\n if (this._drawCalls[i].renderer !== currentRendererName) {\r\n // switching graphics renderer means we must flush the previous\r\n currentRenderer.flush();\r\n currentRendererName = this._drawCalls[i].renderer;\r\n currentRenderer = this._renderers.get(currentRendererName);\r\n }\r\n // If we are still using the same renderer we can add to the current batch\r\n currentRenderer.draw(...this._drawCalls[i].args);\r\n }\r\n if (currentRenderer.hasPendingDraws()) {\r\n currentRenderer.flush();\r\n }\r\n }\r\n // reset state\r\n this._transform.current = oldTransform;\r\n this._state.current = oldState;\r\n // reclaim draw calls\r\n this._drawCallPool.done();\r\n this._drawCalls.length = 0;\r\n }\r\n else {\r\n // This is the final flush at the moment to draw any leftover pending draw\r\n for (const renderer of this._renderers.values()) {\r\n if (renderer.hasPendingDraws()) {\r\n renderer.flush();\r\n }\r\n }\r\n }\r\n this._renderTarget.disable();\r\n // post process step\r\n const source = this._renderTarget.toRenderSource();\r\n source.use();\r\n // flip flop render targets\r\n for (let i = 0; i < this._postprocessors.length; i++) {\r\n this._postProcessTargets[i % 2].use();\r\n this._screenRenderer.renderWithPostProcessor(this._postprocessors[i]);\r\n this._postProcessTargets[i % 2].toRenderSource().use();\r\n }\r\n // passing null switches rendering back to the canvas\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\r\n this._screenRenderer.renderToScreen();\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Context/ExcaliburGraphicsContext2DCanvas.ts\n\r\n\r\n\r\n\r\nconst ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon = 0.0001;\r\nclass ExcaliburGraphicsContext2DCanvasDebug {\r\n constructor(_ex) {\r\n this._ex = _ex;\r\n this._debugText = new DebugText();\r\n }\r\n /**\r\n * Draw a debug rectangle to the context\r\n * @param x\r\n * @param y\r\n * @param width\r\n * @param height\r\n */\r\n drawRect(x, y, width, height) {\r\n this._ex.__ctx.save();\r\n this._ex.__ctx.strokeStyle = 'red';\r\n this._ex.__ctx.strokeRect(this._ex.snapToPixel ? ~~(x + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : x, this._ex.snapToPixel ? ~~(y + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : y, this._ex.snapToPixel ? ~~(width + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : width, this._ex.snapToPixel ? ~~(height + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : height);\r\n this._ex.__ctx.restore();\r\n }\r\n drawLine(start, end, lineOptions = { color: Color.Black }) {\r\n this._ex.__ctx.save();\r\n this._ex.__ctx.beginPath();\r\n this._ex.__ctx.strokeStyle = lineOptions.color.toString();\r\n this._ex.__ctx.moveTo(this._ex.snapToPixel ? ~~(start.x + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : start.x, this._ex.snapToPixel ? ~~(start.y + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : start.y);\r\n this._ex.__ctx.lineTo(this._ex.snapToPixel ? ~~(end.x + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : end.x, this._ex.snapToPixel ? ~~(end.y + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : end.y);\r\n this._ex.__ctx.lineWidth = 2;\r\n this._ex.__ctx.stroke();\r\n this._ex.__ctx.closePath();\r\n this._ex.__ctx.restore();\r\n }\r\n drawPoint(point, pointOptions = { color: Color.Black, size: 5 }) {\r\n this._ex.__ctx.save();\r\n this._ex.__ctx.beginPath();\r\n this._ex.__ctx.fillStyle = pointOptions.color.toString();\r\n this._ex.__ctx.arc(this._ex.snapToPixel ? ~~(point.x + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : point.x, this._ex.snapToPixel ? ~~(point.y + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : point.y, pointOptions.size, 0, Math.PI * 2);\r\n this._ex.__ctx.fill();\r\n this._ex.__ctx.closePath();\r\n this._ex.__ctx.restore();\r\n }\r\n drawText(text, pos) {\r\n this._debugText.write(this._ex, text, pos);\r\n }\r\n}\r\nclass ExcaliburGraphicsContext2DCanvas {\r\n get width() {\r\n return this.__ctx.canvas.width;\r\n }\r\n get height() {\r\n return this.__ctx.canvas.height;\r\n }\r\n get opacity() {\r\n return this._state.current.opacity;\r\n }\r\n set opacity(value) {\r\n this._state.current.opacity = value;\r\n }\r\n get tint() {\r\n return this._state.current.tint;\r\n }\r\n set tint(color) {\r\n this._state.current.tint = color;\r\n }\r\n get smoothing() {\r\n return this.__ctx.imageSmoothingEnabled;\r\n }\r\n set smoothing(value) {\r\n this.__ctx.imageSmoothingEnabled = value;\r\n }\r\n constructor(options) {\r\n /**\r\n * Unused in Canvas implementation\r\n */\r\n this.useDrawSorting = false;\r\n /**\r\n * Unused in Canvas implementation\r\n */\r\n this.z = 0;\r\n this.backgroundColor = Color.ExcaliburBlue;\r\n this._state = new StateStack();\r\n this.snapToPixel = false;\r\n this.debug = new ExcaliburGraphicsContext2DCanvasDebug(this);\r\n const { canvasElement, enableTransparency, snapToPixel, smoothing, backgroundColor } = options;\r\n this.__ctx = canvasElement.getContext('2d', {\r\n alpha: enableTransparency !== null && enableTransparency !== void 0 ? enableTransparency : true\r\n });\r\n this.backgroundColor = backgroundColor !== null && backgroundColor !== void 0 ? backgroundColor : this.backgroundColor;\r\n this.snapToPixel = snapToPixel !== null && snapToPixel !== void 0 ? snapToPixel : this.snapToPixel;\r\n this.smoothing = smoothing !== null && smoothing !== void 0 ? smoothing : this.smoothing;\r\n }\r\n resetTransform() {\r\n this.__ctx.resetTransform();\r\n }\r\n updateViewport(_resolution) {\r\n // pass\r\n }\r\n drawImage(image, sx, sy, swidth, sheight, dx, dy, dwidth, dheight) {\r\n if (swidth === 0 || sheight === 0) {\r\n return; // zero dimension dest exit early\r\n }\r\n else if (dwidth === 0 || dheight === 0) {\r\n return; // zero dimension dest exit early\r\n }\r\n else if (image.width === 0 || image.height === 0) {\r\n return; // zero dimension source exit early\r\n }\r\n this.__ctx.globalAlpha = this.opacity;\r\n const args = [image, sx, sy, swidth, sheight, dx, dy, dwidth, dheight]\r\n .filter((a) => a !== undefined)\r\n .map((a) => (typeof a === 'number' && this.snapToPixel ? ~~a : a));\r\n this.__ctx.drawImage.apply(this.__ctx, args);\r\n GraphicsDiagnostics.DrawCallCount++;\r\n GraphicsDiagnostics.DrawnImagesCount = 1;\r\n }\r\n drawLine(start, end, color, thickness = 1) {\r\n this.__ctx.save();\r\n this.__ctx.beginPath();\r\n this.__ctx.strokeStyle = color.toString();\r\n this.__ctx.moveTo(this.snapToPixel ? ~~(start.x + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : start.x, this.snapToPixel ? ~~(start.y + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : start.y);\r\n this.__ctx.lineTo(this.snapToPixel ? ~~(end.x + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : end.x, this.snapToPixel ? ~~(end.y + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : end.y);\r\n this.__ctx.lineWidth = thickness;\r\n this.__ctx.stroke();\r\n this.__ctx.closePath();\r\n this.__ctx.restore();\r\n }\r\n drawRectangle(pos, width, height, color) {\r\n this.__ctx.save();\r\n this.__ctx.fillStyle = color.toString();\r\n this.__ctx.fillRect(this.snapToPixel ? ~~(pos.x + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : pos.x, this.snapToPixel ? ~~(pos.y + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : pos.y, this.snapToPixel ? ~~(width + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : width, this.snapToPixel ? ~~(height + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : height);\r\n this.__ctx.restore();\r\n }\r\n drawCircle(pos, radius, color, stroke, thickness) {\r\n this.__ctx.save();\r\n this.__ctx.beginPath();\r\n if (stroke) {\r\n this.__ctx.strokeStyle = stroke.toString();\r\n }\r\n if (thickness) {\r\n this.__ctx.lineWidth = thickness;\r\n }\r\n this.__ctx.fillStyle = color.toString();\r\n this.__ctx.arc(this.snapToPixel ? ~~(pos.x + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : pos.x, this.snapToPixel ? ~~(pos.y + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : pos.y, radius, 0, Math.PI * 2);\r\n this.__ctx.fill();\r\n if (stroke) {\r\n this.__ctx.stroke();\r\n }\r\n this.__ctx.closePath();\r\n this.__ctx.restore();\r\n }\r\n /**\r\n * Save the current state of the canvas to the stack (transforms and opacity)\r\n */\r\n save() {\r\n this.__ctx.save();\r\n }\r\n /**\r\n * Restore the state of the canvas from the stack\r\n */\r\n restore() {\r\n this.__ctx.restore();\r\n }\r\n /**\r\n * Translate the origin of the context by an x and y\r\n * @param x\r\n * @param y\r\n */\r\n translate(x, y) {\r\n this.__ctx.translate(this.snapToPixel ? ~~(x + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : x, this.snapToPixel ? ~~(y + ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon) : y);\r\n }\r\n /**\r\n * Rotate the context about the current origin\r\n */\r\n rotate(angle) {\r\n this.__ctx.rotate(angle);\r\n }\r\n /**\r\n * Scale the context by an x and y factor\r\n * @param x\r\n * @param y\r\n */\r\n scale(x, y) {\r\n this.__ctx.scale(x, y);\r\n }\r\n getTransform() {\r\n throw new Error('Not implemented');\r\n }\r\n multiply(_m) {\r\n this.__ctx.setTransform(this.__ctx.getTransform().multiply(_m.toDOMMatrix()));\r\n }\r\n addPostProcessor(_postprocessor) {\r\n // pass\r\n }\r\n removePostProcessor(_postprocessor) {\r\n // pass\r\n }\r\n clearPostProcessors() {\r\n // pass\r\n }\r\n updatePostProcessors(_delta) {\r\n // pass\r\n }\r\n beginDrawLifecycle() {\r\n // pass\r\n }\r\n endDrawLifecycle() {\r\n // pass\r\n }\r\n set material(material) {\r\n this._state.current.material = material;\r\n }\r\n get material() {\r\n return this._state.current.material;\r\n }\r\n createMaterial(_options) {\r\n // pass\r\n return null;\r\n }\r\n clear() {\r\n // Clear frame\r\n this.__ctx.clearRect(0, 0, this.width, this.height);\r\n this.__ctx.fillStyle = this.backgroundColor.toString();\r\n this.__ctx.fillRect(0, 0, this.width, this.height);\r\n GraphicsDiagnostics.clear();\r\n }\r\n /**\r\n * Flushes the batched draw calls to the screen\r\n */\r\n flush() {\r\n // pass\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Screen.ts\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Enum representing the different display modes available to Excalibur.\r\n */\r\nvar DisplayMode;\r\n(function (DisplayMode) {\r\n /**\r\n * Default, use a specified resolution for the game. Like 800x600 pixels for example.\r\n */\r\n DisplayMode[\"Fixed\"] = \"Fixed\";\r\n /**\r\n * Fit the aspect ratio given by the game resolution within the container at all times will fill any gaps with canvas.\r\n * The displayed area outside the aspect ratio is not guaranteed to be on the screen, only the [[Screen.contentArea]]\r\n * is guaranteed to be on screen.\r\n */\r\n DisplayMode[\"FitContainerAndFill\"] = \"FitContainerAndFill\";\r\n /**\r\n * Fit the aspect ratio given by the game resolution the screen at all times will fill the screen.\r\n * This displayed area outside the aspect ratio is not guaranteed to be on the screen, only the [[Screen.contentArea]]\r\n * is guaranteed to be on screen.\r\n */\r\n DisplayMode[\"FitScreenAndFill\"] = \"FitScreenAndFill\";\r\n /**\r\n * Fit the viewport to the parent element maintaining aspect ratio given by the game resolution, but zooms in to avoid the black bars\r\n * (letterbox) that would otherwise be present in [[FitContainer]].\r\n *\r\n * **warning** This will clip some drawable area from the user because of the zoom,\r\n * use [[Screen.contentArea]] to know the safe to draw area.\r\n */\r\n DisplayMode[\"FitContainerAndZoom\"] = \"FitContainerAndZoom\";\r\n /**\r\n * Fit the viewport to the device screen maintaining aspect ratio given by the game resolution, but zooms in to avoid the black bars\r\n * (letterbox) that would otherwise be present in [[FitScreen]].\r\n *\r\n * **warning** This will clip some drawable area from the user because of the zoom,\r\n * use [[Screen.contentArea]] to know the safe to draw area.\r\n */\r\n DisplayMode[\"FitScreenAndZoom\"] = \"FitScreenAndZoom\";\r\n /**\r\n * Fit to screen using as much space as possible while maintaining aspect ratio and resolution.\r\n * This is not the same as [[Screen.goFullScreen]] but behaves in a similar way maintaining aspect ratio.\r\n *\r\n * You may want to center your game here is an example\r\n * ```html\r\n * \r\n * \r\n *
\r\n * \r\n *
\r\n * \r\n * ```\r\n *\r\n * ```css\r\n * // css\r\n * main {\r\n * display: flex;\r\n * align-items: center;\r\n * justify-content: center;\r\n * height: 100%;\r\n * width: 100%;\r\n * }\r\n * ```\r\n */\r\n DisplayMode[\"FitScreen\"] = \"FitScreen\";\r\n /**\r\n * Fill the entire screen's css width/height for the game resolution dynamically. This means the resolution of the game will\r\n * change dynamically as the window is resized. This is not the same as [[Screen.goFullScreen]]\r\n */\r\n DisplayMode[\"FillScreen\"] = \"FillScreen\";\r\n /**\r\n * Fit to parent element width/height using as much space as possible while maintaining aspect ratio and resolution.\r\n */\r\n DisplayMode[\"FitContainer\"] = \"FitContainer\";\r\n /**\r\n * Use the parent DOM container's css width/height for the game resolution dynamically\r\n */\r\n DisplayMode[\"FillContainer\"] = \"FillContainer\";\r\n})(DisplayMode || (DisplayMode = {}));\r\n/**\r\n * Convenience class for quick resolutions\r\n * Mostly sourced from https://emulation.gametechwiki.com/index.php/Resolution\r\n */\r\nclass Resolution {\r\n /* istanbul ignore next */\r\n static get SVGA() {\r\n return { width: 800, height: 600 };\r\n }\r\n /* istanbul ignore next */\r\n static get Standard() {\r\n return { width: 1920, height: 1080 };\r\n }\r\n /* istanbul ignore next */\r\n static get Atari2600() {\r\n return { width: 160, height: 192 };\r\n }\r\n /* istanbul ignore next */\r\n static get GameBoy() {\r\n return { width: 160, height: 144 };\r\n }\r\n /* istanbul ignore next */\r\n static get GameBoyAdvance() {\r\n return { width: 240, height: 160 };\r\n }\r\n /* istanbul ignore next */\r\n static get NintendoDS() {\r\n return { width: 256, height: 192 };\r\n }\r\n /* istanbul ignore next */\r\n static get NES() {\r\n return { width: 256, height: 224 };\r\n }\r\n /* istanbul ignore next */\r\n static get SNES() {\r\n return { width: 256, height: 244 };\r\n }\r\n}\r\n/**\r\n * The Screen handles all aspects of interacting with the screen for Excalibur.\r\n */\r\nclass Screen {\r\n constructor(options) {\r\n var _a, _b, _c;\r\n this._antialiasing = true;\r\n this._resolutionStack = [];\r\n this._viewportStack = [];\r\n this._pixelRatioOverride = null;\r\n this._isFullScreen = false;\r\n this._isDisposed = false;\r\n this._logger = Logger.getInstance();\r\n this._fullscreenChangeHandler = () => {\r\n this._isFullScreen = !this._isFullScreen;\r\n this._logger.debug('Fullscreen Change', this._isFullScreen);\r\n };\r\n this._pixelRatioChangeHandler = () => {\r\n this._logger.debug('Pixel Ratio Change', window.devicePixelRatio);\r\n this._listenForPixelRatio();\r\n this._devicePixelRatio = this._calculateDevicePixelRatio();\r\n this.applyResolutionAndViewport();\r\n };\r\n this._resizeHandler = () => {\r\n const parent = this.parent;\r\n this._logger.debug('View port resized');\r\n this._setResolutionAndViewportByDisplayMode(parent);\r\n this.applyResolutionAndViewport();\r\n };\r\n // Asking the window.devicePixelRatio is expensive we do it once\r\n this._devicePixelRatio = this._calculateDevicePixelRatio();\r\n this._alreadyWarned = false;\r\n this._contentArea = new BoundingBox();\r\n this.viewport = options.viewport;\r\n this.resolution = (_a = options.resolution) !== null && _a !== void 0 ? _a : { ...this.viewport };\r\n this._contentResolution = this.resolution;\r\n this._displayMode = (_b = options.displayMode) !== null && _b !== void 0 ? _b : DisplayMode.Fixed;\r\n this._canvas = options.canvas;\r\n this.graphicsContext = options.context;\r\n this._antialiasing = (_c = options.antialiasing) !== null && _c !== void 0 ? _c : this._antialiasing;\r\n this._browser = options.browser;\r\n this._pixelRatioOverride = options.pixelRatio;\r\n this._applyDisplayMode();\r\n this._listenForPixelRatio();\r\n this._canvas.addEventListener('fullscreenchange', this._fullscreenChangeHandler);\r\n this.applyResolutionAndViewport();\r\n }\r\n _listenForPixelRatio() {\r\n if (this._mediaQueryList && !this._mediaQueryList.addEventListener) {\r\n // Safari <=13.1 workaround, remove any existing handlers\r\n this._mediaQueryList.removeListener(this._pixelRatioChangeHandler);\r\n }\r\n this._mediaQueryList = this._browser.window.nativeComponent.matchMedia(`(resolution: ${window.devicePixelRatio}dppx)`);\r\n // Safari <=13.1 workaround\r\n if (this._mediaQueryList.addEventListener) {\r\n this._mediaQueryList.addEventListener('change', this._pixelRatioChangeHandler, { once: true });\r\n }\r\n else {\r\n this._mediaQueryList.addListener(this._pixelRatioChangeHandler);\r\n }\r\n }\r\n dispose() {\r\n if (!this._isDisposed) {\r\n // Clean up handlers\r\n this._isDisposed = true;\r\n this._browser.window.off('resize', this._resizeHandler);\r\n if (this._resizeObserver) {\r\n this._resizeObserver.disconnect();\r\n }\r\n this.parent.removeEventListener('resize', this._resizeHandler);\r\n // Safari <=13.1 workaround\r\n if (this._mediaQueryList.removeEventListener) {\r\n this._mediaQueryList.removeEventListener('change', this._pixelRatioChangeHandler);\r\n }\r\n else {\r\n this._mediaQueryList.removeListener(this._pixelRatioChangeHandler);\r\n }\r\n this._canvas.removeEventListener('fullscreenchange', this._fullscreenChangeHandler);\r\n }\r\n }\r\n _calculateDevicePixelRatio() {\r\n if (window.devicePixelRatio < 1) {\r\n return 1;\r\n }\r\n const devicePixelRatio = window.devicePixelRatio || 1;\r\n return devicePixelRatio;\r\n }\r\n get pixelRatio() {\r\n if (this._pixelRatioOverride) {\r\n return this._pixelRatioOverride;\r\n }\r\n return this._devicePixelRatio;\r\n }\r\n get isHiDpi() {\r\n return this.pixelRatio !== 1;\r\n }\r\n get displayMode() {\r\n return this._displayMode;\r\n }\r\n get canvas() {\r\n return this._canvas;\r\n }\r\n get parent() {\r\n switch (this.displayMode) {\r\n case DisplayMode.FillContainer:\r\n case DisplayMode.FitContainer:\r\n case DisplayMode.FitContainerAndFill:\r\n case DisplayMode.FitContainerAndZoom:\r\n return this.canvas.parentElement || document.body;\r\n default:\r\n return window;\r\n }\r\n }\r\n get resolution() {\r\n return this._resolution;\r\n }\r\n set resolution(resolution) {\r\n this._resolution = resolution;\r\n }\r\n get viewport() {\r\n if (this._viewport) {\r\n return this._viewport;\r\n }\r\n return this._resolution;\r\n }\r\n set viewport(viewport) {\r\n this._viewport = viewport;\r\n }\r\n get aspectRatio() {\r\n return this._resolution.width / this._resolution.height;\r\n }\r\n get scaledWidth() {\r\n return this._resolution.width * this.pixelRatio;\r\n }\r\n get scaledHeight() {\r\n return this._resolution.height * this.pixelRatio;\r\n }\r\n setCurrentCamera(camera) {\r\n this._camera = camera;\r\n }\r\n pushResolutionAndViewport() {\r\n this._resolutionStack.push(this.resolution);\r\n this._viewportStack.push(this.viewport);\r\n this.resolution = { ...this.resolution };\r\n this.viewport = { ...this.viewport };\r\n }\r\n peekViewport() {\r\n return this._viewportStack[this._viewportStack.length - 1];\r\n }\r\n peekResolution() {\r\n return this._resolutionStack[this._resolutionStack.length - 1];\r\n }\r\n popResolutionAndViewport() {\r\n this.resolution = this._resolutionStack.pop();\r\n this.viewport = this._viewportStack.pop();\r\n }\r\n applyResolutionAndViewport() {\r\n this._canvas.width = this.scaledWidth;\r\n this._canvas.height = this.scaledHeight;\r\n if (this.graphicsContext instanceof ExcaliburGraphicsContextWebGL) {\r\n const supported = this.graphicsContext.checkIfResolutionSupported({\r\n width: this.scaledWidth,\r\n height: this.scaledHeight\r\n });\r\n if (!supported && !this._alreadyWarned) {\r\n this._alreadyWarned = true; // warn once\r\n this._logger.warn(`The currently configured resolution (${this.resolution.width}x${this.resolution.height}) and pixel ratio (${this.pixelRatio})` +\r\n ' are too large for the platform WebGL implementation, this may work but cause WebGL rendering to behave oddly.' +\r\n ' Try reducing the resolution or disabling Hi DPI scaling to avoid this' +\r\n ' (read more here https://excaliburjs.com/docs/screens#understanding-viewport--resolution).');\r\n }\r\n }\r\n if (this._antialiasing) {\r\n this._canvas.style.imageRendering = 'auto';\r\n }\r\n else {\r\n this._canvas.style.imageRendering = 'pixelated';\r\n // Fall back to 'crisp-edges' if 'pixelated' is not supported\r\n // Currently for firefox https://developer.mozilla.org/en-US/docs/Web/CSS/image-rendering\r\n if (this._canvas.style.imageRendering === '') {\r\n this._canvas.style.imageRendering = 'crisp-edges';\r\n }\r\n }\r\n this._canvas.style.width = this.viewport.width + 'px';\r\n this._canvas.style.height = this.viewport.height + 'px';\r\n // After messing with the canvas width/height the graphics context is invalidated and needs to have some properties reset\r\n this.graphicsContext.updateViewport(this.resolution);\r\n this.graphicsContext.resetTransform();\r\n this.graphicsContext.smoothing = this._antialiasing;\r\n if (this.graphicsContext instanceof ExcaliburGraphicsContext2DCanvas) {\r\n this.graphicsContext.scale(this.pixelRatio, this.pixelRatio);\r\n }\r\n }\r\n get antialiasing() {\r\n return this._antialiasing;\r\n }\r\n set antialiasing(isSmooth) {\r\n this._antialiasing = isSmooth;\r\n this.graphicsContext.smoothing = this._antialiasing;\r\n }\r\n /**\r\n * Returns true if excalibur is fullscreen using the browser fullscreen api\r\n */\r\n get isFullScreen() {\r\n return this._isFullScreen;\r\n }\r\n /**\r\n * Requests to go fullscreen using the browser fullscreen api, requires user interaction to be successful.\r\n * For example, wire this to a user click handler.\r\n *\r\n * Optionally specify a target element id to go fullscreen, by default the game canvas is used\r\n * @param elementId\r\n */\r\n goFullScreen(elementId) {\r\n if (elementId) {\r\n const maybeElement = document.getElementById(elementId);\r\n if (maybeElement) {\r\n return maybeElement.requestFullscreen();\r\n }\r\n }\r\n return this._canvas.requestFullscreen();\r\n }\r\n /**\r\n * Requests to exit fullscreen using the browser fullscreen api\r\n */\r\n exitFullScreen() {\r\n return document.exitFullscreen();\r\n }\r\n /**\r\n * Takes a coordinate in normal html page space, for example from a pointer move event, and translates it to\r\n * Excalibur screen space.\r\n *\r\n * Excalibur screen space starts at the top left (0, 0) corner of the viewport, and extends to the\r\n * bottom right corner (resolutionX, resolutionY)\r\n * @param point\r\n */\r\n pageToScreenCoordinates(point) {\r\n let newX = point.x;\r\n let newY = point.y;\r\n if (!this._isFullScreen) {\r\n newX -= getPosition(this._canvas).x;\r\n newY -= getPosition(this._canvas).y;\r\n }\r\n // if fullscreen api on it centers with black bars\r\n // we need to adjust the screen to world coordinates in this case\r\n if (this._isFullScreen) {\r\n if (window.innerWidth / this.aspectRatio < window.innerHeight) {\r\n const screenHeight = window.innerWidth / this.aspectRatio;\r\n const screenMarginY = (window.innerHeight - screenHeight) / 2;\r\n newY = ((newY - screenMarginY) / screenHeight) * this.viewport.height;\r\n newX = (newX / window.innerWidth) * this.viewport.width;\r\n }\r\n else {\r\n const screenWidth = window.innerHeight * this.aspectRatio;\r\n const screenMarginX = (window.innerWidth - screenWidth) / 2;\r\n newX = ((newX - screenMarginX) / screenWidth) * this.viewport.width;\r\n newY = (newY / window.innerHeight) * this.viewport.height;\r\n }\r\n }\r\n newX = (newX / this.viewport.width) * this.resolution.width;\r\n newY = (newY / this.viewport.height) * this.resolution.height;\r\n return new Vector(newX, newY);\r\n }\r\n /**\r\n * Takes a coordinate in Excalibur screen space, and translates it to normal html page space. For example,\r\n * this is where html elements might live if you want to position them relative to Excalibur.\r\n *\r\n * Excalibur screen space starts at the top left (0, 0) corner of the viewport, and extends to the\r\n * bottom right corner (resolutionX, resolutionY)\r\n * @param point\r\n */\r\n screenToPageCoordinates(point) {\r\n let newX = point.x;\r\n let newY = point.y;\r\n newX = (newX / this.resolution.width) * this.viewport.width;\r\n newY = (newY / this.resolution.height) * this.viewport.height;\r\n if (this._isFullScreen) {\r\n if (window.innerWidth / this.aspectRatio < window.innerHeight) {\r\n const screenHeight = window.innerWidth / this.aspectRatio;\r\n const screenMarginY = (window.innerHeight - screenHeight) / 2;\r\n newY = (newY / this.viewport.height) * screenHeight + screenMarginY;\r\n newX = (newX / this.viewport.width) * window.innerWidth;\r\n }\r\n else {\r\n const screenWidth = window.innerHeight * this.aspectRatio;\r\n const screenMarginX = (window.innerWidth - screenWidth) / 2;\r\n newX = (newX / this.viewport.width) * screenWidth + screenMarginX;\r\n newY = (newY / this.viewport.height) * window.innerHeight;\r\n }\r\n }\r\n if (!this._isFullScreen) {\r\n newX += getPosition(this._canvas).x;\r\n newY += getPosition(this._canvas).y;\r\n }\r\n return new Vector(newX, newY);\r\n }\r\n /**\r\n * Takes a coordinate in Excalibur screen space, and translates it to Excalibur world space.\r\n *\r\n * World space is where [[Entity|entities]] in Excalibur live by default [[CoordPlane.World]]\r\n * and extends infinitely out relative from the [[Camera]].\r\n * @param point Screen coordinate to convert\r\n */\r\n screenToWorldCoordinates(point) {\r\n // the only difference between screen & world is the camera transform\r\n if (this._camera) {\r\n return this._camera.inverse.multiply(point);\r\n }\r\n return point.sub(vec(this.resolution.width / 2, this.resolution.height / 2));\r\n }\r\n /**\r\n * Takes a coordinate in Excalibur world space, and translates it to Excalibur screen space.\r\n *\r\n * Screen space is where [[ScreenElement|screen elements]] and [[Entity|entities]] with [[CoordPlane.Screen]] live.\r\n * @param point World coordinate to convert\r\n */\r\n worldToScreenCoordinates(point) {\r\n if (this._camera) {\r\n return this._camera.transform.multiply(point);\r\n }\r\n return point.add(vec(this.resolution.width / 2, this.resolution.height / 2));\r\n }\r\n pageToWorldCoordinates(point) {\r\n const screen = this.pageToScreenCoordinates(point);\r\n return this.screenToWorldCoordinates(screen);\r\n }\r\n worldToPageCoordinates(point) {\r\n const screen = this.worldToScreenCoordinates(point);\r\n return this.screenToPageCoordinates(screen);\r\n }\r\n /**\r\n * Returns a BoundingBox of the top left corner of the screen\r\n * and the bottom right corner of the screen.\r\n *\r\n * World bounds are in world coordinates, useful for culling objects offscreen\r\n */\r\n getWorldBounds() {\r\n const bounds = BoundingBox.fromDimension(this.resolution.width, this.resolution.height, Vector.Half)\r\n .scale(vec(1 / this._camera.zoom, 1 / this._camera.zoom))\r\n .rotate(this._camera.rotation)\r\n .translate(this._camera.pos);\r\n return bounds;\r\n }\r\n /**\r\n * The width of the game canvas in pixels (physical width component of the\r\n * resolution of the canvas element)\r\n */\r\n get canvasWidth() {\r\n return this.canvas.width;\r\n }\r\n /**\r\n * Returns half width of the game canvas in pixels (half physical width component)\r\n */\r\n get halfCanvasWidth() {\r\n return this.canvas.width / 2;\r\n }\r\n /**\r\n * The height of the game canvas in pixels, (physical height component of\r\n * the resolution of the canvas element)\r\n */\r\n get canvasHeight() {\r\n return this.canvas.height;\r\n }\r\n /**\r\n * Returns half height of the game canvas in pixels (half physical height component)\r\n */\r\n get halfCanvasHeight() {\r\n return this.canvas.height / 2;\r\n }\r\n /**\r\n * Returns the width of the engine's visible drawing surface in pixels including zoom and device pixel ratio.\r\n */\r\n get drawWidth() {\r\n if (this._camera) {\r\n return this.resolution.width / this._camera.zoom;\r\n }\r\n return this.resolution.width;\r\n }\r\n /**\r\n * Returns half the width of the engine's visible drawing surface in pixels including zoom and device pixel ratio.\r\n */\r\n get halfDrawWidth() {\r\n return this.drawWidth / 2;\r\n }\r\n /**\r\n * Returns the height of the engine's visible drawing surface in pixels including zoom and device pixel ratio.\r\n */\r\n get drawHeight() {\r\n if (this._camera) {\r\n return this.resolution.height / this._camera.zoom;\r\n }\r\n return this.resolution.height;\r\n }\r\n /**\r\n * Returns half the height of the engine's visible drawing surface in pixels including zoom and device pixel ratio.\r\n */\r\n get halfDrawHeight() {\r\n return this.drawHeight / 2;\r\n }\r\n /**\r\n * Returns screen center coordinates including zoom and device pixel ratio.\r\n */\r\n get center() {\r\n return vec(this.halfDrawWidth, this.halfDrawHeight);\r\n }\r\n /**\r\n * Returns the content area in screen space where it is safe to place content\r\n */\r\n get contentArea() {\r\n return this._contentArea;\r\n }\r\n _computeFit() {\r\n document.body.style.margin = '0px';\r\n document.body.style.overflow = 'hidden';\r\n const aspect = this.aspectRatio;\r\n let adjustedWidth = 0;\r\n let adjustedHeight = 0;\r\n if (window.innerWidth / aspect < window.innerHeight) {\r\n adjustedWidth = window.innerWidth;\r\n adjustedHeight = window.innerWidth / aspect;\r\n }\r\n else {\r\n adjustedWidth = window.innerHeight * aspect;\r\n adjustedHeight = window.innerHeight;\r\n }\r\n this.viewport = {\r\n width: adjustedWidth,\r\n height: adjustedHeight\r\n };\r\n this._contentArea = BoundingBox.fromDimension(this.resolution.width, this.resolution.height, Vector.Zero);\r\n }\r\n _computeFitScreenAndFill() {\r\n document.body.style.margin = '0px';\r\n document.body.style.overflow = 'hidden';\r\n const vw = window.innerWidth;\r\n const vh = window.innerHeight;\r\n this._computeFitAndFill(vw, vh);\r\n }\r\n _computeFitContainerAndFill() {\r\n document.body.style.margin = '0px';\r\n document.body.style.overflow = 'hidden';\r\n const parent = this.canvas.parentElement;\r\n const vw = parent.clientWidth;\r\n const vh = parent.clientHeight;\r\n this._computeFitAndFill(vw, vh);\r\n }\r\n _computeFitAndFill(vw, vh) {\r\n this.viewport = {\r\n width: vw,\r\n height: vh\r\n };\r\n // if the current screen aspectRatio is less than the original aspectRatio\r\n if (vw / vh <= this._contentResolution.width / this._contentResolution.height) {\r\n // compute new resolution to match the original aspect ratio\r\n this.resolution = {\r\n width: vw * this._contentResolution.width / vw,\r\n height: vw * this._contentResolution.width / vw * vh / vw\r\n };\r\n const clip = (this.resolution.height - this._contentResolution.height) / 2;\r\n this._contentArea = new BoundingBox({\r\n top: clip,\r\n left: 0,\r\n right: this._contentResolution.width,\r\n bottom: this.resolution.height - clip\r\n });\r\n }\r\n else {\r\n this.resolution = {\r\n width: vh * this._contentResolution.height / vh * vw / vh,\r\n height: vh * this._contentResolution.height / vh\r\n };\r\n const clip = (this.resolution.width - this._contentResolution.width) / 2;\r\n this._contentArea = new BoundingBox({\r\n top: 0,\r\n left: clip,\r\n right: this.resolution.width - clip,\r\n bottom: this._contentResolution.height\r\n });\r\n }\r\n }\r\n _computeFitScreenAndZoom() {\r\n document.body.style.margin = '0px';\r\n document.body.style.overflow = 'hidden';\r\n this.canvas.style.position = 'absolute';\r\n const vw = window.innerWidth;\r\n const vh = window.innerHeight;\r\n this._computeFitAndZoom(vw, vh);\r\n }\r\n _computeFitContainerAndZoom() {\r\n document.body.style.margin = '0px';\r\n document.body.style.overflow = 'hidden';\r\n this.canvas.style.position = 'absolute';\r\n const parent = this.canvas.parentElement;\r\n parent.style.position = 'relative';\r\n parent.style.overflow = 'hidden';\r\n const vw = parent.clientWidth;\r\n const vh = parent.clientHeight;\r\n this._computeFitAndZoom(vw, vh);\r\n }\r\n _computeFitAndZoom(vw, vh) {\r\n const aspect = this.aspectRatio;\r\n let adjustedWidth = 0;\r\n let adjustedHeight = 0;\r\n if (vw / aspect < vh) {\r\n adjustedWidth = vw;\r\n adjustedHeight = vw / aspect;\r\n }\r\n else {\r\n adjustedWidth = vh * aspect;\r\n adjustedHeight = vh;\r\n }\r\n const scaleX = vw / adjustedWidth;\r\n const scaleY = vh / adjustedHeight;\r\n const maxScaleFactor = Math.max(scaleX, scaleY);\r\n const zoomedWidth = adjustedWidth * maxScaleFactor;\r\n const zoomedHeight = adjustedHeight * maxScaleFactor;\r\n // Center zoomed dimension if bigger than the screen\r\n if (zoomedWidth > vw) {\r\n this.canvas.style.left = -(zoomedWidth - vw) / 2 + 'px';\r\n }\r\n else {\r\n this.canvas.style.left = '';\r\n }\r\n if (zoomedHeight > vh) {\r\n this.canvas.style.top = -(zoomedHeight - vh) / 2 + 'px';\r\n }\r\n else {\r\n this.canvas.style.top = '';\r\n }\r\n this.viewport = {\r\n width: zoomedWidth,\r\n height: zoomedHeight\r\n };\r\n const bounds = BoundingBox.fromDimension(this.viewport.width, this.viewport.height, Vector.Zero);\r\n // return safe area\r\n if (this.viewport.width > vw) {\r\n const clip = (this.viewport.width - vw) / this.viewport.width * this.resolution.width;\r\n bounds.top = 0;\r\n bounds.left = clip / 2;\r\n bounds.right = this.resolution.width - clip / 2;\r\n bounds.bottom = this.resolution.height;\r\n }\r\n if (this.viewport.height > vh) {\r\n const clip = (this.viewport.height - vh) / this.viewport.height * this.resolution.height;\r\n bounds.top = clip / 2;\r\n bounds.left = 0;\r\n bounds.bottom = this.resolution.height - clip / 2;\r\n bounds.right = this.resolution.width;\r\n }\r\n this._contentArea = bounds;\r\n }\r\n _computeFitContainer() {\r\n const aspect = this.aspectRatio;\r\n let adjustedWidth = 0;\r\n let adjustedHeight = 0;\r\n const parent = this.canvas.parentElement;\r\n if (parent.clientWidth / aspect < parent.clientHeight) {\r\n adjustedWidth = parent.clientWidth;\r\n adjustedHeight = parent.clientWidth / aspect;\r\n }\r\n else {\r\n adjustedWidth = parent.clientHeight * aspect;\r\n adjustedHeight = parent.clientHeight;\r\n }\r\n this.viewport = {\r\n width: adjustedWidth,\r\n height: adjustedHeight\r\n };\r\n this._contentArea = BoundingBox.fromDimension(this.resolution.width, this.resolution.height, Vector.Zero);\r\n }\r\n _applyDisplayMode() {\r\n this._setResolutionAndViewportByDisplayMode(this.parent);\r\n // watch resizing\r\n if (this.parent instanceof Window) {\r\n this._browser.window.on('resize', this._resizeHandler);\r\n }\r\n else {\r\n this._resizeObserver = new ResizeObserver(() => {\r\n this._resizeHandler();\r\n });\r\n this._resizeObserver.observe(this.parent);\r\n }\r\n this.parent.addEventListener('resize', this._resizeHandler);\r\n }\r\n /**\r\n * Sets the resolution and viewport based on the selected display mode.\r\n */\r\n _setResolutionAndViewportByDisplayMode(parent) {\r\n if (this.displayMode === DisplayMode.FillContainer) {\r\n this.resolution = {\r\n width: parent.clientWidth,\r\n height: parent.clientHeight\r\n };\r\n this.viewport = this.resolution;\r\n }\r\n if (this.displayMode === DisplayMode.FillScreen) {\r\n document.body.style.margin = '0px';\r\n document.body.style.overflow = 'hidden';\r\n this.resolution = {\r\n width: parent.innerWidth,\r\n height: parent.innerHeight\r\n };\r\n this.viewport = this.resolution;\r\n }\r\n this._contentArea = BoundingBox.fromDimension(this.resolution.width, this.resolution.height, Vector.Zero);\r\n if (this.displayMode === DisplayMode.FitScreen) {\r\n this._computeFit();\r\n }\r\n if (this.displayMode === DisplayMode.FitContainer) {\r\n this._computeFitContainer();\r\n }\r\n if (this.displayMode === DisplayMode.FitScreenAndFill) {\r\n this._computeFitScreenAndFill();\r\n }\r\n if (this.displayMode === DisplayMode.FitContainerAndFill) {\r\n this._computeFitContainerAndFill();\r\n }\r\n if (this.displayMode === DisplayMode.FitScreenAndZoom) {\r\n this._computeFitScreenAndZoom();\r\n }\r\n if (this.displayMode === DisplayMode.FitContainerAndZoom) {\r\n this._computeFitContainerAndZoom();\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Resources/Sound/AudioContext.ts\n/**\r\n * Internal class used to build instances of AudioContext\r\n */\r\n/* istanbul ignore next */\r\nclass AudioContextFactory {\r\n static create() {\r\n if (!this._INSTANCE) {\r\n if (window.AudioContext || window.webkitAudioContext) {\r\n this._INSTANCE = new AudioContext();\r\n }\r\n }\r\n return this._INSTANCE;\r\n }\r\n}\r\nAudioContextFactory._INSTANCE = null;\r\n\n;// CONCATENATED MODULE: ./Util/WebAudio.ts\n\r\n\r\n/**\r\n * Patch for detecting legacy web audio in browsers\r\n * @internal\r\n * @param source\r\n */\r\nfunction isLegacyWebAudioSource(source) {\r\n return !!source.playbackState;\r\n}\r\nclass WebAudio {\r\n /**\r\n * Play an empty sound to unlock Safari WebAudio context. Call this function\r\n * right after a user interaction event.\r\n * @source https://paulbakaus.com/tutorials/html5/web-audio-on-ios/\r\n */\r\n static unlock() {\r\n const promise = new Promise((resolve, reject) => {\r\n if (WebAudio._UNLOCKED || !AudioContextFactory.create()) {\r\n return resolve(true);\r\n }\r\n const unlockTimeoutTimer = setTimeout(() => {\r\n Logger.getInstance().warn('Excalibur was unable to unlock the audio context, audio probably will not play in this browser.');\r\n resolve(false);\r\n }, 200);\r\n const audioContext = AudioContextFactory.create();\r\n audioContext.resume().then(() => {\r\n // create empty buffer and play it\r\n const buffer = audioContext.createBuffer(1, 1, 22050);\r\n const source = audioContext.createBufferSource();\r\n let ended = false;\r\n source.buffer = buffer;\r\n source.connect(audioContext.destination);\r\n source.onended = () => (ended = true);\r\n source.start(0);\r\n // by checking the play state after some time, we know if we're really unlocked\r\n setTimeout(() => {\r\n if (isLegacyWebAudioSource(source)) {\r\n if (source.playbackState === source.PLAYING_STATE || source.playbackState === source.FINISHED_STATE) {\r\n WebAudio._UNLOCKED = true;\r\n }\r\n }\r\n else {\r\n if (audioContext.currentTime > 0 || ended) {\r\n WebAudio._UNLOCKED = true;\r\n }\r\n }\r\n }, 0);\r\n clearTimeout(unlockTimeoutTimer);\r\n resolve(true);\r\n }, () => {\r\n reject();\r\n });\r\n });\r\n return promise;\r\n }\r\n static isUnlocked() {\r\n return this._UNLOCKED;\r\n }\r\n}\r\nWebAudio._UNLOCKED = false;\r\n\n;// CONCATENATED MODULE: ./Util/DrawUtil.ts\n\r\n/* istanbul ignore next */\r\n/**\r\n * Draw a line on canvas context\r\n *\r\n * @param ctx The canvas context\r\n * @param color The color of the line\r\n * @param x1 The start x coordinate\r\n * @param y1 The start y coordinate\r\n * @param x2 The ending x coordinate\r\n * @param y2 The ending y coordinate\r\n * @param thickness The line thickness\r\n * @param cap The [[LineCapStyle]] (butt, round, or square)\r\n */\r\nfunction line(ctx, color = Color.Red, x1, y1, x2, y2, thickness = 1, cap = 'butt') {\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.lineWidth = thickness;\r\n ctx.lineCap = cap;\r\n ctx.strokeStyle = color.toString();\r\n ctx.moveTo(x1, y1);\r\n ctx.lineTo(x2, y2);\r\n ctx.closePath();\r\n ctx.stroke();\r\n ctx.restore();\r\n}\r\n/* istanbul ignore next */\r\n/**\r\n * Draw the vector as a point onto the canvas.\r\n */\r\nfunction point(ctx, color = Color.Red, point) {\r\n ctx.beginPath();\r\n ctx.strokeStyle = color.toString();\r\n ctx.arc(point.x, point.y, 5, 0, Math.PI * 2);\r\n ctx.closePath();\r\n ctx.stroke();\r\n}\r\n/**\r\n * Draw the vector as a line onto the canvas starting a origin point.\r\n */\r\n/* istanbul ignore next */\r\n/**\r\n *\r\n */\r\nfunction vector(ctx, color, origin, vector, scale = 1.0) {\r\n const c = color ? color.toString() : 'blue';\r\n const v = vector.scale(scale);\r\n ctx.beginPath();\r\n ctx.strokeStyle = c;\r\n ctx.moveTo(origin.x, origin.y);\r\n ctx.lineTo(origin.x + v.x, origin.y + v.y);\r\n ctx.closePath();\r\n ctx.stroke();\r\n}\r\n/**\r\n * Draw a round rectangle on a canvas context\r\n *\r\n * @param ctx The canvas context\r\n * @param x The top-left x coordinate\r\n * @param y The top-left y coordinate\r\n * @param width The width of the rectangle\r\n * @param height The height of the rectangle\r\n * @param radius The border radius of the rectangle\r\n * @param stroke The [[Color]] to stroke rectangle with\r\n * @param fill The [[Color]] to fill rectangle with\r\n */\r\nfunction roundRect(ctx, x, y, width, height, radius = 5, stroke = Color.White, fill = null) {\r\n let br;\r\n if (typeof radius === 'number') {\r\n br = { tl: radius, tr: radius, br: radius, bl: radius };\r\n }\r\n else {\r\n const defaultRadius = { tl: 0, tr: 0, br: 0, bl: 0 };\r\n for (const prop in defaultRadius) {\r\n if (defaultRadius.hasOwnProperty(prop)) {\r\n const side = prop;\r\n br[side] = radius[side] || defaultRadius[side];\r\n }\r\n }\r\n }\r\n ctx.beginPath();\r\n ctx.moveTo(x + br.tl, y);\r\n ctx.lineTo(x + width - br.tr, y);\r\n ctx.quadraticCurveTo(x + width, y, x + width, y + br.tr);\r\n ctx.lineTo(x + width, y + height - br.br);\r\n ctx.quadraticCurveTo(x + width, y + height, x + width - br.br, y + height);\r\n ctx.lineTo(x + br.bl, y + height);\r\n ctx.quadraticCurveTo(x, y + height, x, y + height - br.bl);\r\n ctx.lineTo(x, y + br.tl);\r\n ctx.quadraticCurveTo(x, y, x + br.tl, y);\r\n ctx.closePath();\r\n if (fill) {\r\n ctx.fillStyle = fill.toString();\r\n ctx.fill();\r\n }\r\n if (stroke) {\r\n ctx.strokeStyle = stroke.toString();\r\n ctx.stroke();\r\n }\r\n}\r\n/**\r\n *\r\n */\r\nfunction circle(ctx, x, y, radius, stroke = Color.White, fill = null) {\r\n ctx.beginPath();\r\n ctx.arc(x, y, radius, 0, Math.PI * 2);\r\n ctx.closePath();\r\n if (fill) {\r\n ctx.fillStyle = fill.toString();\r\n ctx.fill();\r\n }\r\n if (stroke) {\r\n ctx.strokeStyle = stroke.toString();\r\n ctx.stroke();\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Loader.logo.png\n/* harmony default export */ const Loader_logo = (\"data:image/png;base64,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\");\n// EXTERNAL MODULE: ./Loader.css\nvar Loader_0 = __webpack_require__(1388);\n;// CONCATENATED MODULE: ./Graphics/Raster.ts\n\r\n\r\n\r\n\r\n\r\n/**\r\n * A Raster is a Graphic that needs to be first painted to a HTMLCanvasElement before it can be drawn to the\r\n * [[ExcaliburGraphicsContext]]. This is useful for generating custom images using the 2D canvas api.\r\n *\r\n * Implementors must implement the [[Raster.execute]] method to rasterize their drawing.\r\n */\r\nclass Raster extends Graphic {\r\n constructor(options) {\r\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\r\n super(options);\r\n this.filtering = null;\r\n this.lineCap = 'butt';\r\n this.quality = 1;\r\n this._dirty = true;\r\n this._smoothing = false;\r\n this._color = watch(Color.Black, () => this.flagDirty());\r\n this._lineWidth = 1;\r\n this._lineDash = [];\r\n this._padding = 0;\r\n if (options) {\r\n this.quality = (_a = options.quality) !== null && _a !== void 0 ? _a : this.quality;\r\n this.color = (_b = options.color) !== null && _b !== void 0 ? _b : Color.Black;\r\n this.strokeColor = options === null || options === void 0 ? void 0 : options.strokeColor;\r\n this.smoothing = (_c = options.smoothing) !== null && _c !== void 0 ? _c : this.smoothing;\r\n this.lineWidth = (_d = options.lineWidth) !== null && _d !== void 0 ? _d : this.lineWidth;\r\n this.lineDash = (_e = options.lineDash) !== null && _e !== void 0 ? _e : this.lineDash;\r\n this.lineCap = (_f = options.lineCap) !== null && _f !== void 0 ? _f : this.lineCap;\r\n this.padding = (_g = options.padding) !== null && _g !== void 0 ? _g : this.padding;\r\n this.filtering = (_h = options.filtering) !== null && _h !== void 0 ? _h : this.filtering;\r\n }\r\n this._bitmap = document.createElement('canvas');\r\n // get the default canvas width/height as a fallback\r\n const bitmapWidth = (_j = options === null || options === void 0 ? void 0 : options.width) !== null && _j !== void 0 ? _j : this._bitmap.width;\r\n const bitmapHeight = (_k = options === null || options === void 0 ? void 0 : options.height) !== null && _k !== void 0 ? _k : this._bitmap.height;\r\n this.width = bitmapWidth;\r\n this.height = bitmapHeight;\r\n const maybeCtx = this._bitmap.getContext('2d');\r\n if (!maybeCtx) {\r\n /* istanbul ignore next */\r\n throw new Error('Browser does not support 2d canvas drawing, cannot create Raster graphic');\r\n }\r\n else {\r\n this._ctx = maybeCtx;\r\n }\r\n }\r\n cloneRasterOptions() {\r\n return {\r\n color: this.color ? this.color.clone() : null,\r\n strokeColor: this.strokeColor ? this.strokeColor.clone() : null,\r\n smoothing: this.smoothing,\r\n lineWidth: this.lineWidth,\r\n lineDash: this.lineDash,\r\n lineCap: this.lineCap,\r\n quality: this.quality,\r\n padding: this.padding\r\n };\r\n }\r\n /**\r\n * Gets whether the graphic is dirty, this means there are changes that haven't been re-rasterized\r\n */\r\n get dirty() {\r\n return this._dirty;\r\n }\r\n /**\r\n * Flags the graphic as dirty, meaning it must be re-rasterized before draw.\r\n * This should be called any time the graphics state changes such that it affects the outputted drawing\r\n */\r\n flagDirty() {\r\n this._dirty = true;\r\n }\r\n /**\r\n * Gets or sets the current width of the Raster graphic. Setting the width will cause the raster\r\n * to be flagged dirty causing a re-raster on the next draw.\r\n *\r\n * Any `padding`s or `quality` set will be factored into the width\r\n */\r\n get width() {\r\n return Math.abs(this._getTotalWidth() * this.scale.x);\r\n }\r\n set width(value) {\r\n value /= Math.abs(this.scale.x);\r\n this._bitmap.width = value;\r\n this._originalWidth = value;\r\n this.flagDirty();\r\n }\r\n /**\r\n * Gets or sets the current height of the Raster graphic. Setting the height will cause the raster\r\n * to be flagged dirty causing a re-raster on the next draw.\r\n *\r\n * Any `padding` or `quality` set will be factored into the height\r\n */\r\n get height() {\r\n return Math.abs(this._getTotalHeight() * this.scale.y);\r\n }\r\n set height(value) {\r\n value /= Math.abs(this.scale.y);\r\n this._bitmap.height = value;\r\n this._originalHeight = value;\r\n this.flagDirty();\r\n }\r\n _getTotalWidth() {\r\n var _a;\r\n return (((_a = this._originalWidth) !== null && _a !== void 0 ? _a : this._bitmap.width) + this.padding * 2) * 1;\r\n }\r\n _getTotalHeight() {\r\n var _a;\r\n return (((_a = this._originalHeight) !== null && _a !== void 0 ? _a : this._bitmap.height) + this.padding * 2) * 1;\r\n }\r\n /**\r\n * Returns the local bounds of the Raster including the padding\r\n */\r\n get localBounds() {\r\n return BoundingBox.fromDimension(this._getTotalWidth() * this.scale.x, this._getTotalHeight() * this.scale.y, Vector.Zero);\r\n }\r\n /**\r\n * Gets or sets the smoothing (anti-aliasing of the graphic). Setting the height will cause the raster\r\n * to be flagged dirty causing a re-raster on the next draw.\r\n */\r\n get smoothing() {\r\n return this._smoothing;\r\n }\r\n set smoothing(value) {\r\n this._smoothing = value;\r\n this.flagDirty();\r\n }\r\n /**\r\n * Gets or sets the fillStyle of the Raster graphic. Setting the fillStyle will cause the raster to be\r\n * flagged dirty causing a re-raster on the next draw.\r\n */\r\n get color() {\r\n return this._color;\r\n }\r\n set color(value) {\r\n this.flagDirty();\r\n this._color = watch(value, () => this.flagDirty());\r\n }\r\n /**\r\n * Gets or sets the strokeStyle of the Raster graphic. Setting the strokeStyle will cause the raster to be\r\n * flagged dirty causing a re-raster on the next draw.\r\n */\r\n get strokeColor() {\r\n return this._strokeColor;\r\n }\r\n set strokeColor(value) {\r\n this.flagDirty();\r\n this._strokeColor = watch(value, () => this.flagDirty());\r\n }\r\n /**\r\n * Gets or sets the line width of the Raster graphic. Setting the lineWidth will cause the raster to be\r\n * flagged dirty causing a re-raster on the next draw.\r\n */\r\n get lineWidth() {\r\n return this._lineWidth;\r\n }\r\n set lineWidth(value) {\r\n this._lineWidth = value;\r\n this.flagDirty();\r\n }\r\n get lineDash() {\r\n return this._lineDash;\r\n }\r\n set lineDash(value) {\r\n this._lineDash = value;\r\n this.flagDirty();\r\n }\r\n get padding() {\r\n return this._padding;\r\n }\r\n set padding(value) {\r\n this._padding = value;\r\n this.flagDirty();\r\n }\r\n /**\r\n * Rasterize the graphic to a bitmap making it usable as in excalibur. Rasterize is called automatically if\r\n * the graphic is [[Raster.dirty]] on the next [[Graphic.draw]] call\r\n */\r\n rasterize() {\r\n this._dirty = false;\r\n this._ctx.clearRect(0, 0, this._getTotalWidth(), this._getTotalHeight());\r\n this._ctx.save();\r\n this._applyRasterProperties(this._ctx);\r\n this.execute(this._ctx);\r\n this._ctx.restore();\r\n }\r\n _applyRasterProperties(ctx) {\r\n var _a, _b, _c;\r\n this._bitmap.width = this._getTotalWidth() * this.quality;\r\n this._bitmap.height = this._getTotalHeight() * this.quality;\r\n // Do a bad thing to pass the filtering as an attribute\r\n this._bitmap.setAttribute('filtering', this.filtering);\r\n this._bitmap.setAttribute('forceUpload', 'true');\r\n ctx.scale(this.quality, this.quality);\r\n ctx.translate(this.padding, this.padding);\r\n ctx.imageSmoothingEnabled = this.smoothing;\r\n ctx.lineWidth = this.lineWidth;\r\n ctx.setLineDash((_a = this.lineDash) !== null && _a !== void 0 ? _a : ctx.getLineDash());\r\n ctx.lineCap = this.lineCap;\r\n ctx.strokeStyle = (_b = this.strokeColor) === null || _b === void 0 ? void 0 : _b.toString();\r\n ctx.fillStyle = (_c = this.color) === null || _c === void 0 ? void 0 : _c.toString();\r\n }\r\n _drawImage(ex, x, y) {\r\n if (this._dirty) {\r\n this.rasterize();\r\n }\r\n ex.scale(1 / this.quality, 1 / this.quality);\r\n ex.drawImage(this._bitmap, x, y);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Canvas.ts\n\r\n/**\r\n * A canvas [[Graphic]] to provide an adapter between the 2D Canvas API and the [[ExcaliburGraphicsContext]].\r\n *\r\n * The [[Canvas]] works by re-rastering a draw handler to a HTMLCanvasElement for every draw which is then passed\r\n * to the [[ExcaliburGraphicsContext]] implementation as a rendered image.\r\n *\r\n * **Low performance API**\r\n */\r\nclass Canvas extends Raster {\r\n /**\r\n * Return the 2D graphics context of this canvas\r\n */\r\n get ctx() {\r\n return this._ctx;\r\n }\r\n constructor(_options) {\r\n super(_options);\r\n this._options = _options;\r\n }\r\n clone() {\r\n return new Canvas({\r\n ...this._options,\r\n ...this.cloneGraphicOptions(),\r\n ...this.cloneRasterOptions()\r\n });\r\n }\r\n execute(ctx) {\r\n var _a, _b;\r\n if ((_a = this._options) === null || _a === void 0 ? void 0 : _a.draw) {\r\n (_b = this._options) === null || _b === void 0 ? void 0 : _b.draw(ctx);\r\n }\r\n if (!this._options.cache) {\r\n this.flagDirty();\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Interfaces/AudioImplementation.ts\nclass ExResponse {\r\n}\r\nExResponse.type = {\r\n any: '',\r\n blob: 'blob',\r\n json: 'json',\r\n text: 'text',\r\n document: 'document',\r\n arraybuffer: 'arraybuffer'\r\n};\r\n\n;// CONCATENATED MODULE: ./Util/StateMachine.ts\nclass StateMachine {\r\n constructor() {\r\n this.states = new Map();\r\n }\r\n get currentState() {\r\n return this._currentState;\r\n }\r\n set currentState(state) {\r\n this._currentState = state;\r\n }\r\n static create(machineDescription, data) {\r\n const machine = new StateMachine();\r\n machine.data = data;\r\n for (const stateName in machineDescription.states) {\r\n machine.states.set(stateName, {\r\n name: stateName,\r\n ...machineDescription.states[stateName]\r\n });\r\n }\r\n // validate transitions are states\r\n for (const state of machine.states.values()) {\r\n for (const transitionState of state.transitions) {\r\n if (transitionState === '*') {\r\n continue;\r\n }\r\n if (!machine.states.has(transitionState)) {\r\n throw Error(`Invalid state machine, state [${state.name}] has a transition to another state that doesn't exist [${transitionState}]`);\r\n }\r\n }\r\n }\r\n machine.currentState = machine.startState = machine.states.get(machineDescription.start);\r\n return machine;\r\n }\r\n in(state) {\r\n return this.currentState.name === state;\r\n }\r\n go(stateName, eventData) {\r\n var _a, _b;\r\n if (this.currentState.transitions.includes(stateName) || this.currentState.transitions.includes('*')) {\r\n const potentialNewState = this.states.get(stateName);\r\n if (this.currentState.onExit) {\r\n const canExit = (_a = this.currentState) === null || _a === void 0 ? void 0 : _a.onExit({ to: potentialNewState.name, data: this.data });\r\n if (canExit === false) {\r\n return false;\r\n }\r\n }\r\n if (potentialNewState === null || potentialNewState === void 0 ? void 0 : potentialNewState.onEnter) {\r\n const canEnter = potentialNewState === null || potentialNewState === void 0 ? void 0 : potentialNewState.onEnter({ from: this.currentState.name, eventData, data: this.data });\r\n if (canEnter === false) {\r\n return false;\r\n }\r\n }\r\n // console.log(`${this.currentState.name} => ${potentialNewState.name} (${eventData})`);\r\n this.currentState = potentialNewState;\r\n if ((_b = this.currentState) === null || _b === void 0 ? void 0 : _b.onState) {\r\n this.currentState.onState();\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n update(elapsedMs) {\r\n if (this.currentState.onUpdate) {\r\n this.currentState.onUpdate(this.data, elapsedMs);\r\n }\r\n }\r\n save(saveKey) {\r\n localStorage.setItem(saveKey, JSON.stringify({\r\n currentState: this.currentState.name,\r\n data: this.data\r\n }));\r\n }\r\n restore(saveKey) {\r\n const state = JSON.parse(localStorage.getItem(saveKey));\r\n this.currentState = this.states.get(state.currentState);\r\n this.data = state.data;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Resources/Sound/WebAudioInstance.ts\n\r\n\r\n\r\n/**\r\n * Internal class representing a Web Audio AudioBufferSourceNode instance\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API\r\n */\r\nclass WebAudioInstance {\r\n _createNewBufferSource() {\r\n this._instance = this._audioContext.createBufferSource();\r\n this._instance.buffer = this._src;\r\n this._instance.loop = this.loop;\r\n this._instance.playbackRate.value = this._playbackRate;\r\n this._instance.connect(this._volumeNode);\r\n this._volumeNode.connect(this._audioContext.destination);\r\n }\r\n _handleEnd() {\r\n if (!this.loop) {\r\n this._instance.onended = () => {\r\n this._playingResolve(true);\r\n };\r\n }\r\n }\r\n set loop(value) {\r\n this._loop = value;\r\n if (this._instance) {\r\n this._instance.loop = value;\r\n if (!this.loop) {\r\n this._instance.onended = () => {\r\n this._playingResolve(true);\r\n };\r\n }\r\n }\r\n }\r\n get loop() {\r\n return this._loop;\r\n }\r\n set volume(value) {\r\n value = clamp(value, 0, 1.0);\r\n this._volume = value;\r\n if (this._stateMachine.in('PLAYING') && this._volumeNode.gain.setTargetAtTime) {\r\n // https://developer.mozilla.org/en-US/docs/Web/API/AudioParam/setTargetAtTime\r\n // After each .1 seconds timestep, the target value will ~63.2% closer to the target value.\r\n // This exponential ramp provides a more pleasant transition in gain\r\n this._volumeNode.gain.setTargetAtTime(value, this._audioContext.currentTime, 0.1);\r\n }\r\n else {\r\n this._volumeNode.gain.value = value;\r\n }\r\n }\r\n get volume() {\r\n return this._volume;\r\n }\r\n /**\r\n * Returns the set duration to play, otherwise returns the total duration if unset\r\n */\r\n get duration() {\r\n var _a;\r\n return (_a = this._duration) !== null && _a !== void 0 ? _a : this.getTotalPlaybackDuration();\r\n }\r\n /**\r\n * Set the duration that this audio should play.\r\n *\r\n * Note: if you seek to a specific point the duration will start from that point, for example\r\n *\r\n * If you have a 10 second clip, seek to 5 seconds, then set the duration to 2, it will play the clip from 5-7 seconds.\r\n */\r\n set duration(duration) {\r\n this._duration = duration;\r\n }\r\n constructor(_src) {\r\n this._src = _src;\r\n this._audioContext = AudioContextFactory.create();\r\n this._volumeNode = this._audioContext.createGain();\r\n this._playingPromise = new Promise((resolve) => {\r\n this._playingResolve = resolve;\r\n });\r\n this._stateMachine = StateMachine.create({\r\n start: 'STOPPED',\r\n states: {\r\n PLAYING: {\r\n onEnter: ({ data }) => {\r\n // Buffer nodes are single use\r\n this._createNewBufferSource();\r\n this._handleEnd();\r\n if (this.loop) {\r\n // when looping don't set a duration\r\n this._instance.start(0, data.pausedAt * this._playbackRate);\r\n }\r\n else {\r\n this._instance.start(0, data.pausedAt * this._playbackRate, this.duration);\r\n }\r\n data.startedAt = (this._audioContext.currentTime - data.pausedAt);\r\n data.pausedAt = 0;\r\n },\r\n onState: () => this._playStarted(),\r\n onExit: ({ to }) => {\r\n // If you've exited early only resolve if explicitly STOPPED\r\n if (to === 'STOPPED') {\r\n this._playingResolve(true);\r\n }\r\n // Whenever you're not playing... you stop!\r\n this._instance.onended = null; // disconnect the wired on-end handler\r\n this._instance.disconnect();\r\n this._instance.stop(0);\r\n this._instance = null;\r\n },\r\n transitions: ['STOPPED', 'PAUSED', 'SEEK']\r\n },\r\n SEEK: {\r\n onEnter: ({ eventData: position, data }) => {\r\n data.pausedAt = (position !== null && position !== void 0 ? position : 0) / this._playbackRate;\r\n data.startedAt = 0;\r\n },\r\n transitions: ['*']\r\n },\r\n STOPPED: {\r\n onEnter: ({ data }) => {\r\n data.pausedAt = 0;\r\n data.startedAt = 0;\r\n this._playingResolve(true);\r\n },\r\n transitions: ['PLAYING', 'PAUSED', 'SEEK']\r\n },\r\n PAUSED: {\r\n onEnter: ({ data }) => {\r\n // Playback rate will be a scale factor of how fast/slow the audio is being played\r\n // default is 1.0\r\n // we need to invert it to get the time scale\r\n data.pausedAt = (this._audioContext.currentTime - data.startedAt);\r\n },\r\n transitions: ['PLAYING', 'STOPPED', 'SEEK']\r\n }\r\n }\r\n }, {\r\n startedAt: 0,\r\n pausedAt: 0\r\n });\r\n this._volume = 1;\r\n this._loop = false;\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n this._playStarted = () => { };\r\n this._playbackRate = 1.0;\r\n this._createNewBufferSource();\r\n }\r\n isPlaying() {\r\n return this._stateMachine.in('PLAYING');\r\n }\r\n isPaused() {\r\n return this._stateMachine.in('PAUSED') || this._stateMachine.in('SEEK');\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n play(playStarted = () => { }) {\r\n this._playStarted = playStarted;\r\n this._stateMachine.go('PLAYING');\r\n return this._playingPromise;\r\n }\r\n pause() {\r\n this._stateMachine.go('PAUSED');\r\n }\r\n stop() {\r\n this._stateMachine.go('STOPPED');\r\n }\r\n seek(position) {\r\n this._stateMachine.go('PAUSED');\r\n this._stateMachine.go('SEEK', position);\r\n }\r\n getTotalPlaybackDuration() {\r\n return this._src.duration;\r\n }\r\n getPlaybackPosition() {\r\n const { pausedAt, startedAt } = this._stateMachine.data;\r\n if (pausedAt) {\r\n return pausedAt * this._playbackRate;\r\n }\r\n if (startedAt) {\r\n return (this._audioContext.currentTime - startedAt) * this._playbackRate;\r\n }\r\n return 0;\r\n }\r\n set playbackRate(playbackRate) {\r\n this._instance.playbackRate.value = this._playbackRate = playbackRate;\r\n }\r\n get playbackRate() {\r\n return this._instance.playbackRate.value;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Events/MediaEvents.ts\n\r\nclass MediaEvent extends GameEvent {\r\n /**\r\n * Media event cannot bubble\r\n */\r\n set bubbles(_value) {\r\n // stubbed\r\n }\r\n /**\r\n * Media event cannot bubble\r\n */\r\n get bubbles() {\r\n return false;\r\n }\r\n /**\r\n * Media event cannot bubble, so they have no path\r\n */\r\n get _path() {\r\n return null;\r\n }\r\n /**\r\n * Media event cannot bubble, so they have no path\r\n */\r\n set _path(_val) {\r\n // stubbed\r\n }\r\n constructor(target, _name = 'MediaEvent') {\r\n super();\r\n this.target = target;\r\n this._name = _name;\r\n }\r\n /**\r\n * Prevents event from bubbling\r\n */\r\n stopPropagation() {\r\n /**\r\n * Stub\r\n */\r\n }\r\n /**\r\n * Action, that calls when event happens\r\n */\r\n action() {\r\n /**\r\n * Stub\r\n */\r\n }\r\n /**\r\n * Propagate event further through event path\r\n */\r\n propagate() {\r\n /**\r\n * Stub\r\n */\r\n }\r\n layPath(_actor) {\r\n /**\r\n * Stub\r\n */\r\n }\r\n}\r\nclass NativeSoundEvent extends MediaEvent {\r\n constructor(target, track) {\r\n super(target, 'NativeSoundEvent');\r\n this.track = track;\r\n }\r\n}\r\nclass NativeSoundProcessedEvent extends MediaEvent {\r\n constructor(target, _processedData) {\r\n super(target, 'NativeSoundProcessedEvent');\r\n this._processedData = _processedData;\r\n this.data = this._processedData;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Util/Sound.ts\n\r\n/**\r\n * Whether or not the browser can play this file as HTML5 Audio\r\n */\r\nfunction canPlayFile(file) {\r\n try {\r\n const a = new Audio();\r\n const filetype = /.*\\.([A-Za-z0-9]+)(?:(?:\\?|\\#).*)*$/;\r\n const type = file.match(filetype)[1];\r\n if (a.canPlayType('audio/' + type)) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n catch (e) {\r\n Logger.getInstance().warn('Cannot determine audio support, assuming no support for the Audio Tag', e);\r\n return false;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Resources/Sound/Sound.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst SoundEvents = {\r\n VolumeChange: 'volumechange',\r\n Processed: 'processed',\r\n Pause: 'pause',\r\n Stop: 'stop',\r\n PlaybackEnd: 'playbackend',\r\n Resume: 'resume',\r\n PlaybackStart: 'playbackstart'\r\n};\r\n/**\r\n * The [[Sound]] object allows games built in Excalibur to load audio\r\n * components, from soundtracks to sound effects. [[Sound]] is an [[Loadable]]\r\n * which means it can be passed to a [[Loader]] to pre-load before a game or level.\r\n */\r\nclass Sound {\r\n /**\r\n * Indicates whether the clip should loop when complete\r\n * @param value Set the looping flag\r\n */\r\n set loop(value) {\r\n this._loop = value;\r\n for (const track of this._tracks) {\r\n track.loop = this._loop;\r\n }\r\n this.logger.debug('Set loop for all instances of sound', this.path, 'to', this._loop);\r\n }\r\n get loop() {\r\n return this._loop;\r\n }\r\n set volume(value) {\r\n this._volume = value;\r\n for (const track of this._tracks) {\r\n track.volume = this._volume;\r\n }\r\n this.events.emit('volumechange', new NativeSoundEvent(this));\r\n this.logger.debug('Set loop for all instances of sound', this.path, 'to', this._volume);\r\n }\r\n get volume() {\r\n return this._volume;\r\n }\r\n /**\r\n * Get the duration that this audio should play. If unset the total natural playback duration will be used.\r\n */\r\n get duration() {\r\n return this._duration;\r\n }\r\n /**\r\n * Set the duration that this audio should play. If unset the total natural playback duration will be used.\r\n *\r\n * Note: if you seek to a specific point the duration will start from that point, for example\r\n *\r\n * If you have a 10 second clip, seek to 5 seconds, then set the duration to 2, it will play the clip from 5-7 seconds.\r\n */\r\n set duration(duration) {\r\n this._duration = duration;\r\n }\r\n /**\r\n * Return array of Current AudioInstances playing or being paused\r\n */\r\n get instances() {\r\n return this._tracks;\r\n }\r\n get path() {\r\n return this._resource.path;\r\n }\r\n set path(val) {\r\n this._resource.path = val;\r\n }\r\n /**\r\n * Should excalibur add a cache busting querystring? By default false.\r\n * Must be set before loading\r\n */\r\n get bustCache() {\r\n return this._resource.bustCache;\r\n }\r\n set bustCache(val) {\r\n this._resource.bustCache = val;\r\n }\r\n /**\r\n * @param paths A list of audio sources (clip.wav, clip.mp3, clip.ogg) for this audio clip. This is done for browser compatibility.\r\n */\r\n constructor(...paths) {\r\n this.events = new EventEmitter();\r\n this.logger = Logger.getInstance();\r\n this._loop = false;\r\n this._volume = 1;\r\n this._isStopped = false;\r\n // private _isPaused = false;\r\n this._tracks = [];\r\n this._wasPlayingOnHidden = false;\r\n this._playbackRate = 1.0;\r\n this._audioContext = AudioContextFactory.create();\r\n this._resource = new Resource('', ExResponse.type.arraybuffer);\r\n /**\r\n * Chrome : MP3, WAV, Ogg\r\n * Firefox : WAV, Ogg,\r\n * IE : MP3, WAV coming soon\r\n * Safari MP3, WAV, Ogg\r\n */\r\n for (const path of paths) {\r\n if (canPlayFile(path)) {\r\n this.path = path;\r\n break;\r\n }\r\n }\r\n if (!this.path) {\r\n this.logger.warn('This browser does not support any of the audio files specified:', paths.join(', '));\r\n this.logger.warn('Attempting to use', paths[0]);\r\n this.path = paths[0]; // select the first specified\r\n }\r\n }\r\n isLoaded() {\r\n return !!this.data;\r\n }\r\n async load() {\r\n var _a, _b;\r\n if (this.data) {\r\n return this.data;\r\n }\r\n const arraybuffer = await this._resource.load();\r\n const audiobuffer = await this.decodeAudio(arraybuffer.slice(0));\r\n this._duration = (_b = (_a = this._duration) !== null && _a !== void 0 ? _a : audiobuffer === null || audiobuffer === void 0 ? void 0 : audiobuffer.duration) !== null && _b !== void 0 ? _b : undefined;\r\n this.events.emit('processed', new NativeSoundProcessedEvent(this, audiobuffer));\r\n return this.data = audiobuffer;\r\n }\r\n async decodeAudio(data) {\r\n try {\r\n return await this._audioContext.decodeAudioData(data.slice(0));\r\n }\r\n catch (e) {\r\n this.logger.error('Unable to decode ' +\r\n ' this browser may not fully support this format, or the file may be corrupt, ' +\r\n 'if this is an mp3 try removing id3 tags and album art from the file.');\r\n return await Promise.reject();\r\n }\r\n }\r\n wireEngine(engine) {\r\n if (engine) {\r\n this._engine = engine;\r\n this._engine.on('hidden', () => {\r\n if (engine.pauseAudioWhenHidden && this.isPlaying()) {\r\n this._wasPlayingOnHidden = true;\r\n this.pause();\r\n }\r\n });\r\n this._engine.on('visible', () => {\r\n if (engine.pauseAudioWhenHidden && this._wasPlayingOnHidden) {\r\n this.play();\r\n this._wasPlayingOnHidden = false;\r\n }\r\n });\r\n this._engine.on('start', () => {\r\n this._isStopped = false;\r\n });\r\n this._engine.on('stop', () => {\r\n this.stop();\r\n this._isStopped = true;\r\n });\r\n }\r\n }\r\n /**\r\n * Returns how many instances of the sound are currently playing\r\n */\r\n instanceCount() {\r\n return this._tracks.length;\r\n }\r\n /**\r\n * Whether or not the sound is playing right now\r\n */\r\n isPlaying() {\r\n return this._tracks.some((t) => t.isPlaying());\r\n }\r\n isPaused() {\r\n return this._tracks.some(t => t.isPaused());\r\n }\r\n /**\r\n * Play the sound, returns a promise that resolves when the sound is done playing\r\n * An optional volume argument can be passed in to play the sound. Max volume is 1.0\r\n */\r\n play(volume) {\r\n if (!this.isLoaded()) {\r\n this.logger.warn('Cannot start playing. Resource', this.path, 'is not loaded yet');\r\n return Promise.resolve(true);\r\n }\r\n if (this._isStopped) {\r\n this.logger.warn('Cannot start playing. Engine is in a stopped state.');\r\n return Promise.resolve(false);\r\n }\r\n this.volume = volume || this.volume;\r\n if (this.isPaused()) {\r\n return this._resumePlayback();\r\n }\r\n else {\r\n return this._startPlayback();\r\n }\r\n }\r\n /**\r\n * Stop the sound, and do not rewind\r\n */\r\n pause() {\r\n if (!this.isPlaying()) {\r\n return;\r\n }\r\n for (const track of this._tracks) {\r\n track.pause();\r\n }\r\n this.events.emit('pause', new NativeSoundEvent(this));\r\n this.logger.debug('Paused all instances of sound', this.path);\r\n }\r\n /**\r\n * Stop the sound if it is currently playing and rewind the track. If the sound is not playing, rewinds the track.\r\n */\r\n stop() {\r\n for (const track of this._tracks) {\r\n track.stop();\r\n }\r\n this.events.emit('stop', new NativeSoundEvent(this));\r\n this._tracks.length = 0;\r\n this.logger.debug('Stopped all instances of sound', this.path);\r\n }\r\n get playbackRate() {\r\n return this._playbackRate;\r\n }\r\n set playbackRate(playbackRate) {\r\n this._playbackRate = playbackRate;\r\n this._tracks.forEach(t => {\r\n t.playbackRate = this._playbackRate;\r\n });\r\n }\r\n seek(position, trackId = 0) {\r\n if (this._tracks.length === 0) {\r\n this._getTrackInstance(this.data);\r\n }\r\n this._tracks[trackId].seek(position);\r\n }\r\n getTotalPlaybackDuration() {\r\n return this.data.duration;\r\n }\r\n /**\r\n * Return the current playback time of the playing track in seconds from the start.\r\n *\r\n * Optionally specify the track to query if multiple are playing at once.\r\n * @param trackId\r\n */\r\n getPlaybackPosition(trackId = 0) {\r\n if (this._tracks.length) {\r\n return this._tracks[trackId].getPlaybackPosition();\r\n }\r\n return 0;\r\n }\r\n /**\r\n * Get Id of provided AudioInstance in current trackList\r\n * @param track [[Audio]] which Id is to be given\r\n */\r\n getTrackId(track) {\r\n return this._tracks.indexOf(track);\r\n }\r\n async _resumePlayback() {\r\n if (this.isPaused) {\r\n const resumed = [];\r\n // ensure we resume *current* tracks (if paused)\r\n for (const track of this._tracks) {\r\n resumed.push(track.play().then(() => {\r\n this.events.emit('playbackend', new NativeSoundEvent(this, track));\r\n this._tracks.splice(this.getTrackId(track), 1);\r\n return true;\r\n }));\r\n }\r\n this.events.emit('resume', new NativeSoundEvent(this));\r\n this.logger.debug('Resuming paused instances for sound', this.path, this._tracks);\r\n // resolve when resumed tracks are done\r\n await Promise.all(resumed);\r\n }\r\n return true;\r\n }\r\n /**\r\n * Starts playback, returns a promise that resolves when playback is complete\r\n */\r\n async _startPlayback() {\r\n const track = await this._getTrackInstance(this.data);\r\n const complete = await track.play(() => {\r\n this.events.emit('playbackstart', new NativeSoundEvent(this, track));\r\n this.logger.debug('Playing new instance for sound', this.path);\r\n });\r\n // when done, remove track\r\n this.events.emit('playbackend', new NativeSoundEvent(this, track));\r\n this._tracks.splice(this.getTrackId(track), 1);\r\n return complete;\r\n }\r\n _getTrackInstance(data) {\r\n const newTrack = new WebAudioInstance(data);\r\n newTrack.loop = this.loop;\r\n newTrack.volume = this.volume;\r\n newTrack.duration = this.duration;\r\n newTrack.playbackRate = this._playbackRate;\r\n this._tracks.push(newTrack);\r\n return newTrack;\r\n }\r\n emit(eventName, event) {\r\n this.events.emit(eventName, event);\r\n }\r\n on(eventName, handler) {\r\n return this.events.on(eventName, handler);\r\n }\r\n once(eventName, handler) {\r\n return this.events.once(eventName, handler);\r\n }\r\n off(eventName, handler) {\r\n this.events.off(eventName, handler);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Loader.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst LoaderEvents = {\r\n// Add event types here\r\n};\r\n/**\r\n * Pre-loading assets\r\n *\r\n * The loader provides a mechanism to preload multiple resources at\r\n * one time. The loader must be passed to the engine in order to\r\n * trigger the loading progress bar.\r\n *\r\n * The [[Loader]] itself implements [[Loadable]] so you can load loaders.\r\n *\r\n * ## Example: Pre-loading resources for a game\r\n *\r\n * ```js\r\n * // create a loader\r\n * var loader = new ex.Loader();\r\n *\r\n * // create a resource dictionary (best practice is to keep a separate file)\r\n * var resources = {\r\n * TextureGround: new ex.Texture(\"/images/textures/ground.png\"),\r\n * SoundDeath: new ex.Sound(\"/sound/death.wav\", \"/sound/death.mp3\")\r\n * };\r\n *\r\n * // loop through dictionary and add to loader\r\n * for (var loadable in resources) {\r\n * if (resources.hasOwnProperty(loadable)) {\r\n * loader.addResource(resources[loadable]);\r\n * }\r\n * }\r\n *\r\n * // start game\r\n * game.start(loader).then(function () {\r\n * console.log(\"Game started!\");\r\n * });\r\n * ```\r\n *\r\n * ## Customize the Loader\r\n *\r\n * The loader can be customized to show different, text, logo, background color, and button.\r\n *\r\n * ```typescript\r\n * const loader = new ex.Loader([playerTexture]);\r\n *\r\n * // The loaders button text can simply modified using this\r\n * loader.playButtonText = 'Start the best game ever';\r\n *\r\n * // The logo can be changed by inserting a base64 image string here\r\n *\r\n * loader.logo = 'data:image/png;base64,iVBORw...';\r\n * loader.logoWidth = 15;\r\n * loader.logoHeight = 14;\r\n *\r\n * // The background color can be changed like so by supplying a valid CSS color string\r\n *\r\n * loader.backgroundColor = 'red'\r\n * loader.backgroundColor = '#176BAA'\r\n *\r\n * // To build a completely new button\r\n * loader.startButtonFactory = () => {\r\n * let myButton = document.createElement('button');\r\n * myButton.textContent = 'The best button';\r\n * return myButton;\r\n * };\r\n *\r\n * engine.start(loader).then(() => {});\r\n * ```\r\n */\r\nclass Loader {\r\n get _image() {\r\n if (!this._imageElement) {\r\n this._imageElement = new Image();\r\n this._imageElement.src = this.logo;\r\n }\r\n return this._imageElement;\r\n }\r\n get playButtonRootElement() {\r\n return this._playButtonRootElement;\r\n }\r\n get playButtonElement() {\r\n return this._playButtonElement;\r\n }\r\n get _playButton() {\r\n const existingRoot = document.getElementById('excalibur-play-root');\r\n if (existingRoot) {\r\n this._playButtonRootElement = existingRoot;\r\n }\r\n if (!this._playButtonRootElement) {\r\n this._playButtonRootElement = document.createElement('div');\r\n this._playButtonRootElement.id = 'excalibur-play-root';\r\n this._playButtonRootElement.style.position = 'absolute';\r\n document.body.appendChild(this._playButtonRootElement);\r\n }\r\n if (!this._styleBlock) {\r\n this._styleBlock = document.createElement('style');\r\n this._styleBlock.textContent = this._playButtonStyles;\r\n document.head.appendChild(this._styleBlock);\r\n }\r\n if (!this._playButtonElement) {\r\n this._playButtonElement = this.startButtonFactory();\r\n this._playButtonRootElement.appendChild(this._playButtonElement);\r\n }\r\n return this._playButtonElement;\r\n }\r\n /**\r\n * @param loadables Optionally provide the list of resources you want to load at constructor time\r\n */\r\n constructor(loadables) {\r\n this.events = new EventEmitter();\r\n this.canvas = new Canvas({\r\n filtering: ImageFiltering.Blended,\r\n smoothing: true,\r\n cache: true,\r\n draw: this.draw.bind(this)\r\n });\r\n this._resourceList = [];\r\n this._index = 0;\r\n this._playButtonShown = false;\r\n this._resourceCount = 0;\r\n this._numLoaded = 0;\r\n this._progressCounts = {};\r\n this._totalCounts = {};\r\n // logo drawing stuff\r\n // base64 string encoding of the excalibur logo (logo-white.png)\r\n this.logo = Loader_logo;\r\n this.logoWidth = 468;\r\n this.logoHeight = 118;\r\n /**\r\n * Gets or sets the color of the loading bar, default is [[Color.White]]\r\n */\r\n this.loadingBarColor = Color.White;\r\n /**\r\n * Gets or sets the background color of the loader as a hex string\r\n */\r\n this.backgroundColor = '#176BAA';\r\n this.suppressPlayButton = false;\r\n /** Loads the css from Loader.css */\r\n this._playButtonStyles = Loader_0/* default */.Z.toString();\r\n /**\r\n * Get/set play button text\r\n */\r\n this.playButtonText = 'Play game';\r\n /**\r\n * Return a html button element for excalibur to use as a play button\r\n */\r\n this.startButtonFactory = () => {\r\n let buttonElement = document.getElementById('excalibur-play');\r\n if (!buttonElement) {\r\n buttonElement = document.createElement('button');\r\n }\r\n buttonElement.id = 'excalibur-play';\r\n buttonElement.textContent = this.playButtonText;\r\n buttonElement.style.display = 'none';\r\n return buttonElement;\r\n };\r\n this._loadingFuture = new Future();\r\n if (loadables) {\r\n this.addResources(loadables);\r\n }\r\n }\r\n wireEngine(engine) {\r\n this._engine = engine;\r\n this.canvas.width = this._engine.canvas.width;\r\n this.canvas.height = this._engine.canvas.height;\r\n }\r\n /**\r\n * Add a resource to the loader to load\r\n * @param loadable Resource to add\r\n */\r\n addResource(loadable) {\r\n const key = this._index++;\r\n this._resourceList.push(loadable);\r\n this._progressCounts[key] = 0;\r\n this._totalCounts[key] = 1;\r\n this._resourceCount++;\r\n }\r\n /**\r\n * Add a list of resources to the loader to load\r\n * @param loadables The list of resources to load\r\n */\r\n addResources(loadables) {\r\n let i = 0;\r\n const len = loadables.length;\r\n for (i; i < len; i++) {\r\n this.addResource(loadables[i]);\r\n }\r\n }\r\n /**\r\n * Returns true if the loader has completely loaded all resources\r\n */\r\n isLoaded() {\r\n return this._numLoaded === this._resourceCount;\r\n }\r\n /**\r\n * Shows the play button and returns a promise that resolves when clicked\r\n */\r\n async showPlayButton() {\r\n var _a, _b;\r\n if (this.suppressPlayButton) {\r\n this.hidePlayButton();\r\n // Delay is to give the logo a chance to show, otherwise don't delay\r\n await delay(500, (_a = this._engine) === null || _a === void 0 ? void 0 : _a.clock);\r\n }\r\n else {\r\n const resizeHandler = () => {\r\n this._positionPlayButton();\r\n };\r\n if ((_b = this._engine) === null || _b === void 0 ? void 0 : _b.browser) {\r\n this._engine.browser.window.on('resize', resizeHandler);\r\n }\r\n this._playButtonShown = true;\r\n this._playButton.style.display = 'block';\r\n document.body.addEventListener('keyup', (evt) => {\r\n if (evt.key === 'Enter') {\r\n this._playButton.click();\r\n }\r\n });\r\n this._positionPlayButton();\r\n const playButtonClicked = new Promise((resolve) => {\r\n const startButtonHandler = (e) => {\r\n var _a;\r\n // We want to stop propagation to keep bubbling to the engine pointer handlers\r\n e.stopPropagation();\r\n // Hide Button after click\r\n this.hidePlayButton();\r\n if ((_a = this._engine) === null || _a === void 0 ? void 0 : _a.browser) {\r\n this._engine.browser.window.off('resize', resizeHandler);\r\n }\r\n resolve();\r\n };\r\n this._playButton.addEventListener('click', startButtonHandler);\r\n this._playButton.addEventListener('touchend', startButtonHandler);\r\n this._playButton.addEventListener('pointerup', startButtonHandler);\r\n });\r\n return await playButtonClicked;\r\n }\r\n }\r\n hidePlayButton() {\r\n this._playButtonShown = false;\r\n this._playButton.style.display = 'none';\r\n }\r\n /**\r\n * Clean up generated elements for the loader\r\n */\r\n dispose() {\r\n if (this._playButtonRootElement.parentElement) {\r\n this._playButtonRootElement.removeChild(this._playButtonElement);\r\n document.body.removeChild(this._playButtonRootElement);\r\n document.head.removeChild(this._styleBlock);\r\n this._playButtonRootElement = null;\r\n this._playButtonElement = null;\r\n this._styleBlock = null;\r\n }\r\n }\r\n update(_engine, _delta) {\r\n // override me\r\n }\r\n areResourcesLoaded() {\r\n return this._loadingFuture.promise;\r\n }\r\n /**\r\n * Begin loading all of the supplied resources, returning a promise\r\n * that resolves when loading of all is complete AND the user has clicked the \"Play button\"\r\n */\r\n async load() {\r\n var _a, _b;\r\n await ((_a = this._image) === null || _a === void 0 ? void 0 : _a.decode()); // decode logo if it exists\r\n this.canvas.flagDirty();\r\n await Promise.all(this._resourceList.map(async (r) => {\r\n await r.load().finally(() => {\r\n // capture progress\r\n this._numLoaded++;\r\n this.canvas.flagDirty();\r\n });\r\n }));\r\n // Wire all sound to the engine\r\n for (const resource of this._resourceList) {\r\n if (resource instanceof Sound) {\r\n resource.wireEngine(this._engine);\r\n }\r\n }\r\n this._loadingFuture.resolve();\r\n // short delay in showing the button for aesthetics\r\n await delay(200, (_b = this._engine) === null || _b === void 0 ? void 0 : _b.clock);\r\n this.canvas.flagDirty();\r\n await this.showPlayButton();\r\n // Unlock browser AudioContext in after user gesture\r\n // See: https://github.com/excaliburjs/Excalibur/issues/262\r\n // See: https://github.com/excaliburjs/Excalibur/issues/1031\r\n await WebAudio.unlock();\r\n return (this.data = this._resourceList);\r\n }\r\n markResourceComplete() {\r\n this._numLoaded++;\r\n }\r\n /**\r\n * Returns the progress of the loader as a number between [0, 1] inclusive.\r\n */\r\n get progress() {\r\n return this._resourceCount > 0 ? clamp(this._numLoaded, 0, this._resourceCount) / this._resourceCount : 1;\r\n }\r\n _positionPlayButton() {\r\n if (this._engine) {\r\n const screenHeight = this._engine.screen.viewport.height;\r\n const screenWidth = this._engine.screen.viewport.width;\r\n if (this._playButtonRootElement) {\r\n const left = this._engine.canvas.offsetLeft;\r\n const top = this._engine.canvas.offsetTop;\r\n const buttonWidth = this._playButton.clientWidth;\r\n const buttonHeight = this._playButton.clientHeight;\r\n if (this.playButtonPosition) {\r\n this._playButtonRootElement.style.left = `${this.playButtonPosition.x}px`;\r\n this._playButtonRootElement.style.top = `${this.playButtonPosition.y}px`;\r\n }\r\n else {\r\n this._playButtonRootElement.style.left = `${left + screenWidth / 2 - buttonWidth / 2}px`;\r\n this._playButtonRootElement.style.top = `${top + screenHeight / 2 - buttonHeight / 2 + 100}px`;\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Loader draw function. Draws the default Excalibur loading screen.\r\n * Override `logo`, `logoWidth`, `logoHeight` and `backgroundColor` properties\r\n * to customize the drawing, or just override entire method.\r\n */\r\n draw(ctx) {\r\n const canvasHeight = this._engine.canvasHeight / this._engine.pixelRatio;\r\n const canvasWidth = this._engine.canvasWidth / this._engine.pixelRatio;\r\n this._positionPlayButton();\r\n ctx.fillStyle = this.backgroundColor;\r\n ctx.fillRect(0, 0, canvasWidth, canvasHeight);\r\n let logoY = canvasHeight / 2;\r\n const width = Math.min(this.logoWidth, canvasWidth * 0.75);\r\n let logoX = canvasWidth / 2 - width / 2;\r\n if (this.logoPosition) {\r\n logoX = this.logoPosition.x;\r\n logoY = this.logoPosition.y;\r\n }\r\n const imageHeight = Math.floor(width * (this.logoHeight / this.logoWidth)); // OG height/width factor\r\n const oldAntialias = this._engine.getAntialiasing();\r\n this._engine.setAntialiasing(true);\r\n if (!this.logoPosition) {\r\n ctx.drawImage(this._image, 0, 0, this.logoWidth, this.logoHeight, logoX, logoY - imageHeight - 20, width, imageHeight);\r\n }\r\n else {\r\n ctx.drawImage(this._image, 0, 0, this.logoWidth, this.logoHeight, logoX, logoY, width, imageHeight);\r\n }\r\n // loading box\r\n if (!this.suppressPlayButton && this._playButtonShown) {\r\n this._engine.setAntialiasing(oldAntialias);\r\n return;\r\n }\r\n let loadingX = logoX;\r\n let loadingY = logoY;\r\n if (this.loadingBarPosition) {\r\n loadingX = this.loadingBarPosition.x;\r\n loadingY = this.loadingBarPosition.y;\r\n }\r\n ctx.lineWidth = 2;\r\n roundRect(ctx, loadingX, loadingY, width, 20, 10, this.loadingBarColor);\r\n const progress = width * this.progress;\r\n const margin = 5;\r\n const progressWidth = progress - margin * 2;\r\n const height = 20 - margin * 2;\r\n roundRect(ctx, loadingX + margin, loadingY + margin, progressWidth > 10 ? progressWidth : 10, height, 5, null, this.loadingBarColor);\r\n this._engine.setAntialiasing(oldAntialias);\r\n }\r\n emit(eventName, event) {\r\n this.events.emit(eventName, event);\r\n }\r\n on(eventName, handler) {\r\n return this.events.on(eventName, handler);\r\n }\r\n once(eventName, handler) {\r\n return this.events.once(eventName, handler);\r\n }\r\n off(eventName, handler) {\r\n this.events.off(eventName, handler);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Util/Detector.ts\n\r\n/**\r\n * This is the list of features that will be used to log the supported\r\n * features to the console when Detector.logBrowserFeatures() is called.\r\n */\r\nconst REPORTED_FEATURES = {\r\n webgl: 'WebGL',\r\n webaudio: 'WebAudio',\r\n gamepadapi: 'Gamepad API'\r\n};\r\n/**\r\n * Excalibur internal feature detection helper class\r\n */\r\nclass Detector {\r\n constructor() {\r\n this._features = null;\r\n this.failedTests = [];\r\n // critical browser features required for ex to run\r\n this._criticalTests = {\r\n // Test canvas/2d context support\r\n canvasSupport: function () {\r\n const elem = document.createElement('canvas');\r\n return !!(elem.getContext && elem.getContext('2d'));\r\n },\r\n // Test array buffer support ex uses for downloading binary data\r\n arrayBufferSupport: function () {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open('GET', '/');\r\n try {\r\n xhr.responseType = 'arraybuffer';\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n return xhr.responseType === 'arraybuffer';\r\n },\r\n // Test data urls ex uses for sprites\r\n dataUrlSupport: function () {\r\n const canvas = document.createElement('canvas');\r\n return canvas.toDataURL('image/png').indexOf('data:image/png') === 0;\r\n },\r\n // Test object url support for loading\r\n objectUrlSupport: function () {\r\n return 'URL' in window && 'revokeObjectURL' in URL && 'createObjectURL' in URL;\r\n },\r\n // RGBA support for colors\r\n rgbaSupport: function () {\r\n const style = document.createElement('a').style;\r\n style.cssText = 'background-color:rgba(150,255,150,.5)';\r\n return ('' + style.backgroundColor).indexOf('rgba') > -1;\r\n }\r\n };\r\n // warnings excalibur performance will be degraded\r\n this._warningTest = {\r\n webAudioSupport: function () {\r\n return !!(window.AudioContext ||\r\n window.webkitAudioContext ||\r\n window.mozAudioContext ||\r\n window.msAudioContext ||\r\n window.oAudioContext);\r\n },\r\n webglSupport: function () {\r\n const elem = document.createElement('canvas');\r\n return !!(elem.getContext && elem.getContext('webgl'));\r\n }\r\n };\r\n this._features = this._loadBrowserFeatures();\r\n }\r\n /**\r\n * Returns a map of currently supported browser features. This method\r\n * treats the features as a singleton and will only calculate feature\r\n * support if it has not previously been done.\r\n */\r\n getBrowserFeatures() {\r\n if (this._features === null) {\r\n this._features = this._loadBrowserFeatures();\r\n }\r\n return this._features;\r\n }\r\n /**\r\n * Report on non-critical browser support for debugging purposes.\r\n * Use native browser console colors for visibility.\r\n */\r\n logBrowserFeatures() {\r\n let msg = '%cSUPPORTED BROWSER FEATURES\\n==========================%c\\n';\r\n const args = ['font-weight: bold; color: navy', 'font-weight: normal; color: inherit'];\r\n const supported = this.getBrowserFeatures();\r\n for (const feature of Object.keys(REPORTED_FEATURES)) {\r\n if (supported[feature]) {\r\n msg += '(%c\\u2713%c)'; // (✓)\r\n args.push('font-weight: bold; color: green');\r\n args.push('font-weight: normal; color: inherit');\r\n }\r\n else {\r\n msg += '(%c\\u2717%c)'; // (✗)\r\n args.push('font-weight: bold; color: red');\r\n args.push('font-weight: normal; color: inherit');\r\n }\r\n msg += ' ' + REPORTED_FEATURES[feature] + '\\n';\r\n }\r\n args.unshift(msg);\r\n // eslint-disable-next-line no-console\r\n console.log.apply(console, args);\r\n }\r\n /**\r\n * Executes several IIFE's to get a constant reference to supported\r\n * features within the current execution context.\r\n */\r\n _loadBrowserFeatures() {\r\n return {\r\n // IIFE to check canvas support\r\n canvas: (() => {\r\n return this._criticalTests.canvasSupport();\r\n })(),\r\n // IIFE to check arraybuffer support\r\n arraybuffer: (() => {\r\n return this._criticalTests.arrayBufferSupport();\r\n })(),\r\n // IIFE to check dataurl support\r\n dataurl: (() => {\r\n return this._criticalTests.dataUrlSupport();\r\n })(),\r\n // IIFE to check objecturl support\r\n objecturl: (() => {\r\n return this._criticalTests.objectUrlSupport();\r\n })(),\r\n // IIFE to check rgba support\r\n rgba: (() => {\r\n return this._criticalTests.rgbaSupport();\r\n })(),\r\n // IIFE to check webaudio support\r\n webaudio: (() => {\r\n return this._warningTest.webAudioSupport();\r\n })(),\r\n // IIFE to check webgl support\r\n webgl: (() => {\r\n return this._warningTest.webglSupport();\r\n })(),\r\n // IIFE to check gamepadapi support\r\n gamepadapi: (() => {\r\n return !!navigator.getGamepads;\r\n })()\r\n };\r\n }\r\n test() {\r\n // Critical test will for ex not to run\r\n let failedCritical = false;\r\n for (const test in this._criticalTests) {\r\n if (!this._criticalTests[test].call(this)) {\r\n this.failedTests.push(test);\r\n Logger.getInstance().error('Critical browser feature missing, Excalibur requires:', test);\r\n failedCritical = true;\r\n }\r\n }\r\n if (failedCritical) {\r\n return false;\r\n }\r\n // Warning tests do not for ex to return false to compatibility\r\n for (const warning in this._warningTest) {\r\n if (!this._warningTest[warning]()) {\r\n Logger.getInstance().warn('Warning browser feature missing, Excalibur will have reduced performance:', warning);\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/CollisionType.ts\n/**\r\n * An enum that describes the types of collisions bodies can participate in\r\n */\r\nvar CollisionType;\r\n(function (CollisionType) {\r\n /**\r\n * Bodies with the `PreventCollision` setting do not participate in any\r\n * collisions and do not raise collision events.\r\n */\r\n CollisionType[\"PreventCollision\"] = \"PreventCollision\";\r\n /**\r\n * Bodies with the `Passive` setting only raise collision events, but are not\r\n * influenced or moved by other bodies and do not influence or move other bodies.\r\n * This is useful for use in trigger type behavior.\r\n */\r\n CollisionType[\"Passive\"] = \"Passive\";\r\n /**\r\n * Bodies with the `Active` setting raise collision events and participate\r\n * in collisions with other bodies and will be push or moved by bodies sharing\r\n * the `Active` or `Fixed` setting.\r\n */\r\n CollisionType[\"Active\"] = \"Active\";\r\n /**\r\n * Bodies with the `Fixed` setting raise collision events and participate in\r\n * collisions with other bodies. Actors with the `Fixed` setting will not be\r\n * pushed or moved by other bodies sharing the `Fixed`. Think of Fixed\r\n * bodies as \"immovable/unstoppable\" objects. If two `Fixed` bodies meet they will\r\n * not be pushed or moved by each other, they will not interact except to throw\r\n * collision events.\r\n */\r\n CollisionType[\"Fixed\"] = \"Fixed\";\r\n})(CollisionType || (CollisionType = {}));\r\n\n;// CONCATENATED MODULE: ./Util/Decorators.ts\n\r\n\r\nconst maxMessages = 5;\r\nconst obsoleteMessage = {};\r\nconst resetObsoleteCounter = () => {\r\n for (const message in obsoleteMessage) {\r\n obsoleteMessage[message] = 0;\r\n }\r\n};\r\nconst logMessage = (message, options) => {\r\n const suppressObsoleteMessages = Flags.isEnabled('suppress-obsolete-message');\r\n if (obsoleteMessage[message] < maxMessages && !suppressObsoleteMessages) {\r\n Logger.getInstance().warn(message);\r\n // tslint:disable-next-line: no-console\r\n if (console.trace && options.showStackTrace) {\r\n // tslint:disable-next-line: no-console\r\n console.trace();\r\n }\r\n }\r\n obsoleteMessage[message]++;\r\n};\r\n/**\r\n * Obsolete decorator for marking Excalibur methods obsolete, you can optionally specify a custom message and/or alternate replacement\r\n * method do the deprecated one. Inspired by https://github.com/jayphelps/core-decorators.js\r\n */\r\nfunction obsolete(options) {\r\n options = {\r\n message: 'This feature will be removed in future versions of Excalibur.',\r\n alternateMethod: null,\r\n showStackTrace: false,\r\n ...options\r\n };\r\n return function (target, property, descriptor) {\r\n if (descriptor &&\r\n !(typeof descriptor.value === 'function' || typeof descriptor.get === 'function' || typeof descriptor.set === 'function')) {\r\n throw new SyntaxError('Only classes/functions/getters/setters can be marked as obsolete');\r\n }\r\n const methodSignature = `${target.name || ''}${target.name && property ? '.' : ''}${property ? property : ''}`;\r\n const message = `${methodSignature} is marked obsolete: ${options.message}` +\r\n (options.alternateMethod ? ` Use ${options.alternateMethod} instead` : '');\r\n if (!obsoleteMessage[message]) {\r\n obsoleteMessage[message] = 0;\r\n }\r\n // If descriptor is null it is a class\r\n const method = descriptor ? { ...descriptor } : target;\r\n if (!descriptor) {\r\n // with es2015 classes we need to change our decoration tactic\r\n class DecoratedClass extends method {\r\n constructor(...args) {\r\n logMessage(message, options);\r\n super(...args);\r\n }\r\n }\r\n return DecoratedClass;\r\n }\r\n if (descriptor && descriptor.value) {\r\n method.value = function () {\r\n logMessage(message, options);\r\n return descriptor.value.apply(this, arguments);\r\n };\r\n return method;\r\n }\r\n if (descriptor && descriptor.get) {\r\n method.get = function () {\r\n logMessage(message, options);\r\n return descriptor.get.apply(this, arguments);\r\n };\r\n }\r\n if (descriptor && descriptor.set) {\r\n method.set = function () {\r\n logMessage(message, options);\r\n return descriptor.set.apply(this, arguments);\r\n };\r\n }\r\n return method;\r\n };\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Physics.ts\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\n\r\n\r\n/**\r\n * Possible collision resolution strategies\r\n *\r\n * The default is [[CollisionResolutionStrategy.Arcade]] which performs simple axis aligned arcade style physics. This is useful for things\r\n * like platformers or top down games.\r\n *\r\n * More advanced rigid body physics are enabled by setting [[CollisionResolutionStrategy.Realistic]] which allows for complicated\r\n * simulated physical interactions.\r\n */\r\nvar CollisionResolutionStrategy;\r\n(function (CollisionResolutionStrategy) {\r\n CollisionResolutionStrategy[\"Arcade\"] = \"arcade\";\r\n CollisionResolutionStrategy[\"Realistic\"] = \"realistic\";\r\n})(CollisionResolutionStrategy || (CollisionResolutionStrategy = {}));\r\n/**\r\n * Possible broadphase collision pair identification strategies\r\n *\r\n * The default strategy is [[BroadphaseStrategy.DynamicAABBTree]] which uses a binary tree of axis-aligned bounding boxes to identify\r\n * potential collision pairs which is O(nlog(n)) faster.\r\n */\r\nvar BroadphaseStrategy;\r\n(function (BroadphaseStrategy) {\r\n BroadphaseStrategy[BroadphaseStrategy[\"DynamicAABBTree\"] = 0] = \"DynamicAABBTree\";\r\n})(BroadphaseStrategy || (BroadphaseStrategy = {}));\r\n/**\r\n * Possible numerical integrators for position and velocity\r\n */\r\nvar Integrator;\r\n(function (Integrator) {\r\n Integrator[Integrator[\"Euler\"] = 0] = \"Euler\";\r\n})(Integrator || (Integrator = {}));\r\n/**\r\n * The [[Physics]] object is the global configuration object for all Excalibur physics.\r\n */\r\n/* istanbul ignore next */\r\nclass Physics {\r\n static get gravity() {\r\n return Physics.acc;\r\n }\r\n static set gravity(v) {\r\n Physics.acc = v;\r\n }\r\n /**\r\n * Configures Excalibur to use \"arcade\" physics. Arcade physics which performs simple axis aligned arcade style physics.\r\n */\r\n static useArcadePhysics() {\r\n Physics.collisionResolutionStrategy = CollisionResolutionStrategy.Arcade;\r\n }\r\n /**\r\n * Configures Excalibur to use rigid body physics. Rigid body physics allows for complicated\r\n * simulated physical interactions.\r\n */\r\n static useRealisticPhysics() {\r\n Physics.collisionResolutionStrategy = CollisionResolutionStrategy.Realistic;\r\n }\r\n static get dynamicTreeVelocityMultiplyer() {\r\n return Physics.dynamicTreeVelocityMultiplier;\r\n }\r\n static set dynamicTreeVelocityMultiplyer(value) {\r\n Physics.dynamicTreeVelocityMultiplier = value;\r\n }\r\n}\r\n/**\r\n * Global acceleration that is applied to all vanilla actors that have a [[CollisionType.Active|active]] collision type.\r\n * Global acceleration won't effect [[Label|labels]], [[ScreenElement|ui actors]], or [[Trigger|triggers]] in Excalibur.\r\n *\r\n * This is a great way to globally simulate effects like gravity.\r\n */\r\nPhysics.acc = new Vector(0, 0);\r\n/**\r\n * Globally switches all Excalibur physics behavior on or off.\r\n */\r\nPhysics.enabled = true;\r\n/**\r\n * Gets or sets the broadphase pair identification strategy.\r\n *\r\n * The default strategy is [[BroadphaseStrategy.DynamicAABBTree]] which uses a binary tree of axis-aligned bounding boxes to identify\r\n * potential collision pairs which is O(nlog(n)) faster.\r\n */\r\nPhysics.broadphaseStrategy = BroadphaseStrategy.DynamicAABBTree;\r\n/**\r\n * Gets or sets the global collision resolution strategy (narrowphase).\r\n *\r\n * The default is [[CollisionResolutionStrategy.Arcade]] which performs simple axis aligned arcade style physics.\r\n *\r\n * More advanced rigid body physics are enabled by setting [[CollisionResolutionStrategy.Realistic]] which allows for complicated\r\n * simulated physical interactions.\r\n */\r\nPhysics.collisionResolutionStrategy = CollisionResolutionStrategy.Arcade;\r\n/**\r\n * The default mass to use if none is specified\r\n */\r\nPhysics.defaultMass = 10;\r\n/**\r\n * Gets or sets the position and velocity positional integrator, currently only Euler is supported.\r\n */\r\nPhysics.integrator = Integrator.Euler;\r\n/**\r\n * Factor to add to the RigidBody BoundingBox, bounding box (dimensions += vel * dynamicTreeVelocityMultiplier);\r\n */\r\nPhysics.dynamicTreeVelocityMultiplier = 2;\r\n/**\r\n * Pad RigidBody BoundingBox by a constant amount\r\n */\r\nPhysics.boundsPadding = 5;\r\n/**\r\n * Number of position iterations (overlap) to run in the solver\r\n */\r\nPhysics.positionIterations = 3;\r\n/**\r\n * Number of velocity iteration (response) to run in the solver\r\n */\r\nPhysics.velocityIterations = 8;\r\n/**\r\n * Amount of overlap to tolerate in pixels\r\n */\r\nPhysics.slop = 1;\r\n/**\r\n * Amount of positional overlap correction to apply each position iteration of the solver\r\n * O - meaning no correction, 1 - meaning correct all overlap\r\n */\r\nPhysics.steeringFactor = 0.2;\r\n/**\r\n * Warm start set to true re-uses impulses from previous frames back in the solver\r\n */\r\nPhysics.warmStart = true;\r\n/**\r\n * By default bodies do not sleep\r\n */\r\nPhysics.bodiesCanSleepByDefault = false;\r\n/**\r\n * Surface epsilon is used to help deal with surface penetration\r\n */\r\nPhysics.surfaceEpsilon = 0.1;\r\nPhysics.sleepEpsilon = 0.07;\r\nPhysics.wakeThreshold = Physics.sleepEpsilon * 3;\r\nPhysics.sleepBias = 0.9;\r\n/**\r\n * Enable fast moving body checking, this enables checking for collision pairs via raycast for fast moving objects to prevent\r\n * bodies from tunneling through one another.\r\n */\r\nPhysics.checkForFastBodies = true;\r\n/**\r\n * Disable minimum fast moving body raycast, by default if ex.Physics.checkForFastBodies = true Excalibur will only check if the\r\n * body is moving at least half of its minimum dimension in an update. If ex.Physics.disableMinimumSpeedForFastBody is set to true,\r\n * Excalibur will always perform the fast body raycast regardless of speed.\r\n */\r\nPhysics.disableMinimumSpeedForFastBody = false;\r\n__decorate([\r\n obsolete({\r\n message: 'Alias for incorrect spelling used in older versions, will be removed in v0.25.0',\r\n alternateMethod: 'dynamicTreeVelocityMultiplier'\r\n })\r\n], Physics, \"dynamicTreeVelocityMultiplyer\", null);\r\n\n;// CONCATENATED MODULE: ./Math/coord-plane.ts\n/**\r\n * Enum representing the coordinate plane for the position 2D vector in the [[TransformComponent]]\r\n */\r\nvar CoordPlane;\r\n(function (CoordPlane) {\r\n /**\r\n * The world coordinate plane (default) represents world space, any entities drawn with world\r\n * space move when the camera moves.\r\n */\r\n CoordPlane[\"World\"] = \"world\";\r\n /**\r\n * The screen coordinate plane represents screen space, entities drawn in screen space are pinned\r\n * to screen coordinates ignoring the camera.\r\n */\r\n CoordPlane[\"Screen\"] = \"screen\";\r\n})(CoordPlane || (CoordPlane = {}));\r\n\n;// CONCATENATED MODULE: ./Math/vector-view.ts\n\r\nclass VectorView extends Vector {\r\n constructor(options) {\r\n super(0, 0);\r\n this._getX = options.getX;\r\n this._getY = options.getY;\r\n this._setX = options.setX;\r\n this._setY = options.setY;\r\n }\r\n get x() {\r\n return (this._x = this._getX());\r\n }\r\n set x(val) {\r\n this._setX(val);\r\n this._x = val;\r\n }\r\n get y() {\r\n return (this._y = this._getY());\r\n }\r\n set y(val) {\r\n this._setY(val);\r\n this._y = val;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Math/watch-vector.ts\n\r\n/**\r\n * Wraps a vector and watches for changes in the x/y, modifies the original vector.\r\n */\r\nclass WatchVector extends Vector {\r\n constructor(original, change) {\r\n super(original.x, original.y);\r\n this.original = original;\r\n this.change = change;\r\n }\r\n get x() {\r\n return this._x = this.original.x;\r\n }\r\n set x(newX) {\r\n this.change(newX, this._y);\r\n this._x = this.original.x = newX;\r\n }\r\n get y() {\r\n return this._y = this.original.y;\r\n }\r\n set y(newY) {\r\n this.change(this._x, newY);\r\n this._y = this.original.y = newY;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Math/transform.ts\n\r\n\r\n\r\n\r\n\r\nclass Transform {\r\n constructor() {\r\n this._parent = null;\r\n this._children = [];\r\n this._pos = vec(0, 0);\r\n this._rotation = 0;\r\n this._scale = vec(1, 1);\r\n this._isDirty = false;\r\n this._isInverseDirty = false;\r\n this._matrix = AffineMatrix.identity();\r\n this._inverse = AffineMatrix.identity();\r\n }\r\n get parent() {\r\n return this._parent;\r\n }\r\n set parent(transform) {\r\n if (this._parent) {\r\n const index = this._parent._children.indexOf(this);\r\n if (index > -1) {\r\n this._parent._children.splice(index, 1);\r\n }\r\n }\r\n this._parent = transform;\r\n if (this._parent) {\r\n this._parent._children.push(this);\r\n }\r\n this.flagDirty();\r\n }\r\n get children() {\r\n return this._children;\r\n }\r\n set pos(v) {\r\n if (!v.equals(this._pos)) {\r\n this._pos.x = v.x;\r\n this._pos.y = v.y;\r\n this.flagDirty();\r\n }\r\n }\r\n get pos() {\r\n return new WatchVector(this._pos, (x, y) => {\r\n if (x !== this._pos.x || y !== this._pos.y) {\r\n this.flagDirty();\r\n }\r\n });\r\n }\r\n set globalPos(v) {\r\n let localPos = v.clone();\r\n if (this.parent) {\r\n localPos = this.parent.inverse.multiply(v);\r\n }\r\n if (!localPos.equals(this._pos)) {\r\n this._pos = localPos;\r\n this.flagDirty();\r\n }\r\n }\r\n get globalPos() {\r\n return new VectorView({\r\n getX: () => this.matrix.data[4],\r\n getY: () => this.matrix.data[5],\r\n setX: (x) => {\r\n if (this.parent) {\r\n const { x: newX } = this.parent.inverse.multiply(vec(x, this.pos.y));\r\n this.pos.x = newX;\r\n }\r\n else {\r\n this.pos.x = x;\r\n }\r\n if (x !== this.matrix.data[4]) {\r\n this.flagDirty();\r\n }\r\n },\r\n setY: (y) => {\r\n if (this.parent) {\r\n const { y: newY } = this.parent.inverse.multiply(vec(this.pos.x, y));\r\n this.pos.y = newY;\r\n }\r\n else {\r\n this.pos.y = y;\r\n }\r\n if (y !== this.matrix.data[5]) {\r\n this.flagDirty();\r\n }\r\n }\r\n });\r\n }\r\n set rotation(rotation) {\r\n const canonRotation = canonicalizeAngle(rotation);\r\n if (canonRotation !== this._rotation) {\r\n this.flagDirty();\r\n }\r\n this._rotation = canonRotation;\r\n }\r\n get rotation() {\r\n return this._rotation;\r\n }\r\n set globalRotation(rotation) {\r\n let inverseRotation = 0;\r\n if (this.parent) {\r\n inverseRotation = this.parent.globalRotation;\r\n }\r\n const canonRotation = canonicalizeAngle(rotation + inverseRotation);\r\n if (canonRotation !== this._rotation) {\r\n this.flagDirty();\r\n }\r\n this._rotation = canonRotation;\r\n }\r\n get globalRotation() {\r\n if (this.parent) {\r\n return this.matrix.getRotation();\r\n }\r\n return this.rotation;\r\n }\r\n set scale(v) {\r\n if (!v.equals(this._scale)) {\r\n this._scale.x = v.x;\r\n this._scale.y = v.y;\r\n this.flagDirty();\r\n }\r\n }\r\n get scale() {\r\n return new WatchVector(this._scale, (x, y) => {\r\n if (x !== this._scale.x || y !== this._scale.y) {\r\n this.flagDirty();\r\n }\r\n });\r\n }\r\n set globalScale(v) {\r\n let inverseScale = vec(1, 1);\r\n if (this.parent) {\r\n inverseScale = this.parent.globalScale;\r\n }\r\n this.scale = v.scale(vec(1 / inverseScale.x, 1 / inverseScale.y));\r\n }\r\n get globalScale() {\r\n return new VectorView({\r\n getX: () => this.parent ? this.matrix.getScaleX() : this.scale.x,\r\n getY: () => this.parent ? this.matrix.getScaleY() : this.scale.y,\r\n setX: (x) => {\r\n if (this.parent) {\r\n const globalScaleX = this.parent.globalScale.x;\r\n this.scale.x = x / globalScaleX;\r\n }\r\n else {\r\n this.scale.x = x;\r\n }\r\n },\r\n setY: (y) => {\r\n if (this.parent) {\r\n const globalScaleY = this.parent.globalScale.y;\r\n this.scale.y = y / globalScaleY;\r\n }\r\n else {\r\n this.scale.y = y;\r\n }\r\n }\r\n });\r\n }\r\n get matrix() {\r\n if (this._isDirty) {\r\n if (this.parent === null) {\r\n this._matrix = this._calculateMatrix();\r\n }\r\n else {\r\n this._matrix = this.parent.matrix.multiply(this._calculateMatrix());\r\n }\r\n this._isDirty = false;\r\n }\r\n return this._matrix;\r\n }\r\n get inverse() {\r\n if (this._isInverseDirty) {\r\n this._inverse = this.matrix.inverse();\r\n this._isInverseDirty = false;\r\n }\r\n return this._inverse;\r\n }\r\n _calculateMatrix() {\r\n const matrix = AffineMatrix.identity()\r\n .translate(this.pos.x, this.pos.y)\r\n .rotate(this.rotation)\r\n .scale(this.scale.x, this.scale.y);\r\n return matrix;\r\n }\r\n flagDirty() {\r\n this._isDirty = true;\r\n this._isInverseDirty = true;\r\n for (let i = 0; i < this._children.length; i++) {\r\n this._children[i].flagDirty();\r\n }\r\n }\r\n apply(point) {\r\n return this.matrix.multiply(point);\r\n }\r\n applyInverse(point) {\r\n return this.inverse.multiply(point);\r\n }\r\n setTransform(pos, rotation, scale) {\r\n this._pos.x = pos.x;\r\n this._pos.y = pos.y;\r\n this._rotation = canonicalizeAngle(rotation);\r\n this._scale.x = scale.x;\r\n this._scale.y = scale.y;\r\n this.flagDirty();\r\n }\r\n clone(dest) {\r\n const target = dest !== null && dest !== void 0 ? dest : new Transform();\r\n this._pos.clone(target._pos);\r\n target._rotation = this._rotation;\r\n this._scale.clone(target._scale);\r\n target.flagDirty();\r\n return target;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./EntityComponentSystem/Component.ts\n/**\r\n * Type guard to check if a component implements clone\r\n * @param x\r\n */\r\nfunction hasClone(x) {\r\n return !!(x === null || x === void 0 ? void 0 : x.clone);\r\n}\r\n/**\r\n * Components are containers for state in Excalibur, the are meant to convey capabilities that an Entity possesses\r\n *\r\n * Implementations of Component must have a zero-arg constructor to support dependencies\r\n *\r\n * ```typescript\r\n * class MyComponent extends ex.Component<'my'> {\r\n * public readonly type = 'my';\r\n * // zero arg support required if you want to use component dependencies\r\n * constructor(public optionalPos?: ex.Vector) {}\r\n * }\r\n * ```\r\n */\r\nclass Component {\r\n constructor() {\r\n /**\r\n * Current owning [[Entity]], if any, of this component. Null if not added to any [[Entity]]\r\n */\r\n this.owner = null;\r\n }\r\n /**\r\n * Clones any properties on this component, if that property value has a `clone()` method it will be called\r\n */\r\n clone() {\r\n const newComponent = new this.constructor();\r\n for (const prop in this) {\r\n if (this.hasOwnProperty(prop)) {\r\n const val = this[prop];\r\n if (hasClone(val) && prop !== 'owner' && prop !== 'clone') {\r\n newComponent[prop] = val.clone();\r\n }\r\n else {\r\n newComponent[prop] = val;\r\n }\r\n }\r\n }\r\n return newComponent;\r\n }\r\n}\r\n/**\r\n * Tag components are a way of tagging a component with label and a simple value\r\n *\r\n * For example:\r\n *\r\n * ```typescript\r\n * const isOffscreen = new TagComponent('offscreen');\r\n * entity.addComponent(isOffscreen);\r\n * entity.tags.includes\r\n * ```\r\n */\r\nclass TagComponent extends Component {\r\n constructor(type, value) {\r\n super();\r\n this.type = type;\r\n this.value = value;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Util/Observable.ts\n/**\r\n * Simple Observable implementation\r\n * @template T is the typescript Type that defines the data being observed\r\n */\r\nclass Observable {\r\n constructor() {\r\n this.observers = [];\r\n this.subscriptions = [];\r\n }\r\n /**\r\n * Register an observer to listen to this observable\r\n * @param observer\r\n */\r\n register(observer) {\r\n this.observers.push(observer);\r\n }\r\n /**\r\n * Register a callback to listen to this observable\r\n * @param func\r\n */\r\n subscribe(func) {\r\n this.subscriptions.push(func);\r\n }\r\n /**\r\n * Remove an observer from the observable\r\n * @param observer\r\n */\r\n unregister(observer) {\r\n const i = this.observers.indexOf(observer);\r\n if (i !== -1) {\r\n this.observers.splice(i, 1);\r\n }\r\n }\r\n /**\r\n * Remove a callback that is listening to this observable\r\n * @param func\r\n */\r\n unsubscribe(func) {\r\n const i = this.subscriptions.indexOf(func);\r\n if (i !== -1) {\r\n this.subscriptions.splice(i, 1);\r\n }\r\n }\r\n /**\r\n * Broadcasts a message to all observers and callbacks\r\n * @param message\r\n */\r\n notifyAll(message) {\r\n const observersLength = this.observers.length;\r\n for (let i = 0; i < observersLength; i++) {\r\n this.observers[i].notify(message);\r\n }\r\n const subscriptionsLength = this.subscriptions.length;\r\n for (let i = 0; i < subscriptionsLength; i++) {\r\n this.subscriptions[i](message);\r\n }\r\n }\r\n /**\r\n * Removes all observers and callbacks\r\n */\r\n clear() {\r\n this.observers.length = 0;\r\n this.subscriptions.length = 0;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./EntityComponentSystem/Components/TransformComponent.ts\n\r\n\r\n\r\n\r\nclass TransformComponent extends Component {\r\n constructor() {\r\n super(...arguments);\r\n this.type = 'ex.transform';\r\n this._transform = new Transform();\r\n this._addChildTransform = (child) => {\r\n const childTxComponent = child.get(TransformComponent);\r\n if (childTxComponent) {\r\n childTxComponent._transform.parent = this._transform;\r\n }\r\n };\r\n /**\r\n * Observable that emits when the z index changes on this component\r\n */\r\n this.zIndexChanged$ = new Observable();\r\n this._z = 0;\r\n /**\r\n * The [[CoordPlane|coordinate plane|]] for this transform for the entity.\r\n */\r\n this.coordPlane = CoordPlane.World;\r\n }\r\n get() {\r\n return this._transform;\r\n }\r\n onAdd(owner) {\r\n for (const child of owner.children) {\r\n this._addChildTransform(child);\r\n }\r\n owner.childrenAdded$.subscribe(child => this._addChildTransform(child));\r\n owner.childrenRemoved$.subscribe(child => {\r\n const childTxComponent = child.get(TransformComponent);\r\n if (childTxComponent) {\r\n childTxComponent._transform.parent = null;\r\n }\r\n });\r\n }\r\n onRemove(_previousOwner) {\r\n this._transform.parent = null;\r\n }\r\n /**\r\n * The z-index ordering of the entity, a higher values are drawn on top of lower values.\r\n * For example z=99 would be drawn on top of z=0.\r\n */\r\n get z() {\r\n return this._z;\r\n }\r\n set z(val) {\r\n const oldz = this._z;\r\n this._z = val;\r\n if (oldz !== val) {\r\n this.zIndexChanged$.notifyAll(val);\r\n }\r\n }\r\n get pos() {\r\n return this._transform.pos;\r\n }\r\n set pos(v) {\r\n this._transform.pos = v;\r\n }\r\n get globalPos() {\r\n return this._transform.globalPos;\r\n }\r\n set globalPos(v) {\r\n this._transform.globalPos = v;\r\n }\r\n get rotation() {\r\n return this._transform.rotation;\r\n }\r\n set rotation(rotation) {\r\n this._transform.rotation = rotation;\r\n }\r\n get globalRotation() {\r\n return this._transform.globalRotation;\r\n }\r\n set globalRotation(rotation) {\r\n this._transform.globalRotation = rotation;\r\n }\r\n get scale() {\r\n return this._transform.scale;\r\n }\r\n set scale(v) {\r\n this._transform.scale = v;\r\n }\r\n get globalScale() {\r\n return this._transform.globalScale;\r\n }\r\n set globalScale(v) {\r\n this._transform.globalScale = v;\r\n }\r\n applyInverse(v) {\r\n return this._transform.applyInverse(v);\r\n }\r\n apply(v) {\r\n return this._transform.apply(v);\r\n }\r\n clone() {\r\n const component = new TransformComponent();\r\n component._transform = this._transform.clone();\r\n component._z = this._z;\r\n return component;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./EntityComponentSystem/Components/MotionComponent.ts\n\r\n\r\nclass MotionComponent extends Component {\r\n constructor() {\r\n super(...arguments);\r\n this.type = 'ex.motion';\r\n /**\r\n * The velocity of an entity in pixels per second\r\n */\r\n this.vel = Vector.Zero;\r\n /**\r\n * The acceleration of entity in pixels per second^2\r\n */\r\n this.acc = Vector.Zero;\r\n /**\r\n * The scale rate of change in scale units per second\r\n */\r\n this.scaleFactor = Vector.Zero;\r\n /**\r\n * The angular velocity which is how quickly the entity is rotating in radians per second\r\n */\r\n this.angularVelocity = 0;\r\n /**\r\n * The amount of torque applied to the entity, angular acceleration is torque * inertia\r\n */\r\n this.torque = 0;\r\n /**\r\n * Inertia can be thought of as the resistance to motion\r\n */\r\n this.inertia = 1;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Group/CollisionGroup.ts\n/**\r\n * CollisionGroups indicate like members that do not collide with each other. Use [[CollisionGroupManager]] to create [[CollisionGroup]]s\r\n *\r\n * For example:\r\n *\r\n * Players have collision group \"player\"\r\n *\r\n * ![Player Collision Group](/assets/images/docs/CollisionGroupsPlayer.png)\r\n *\r\n * Enemies have collision group \"enemy\"\r\n *\r\n * ![Enemy Collision Group](/assets/images/docs/CollisionGroupsEnemy.png)\r\n *\r\n * Blocks have collision group \"ground\"\r\n *\r\n * ![Ground collision group](/assets/images/docs/CollisionGroupsGround.png)\r\n *\r\n * Players don't collide with each other, but enemies and blocks. Likewise, enemies don't collide with each other but collide\r\n * with players and blocks.\r\n *\r\n * This is done with bitmasking, see the following pseudo-code\r\n *\r\n * PlayerGroup = `0b001`\r\n * PlayerGroupMask = `0b110`\r\n *\r\n * EnemyGroup = `0b010`\r\n * EnemyGroupMask = `0b101`\r\n *\r\n * BlockGroup = `0b100`\r\n * BlockGroupMask = `0b011`\r\n *\r\n * Should Players collide? No because the bitwise mask evaluates to 0\r\n * `(player1.group & player2.mask) === 0`\r\n * `(0b001 & 0b110) === 0`\r\n *\r\n * Should Players and Enemies collide? Yes because the bitwise mask is non-zero\r\n * `(player1.group & enemy1.mask) === 1`\r\n * `(0b001 & 0b101) === 1`\r\n *\r\n * Should Players and Blocks collide? Yes because the bitwise mask is non-zero\r\n * `(player1.group & blocks1.mask) === 1`\r\n * `(0b001 & 0b011) === 1`\r\n */\r\nclass CollisionGroup {\r\n /**\r\n * STOP!!** It is preferred that [[CollisionGroupManager.create]] is used to create collision groups\r\n * unless you know how to construct the proper bitmasks. See https://github.com/excaliburjs/Excalibur/issues/1091 for more info.\r\n * @param name Name of the collision group\r\n * @param category 32 bit category for the group, should be a unique power of 2. For example `0b001` or `0b010`\r\n * @param mask 32 bit mask of category, or `~category` generally. For a category of `0b001`, the mask would be `0b110`\r\n */\r\n constructor(name, category, mask) {\r\n this._name = name;\r\n this._category = category;\r\n this._mask = mask;\r\n }\r\n /**\r\n * Get the name of the collision group\r\n */\r\n get name() {\r\n return this._name;\r\n }\r\n /**\r\n * Get the category of the collision group, a 32 bit number which should be a unique power of 2\r\n */\r\n get category() {\r\n return this._category;\r\n }\r\n /**\r\n * Get the mask for this collision group\r\n */\r\n get mask() {\r\n return this._mask;\r\n }\r\n /**\r\n * Evaluates whether 2 collision groups can collide\r\n * @param other CollisionGroup\r\n */\r\n canCollide(other) {\r\n return (this.category & other.mask) !== 0 && (other.category & this.mask) !== 0;\r\n }\r\n /**\r\n * Inverts the collision group. For example, if before the group specified \"players\",\r\n * inverting would specify all groups except players\r\n * @returns CollisionGroup\r\n */\r\n invert() {\r\n return new CollisionGroup('~(' + this.name + ')', ~this.category, ~this.mask);\r\n }\r\n /**\r\n * Combine collision groups with each other. The new group includes all of the previous groups.\r\n *\r\n * @param collisionGroups\r\n */\r\n static combine(collisionGroups) {\r\n const combinedName = collisionGroups.map((c) => c.name).join('+');\r\n const combinedCategory = collisionGroups.reduce((current, g) => g.category | current, 0b0);\r\n const combinedMask = ~combinedCategory;\r\n return new CollisionGroup(combinedName, combinedCategory, combinedMask);\r\n }\r\n /**\r\n * Creates a collision group that collides with the listed groups\r\n * @param collisionGroups\r\n */\r\n static collidesWith(collisionGroups) {\r\n return CollisionGroup.combine(collisionGroups).invert();\r\n }\r\n}\r\n/**\r\n * The `All` [[CollisionGroup]] is a special group that collides with all other groups including itself,\r\n * it is the default collision group on colliders.\r\n */\r\nCollisionGroup.All = new CollisionGroup('Collide with all groups', -1, -1);\r\n\n;// CONCATENATED MODULE: ./Collision/Detection/Pair.ts\n\r\n\r\n/**\r\n * Models a potential collision between 2 colliders\r\n */\r\nclass Pair {\r\n constructor(colliderA, colliderB) {\r\n this.colliderA = colliderA;\r\n this.colliderB = colliderB;\r\n this.id = null;\r\n this.id = Pair.calculatePairHash(colliderA.id, colliderB.id);\r\n }\r\n /**\r\n * Returns whether a it is allowed for 2 colliders in a Pair to collide\r\n * @param colliderA\r\n * @param colliderB\r\n */\r\n static canCollide(colliderA, colliderB) {\r\n var _a, _b;\r\n const bodyA = (_a = colliderA === null || colliderA === void 0 ? void 0 : colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);\r\n const bodyB = (_b = colliderB === null || colliderB === void 0 ? void 0 : colliderB.owner) === null || _b === void 0 ? void 0 : _b.get(BodyComponent);\r\n // Prevent self collision\r\n if (colliderA.id === colliderB.id) {\r\n return false;\r\n }\r\n // Colliders with the same owner do not collide (composite colliders)\r\n if (colliderA.owner &&\r\n colliderB.owner &&\r\n colliderA.owner.id === colliderB.owner.id) {\r\n return false;\r\n }\r\n // if the pair has a member with zero dimension don't collide\r\n if (colliderA.localBounds.hasZeroDimensions() || colliderB.localBounds.hasZeroDimensions()) {\r\n return false;\r\n }\r\n // Body's needed for collision in the current state\r\n // TODO can we collide without a body?\r\n if (!bodyA || !bodyB) {\r\n return false;\r\n }\r\n // If both are in the same collision group short circuit\r\n if (!bodyA.group.canCollide(bodyB.group)) {\r\n return false;\r\n }\r\n // if both are fixed short circuit\r\n if (bodyA.collisionType === CollisionType.Fixed && bodyB.collisionType === CollisionType.Fixed) {\r\n return false;\r\n }\r\n // if the either is prevent collision short circuit\r\n if (bodyB.collisionType === CollisionType.PreventCollision || bodyA.collisionType === CollisionType.PreventCollision) {\r\n return false;\r\n }\r\n // if either is dead short circuit\r\n if (!bodyA.active || !bodyB.active) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n /**\r\n * Returns whether or not it is possible for the pairs to collide\r\n */\r\n get canCollide() {\r\n const colliderA = this.colliderA;\r\n const colliderB = this.colliderB;\r\n return Pair.canCollide(colliderA, colliderB);\r\n }\r\n /**\r\n * Runs the collision intersection logic on the members of this pair\r\n */\r\n collide() {\r\n return this.colliderA.collide(this.colliderB);\r\n }\r\n /**\r\n * Check if the collider is part of the pair\r\n * @param collider\r\n */\r\n hasCollider(collider) {\r\n return collider === this.colliderA || collider === this.colliderB;\r\n }\r\n /**\r\n * Calculates the unique pair hash id for this collision pair (owning id)\r\n */\r\n static calculatePairHash(idA, idB) {\r\n if (idA.value < idB.value) {\r\n return `#${idA.value}+${idB.value}`;\r\n }\r\n else {\r\n return `#${idB.value}+${idA.value}`;\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Math/projection.ts\n/**\r\n * A 1 dimensional projection on an axis, used to test overlaps\r\n */\r\nclass Projection {\r\n constructor(min, max) {\r\n this.min = min;\r\n this.max = max;\r\n }\r\n overlaps(projection) {\r\n return this.max > projection.min && projection.max > this.min;\r\n }\r\n getOverlap(projection) {\r\n if (this.overlaps(projection)) {\r\n if (this.max > projection.max) {\r\n return projection.max - this.min;\r\n }\r\n else {\r\n return this.max - projection.min;\r\n }\r\n }\r\n return 0;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Detection/DynamicTree.ts\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Dynamic Tree Node used for tracking bounds within the tree\r\n */\r\nclass TreeNode {\r\n constructor(parent) {\r\n this.parent = parent;\r\n this.parent = parent || null;\r\n this.data = null;\r\n this.bounds = new BoundingBox();\r\n this.left = null;\r\n this.right = null;\r\n this.height = 0;\r\n }\r\n isLeaf() {\r\n return !this.left && !this.right;\r\n }\r\n}\r\n/**\r\n * The DynamicTrees provides a spatial partitioning data structure for quickly querying for overlapping bounding boxes for\r\n * all tracked bodies. The worst case performance of this is O(n*log(n)) where n is the number of bodies in the tree.\r\n *\r\n * Internally the bounding boxes are organized as a balanced binary tree of bounding boxes, where the leaf nodes are tracked bodies.\r\n * Every non-leaf node is a bounding box that contains child bounding boxes.\r\n */\r\nclass DynamicTree {\r\n constructor(worldBounds = new BoundingBox(-Number.MAX_VALUE, -Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE)) {\r\n this.worldBounds = worldBounds;\r\n this.root = null;\r\n this.nodes = {};\r\n }\r\n /**\r\n * Inserts a node into the dynamic tree\r\n */\r\n _insert(leaf) {\r\n // If there are no nodes in the tree, make this the root leaf\r\n if (this.root === null) {\r\n this.root = leaf;\r\n this.root.parent = null;\r\n return;\r\n }\r\n // Search the tree for a node that is not a leaf and find the best place to insert\r\n const leafAABB = leaf.bounds;\r\n let currentRoot = this.root;\r\n while (!currentRoot.isLeaf()) {\r\n const left = currentRoot.left;\r\n const right = currentRoot.right;\r\n const area = currentRoot.bounds.getPerimeter();\r\n const combinedAABB = currentRoot.bounds.combine(leafAABB);\r\n const combinedArea = combinedAABB.getPerimeter();\r\n // Calculate cost heuristic for creating a new parent and leaf\r\n const cost = 2 * combinedArea;\r\n // Minimum cost of pushing the leaf down the tree\r\n const inheritanceCost = 2 * (combinedArea - area);\r\n // Cost of descending\r\n let leftCost = 0;\r\n const leftCombined = leafAABB.combine(left.bounds);\r\n let newArea;\r\n let oldArea;\r\n if (left.isLeaf()) {\r\n leftCost = leftCombined.getPerimeter() + inheritanceCost;\r\n }\r\n else {\r\n oldArea = left.bounds.getPerimeter();\r\n newArea = leftCombined.getPerimeter();\r\n leftCost = newArea - oldArea + inheritanceCost;\r\n }\r\n let rightCost = 0;\r\n const rightCombined = leafAABB.combine(right.bounds);\r\n if (right.isLeaf()) {\r\n rightCost = rightCombined.getPerimeter() + inheritanceCost;\r\n }\r\n else {\r\n oldArea = right.bounds.getPerimeter();\r\n newArea = rightCombined.getPerimeter();\r\n rightCost = newArea - oldArea + inheritanceCost;\r\n }\r\n // cost is acceptable\r\n if (cost < leftCost && cost < rightCost) {\r\n break;\r\n }\r\n // Descend to the depths\r\n if (leftCost < rightCost) {\r\n currentRoot = left;\r\n }\r\n else {\r\n currentRoot = right;\r\n }\r\n }\r\n // Create the new parent node and insert into the tree\r\n const oldParent = currentRoot.parent;\r\n const newParent = new TreeNode(oldParent);\r\n newParent.bounds = leafAABB.combine(currentRoot.bounds);\r\n newParent.height = currentRoot.height + 1;\r\n if (oldParent !== null) {\r\n // The sibling node was not the root\r\n if (oldParent.left === currentRoot) {\r\n oldParent.left = newParent;\r\n }\r\n else {\r\n oldParent.right = newParent;\r\n }\r\n newParent.left = currentRoot;\r\n newParent.right = leaf;\r\n currentRoot.parent = newParent;\r\n leaf.parent = newParent;\r\n }\r\n else {\r\n // The sibling node was the root\r\n newParent.left = currentRoot;\r\n newParent.right = leaf;\r\n currentRoot.parent = newParent;\r\n leaf.parent = newParent;\r\n this.root = newParent;\r\n }\r\n // Walk up the tree fixing heights and AABBs\r\n let currentNode = leaf.parent;\r\n while (currentNode) {\r\n currentNode = this._balance(currentNode);\r\n if (!currentNode.left) {\r\n throw new Error('Parent of current leaf cannot have a null left child' + currentNode);\r\n }\r\n if (!currentNode.right) {\r\n throw new Error('Parent of current leaf cannot have a null right child' + currentNode);\r\n }\r\n currentNode.height = 1 + Math.max(currentNode.left.height, currentNode.right.height);\r\n currentNode.bounds = currentNode.left.bounds.combine(currentNode.right.bounds);\r\n currentNode = currentNode.parent;\r\n }\r\n }\r\n /**\r\n * Removes a node from the dynamic tree\r\n */\r\n _remove(leaf) {\r\n if (leaf === this.root) {\r\n this.root = null;\r\n return;\r\n }\r\n const parent = leaf.parent;\r\n const grandParent = parent.parent;\r\n let sibling;\r\n if (parent.left === leaf) {\r\n sibling = parent.right;\r\n }\r\n else {\r\n sibling = parent.left;\r\n }\r\n if (grandParent) {\r\n if (grandParent.left === parent) {\r\n grandParent.left = sibling;\r\n }\r\n else {\r\n grandParent.right = sibling;\r\n }\r\n sibling.parent = grandParent;\r\n let currentNode = grandParent;\r\n while (currentNode) {\r\n currentNode = this._balance(currentNode);\r\n currentNode.bounds = currentNode.left.bounds.combine(currentNode.right.bounds);\r\n currentNode.height = 1 + Math.max(currentNode.left.height, currentNode.right.height);\r\n currentNode = currentNode.parent;\r\n }\r\n }\r\n else {\r\n this.root = sibling;\r\n sibling.parent = null;\r\n }\r\n }\r\n /**\r\n * Tracks a body in the dynamic tree\r\n */\r\n trackCollider(collider) {\r\n const node = new TreeNode();\r\n node.data = collider;\r\n node.bounds = collider.bounds;\r\n node.bounds.left -= 2;\r\n node.bounds.top -= 2;\r\n node.bounds.right += 2;\r\n node.bounds.bottom += 2;\r\n this.nodes[collider.id.value] = node;\r\n this._insert(node);\r\n }\r\n /**\r\n * Updates the dynamic tree given the current bounds of each body being tracked\r\n */\r\n updateCollider(collider) {\r\n var _a;\r\n const node = this.nodes[collider.id.value];\r\n if (!node) {\r\n return false;\r\n }\r\n const b = collider.bounds;\r\n // if the body is outside the world no longer update it\r\n if (!this.worldBounds.contains(b)) {\r\n Logger.getInstance().warn('Collider with id ' + collider.id.value + ' is outside the world bounds and will no longer be tracked for physics');\r\n this.untrackCollider(collider);\r\n return false;\r\n }\r\n if (node.bounds.contains(b)) {\r\n return false;\r\n }\r\n this._remove(node);\r\n b.left -= Physics.boundsPadding;\r\n b.top -= Physics.boundsPadding;\r\n b.right += Physics.boundsPadding;\r\n b.bottom += Physics.boundsPadding;\r\n // THIS IS CAUSING UNECESSARY CHECKS\r\n if (collider.owner) {\r\n const body = (_a = collider.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);\r\n if (body) {\r\n const multdx = ((body.vel.x * 32) / 1000) * Physics.dynamicTreeVelocityMultiplier;\r\n const multdy = ((body.vel.y * 32) / 1000) * Physics.dynamicTreeVelocityMultiplier;\r\n if (multdx < 0) {\r\n b.left += multdx;\r\n }\r\n else {\r\n b.right += multdx;\r\n }\r\n if (multdy < 0) {\r\n b.top += multdy;\r\n }\r\n else {\r\n b.bottom += multdy;\r\n }\r\n }\r\n }\r\n node.bounds = b;\r\n this._insert(node);\r\n return true;\r\n }\r\n /**\r\n * Untracks a body from the dynamic tree\r\n */\r\n untrackCollider(collider) {\r\n const node = this.nodes[collider.id.value];\r\n if (!node) {\r\n return;\r\n }\r\n this._remove(node);\r\n this.nodes[collider.id.value] = null;\r\n delete this.nodes[collider.id.value];\r\n }\r\n /**\r\n * Balances the tree about a node\r\n */\r\n _balance(node) {\r\n if (node === null) {\r\n throw new Error('Cannot balance at null node');\r\n }\r\n if (node.isLeaf() || node.height < 2) {\r\n return node;\r\n }\r\n const left = node.left;\r\n const right = node.right;\r\n const a = node;\r\n const b = left;\r\n const c = right;\r\n const d = left.left;\r\n const e = left.right;\r\n const f = right.left;\r\n const g = right.right;\r\n const balance = c.height - b.height;\r\n // Rotate c node up\r\n if (balance > 1) {\r\n // Swap the right node with it's parent\r\n c.left = a;\r\n c.parent = a.parent;\r\n a.parent = c;\r\n // The original node's old parent should point to the right node\r\n // this is mega confusing\r\n if (c.parent) {\r\n if (c.parent.left === a) {\r\n c.parent.left = c;\r\n }\r\n else {\r\n c.parent.right = c;\r\n }\r\n }\r\n else {\r\n this.root = c;\r\n }\r\n // Rotate\r\n if (f.height > g.height) {\r\n c.right = f;\r\n a.right = g;\r\n g.parent = a;\r\n a.bounds = b.bounds.combine(g.bounds);\r\n c.bounds = a.bounds.combine(f.bounds);\r\n a.height = 1 + Math.max(b.height, g.height);\r\n c.height = 1 + Math.max(a.height, f.height);\r\n }\r\n else {\r\n c.right = g;\r\n a.right = f;\r\n f.parent = a;\r\n a.bounds = b.bounds.combine(f.bounds);\r\n c.bounds = a.bounds.combine(g.bounds);\r\n a.height = 1 + Math.max(b.height, f.height);\r\n c.height = 1 + Math.max(a.height, g.height);\r\n }\r\n return c;\r\n }\r\n // Rotate left node up\r\n if (balance < -1) {\r\n // swap\r\n b.left = a;\r\n b.parent = a.parent;\r\n a.parent = b;\r\n // node's old parent should point to b\r\n if (b.parent) {\r\n if (b.parent.left === a) {\r\n b.parent.left = b;\r\n }\r\n else {\r\n if (b.parent.right !== a) {\r\n throw 'Error rotating Dynamic Tree';\r\n }\r\n b.parent.right = b;\r\n }\r\n }\r\n else {\r\n this.root = b;\r\n }\r\n // rotate\r\n if (d.height > e.height) {\r\n b.right = d;\r\n a.left = e;\r\n e.parent = a;\r\n a.bounds = c.bounds.combine(e.bounds);\r\n b.bounds = a.bounds.combine(d.bounds);\r\n a.height = 1 + Math.max(c.height, e.height);\r\n b.height = 1 + Math.max(a.height, d.height);\r\n }\r\n else {\r\n b.right = e;\r\n a.left = d;\r\n d.parent = a;\r\n a.bounds = c.bounds.combine(d.bounds);\r\n b.bounds = a.bounds.combine(e.bounds);\r\n a.height = 1 + Math.max(c.height, d.height);\r\n b.height = 1 + Math.max(a.height, e.height);\r\n }\r\n return b;\r\n }\r\n return node;\r\n }\r\n /**\r\n * Returns the internal height of the tree, shorter trees are better. Performance drops as the tree grows\r\n */\r\n getHeight() {\r\n if (this.root === null) {\r\n return 0;\r\n }\r\n return this.root.height;\r\n }\r\n /**\r\n * Queries the Dynamic Axis Aligned Tree for bodies that could be colliding with the provided body.\r\n *\r\n * In the query callback, it will be passed a potential collider. Returning true from this callback indicates\r\n * that you are complete with your query and you do not want to continue. Returning false will continue searching\r\n * the tree until all possible colliders have been returned.\r\n */\r\n query(collider, callback) {\r\n const bounds = collider.bounds;\r\n const helper = (currentNode) => {\r\n if (currentNode && currentNode.bounds.overlaps(bounds)) {\r\n if (currentNode.isLeaf() && currentNode.data !== collider) {\r\n if (callback.call(collider, currentNode.data)) {\r\n return true;\r\n }\r\n }\r\n else {\r\n return helper(currentNode.left) || helper(currentNode.right);\r\n }\r\n }\r\n return false;\r\n };\r\n helper(this.root);\r\n }\r\n /**\r\n * Queries the Dynamic Axis Aligned Tree for bodies that could be intersecting. By default the raycast query uses an infinitely\r\n * long ray to test the tree specified by `max`.\r\n *\r\n * In the query callback, it will be passed a potential body that intersects with the raycast. Returning true from this\r\n * callback indicates that your are complete with your query and do not want to continue. Return false will continue searching\r\n * the tree until all possible bodies that would intersect with the ray have been returned.\r\n */\r\n rayCastQuery(ray, max = Infinity, callback) {\r\n const helper = (currentNode) => {\r\n if (currentNode && currentNode.bounds.rayCast(ray, max)) {\r\n if (currentNode.isLeaf()) {\r\n if (callback.call(ray, currentNode.data)) {\r\n // ray hit a leaf! return the body\r\n return true;\r\n }\r\n }\r\n else {\r\n // ray hit but not at a leaf, recurse deeper\r\n return helper(currentNode.left) || helper(currentNode.right);\r\n }\r\n }\r\n return false; // ray missed\r\n };\r\n helper(this.root);\r\n }\r\n getNodes() {\r\n const helper = (currentNode) => {\r\n if (currentNode) {\r\n return [currentNode].concat(helper(currentNode.left), helper(currentNode.right));\r\n }\r\n else {\r\n return [];\r\n }\r\n };\r\n return helper(this.root);\r\n }\r\n debug(ex) {\r\n // draw all the nodes in the Dynamic Tree\r\n const helper = (currentNode) => {\r\n if (currentNode) {\r\n if (currentNode.isLeaf()) {\r\n currentNode.bounds.draw(ex, Color.Green);\r\n }\r\n else {\r\n currentNode.bounds.draw(ex, Color.White);\r\n }\r\n if (currentNode.left) {\r\n helper(currentNode.left);\r\n }\r\n if (currentNode.right) {\r\n helper(currentNode.right);\r\n }\r\n }\r\n };\r\n helper(this.root);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Math/ray.ts\n/**\r\n * A 2D ray that can be cast into the scene to do collision detection\r\n */\r\nclass Ray {\r\n /**\r\n * @param pos The starting position for the ray\r\n * @param dir The vector indicating the direction of the ray\r\n */\r\n constructor(pos, dir) {\r\n this.pos = pos;\r\n this.dir = dir.normalize();\r\n }\r\n /**\r\n * Tests a whether this ray intersects with a line segment. Returns a number greater than or equal to 0 on success.\r\n * This number indicates the mathematical intersection time.\r\n * @param line The line to test\r\n */\r\n intersect(line) {\r\n const numerator = line.begin.sub(this.pos);\r\n // Test is line and ray are parallel and non intersecting\r\n if (this.dir.cross(line.getSlope()) === 0 && numerator.cross(this.dir) !== 0) {\r\n return -1;\r\n }\r\n // Lines are parallel\r\n const divisor = this.dir.cross(line.getSlope());\r\n if (divisor === 0) {\r\n return -1;\r\n }\r\n const t = numerator.cross(line.getSlope()) / divisor;\r\n if (t >= 0) {\r\n const u = numerator.cross(this.dir) / divisor / line.getLength();\r\n if (u >= 0 && u <= 1) {\r\n return t;\r\n }\r\n }\r\n return -1;\r\n }\r\n intersectPoint(line) {\r\n const time = this.intersect(line);\r\n if (time < 0) {\r\n return null;\r\n }\r\n return this.getPoint(time);\r\n }\r\n /**\r\n * Returns the point of intersection given the intersection time\r\n */\r\n getPoint(time) {\r\n return this.pos.add(this.dir.scale(time));\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Detection/DynamicTreeCollisionProcessor.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Responsible for performing the collision broadphase (locating potential collisions) and\r\n * the narrowphase (actual collision contacts)\r\n */\r\nclass DynamicTreeCollisionProcessor {\r\n constructor() {\r\n this._dynamicCollisionTree = new DynamicTree();\r\n this._pairs = new Set();\r\n this._collisionPairCache = [];\r\n this._colliders = [];\r\n }\r\n getColliders() {\r\n return this._colliders;\r\n }\r\n rayCast(ray, options) {\r\n var _a, _b, _c;\r\n const results = [];\r\n const maxDistance = (_a = options === null || options === void 0 ? void 0 : options.maxDistance) !== null && _a !== void 0 ? _a : Infinity;\r\n const collisionGroup = (_b = options === null || options === void 0 ? void 0 : options.collisionGroup) !== null && _b !== void 0 ? _b : CollisionGroup.All;\r\n const searchAllColliders = (_c = options === null || options === void 0 ? void 0 : options.searchAllColliders) !== null && _c !== void 0 ? _c : false;\r\n this._dynamicCollisionTree.rayCastQuery(ray, maxDistance, (collider) => {\r\n var _a;\r\n const owner = collider.owner;\r\n const maybeBody = owner.get(BodyComponent);\r\n // Early exit if not the right group\r\n if (collisionGroup.mask !== CollisionGroup.All.mask && ((_a = maybeBody === null || maybeBody === void 0 ? void 0 : maybeBody.group) === null || _a === void 0 ? void 0 : _a.mask) !== collisionGroup.mask) {\r\n return false;\r\n }\r\n const hit = collider.rayCast(ray, maxDistance);\r\n if (hit) {\r\n results.push({\r\n distance: hit.sub(ray.pos).distance(),\r\n point: hit,\r\n collider: collider,\r\n body: maybeBody\r\n });\r\n if (!searchAllColliders) {\r\n // returning true exits the search\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n return results;\r\n }\r\n /**\r\n * Tracks a physics body for collisions\r\n */\r\n track(target) {\r\n if (!target) {\r\n Logger.getInstance().warn('Cannot track null collider');\r\n return;\r\n }\r\n if (target instanceof CompositeCollider) {\r\n const colliders = target.getColliders();\r\n for (const c of colliders) {\r\n c.owner = target.owner;\r\n this._colliders.push(c);\r\n this._dynamicCollisionTree.trackCollider(c);\r\n }\r\n }\r\n else {\r\n this._colliders.push(target);\r\n this._dynamicCollisionTree.trackCollider(target);\r\n }\r\n }\r\n /**\r\n * Untracks a physics body\r\n */\r\n untrack(target) {\r\n if (!target) {\r\n Logger.getInstance().warn('Cannot untrack a null collider');\r\n return;\r\n }\r\n if (target instanceof CompositeCollider) {\r\n const colliders = target.getColliders();\r\n for (const c of colliders) {\r\n const index = this._colliders.indexOf(c);\r\n if (index !== -1) {\r\n this._colliders.splice(index, 1);\r\n }\r\n this._dynamicCollisionTree.untrackCollider(c);\r\n }\r\n }\r\n else {\r\n const index = this._colliders.indexOf(target);\r\n if (index !== -1) {\r\n this._colliders.splice(index, 1);\r\n }\r\n this._dynamicCollisionTree.untrackCollider(target);\r\n }\r\n }\r\n _pairExists(colliderA, colliderB) {\r\n // if the collision pair has been calculated already short circuit\r\n const hash = Pair.calculatePairHash(colliderA.id, colliderB.id);\r\n return this._pairs.has(hash);\r\n }\r\n /**\r\n * Detects potential collision pairs in a broadphase approach with the dynamic AABB tree strategy\r\n */\r\n broadphase(targets, delta, stats) {\r\n const seconds = delta / 1000;\r\n // Retrieve the list of potential colliders, exclude killed, prevented, and self\r\n const potentialColliders = targets.filter((other) => {\r\n var _a, _b;\r\n const body = (_a = other.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);\r\n return ((_b = other.owner) === null || _b === void 0 ? void 0 : _b.active) && body.collisionType !== CollisionType.PreventCollision;\r\n });\r\n // clear old list of collision pairs\r\n this._collisionPairCache = [];\r\n this._pairs.clear();\r\n // check for normal collision pairs\r\n let collider;\r\n for (let j = 0, l = potentialColliders.length; j < l; j++) {\r\n collider = potentialColliders[j];\r\n // Query the collision tree for potential colliders\r\n this._dynamicCollisionTree.query(collider, (other) => {\r\n if (!this._pairExists(collider, other) && Pair.canCollide(collider, other)) {\r\n const pair = new Pair(collider, other);\r\n this._pairs.add(pair.id);\r\n this._collisionPairCache.push(pair);\r\n }\r\n // Always return false, to query whole tree. Returning true in the query method stops searching\r\n return false;\r\n });\r\n }\r\n if (stats) {\r\n stats.physics.pairs = this._collisionPairCache.length;\r\n }\r\n // Check dynamic tree for fast moving objects\r\n // Fast moving objects are those moving at least there smallest bound per frame\r\n if (Physics.checkForFastBodies) {\r\n for (const collider of potentialColliders) {\r\n const body = collider.owner.get(BodyComponent);\r\n // Skip non-active objects. Does not make sense on other collision types\r\n if (body.collisionType !== CollisionType.Active) {\r\n continue;\r\n }\r\n // Maximum travel distance next frame\r\n const updateDistance = body.vel.size * seconds + // velocity term\r\n body.acc.size * 0.5 * seconds * seconds; // acc term\r\n // Find the minimum dimension\r\n const minDimension = Math.min(collider.bounds.height, collider.bounds.width);\r\n if (Physics.disableMinimumSpeedForFastBody || updateDistance > minDimension / 2) {\r\n if (stats) {\r\n stats.physics.fastBodies++;\r\n }\r\n // start with the oldPos because the integration for actors has already happened\r\n // objects resting on a surface may be slightly penetrating in the current position\r\n const updateVec = body.globalPos.sub(body.oldPos);\r\n const centerPoint = collider.center;\r\n const furthestPoint = collider.getFurthestPoint(body.vel);\r\n const origin = furthestPoint.sub(updateVec);\r\n const ray = new Ray(origin, body.vel);\r\n // back the ray up by -2x surfaceEpsilon to account for fast moving objects starting on the surface\r\n ray.pos = ray.pos.add(ray.dir.scale(-2 * Physics.surfaceEpsilon));\r\n let minCollider;\r\n let minTranslate = new Vector(Infinity, Infinity);\r\n this._dynamicCollisionTree.rayCastQuery(ray, updateDistance + Physics.surfaceEpsilon * 2, (other) => {\r\n if (!this._pairExists(collider, other) && Pair.canCollide(collider, other)) {\r\n const hitPoint = other.rayCast(ray, updateDistance + Physics.surfaceEpsilon * 10);\r\n if (hitPoint) {\r\n const translate = hitPoint.sub(origin);\r\n if (translate.size < minTranslate.size) {\r\n minTranslate = translate;\r\n minCollider = other;\r\n }\r\n }\r\n }\r\n return false;\r\n });\r\n if (minCollider && Vector.isValid(minTranslate)) {\r\n const pair = new Pair(collider, minCollider);\r\n if (!this._pairs.has(pair.id)) {\r\n this._pairs.add(pair.id);\r\n this._collisionPairCache.push(pair);\r\n }\r\n // move the fast moving object to the other body\r\n // need to push into the surface by ex.Physics.surfaceEpsilon\r\n const shift = centerPoint.sub(furthestPoint);\r\n body.globalPos = origin\r\n .add(shift)\r\n .add(minTranslate)\r\n .add(ray.dir.scale(10 * Physics.surfaceEpsilon)); // needed to push the shape slightly into contact\r\n collider.update(body.transform.get());\r\n if (stats) {\r\n stats.physics.fastBodyCollisions++;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n // return cache\r\n return this._collisionPairCache;\r\n }\r\n /**\r\n * Applies narrow phase on collision pairs to find actual area intersections\r\n * Adds actual colliding pairs to stats' Frame data\r\n */\r\n narrowphase(pairs, stats) {\r\n let contacts = [];\r\n for (let i = 0; i < pairs.length; i++) {\r\n const newContacts = pairs[i].collide();\r\n contacts = contacts.concat(newContacts);\r\n if (stats && newContacts.length > 0) {\r\n for (const c of newContacts) {\r\n stats.physics.contacts.set(c.id, c);\r\n }\r\n }\r\n }\r\n if (stats) {\r\n stats.physics.collisions += contacts.length;\r\n }\r\n return contacts;\r\n }\r\n /**\r\n * Update the dynamic tree positions\r\n */\r\n update(targets) {\r\n let updated = 0;\r\n const len = targets.length;\r\n for (let i = 0; i < len; i++) {\r\n if (this._dynamicCollisionTree.updateCollider(targets[i])) {\r\n updated++;\r\n }\r\n }\r\n return updated;\r\n }\r\n debug(ex) {\r\n this._dynamicCollisionTree.debug(ex);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Colliders/Collider.ts\n\r\n\r\n/**\r\n * A collision collider specifies the geometry that can detect when other collision colliders intersect\r\n * for the purposes of colliding 2 objects in excalibur.\r\n */\r\nclass Collider {\r\n constructor() {\r\n this.id = createId('collider', Collider._ID++);\r\n /**\r\n * Excalibur uses this to signal to the [[CollisionSystem]] this is part of a composite collider\r\n * @internal\r\n * @hidden\r\n */\r\n this.__compositeColliderId = null;\r\n this.events = new EventEmitter();\r\n }\r\n /**\r\n * Returns a boolean indicating whether this body collided with\r\n * or was in stationary contact with\r\n * the body of the other [[Collider]]\r\n */\r\n touching(other) {\r\n const contact = this.collide(other);\r\n if (contact) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\nCollider._ID = 0;\r\n\n;// CONCATENATED MODULE: ./Collision/Colliders/CompositeCollider.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass CompositeCollider extends Collider {\r\n constructor(colliders) {\r\n super();\r\n this._collisionProcessor = new DynamicTreeCollisionProcessor();\r\n this._dynamicAABBTree = new DynamicTree();\r\n this._colliders = [];\r\n for (const c of colliders) {\r\n this.addCollider(c);\r\n }\r\n }\r\n clearColliders() {\r\n this._colliders = [];\r\n }\r\n addCollider(collider) {\r\n collider.events.pipe(this.events);\r\n collider.__compositeColliderId = this.id;\r\n this._colliders.push(collider);\r\n this._collisionProcessor.track(collider);\r\n this._dynamicAABBTree.trackCollider(collider);\r\n }\r\n removeCollider(collider) {\r\n collider.events.pipe(this.events);\r\n collider.__compositeColliderId = null;\r\n removeItemFromArray(collider, this._colliders);\r\n this._collisionProcessor.untrack(collider);\r\n this._dynamicAABBTree.untrackCollider(collider);\r\n }\r\n getColliders() {\r\n return this._colliders;\r\n }\r\n get worldPos() {\r\n var _a, _b;\r\n // TODO transform component world pos\r\n return (_b = (_a = this._transform) === null || _a === void 0 ? void 0 : _a.pos) !== null && _b !== void 0 ? _b : Vector.Zero;\r\n }\r\n get center() {\r\n var _a, _b;\r\n return (_b = (_a = this._transform) === null || _a === void 0 ? void 0 : _a.pos) !== null && _b !== void 0 ? _b : Vector.Zero;\r\n }\r\n get bounds() {\r\n var _a, _b;\r\n // TODO cache this\r\n const colliders = this.getColliders();\r\n const results = colliders.reduce((acc, collider) => acc.combine(collider.bounds), (_b = (_a = colliders[0]) === null || _a === void 0 ? void 0 : _a.bounds) !== null && _b !== void 0 ? _b : new BoundingBox().translate(this.worldPos));\r\n return results;\r\n }\r\n get localBounds() {\r\n var _a, _b;\r\n // TODO cache this\r\n const colliders = this.getColliders();\r\n const results = colliders.reduce((acc, collider) => acc.combine(collider.localBounds), (_b = (_a = colliders[0]) === null || _a === void 0 ? void 0 : _a.localBounds) !== null && _b !== void 0 ? _b : new BoundingBox());\r\n return results;\r\n }\r\n get axes() {\r\n // TODO cache this\r\n const colliders = this.getColliders();\r\n let axes = [];\r\n for (const collider of colliders) {\r\n axes = axes.concat(collider.axes);\r\n }\r\n return axes;\r\n }\r\n getFurthestPoint(direction) {\r\n const colliders = this.getColliders();\r\n const furthestPoints = [];\r\n for (const collider of colliders) {\r\n furthestPoints.push(collider.getFurthestPoint(direction));\r\n }\r\n // Pick best point from all colliders\r\n let bestPoint = furthestPoints[0];\r\n let maxDistance = -Number.MAX_VALUE;\r\n for (const point of furthestPoints) {\r\n const distance = point.dot(direction);\r\n if (distance > maxDistance) {\r\n bestPoint = point;\r\n maxDistance = distance;\r\n }\r\n }\r\n return bestPoint;\r\n }\r\n getInertia(mass) {\r\n const colliders = this.getColliders();\r\n let totalInertia = 0;\r\n for (const collider of colliders) {\r\n totalInertia += collider.getInertia(mass);\r\n }\r\n return totalInertia;\r\n }\r\n collide(other) {\r\n let otherColliders = [other];\r\n if (other instanceof CompositeCollider) {\r\n otherColliders = other.getColliders();\r\n }\r\n const pairs = [];\r\n for (const c of otherColliders) {\r\n this._dynamicAABBTree.query(c, (potentialCollider) => {\r\n pairs.push(new Pair(c, potentialCollider));\r\n return false;\r\n });\r\n }\r\n let contacts = [];\r\n for (const p of pairs) {\r\n contacts = contacts.concat(p.collide());\r\n }\r\n return contacts;\r\n }\r\n getClosestLineBetween(other) {\r\n const colliders = this.getColliders();\r\n const lines = [];\r\n if (other instanceof CompositeCollider) {\r\n const otherColliders = other.getColliders();\r\n for (const colliderA of colliders) {\r\n for (const colliderB of otherColliders) {\r\n const maybeLine = colliderA.getClosestLineBetween(colliderB);\r\n if (maybeLine) {\r\n lines.push(maybeLine);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n for (const collider of colliders) {\r\n const maybeLine = other.getClosestLineBetween(collider);\r\n if (maybeLine) {\r\n lines.push(maybeLine);\r\n }\r\n }\r\n }\r\n if (lines.length) {\r\n let minLength = lines[0].getLength();\r\n let minLine = lines[0];\r\n for (const line of lines) {\r\n const length = line.getLength();\r\n if (length < minLength) {\r\n minLength = length;\r\n minLine = line;\r\n }\r\n }\r\n return minLine;\r\n }\r\n return null;\r\n }\r\n contains(point) {\r\n const colliders = this.getColliders();\r\n for (const collider of colliders) {\r\n if (collider.contains(point)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n rayCast(ray, max) {\r\n const colliders = this.getColliders();\r\n const points = [];\r\n for (const collider of colliders) {\r\n const vec = collider.rayCast(ray, max);\r\n if (vec) {\r\n points.push(vec);\r\n }\r\n }\r\n if (points.length) {\r\n let minPoint = points[0];\r\n let minDistance = minPoint.dot(ray.dir);\r\n for (const point of points) {\r\n const distance = ray.dir.dot(point);\r\n if (distance < minDistance) {\r\n minPoint = point;\r\n minDistance = distance;\r\n }\r\n }\r\n return minPoint;\r\n }\r\n return null;\r\n }\r\n project(axis) {\r\n const colliders = this.getColliders();\r\n const projs = [];\r\n for (const collider of colliders) {\r\n const proj = collider.project(axis);\r\n if (proj) {\r\n projs.push(proj);\r\n }\r\n }\r\n // Merge all proj's on the same axis\r\n if (projs.length) {\r\n const newProjection = new Projection(projs[0].min, projs[0].max);\r\n for (const proj of projs) {\r\n newProjection.min = Math.min(proj.min, newProjection.min);\r\n newProjection.max = Math.max(proj.max, newProjection.max);\r\n }\r\n return newProjection;\r\n }\r\n return null;\r\n }\r\n update(transform) {\r\n if (transform) {\r\n const colliders = this.getColliders();\r\n for (const collider of colliders) {\r\n collider.owner = this.owner;\r\n collider.update(transform);\r\n }\r\n }\r\n }\r\n debug(ex, color) {\r\n const colliders = this.getColliders();\r\n for (const collider of colliders) {\r\n collider.debug(ex, color);\r\n }\r\n }\r\n clone() {\r\n return new CompositeCollider(this._colliders.map((c) => c.clone()));\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Math/line-segment.ts\n\r\n/**\r\n * A 2D line segment\r\n */\r\nclass LineSegment {\r\n /**\r\n * @param begin The starting point of the line segment\r\n * @param end The ending point of the line segment\r\n */\r\n constructor(begin, end) {\r\n this.begin = begin;\r\n this.end = end;\r\n }\r\n /**\r\n * Gets the raw slope (m) of the line. Will return (+/-)Infinity for vertical lines.\r\n */\r\n get slope() {\r\n return (this.end.y - this.begin.y) / (this.end.x - this.begin.x);\r\n }\r\n /**\r\n * Gets the Y-intercept (b) of the line. Will return (+/-)Infinity if there is no intercept.\r\n */\r\n get intercept() {\r\n return this.begin.y - this.slope * this.begin.x;\r\n }\r\n /**\r\n * Gets the normal of the line\r\n */\r\n normal() {\r\n if (this._normal) {\r\n return this._normal;\r\n }\r\n return this._normal = this.end.sub(this.begin).normal();\r\n }\r\n dir() {\r\n if (this._dir) {\r\n return this._dir;\r\n }\r\n return this._dir = this.end.sub(this.begin);\r\n }\r\n getPoints() {\r\n return [this.begin, this.end];\r\n }\r\n /**\r\n * Returns the slope of the line in the form of a vector of length 1\r\n */\r\n getSlope() {\r\n if (this._slope) {\r\n return this._slope;\r\n }\r\n const begin = this.begin;\r\n const end = this.end;\r\n const distance = begin.distance(end);\r\n return this._slope = end.sub(begin).scale(1 / distance);\r\n }\r\n /**\r\n * Returns the edge of the line as vector, the length of the vector is the length of the edge\r\n */\r\n getEdge() {\r\n const begin = this.begin;\r\n const end = this.end;\r\n return end.sub(begin);\r\n }\r\n /**\r\n * Returns the length of the line segment in pixels\r\n */\r\n getLength() {\r\n if (this._length) {\r\n return this._length;\r\n }\r\n const begin = this.begin;\r\n const end = this.end;\r\n const distance = begin.distance(end);\r\n return this._length = distance;\r\n }\r\n /**\r\n * Returns the midpoint of the edge\r\n */\r\n get midpoint() {\r\n return this.begin.add(this.end).scale(0.5);\r\n }\r\n /**\r\n * Flips the direction of the line segment\r\n */\r\n flip() {\r\n return new LineSegment(this.end, this.begin);\r\n }\r\n /**\r\n * Tests if a given point is below the line, points in the normal direction above the line are considered above.\r\n * @param point\r\n */\r\n below(point) {\r\n const above2 = (this.end.x - this.begin.x) * (point.y - this.begin.y) - (this.end.y - this.begin.y) * (point.x - this.begin.x);\r\n return above2 >= 0;\r\n }\r\n /**\r\n * Returns the clip point\r\n * @param sideVector Vector that traces the line\r\n * @param length Length to clip along side\r\n */\r\n clip(sideVector, length) {\r\n let dir = sideVector;\r\n dir = dir.normalize();\r\n const near = dir.dot(this.begin) - length;\r\n const far = dir.dot(this.end) - length;\r\n const results = [];\r\n if (near <= 0) {\r\n results.push(this.begin);\r\n }\r\n if (far <= 0) {\r\n results.push(this.end);\r\n }\r\n if (near * far < 0) {\r\n const clipTime = near / (near - far);\r\n results.push(this.begin.add(this.end.sub(this.begin).scale(clipTime)));\r\n }\r\n if (results.length !== 2) {\r\n return null;\r\n }\r\n return new LineSegment(results[0], results[1]);\r\n }\r\n /**\r\n * Find the perpendicular distance from the line to a point\r\n * https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line\r\n * @param point\r\n */\r\n distanceToPoint(point, signed = false) {\r\n const x0 = point.x;\r\n const y0 = point.y;\r\n const l = this.getLength();\r\n const dy = this.end.y - this.begin.y;\r\n const dx = this.end.x - this.begin.x;\r\n const distance = (dy * x0 - dx * y0 + this.end.x * this.begin.y - this.end.y * this.begin.x) / l;\r\n return signed ? distance : Math.abs(distance);\r\n }\r\n /**\r\n * Find the perpendicular line from the line to a point\r\n * https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line\r\n * (a - p) - ((a - p) * n)n\r\n * a is a point on the line\r\n * p is the arbitrary point above the line\r\n * n is a unit vector in direction of the line\r\n * @param point\r\n */\r\n findVectorToPoint(point) {\r\n const aMinusP = this.begin.sub(point);\r\n const n = this.getSlope();\r\n return aMinusP.sub(n.scale(aMinusP.dot(n)));\r\n }\r\n /**\r\n * Finds a point on the line given only an X or a Y value. Given an X value, the function returns\r\n * a new point with the calculated Y value and vice-versa.\r\n *\r\n * @param x The known X value of the target point\r\n * @param y The known Y value of the target point\r\n * @returns A new point with the other calculated axis value\r\n */\r\n findPoint(x = null, y = null) {\r\n const m = this.slope;\r\n const b = this.intercept;\r\n if (x !== null) {\r\n return new Vector(x, m * x + b);\r\n }\r\n else if (y !== null) {\r\n return new Vector((y - b) / m, y);\r\n }\r\n else {\r\n throw new Error('You must provide an X or a Y value');\r\n }\r\n }\r\n /**\r\n * @see http://stackoverflow.com/a/11908158/109458\r\n */\r\n hasPoint() {\r\n let currPoint;\r\n let threshold = 0;\r\n if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {\r\n currPoint = new Vector(arguments[0], arguments[1]);\r\n threshold = arguments[2] || 0;\r\n }\r\n else if (arguments[0] instanceof Vector) {\r\n currPoint = arguments[0];\r\n threshold = arguments[1] || 0;\r\n }\r\n else {\r\n throw 'Could not determine the arguments for Vector.hasPoint';\r\n }\r\n const dxc = currPoint.x - this.begin.x;\r\n const dyc = currPoint.y - this.begin.y;\r\n const dx1 = this.end.x - this.begin.x;\r\n const dy1 = this.end.y - this.begin.y;\r\n const cross = dxc * dy1 - dyc * dx1;\r\n // check whether point lines on the line\r\n if (Math.abs(cross) > threshold) {\r\n return false;\r\n }\r\n // check whether point lies in-between start and end\r\n if (Math.abs(dx1) >= Math.abs(dy1)) {\r\n return dx1 > 0 ? this.begin.x <= currPoint.x && currPoint.x <= this.end.x : this.end.x <= currPoint.x && currPoint.x <= this.begin.x;\r\n }\r\n else {\r\n return dy1 > 0 ? this.begin.y <= currPoint.y && currPoint.y <= this.end.y : this.end.y <= currPoint.y && currPoint.y <= this.begin.y;\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Colliders/ClosestLineJumpTable.ts\n\r\n\r\n\r\n/**\r\n * Finds the closes line between 2 line segments, were the magnitude of u, v are the lengths of each segment\r\n * L1 = P(s) = p0 + s * u, where s is time and p0 is the start of the line\r\n * L2 = Q(t) = q0 + t * v, where t is time and q0 is the start of the line\r\n * @param p0 Point where L1 begins\r\n * @param u Direction and length of L1\r\n * @param q0 Point were L2 begins\r\n * @param v Direction and length of L2\r\n */\r\nfunction ClosestLine(p0, u, q0, v) {\r\n // Distance between 2 lines http://geomalgorithms.com/a07-_distance.html\r\n // w(s, t) = P(s) - Q(t)\r\n // The w(s, t) that has the minimum distance we will say is w(sClosest, tClosest) = wClosest\r\n //\r\n // wClosest is the vector that is uniquely perpendicular to the 2 line directions u & v.\r\n // wClosest = w0 + sClosest * u - tClosest * v, where w0 is p0 - q0\r\n //\r\n // The closest point between 2 lines then satisfies this pair of equations\r\n // 1: u * wClosest = 0\r\n // 2: v * wClosest = 0\r\n //\r\n // Substituting wClosest into the equations we get\r\n //\r\n // 1: (u * u) * sClosest - (u * v) tClosest = -u * w0\r\n // 2: (v * u) * sClosest - (v * v) tClosest = -v * w0\r\n // simplify w0\r\n const w0 = p0.sub(q0);\r\n // simplify (u * u);\r\n const a = u.dot(u);\r\n // simplify (u * v);\r\n const b = u.dot(v);\r\n // simplify (v * v)\r\n const c = v.dot(v);\r\n // simplify (u * w0)\r\n const d = u.dot(w0);\r\n // simplify (v * w0)\r\n const e = v.dot(w0);\r\n // denominator ac - b^2\r\n const denom = a * c - b * b;\r\n let sDenom = denom;\r\n let tDenom = denom;\r\n // if denom is 0 they are parallel, use any point from either as the start in this case p0\r\n if (denom === 0 || denom <= 0.01) {\r\n const tClosestParallel = d / b;\r\n return new LineSegment(p0, q0.add(v.scale(tClosestParallel)));\r\n }\r\n // Solve for sClosest for infinite line\r\n let sClosest = b * e - c * d; // / denom;\r\n // Solve for tClosest for infinite line\r\n let tClosest = a * e - b * d; // / denom;\r\n // Solve for segments candidate edges, if sClosest and tClosest are outside their segments\r\n if (sClosest < 0) {\r\n sClosest = 0;\r\n tClosest = e;\r\n tDenom = c;\r\n }\r\n else if (sClosest > sDenom) {\r\n sClosest = sDenom;\r\n tClosest = e + b;\r\n tDenom = c;\r\n }\r\n if (tClosest < 0) {\r\n tClosest = 0;\r\n if (-d < 0) {\r\n sClosest = 0;\r\n }\r\n else if (-d > a) {\r\n sClosest = sDenom;\r\n }\r\n else {\r\n sClosest = -d;\r\n sDenom = a;\r\n }\r\n }\r\n else if (tClosest > tDenom) {\r\n tClosest = tDenom;\r\n if (-d + b < 0) {\r\n sClosest = 0;\r\n }\r\n else if (-d + b > a) {\r\n sClosest = sDenom;\r\n }\r\n else {\r\n sClosest = -d + b;\r\n sDenom = a;\r\n }\r\n }\r\n sClosest = Math.abs(sClosest) < 0.001 ? 0 : sClosest / sDenom;\r\n tClosest = Math.abs(tClosest) < 0.001 ? 0 : tClosest / tDenom;\r\n return new LineSegment(p0.add(u.scale(sClosest)), q0.add(v.scale(tClosest)));\r\n}\r\nconst ClosestLineJumpTable = {\r\n PolygonPolygonClosestLine(polygonA, polygonB) {\r\n // Find the 2 closest faces on each polygon\r\n const otherWorldPos = polygonB.worldPos;\r\n const otherDirection = otherWorldPos.sub(polygonA.worldPos);\r\n const thisDirection = otherDirection.negate();\r\n const rayTowardsOther = new Ray(polygonA.worldPos, otherDirection);\r\n const rayTowardsThis = new Ray(otherWorldPos, thisDirection);\r\n const thisPoint = polygonA.rayCast(rayTowardsOther).add(rayTowardsOther.dir.scale(0.1));\r\n const otherPoint = polygonB.rayCast(rayTowardsThis).add(rayTowardsThis.dir.scale(0.1));\r\n const thisFace = polygonA.getClosestFace(thisPoint);\r\n const otherFace = polygonB.getClosestFace(otherPoint);\r\n // L1 = P(s) = p0 + s * u, where s is time and p0 is the start of the line\r\n const p0 = thisFace.face.begin;\r\n const u = thisFace.face.getEdge();\r\n // L2 = Q(t) = q0 + t * v, where t is time and q0 is the start of the line\r\n const q0 = otherFace.face.begin;\r\n const v = otherFace.face.getEdge();\r\n return ClosestLine(p0, u, q0, v);\r\n },\r\n PolygonEdgeClosestLine(polygon, edge) {\r\n // Find the 2 closest faces on each polygon\r\n const otherWorldPos = edge.worldPos;\r\n const otherDirection = otherWorldPos.sub(polygon.worldPos);\r\n const rayTowardsOther = new Ray(polygon.worldPos, otherDirection);\r\n const thisPoint = polygon.rayCast(rayTowardsOther).add(rayTowardsOther.dir.scale(0.1));\r\n const thisFace = polygon.getClosestFace(thisPoint);\r\n // L1 = P(s) = p0 + s * u, where s is time and p0 is the start of the line\r\n const p0 = thisFace.face.begin;\r\n const u = thisFace.face.getEdge();\r\n // L2 = Q(t) = q0 + t * v, where t is time and q0 is the start of the line\r\n const edgeLine = edge.asLine();\r\n const edgeStart = edgeLine.begin;\r\n const edgeVector = edgeLine.getEdge();\r\n const q0 = edgeStart;\r\n const v = edgeVector;\r\n return ClosestLine(p0, u, q0, v);\r\n },\r\n PolygonCircleClosestLine(polygon, circle) {\r\n // https://math.stackexchange.com/questions/1919177/how-to-find-point-on-line-closest-to-sphere\r\n // Find the 2 closest faces on each polygon\r\n const otherWorldPos = circle.worldPos;\r\n const otherDirection = otherWorldPos.sub(polygon.worldPos);\r\n const rayTowardsOther = new Ray(polygon.worldPos, otherDirection.normalize());\r\n const thisPoint = polygon.rayCast(rayTowardsOther).add(rayTowardsOther.dir.scale(0.1));\r\n const thisFace = polygon.getClosestFace(thisPoint);\r\n // L1 = P(s) = p0 + s * u, where s is time and p0 is the start of the line\r\n const p0 = thisFace.face.begin;\r\n const u = thisFace.face.getEdge();\r\n // Time of minimum distance\r\n let t = (u.x * (otherWorldPos.x - p0.x) + u.y * (otherWorldPos.y - p0.y)) / (u.x * u.x + u.y * u.y);\r\n // If time of minimum is past the edge clamp\r\n if (t > 1) {\r\n t = 1;\r\n }\r\n else if (t < 0) {\r\n t = 0;\r\n }\r\n // Minimum distance\r\n const d = Math.sqrt(Math.pow(p0.x + u.x * t - otherWorldPos.x, 2) + Math.pow(p0.y + u.y * t - otherWorldPos.y, 2)) - circle.radius;\r\n const circlex = ((p0.x + u.x * t - otherWorldPos.x) * circle.radius) / (circle.radius + d);\r\n const circley = ((p0.y + u.y * t - otherWorldPos.y) * circle.radius) / (circle.radius + d);\r\n return new LineSegment(u.scale(t).add(p0), new Vector(otherWorldPos.x + circlex, otherWorldPos.y + circley));\r\n },\r\n CircleCircleClosestLine(circleA, circleB) {\r\n // Find the 2 closest faces on each polygon\r\n const otherWorldPos = circleB.worldPos;\r\n const otherDirection = otherWorldPos.sub(circleA.worldPos);\r\n const thisWorldPos = circleA.worldPos;\r\n const thisDirection = thisWorldPos.sub(circleB.worldPos);\r\n const rayTowardsOther = new Ray(circleA.worldPos, otherDirection);\r\n const rayTowardsThis = new Ray(circleB.worldPos, thisDirection);\r\n const thisPoint = circleA.rayCast(rayTowardsOther);\r\n const otherPoint = circleB.rayCast(rayTowardsThis);\r\n return new LineSegment(thisPoint, otherPoint);\r\n },\r\n CircleEdgeClosestLine(circle, edge) {\r\n // https://math.stackexchange.com/questions/1919177/how-to-find-point-on-line-closest-to-sphere\r\n const circleWorlPos = circle.worldPos;\r\n // L1 = P(s) = p0 + s * u, where s is time and p0 is the start of the line\r\n const edgeLine = edge.asLine();\r\n const edgeStart = edgeLine.begin;\r\n const edgeVector = edgeLine.getEdge();\r\n const p0 = edgeStart;\r\n const u = edgeVector;\r\n // Time of minimum distance\r\n let t = (u.x * (circleWorlPos.x - p0.x) + u.y * (circleWorlPos.y - p0.y)) / (u.x * u.x + u.y * u.y);\r\n // If time of minimum is past the edge clamp to edge\r\n if (t > 1) {\r\n t = 1;\r\n }\r\n else if (t < 0) {\r\n t = 0;\r\n }\r\n // Minimum distance\r\n const d = Math.sqrt(Math.pow(p0.x + u.x * t - circleWorlPos.x, 2) + Math.pow(p0.y + u.y * t - circleWorlPos.y, 2)) - circle.radius;\r\n const circlex = ((p0.x + u.x * t - circleWorlPos.x) * circle.radius) / (circle.radius + d);\r\n const circley = ((p0.y + u.y * t - circleWorlPos.y) * circle.radius) / (circle.radius + d);\r\n return new LineSegment(u.scale(t).add(p0), new Vector(circleWorlPos.x + circlex, circleWorlPos.y + circley));\r\n },\r\n EdgeEdgeClosestLine(edgeA, edgeB) {\r\n // L1 = P(s) = p0 + s * u, where s is time and p0 is the start of the line\r\n const edgeLineA = edgeA.asLine();\r\n const edgeStartA = edgeLineA.begin;\r\n const edgeVectorA = edgeLineA.getEdge();\r\n const p0 = edgeStartA;\r\n const u = edgeVectorA;\r\n // L2 = Q(t) = q0 + t * v, where t is time and q0 is the start of the line\r\n const edgeLineB = edgeB.asLine();\r\n const edgeStartB = edgeLineB.begin;\r\n const edgeVectorB = edgeLineB.getEdge();\r\n const q0 = edgeStartB;\r\n const v = edgeVectorB;\r\n return ClosestLine(p0, u, q0, v);\r\n }\r\n};\r\n\n;// CONCATENATED MODULE: ./Collision/Colliders/CircleCollider.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * This is a circle collider for the excalibur rigid body physics simulation\r\n */\r\nclass CircleCollider extends Collider {\r\n get worldPos() {\r\n return this._globalMatrix.getPosition();\r\n }\r\n /**\r\n * Get the radius of the circle\r\n */\r\n get radius() {\r\n var _a;\r\n const tx = this._transform;\r\n const scale = (_a = tx === null || tx === void 0 ? void 0 : tx.globalScale) !== null && _a !== void 0 ? _a : Vector.One;\r\n // This is a trade off, the alternative is retooling circles to support ellipse collisions\r\n return this._naturalRadius * Math.min(scale.x, scale.y);\r\n }\r\n /**\r\n * Set the radius of the circle\r\n */\r\n set radius(val) {\r\n var _a;\r\n const tx = this._transform;\r\n const scale = (_a = tx === null || tx === void 0 ? void 0 : tx.globalScale) !== null && _a !== void 0 ? _a : Vector.One;\r\n // This is a trade off, the alternative is retooling circles to support ellipse collisions\r\n this._naturalRadius = val / Math.min(scale.x, scale.y);\r\n }\r\n constructor(options) {\r\n super();\r\n /**\r\n * Position of the circle relative to the collider, by default (0, 0).\r\n */\r\n this.offset = Vector.Zero;\r\n this._globalMatrix = AffineMatrix.identity();\r\n this.offset = options.offset || Vector.Zero;\r\n this.radius = options.radius || 0;\r\n this._globalMatrix.translate(this.offset.x, this.offset.y);\r\n }\r\n /**\r\n * Returns a clone of this shape, not associated with any collider\r\n */\r\n clone() {\r\n return new CircleCollider({\r\n offset: this.offset.clone(),\r\n radius: this.radius\r\n });\r\n }\r\n /**\r\n * Get the center of the collider in world coordinates\r\n */\r\n get center() {\r\n return this._globalMatrix.getPosition();\r\n }\r\n /**\r\n * Tests if a point is contained in this collider\r\n */\r\n contains(point) {\r\n var _a, _b;\r\n const pos = (_b = (_a = this._transform) === null || _a === void 0 ? void 0 : _a.pos) !== null && _b !== void 0 ? _b : this.offset;\r\n const distance = pos.distance(point);\r\n if (distance <= this.radius) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**\r\n * Casts a ray at the Circle collider and returns the nearest point of collision\r\n * @param ray\r\n */\r\n rayCast(ray, max = Infinity) {\r\n //https://en.wikipedia.org/wiki/Line%E2%80%93sphere_intersection\r\n const c = this.center;\r\n const dir = ray.dir;\r\n const orig = ray.pos;\r\n const discriminant = Math.sqrt(Math.pow(dir.dot(orig.sub(c)), 2) - Math.pow(orig.sub(c).distance(), 2) + Math.pow(this.radius, 2));\r\n if (discriminant < 0) {\r\n // no intersection\r\n return null;\r\n }\r\n else {\r\n let toi = 0;\r\n if (discriminant === 0) {\r\n toi = -dir.dot(orig.sub(c));\r\n if (toi > 0 && toi < max) {\r\n return ray.getPoint(toi);\r\n }\r\n return null;\r\n }\r\n else {\r\n const toi1 = -dir.dot(orig.sub(c)) + discriminant;\r\n const toi2 = -dir.dot(orig.sub(c)) - discriminant;\r\n const positiveToi = [];\r\n if (toi1 >= 0) {\r\n positiveToi.push(toi1);\r\n }\r\n if (toi2 >= 0) {\r\n positiveToi.push(toi2);\r\n }\r\n const mintoi = Math.min(...positiveToi);\r\n if (mintoi <= max) {\r\n return ray.getPoint(mintoi);\r\n }\r\n return null;\r\n }\r\n }\r\n }\r\n getClosestLineBetween(shape) {\r\n if (shape instanceof CircleCollider) {\r\n return ClosestLineJumpTable.CircleCircleClosestLine(this, shape);\r\n }\r\n else if (shape instanceof PolygonCollider) {\r\n return ClosestLineJumpTable.PolygonCircleClosestLine(shape, this).flip();\r\n }\r\n else if (shape instanceof EdgeCollider) {\r\n return ClosestLineJumpTable.CircleEdgeClosestLine(this, shape).flip();\r\n }\r\n else {\r\n throw new Error(`Polygon could not collide with unknown CollisionShape ${typeof shape}`);\r\n }\r\n }\r\n /**\r\n * @inheritdoc\r\n */\r\n collide(collider) {\r\n if (collider instanceof CircleCollider) {\r\n return CollisionJumpTable.CollideCircleCircle(this, collider);\r\n }\r\n else if (collider instanceof PolygonCollider) {\r\n return CollisionJumpTable.CollideCirclePolygon(this, collider);\r\n }\r\n else if (collider instanceof EdgeCollider) {\r\n return CollisionJumpTable.CollideCircleEdge(this, collider);\r\n }\r\n else {\r\n throw new Error(`Circle could not collide with unknown CollisionShape ${typeof collider}`);\r\n }\r\n }\r\n /**\r\n * Find the point on the collider furthest in the direction specified\r\n */\r\n getFurthestPoint(direction) {\r\n return this.center.add(direction.normalize().scale(this.radius));\r\n }\r\n /**\r\n * Find the local point on the shape in the direction specified\r\n * @param direction\r\n */\r\n getFurthestLocalPoint(direction) {\r\n const dir = direction.normalize();\r\n return dir.scale(this.radius);\r\n }\r\n /**\r\n * Get the axis aligned bounding box for the circle collider in world coordinates\r\n */\r\n get bounds() {\r\n var _a, _b, _c;\r\n const tx = this._transform;\r\n const scale = (_a = tx === null || tx === void 0 ? void 0 : tx.globalScale) !== null && _a !== void 0 ? _a : Vector.One;\r\n const rotation = (_b = tx === null || tx === void 0 ? void 0 : tx.globalRotation) !== null && _b !== void 0 ? _b : 0;\r\n const pos = ((_c = tx === null || tx === void 0 ? void 0 : tx.globalPos) !== null && _c !== void 0 ? _c : Vector.Zero);\r\n return new BoundingBox(this.offset.x - this._naturalRadius, this.offset.y - this._naturalRadius, this.offset.x + this._naturalRadius, this.offset.y + this._naturalRadius).rotate(rotation).scale(scale).translate(pos);\r\n }\r\n /**\r\n * Get the axis aligned bounding box for the circle collider in local coordinates\r\n */\r\n get localBounds() {\r\n return new BoundingBox(this.offset.x - this._naturalRadius, this.offset.y - this._naturalRadius, this.offset.x + this._naturalRadius, this.offset.y + this._naturalRadius);\r\n }\r\n /**\r\n * Get axis not implemented on circles, since there are infinite axis in a circle\r\n */\r\n get axes() {\r\n return [];\r\n }\r\n /**\r\n * Returns the moment of inertia of a circle given it's mass\r\n * https://en.wikipedia.org/wiki/List_of_moments_of_inertia\r\n */\r\n getInertia(mass) {\r\n return (mass * this.radius * this.radius) / 2;\r\n }\r\n /* istanbul ignore next */\r\n update(transform) {\r\n var _a;\r\n this._transform = transform;\r\n const globalMat = (_a = transform.matrix) !== null && _a !== void 0 ? _a : this._globalMatrix;\r\n globalMat.clone(this._globalMatrix);\r\n this._globalMatrix.translate(this.offset.x, this.offset.y);\r\n }\r\n /**\r\n * Project the circle along a specified axis\r\n */\r\n project(axis) {\r\n const scalars = [];\r\n const point = this.center;\r\n const dotProduct = point.dot(axis);\r\n scalars.push(dotProduct);\r\n scalars.push(dotProduct + this.radius);\r\n scalars.push(dotProduct - this.radius);\r\n return new Projection(Math.min.apply(Math, scalars), Math.max.apply(Math, scalars));\r\n }\r\n debug(ex, color) {\r\n var _a, _b, _c, _d;\r\n const tx = this._transform;\r\n const scale = (_a = tx === null || tx === void 0 ? void 0 : tx.globalScale) !== null && _a !== void 0 ? _a : Vector.One;\r\n const rotation = (_b = tx === null || tx === void 0 ? void 0 : tx.globalRotation) !== null && _b !== void 0 ? _b : 0;\r\n const pos = ((_c = tx === null || tx === void 0 ? void 0 : tx.globalPos) !== null && _c !== void 0 ? _c : Vector.Zero);\r\n ex.save();\r\n ex.translate(pos.x, pos.y);\r\n ex.rotate(rotation);\r\n ex.scale(scale.x, scale.y);\r\n ex.drawCircle(((_d = this.offset) !== null && _d !== void 0 ? _d : Vector.Zero), this._naturalRadius, Color.Transparent, color, 2);\r\n ex.restore();\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Detection/CollisionContact.ts\n\r\n\r\n\r\n\r\n/**\r\n * Collision contacts are used internally by Excalibur to resolve collision between colliders. This\r\n * Pair prevents collisions from being evaluated more than one time\r\n */\r\nclass CollisionContact {\r\n constructor(colliderA, colliderB, mtv, normal, tangent, points, localPoints, info) {\r\n var _a, _b;\r\n this._canceled = false;\r\n this.colliderA = colliderA;\r\n this.colliderB = colliderB;\r\n this.mtv = mtv;\r\n this.normal = normal;\r\n this.tangent = tangent;\r\n this.points = points;\r\n this.localPoints = localPoints;\r\n this.info = info;\r\n this.id = Pair.calculatePairHash(colliderA.id, colliderB.id);\r\n if (colliderA.__compositeColliderId || colliderB.__compositeColliderId) {\r\n // Add on the parent composite pair for start/end contact\r\n this.id += '|' + Pair.calculatePairHash((_a = colliderA.__compositeColliderId) !== null && _a !== void 0 ? _a : colliderA.id, (_b = colliderB.__compositeColliderId) !== null && _b !== void 0 ? _b : colliderB.id);\r\n }\r\n }\r\n /**\r\n * Match contact awake state, except if body's are Fixed\r\n */\r\n matchAwake() {\r\n const bodyA = this.colliderA.owner.get(BodyComponent);\r\n const bodyB = this.colliderB.owner.get(BodyComponent);\r\n if (bodyA && bodyB) {\r\n if (bodyA.sleeping !== bodyB.sleeping) {\r\n if (bodyA.sleeping && bodyA.collisionType !== CollisionType.Fixed && bodyB.sleepMotion >= Physics.wakeThreshold) {\r\n bodyA.setSleeping(false);\r\n }\r\n if (bodyB.sleeping && bodyB.collisionType !== CollisionType.Fixed && bodyA.sleepMotion >= Physics.wakeThreshold) {\r\n bodyB.setSleeping(false);\r\n }\r\n }\r\n }\r\n }\r\n isCanceled() {\r\n return this._canceled;\r\n }\r\n cancel() {\r\n this._canceled = true;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Colliders/SeparatingAxis.ts\nclass SeparatingAxis {\r\n static findPolygonPolygonSeparation(polyA, polyB) {\r\n let bestSeparation = -Number.MAX_VALUE;\r\n let bestSide = null;\r\n let bestAxis = null;\r\n let bestSideIndex = -1;\r\n let bestOtherPoint = null;\r\n const sides = polyA.getSides();\r\n const localSides = polyA.getLocalSides();\r\n for (let i = 0; i < sides.length; i++) {\r\n const side = sides[i];\r\n const axis = side.normal();\r\n const vertB = polyB.getFurthestPoint(axis.negate());\r\n // Separation on side i's axis\r\n // We are looking for the largest separation between poly A's sides\r\n const vertSeparation = side.distanceToPoint(vertB, true);\r\n if (vertSeparation > bestSeparation) {\r\n bestSeparation = vertSeparation;\r\n bestSide = side;\r\n bestAxis = axis;\r\n bestSideIndex = i;\r\n bestOtherPoint = vertB;\r\n }\r\n }\r\n return {\r\n collider: polyA,\r\n separation: bestAxis ? bestSeparation : 99,\r\n axis: bestAxis,\r\n side: bestSide,\r\n localSide: localSides[bestSideIndex],\r\n sideId: bestSideIndex,\r\n point: bestOtherPoint,\r\n localPoint: bestAxis ? polyB.getFurthestLocalPoint(bestAxis.negate()) : null\r\n };\r\n }\r\n static findCirclePolygonSeparation(circle, polygon) {\r\n const axes = polygon.axes;\r\n const pc = polygon.center;\r\n // Special SAT with circles\r\n const polyDir = pc.sub(circle.worldPos);\r\n const closestPointOnPoly = polygon.getFurthestPoint(polyDir.negate());\r\n axes.push(closestPointOnPoly.sub(circle.worldPos).normalize());\r\n let minOverlap = Number.MAX_VALUE;\r\n let minAxis = null;\r\n let minIndex = -1;\r\n for (let i = 0; i < axes.length; i++) {\r\n const proj1 = polygon.project(axes[i]);\r\n const proj2 = circle.project(axes[i]);\r\n const overlap = proj1.getOverlap(proj2);\r\n if (overlap <= 0) {\r\n return null;\r\n }\r\n else {\r\n if (overlap < minOverlap) {\r\n minOverlap = overlap;\r\n minAxis = axes[i];\r\n minIndex = i;\r\n }\r\n }\r\n }\r\n if (minIndex < 0) {\r\n return null;\r\n }\r\n return minAxis.normalize().scale(minOverlap);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Colliders/CollisionJumpTable.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst CollisionJumpTable = {\r\n CollideCircleCircle(circleA, circleB) {\r\n const circleAPos = circleA.worldPos;\r\n const circleBPos = circleB.worldPos;\r\n const combinedRadius = circleA.radius + circleB.radius;\r\n const distance = circleAPos.distance(circleBPos);\r\n if (distance > combinedRadius) {\r\n return [];\r\n }\r\n // negative means overlap\r\n const separation = combinedRadius - distance;\r\n // Normal points from A -> B\r\n const normal = circleBPos.sub(circleAPos).normalize();\r\n const tangent = normal.perpendicular();\r\n const mvt = normal.scale(separation);\r\n const point = circleA.getFurthestPoint(normal);\r\n const local = circleA.getFurthestLocalPoint(normal);\r\n const info = {\r\n collider: circleA,\r\n separation,\r\n axis: normal,\r\n point: point\r\n };\r\n return [new CollisionContact(circleA, circleB, mvt, normal, tangent, [point], [local], info)];\r\n },\r\n CollideCirclePolygon(circle, polygon) {\r\n var _a, _b;\r\n let minAxis = SeparatingAxis.findCirclePolygonSeparation(circle, polygon);\r\n if (!minAxis) {\r\n return [];\r\n }\r\n // make sure that the minAxis is pointing away from circle\r\n const samedir = minAxis.dot(polygon.center.sub(circle.center));\r\n minAxis = samedir < 0 ? minAxis.negate() : minAxis;\r\n const point = circle.getFurthestPoint(minAxis);\r\n const xf = (_b = (_a = circle.owner) === null || _a === void 0 ? void 0 : _a.get(TransformComponent)) !== null && _b !== void 0 ? _b : new TransformComponent();\r\n const local = xf.applyInverse(point);\r\n const normal = minAxis.normalize();\r\n const info = {\r\n collider: circle,\r\n separation: -minAxis.size,\r\n axis: normal,\r\n point: point,\r\n localPoint: local,\r\n side: polygon.findSide(normal.negate()),\r\n localSide: polygon.findLocalSide(normal.negate())\r\n };\r\n return [new CollisionContact(circle, polygon, minAxis, normal, normal.perpendicular(), [point], [local], info)];\r\n },\r\n CollideCircleEdge(circle, edge) {\r\n // TODO not sure this actually abides by local/world collisions\r\n // Are edge.begin and edge.end local space or world space? I think they should be local\r\n // center of the circle in world pos\r\n const cc = circle.center;\r\n // vector in the direction of the edge\r\n const edgeWorld = edge.asLine();\r\n const e = edgeWorld.end.sub(edgeWorld.begin);\r\n // amount of overlap with the circle's center along the edge direction\r\n const u = e.dot(edgeWorld.end.sub(cc));\r\n const v = e.dot(cc.sub(edgeWorld.begin));\r\n const side = edge.asLine();\r\n const localSide = edge.asLocalLine();\r\n // Potential region A collision (circle is on the left side of the edge, before the beginning)\r\n if (v <= 0) {\r\n const da = edgeWorld.begin.sub(cc);\r\n const dda = da.dot(da); // quick and dirty way of calc'n distance in r^2 terms saves some sqrts\r\n // save some sqrts\r\n if (dda > circle.radius * circle.radius) {\r\n return []; // no collision\r\n }\r\n const normal = da.normalize();\r\n const separation = circle.radius - Math.sqrt(dda);\r\n const info = {\r\n collider: circle,\r\n separation: separation,\r\n axis: normal,\r\n point: side.begin,\r\n side: side,\r\n localSide: localSide\r\n };\r\n return [\r\n new CollisionContact(circle, edge, normal.scale(separation), normal, normal.perpendicular(), [side.begin], [localSide.begin], info)\r\n ];\r\n }\r\n // Potential region B collision (circle is on the right side of the edge, after the end)\r\n if (u <= 0) {\r\n const db = edgeWorld.end.sub(cc);\r\n const ddb = db.dot(db);\r\n if (ddb > circle.radius * circle.radius) {\r\n return [];\r\n }\r\n const normal = db.normalize();\r\n const separation = circle.radius - Math.sqrt(ddb);\r\n const info = {\r\n collider: circle,\r\n separation: separation,\r\n axis: normal,\r\n point: side.end,\r\n side: side,\r\n localSide: localSide\r\n };\r\n return [\r\n new CollisionContact(circle, edge, normal.scale(separation), normal, normal.perpendicular(), [side.end], [localSide.end], info)\r\n ];\r\n }\r\n // Otherwise potential region AB collision (circle is in the middle of the edge between the beginning and end)\r\n const den = e.dot(e);\r\n const pointOnEdge = edgeWorld.begin\r\n .scale(u)\r\n .add(edgeWorld.end.scale(v))\r\n .scale(1 / den);\r\n const d = cc.sub(pointOnEdge);\r\n const dd = d.dot(d);\r\n if (dd > circle.radius * circle.radius) {\r\n return []; // no collision\r\n }\r\n let normal = e.perpendicular();\r\n // flip correct direction\r\n if (normal.dot(cc.sub(edgeWorld.begin)) < 0) {\r\n normal.x = -normal.x;\r\n normal.y = -normal.y;\r\n }\r\n normal = normal.normalize();\r\n const separation = circle.radius - Math.sqrt(dd);\r\n const mvt = normal.scale(separation);\r\n const info = {\r\n collider: circle,\r\n separation: separation,\r\n axis: normal,\r\n point: pointOnEdge,\r\n side: side,\r\n localSide: localSide\r\n };\r\n return [\r\n new CollisionContact(circle, edge, mvt, normal.negate(), normal.negate().perpendicular(), [pointOnEdge], [pointOnEdge.sub(edge.worldPos)], info)\r\n ];\r\n },\r\n CollideEdgeEdge() {\r\n // Edge-edge collision doesn't make sense\r\n return [];\r\n },\r\n CollidePolygonEdge(polygon, edge) {\r\n var _a;\r\n const pc = polygon.center;\r\n const ec = edge.center;\r\n const dir = ec.sub(pc).normalize();\r\n // build a temporary polygon from the edge to use SAT\r\n const linePoly = new PolygonCollider({\r\n points: [edge.begin, edge.end, edge.end.add(dir.scale(100)), edge.begin.add(dir.scale(100))],\r\n offset: edge.offset\r\n });\r\n linePoly.owner = edge.owner;\r\n const tx = (_a = edge.owner) === null || _a === void 0 ? void 0 : _a.get(TransformComponent);\r\n if (tx) {\r\n linePoly.update(edge.owner.get(TransformComponent).get());\r\n }\r\n // Gross hack but poly-poly works well\r\n const contact = this.CollidePolygonPolygon(polygon, linePoly);\r\n if (contact.length) {\r\n // Fudge the contact back to edge\r\n contact[0].colliderB = edge;\r\n contact[0].id = Pair.calculatePairHash(polygon.id, edge.id);\r\n }\r\n return contact;\r\n },\r\n CollidePolygonPolygon(polyA, polyB) {\r\n var _a, _b, _c, _d;\r\n // Multi contact from SAT\r\n // https://gamedev.stackexchange.com/questions/111390/multiple-contacts-for-sat-collision-detection\r\n // do a SAT test to find a min axis if it exists\r\n const separationA = SeparatingAxis.findPolygonPolygonSeparation(polyA, polyB);\r\n // If there is no overlap from boxA's perspective we can end early\r\n if (separationA.separation > 0) {\r\n return [];\r\n }\r\n const separationB = SeparatingAxis.findPolygonPolygonSeparation(polyB, polyA);\r\n // If there is no overlap from boxB's perspective exit now\r\n if (separationB.separation > 0) {\r\n return [];\r\n }\r\n // Separations are both negative, we want to pick the least negative (minimal movement)\r\n const separation = separationA.separation > separationB.separation ? separationA : separationB;\r\n // The incident side is the most opposite from the axes of collision on the other collider\r\n const other = separation.collider === polyA ? polyB : polyA;\r\n const incident = other.findSide(separation.axis.negate());\r\n // Clip incident side by the perpendicular lines at each end of the reference side\r\n // https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm\r\n const reference = separation.side;\r\n const refDir = reference.dir().normalize();\r\n // Find our contact points by clipping the incident by the collision side\r\n const clipRight = incident.clip(refDir.negate(), -refDir.dot(reference.begin));\r\n let clipLeft = null;\r\n if (clipRight) {\r\n clipLeft = clipRight.clip(refDir, refDir.dot(reference.end));\r\n }\r\n // If there is no left there is no collision\r\n if (clipLeft) {\r\n // We only want clip points below the reference edge, discard the others\r\n const points = clipLeft.getPoints().filter((p) => {\r\n return reference.below(p);\r\n });\r\n let normal = separation.axis;\r\n let tangent = normal.perpendicular();\r\n // Point Contact A -> B\r\n if (polyB.center.sub(polyA.center).dot(normal) < 0) {\r\n normal = normal.negate();\r\n tangent = normal.perpendicular();\r\n }\r\n // Points are clipped from incident which is the other collider\r\n // Store those as locals\r\n let localPoints = [];\r\n if (separation.collider === polyA) {\r\n const xf = (_b = (_a = polyB.owner) === null || _a === void 0 ? void 0 : _a.get(TransformComponent)) !== null && _b !== void 0 ? _b : new TransformComponent();\r\n localPoints = points.map((p) => xf.applyInverse(p));\r\n }\r\n else {\r\n const xf = (_d = (_c = polyA.owner) === null || _c === void 0 ? void 0 : _c.get(TransformComponent)) !== null && _d !== void 0 ? _d : new TransformComponent();\r\n localPoints = points.map((p) => xf.applyInverse(p));\r\n }\r\n return [new CollisionContact(polyA, polyB, normal.scale(-separation.separation), normal, tangent, points, localPoints, separation)];\r\n }\r\n return [];\r\n },\r\n FindContactSeparation(contact, localPoint) {\r\n var _a, _b, _c, _d;\r\n const shapeA = contact.colliderA;\r\n const txA = (_b = (_a = contact.colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(TransformComponent)) !== null && _b !== void 0 ? _b : new TransformComponent();\r\n const shapeB = contact.colliderB;\r\n const txB = (_d = (_c = contact.colliderB.owner) === null || _c === void 0 ? void 0 : _c.get(TransformComponent)) !== null && _d !== void 0 ? _d : new TransformComponent();\r\n // both are circles\r\n if (shapeA instanceof CircleCollider && shapeB instanceof CircleCollider) {\r\n const combinedRadius = shapeA.radius + shapeB.radius;\r\n const distance = txA.pos.distance(txB.pos);\r\n const separation = combinedRadius - distance;\r\n return -separation;\r\n }\r\n // both are polygons\r\n if (shapeA instanceof PolygonCollider && shapeB instanceof PolygonCollider) {\r\n if (contact.info.localSide) {\r\n let side;\r\n let worldPoint;\r\n if (contact.info.collider === shapeA) {\r\n side = new LineSegment(txA.apply(contact.info.localSide.begin), txA.apply(contact.info.localSide.end));\r\n worldPoint = txB.apply(localPoint);\r\n }\r\n else {\r\n side = new LineSegment(txB.apply(contact.info.localSide.begin), txB.apply(contact.info.localSide.end));\r\n worldPoint = txA.apply(localPoint);\r\n }\r\n return side.distanceToPoint(worldPoint, true);\r\n }\r\n }\r\n // polygon v circle\r\n if ((shapeA instanceof PolygonCollider && shapeB instanceof CircleCollider) ||\r\n (shapeB instanceof PolygonCollider && shapeA instanceof CircleCollider)) {\r\n const worldPoint = txA.apply(localPoint);\r\n if (contact.info.side) {\r\n return contact.info.side.distanceToPoint(worldPoint, true);\r\n }\r\n }\r\n // polygon v edge\r\n if ((shapeA instanceof EdgeCollider && shapeB instanceof PolygonCollider) ||\r\n (shapeB instanceof EdgeCollider && shapeA instanceof PolygonCollider)) {\r\n let worldPoint;\r\n if (contact.info.collider === shapeA) {\r\n worldPoint = txB.apply(localPoint);\r\n }\r\n else {\r\n worldPoint = txA.apply(localPoint);\r\n }\r\n if (contact.info.side) {\r\n return contact.info.side.distanceToPoint(worldPoint, true);\r\n }\r\n }\r\n // circle v edge\r\n if ((shapeA instanceof CircleCollider && shapeB instanceof EdgeCollider) ||\r\n (shapeB instanceof CircleCollider && shapeA instanceof EdgeCollider)) {\r\n // Local point is always on the edge which is always shapeB\r\n const worldPoint = txB.apply(localPoint);\r\n let circlePoint;\r\n if (shapeA instanceof CircleCollider) {\r\n circlePoint = shapeA.getFurthestPoint(contact.normal);\r\n }\r\n const dist = worldPoint.distance(circlePoint);\r\n if (contact.info.side) {\r\n return dist > 0 ? -dist : 0;\r\n }\r\n }\r\n return 0;\r\n }\r\n};\r\n\n;// CONCATENATED MODULE: ./Collision/Colliders/EdgeCollider.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Edge is a single line collider to create collisions with a single line.\r\n */\r\nclass EdgeCollider extends Collider {\r\n constructor(options) {\r\n var _a;\r\n super();\r\n this._globalMatrix = AffineMatrix.identity();\r\n this.begin = options.begin || Vector.Zero;\r\n this.end = options.end || Vector.Zero;\r\n this.offset = (_a = options.offset) !== null && _a !== void 0 ? _a : Vector.Zero;\r\n }\r\n /**\r\n * Returns a clone of this Edge, not associated with any collider\r\n */\r\n clone() {\r\n return new EdgeCollider({\r\n begin: this.begin.clone(),\r\n end: this.end.clone()\r\n });\r\n }\r\n get worldPos() {\r\n var _a;\r\n const tx = this._transform;\r\n return (_a = tx === null || tx === void 0 ? void 0 : tx.globalPos.add(this.offset)) !== null && _a !== void 0 ? _a : this.offset;\r\n }\r\n /**\r\n * Get the center of the collision area in world coordinates\r\n */\r\n get center() {\r\n const begin = this._getTransformedBegin();\r\n const end = this._getTransformedEnd();\r\n const pos = begin.average(end);\r\n return pos;\r\n }\r\n _getTransformedBegin() {\r\n return this._globalMatrix.multiply(this.begin);\r\n }\r\n _getTransformedEnd() {\r\n return this._globalMatrix.multiply(this.end);\r\n }\r\n /**\r\n * Returns the slope of the line in the form of a vector\r\n */\r\n getSlope() {\r\n const begin = this._getTransformedBegin();\r\n const end = this._getTransformedEnd();\r\n const distance = begin.distance(end);\r\n return end.sub(begin).scale(1 / distance);\r\n }\r\n /**\r\n * Returns the length of the line segment in pixels\r\n */\r\n getLength() {\r\n const begin = this._getTransformedBegin();\r\n const end = this._getTransformedEnd();\r\n const distance = begin.distance(end);\r\n return distance;\r\n }\r\n /**\r\n * Tests if a point is contained in this collision area\r\n */\r\n contains() {\r\n return false;\r\n }\r\n /**\r\n * @inheritdoc\r\n */\r\n rayCast(ray, max = Infinity) {\r\n const numerator = this._getTransformedBegin().sub(ray.pos);\r\n // Test is line and ray are parallel and non intersecting\r\n if (ray.dir.cross(this.getSlope()) === 0 && numerator.cross(ray.dir) !== 0) {\r\n return null;\r\n }\r\n // Lines are parallel\r\n const divisor = ray.dir.cross(this.getSlope());\r\n if (divisor === 0) {\r\n return null;\r\n }\r\n const t = numerator.cross(this.getSlope()) / divisor;\r\n if (t >= 0 && t <= max) {\r\n const u = numerator.cross(ray.dir) / divisor / this.getLength();\r\n if (u >= 0 && u <= 1) {\r\n return ray.getPoint(t);\r\n }\r\n }\r\n return null;\r\n }\r\n /**\r\n * Returns the closes line between this and another collider, from this -> collider\r\n * @param shape\r\n */\r\n getClosestLineBetween(shape) {\r\n if (shape instanceof CircleCollider) {\r\n return ClosestLineJumpTable.CircleEdgeClosestLine(shape, this);\r\n }\r\n else if (shape instanceof PolygonCollider) {\r\n return ClosestLineJumpTable.PolygonEdgeClosestLine(shape, this).flip();\r\n }\r\n else if (shape instanceof EdgeCollider) {\r\n return ClosestLineJumpTable.EdgeEdgeClosestLine(this, shape);\r\n }\r\n else {\r\n throw new Error(`Polygon could not collide with unknown CollisionShape ${typeof shape}`);\r\n }\r\n }\r\n /**\r\n * @inheritdoc\r\n */\r\n collide(shape) {\r\n if (shape instanceof CircleCollider) {\r\n return CollisionJumpTable.CollideCircleEdge(shape, this);\r\n }\r\n else if (shape instanceof PolygonCollider) {\r\n return CollisionJumpTable.CollidePolygonEdge(shape, this);\r\n }\r\n else if (shape instanceof EdgeCollider) {\r\n return CollisionJumpTable.CollideEdgeEdge();\r\n }\r\n else {\r\n throw new Error(`Edge could not collide with unknown CollisionShape ${typeof shape}`);\r\n }\r\n }\r\n /**\r\n * Find the point on the collider furthest in the direction specified\r\n */\r\n getFurthestPoint(direction) {\r\n const transformedBegin = this._getTransformedBegin();\r\n const transformedEnd = this._getTransformedEnd();\r\n if (direction.dot(transformedBegin) > 0) {\r\n return transformedBegin;\r\n }\r\n else {\r\n return transformedEnd;\r\n }\r\n }\r\n _boundsFromBeginEnd(begin, end, padding = 10) {\r\n // A perfectly vertical or horizontal edge would have a bounds 0 width or height\r\n // this causes problems for the collision system so we give them some padding\r\n return new BoundingBox(Math.min(begin.x, end.x) - padding, Math.min(begin.y, end.y) - padding, Math.max(begin.x, end.x) + padding, Math.max(begin.y, end.y) + padding);\r\n }\r\n /**\r\n * Get the axis aligned bounding box for the edge collider in world space\r\n */\r\n get bounds() {\r\n const transformedBegin = this._getTransformedBegin();\r\n const transformedEnd = this._getTransformedEnd();\r\n return this._boundsFromBeginEnd(transformedBegin, transformedEnd);\r\n }\r\n /**\r\n * Get the axis aligned bounding box for the edge collider in local space\r\n */\r\n get localBounds() {\r\n return this._boundsFromBeginEnd(this.begin, this.end);\r\n }\r\n /**\r\n * Returns this edge represented as a line in world coordinates\r\n */\r\n asLine() {\r\n return new LineSegment(this._getTransformedBegin(), this._getTransformedEnd());\r\n }\r\n /**\r\n * Return this edge as a line in local line coordinates (relative to the position)\r\n */\r\n asLocalLine() {\r\n return new LineSegment(this.begin, this.end);\r\n }\r\n /**\r\n * Get the axis associated with the edge\r\n */\r\n get axes() {\r\n const e = this._getTransformedEnd().sub(this._getTransformedBegin());\r\n const edgeNormal = e.normal();\r\n const axes = [];\r\n axes.push(edgeNormal);\r\n axes.push(edgeNormal.negate());\r\n axes.push(edgeNormal.normal());\r\n axes.push(edgeNormal.normal().negate());\r\n return axes;\r\n }\r\n /**\r\n * Get the moment of inertia for an edge\r\n * https://en.wikipedia.org/wiki/List_of_moments_of_inertia\r\n */\r\n getInertia(mass) {\r\n const length = this.end.sub(this.begin).distance() / 2;\r\n return mass * length * length;\r\n }\r\n /**\r\n * @inheritdoc\r\n */\r\n update(transform) {\r\n var _a;\r\n this._transform = transform;\r\n const globalMat = (_a = transform.matrix) !== null && _a !== void 0 ? _a : this._globalMatrix;\r\n globalMat.clone(this._globalMatrix);\r\n this._globalMatrix.translate(this.offset.x, this.offset.y);\r\n }\r\n /**\r\n * Project the edge along a specified axis\r\n */\r\n project(axis) {\r\n const scalars = [];\r\n const points = [this._getTransformedBegin(), this._getTransformedEnd()];\r\n const len = points.length;\r\n for (let i = 0; i < len; i++) {\r\n scalars.push(points[i].dot(axis));\r\n }\r\n return new Projection(Math.min.apply(Math, scalars), Math.max.apply(Math, scalars));\r\n }\r\n debug(ex, color) {\r\n const begin = this._getTransformedBegin();\r\n const end = this._getTransformedEnd();\r\n ex.drawLine(begin, end, color, 2);\r\n ex.drawCircle(begin, 2, color);\r\n ex.drawCircle(end, 2, color);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Colliders/PolygonCollider.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Polygon collider for detecting collisions\r\n */\r\nclass PolygonCollider extends Collider {\r\n /**\r\n * Points in the polygon in order around the perimeter in local coordinates. These are relative from the body transform position.\r\n * Excalibur stores these in counter-clockwise order\r\n */\r\n set points(points) {\r\n this._localBoundsDirty = true;\r\n this._localSidesDirty = true;\r\n this._sidesDirty = true;\r\n this._points = points;\r\n }\r\n /**\r\n * Points in the polygon in order around the perimeter in local coordinates. These are relative from the body transform position.\r\n * Excalibur stores these in counter-clockwise order\r\n */\r\n get points() {\r\n return this._points;\r\n }\r\n constructor(options) {\r\n var _a, _b;\r\n super();\r\n this._logger = Logger.getInstance();\r\n this._transformedPoints = [];\r\n this._sides = [];\r\n this._localSides = [];\r\n this._globalMatrix = AffineMatrix.identity();\r\n this._transformedPointsDirty = true;\r\n this._sidesDirty = true;\r\n this._localSidesDirty = true;\r\n this._localBoundsDirty = true;\r\n this.offset = (_a = options.offset) !== null && _a !== void 0 ? _a : Vector.Zero;\r\n this._globalMatrix.translate(this.offset.x, this.offset.y);\r\n this.points = (_b = options.points) !== null && _b !== void 0 ? _b : [];\r\n const counterClockwise = this._isCounterClockwiseWinding(this.points);\r\n if (!counterClockwise) {\r\n this.points.reverse();\r\n }\r\n if (!this.isConvex()) {\r\n this._logger.warn('Excalibur only supports convex polygon colliders and will not behave properly.' +\r\n 'Call PolygonCollider.triangulate() to build a new collider composed of smaller convex triangles');\r\n }\r\n // calculate initial transformation\r\n this._calculateTransformation();\r\n }\r\n _isCounterClockwiseWinding(points) {\r\n // https://stackoverflow.com/a/1165943\r\n let sum = 0;\r\n for (let i = 0; i < points.length; i++) {\r\n sum += (points[(i + 1) % points.length].x - points[i].x) * (points[(i + 1) % points.length].y + points[i].y);\r\n }\r\n return sum < 0;\r\n }\r\n /**\r\n * Returns if the polygon collider is convex, Excalibur does not handle non-convex collision shapes.\r\n * Call [[Polygon.triangulate]] to generate a [[CompositeCollider]] from this non-convex shape\r\n */\r\n isConvex() {\r\n // From SO: https://stackoverflow.com/a/45372025\r\n if (this.points.length < 3) {\r\n return false;\r\n }\r\n let oldPoint = this.points[this.points.length - 2];\r\n let newPoint = this.points[this.points.length - 1];\r\n let direction = Math.atan2(newPoint.y - oldPoint.y, newPoint.x - oldPoint.x);\r\n let oldDirection = 0;\r\n let orientation = 0;\r\n let angleSum = 0;\r\n for (const [i, point] of this.points.entries()) {\r\n oldPoint = newPoint;\r\n oldDirection = direction;\r\n newPoint = point;\r\n direction = Math.atan2(newPoint.y - oldPoint.y, newPoint.x - oldPoint.x);\r\n if (oldPoint.equals(newPoint)) {\r\n return false; // repeat point\r\n }\r\n let angle = direction - oldDirection;\r\n if (angle <= -Math.PI) {\r\n angle += Math.PI * 2;\r\n }\r\n else if (angle > Math.PI) {\r\n angle -= Math.PI * 2;\r\n }\r\n if (i === 0) {\r\n if (angle === 0.0) {\r\n return false;\r\n }\r\n orientation = angle > 0 ? 1 : -1;\r\n }\r\n else {\r\n if (orientation * angle <= 0) {\r\n return false;\r\n }\r\n }\r\n angleSum += angle;\r\n }\r\n return Math.abs(Math.round(angleSum / (Math.PI * 2))) === 1;\r\n }\r\n /**\r\n * Tessellates the polygon into a triangle fan as a [[CompositeCollider]] of triangle polygons\r\n */\r\n tessellate() {\r\n const polygons = [];\r\n for (let i = 1; i < this.points.length - 2; i++) {\r\n polygons.push([this.points[0], this.points[i + 1], this.points[i + 2]]);\r\n }\r\n polygons.push([this.points[0], this.points[1], this.points[2]]);\r\n return new CompositeCollider(polygons.map(points => Shape.Polygon(points)));\r\n }\r\n /**\r\n * Triangulate the polygon collider using the \"Ear Clipping\" algorithm.\r\n * Returns a new [[CompositeCollider]] made up of smaller triangles.\r\n */\r\n triangulate() {\r\n // https://www.youtube.com/watch?v=hTJFcHutls8\r\n if (this.points.length < 3) {\r\n throw Error('Invalid polygon');\r\n }\r\n /**\r\n * Helper to get a vertex in the list\r\n */\r\n function getItem(index, list) {\r\n if (index >= list.length) {\r\n return list[index % list.length];\r\n }\r\n else if (index < 0) {\r\n return list[index % list.length + list.length];\r\n }\r\n else {\r\n return list[index];\r\n }\r\n }\r\n /**\r\n * Quick test for point in triangle\r\n */\r\n function isPointInTriangle(point, a, b, c) {\r\n const ab = b.sub(a);\r\n const bc = c.sub(b);\r\n const ca = a.sub(c);\r\n const ap = point.sub(a);\r\n const bp = point.sub(b);\r\n const cp = point.sub(c);\r\n const cross1 = ab.cross(ap);\r\n const cross2 = bc.cross(bp);\r\n const cross3 = ca.cross(cp);\r\n if (cross1 > 0 || cross2 > 0 || cross3 > 0) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n const triangles = [];\r\n const vertices = [...this.points];\r\n const indices = range(0, this.points.length - 1);\r\n // 1. Loop through vertices clockwise\r\n // if the vertex is convex (interior angle is < 180) (cross product positive)\r\n // if the polygon formed by it's edges doesn't contain the points\r\n // it's an ear add it to our list of triangles, and restart\r\n while (indices.length > 3) {\r\n for (let i = 0; i < indices.length; i++) {\r\n const a = indices[i];\r\n const b = getItem(i - 1, indices);\r\n const c = getItem(i + 1, indices);\r\n const va = vertices[a];\r\n const vb = vertices[b];\r\n const vc = vertices[c];\r\n // Check convexity\r\n const leftArm = vb.sub(va);\r\n const rightArm = vc.sub(va);\r\n const isConvex = rightArm.cross(leftArm) > 0; // positive cross means convex\r\n if (!isConvex) {\r\n continue;\r\n }\r\n let isEar = true;\r\n // Check that if any vertices are in the triangle a, b, c\r\n for (let j = 0; j < indices.length; j++) {\r\n const vertIndex = indices[j];\r\n // We can skip these\r\n if (vertIndex === a || vertIndex === b || vertIndex === c) {\r\n continue;\r\n }\r\n const point = vertices[vertIndex];\r\n if (isPointInTriangle(point, vb, va, vc)) {\r\n isEar = false;\r\n break;\r\n }\r\n }\r\n // Add ear to polygon list and remove from list\r\n if (isEar) {\r\n triangles.push([vb, va, vc]);\r\n indices.splice(i, 1);\r\n break;\r\n }\r\n }\r\n }\r\n triangles.push([vertices[indices[0]], vertices[indices[1]], vertices[indices[2]]]);\r\n return new CompositeCollider(triangles.map(points => Shape.Polygon(points)));\r\n }\r\n /**\r\n * Returns a clone of this ConvexPolygon, not associated with any collider\r\n */\r\n clone() {\r\n return new PolygonCollider({\r\n offset: this.offset.clone(),\r\n points: this.points.map((p) => p.clone())\r\n });\r\n }\r\n /**\r\n * Returns the world position of the collider, which is the current body transform plus any defined offset\r\n */\r\n get worldPos() {\r\n if (this._transform) {\r\n return this._transform.pos.add(this.offset);\r\n }\r\n return this.offset;\r\n }\r\n /**\r\n * Get the center of the collider in world coordinates\r\n */\r\n get center() {\r\n return this.bounds.center;\r\n }\r\n /**\r\n * Calculates the underlying transformation from the body relative space to world space\r\n */\r\n _calculateTransformation() {\r\n const points = this.points;\r\n const len = points.length;\r\n this._transformedPoints.length = 0; // clear out old transform\r\n for (let i = 0; i < len; i++) {\r\n this._transformedPoints[i] = this._globalMatrix.multiply(points[i].clone());\r\n }\r\n }\r\n /**\r\n * Gets the points that make up the polygon in world space, from actor relative space (if specified)\r\n */\r\n getTransformedPoints() {\r\n if (this._transformedPointsDirty) {\r\n this._calculateTransformation();\r\n this._transformedPointsDirty = false;\r\n }\r\n return this._transformedPoints;\r\n }\r\n /**\r\n * Gets the sides of the polygon in world space\r\n */\r\n getSides() {\r\n if (this._sidesDirty) {\r\n const lines = [];\r\n const points = this.getTransformedPoints();\r\n const len = points.length;\r\n for (let i = 0; i < len; i++) {\r\n // This winding is important\r\n lines.push(new LineSegment(points[i], points[(i + 1) % len]));\r\n }\r\n this._sides = lines;\r\n this._sidesDirty = false;\r\n }\r\n return this._sides;\r\n }\r\n /**\r\n * Returns the local coordinate space sides\r\n */\r\n getLocalSides() {\r\n if (this._localSidesDirty) {\r\n const lines = [];\r\n const points = this.points;\r\n const len = points.length;\r\n for (let i = 0; i < len; i++) {\r\n // This winding is important\r\n lines.push(new LineSegment(points[i], points[(i + 1) % len]));\r\n }\r\n this._localSides = lines;\r\n this._localSidesDirty = false;\r\n }\r\n return this._localSides;\r\n }\r\n /**\r\n * Given a direction vector find the world space side that is most in that direction\r\n * @param direction\r\n */\r\n findSide(direction) {\r\n const sides = this.getSides();\r\n let bestSide = sides[0];\r\n let maxDistance = -Number.MAX_VALUE;\r\n for (let side = 0; side < sides.length; side++) {\r\n const currentSide = sides[side];\r\n const sideNormal = currentSide.normal();\r\n const mostDirection = sideNormal.dot(direction);\r\n if (mostDirection > maxDistance) {\r\n bestSide = currentSide;\r\n maxDistance = mostDirection;\r\n }\r\n }\r\n return bestSide;\r\n }\r\n /**\r\n * Given a direction vector find the local space side that is most in that direction\r\n * @param direction\r\n */\r\n findLocalSide(direction) {\r\n const sides = this.getLocalSides();\r\n let bestSide = sides[0];\r\n let maxDistance = -Number.MAX_VALUE;\r\n for (let side = 0; side < sides.length; side++) {\r\n const currentSide = sides[side];\r\n const sideNormal = currentSide.normal();\r\n const mostDirection = sideNormal.dot(direction);\r\n if (mostDirection > maxDistance) {\r\n bestSide = currentSide;\r\n maxDistance = mostDirection;\r\n }\r\n }\r\n return bestSide;\r\n }\r\n /**\r\n * Get the axis associated with the convex polygon\r\n */\r\n get axes() {\r\n const axes = [];\r\n const sides = this.getSides();\r\n for (let i = 0; i < sides.length; i++) {\r\n axes.push(sides[i].normal());\r\n }\r\n return axes;\r\n }\r\n /**\r\n * Updates the transform for the collision geometry\r\n *\r\n * Collision geometry (points/bounds) will not change until this is called.\r\n * @param transform\r\n */\r\n update(transform) {\r\n var _a;\r\n if (transform) {\r\n this._transform = transform;\r\n this._transformedPointsDirty = true;\r\n this._sidesDirty = true;\r\n // This change means an update must be performed in order for geometry to update\r\n const globalMat = (_a = transform.matrix) !== null && _a !== void 0 ? _a : this._globalMatrix;\r\n globalMat.clone(this._globalMatrix);\r\n this._globalMatrix.translate(this.offset.x, this.offset.y);\r\n }\r\n }\r\n /**\r\n * Tests if a point is contained in this collider in world space\r\n */\r\n contains(point) {\r\n // Always cast to the right, as long as we cast in a consistent fixed direction we\r\n // will be fine\r\n const testRay = new Ray(point, new Vector(1, 0));\r\n const intersectCount = this.getSides().reduce(function (accum, side) {\r\n if (testRay.intersect(side) >= 0) {\r\n return accum + 1;\r\n }\r\n return accum;\r\n }, 0);\r\n if (intersectCount % 2 === 0) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n getClosestLineBetween(collider) {\r\n if (collider instanceof CircleCollider) {\r\n return ClosestLineJumpTable.PolygonCircleClosestLine(this, collider);\r\n }\r\n else if (collider instanceof PolygonCollider) {\r\n return ClosestLineJumpTable.PolygonPolygonClosestLine(this, collider);\r\n }\r\n else if (collider instanceof EdgeCollider) {\r\n return ClosestLineJumpTable.PolygonEdgeClosestLine(this, collider);\r\n }\r\n else {\r\n throw new Error(`Polygon could not collide with unknown CollisionShape ${typeof collider}`);\r\n }\r\n }\r\n /**\r\n * Returns a collision contact if the 2 colliders collide, otherwise collide will\r\n * return null.\r\n * @param collider\r\n */\r\n collide(collider) {\r\n if (collider instanceof CircleCollider) {\r\n return CollisionJumpTable.CollideCirclePolygon(collider, this);\r\n }\r\n else if (collider instanceof PolygonCollider) {\r\n return CollisionJumpTable.CollidePolygonPolygon(this, collider);\r\n }\r\n else if (collider instanceof EdgeCollider) {\r\n return CollisionJumpTable.CollidePolygonEdge(this, collider);\r\n }\r\n else {\r\n throw new Error(`Polygon could not collide with unknown CollisionShape ${typeof collider}`);\r\n }\r\n }\r\n /**\r\n * Find the point on the collider furthest in the direction specified\r\n */\r\n getFurthestPoint(direction) {\r\n const pts = this.getTransformedPoints();\r\n let furthestPoint = null;\r\n let maxDistance = -Number.MAX_VALUE;\r\n for (let i = 0; i < pts.length; i++) {\r\n const distance = direction.dot(pts[i]);\r\n if (distance > maxDistance) {\r\n maxDistance = distance;\r\n furthestPoint = pts[i];\r\n }\r\n }\r\n return furthestPoint;\r\n }\r\n /**\r\n * Find the local point on the collider furthest in the direction specified\r\n * @param direction\r\n */\r\n getFurthestLocalPoint(direction) {\r\n const pts = this.points;\r\n let furthestPoint = pts[0];\r\n let maxDistance = -Number.MAX_VALUE;\r\n for (let i = 0; i < pts.length; i++) {\r\n const distance = direction.dot(pts[i]);\r\n if (distance > maxDistance) {\r\n maxDistance = distance;\r\n furthestPoint = pts[i];\r\n }\r\n }\r\n return furthestPoint;\r\n }\r\n /**\r\n * Finds the closes face to the point using perpendicular distance\r\n * @param point point to test against polygon\r\n */\r\n getClosestFace(point) {\r\n const sides = this.getSides();\r\n let min = Number.POSITIVE_INFINITY;\r\n let faceIndex = -1;\r\n let distance = -1;\r\n for (let i = 0; i < sides.length; i++) {\r\n const dist = sides[i].distanceToPoint(point);\r\n if (dist < min) {\r\n min = dist;\r\n faceIndex = i;\r\n distance = dist;\r\n }\r\n }\r\n if (faceIndex !== -1) {\r\n return {\r\n distance: sides[faceIndex].normal().scale(distance),\r\n face: sides[faceIndex]\r\n };\r\n }\r\n return null;\r\n }\r\n /**\r\n * Get the axis aligned bounding box for the polygon collider in world coordinates\r\n */\r\n get bounds() {\r\n return this.localBounds.transform(this._globalMatrix);\r\n }\r\n /**\r\n * Get the axis aligned bounding box for the polygon collider in local coordinates\r\n */\r\n get localBounds() {\r\n if (this._localBoundsDirty) {\r\n this._localBounds = BoundingBox.fromPoints(this.points);\r\n this._localBoundsDirty = false;\r\n }\r\n return this._localBounds;\r\n }\r\n /**\r\n * Get the moment of inertia for an arbitrary polygon\r\n * https://en.wikipedia.org/wiki/List_of_moments_of_inertia\r\n */\r\n getInertia(mass) {\r\n if (this._cachedMass === mass && this._cachedInertia) {\r\n return this._cachedInertia;\r\n }\r\n let numerator = 0;\r\n let denominator = 0;\r\n const points = this.points;\r\n for (let i = 0; i < points.length; i++) {\r\n const iplusone = (i + 1) % points.length;\r\n const crossTerm = points[iplusone].cross(points[i]);\r\n numerator +=\r\n crossTerm *\r\n (points[i].dot(points[i]) + points[i].dot(points[iplusone]) + points[iplusone].dot(points[iplusone]));\r\n denominator += crossTerm;\r\n }\r\n this._cachedMass = mass;\r\n return this._cachedInertia = (mass / 6) * (numerator / denominator);\r\n }\r\n /**\r\n * Casts a ray into the polygon and returns a vector representing the point of contact (in world space) or null if no collision.\r\n */\r\n rayCast(ray, max = Infinity) {\r\n // find the minimum contact time greater than 0\r\n // contact times less than 0 are behind the ray and we don't want those\r\n const sides = this.getSides();\r\n const len = sides.length;\r\n let minContactTime = Number.MAX_VALUE;\r\n let contactIndex = -1;\r\n for (let i = 0; i < len; i++) {\r\n const contactTime = ray.intersect(sides[i]);\r\n if (contactTime >= 0 && contactTime < minContactTime && contactTime <= max) {\r\n minContactTime = contactTime;\r\n contactIndex = i;\r\n }\r\n }\r\n // contact was found\r\n if (contactIndex >= 0) {\r\n return ray.getPoint(minContactTime);\r\n }\r\n // no contact found\r\n return null;\r\n }\r\n /**\r\n * Project the edges of the polygon along a specified axis\r\n */\r\n project(axis) {\r\n const points = this.getTransformedPoints();\r\n const len = points.length;\r\n let min = Number.MAX_VALUE;\r\n let max = -Number.MAX_VALUE;\r\n for (let i = 0; i < len; i++) {\r\n const scalar = points[i].dot(axis);\r\n min = Math.min(min, scalar);\r\n max = Math.max(max, scalar);\r\n }\r\n return new Projection(min, max);\r\n }\r\n debug(ex, color) {\r\n const firstPoint = this.getTransformedPoints()[0];\r\n const points = [firstPoint, ...this.getTransformedPoints(), firstPoint];\r\n for (let i = 0; i < points.length - 1; i++) {\r\n ex.drawLine(points[i], points[i + 1], color, 2);\r\n ex.drawCircle(points[i], 2, color);\r\n ex.drawCircle(points[i + 1], 2, color);\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Colliders/Shape.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Excalibur helper for defining colliders quickly\r\n */\r\nclass Shape {\r\n /**\r\n * Creates a box collider, under the hood defines a [[PolygonCollider]] collider\r\n * @param width Width of the box\r\n * @param height Height of the box\r\n * @param anchor Anchor of the box (default (.5, .5)) which positions the box relative to the center of the collider's position\r\n * @param offset Optional offset relative to the collider in local coordinates\r\n */\r\n static Box(width, height, anchor = Vector.Half, offset = Vector.Zero) {\r\n return new PolygonCollider({\r\n points: new BoundingBox(-width * anchor.x, -height * anchor.y, width - width * anchor.x, height - height * anchor.y).getPoints(),\r\n offset: offset\r\n });\r\n }\r\n /**\r\n * Creates a new [[PolygonCollider|arbitrary polygon]] collider\r\n *\r\n * PolygonColliders are useful for creating convex polygon shapes\r\n * @param points Points specified in counter clockwise\r\n * @param offset Optional offset relative to the collider in local coordinates\r\n */\r\n static Polygon(points, offset = Vector.Zero) {\r\n return new PolygonCollider({\r\n points: points,\r\n offset: offset\r\n });\r\n }\r\n /**\r\n * Creates a new [[CircleCollider|circle]] collider\r\n *\r\n * Circle colliders are useful for balls, or to make collisions more forgiving on sharp edges\r\n * @param radius Radius of the circle collider\r\n * @param offset Optional offset relative to the collider in local coordinates\r\n */\r\n static Circle(radius, offset = Vector.Zero) {\r\n return new CircleCollider({\r\n radius: radius,\r\n offset: offset\r\n });\r\n }\r\n /**\r\n * Creates a new [[EdgeCollider|edge]] collider\r\n *\r\n * Edge colliders are useful for floors, walls, and other barriers\r\n * @param begin Beginning of the edge in local coordinates to the collider\r\n * @param end Ending of the edge in local coordinates to the collider\r\n */\r\n static Edge(begin, end) {\r\n return new EdgeCollider({\r\n begin: begin,\r\n end: end\r\n });\r\n }\r\n /**\r\n * Creates a new capsule shaped [[CompositeCollider]] using 2 circles and a box\r\n *\r\n * Capsule colliders are useful for platformers with incline or jagged floors to have a smooth\r\n * player experience.\r\n *\r\n * @param width\r\n * @param height\r\n * @param offset Optional offset\r\n */\r\n static Capsule(width, height, offset = Vector.Zero) {\r\n const logger = Logger.getInstance();\r\n if (width === height) {\r\n logger.warn('A capsule collider with equal width and height is a circle, consider using a ex.Shape.Circle or ex.CircleCollider');\r\n }\r\n const vertical = height >= width;\r\n if (vertical) {\r\n // height > width, if equal maybe use a circle\r\n const capsule = new CompositeCollider([\r\n Shape.Circle(width / 2, vec(0, -height / 2 + width / 2).add(offset)),\r\n Shape.Box(width, height - width, Vector.Half, offset),\r\n Shape.Circle(width / 2, vec(0, height / 2 - width / 2).add(offset))\r\n ]);\r\n return capsule;\r\n }\r\n else {\r\n // width > height, if equal maybe use a circle\r\n const capsule = new CompositeCollider([\r\n Shape.Circle(height / 2, vec(-width / 2 + height / 2, 0).add(offset)),\r\n Shape.Box(width - height, height, Vector.Half, offset),\r\n Shape.Circle(height / 2, vec(width / 2 - height / 2, 0).add(offset))\r\n ]);\r\n return capsule;\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/ColliderComponent.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass ColliderComponent extends Component {\r\n constructor(collider) {\r\n super();\r\n this.type = 'ex.collider';\r\n this.events = new EventEmitter();\r\n /**\r\n * Observable that notifies when a collider is added to the body\r\n */\r\n this.$colliderAdded = new Observable();\r\n /**\r\n * Observable that notifies when a collider is removed from the body\r\n */\r\n this.$colliderRemoved = new Observable();\r\n this.set(collider);\r\n }\r\n /**\r\n * Get the current collider geometry\r\n */\r\n get() {\r\n return this._collider;\r\n }\r\n /**\r\n * Set the collider geometry\r\n * @param collider\r\n * @returns the collider you set\r\n */\r\n set(collider) {\r\n this.clear();\r\n if (collider) {\r\n this._collider = collider;\r\n this._collider.owner = this.owner;\r\n collider.events.pipe(this.events);\r\n this.$colliderAdded.notifyAll(collider);\r\n this.update();\r\n }\r\n return collider;\r\n }\r\n /**\r\n * Remove collider geometry from collider component\r\n */\r\n clear() {\r\n if (this._collider) {\r\n this._collider.events.unpipe(this.events);\r\n this.$colliderRemoved.notifyAll(this._collider);\r\n this._collider.owner = null;\r\n this._collider = null;\r\n }\r\n }\r\n clone() {\r\n const clone = new ColliderComponent(this._collider.clone());\r\n return clone;\r\n }\r\n /**\r\n * Return world space bounds\r\n */\r\n get bounds() {\r\n var _a, _b;\r\n return (_b = (_a = this._collider) === null || _a === void 0 ? void 0 : _a.bounds) !== null && _b !== void 0 ? _b : new BoundingBox();\r\n }\r\n /**\r\n * Return local space bounds\r\n */\r\n get localBounds() {\r\n var _a, _b;\r\n return (_b = (_a = this._collider) === null || _a === void 0 ? void 0 : _a.localBounds) !== null && _b !== void 0 ? _b : new BoundingBox();\r\n }\r\n /**\r\n * Update the collider's transformed geometry\r\n */\r\n update() {\r\n var _a;\r\n const tx = (_a = this.owner) === null || _a === void 0 ? void 0 : _a.get(TransformComponent);\r\n if (this._collider) {\r\n this._collider.owner = this.owner;\r\n if (tx) {\r\n this._collider.update(tx.get());\r\n }\r\n }\r\n }\r\n /**\r\n * Collide component with another\r\n * @param other\r\n */\r\n collide(other) {\r\n let colliderA = this._collider;\r\n let colliderB = other._collider;\r\n if (!colliderA || !colliderB) {\r\n return [];\r\n }\r\n // If we have a composite lefthand side :(\r\n // Might bite us, but to avoid updating all the handlers make composite always left side\r\n let flipped = false;\r\n if (colliderB instanceof CompositeCollider) {\r\n colliderA = colliderB;\r\n colliderB = this._collider;\r\n flipped = true;\r\n }\r\n if (this._collider) {\r\n const contacts = colliderA.collide(colliderB);\r\n if (contacts) {\r\n if (flipped) {\r\n contacts.forEach((contact) => {\r\n contact.mtv = contact.mtv.negate();\r\n contact.normal = contact.normal.negate();\r\n contact.tangent = contact.normal.perpendicular();\r\n contact.colliderA = this._collider;\r\n contact.colliderB = other._collider;\r\n });\r\n }\r\n return contacts;\r\n }\r\n return [];\r\n }\r\n return [];\r\n }\r\n onAdd(entity) {\r\n if (this._collider) {\r\n this.update();\r\n }\r\n // Wire up the collider events to the owning entity\r\n this.events.on('precollision', (evt) => {\r\n const precollision = evt;\r\n entity.events.emit('precollision', new PreCollisionEvent(precollision.target.owner, precollision.other.owner, precollision.side, precollision.intersection));\r\n });\r\n this.events.on('postcollision', (evt) => {\r\n const postcollision = evt;\r\n entity.events.emit('postcollision', new PostCollisionEvent(postcollision.target.owner, postcollision.other.owner, postcollision.side, postcollision.intersection));\r\n });\r\n this.events.on('collisionstart', (evt) => {\r\n const start = evt;\r\n entity.events.emit('collisionstart', new CollisionStartEvent(start.target.owner, start.other.owner, start.contact));\r\n });\r\n this.events.on('collisionend', (evt) => {\r\n const end = evt;\r\n entity.events.emit('collisionend', new CollisionEndEvent(end.target.owner, end.other.owner));\r\n });\r\n }\r\n onRemove() {\r\n this.events.clear();\r\n this.$colliderRemoved.notifyAll(this._collider);\r\n }\r\n /**\r\n * Sets up a box geometry based on the current bounds of the associated actor of this physics body.\r\n *\r\n * If no width/height are specified the body will attempt to use the associated actor's width/height.\r\n *\r\n * By default, the box is center is at (0, 0) which means it is centered around the actors anchor.\r\n */\r\n useBoxCollider(width, height, anchor = Vector.Half, center = Vector.Zero) {\r\n const collider = Shape.Box(width, height, anchor, center);\r\n return (this.set(collider));\r\n }\r\n /**\r\n * Sets up a [[PolygonCollider|polygon]] collision geometry based on a list of of points relative\r\n * to the anchor of the associated actor\r\n * of this physics body.\r\n *\r\n * Only [convex polygon](https://en.wikipedia.org/wiki/Convex_polygon) definitions are supported.\r\n *\r\n * By default, the box is center is at (0, 0) which means it is centered around the actors anchor.\r\n */\r\n usePolygonCollider(points, center = Vector.Zero) {\r\n const poly = Shape.Polygon(points, center);\r\n return (this.set(poly));\r\n }\r\n /**\r\n * Sets up a [[Circle|circle collision geometry]] as the only collider with a specified radius in pixels.\r\n *\r\n * By default, the box is center is at (0, 0) which means it is centered around the actors anchor.\r\n */\r\n useCircleCollider(radius, center = Vector.Zero) {\r\n const collider = Shape.Circle(radius, center);\r\n return (this.set(collider));\r\n }\r\n /**\r\n * Sets up an [[Edge|edge collision geometry]] with a start point and an end point relative to the anchor of the associated actor\r\n * of this physics body.\r\n *\r\n * By default, the box is center is at (0, 0) which means it is centered around the actors anchor.\r\n */\r\n useEdgeCollider(begin, end) {\r\n const collider = Shape.Edge(begin, end);\r\n return (this.set(collider));\r\n }\r\n /**\r\n * Setups up a [[CompositeCollider]] which can define any arbitrary set of excalibur colliders\r\n * @param colliders\r\n */\r\n useCompositeCollider(colliders) {\r\n return (this.set(new CompositeCollider(colliders)));\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/BodyComponent.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nvar DegreeOfFreedom;\r\n(function (DegreeOfFreedom) {\r\n DegreeOfFreedom[\"Rotation\"] = \"rotation\";\r\n DegreeOfFreedom[\"X\"] = \"x\";\r\n DegreeOfFreedom[\"Y\"] = \"y\";\r\n})(DegreeOfFreedom || (DegreeOfFreedom = {}));\r\n/**\r\n * Body describes all the physical properties pos, vel, acc, rotation, angular velocity for the purpose of\r\n * of physics simulation.\r\n */\r\nclass BodyComponent extends Component {\r\n constructor(options) {\r\n var _a, _b, _c;\r\n super();\r\n this.type = 'ex.body';\r\n this.dependencies = [TransformComponent, MotionComponent];\r\n this.id = createId('body', BodyComponent._ID++);\r\n this.events = new EventEmitter();\r\n this._oldTransform = new Transform();\r\n /**\r\n * Indicates whether the old transform has been captured at least once for interpolation\r\n * @internal\r\n */\r\n this.__oldTransformCaptured = false;\r\n /**\r\n * Enable or disabled the fixed update interpolation, by default interpolation is on.\r\n */\r\n this.enableFixedUpdateInterpolate = true;\r\n /**\r\n * Collision type for the rigidbody physics simulation, by default [[CollisionType.PreventCollision]]\r\n */\r\n this.collisionType = CollisionType.PreventCollision;\r\n /**\r\n * The collision group for the body's colliders, by default body colliders collide with everything\r\n */\r\n this.group = CollisionGroup.All;\r\n /**\r\n * The amount of mass the body has\r\n */\r\n this._mass = Physics.defaultMass;\r\n /**\r\n * Amount of \"motion\" the body has before sleeping. If below [[Physics.sleepEpsilon]] it goes to \"sleep\"\r\n */\r\n this.sleepMotion = Physics.sleepEpsilon * 5;\r\n /**\r\n * Can this body sleep, by default bodies do not sleep\r\n */\r\n this.canSleep = Physics.bodiesCanSleepByDefault;\r\n this._sleeping = false;\r\n /**\r\n * The also known as coefficient of restitution of this actor, represents the amount of energy preserved after collision or the\r\n * bounciness. If 1, it is 100% bouncy, 0 it completely absorbs.\r\n */\r\n this.bounciness = 0.2;\r\n /**\r\n * The coefficient of friction on this actor\r\n */\r\n this.friction = 0.99;\r\n /**\r\n * Should use global gravity [[Physics.gravity]] in it's physics simulation, default is true\r\n */\r\n this.useGravity = true;\r\n /**\r\n * Degrees of freedom to limit\r\n *\r\n * Note: this only limits responses in the realistic solver, if velocity/angularVelocity is set the actor will still respond\r\n */\r\n this.limitDegreeOfFreedom = [];\r\n /**\r\n * The velocity of the actor last frame (vx, vy) in pixels/second\r\n */\r\n this.oldVel = new Vector(0, 0);\r\n /**\r\n * Gets/sets the acceleration of the actor from the last frame. This does not include the global acc [[Physics.acc]].\r\n */\r\n this.oldAcc = Vector.Zero;\r\n if (options) {\r\n this.collisionType = (_a = options.type) !== null && _a !== void 0 ? _a : this.collisionType;\r\n this.group = (_b = options.group) !== null && _b !== void 0 ? _b : this.group;\r\n this.useGravity = (_c = options.useGravity) !== null && _c !== void 0 ? _c : this.useGravity;\r\n }\r\n }\r\n get matrix() {\r\n return this.transform.get().matrix;\r\n }\r\n get mass() {\r\n return this._mass;\r\n }\r\n set mass(newMass) {\r\n this._mass = newMass;\r\n this._cachedInertia = undefined;\r\n this._cachedInverseInertia = undefined;\r\n }\r\n /**\r\n * The inverse mass (1/mass) of the body. If [[CollisionType.Fixed]] this is 0, meaning \"infinite\" mass\r\n */\r\n get inverseMass() {\r\n return this.collisionType === CollisionType.Fixed ? 0 : 1 / this.mass;\r\n }\r\n /**\r\n * Whether this body is sleeping or not\r\n */\r\n get sleeping() {\r\n return this._sleeping;\r\n }\r\n /**\r\n * Set the sleep state of the body\r\n * @param sleeping\r\n */\r\n setSleeping(sleeping) {\r\n this._sleeping = sleeping;\r\n if (!sleeping) {\r\n // Give it a kick to keep it from falling asleep immediately\r\n this.sleepMotion = Physics.sleepEpsilon * 5;\r\n }\r\n else {\r\n this.vel = Vector.Zero;\r\n this.acc = Vector.Zero;\r\n this.angularVelocity = 0;\r\n this.sleepMotion = 0;\r\n }\r\n }\r\n /**\r\n * Update body's [[BodyComponent.sleepMotion]] for the purpose of sleeping\r\n */\r\n updateMotion() {\r\n if (this._sleeping) {\r\n this.setSleeping(true);\r\n }\r\n const currentMotion = this.vel.size * this.vel.size + Math.abs(this.angularVelocity * this.angularVelocity);\r\n const bias = Physics.sleepBias;\r\n this.sleepMotion = bias * this.sleepMotion + (1 - bias) * currentMotion;\r\n this.sleepMotion = clamp(this.sleepMotion, 0, 10 * Physics.sleepEpsilon);\r\n if (this.canSleep && this.sleepMotion < Physics.sleepEpsilon) {\r\n this.setSleeping(true);\r\n }\r\n }\r\n /**\r\n * Get the moment of inertia from the [[ColliderComponent]]\r\n */\r\n get inertia() {\r\n if (this._cachedInertia) {\r\n return this._cachedInertia;\r\n }\r\n // Inertia is a property of the geometry, so this is a little goofy but seems to be okay?\r\n const collider = this.owner.get(ColliderComponent);\r\n if (collider) {\r\n collider.$colliderAdded.subscribe(() => {\r\n this._cachedInertia = null;\r\n });\r\n collider.$colliderRemoved.subscribe(() => {\r\n this._cachedInertia = null;\r\n });\r\n const maybeCollider = collider.get();\r\n if (maybeCollider) {\r\n return this._cachedInertia = maybeCollider.getInertia(this.mass);\r\n }\r\n }\r\n return 0;\r\n }\r\n /**\r\n * Get the inverse moment of inertial from the [[ColliderComponent]]. If [[CollisionType.Fixed]] this is 0, meaning \"infinite\" mass\r\n */\r\n get inverseInertia() {\r\n if (this._cachedInverseInertia) {\r\n return this._cachedInverseInertia;\r\n }\r\n return this._cachedInverseInertia = this.collisionType === CollisionType.Fixed ? 0 : 1 / this.inertia;\r\n }\r\n /**\r\n * Returns if the owner is active\r\n */\r\n get active() {\r\n var _a;\r\n return !!((_a = this.owner) === null || _a === void 0 ? void 0 : _a.active);\r\n }\r\n /**\r\n * @deprecated Use globalP0s\r\n */\r\n get center() {\r\n return this.globalPos;\r\n }\r\n get transform() {\r\n var _a;\r\n return (_a = this.owner) === null || _a === void 0 ? void 0 : _a.get(TransformComponent);\r\n }\r\n get motion() {\r\n var _a;\r\n return (_a = this.owner) === null || _a === void 0 ? void 0 : _a.get(MotionComponent);\r\n }\r\n get pos() {\r\n return this.transform.pos;\r\n }\r\n set pos(val) {\r\n this.transform.pos = val;\r\n }\r\n /**\r\n * The (x, y) position of the actor this will be in the middle of the actor if the\r\n * [[Actor.anchor]] is set to (0.5, 0.5) which is default.\r\n * If you want the (x, y) position to be the top left of the actor specify an anchor of (0, 0).\r\n */\r\n get globalPos() {\r\n return this.transform.globalPos;\r\n }\r\n set globalPos(val) {\r\n this.transform.globalPos = val;\r\n }\r\n /**\r\n * The position of the actor last frame (x, y) in pixels\r\n */\r\n get oldPos() {\r\n return this._oldTransform.pos;\r\n }\r\n /**\r\n * The current velocity vector (vx, vy) of the actor in pixels/second\r\n */\r\n get vel() {\r\n return this.motion.vel;\r\n }\r\n set vel(val) {\r\n this.motion.vel = val;\r\n }\r\n /**\r\n * The current acceleration vector (ax, ay) of the actor in pixels/second/second. An acceleration pointing down such as (0, 100) may\r\n * be useful to simulate a gravitational effect.\r\n */\r\n get acc() {\r\n return this.motion.acc;\r\n }\r\n set acc(val) {\r\n this.motion.acc = val;\r\n }\r\n /**\r\n * The current torque applied to the actor\r\n */\r\n get torque() {\r\n return this.motion.torque;\r\n }\r\n set torque(val) {\r\n this.motion.torque = val;\r\n }\r\n /**\r\n * Gets/sets the rotation of the body from the last frame.\r\n */\r\n get oldRotation() {\r\n return this._oldTransform.rotation;\r\n }\r\n /**\r\n * The rotation of the body in radians\r\n */\r\n get rotation() {\r\n return this.transform.globalRotation;\r\n }\r\n set rotation(val) {\r\n this.transform.globalRotation = val;\r\n }\r\n /**\r\n * The scale vector of the actor\r\n */\r\n get scale() {\r\n return this.transform.globalScale;\r\n }\r\n set scale(val) {\r\n this.transform.globalScale = val;\r\n }\r\n /**\r\n * The scale of the actor last frame\r\n */\r\n get oldScale() {\r\n return this._oldTransform.scale;\r\n }\r\n /**\r\n * The scale rate of change of the actor in scale/second\r\n */\r\n get scaleFactor() {\r\n return this.motion.scaleFactor;\r\n }\r\n set scaleFactor(scaleFactor) {\r\n this.motion.scaleFactor = scaleFactor;\r\n }\r\n /**\r\n * Get the angular velocity in radians/second\r\n */\r\n get angularVelocity() {\r\n return this.motion.angularVelocity;\r\n }\r\n /**\r\n * Set the angular velocity in radians/second\r\n */\r\n set angularVelocity(value) {\r\n this.motion.angularVelocity = value;\r\n }\r\n /**\r\n * Apply a specific impulse to the body\r\n * @param point\r\n * @param impulse\r\n */\r\n applyImpulse(point, impulse) {\r\n if (this.collisionType !== CollisionType.Active) {\r\n return; // only active objects participate in the simulation\r\n }\r\n const finalImpulse = impulse.scale(this.inverseMass);\r\n if (this.limitDegreeOfFreedom.includes(DegreeOfFreedom.X)) {\r\n finalImpulse.x = 0;\r\n }\r\n if (this.limitDegreeOfFreedom.includes(DegreeOfFreedom.Y)) {\r\n finalImpulse.y = 0;\r\n }\r\n this.vel.addEqual(finalImpulse);\r\n if (!this.limitDegreeOfFreedom.includes(DegreeOfFreedom.Rotation)) {\r\n const distanceFromCenter = point.sub(this.globalPos);\r\n this.angularVelocity += this.inverseInertia * distanceFromCenter.cross(impulse);\r\n }\r\n }\r\n /**\r\n * Apply only linear impulse to the body\r\n * @param impulse\r\n */\r\n applyLinearImpulse(impulse) {\r\n if (this.collisionType !== CollisionType.Active) {\r\n return; // only active objects participate in the simulation\r\n }\r\n const finalImpulse = impulse.scale(this.inverseMass);\r\n if (this.limitDegreeOfFreedom.includes(DegreeOfFreedom.X)) {\r\n finalImpulse.x = 0;\r\n }\r\n if (this.limitDegreeOfFreedom.includes(DegreeOfFreedom.Y)) {\r\n finalImpulse.y = 0;\r\n }\r\n this.vel = this.vel.add(finalImpulse);\r\n }\r\n /**\r\n * Apply only angular impulse to the body\r\n * @param point\r\n * @param impulse\r\n */\r\n applyAngularImpulse(point, impulse) {\r\n if (this.collisionType !== CollisionType.Active) {\r\n return; // only active objects participate in the simulation\r\n }\r\n if (!this.limitDegreeOfFreedom.includes(DegreeOfFreedom.Rotation)) {\r\n const distanceFromCenter = point.sub(this.globalPos);\r\n this.angularVelocity += this.inverseInertia * distanceFromCenter.cross(impulse);\r\n }\r\n }\r\n /**\r\n * Sets the old versions of pos, vel, acc, and scale.\r\n */\r\n captureOldTransform() {\r\n // Capture old values before integration step updates them\r\n this.__oldTransformCaptured = true;\r\n this.transform.get().clone(this._oldTransform);\r\n this.oldVel.setTo(this.vel.x, this.vel.y);\r\n this.oldAcc.setTo(this.acc.x, this.acc.y);\r\n }\r\n clone() {\r\n const component = super.clone();\r\n return component;\r\n }\r\n}\r\nBodyComponent._ID = 0;\r\n\n;// CONCATENATED MODULE: ./EntityComponentSystem/Entity.ts\n\r\n\r\n\r\n\r\n/**\r\n * AddedComponent message\r\n */\r\nclass AddedComponent {\r\n constructor(data) {\r\n this.data = data;\r\n this.type = 'Component Added';\r\n }\r\n}\r\n/**\r\n * Type guard to know if message is f an Added Component\r\n */\r\nfunction isAddedComponent(x) {\r\n return !!x && x.type === 'Component Added';\r\n}\r\n/**\r\n * RemovedComponent message\r\n */\r\nclass RemovedComponent {\r\n constructor(data) {\r\n this.data = data;\r\n this.type = 'Component Removed';\r\n }\r\n}\r\n/**\r\n * Type guard to know if message is for a Removed Component\r\n */\r\nfunction isRemovedComponent(x) {\r\n return !!x && x.type === 'Component Removed';\r\n}\r\nconst EntityEvents = {\r\n Initialize: 'initialize',\r\n PreUpdate: 'preupdate',\r\n PostUpdate: 'postupdate'\r\n};\r\n/**\r\n * An Entity is the base type of anything that can have behavior in Excalibur, they are part of the built in entity component system\r\n *\r\n * Entities can be strongly typed with the components they contain\r\n *\r\n * ```typescript\r\n * const entity = new Entity();\r\n * entity.components.a; // Type ComponentA\r\n * entity.components.b; // Type ComponentB\r\n * ```\r\n */\r\nclass Entity {\r\n constructor(components, name) {\r\n /**\r\n * Listen to or emit events for an entity\r\n */\r\n this.events = new EventEmitter();\r\n /**\r\n * The unique identifier for the entity\r\n */\r\n this.id = Entity._ID++;\r\n /**\r\n * The scene that the entity is in, if any\r\n */\r\n this.scene = null;\r\n this._name = 'anonymous';\r\n /**\r\n * Whether this entity is active, if set to false it will be reclaimed\r\n */\r\n this.active = true;\r\n /**\r\n * Bucket to hold on to deferred removals\r\n */\r\n this._componentsToRemove = [];\r\n this._componentTypeToInstance = new Map();\r\n this._componentStringToInstance = new Map();\r\n this._tagsMemo = [];\r\n this._typesMemo = [];\r\n /**\r\n * Observable that keeps track of component add or remove changes on the entity\r\n */\r\n this.componentAdded$ = new Observable();\r\n this.componentRemoved$ = new Observable();\r\n this._parent = null;\r\n this.childrenAdded$ = new Observable();\r\n this.childrenRemoved$ = new Observable();\r\n this._children = [];\r\n this._isInitialized = false;\r\n this._setName(name);\r\n if (components) {\r\n for (const component of components) {\r\n this.addComponent(component);\r\n }\r\n }\r\n }\r\n _setName(name) {\r\n if (name) {\r\n this._name = name;\r\n }\r\n }\r\n get name() {\r\n return this._name;\r\n }\r\n /**\r\n * Kill the entity, means it will no longer be updated. Kills are deferred to the end of the update.\r\n * If parented it will be removed from the parent when killed.\r\n */\r\n kill() {\r\n if (this.active) {\r\n this.active = false;\r\n this.unparent();\r\n }\r\n }\r\n isKilled() {\r\n return !this.active;\r\n }\r\n /**\r\n * Specifically get the tags on the entity from [[TagComponent]]\r\n */\r\n get tags() {\r\n return this._tagsMemo;\r\n }\r\n /**\r\n * Check if a tag exists on the entity\r\n * @param tag name to check for\r\n */\r\n hasTag(tag) {\r\n return this.tags.includes(tag);\r\n }\r\n /**\r\n * Adds a tag to an entity\r\n * @param tag\r\n * @returns Entity\r\n */\r\n addTag(tag) {\r\n return this.addComponent(new TagComponent(tag));\r\n }\r\n /**\r\n * Removes a tag on the entity\r\n *\r\n * Removals are deferred until the end of update\r\n * @param tag\r\n * @param force Remove component immediately, no deferred\r\n */\r\n removeTag(tag, force = false) {\r\n return this.removeComponent(tag, force);\r\n }\r\n /**\r\n * The types of the components on the Entity\r\n */\r\n get types() {\r\n return this._typesMemo;\r\n }\r\n _rebuildMemos() {\r\n this._tagsMemo = Array.from(this._componentStringToInstance.values())\r\n .filter((c) => c instanceof TagComponent)\r\n .map((c) => c.type);\r\n this._typesMemo = Array.from(this._componentStringToInstance.keys());\r\n }\r\n getComponents() {\r\n return Array.from(this._componentStringToInstance.values());\r\n }\r\n _notifyAddComponent(component) {\r\n this._rebuildMemos();\r\n const added = new AddedComponent({\r\n component,\r\n entity: this\r\n });\r\n this.componentAdded$.notifyAll(added);\r\n }\r\n _notifyRemoveComponent(component) {\r\n const removed = new RemovedComponent({\r\n component,\r\n entity: this\r\n });\r\n this.componentRemoved$.notifyAll(removed);\r\n this._rebuildMemos();\r\n }\r\n get parent() {\r\n return this._parent;\r\n }\r\n /**\r\n * Get the direct children of this entity\r\n */\r\n get children() {\r\n return this._children;\r\n }\r\n /**\r\n * Unparents this entity, if there is a parent. Otherwise it does nothing.\r\n */\r\n unparent() {\r\n if (this._parent) {\r\n this._parent.removeChild(this);\r\n this._parent = null;\r\n }\r\n }\r\n /**\r\n * Adds an entity to be a child of this entity\r\n * @param entity\r\n */\r\n addChild(entity) {\r\n if (entity.parent === null) {\r\n if (this.getAncestors().includes(entity)) {\r\n throw new Error('Cycle detected, cannot add entity');\r\n }\r\n this._children.push(entity);\r\n entity._parent = this;\r\n this.childrenAdded$.notifyAll(entity);\r\n }\r\n else {\r\n throw new Error('Entity already has a parent, cannot add without unparenting');\r\n }\r\n return this;\r\n }\r\n /**\r\n * Remove an entity from children if it exists\r\n * @param entity\r\n */\r\n removeChild(entity) {\r\n if (entity.parent === this) {\r\n removeItemFromArray(entity, this._children);\r\n entity._parent = null;\r\n this.childrenRemoved$.notifyAll(entity);\r\n }\r\n return this;\r\n }\r\n /**\r\n * Removes all children from this entity\r\n */\r\n removeAllChildren() {\r\n // Avoid modifying the array issue by walking backwards\r\n for (let i = this.children.length - 1; i >= 0; i--) {\r\n this.removeChild(this.children[i]);\r\n }\r\n return this;\r\n }\r\n /**\r\n * Returns a list of parent entities starting with the topmost parent. Includes the current entity.\r\n */\r\n getAncestors() {\r\n const result = [this];\r\n let current = this.parent;\r\n while (current) {\r\n result.push(current);\r\n current = current.parent;\r\n }\r\n return result.reverse();\r\n }\r\n /**\r\n * Returns a list of all the entities that descend from this entity. Includes the current entity.\r\n */\r\n getDescendants() {\r\n let result = [this];\r\n let queue = [this];\r\n while (queue.length > 0) {\r\n const curr = queue.pop();\r\n queue = queue.concat(curr.children);\r\n result = result.concat(curr.children);\r\n }\r\n return result;\r\n }\r\n /**\r\n * Creates a deep copy of the entity and a copy of all its components\r\n */\r\n clone() {\r\n const newEntity = new Entity();\r\n for (const c of this.types) {\r\n newEntity.addComponent(this.get(c).clone());\r\n }\r\n for (const child of this.children) {\r\n newEntity.addChild(child.clone());\r\n }\r\n return newEntity;\r\n }\r\n /**\r\n * Adds a copy of all the components from another template entity as a \"prefab\"\r\n * @param templateEntity Entity to use as a template\r\n * @param force Force component replacement if it already exists on the target entity\r\n */\r\n addTemplate(templateEntity, force = false) {\r\n for (const c of templateEntity.getComponents()) {\r\n this.addComponent(c.clone(), force);\r\n }\r\n for (const child of templateEntity.children) {\r\n this.addChild(child.clone().addTemplate(child));\r\n }\r\n return this;\r\n }\r\n /**\r\n * Adds a component to the entity\r\n * @param component Component or Entity to add copy of components from\r\n * @param force Optionally overwrite any existing components of the same type\r\n */\r\n addComponent(component, force = false) {\r\n // if component already exists, skip if not forced\r\n if (this.has(component.type)) {\r\n if (force) {\r\n // Remove existing component type if exists when forced\r\n this.removeComponent(component, true);\r\n }\r\n else {\r\n // early exit component exits\r\n return this;\r\n }\r\n }\r\n // TODO circular dependencies will be a problem\r\n if (component.dependencies && component.dependencies.length) {\r\n for (const ctor of component.dependencies) {\r\n this.addComponent(new ctor());\r\n }\r\n }\r\n component.owner = this;\r\n const constuctorType = component.constructor;\r\n this._componentTypeToInstance.set(constuctorType, component);\r\n this._componentStringToInstance.set(component.type, component);\r\n if (component.onAdd) {\r\n component.onAdd(this);\r\n }\r\n this._notifyAddComponent(component);\r\n return this;\r\n }\r\n /**\r\n * Removes a component from the entity, by default removals are deferred to the end of entity update to avoid consistency issues\r\n *\r\n * Components can be force removed with the `force` flag, the removal is not deferred and happens immediately\r\n * @param componentOrType\r\n * @param force\r\n */\r\n removeComponent(componentOrType, force = false) {\r\n if (force) {\r\n if (typeof componentOrType === 'string') {\r\n this._removeComponentByType(componentOrType);\r\n }\r\n else if (componentOrType instanceof Component) {\r\n this._removeComponentByType(componentOrType.type);\r\n }\r\n }\r\n else {\r\n this._componentsToRemove.push(componentOrType);\r\n }\r\n return this;\r\n }\r\n clearComponents() {\r\n const components = this.getComponents();\r\n for (const c of components) {\r\n this.removeComponent(c);\r\n }\r\n }\r\n _removeComponentByType(type) {\r\n if (this.has(type)) {\r\n const component = this.get(type);\r\n component.owner = null;\r\n if (component.onRemove) {\r\n component.onRemove(this);\r\n }\r\n const ctor = component.constructor;\r\n this._componentTypeToInstance.delete(ctor);\r\n this._componentStringToInstance.delete(component.type);\r\n this._notifyRemoveComponent(component);\r\n }\r\n }\r\n /**\r\n * @hidden\r\n * @internal\r\n */\r\n processComponentRemoval() {\r\n for (const componentOrType of this._componentsToRemove) {\r\n const type = typeof componentOrType === 'string' ? componentOrType : componentOrType.type;\r\n this._removeComponentByType(type);\r\n }\r\n this._componentsToRemove.length = 0;\r\n }\r\n has(type) {\r\n if (typeof type === 'string') {\r\n return this._componentStringToInstance.has(type);\r\n }\r\n else {\r\n return this._componentTypeToInstance.has(type);\r\n }\r\n }\r\n get(type) {\r\n if (typeof type === 'string') {\r\n return this._componentStringToInstance.get(type);\r\n }\r\n else {\r\n return this._componentTypeToInstance.get(type);\r\n }\r\n }\r\n /**\r\n * Gets whether the actor is Initialized\r\n */\r\n get isInitialized() {\r\n return this._isInitialized;\r\n }\r\n /**\r\n * Initializes this entity, meant to be called by the Scene before first update not by users of Excalibur.\r\n *\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * @internal\r\n */\r\n _initialize(engine) {\r\n if (!this.isInitialized) {\r\n this.onInitialize(engine);\r\n this.events.emit('initialize', new InitializeEvent(engine, this));\r\n this._isInitialized = true;\r\n }\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Internal _preupdate handler for [[onPreUpdate]] lifecycle event\r\n * @internal\r\n */\r\n _preupdate(engine, delta) {\r\n this.events.emit('preupdate', new PreUpdateEvent(engine, delta, this));\r\n this.onPreUpdate(engine, delta);\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Internal _preupdate handler for [[onPostUpdate]] lifecycle event\r\n * @internal\r\n */\r\n _postupdate(engine, delta) {\r\n this.events.emit('postupdate', new PostUpdateEvent(engine, delta, this));\r\n this.onPostUpdate(engine, delta);\r\n }\r\n /**\r\n * `onInitialize` is called before the first update of the entity. This method is meant to be\r\n * overridden.\r\n *\r\n * Synonymous with the event handler `.on('initialize', (evt) => {...})`\r\n */\r\n onInitialize(_engine) {\r\n // Override me\r\n }\r\n /**\r\n * Safe to override onPreUpdate lifecycle event handler. Synonymous with `.on('preupdate', (evt) =>{...})`\r\n *\r\n * `onPreUpdate` is called directly before an entity is updated.\r\n */\r\n onPreUpdate(_engine, _delta) {\r\n // Override me\r\n }\r\n /**\r\n * Safe to override onPostUpdate lifecycle event handler. Synonymous with `.on('postupdate', (evt) =>{...})`\r\n *\r\n * `onPostUpdate` is called directly after an entity is updated.\r\n */\r\n onPostUpdate(_engine, _delta) {\r\n // Override me\r\n }\r\n /**\r\n *\r\n * Entity update lifecycle, called internally\r\n *\r\n * @internal\r\n * @param engine\r\n * @param delta\r\n */\r\n update(engine, delta) {\r\n this._initialize(engine);\r\n this._preupdate(engine, delta);\r\n for (const child of this.children) {\r\n child.update(engine, delta);\r\n }\r\n this._postupdate(engine, delta);\r\n }\r\n emit(eventName, event) {\r\n this.events.emit(eventName, event);\r\n }\r\n on(eventName, handler) {\r\n return this.events.on(eventName, handler);\r\n }\r\n once(eventName, handler) {\r\n return this.events.once(eventName, handler);\r\n }\r\n off(eventName, handler) {\r\n this.events.off(eventName, handler);\r\n }\r\n}\r\nEntity._ID = 0;\r\n\n;// CONCATENATED MODULE: ./Graphics/GraphicsComponent.ts\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Type guard for checking if a Graphic HasTick (used for graphics that change over time like animations)\r\n * @param graphic\r\n */\r\nfunction hasGraphicsTick(graphic) {\r\n return !!graphic.tick;\r\n}\r\nclass GraphicsLayer {\r\n constructor(_options, _graphics) {\r\n this._options = _options;\r\n this._graphics = _graphics;\r\n this.graphics = [];\r\n }\r\n get name() {\r\n return this._options.name;\r\n }\r\n hide(nameOrGraphic) {\r\n if (!nameOrGraphic) {\r\n this.graphics.length = 0;\r\n }\r\n else {\r\n let gfx = null;\r\n if (nameOrGraphic instanceof Graphic) {\r\n gfx = nameOrGraphic;\r\n }\r\n else {\r\n gfx = this._graphics.getGraphic(nameOrGraphic);\r\n }\r\n this.graphics = this.graphics.filter((g) => g.graphic !== gfx);\r\n this._graphics.recalculateBounds();\r\n }\r\n }\r\n /**\r\n * Show a graphic by name or instance at an offset, graphics are shown in the order in which `show()` is called.\r\n *\r\n * If `show()` is called multiple times for the same graphic it will be shown multiple times.\r\n * @param nameOrGraphic\r\n * @param options\r\n */\r\n show(nameOrGraphic, options) {\r\n options = { ...options };\r\n let gfx;\r\n if (nameOrGraphic instanceof Graphic) {\r\n gfx = this._graphics.copyGraphics ? nameOrGraphic.clone() : nameOrGraphic;\r\n }\r\n else {\r\n gfx = this._graphics.getGraphic(nameOrGraphic);\r\n if (!gfx) {\r\n Logger.getInstance().error(`No such graphic added to component named ${nameOrGraphic}. These named graphics are available: `, this._graphics.getNames());\r\n }\r\n }\r\n if (gfx) {\r\n this.graphics.push({ graphic: gfx, options });\r\n this._graphics.recalculateBounds();\r\n return gfx;\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n /**\r\n * Use a specific graphic, swap out any current graphics being shown\r\n * @param nameOrGraphic\r\n * @param options\r\n */\r\n use(nameOrGraphic, options) {\r\n options = { ...options };\r\n this.hide();\r\n return this.show(nameOrGraphic, options);\r\n }\r\n /**\r\n * Current order of the layer, higher numbers are on top, lower numbers are on the bottom.\r\n *\r\n * For example a layer with `order = -1` would be under a layer of `order = 1`\r\n */\r\n get order() {\r\n return this._options.order;\r\n }\r\n /**\r\n * Set the order of the layer, higher numbers are on top, lower numbers are on the bottom.\r\n *\r\n * For example a layer with `order = -1` would be under a layer of `order = 1`\r\n */\r\n set order(order) {\r\n this._options.order = order;\r\n }\r\n /**\r\n * Get or set the pixel offset from the layer anchor for all graphics in the layer\r\n */\r\n get offset() {\r\n var _a;\r\n return (_a = this._options.offset) !== null && _a !== void 0 ? _a : Vector.Zero;\r\n }\r\n set offset(value) {\r\n this._options.offset = value;\r\n }\r\n get currentKeys() {\r\n var _a;\r\n return (_a = this.name) !== null && _a !== void 0 ? _a : 'anonymous';\r\n }\r\n clone(graphicsComponent) {\r\n const layer = new GraphicsLayer({ ...this._options }, graphicsComponent);\r\n layer.graphics = [...this.graphics.map(g => ({ graphic: g.graphic.clone(), options: { ...g.options } }))];\r\n return layer;\r\n }\r\n}\r\nclass GraphicsLayers {\r\n constructor(_component) {\r\n this._component = _component;\r\n this._layers = [];\r\n this._layerMap = {};\r\n this.default = new GraphicsLayer({ name: 'default', order: 0 }, _component);\r\n this._maybeAddLayer(this.default);\r\n }\r\n create(options) {\r\n const layer = new GraphicsLayer(options, this._component);\r\n return this._maybeAddLayer(layer);\r\n }\r\n get(name) {\r\n if (name) {\r\n return this._getLayer(name);\r\n }\r\n return this._layers;\r\n }\r\n currentKeys() {\r\n const graphicsLayerKeys = [];\r\n for (const layer of this._layers) {\r\n graphicsLayerKeys.push(layer.currentKeys);\r\n }\r\n return graphicsLayerKeys;\r\n }\r\n has(name) {\r\n return name in this._layerMap;\r\n }\r\n _maybeAddLayer(layer) {\r\n if (this._layerMap[layer.name]) {\r\n // todo log warning\r\n return this._layerMap[layer.name];\r\n }\r\n this._layerMap[layer.name] = layer;\r\n this._layers.push(layer);\r\n this._layers.sort((a, b) => a.order - b.order);\r\n return layer;\r\n }\r\n _getLayer(name) {\r\n return this._layerMap[name];\r\n }\r\n clone(graphicsComponent) {\r\n const layers = new GraphicsLayers(graphicsComponent);\r\n layers._layerMap = {};\r\n layers._layers = [];\r\n layers.default = this.default.clone(graphicsComponent);\r\n layers._maybeAddLayer(layers.default);\r\n // Remove the default layer out of the clone\r\n const clonedLayers = this._layers.filter(l => l.name !== 'default').map(l => l.clone(graphicsComponent));\r\n clonedLayers.forEach(layer => layers._maybeAddLayer(layer));\r\n return layers;\r\n }\r\n}\r\n/**\r\n * Component to manage drawings, using with the position component\r\n */\r\nclass GraphicsComponent extends Component {\r\n getGraphic(name) {\r\n return this._graphics[name];\r\n }\r\n /**\r\n * Get registered graphics names\r\n */\r\n getNames() {\r\n return Object.keys(this._graphics);\r\n }\r\n constructor(options) {\r\n super();\r\n this.type = 'ex.graphics';\r\n this._graphics = {};\r\n /**\r\n * Sets or gets wether any drawing should be visible in this component\r\n */\r\n this.visible = true;\r\n /**\r\n * Sets or gets wither all drawings should have an opacity applied\r\n */\r\n this.opacity = 1;\r\n /**\r\n * Offset to apply to graphics by default\r\n */\r\n this.offset = Vector.Zero;\r\n /**\r\n * Anchor to apply to graphics by default\r\n */\r\n this.anchor = Vector.Half;\r\n /**\r\n * Flip all graphics horizontally along the y-axis\r\n */\r\n this.flipHorizontal = false;\r\n /**\r\n * Flip all graphics vertically along the x-axis\r\n */\r\n this.flipVertical = false;\r\n /**\r\n * If set to true graphics added to the component will be copied. This can affect performance\r\n */\r\n this.copyGraphics = false;\r\n this._localBounds = null;\r\n // Defaults\r\n options = {\r\n visible: this.visible,\r\n ...options\r\n };\r\n const { current, anchor, opacity, visible, graphics, offset, copyGraphics, onPreDraw, onPostDraw } = options;\r\n this._graphics = graphics || {};\r\n this.offset = offset !== null && offset !== void 0 ? offset : this.offset;\r\n this.opacity = opacity !== null && opacity !== void 0 ? opacity : this.opacity;\r\n this.anchor = anchor !== null && anchor !== void 0 ? anchor : this.anchor;\r\n this.copyGraphics = copyGraphics !== null && copyGraphics !== void 0 ? copyGraphics : this.copyGraphics;\r\n this.onPreDraw = onPreDraw !== null && onPreDraw !== void 0 ? onPreDraw : this.onPreDraw;\r\n this.onPostDraw = onPostDraw !== null && onPostDraw !== void 0 ? onPostDraw : this.onPostDraw;\r\n this.visible = !!visible;\r\n this.layers = new GraphicsLayers(this);\r\n if (current && this._graphics[current]) {\r\n this.show(this._graphics[current]);\r\n }\r\n }\r\n /**\r\n * Returns the currently displayed graphics and their offsets, empty array if hidden\r\n */\r\n get current() {\r\n return this.layers.default.graphics;\r\n }\r\n /**\r\n * Returns all graphics associated with this component\r\n */\r\n get graphics() {\r\n return this._graphics;\r\n }\r\n add(nameOrGraphic, graphic) {\r\n let name = 'default';\r\n let graphicToSet = null;\r\n if (typeof nameOrGraphic === 'string') {\r\n name = nameOrGraphic;\r\n graphicToSet = graphic;\r\n }\r\n else {\r\n graphicToSet = nameOrGraphic;\r\n }\r\n this._graphics[name] = this.copyGraphics ? graphicToSet.clone() : graphicToSet;\r\n if (name === 'default') {\r\n this.show('default');\r\n }\r\n return graphicToSet;\r\n }\r\n /**\r\n * Show a graphic by name on the **default** layer, returns the new [[Graphic]]\r\n */\r\n show(nameOrGraphic, options) {\r\n const result = this.layers.default.show(nameOrGraphic, options);\r\n this.recalculateBounds();\r\n return result;\r\n }\r\n /**\r\n * Use a graphic only, swap out any graphics on the **default** layer, returns the new [[Graphic]]\r\n * @param nameOrGraphic\r\n * @param options\r\n */\r\n use(nameOrGraphic, options) {\r\n const result = this.layers.default.use(nameOrGraphic, options);\r\n this.recalculateBounds();\r\n return result;\r\n }\r\n hide(nameOrGraphic) {\r\n this.layers.default.hide(nameOrGraphic);\r\n }\r\n set localBounds(bounds) {\r\n this._localBounds = bounds;\r\n }\r\n recalculateBounds() {\r\n let bb = new BoundingBox();\r\n for (const layer of this.layers.get()) {\r\n for (const { graphic, options } of layer.graphics) {\r\n let anchor = this.anchor;\r\n let offset = this.offset;\r\n if (options === null || options === void 0 ? void 0 : options.anchor) {\r\n anchor = options.anchor;\r\n }\r\n if (options === null || options === void 0 ? void 0 : options.offset) {\r\n offset = options.offset;\r\n }\r\n const bounds = graphic.localBounds;\r\n const offsetX = -bounds.width * anchor.x + offset.x;\r\n const offsetY = -bounds.height * anchor.y + offset.y;\r\n bb = graphic === null || graphic === void 0 ? void 0 : graphic.localBounds.translate(vec(offsetX + layer.offset.x, offsetY + layer.offset.y)).combine(bb);\r\n }\r\n }\r\n this._localBounds = bb;\r\n }\r\n get localBounds() {\r\n if (!this._localBounds || this._localBounds.hasZeroDimensions()) {\r\n this.recalculateBounds();\r\n }\r\n return this._localBounds;\r\n }\r\n /**\r\n * Update underlying graphics if necesary, called internally\r\n * @param elapsed\r\n * @internal\r\n */\r\n update(elapsed, idempotencyToken = 0) {\r\n for (const layer of this.layers.get()) {\r\n for (const { graphic } of layer.graphics) {\r\n if (hasGraphicsTick(graphic)) {\r\n graphic === null || graphic === void 0 ? void 0 : graphic.tick(elapsed, idempotencyToken);\r\n }\r\n }\r\n }\r\n }\r\n clone() {\r\n const graphics = new GraphicsComponent();\r\n graphics._graphics = { ...this._graphics };\r\n graphics.offset = this.offset.clone();\r\n graphics.opacity = this.opacity;\r\n graphics.anchor = this.anchor.clone();\r\n graphics.copyGraphics = this.copyGraphics;\r\n graphics.onPreDraw = this.onPreDraw;\r\n graphics.onPostDraw = this.onPostDraw;\r\n graphics.visible = this.visible;\r\n graphics.layers = this.layers.clone(graphics);\r\n return graphics;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Rectangle.ts\n\r\n/**\r\n * A Rectangle [[Graphic]] for drawing rectangles to the [[ExcaliburGraphicsContext]]\r\n */\r\nclass Rectangle extends Raster {\r\n constructor(options) {\r\n super(options);\r\n this.width = options.width;\r\n this.height = options.height;\r\n this.rasterize();\r\n }\r\n clone() {\r\n return new Rectangle({\r\n width: this.width,\r\n height: this.height,\r\n ...this.cloneGraphicOptions(),\r\n ...this.cloneRasterOptions()\r\n });\r\n }\r\n execute(ctx) {\r\n if (this.color) {\r\n ctx.fillRect(0, 0, this.width, this.height);\r\n }\r\n if (this.strokeColor) {\r\n ctx.strokeRect(0, 0, this.width, this.height);\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Circle.ts\n\r\n\r\n/**\r\n * A circle [[Graphic]] for drawing circles to the [[ExcaliburGraphicsContext]]\r\n *\r\n * Circles default to [[ImageFiltering.Blended]]\r\n */\r\nclass Circle extends Raster {\r\n get radius() {\r\n return this._radius;\r\n }\r\n set radius(value) {\r\n this._radius = value;\r\n this.width = this._radius * 2;\r\n this.height = this._radius * 2;\r\n this.flagDirty();\r\n }\r\n constructor(options) {\r\n var _a, _b, _c;\r\n super(options);\r\n this._radius = 0;\r\n const lineWidth = (_a = options.lineWidth) !== null && _a !== void 0 ? _a : (options.strokeColor ? 1 : 0); // default lineWidth in canvas is 1px\r\n this.padding = (_b = options.padding) !== null && _b !== void 0 ? _b : 2 + (lineWidth / 2); // default 2 padding for circles looks nice\r\n this.radius = options.radius;\r\n this.filtering = (_c = options.filtering) !== null && _c !== void 0 ? _c : ImageFiltering.Blended;\r\n this.rasterize();\r\n }\r\n clone() {\r\n return new Circle({\r\n radius: this.radius,\r\n ...this.cloneGraphicOptions(),\r\n ...this.cloneRasterOptions()\r\n });\r\n }\r\n execute(ctx) {\r\n if (this.radius > 0) {\r\n ctx.beginPath();\r\n ctx.arc(this.radius, this.radius, this.radius, 0, Math.PI * 2);\r\n if (this.color) {\r\n ctx.fill();\r\n }\r\n if (this.strokeColor) {\r\n ctx.stroke();\r\n }\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Input/PointerComponent.ts\n\r\n/**\r\n * Add this component to optionally configure how the pointer\r\n * system detects pointer events.\r\n *\r\n * By default the collider shape is used and graphics bounds is not.\r\n *\r\n * If both collider shape and graphics bounds are enabled it will fire events if either or\r\n * are intersecting the pointer.\r\n */\r\nclass PointerComponent extends Component {\r\n constructor() {\r\n super(...arguments);\r\n this.type = 'ex.pointer';\r\n /**\r\n * Use any existing Collider component geometry for pointer events. This is useful if you want\r\n * user pointer events only to trigger on the same collision geometry used in the collider component\r\n * for collision resolution. Default is `true`.\r\n */\r\n this.useColliderShape = true;\r\n /**\r\n * Use any existing Graphics component bounds for pointers. This is useful if you want the axis aligned\r\n * bounds around the graphic to trigger pointer events. Default is `false`.\r\n */\r\n this.useGraphicsBounds = false;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Util/EasingFunctions.ts\n\r\n/**\r\n * Standard easing functions for motion in Excalibur, defined on a domain of [0, duration] and a range from [+startValue,+endValue]\r\n * Given a time, the function will return a value from positive startValue to positive endValue.\r\n *\r\n * ```js\r\n * function Linear (t) {\r\n * return t * t;\r\n * }\r\n *\r\n * // accelerating from zero velocity\r\n * function EaseInQuad (t) {\r\n * return t * t;\r\n * }\r\n *\r\n * // decelerating to zero velocity\r\n * function EaseOutQuad (t) {\r\n * return t * (2 - t);\r\n * }\r\n *\r\n * // acceleration until halfway, then deceleration\r\n * function EaseInOutQuad (t) {\r\n * return t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\r\n * }\r\n *\r\n * // accelerating from zero velocity\r\n * function EaseInCubic (t) {\r\n * return t * t * t;\r\n * }\r\n *\r\n * // decelerating to zero velocity\r\n * function EaseOutCubic (t) {\r\n * return (--t) * t * t + 1;\r\n * }\r\n *\r\n * // acceleration until halfway, then deceleration\r\n * function EaseInOutCubic (t) {\r\n * return t < .5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\r\n * }\r\n * ```\r\n */\r\nclass EasingFunctions {\r\n static CreateReversibleEasingFunction(easing) {\r\n return (time, start, end, duration) => {\r\n if (end < start) {\r\n return start - (easing(time, end, start, duration) - end);\r\n }\r\n else {\r\n return easing(time, start, end, duration);\r\n }\r\n };\r\n }\r\n static CreateVectorEasingFunction(easing) {\r\n return (time, start, end, duration) => {\r\n return new Vector(easing(time, start.x, end.x, duration), easing(time, start.y, end.y, duration));\r\n };\r\n }\r\n}\r\nEasingFunctions.Linear = EasingFunctions.CreateReversibleEasingFunction((currentTime, startValue, endValue, duration) => {\r\n endValue = endValue - startValue;\r\n return (endValue * currentTime) / duration + startValue;\r\n});\r\nEasingFunctions.EaseInQuad = EasingFunctions.CreateReversibleEasingFunction((currentTime, startValue, endValue, duration) => {\r\n endValue = endValue - startValue;\r\n currentTime /= duration;\r\n return endValue * currentTime * currentTime + startValue;\r\n});\r\nEasingFunctions.EaseOutQuad = EasingFunctions.CreateReversibleEasingFunction((currentTime, startValue, endValue, duration) => {\r\n endValue = endValue - startValue;\r\n currentTime /= duration;\r\n return -endValue * currentTime * (currentTime - 2) + startValue;\r\n});\r\nEasingFunctions.EaseInOutQuad = EasingFunctions.CreateReversibleEasingFunction((currentTime, startValue, endValue, duration) => {\r\n endValue = endValue - startValue;\r\n currentTime /= duration / 2;\r\n if (currentTime < 1) {\r\n return (endValue / 2) * currentTime * currentTime + startValue;\r\n }\r\n currentTime--;\r\n return (-endValue / 2) * (currentTime * (currentTime - 2) - 1) + startValue;\r\n});\r\nEasingFunctions.EaseInCubic = EasingFunctions.CreateReversibleEasingFunction((currentTime, startValue, endValue, duration) => {\r\n endValue = endValue - startValue;\r\n currentTime /= duration;\r\n return endValue * currentTime * currentTime * currentTime + startValue;\r\n});\r\nEasingFunctions.EaseOutCubic = EasingFunctions.CreateReversibleEasingFunction((currentTime, startValue, endValue, duration) => {\r\n endValue = endValue - startValue;\r\n currentTime /= duration;\r\n currentTime--;\r\n return endValue * (currentTime * currentTime * currentTime + 1) + startValue;\r\n});\r\nEasingFunctions.EaseInOutCubic = EasingFunctions.CreateReversibleEasingFunction((currentTime, startValue, endValue, duration) => {\r\n endValue = endValue - startValue;\r\n currentTime /= duration / 2;\r\n if (currentTime < 1) {\r\n return (endValue / 2) * currentTime * currentTime * currentTime + startValue;\r\n }\r\n currentTime -= 2;\r\n return (endValue / 2) * (currentTime * currentTime * currentTime + 2) + startValue;\r\n});\r\n\n;// CONCATENATED MODULE: ./Actions/ActionQueue.ts\n/**\r\n * Action Queues represent an ordered sequence of actions\r\n *\r\n * Action queues are part of the [[ActionContext|Action API]] and\r\n * store the list of actions to be executed for an [[Actor]].\r\n *\r\n * Actors implement [[Actor.actions]] which can be manipulated by\r\n * advanced users to adjust the actions currently being executed in the\r\n * queue.\r\n */\r\nclass ActionQueue {\r\n constructor(entity) {\r\n this._actions = [];\r\n this._completedActions = [];\r\n this._entity = entity;\r\n }\r\n /**\r\n * Add an action to the sequence\r\n * @param action\r\n */\r\n add(action) {\r\n this._actions.push(action);\r\n }\r\n /**\r\n * Remove an action by reference from the sequence\r\n * @param action\r\n */\r\n remove(action) {\r\n const index = this._actions.indexOf(action);\r\n this._actions.splice(index, 1);\r\n }\r\n /**\r\n * Removes all actions from this sequence\r\n */\r\n clearActions() {\r\n this._actions.length = 0;\r\n this._completedActions.length = 0;\r\n if (this._currentAction) {\r\n this._currentAction.stop();\r\n }\r\n }\r\n /**\r\n *\r\n * @returns The total list of actions in this sequence complete or not\r\n */\r\n getActions() {\r\n return this._actions.concat(this._completedActions);\r\n }\r\n /**\r\n *\r\n * @returns `true` if there are more actions to process in the sequence\r\n */\r\n hasNext() {\r\n return this._actions.length > 0;\r\n }\r\n /**\r\n * @returns `true` if the current sequence of actions is done\r\n */\r\n isComplete() {\r\n return this._actions.length === 0;\r\n }\r\n /**\r\n * Resets the sequence of actions, this is used to restart a sequence from the beginning\r\n */\r\n reset() {\r\n this._actions = this.getActions();\r\n const len = this._actions.length;\r\n for (let i = 0; i < len; i++) {\r\n this._actions[i].reset();\r\n }\r\n this._completedActions = [];\r\n }\r\n /**\r\n * Update the queue which updates actions and handles completing actions\r\n * @param elapsedMs\r\n */\r\n update(elapsedMs) {\r\n if (this._actions.length > 0) {\r\n this._currentAction = this._actions[0];\r\n this._currentAction.update(elapsedMs);\r\n if (this._currentAction.isComplete(this._entity)) {\r\n this._completedActions.push(this._actions.shift());\r\n }\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/Repeat.ts\n\r\nclass Repeat {\r\n constructor(entity, repeatBuilder, repeat) {\r\n this._stopped = false;\r\n this._repeatBuilder = repeatBuilder;\r\n this._repeatContext = new ActionContext(entity);\r\n this._actionQueue = this._repeatContext.getQueue();\r\n this._repeat = repeat;\r\n this._originalRepeat = repeat;\r\n this._repeatBuilder(this._repeatContext);\r\n this._repeat--; // current execution is the first repeat\r\n }\r\n update(delta) {\r\n if (this._actionQueue.isComplete()) {\r\n this._actionQueue.clearActions();\r\n this._repeatBuilder(this._repeatContext);\r\n this._repeat--;\r\n }\r\n this._actionQueue.update(delta);\r\n }\r\n isComplete() {\r\n return this._stopped || (this._repeat <= 0 && this._actionQueue.isComplete());\r\n }\r\n stop() {\r\n this._stopped = true;\r\n }\r\n reset() {\r\n this._repeat = this._originalRepeat;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/RepeatForever.ts\n\r\n/**\r\n * RepeatForever Action implementation, it is recommended you use the fluent action\r\n * context API.\r\n *\r\n *\r\n */\r\nclass RepeatForever {\r\n constructor(entity, repeatBuilder) {\r\n this._stopped = false;\r\n this._repeatBuilder = repeatBuilder;\r\n this._repeatContext = new ActionContext(entity);\r\n this._actionQueue = this._repeatContext.getQueue();\r\n this._repeatBuilder(this._repeatContext);\r\n }\r\n update(delta) {\r\n if (this._stopped) {\r\n return;\r\n }\r\n if (this._actionQueue.isComplete()) {\r\n this._actionQueue.clearActions();\r\n this._repeatBuilder(this._repeatContext);\r\n }\r\n this._actionQueue.update(delta);\r\n }\r\n isComplete() {\r\n return this._stopped;\r\n }\r\n stop() {\r\n this._stopped = true;\r\n this._actionQueue.clearActions();\r\n }\r\n reset() {\r\n return;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/MoveBy.ts\n\r\n\r\n\r\n\r\nclass MoveBy {\r\n constructor(entity, offsetX, offsetY, speed) {\r\n this._started = false;\r\n this._stopped = false;\r\n this._entity = entity;\r\n this._tx = entity.get(TransformComponent);\r\n this._motion = entity.get(MotionComponent);\r\n this._speed = speed;\r\n this._offset = new Vector(offsetX, offsetY);\r\n if (speed <= 0) {\r\n Logger.getInstance().error('Attempted to moveBy with speed less than or equal to zero : ' + speed);\r\n throw new Error('Speed must be greater than 0 pixels per second');\r\n }\r\n }\r\n update(_delta) {\r\n if (!this._started) {\r\n this._started = true;\r\n this._start = new Vector(this._tx.pos.x, this._tx.pos.y);\r\n this._end = this._start.add(this._offset);\r\n this._distance = this._offset.size;\r\n this._dir = this._end.sub(this._start).normalize();\r\n }\r\n if (this.isComplete(this._entity)) {\r\n this._tx.pos = vec(this._end.x, this._end.y);\r\n this._motion.vel = vec(0, 0);\r\n }\r\n else {\r\n this._motion.vel = this._dir.scale(this._speed);\r\n }\r\n }\r\n isComplete(entity) {\r\n const tx = entity.get(TransformComponent);\r\n return this._stopped || tx.pos.distance(this._start) >= this._distance;\r\n }\r\n stop() {\r\n this._motion.vel = vec(0, 0);\r\n this._stopped = true;\r\n }\r\n reset() {\r\n this._started = false;\r\n this._stopped = false;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/MoveTo.ts\n\r\n\r\n\r\nclass MoveTo {\r\n constructor(entity, destx, desty, speed) {\r\n this.entity = entity;\r\n this._started = false;\r\n this._stopped = false;\r\n this._tx = entity.get(TransformComponent);\r\n this._motion = entity.get(MotionComponent);\r\n this._end = new Vector(destx, desty);\r\n this._speed = speed;\r\n }\r\n update(_delta) {\r\n if (!this._started) {\r\n this._started = true;\r\n this._start = new Vector(this._tx.pos.x, this._tx.pos.y);\r\n this._distance = this._start.distance(this._end);\r\n this._dir = this._end.sub(this._start).normalize();\r\n }\r\n const m = this._dir.scale(this._speed);\r\n this._motion.vel = vec(m.x, m.y);\r\n if (this.isComplete(this.entity)) {\r\n this._tx.pos = vec(this._end.x, this._end.y);\r\n this._motion.vel = vec(0, 0);\r\n }\r\n }\r\n isComplete(entity) {\r\n const tx = entity.get(TransformComponent);\r\n return this._stopped || new Vector(tx.pos.x, tx.pos.y).distance(this._start) >= this._distance;\r\n }\r\n stop() {\r\n this._motion.vel = vec(0, 0);\r\n this._stopped = true;\r\n }\r\n reset() {\r\n this._started = false;\r\n this._stopped = false;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/RotationType.ts\n/**\r\n * An enum that describes the strategies that rotation actions can use\r\n */\r\nvar RotationType;\r\n(function (RotationType) {\r\n /**\r\n * Rotation via `ShortestPath` will use the smallest angle\r\n * between the starting and ending points. This strategy is the default behavior.\r\n */\r\n RotationType[RotationType[\"ShortestPath\"] = 0] = \"ShortestPath\";\r\n /**\r\n * Rotation via `LongestPath` will use the largest angle\r\n * between the starting and ending points.\r\n */\r\n RotationType[RotationType[\"LongestPath\"] = 1] = \"LongestPath\";\r\n /**\r\n * Rotation via `Clockwise` will travel in a clockwise direction,\r\n * regardless of the starting and ending points.\r\n */\r\n RotationType[RotationType[\"Clockwise\"] = 2] = \"Clockwise\";\r\n /**\r\n * Rotation via `CounterClockwise` will travel in a counterclockwise direction,\r\n * regardless of the starting and ending points.\r\n */\r\n RotationType[RotationType[\"CounterClockwise\"] = 3] = \"CounterClockwise\";\r\n})(RotationType || (RotationType = {}));\r\n\n;// CONCATENATED MODULE: ./Actions/Action/RotateTo.ts\n\r\n\r\n\r\n\r\nclass RotateTo {\r\n constructor(entity, angleRadians, speed, rotationType) {\r\n this._started = false;\r\n this._stopped = false;\r\n this._tx = entity.get(TransformComponent);\r\n this._motion = entity.get(MotionComponent);\r\n this._end = angleRadians;\r\n this._speed = speed;\r\n this._rotationType = rotationType || RotationType.ShortestPath;\r\n }\r\n update(_delta) {\r\n if (!this._started) {\r\n this._started = true;\r\n this._start = this._tx.rotation;\r\n this._currentNonCannonAngle = this._tx.rotation;\r\n const distance1 = Math.abs(this._end - this._start);\r\n const distance2 = TwoPI - distance1;\r\n if (distance1 > distance2) {\r\n this._shortDistance = distance2;\r\n this._longDistance = distance1;\r\n }\r\n else {\r\n this._shortDistance = distance1;\r\n this._longDistance = distance2;\r\n }\r\n this._shortestPathIsPositive = (this._start - this._end + TwoPI) % TwoPI >= Math.PI;\r\n switch (this._rotationType) {\r\n case RotationType.ShortestPath:\r\n this._distance = this._shortDistance;\r\n if (this._shortestPathIsPositive) {\r\n this._direction = 1;\r\n }\r\n else {\r\n this._direction = -1;\r\n }\r\n break;\r\n case RotationType.LongestPath:\r\n this._distance = this._longDistance;\r\n if (this._shortestPathIsPositive) {\r\n this._direction = -1;\r\n }\r\n else {\r\n this._direction = 1;\r\n }\r\n break;\r\n case RotationType.Clockwise:\r\n this._direction = 1;\r\n if (this._shortestPathIsPositive) {\r\n this._distance = this._shortDistance;\r\n }\r\n else {\r\n this._distance = this._longDistance;\r\n }\r\n break;\r\n case RotationType.CounterClockwise:\r\n this._direction = -1;\r\n if (!this._shortestPathIsPositive) {\r\n this._distance = this._shortDistance;\r\n }\r\n else {\r\n this._distance = this._longDistance;\r\n }\r\n break;\r\n }\r\n }\r\n this._motion.angularVelocity = this._direction * this._speed;\r\n this._currentNonCannonAngle += this._direction * this._speed * (_delta / 1000);\r\n if (this.isComplete()) {\r\n this._tx.rotation = this._end;\r\n this._motion.angularVelocity = 0;\r\n this._stopped = true;\r\n }\r\n }\r\n isComplete() {\r\n const distanceTraveled = Math.abs(this._currentNonCannonAngle - this._start);\r\n return this._stopped || distanceTraveled >= Math.abs(this._distance);\r\n }\r\n stop() {\r\n this._motion.angularVelocity = 0;\r\n this._stopped = true;\r\n }\r\n reset() {\r\n this._started = false;\r\n this._stopped = false;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/RotateBy.ts\n\r\n\r\n\r\n\r\nclass RotateBy {\r\n constructor(entity, angleRadiansOffset, speed, rotationType) {\r\n this._started = false;\r\n this._stopped = false;\r\n this._tx = entity.get(TransformComponent);\r\n this._motion = entity.get(MotionComponent);\r\n this._speed = speed;\r\n this._offset = angleRadiansOffset;\r\n this._rotationType = rotationType || RotationType.ShortestPath;\r\n }\r\n update(_delta) {\r\n if (!this._started) {\r\n this._started = true;\r\n this._start = this._tx.rotation;\r\n this._currentNonCannonAngle = this._tx.rotation;\r\n this._end = this._start + this._offset;\r\n const distance1 = Math.abs(this._end - this._start);\r\n const distance2 = TwoPI - distance1;\r\n if (distance1 > distance2) {\r\n this._shortDistance = distance2;\r\n this._longDistance = distance1;\r\n }\r\n else {\r\n this._shortDistance = distance1;\r\n this._longDistance = distance2;\r\n }\r\n this._shortestPathIsPositive = (this._start - this._end + TwoPI) % TwoPI >= Math.PI;\r\n switch (this._rotationType) {\r\n case RotationType.ShortestPath:\r\n this._distance = this._shortDistance;\r\n if (this._shortestPathIsPositive) {\r\n this._direction = 1;\r\n }\r\n else {\r\n this._direction = -1;\r\n }\r\n break;\r\n case RotationType.LongestPath:\r\n this._distance = this._longDistance;\r\n if (this._shortestPathIsPositive) {\r\n this._direction = -1;\r\n }\r\n else {\r\n this._direction = 1;\r\n }\r\n break;\r\n case RotationType.Clockwise:\r\n this._direction = 1;\r\n if (this._shortDistance >= 0) {\r\n this._distance = this._shortDistance;\r\n }\r\n else {\r\n this._distance = this._longDistance;\r\n }\r\n break;\r\n case RotationType.CounterClockwise:\r\n this._direction = -1;\r\n if (this._shortDistance <= 0) {\r\n this._distance = this._shortDistance;\r\n }\r\n else {\r\n this._distance = this._longDistance;\r\n }\r\n break;\r\n }\r\n }\r\n this._motion.angularVelocity = this._direction * this._speed;\r\n this._currentNonCannonAngle += this._direction * this._speed * (_delta / 1000);\r\n if (this.isComplete()) {\r\n this._tx.rotation = this._end;\r\n this._motion.angularVelocity = 0;\r\n this._stopped = true;\r\n }\r\n }\r\n isComplete() {\r\n const distanceTraveled = Math.abs(this._currentNonCannonAngle - this._start);\r\n return this._stopped || distanceTraveled >= Math.abs(this._distance);\r\n }\r\n stop() {\r\n this._motion.angularVelocity = 0;\r\n this._stopped = true;\r\n }\r\n reset() {\r\n this._started = false;\r\n this._stopped = false;\r\n this._start = undefined;\r\n this._currentNonCannonAngle = undefined;\r\n this._distance = undefined;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/ScaleTo.ts\n\r\n\r\n\r\nclass ScaleTo {\r\n constructor(entity, scaleX, scaleY, speedX, speedY) {\r\n this._started = false;\r\n this._stopped = false;\r\n this._tx = entity.get(TransformComponent);\r\n this._motion = entity.get(MotionComponent);\r\n this._endX = scaleX;\r\n this._endY = scaleY;\r\n this._speedX = speedX;\r\n this._speedY = speedY;\r\n }\r\n update(_delta) {\r\n if (!this._started) {\r\n this._started = true;\r\n this._startX = this._tx.scale.x;\r\n this._startY = this._tx.scale.y;\r\n this._distanceX = Math.abs(this._endX - this._startX);\r\n this._distanceY = Math.abs(this._endY - this._startY);\r\n }\r\n if (!(Math.abs(this._tx.scale.x - this._startX) >= this._distanceX)) {\r\n const directionX = this._endY < this._startY ? -1 : 1;\r\n this._motion.scaleFactor.x = this._speedX * directionX;\r\n }\r\n else {\r\n this._motion.scaleFactor.x = 0;\r\n }\r\n if (!(Math.abs(this._tx.scale.y - this._startY) >= this._distanceY)) {\r\n const directionY = this._endY < this._startY ? -1 : 1;\r\n this._motion.scaleFactor.y = this._speedY * directionY;\r\n }\r\n else {\r\n this._motion.scaleFactor.y = 0;\r\n }\r\n if (this.isComplete()) {\r\n this._tx.scale = vec(this._endX, this._endY);\r\n this._motion.scaleFactor.x = 0;\r\n this._motion.scaleFactor.y = 0;\r\n }\r\n }\r\n isComplete() {\r\n return (this._stopped ||\r\n (Math.abs(this._tx.scale.x - this._startX) >= (this._distanceX - 0.01) &&\r\n Math.abs(this._tx.scale.y - this._startY) >= (this._distanceY - 0.01)));\r\n }\r\n stop() {\r\n this._motion.scaleFactor.x = 0;\r\n this._motion.scaleFactor.y = 0;\r\n this._stopped = true;\r\n }\r\n reset() {\r\n this._started = false;\r\n this._stopped = false;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/ScaleBy.ts\n\r\n\r\n\r\nclass ScaleBy {\r\n constructor(entity, scaleOffsetX, scaleOffsetY, speed) {\r\n this._started = false;\r\n this._stopped = false;\r\n this._tx = entity.get(TransformComponent);\r\n this._motion = entity.get(MotionComponent);\r\n this._offset = new Vector(scaleOffsetX, scaleOffsetY);\r\n this._speedX = this._speedY = speed;\r\n }\r\n update(_delta) {\r\n if (!this._started) {\r\n this._started = true;\r\n this._startScale = this._tx.scale.clone();\r\n this._endScale = this._startScale.add(this._offset);\r\n this._distanceX = Math.abs(this._endScale.x - this._startScale.x);\r\n this._distanceY = Math.abs(this._endScale.y - this._startScale.y);\r\n this._directionX = this._endScale.x < this._startScale.x ? -1 : 1;\r\n this._directionY = this._endScale.y < this._startScale.y ? -1 : 1;\r\n }\r\n this._motion.scaleFactor.x = this._speedX * this._directionX;\r\n this._motion.scaleFactor.y = this._speedY * this._directionY;\r\n if (this.isComplete()) {\r\n this._tx.scale = this._endScale;\r\n this._motion.scaleFactor.x = 0;\r\n this._motion.scaleFactor.y = 0;\r\n }\r\n }\r\n isComplete() {\r\n return (this._stopped ||\r\n (Math.abs(this._tx.scale.x - this._startScale.x) >= (this._distanceX - 0.01) &&\r\n Math.abs(this._tx.scale.y - this._startScale.y) >= (this._distanceY - 0.01)));\r\n }\r\n stop() {\r\n this._motion.scaleFactor.x = 0;\r\n this._motion.scaleFactor.y = 0;\r\n this._stopped = true;\r\n }\r\n reset() {\r\n this._started = false;\r\n this._stopped = false;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/CallMethod.ts\nclass CallMethod {\r\n constructor(method) {\r\n this._method = null;\r\n this._hasBeenCalled = false;\r\n this._method = method;\r\n }\r\n update(_delta) {\r\n this._method();\r\n this._hasBeenCalled = true;\r\n }\r\n isComplete() {\r\n return this._hasBeenCalled;\r\n }\r\n reset() {\r\n this._hasBeenCalled = false;\r\n }\r\n stop() {\r\n this._hasBeenCalled = true;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/EaseTo.ts\n\r\n\r\n\r\nclass EaseTo {\r\n constructor(entity, x, y, duration, easingFcn) {\r\n this.easingFcn = easingFcn;\r\n this._currentLerpTime = 0;\r\n this._lerpDuration = 1 * 1000; // 1 second\r\n this._lerpStart = new Vector(0, 0);\r\n this._lerpEnd = new Vector(0, 0);\r\n this._initialized = false;\r\n this._stopped = false;\r\n this._tx = entity.get(TransformComponent);\r\n this._motion = entity.get(MotionComponent);\r\n this._lerpDuration = duration;\r\n this._lerpEnd = new Vector(x, y);\r\n }\r\n _initialize() {\r\n this._lerpStart = new Vector(this._tx.pos.x, this._tx.pos.y);\r\n this._currentLerpTime = 0;\r\n }\r\n update(delta) {\r\n if (!this._initialized) {\r\n this._initialize();\r\n this._initialized = true;\r\n }\r\n // Need to update lerp time first, otherwise the first update will always be zero\r\n this._currentLerpTime += delta;\r\n let newX = this._tx.pos.x;\r\n let newY = this._tx.pos.y;\r\n if (this._currentLerpTime < this._lerpDuration) {\r\n if (this._lerpEnd.x < this._lerpStart.x) {\r\n newX =\r\n this._lerpStart.x -\r\n (this.easingFcn(this._currentLerpTime, this._lerpEnd.x, this._lerpStart.x, this._lerpDuration) - this._lerpEnd.x);\r\n }\r\n else {\r\n newX = this.easingFcn(this._currentLerpTime, this._lerpStart.x, this._lerpEnd.x, this._lerpDuration);\r\n }\r\n if (this._lerpEnd.y < this._lerpStart.y) {\r\n newY =\r\n this._lerpStart.y -\r\n (this.easingFcn(this._currentLerpTime, this._lerpEnd.y, this._lerpStart.y, this._lerpDuration) - this._lerpEnd.y);\r\n }\r\n else {\r\n newY = this.easingFcn(this._currentLerpTime, this._lerpStart.y, this._lerpEnd.y, this._lerpDuration);\r\n }\r\n // Given the lerp position figure out the velocity in pixels per second\r\n this._motion.vel = vec((newX - this._tx.pos.x) / (delta / 1000), (newY - this._tx.pos.y) / (delta / 1000));\r\n }\r\n else {\r\n this._tx.pos = vec(this._lerpEnd.x, this._lerpEnd.y);\r\n this._motion.vel = Vector.Zero;\r\n }\r\n }\r\n isComplete() {\r\n return this._stopped || this._currentLerpTime >= this._lerpDuration;\r\n }\r\n reset() {\r\n this._initialized = false;\r\n this._stopped = false;\r\n this._currentLerpTime = 0;\r\n }\r\n stop() {\r\n this._motion.vel = vec(0, 0);\r\n this._stopped = true;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/EaseBy.ts\n\r\n\r\n\r\nclass EaseBy {\r\n constructor(entity, offsetX, offsetY, duration, easingFcn) {\r\n this.easingFcn = easingFcn;\r\n this._currentLerpTime = 0;\r\n this._lerpDuration = 1 * 1000; // 1 second\r\n this._lerpStart = new Vector(0, 0);\r\n this._lerpEnd = new Vector(0, 0);\r\n this._initialized = false;\r\n this._stopped = false;\r\n this._tx = entity.get(TransformComponent);\r\n this._motion = entity.get(MotionComponent);\r\n this._lerpDuration = duration;\r\n this._offset = new Vector(offsetX, offsetY);\r\n }\r\n _initialize() {\r\n this._lerpStart = new Vector(this._tx.pos.x, this._tx.pos.y);\r\n this._currentLerpTime = 0;\r\n this._lerpEnd = this._lerpStart.add(this._offset);\r\n }\r\n update(delta) {\r\n if (!this._initialized) {\r\n this._initialize();\r\n this._initialized = true;\r\n }\r\n // Need to update lerp time first, otherwise the first update will always be zero\r\n this._currentLerpTime += delta;\r\n let newX = this._tx.pos.x;\r\n let newY = this._tx.pos.y;\r\n if (this._currentLerpTime < this._lerpDuration) {\r\n if (this._lerpEnd.x < this._lerpStart.x) {\r\n newX =\r\n this._lerpStart.x -\r\n (this.easingFcn(this._currentLerpTime, this._lerpEnd.x, this._lerpStart.x, this._lerpDuration) - this._lerpEnd.x);\r\n }\r\n else {\r\n newX = this.easingFcn(this._currentLerpTime, this._lerpStart.x, this._lerpEnd.x, this._lerpDuration);\r\n }\r\n if (this._lerpEnd.y < this._lerpStart.y) {\r\n newY =\r\n this._lerpStart.y -\r\n (this.easingFcn(this._currentLerpTime, this._lerpEnd.y, this._lerpStart.y, this._lerpDuration) - this._lerpEnd.y);\r\n }\r\n else {\r\n newY = this.easingFcn(this._currentLerpTime, this._lerpStart.y, this._lerpEnd.y, this._lerpDuration);\r\n }\r\n // Given the lerp position figure out the velocity in pixels per second\r\n this._motion.vel = vec((newX - this._tx.pos.x) / (delta / 1000), (newY - this._tx.pos.y) / (delta / 1000));\r\n }\r\n else {\r\n this._tx.pos = vec(this._lerpEnd.x, this._lerpEnd.y);\r\n this._motion.vel = Vector.Zero;\r\n }\r\n }\r\n isComplete() {\r\n return this._stopped || this._currentLerpTime >= this._lerpDuration;\r\n }\r\n reset() {\r\n this._initialized = false;\r\n this._stopped = false;\r\n this._currentLerpTime = 0;\r\n }\r\n stop() {\r\n this._motion.vel = vec(0, 0);\r\n this._stopped = true;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/Blink.ts\n\r\nclass Blink {\r\n constructor(entity, timeVisible, timeNotVisible, numBlinks = 1) {\r\n this._timeVisible = 0;\r\n this._timeNotVisible = 0;\r\n this._elapsedTime = 0;\r\n this._totalTime = 0;\r\n this._stopped = false;\r\n this._started = false;\r\n this._graphics = entity.get(GraphicsComponent);\r\n this._timeVisible = timeVisible;\r\n this._timeNotVisible = timeNotVisible;\r\n this._duration = (timeVisible + timeNotVisible) * numBlinks;\r\n }\r\n update(delta) {\r\n if (!this._started) {\r\n this._started = true;\r\n this._elapsedTime = 0;\r\n this._totalTime = 0;\r\n }\r\n if (!this._graphics) {\r\n return;\r\n }\r\n this._elapsedTime += delta;\r\n this._totalTime += delta;\r\n if (this._graphics.visible && this._elapsedTime >= this._timeVisible) {\r\n this._graphics.visible = false;\r\n this._elapsedTime = 0;\r\n }\r\n if (!this._graphics.visible && this._elapsedTime >= this._timeNotVisible) {\r\n this._graphics.visible = true;\r\n this._elapsedTime = 0;\r\n }\r\n if (this.isComplete()) {\r\n this._graphics.visible = true;\r\n }\r\n }\r\n isComplete() {\r\n return this._stopped || this._totalTime >= this._duration;\r\n }\r\n stop() {\r\n if (this._graphics) {\r\n this._graphics.visible = true;\r\n }\r\n this._stopped = true;\r\n }\r\n reset() {\r\n this._started = false;\r\n this._stopped = false;\r\n this._elapsedTime = 0;\r\n this._totalTime = 0;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/Fade.ts\n\r\n\r\nclass Fade {\r\n constructor(entity, endOpacity, speed) {\r\n this._multiplier = 1;\r\n this._started = false;\r\n this._stopped = false;\r\n this._graphics = entity.get(GraphicsComponent);\r\n this._endOpacity = endOpacity;\r\n this._speed = this._ogspeed = speed;\r\n }\r\n update(delta) {\r\n if (!this._graphics) {\r\n return;\r\n }\r\n if (!this._started) {\r\n this._started = true;\r\n this._speed = this._ogspeed;\r\n // determine direction when we start\r\n if (this._endOpacity < this._graphics.opacity) {\r\n this._multiplier = -1;\r\n }\r\n else {\r\n this._multiplier = 1;\r\n }\r\n }\r\n if (this._speed > 0) {\r\n this._graphics.opacity += (this._multiplier *\r\n (Math.abs(this._graphics.opacity - this._endOpacity) * delta)) / this._speed;\r\n }\r\n this._speed -= delta;\r\n if (this.isComplete()) {\r\n this._graphics.opacity = this._endOpacity;\r\n }\r\n Logger.getInstance().debug('[Action fade] Actor opacity:', this._graphics.opacity);\r\n }\r\n isComplete() {\r\n return this._stopped || Math.abs(this._graphics.opacity - this._endOpacity) < 0.05;\r\n }\r\n stop() {\r\n this._stopped = true;\r\n }\r\n reset() {\r\n this._started = false;\r\n this._stopped = false;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/Delay.ts\nclass Delay {\r\n constructor(delay) {\r\n this._elapsedTime = 0;\r\n this._started = false;\r\n this._stopped = false;\r\n this._delay = delay;\r\n }\r\n update(delta) {\r\n if (!this._started) {\r\n this._started = true;\r\n }\r\n this._elapsedTime += delta;\r\n }\r\n isComplete() {\r\n return this._stopped || this._elapsedTime >= this._delay;\r\n }\r\n stop() {\r\n this._stopped = true;\r\n }\r\n reset() {\r\n this._elapsedTime = 0;\r\n this._started = false;\r\n this._stopped = false;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/Die.ts\n\r\nclass Die {\r\n constructor(entity) {\r\n this._stopped = false;\r\n this._entity = entity;\r\n }\r\n update(_delta) {\r\n this._entity.get(ActionsComponent).clearActions();\r\n this._entity.kill();\r\n this._stopped = true;\r\n }\r\n isComplete() {\r\n return this._stopped;\r\n }\r\n stop() {\r\n return;\r\n }\r\n reset() {\r\n return;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/Follow.ts\n\r\n\r\n\r\nclass Follow {\r\n constructor(entity, entityToFollow, followDistance) {\r\n this._started = false;\r\n this._stopped = false;\r\n this._tx = entity.get(TransformComponent);\r\n this._motion = entity.get(MotionComponent);\r\n this._followTx = entityToFollow.get(TransformComponent);\r\n this._followMotion = entityToFollow.get(MotionComponent);\r\n this._current = new Vector(this._tx.pos.x, this._tx.pos.y);\r\n this._end = new Vector(this._followTx.pos.x, this._followTx.pos.y);\r\n this._maximumDistance = followDistance !== undefined ? followDistance : this._current.distance(this._end);\r\n this._speed = 0;\r\n }\r\n update(_delta) {\r\n if (!this._started) {\r\n this._started = true;\r\n this._distanceBetween = this._current.distance(this._end);\r\n this._dir = this._end.sub(this._current).normalize();\r\n }\r\n const actorToFollowSpeed = Math.sqrt(Math.pow(this._followMotion.vel.x, 2) + Math.pow(this._followMotion.vel.y, 2));\r\n if (actorToFollowSpeed !== 0) {\r\n this._speed = actorToFollowSpeed;\r\n }\r\n this._current = vec(this._tx.pos.x, this._tx.pos.y);\r\n this._end = vec(this._followTx.pos.x, this._followTx.pos.y);\r\n this._distanceBetween = this._current.distance(this._end);\r\n this._dir = this._end.sub(this._current).normalize();\r\n if (this._distanceBetween >= this._maximumDistance) {\r\n const m = this._dir.scale(this._speed);\r\n this._motion.vel = vec(m.x, m.y);\r\n }\r\n else {\r\n this._motion.vel = vec(0, 0);\r\n }\r\n if (this.isComplete()) {\r\n this._tx.pos = vec(this._end.x, this._end.y);\r\n this._motion.vel = vec(0, 0);\r\n }\r\n }\r\n stop() {\r\n this._motion.vel = vec(0, 0);\r\n this._stopped = true;\r\n }\r\n isComplete() {\r\n // the actor following should never stop unless specified to do so\r\n return this._stopped;\r\n }\r\n reset() {\r\n this._started = false;\r\n this._stopped = false;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/Meet.ts\n\r\n\r\n\r\nclass Meet {\r\n constructor(actor, actorToMeet, speed) {\r\n this._started = false;\r\n this._stopped = false;\r\n this._speedWasSpecified = false;\r\n this._tx = actor.get(TransformComponent);\r\n this._motion = actor.get(MotionComponent);\r\n this._meetTx = actorToMeet.get(TransformComponent);\r\n this._meetMotion = actorToMeet.get(MotionComponent);\r\n this._current = new Vector(this._tx.pos.x, this._tx.pos.y);\r\n this._end = new Vector(this._meetTx.pos.x, this._meetTx.pos.y);\r\n this._speed = speed || 0;\r\n if (speed !== undefined) {\r\n this._speedWasSpecified = true;\r\n }\r\n }\r\n update(_delta) {\r\n if (!this._started) {\r\n this._started = true;\r\n this._distanceBetween = this._current.distance(this._end);\r\n this._dir = this._end.sub(this._current).normalize();\r\n }\r\n const actorToMeetSpeed = Math.sqrt(Math.pow(this._meetMotion.vel.x, 2) + Math.pow(this._meetMotion.vel.y, 2));\r\n if (actorToMeetSpeed !== 0 && !this._speedWasSpecified) {\r\n this._speed = actorToMeetSpeed;\r\n }\r\n this._current = vec(this._tx.pos.x, this._tx.pos.y);\r\n this._end = vec(this._meetTx.pos.x, this._meetTx.pos.y);\r\n this._distanceBetween = this._current.distance(this._end);\r\n this._dir = this._end.sub(this._current).normalize();\r\n const m = this._dir.scale(this._speed);\r\n this._motion.vel = vec(m.x, m.y);\r\n if (this.isComplete()) {\r\n this._tx.pos = vec(this._end.x, this._end.y);\r\n this._motion.vel = vec(0, 0);\r\n }\r\n }\r\n isComplete() {\r\n return this._stopped || this._distanceBetween <= 1;\r\n }\r\n stop() {\r\n this._motion.vel = vec(0, 0);\r\n this._stopped = true;\r\n }\r\n reset() {\r\n this._started = false;\r\n this._stopped = false;\r\n this._distanceBetween = undefined;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/ActionContext.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * The fluent Action API allows you to perform \"actions\" on\r\n * [[Actor|Actors]] such as following, moving, rotating, and\r\n * more. You can implement your own actions by implementing\r\n * the [[Action]] interface.\r\n */\r\nclass ActionContext {\r\n constructor(entity) {\r\n this._entity = entity;\r\n this._queue = new ActionQueue(entity);\r\n }\r\n getQueue() {\r\n return this._queue;\r\n }\r\n update(elapsedMs) {\r\n this._queue.update(elapsedMs);\r\n }\r\n /**\r\n * Clears all queued actions from the Actor\r\n */\r\n clearActions() {\r\n this._queue.clearActions();\r\n }\r\n runAction(action) {\r\n action.reset();\r\n this._queue.add(action);\r\n return this;\r\n }\r\n easeTo(...args) {\r\n var _a, _b;\r\n let x = 0;\r\n let y = 0;\r\n let duration = 0;\r\n let easingFcn = EasingFunctions.Linear;\r\n if (args[0] instanceof Vector) {\r\n x = args[0].x;\r\n y = args[0].y;\r\n duration = args[1];\r\n easingFcn = (_a = args[2]) !== null && _a !== void 0 ? _a : easingFcn;\r\n }\r\n else {\r\n x = args[0];\r\n y = args[1];\r\n duration = args[2];\r\n easingFcn = (_b = args[3]) !== null && _b !== void 0 ? _b : easingFcn;\r\n }\r\n this._queue.add(new EaseTo(this._entity, x, y, duration, easingFcn));\r\n return this;\r\n }\r\n easeBy(...args) {\r\n var _a, _b;\r\n let offsetX = 0;\r\n let offsetY = 0;\r\n let duration = 0;\r\n let easingFcn = EasingFunctions.Linear;\r\n if (args[0] instanceof Vector) {\r\n offsetX = args[0].x;\r\n offsetY = args[0].y;\r\n duration = args[1];\r\n easingFcn = (_a = args[2]) !== null && _a !== void 0 ? _a : easingFcn;\r\n }\r\n else {\r\n offsetX = args[0];\r\n offsetY = args[1];\r\n duration = args[2];\r\n easingFcn = (_b = args[3]) !== null && _b !== void 0 ? _b : easingFcn;\r\n }\r\n this._queue.add(new EaseBy(this._entity, offsetX, offsetY, duration, easingFcn));\r\n return this;\r\n }\r\n moveTo(xOrPos, yOrSpeed, speedOrUndefined) {\r\n let x = 0;\r\n let y = 0;\r\n let speed = 0;\r\n if (xOrPos instanceof Vector) {\r\n x = xOrPos.x;\r\n y = xOrPos.y;\r\n speed = yOrSpeed;\r\n }\r\n else {\r\n x = xOrPos;\r\n y = yOrSpeed;\r\n speed = speedOrUndefined;\r\n }\r\n this._queue.add(new MoveTo(this._entity, x, y, speed));\r\n return this;\r\n }\r\n moveBy(xOffsetOrVector, yOffsetOrSpeed, speedOrUndefined) {\r\n let xOffset = 0;\r\n let yOffset = 0;\r\n let speed = 0;\r\n if (xOffsetOrVector instanceof Vector) {\r\n xOffset = xOffsetOrVector.x;\r\n yOffset = xOffsetOrVector.y;\r\n speed = yOffsetOrSpeed;\r\n }\r\n else {\r\n xOffset = xOffsetOrVector;\r\n yOffset = yOffsetOrSpeed;\r\n speed = speedOrUndefined;\r\n }\r\n this._queue.add(new MoveBy(this._entity, xOffset, yOffset, speed));\r\n return this;\r\n }\r\n /**\r\n * This method will rotate an actor to the specified angle at the speed\r\n * specified (in radians per second) and return back the actor. This\r\n * method is part of the actor 'Action' fluent API allowing action chaining.\r\n * @param angleRadians The angle to rotate to in radians\r\n * @param speed The angular velocity of the rotation specified in radians per second\r\n * @param rotationType The [[RotationType]] to use for this rotation\r\n */\r\n rotateTo(angleRadians, speed, rotationType) {\r\n this._queue.add(new RotateTo(this._entity, angleRadians, speed, rotationType));\r\n return this;\r\n }\r\n /**\r\n * This method will rotate an actor by the specified angle offset, from it's current rotation given a certain speed\r\n * in radians/sec and return back the actor. This method is part\r\n * of the actor 'Action' fluent API allowing action chaining.\r\n * @param angleRadiansOffset The angle to rotate to in radians relative to the current rotation\r\n * @param speed The speed in radians/sec the actor should rotate at\r\n * @param rotationType The [[RotationType]] to use for this rotation, default is shortest path\r\n */\r\n rotateBy(angleRadiansOffset, speed, rotationType) {\r\n this._queue.add(new RotateBy(this._entity, angleRadiansOffset, speed, rotationType));\r\n return this;\r\n }\r\n scaleTo(sizeXOrVector, sizeYOrSpeed, speedXOrUndefined, speedYOrUndefined) {\r\n let sizeX = 1;\r\n let sizeY = 1;\r\n let speedX = 0;\r\n let speedY = 0;\r\n if (sizeXOrVector instanceof Vector && sizeYOrSpeed instanceof Vector) {\r\n sizeX = sizeXOrVector.x;\r\n sizeY = sizeXOrVector.y;\r\n speedX = sizeYOrSpeed.x;\r\n speedY = sizeYOrSpeed.y;\r\n }\r\n if (typeof sizeXOrVector === 'number' && typeof sizeYOrSpeed === 'number') {\r\n sizeX = sizeXOrVector;\r\n sizeY = sizeYOrSpeed;\r\n speedX = speedXOrUndefined;\r\n speedY = speedYOrUndefined;\r\n }\r\n this._queue.add(new ScaleTo(this._entity, sizeX, sizeY, speedX, speedY));\r\n return this;\r\n }\r\n scaleBy(sizeOffsetXOrVector, sizeOffsetYOrSpeed, speed) {\r\n let sizeOffsetX = 1;\r\n let sizeOffsetY = 1;\r\n if (sizeOffsetXOrVector instanceof Vector) {\r\n sizeOffsetX = sizeOffsetXOrVector.x;\r\n sizeOffsetY = sizeOffsetXOrVector.y;\r\n speed = sizeOffsetYOrSpeed;\r\n }\r\n if (typeof sizeOffsetXOrVector === 'number' && typeof sizeOffsetYOrSpeed === 'number') {\r\n sizeOffsetX = sizeOffsetXOrVector;\r\n sizeOffsetY = sizeOffsetYOrSpeed;\r\n }\r\n this._queue.add(new ScaleBy(this._entity, sizeOffsetX, sizeOffsetY, speed));\r\n return this;\r\n }\r\n /**\r\n * This method will cause an actor to blink (become visible and not\r\n * visible). Optionally, you may specify the number of blinks. Specify the amount of time\r\n * the actor should be visible per blink, and the amount of time not visible.\r\n * This method is part of the actor 'Action' fluent API allowing action chaining.\r\n * @param timeVisible The amount of time to stay visible per blink in milliseconds\r\n * @param timeNotVisible The amount of time to stay not visible per blink in milliseconds\r\n * @param numBlinks The number of times to blink\r\n */\r\n blink(timeVisible, timeNotVisible, numBlinks = 1) {\r\n this._queue.add(new Blink(this._entity, timeVisible, timeNotVisible, numBlinks));\r\n return this;\r\n }\r\n /**\r\n * This method will cause an actor's opacity to change from its current value\r\n * to the provided value by a specified time (in milliseconds). This method is\r\n * part of the actor 'Action' fluent API allowing action chaining.\r\n * @param opacity The ending opacity\r\n * @param time The time it should take to fade the actor (in milliseconds)\r\n */\r\n fade(opacity, time) {\r\n this._queue.add(new Fade(this._entity, opacity, time));\r\n return this;\r\n }\r\n /**\r\n * This method will delay the next action from executing for a certain\r\n * amount of time (in milliseconds). This method is part of the actor\r\n * 'Action' fluent API allowing action chaining.\r\n * @param time The amount of time to delay the next action in the queue from executing in milliseconds\r\n */\r\n delay(time) {\r\n this._queue.add(new Delay(time));\r\n return this;\r\n }\r\n /**\r\n * This method will add an action to the queue that will remove the actor from the\r\n * scene once it has completed its previous Any actions on the\r\n * action queue after this action will not be executed.\r\n */\r\n die() {\r\n this._queue.add(new Die(this._entity));\r\n return this;\r\n }\r\n /**\r\n * This method allows you to call an arbitrary method as the next action in the\r\n * action queue. This is useful if you want to execute code in after a specific\r\n * action, i.e An actor arrives at a destination after traversing a path\r\n */\r\n callMethod(method) {\r\n this._queue.add(new CallMethod(method));\r\n return this;\r\n }\r\n /**\r\n * This method will cause the actor to repeat all of the actions built in\r\n * the `repeatBuilder` callback. If the number of repeats\r\n * is not specified it will repeat forever. This method is part of\r\n * the actor 'Action' fluent API allowing action chaining\r\n *\r\n * ```typescript\r\n * // Move up in a zig-zag by repeated moveBy's\r\n * actor.actions.repeat(repeatCtx => {\r\n * repeatCtx.moveBy(10, 0, 10);\r\n * repeatCtx.moveBy(0, 10, 10);\r\n * }, 5);\r\n * ```\r\n *\r\n * @param repeatBuilder The builder to specify the repeatable list of actions\r\n * @param times The number of times to repeat all the previous actions in the action queue. If nothing is specified the actions\r\n * will repeat forever\r\n */\r\n repeat(repeatBuilder, times) {\r\n if (!times) {\r\n this.repeatForever(repeatBuilder);\r\n return this;\r\n }\r\n this._queue.add(new Repeat(this._entity, repeatBuilder, times));\r\n return this;\r\n }\r\n /**\r\n * This method will cause the actor to repeat all of the actions built in\r\n * the `repeatBuilder` callback. If the number of repeats\r\n * is not specified it will repeat forever. This method is part of\r\n * the actor 'Action' fluent API allowing action chaining\r\n *\r\n * ```typescript\r\n * // Move up in a zig-zag by repeated moveBy's\r\n * actor.actions.repeat(repeatCtx => {\r\n * repeatCtx.moveBy(10, 0, 10);\r\n * repeatCtx.moveBy(0, 10, 10);\r\n * }, 5);\r\n * ```\r\n *\r\n * @param repeatBuilder The builder to specify the repeatable list of actions\r\n */\r\n repeatForever(repeatBuilder) {\r\n this._queue.add(new RepeatForever(this._entity, repeatBuilder));\r\n return this;\r\n }\r\n /**\r\n * This method will cause the entity to follow another at a specified distance\r\n * @param entity The entity to follow\r\n * @param followDistance The distance to maintain when following, if not specified the actor will follow at the current distance.\r\n */\r\n follow(entity, followDistance) {\r\n if (followDistance === undefined) {\r\n this._queue.add(new Follow(this._entity, entity));\r\n }\r\n else {\r\n this._queue.add(new Follow(this._entity, entity, followDistance));\r\n }\r\n return this;\r\n }\r\n /**\r\n * This method will cause the entity to move towards another until they\r\n * collide \"meet\" at a specified speed.\r\n * @param entity The entity to meet\r\n * @param speed The speed in pixels per second to move, if not specified it will match the speed of the other actor\r\n */\r\n meet(entity, speed) {\r\n if (speed === undefined) {\r\n this._queue.add(new Meet(this._entity, entity));\r\n }\r\n else {\r\n this._queue.add(new Meet(this._entity, entity, speed));\r\n }\r\n return this;\r\n }\r\n /**\r\n * Returns a promise that resolves when the current action queue up to now\r\n * is finished.\r\n */\r\n toPromise() {\r\n const temp = new Promise((resolve) => {\r\n this._queue.add(new CallMethod(() => {\r\n resolve();\r\n }));\r\n });\r\n return temp;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/ActionsComponent.ts\n\r\n\r\n\r\n\r\n;\r\nclass ActionsComponent extends Component {\r\n constructor() {\r\n super(...arguments);\r\n this.type = 'ex.actions';\r\n this.dependencies = [TransformComponent, MotionComponent];\r\n }\r\n onAdd(entity) {\r\n this._ctx = new ActionContext(entity);\r\n }\r\n onRemove() {\r\n this._ctx = null;\r\n }\r\n /**\r\n * Returns the internal action queue\r\n * @returns action queue\r\n */\r\n getQueue() {\r\n var _a;\r\n return (_a = this._ctx) === null || _a === void 0 ? void 0 : _a.getQueue();\r\n }\r\n runAction(action) {\r\n var _a;\r\n return (_a = this._ctx) === null || _a === void 0 ? void 0 : _a.runAction(action);\r\n }\r\n /**\r\n * Updates the internal action context, performing action and moving through the internal queue\r\n * @param elapsedMs\r\n */\r\n update(elapsedMs) {\r\n var _a;\r\n return (_a = this._ctx) === null || _a === void 0 ? void 0 : _a.update(elapsedMs);\r\n }\r\n /**\r\n * Clears all queued actions from the Actor\r\n */\r\n clearActions() {\r\n var _a;\r\n (_a = this._ctx) === null || _a === void 0 ? void 0 : _a.clearActions();\r\n }\r\n easeTo(...args) {\r\n return this._ctx.easeTo.apply(this._ctx, args);\r\n }\r\n easeBy(...args) {\r\n return this._ctx.easeBy.apply(this._ctx, args);\r\n }\r\n moveTo(xOrPos, yOrSpeed, speedOrUndefined) {\r\n return this._ctx.moveTo.apply(this._ctx, [xOrPos, yOrSpeed, speedOrUndefined]);\r\n }\r\n moveBy(xOffsetOrVector, yOffsetOrSpeed, speedOrUndefined) {\r\n return this._ctx.moveBy.apply(this._ctx, [xOffsetOrVector, yOffsetOrSpeed, speedOrUndefined]);\r\n }\r\n /**\r\n * This method will rotate an actor to the specified angle at the speed\r\n * specified (in radians per second) and return back the actor. This\r\n * method is part of the actor 'Action' fluent API allowing action chaining.\r\n * @param angleRadians The angle to rotate to in radians\r\n * @param speed The angular velocity of the rotation specified in radians per second\r\n * @param rotationType The [[RotationType]] to use for this rotation\r\n */\r\n rotateTo(angleRadians, speed, rotationType) {\r\n return this._ctx.rotateTo(angleRadians, speed, rotationType);\r\n }\r\n /**\r\n * This method will rotate an actor by the specified angle offset, from it's current rotation given a certain speed\r\n * in radians/sec and return back the actor. This method is part\r\n * of the actor 'Action' fluent API allowing action chaining.\r\n * @param angleRadiansOffset The angle to rotate to in radians relative to the current rotation\r\n * @param speed The speed in radians/sec the actor should rotate at\r\n * @param rotationType The [[RotationType]] to use for this rotation, default is shortest path\r\n */\r\n rotateBy(angleRadiansOffset, speed, rotationType) {\r\n return this._ctx.rotateBy(angleRadiansOffset, speed, rotationType);\r\n }\r\n scaleTo(sizeXOrVector, sizeYOrSpeed, speedXOrUndefined, speedYOrUndefined) {\r\n return this._ctx.scaleTo.apply(this._ctx, [sizeXOrVector, sizeYOrSpeed, speedXOrUndefined, speedYOrUndefined]);\r\n }\r\n scaleBy(sizeOffsetXOrVector, sizeOffsetYOrSpeed, speed) {\r\n return this._ctx.scaleBy.apply(this._ctx, [sizeOffsetXOrVector, sizeOffsetYOrSpeed, speed]);\r\n }\r\n /**\r\n * This method will cause an actor to blink (become visible and not\r\n * visible). Optionally, you may specify the number of blinks. Specify the amount of time\r\n * the actor should be visible per blink, and the amount of time not visible.\r\n * This method is part of the actor 'Action' fluent API allowing action chaining.\r\n * @param timeVisible The amount of time to stay visible per blink in milliseconds\r\n * @param timeNotVisible The amount of time to stay not visible per blink in milliseconds\r\n * @param numBlinks The number of times to blink\r\n */\r\n blink(timeVisible, timeNotVisible, numBlinks) {\r\n return this._ctx.blink(timeVisible, timeNotVisible, numBlinks);\r\n }\r\n /**\r\n * This method will cause an actor's opacity to change from its current value\r\n * to the provided value by a specified time (in milliseconds). This method is\r\n * part of the actor 'Action' fluent API allowing action chaining.\r\n * @param opacity The ending opacity\r\n * @param time The time it should take to fade the actor (in milliseconds)\r\n */\r\n fade(opacity, time) {\r\n return this._ctx.fade(opacity, time);\r\n }\r\n /**\r\n * This method will delay the next action from executing for a certain\r\n * amount of time (in milliseconds). This method is part of the actor\r\n * 'Action' fluent API allowing action chaining.\r\n * @param time The amount of time to delay the next action in the queue from executing in milliseconds\r\n */\r\n delay(time) {\r\n return this._ctx.delay(time);\r\n }\r\n /**\r\n * This method will add an action to the queue that will remove the actor from the\r\n * scene once it has completed its previous Any actions on the\r\n * action queue after this action will not be executed.\r\n */\r\n die() {\r\n return this._ctx.die();\r\n }\r\n /**\r\n * This method allows you to call an arbitrary method as the next action in the\r\n * action queue. This is useful if you want to execute code in after a specific\r\n * action, i.e An actor arrives at a destination after traversing a path\r\n */\r\n callMethod(method) {\r\n return this._ctx.callMethod(method);\r\n }\r\n /**\r\n * This method will cause the actor to repeat all of the actions built in\r\n * the `repeatBuilder` callback. If the number of repeats\r\n * is not specified it will repeat forever. This method is part of\r\n * the actor 'Action' fluent API allowing action chaining\r\n *\r\n * ```typescript\r\n * // Move up in a zig-zag by repeated moveBy's\r\n * actor.actions.repeat(repeatCtx => {\r\n * repeatCtx.moveBy(10, 0, 10);\r\n * repeatCtx.moveBy(0, 10, 10);\r\n * }, 5);\r\n * ```\r\n *\r\n * @param repeatBuilder The builder to specify the repeatable list of actions\r\n * @param times The number of times to repeat all the previous actions in the action queue. If nothing is specified the actions\r\n * will repeat forever\r\n */\r\n repeat(repeatBuilder, times) {\r\n return this._ctx.repeat(repeatBuilder, times);\r\n }\r\n /**\r\n * This method will cause the actor to repeat all of the actions built in\r\n * the `repeatBuilder` callback. If the number of repeats\r\n * is not specified it will repeat forever. This method is part of\r\n * the actor 'Action' fluent API allowing action chaining\r\n *\r\n * ```typescript\r\n * // Move up in a zig-zag by repeated moveBy's\r\n * actor.actions.repeat(repeatCtx => {\r\n * repeatCtx.moveBy(10, 0, 10);\r\n * repeatCtx.moveBy(0, 10, 10);\r\n * }, 5);\r\n * ```\r\n *\r\n * @param repeatBuilder The builder to specify the repeatable list of actions\r\n */\r\n repeatForever(repeatBuilder) {\r\n return this._ctx.repeatForever(repeatBuilder);\r\n }\r\n /**\r\n * This method will cause the entity to follow another at a specified distance\r\n * @param entity The entity to follow\r\n * @param followDistance The distance to maintain when following, if not specified the actor will follow at the current distance.\r\n */\r\n follow(entity, followDistance) {\r\n return this._ctx.follow(entity, followDistance);\r\n }\r\n /**\r\n * This method will cause the entity to move towards another until they\r\n * collide \"meet\" at a specified speed.\r\n * @param entity The entity to meet\r\n * @param speed The speed in pixels per second to move, if not specified it will match the speed of the other actor\r\n */\r\n meet(entity, speed) {\r\n return this._ctx.meet(entity, speed);\r\n }\r\n /**\r\n * Returns a promise that resolves when the current action queue up to now\r\n * is finished.\r\n */\r\n toPromise() {\r\n return this._ctx.toPromise();\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/FontCommon.ts\n/**\r\n * Enum representing the different font size units\r\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-size\r\n */\r\nvar FontUnit;\r\n(function (FontUnit) {\r\n /**\r\n * Em is a scalable unit, 1 em is equal to the current font size of the current element, parent elements can effect em values\r\n */\r\n FontUnit[\"Em\"] = \"em\";\r\n /**\r\n * Rem is similar to the Em, it is a scalable unit. 1 rem is equal to the font size of the root element\r\n */\r\n FontUnit[\"Rem\"] = \"rem\";\r\n /**\r\n * Pixel is a unit of length in screen pixels\r\n */\r\n FontUnit[\"Px\"] = \"px\";\r\n /**\r\n * Point is a physical unit length (1/72 of an inch)\r\n */\r\n FontUnit[\"Pt\"] = \"pt\";\r\n /**\r\n * Percent is a scalable unit similar to Em, the only difference is the Em units scale faster when Text-Size stuff\r\n */\r\n FontUnit[\"Percent\"] = \"%\";\r\n})(FontUnit || (FontUnit = {}));\r\n/**\r\n * Enum representing the different horizontal text alignments\r\n */\r\nvar TextAlign;\r\n(function (TextAlign) {\r\n /**\r\n * The text is left-aligned.\r\n */\r\n TextAlign[\"Left\"] = \"left\";\r\n /**\r\n * The text is right-aligned.\r\n */\r\n TextAlign[\"Right\"] = \"right\";\r\n /**\r\n * The text is centered.\r\n */\r\n TextAlign[\"Center\"] = \"center\";\r\n /**\r\n * The text is aligned at the normal start of the line (left-aligned for left-to-right locales,\r\n * right-aligned for right-to-left locales).\r\n */\r\n TextAlign[\"Start\"] = \"start\";\r\n /**\r\n * The text is aligned at the normal end of the line (right-aligned for left-to-right locales,\r\n * left-aligned for right-to-left locales).\r\n */\r\n TextAlign[\"End\"] = \"end\";\r\n})(TextAlign || (TextAlign = {}));\r\n/**\r\n * Enum representing the different baseline text alignments\r\n */\r\nvar BaseAlign;\r\n(function (BaseAlign) {\r\n /**\r\n * The text baseline is the top of the em square.\r\n */\r\n BaseAlign[\"Top\"] = \"top\";\r\n /**\r\n * The text baseline is the hanging baseline. Currently unsupported; this will act like\r\n * alphabetic.\r\n */\r\n BaseAlign[\"Hanging\"] = \"hanging\";\r\n /**\r\n * The text baseline is the middle of the em square.\r\n */\r\n BaseAlign[\"Middle\"] = \"middle\";\r\n /**\r\n * The text baseline is the normal alphabetic baseline.\r\n */\r\n BaseAlign[\"Alphabetic\"] = \"alphabetic\";\r\n /**\r\n * The text baseline is the ideographic baseline; this is the bottom of\r\n * the body of the characters, if the main body of characters protrudes\r\n * beneath the alphabetic baseline. Currently unsupported; this will\r\n * act like alphabetic.\r\n */\r\n BaseAlign[\"Ideographic\"] = \"ideographic\";\r\n /**\r\n * The text baseline is the bottom of the bounding box. This differs\r\n * from the ideographic baseline in that the ideographic baseline\r\n * doesn't consider descenders.\r\n */\r\n BaseAlign[\"Bottom\"] = \"bottom\";\r\n})(BaseAlign || (BaseAlign = {}));\r\n/**\r\n * Enum representing the different possible font styles\r\n */\r\nvar FontStyle;\r\n(function (FontStyle) {\r\n FontStyle[\"Normal\"] = \"normal\";\r\n FontStyle[\"Italic\"] = \"italic\";\r\n FontStyle[\"Oblique\"] = \"oblique\";\r\n})(FontStyle || (FontStyle = {}));\r\n/**\r\n * Enum representing the text direction, useful for other languages, or writing text in reverse\r\n */\r\nvar Direction;\r\n(function (Direction) {\r\n Direction[\"LeftToRight\"] = \"ltr\";\r\n Direction[\"RightToLeft\"] = \"rtl\";\r\n})(Direction || (Direction = {}));\r\n\n;// CONCATENATED MODULE: ./Graphics/FontTextInstance.ts\n\r\n\r\n\r\n\r\nclass FontTextInstance {\r\n constructor(font, text, color, maxWidth) {\r\n this.font = font;\r\n this.text = text;\r\n this.color = color;\r\n this.maxWidth = maxWidth;\r\n this._textFragments = [];\r\n this.disposed = false;\r\n this._dirty = true;\r\n this.canvas = document.createElement('canvas');\r\n this.ctx = this.canvas.getContext('2d');\r\n this.dimensions = this.measureText(text);\r\n this._setDimension(this.dimensions, this.ctx);\r\n this._lastHashCode = this.getHashCode();\r\n }\r\n measureText(text, maxWidth) {\r\n if (this.disposed) {\r\n throw Error('Accessing disposed text instance! ' + this.text);\r\n }\r\n let lines = null;\r\n if (maxWidth != null) {\r\n lines = this._getLinesFromText(text, maxWidth);\r\n }\r\n else {\r\n lines = text.split('\\n');\r\n }\r\n const maxWidthLine = lines.reduce((a, b) => {\r\n return a.length > b.length ? a : b;\r\n });\r\n this._applyFont(this.ctx); // font must be applied to the context to measure it\r\n const metrics = this.ctx.measureText(maxWidthLine);\r\n let textHeight = Math.abs(metrics.actualBoundingBoxAscent) + Math.abs(metrics.actualBoundingBoxDescent);\r\n // TODO lineheight makes the text bounds wonky\r\n const lineAdjustedHeight = textHeight * lines.length;\r\n textHeight = lineAdjustedHeight;\r\n const bottomBounds = lineAdjustedHeight - Math.abs(metrics.actualBoundingBoxAscent);\r\n const x = 0;\r\n const y = 0;\r\n const measurement = new BoundingBox({\r\n left: x - Math.abs(metrics.actualBoundingBoxLeft) - this.font.padding,\r\n top: y - Math.abs(metrics.actualBoundingBoxAscent) - this.font.padding,\r\n bottom: y + bottomBounds + this.font.padding,\r\n right: x + Math.abs(metrics.actualBoundingBoxRight) + this.font.padding\r\n });\r\n return measurement;\r\n }\r\n _setDimension(textBounds, bitmap) {\r\n // Changing the width and height clears the context properties\r\n // We double the bitmap width to account for all possible alignment\r\n // We scale by \"quality\" so we render text without jaggies\r\n bitmap.canvas.width = (textBounds.width + this.font.padding * 2) * 2 * this.font.quality;\r\n bitmap.canvas.height = (textBounds.height + this.font.padding * 2) * 2 * this.font.quality;\r\n }\r\n static getHashCode(font, text, color) {\r\n var _a;\r\n const hash = text +\r\n '__hashcode__' +\r\n font.fontString +\r\n font.showDebug +\r\n font.textAlign +\r\n font.baseAlign +\r\n font.direction +\r\n JSON.stringify(font.shadow) +\r\n (font.padding.toString() +\r\n font.smoothing.toString() +\r\n font.lineWidth.toString() +\r\n font.lineDash.toString() +\r\n ((_a = font.strokeColor) === null || _a === void 0 ? void 0 : _a.toString()) +\r\n (color ? color.toString() : font.color.toString()));\r\n return hash;\r\n }\r\n getHashCode(includeColor = true) {\r\n return FontTextInstance.getHashCode(this.font, this.text, includeColor ? this.color : undefined);\r\n }\r\n _applyRasterProperties(ctx) {\r\n var _a, _b;\r\n ctx.translate(this.font.padding, this.font.padding);\r\n ctx.imageSmoothingEnabled = this.font.smoothing;\r\n ctx.lineWidth = this.font.lineWidth;\r\n ctx.setLineDash((_a = this.font.lineDash) !== null && _a !== void 0 ? _a : ctx.getLineDash());\r\n ctx.strokeStyle = (_b = this.font.strokeColor) === null || _b === void 0 ? void 0 : _b.toString();\r\n ctx.fillStyle = this.color.toString();\r\n }\r\n _applyFont(ctx) {\r\n ctx.resetTransform();\r\n ctx.translate(this.font.padding + ctx.canvas.width / 2, this.font.padding + ctx.canvas.height / 2);\r\n ctx.scale(this.font.quality, this.font.quality);\r\n ctx.textAlign = this.font.textAlign;\r\n ctx.textBaseline = this.font.baseAlign;\r\n ctx.font = this.font.fontString;\r\n ctx.direction = this.font.direction;\r\n if (this.font.shadow) {\r\n ctx.shadowColor = this.font.shadow.color.toString();\r\n ctx.shadowBlur = this.font.shadow.blur;\r\n ctx.shadowOffsetX = this.font.shadow.offset.x;\r\n ctx.shadowOffsetY = this.font.shadow.offset.y;\r\n }\r\n }\r\n _drawText(ctx, lines, lineHeight) {\r\n this._applyRasterProperties(ctx);\r\n this._applyFont(ctx);\r\n for (let i = 0; i < lines.length; i++) {\r\n const line = lines[i];\r\n if (this.color) {\r\n ctx.fillText(line, 0, i * lineHeight);\r\n }\r\n if (this.font.strokeColor) {\r\n ctx.strokeText(line, 0, i * lineHeight);\r\n }\r\n }\r\n if (this.font.showDebug) {\r\n // Horizontal line\r\n /* istanbul ignore next */\r\n line(ctx, Color.Green, -ctx.canvas.width / 2, 0, ctx.canvas.width / 2, 0, 2);\r\n // Vertical line\r\n /* istanbul ignore next */\r\n line(ctx, Color.Red, 0, -ctx.canvas.height / 2, 0, ctx.canvas.height / 2, 2);\r\n }\r\n }\r\n _splitTextBitmap(bitmap) {\r\n const textImages = [];\r\n let currentX = 0;\r\n let currentY = 0;\r\n // 4k is the max for mobile devices\r\n const width = Math.min(4096, bitmap.canvas.width);\r\n const height = Math.min(4096, bitmap.canvas.height);\r\n // Splits the original bitmap into 4k max chunks\r\n while (currentX < bitmap.canvas.width) {\r\n while (currentY < bitmap.canvas.height) {\r\n // create new bitmap\r\n const canvas = document.createElement('canvas');\r\n canvas.width = width;\r\n canvas.height = height;\r\n const ctx = canvas.getContext('2d');\r\n // draw current slice to new bitmap in < 4k chunks\r\n ctx.drawImage(bitmap.canvas, currentX, currentY, width, height, 0, 0, width, height);\r\n textImages.push({ x: currentX, y: currentY, canvas });\r\n currentY += height;\r\n }\r\n currentX += width;\r\n currentY = 0;\r\n }\r\n return textImages;\r\n }\r\n flagDirty() {\r\n this._dirty = true;\r\n }\r\n render(ex, x, y, maxWidth) {\r\n if (this.disposed) {\r\n throw Error('Accessing disposed text instance! ' + this.text);\r\n }\r\n this._ex = ex;\r\n const hashCode = this.getHashCode();\r\n if (this._lastHashCode !== hashCode) {\r\n this._dirty = true;\r\n }\r\n // Calculate image chunks\r\n if (this._dirty) {\r\n this.dimensions = this.measureText(this.text, maxWidth);\r\n this._setDimension(this.dimensions, this.ctx);\r\n const lines = this._getLinesFromText(this.text, maxWidth);\r\n const lineHeight = this.dimensions.height / lines.length;\r\n // draws the text to the main bitmap\r\n this._drawText(this.ctx, lines, lineHeight);\r\n // clear any out old fragments\r\n if (ex instanceof ExcaliburGraphicsContextWebGL) {\r\n for (const frag of this._textFragments) {\r\n ex.textureLoader.delete(frag.canvas);\r\n }\r\n }\r\n // splits to < 4k fragments for large text\r\n this._textFragments = this._splitTextBitmap(this.ctx);\r\n if (ex instanceof ExcaliburGraphicsContextWebGL) {\r\n for (const frag of this._textFragments) {\r\n ex.textureLoader.load(frag.canvas, this.font.filtering, true);\r\n }\r\n }\r\n this._lastHashCode = hashCode;\r\n this._dirty = false;\r\n }\r\n // draws the bitmap fragments to excalibur graphics context\r\n for (const frag of this._textFragments) {\r\n ex.drawImage(frag.canvas, 0, 0, frag.canvas.width, frag.canvas.height, frag.x / this.font.quality + x - this.ctx.canvas.width / this.font.quality / 2, frag.y / this.font.quality + y - this.ctx.canvas.height / this.font.quality / 2, frag.canvas.width / this.font.quality, frag.canvas.height / this.font.quality);\r\n }\r\n }\r\n dispose() {\r\n this.disposed = true;\r\n this.dimensions = undefined;\r\n this.canvas = undefined;\r\n this.ctx = undefined;\r\n if (this._ex instanceof ExcaliburGraphicsContextWebGL) {\r\n for (const frag of this._textFragments) {\r\n this._ex.textureLoader.delete(frag.canvas);\r\n }\r\n }\r\n this._textFragments.length = 0;\r\n }\r\n _getLinesFromText(text, maxWidth) {\r\n if (this._chachedText === text && this._cachedRenderWidth === maxWidth) {\r\n return this._chachedLines;\r\n }\r\n const lines = text.split('\\n');\r\n if (maxWidth == null) {\r\n return lines;\r\n }\r\n // If the current line goes past the maxWidth, append a new line without modifying the underlying text.\r\n for (let i = 0; i < lines.length; i++) {\r\n let line = lines[i];\r\n let newLine = '';\r\n if (this.measureText(line).width > maxWidth) {\r\n while (this.measureText(line).width > maxWidth) {\r\n newLine = line[line.length - 1] + newLine;\r\n line = line.slice(0, -1); // Remove last character from line\r\n }\r\n // Update the array with our new values\r\n lines[i] = line;\r\n lines[i + 1] = newLine;\r\n }\r\n }\r\n this._chachedText = text;\r\n this._chachedLines = lines;\r\n this._cachedRenderWidth = maxWidth;\r\n return lines;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/FontCache.ts\n\r\n\r\nclass FontCache {\r\n static measureText(text, font, maxWidth) {\r\n const hash = FontTextInstance.getHashCode(font, text);\r\n if (FontCache._MEASURE_CACHE.has(hash)) {\r\n return FontCache._MEASURE_CACHE.get(hash);\r\n }\r\n FontCache._LOGGER.debug('Font text measurement cache miss');\r\n const measurement = font.measureTextWithoutCache(text, maxWidth);\r\n FontCache._MEASURE_CACHE.set(hash, measurement);\r\n return measurement;\r\n }\r\n static getTextInstance(text, font, color) {\r\n const hash = FontTextInstance.getHashCode(font, text, color);\r\n let textInstance = FontCache._TEXT_CACHE.get(hash);\r\n if (!textInstance) {\r\n textInstance = new FontTextInstance(font, text, color);\r\n FontCache._TEXT_CACHE.set(hash, textInstance);\r\n FontCache._LOGGER.debug('Font text instance cache miss');\r\n }\r\n // Cache the bitmap for certain amount of time\r\n FontCache._TEXT_USAGE.set(textInstance, performance.now());\r\n return textInstance;\r\n }\r\n static checkAndClearCache() {\r\n const deferred = [];\r\n const currentHashCodes = new Set();\r\n for (const [textInstance, time] of FontCache._TEXT_USAGE.entries()) {\r\n // if bitmap hasn't been used in 100 ms clear it\r\n if (time + 100 < performance.now()) {\r\n FontCache._LOGGER.debug(`Text cache entry timed out ${textInstance.text}`);\r\n deferred.push(textInstance);\r\n textInstance.dispose();\r\n }\r\n else {\r\n const hash = textInstance.getHashCode(false);\r\n currentHashCodes.add(hash);\r\n }\r\n }\r\n // Deferred removal of text instances\r\n deferred.forEach((t) => {\r\n FontCache._TEXT_USAGE.delete(t);\r\n });\r\n // Regenerate text instance cache\r\n this._TEXT_CACHE.clear();\r\n for (const [textInstance] of this._TEXT_USAGE.entries()) {\r\n this._TEXT_CACHE.set(textInstance.getHashCode(), textInstance);\r\n }\r\n // Regenerated measurement cache\r\n const newTextMeasurementCache = new Map();\r\n for (const current of currentHashCodes) {\r\n if (FontCache._MEASURE_CACHE.has(current)) {\r\n newTextMeasurementCache.set(current, FontCache._MEASURE_CACHE.get(current));\r\n }\r\n }\r\n this._MEASURE_CACHE.clear();\r\n this._MEASURE_CACHE = newTextMeasurementCache;\r\n }\r\n static get cacheSize() {\r\n return FontCache._TEXT_USAGE.size;\r\n }\r\n /**\r\n * Force clear all cached text bitmaps\r\n */\r\n static clearCache() {\r\n for (const [textInstance] of FontCache._TEXT_USAGE.entries()) {\r\n textInstance.dispose();\r\n }\r\n FontCache._TEXT_USAGE.clear();\r\n FontCache._TEXT_CACHE.clear();\r\n FontCache._MEASURE_CACHE.clear();\r\n }\r\n}\r\nFontCache._LOGGER = Logger.getInstance();\r\nFontCache._TEXT_USAGE = new Map();\r\nFontCache._TEXT_CACHE = new Map();\r\nFontCache._MEASURE_CACHE = new Map();\r\n\n;// CONCATENATED MODULE: ./Graphics/Font.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Represents a system or web font in Excalibur\r\n *\r\n * If no options specified, the system sans-serif 10 pixel is used\r\n *\r\n * If loading a custom web font be sure to have the font loaded before you use it https://erikonarheim.com/posts/dont-test-fonts/\r\n */\r\nclass Font extends Graphic {\r\n constructor(options = {}) {\r\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;\r\n super(options); // <- Graphics properties\r\n /**\r\n * Set the font filtering mode, by default set to [[ImageFiltering.Blended]] regardless of the engine default smoothing\r\n *\r\n * If you have a pixel style font that may be a reason to switch this to [[ImageFiltering.Pixel]]\r\n */\r\n this.filtering = ImageFiltering.Blended;\r\n /**\r\n * Font quality determines the size of the underlying raster text, higher quality means less jagged edges.\r\n * If quality is set to 1, then just enough raster bitmap is generated to render the text.\r\n *\r\n * You can think of quality as how zoomed in to the text you can get before seeing jagged edges.\r\n *\r\n * (Default 2)\r\n */\r\n this.quality = 2;\r\n // Raster properties for fonts\r\n this.padding = 2;\r\n this.smoothing = false;\r\n this.lineWidth = 1;\r\n this.lineDash = [];\r\n this.color = Color.Black;\r\n this.family = 'sans-serif';\r\n this.style = FontStyle.Normal;\r\n this.bold = false;\r\n this.unit = FontUnit.Px;\r\n this.textAlign = TextAlign.Left;\r\n this.baseAlign = BaseAlign.Alphabetic;\r\n this.direction = Direction.LeftToRight;\r\n this.size = 10;\r\n this.shadow = null;\r\n this._textBounds = new BoundingBox();\r\n this._textMeasurement = new FontTextInstance(this, '', Color.Black);\r\n // Raster properties\r\n this.smoothing = (_a = options === null || options === void 0 ? void 0 : options.smoothing) !== null && _a !== void 0 ? _a : this.smoothing;\r\n this.padding = (_b = options === null || options === void 0 ? void 0 : options.padding) !== null && _b !== void 0 ? _b : this.padding;\r\n this.color = (_c = options === null || options === void 0 ? void 0 : options.color) !== null && _c !== void 0 ? _c : this.color;\r\n this.strokeColor = (_d = options === null || options === void 0 ? void 0 : options.strokeColor) !== null && _d !== void 0 ? _d : this.strokeColor;\r\n this.lineDash = (_e = options === null || options === void 0 ? void 0 : options.lineDash) !== null && _e !== void 0 ? _e : this.lineDash;\r\n this.lineWidth = (_f = options === null || options === void 0 ? void 0 : options.lineWidth) !== null && _f !== void 0 ? _f : this.lineWidth;\r\n this.filtering = (_g = options === null || options === void 0 ? void 0 : options.filtering) !== null && _g !== void 0 ? _g : this.filtering;\r\n // Font specific properties\r\n this.family = (_h = options === null || options === void 0 ? void 0 : options.family) !== null && _h !== void 0 ? _h : this.family;\r\n this.style = (_j = options === null || options === void 0 ? void 0 : options.style) !== null && _j !== void 0 ? _j : this.style;\r\n this.bold = (_k = options === null || options === void 0 ? void 0 : options.bold) !== null && _k !== void 0 ? _k : this.bold;\r\n this.size = (_l = options === null || options === void 0 ? void 0 : options.size) !== null && _l !== void 0 ? _l : this.size;\r\n this.unit = (_m = options === null || options === void 0 ? void 0 : options.unit) !== null && _m !== void 0 ? _m : this.unit;\r\n this.textAlign = (_o = options === null || options === void 0 ? void 0 : options.textAlign) !== null && _o !== void 0 ? _o : this.textAlign;\r\n this.baseAlign = (_p = options === null || options === void 0 ? void 0 : options.baseAlign) !== null && _p !== void 0 ? _p : this.baseAlign;\r\n this.direction = (_q = options === null || options === void 0 ? void 0 : options.direction) !== null && _q !== void 0 ? _q : this.direction;\r\n this.quality = (_r = options === null || options === void 0 ? void 0 : options.quality) !== null && _r !== void 0 ? _r : this.quality;\r\n if (options === null || options === void 0 ? void 0 : options.shadow) {\r\n this.shadow = {};\r\n this.shadow.blur = (_s = options.shadow.blur) !== null && _s !== void 0 ? _s : this.shadow.blur;\r\n this.shadow.offset = (_t = options.shadow.offset) !== null && _t !== void 0 ? _t : this.shadow.offset;\r\n this.shadow.color = (_u = options.shadow.color) !== null && _u !== void 0 ? _u : this.shadow.color;\r\n }\r\n }\r\n clone() {\r\n return new Font({\r\n ...this.cloneGraphicOptions(),\r\n size: this.size,\r\n unit: this.unit,\r\n family: this.family,\r\n style: this.style,\r\n bold: this.bold,\r\n textAlign: this.textAlign,\r\n baseAlign: this.baseAlign,\r\n direction: this.direction,\r\n shadow: this.shadow\r\n ? {\r\n blur: this.shadow.blur,\r\n offset: this.shadow.offset,\r\n color: this.shadow.color\r\n }\r\n : null\r\n });\r\n }\r\n get fontString() {\r\n return `${this.style} ${this.bold ? 'bold' : ''} ${this.size}${this.unit} ${this.family}`;\r\n }\r\n get localBounds() {\r\n return this._textBounds;\r\n }\r\n _drawImage(_ex, _x, _y) {\r\n // TODO weird vestigial drawimage\r\n }\r\n _rotate(ex) {\r\n var _a;\r\n // TODO this needs to change depending on the bounding box...\r\n const origin = (_a = this.origin) !== null && _a !== void 0 ? _a : this._textBounds.center;\r\n ex.translate(origin.x, origin.y);\r\n ex.rotate(this.rotation);\r\n ex.translate(-origin.x, -origin.y);\r\n }\r\n _flip(ex) {\r\n if (this.flipHorizontal) {\r\n ex.translate(this._textBounds.width / this.scale.x, 0);\r\n ex.scale(-1, 1);\r\n }\r\n if (this.flipVertical) {\r\n ex.translate(0, -this._textBounds.height / 2 / this.scale.y);\r\n ex.scale(1, -1);\r\n }\r\n }\r\n measureTextWithoutCache(text, maxWidth) {\r\n return this._textMeasurement.measureText(text, maxWidth);\r\n }\r\n /**\r\n * Returns a BoundingBox that is the total size of the text including multiple lines\r\n *\r\n * Does not include any padding or adjustment\r\n * @param text\r\n * @returns BoundingBox\r\n */\r\n measureText(text, maxWidth) {\r\n return FontCache.measureText(text, this, maxWidth);\r\n }\r\n _postDraw(ex) {\r\n ex.restore();\r\n }\r\n render(ex, text, colorOverride, x, y, maxWidth) {\r\n const textInstance = FontCache.getTextInstance(text, this, colorOverride);\r\n // Apply affine transformations\r\n this._textBounds = textInstance.dimensions;\r\n this._preDraw(ex, x, y);\r\n textInstance.render(ex, x, y, maxWidth);\r\n this._postDraw(ex);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Text.ts\n\r\n\r\n\r\n/**\r\n * Represent Text graphics in excalibur\r\n *\r\n * Useful for in game labels, ui, or overlays\r\n */\r\nclass Text extends Graphic {\r\n constructor(options) {\r\n var _a, _b;\r\n super(options);\r\n this._text = '';\r\n this._textWidth = 0;\r\n this._textHeight = 0;\r\n // This order is important font, color, then text\r\n this.font = (_a = options.font) !== null && _a !== void 0 ? _a : new Font();\r\n this.color = (_b = options.color) !== null && _b !== void 0 ? _b : this.color;\r\n this.text = options.text;\r\n this.maxWidth = options.maxWidth;\r\n }\r\n clone() {\r\n var _a, _b;\r\n return new Text({\r\n text: this.text.slice(),\r\n color: (_b = (_a = this.color) === null || _a === void 0 ? void 0 : _a.clone()) !== null && _b !== void 0 ? _b : Color.Black,\r\n font: this.font.clone(),\r\n maxWidth: this.maxWidth\r\n });\r\n }\r\n get text() {\r\n return this._text;\r\n }\r\n set text(value) {\r\n this._text = value;\r\n this._calculateDimension();\r\n }\r\n get font() {\r\n return this._font;\r\n }\r\n set font(font) {\r\n this._font = font;\r\n }\r\n get width() {\r\n if (this._textWidth === 0) {\r\n this._calculateDimension();\r\n }\r\n return this._textWidth * this.scale.x;\r\n }\r\n get height() {\r\n if (this._textHeight === 0) {\r\n this._calculateDimension();\r\n }\r\n return this._textHeight * this.scale.y;\r\n }\r\n _calculateDimension() {\r\n const { width, height } = this.font.measureText(this._text, this.maxWidth);\r\n this._textWidth = width;\r\n this._textHeight = height;\r\n }\r\n get localBounds() {\r\n return this.font.measureText(this._text, this.maxWidth).scale(this.scale);\r\n }\r\n _rotate(_ex) {\r\n // None this is delegated to font\r\n // This override erases the default behavior\r\n }\r\n _flip(_ex) {\r\n // None this is delegated to font\r\n // This override erases the default behavior\r\n }\r\n _preDraw(ex, x, y) {\r\n if (this.isStale() || this.font.isStale()) {\r\n this.font.flipHorizontal = this.flipHorizontal;\r\n this.font.flipVertical = this.flipVertical;\r\n this.font.rotation = this.rotation;\r\n this.font.origin = this.origin;\r\n this.font.opacity = this.opacity;\r\n }\r\n this.font.tint = this.tint;\r\n super._preDraw(ex, x, y);\r\n }\r\n _drawImage(ex, x, y) {\r\n var _a;\r\n let color = Color.Black;\r\n if (this.font instanceof Font) {\r\n color = (_a = this.color) !== null && _a !== void 0 ? _a : this.font.color;\r\n }\r\n const { width, height } = this.font.measureText(this._text, this.maxWidth);\r\n this._textWidth = width;\r\n this._textHeight = height;\r\n this.font.render(ex, this._text, color, x, y, this.maxWidth);\r\n if (this.font.showDebug) {\r\n ex.debug.drawRect(x - width, y - height, width * 2, height * 2);\r\n if (this.maxWidth != null) {\r\n ex.debug.drawRect(x, y, this.maxWidth, this.height, {\r\n color: Color.Yellow\r\n });\r\n }\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actor.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Type guard for checking if something is an Actor\r\n * @param x\r\n */\r\nfunction isActor(x) {\r\n return x instanceof Actor;\r\n}\r\nconst ActorEvents = {\r\n CollisionStart: 'collisionstart',\r\n CollisionEnd: 'collisionend',\r\n PreCollision: 'precollision',\r\n PostCollision: 'postcollision',\r\n Kill: 'kill',\r\n PreKill: 'prekill',\r\n PostKill: 'postkill',\r\n PreDraw: 'predraw',\r\n PostDraw: 'postdraw',\r\n PreDebugDraw: 'predebugdraw',\r\n PostDebugDraw: 'postdebugdraw',\r\n PointerUp: 'pointerup',\r\n PointerDown: 'pointerdown',\r\n PointerEnter: 'pointerenter',\r\n PointerLeave: 'pointerleave',\r\n PointerMove: 'pointermove',\r\n PointerCancel: 'pointercancel',\r\n Wheel: 'pointerwheel',\r\n PointerDrag: 'pointerdragstart',\r\n PointerDragEnd: 'pointerdragend',\r\n PointerDragEnter: 'pointerdragenter',\r\n PointerDragLeave: 'pointerdragleave',\r\n PointerDragMove: 'pointerdragmove',\r\n EnterViewPort: 'enterviewport',\r\n ExitViewPort: 'exitviewport'\r\n};\r\n/**\r\n * The most important primitive in Excalibur is an `Actor`. Anything that\r\n * can move on the screen, collide with another `Actor`, respond to events,\r\n * or interact with the current scene, must be an actor. An `Actor` **must**\r\n * be part of a [[Scene]] for it to be drawn to the screen.\r\n */\r\nclass Actor extends Entity {\r\n /**\r\n * The physics body the is associated with this actor. The body is the container for all physical properties, like position, velocity,\r\n * acceleration, mass, inertia, etc.\r\n */\r\n get body() {\r\n return this.get(BodyComponent);\r\n }\r\n /**\r\n * Access the Actor's built in [[TransformComponent]]\r\n */\r\n get transform() {\r\n return this.get(TransformComponent);\r\n }\r\n /**\r\n * Access the Actor's built in [[MotionComponent]]\r\n */\r\n get motion() {\r\n return this.get(MotionComponent);\r\n }\r\n /**\r\n * Access to the Actor's built in [[GraphicsComponent]]\r\n */\r\n get graphics() {\r\n return this.get(GraphicsComponent);\r\n }\r\n /**\r\n * Access to the Actor's built in [[ColliderComponent]]\r\n */\r\n get collider() {\r\n return this.get(ColliderComponent);\r\n }\r\n /**\r\n * Access to the Actor's built in [[PointerComponent]] config\r\n */\r\n get pointer() {\r\n return this.get(PointerComponent);\r\n }\r\n /**\r\n * Useful for quickly scripting actor behavior, like moving to a place, patrolling back and forth, blinking, etc.\r\n *\r\n * Access to the Actor's built in [[ActionsComponent]] which forwards to the\r\n * [[ActionContext|Action context]] of the actor.\r\n */\r\n get actions() {\r\n return this.get(ActionsComponent);\r\n }\r\n /**\r\n * Gets the position vector of the actor in pixels\r\n */\r\n get pos() {\r\n return this.transform.pos;\r\n }\r\n /**\r\n * Sets the position vector of the actor in pixels\r\n */\r\n set pos(thePos) {\r\n this.transform.pos = thePos.clone();\r\n }\r\n /**\r\n * Gets the position vector of the actor from the last frame\r\n */\r\n get oldPos() {\r\n return this.body.oldPos;\r\n }\r\n /**\r\n * Sets the position vector of the actor in the last frame\r\n */\r\n set oldPos(thePos) {\r\n this.body.oldPos.setTo(thePos.x, thePos.y);\r\n }\r\n /**\r\n * Gets the velocity vector of the actor in pixels/sec\r\n */\r\n get vel() {\r\n return this.motion.vel;\r\n }\r\n /**\r\n * Sets the velocity vector of the actor in pixels/sec\r\n */\r\n set vel(theVel) {\r\n this.motion.vel = theVel.clone();\r\n }\r\n /**\r\n * Gets the velocity vector of the actor from the last frame\r\n */\r\n get oldVel() {\r\n return this.body.oldVel;\r\n }\r\n /**\r\n * Sets the velocity vector of the actor from the last frame\r\n */\r\n set oldVel(theVel) {\r\n this.body.oldVel.setTo(theVel.x, theVel.y);\r\n }\r\n /**\r\n * Gets the acceleration vector of the actor in pixels/second/second. An acceleration pointing down such as (0, 100) may be\r\n * useful to simulate a gravitational effect.\r\n */\r\n get acc() {\r\n return this.motion.acc;\r\n }\r\n /**\r\n * Sets the acceleration vector of teh actor in pixels/second/second\r\n */\r\n set acc(theAcc) {\r\n this.motion.acc = theAcc.clone();\r\n }\r\n /**\r\n * Sets the acceleration of the actor from the last frame. This does not include the global acc [[Physics.acc]].\r\n */\r\n set oldAcc(theAcc) {\r\n this.body.oldAcc.setTo(theAcc.x, theAcc.y);\r\n }\r\n /**\r\n * Gets the acceleration of the actor from the last frame. This does not include the global acc [[Physics.acc]].\r\n */\r\n get oldAcc() {\r\n return this.body.oldAcc;\r\n }\r\n /**\r\n * Gets the rotation of the actor in radians. 1 radian = 180/PI Degrees.\r\n */\r\n get rotation() {\r\n return this.transform.rotation;\r\n }\r\n /**\r\n * Sets the rotation of the actor in radians. 1 radian = 180/PI Degrees.\r\n */\r\n set rotation(theAngle) {\r\n this.transform.rotation = theAngle;\r\n }\r\n /**\r\n * Gets the rotational velocity of the actor in radians/second\r\n */\r\n get angularVelocity() {\r\n return this.motion.angularVelocity;\r\n }\r\n /**\r\n * Sets the rotational velocity of the actor in radians/sec\r\n */\r\n set angularVelocity(angularVelocity) {\r\n this.motion.angularVelocity = angularVelocity;\r\n }\r\n get scale() {\r\n return this.get(TransformComponent).scale;\r\n }\r\n set scale(scale) {\r\n this.get(TransformComponent).scale = scale;\r\n }\r\n get anchor() {\r\n return this._anchor;\r\n }\r\n set anchor(vec) {\r\n this._anchor = watch(vec, (v) => this._handleAnchorChange(v));\r\n this._handleAnchorChange(vec);\r\n }\r\n _handleAnchorChange(v) {\r\n if (this.graphics) {\r\n this.graphics.anchor = v;\r\n }\r\n }\r\n /**\r\n * Indicates whether the actor is physically in the viewport\r\n */\r\n get isOffScreen() {\r\n return this.hasTag('ex.offscreen');\r\n }\r\n get draggable() {\r\n return this._draggable;\r\n }\r\n set draggable(isDraggable) {\r\n if (isDraggable) {\r\n if (isDraggable && !this._draggable) {\r\n this.events.on('pointerdragstart', this._pointerDragStartHandler);\r\n this.events.on('pointerdragend', this._pointerDragEndHandler);\r\n this.events.on('pointerdragmove', this._pointerDragMoveHandler);\r\n this.events.on('pointerdragleave', this._pointerDragLeaveHandler);\r\n }\r\n else if (!isDraggable && this._draggable) {\r\n this.events.off('pointerdragstart', this._pointerDragStartHandler);\r\n this.events.off('pointerdragend', this._pointerDragEndHandler);\r\n this.events.off('pointerdragmove', this._pointerDragMoveHandler);\r\n this.events.off('pointerdragleave', this._pointerDragLeaveHandler);\r\n }\r\n this._draggable = isDraggable;\r\n }\r\n }\r\n /**\r\n * Sets the color of the actor's current graphic\r\n */\r\n get color() {\r\n return this._color;\r\n }\r\n set color(v) {\r\n var _a;\r\n this._color = v.clone();\r\n const defaultLayer = this.graphics.layers.default;\r\n const currentGraphic = (_a = defaultLayer.graphics[0]) === null || _a === void 0 ? void 0 : _a.graphic;\r\n if (currentGraphic instanceof Raster || currentGraphic instanceof Text) {\r\n currentGraphic.color = this._color;\r\n }\r\n }\r\n // #endregion\r\n /**\r\n *\r\n * @param config\r\n */\r\n constructor(config) {\r\n super();\r\n this.events = new EventEmitter();\r\n /**\r\n * The anchor to apply all actor related transformations like rotation,\r\n * translation, and scaling. By default the anchor is in the center of\r\n * the actor. By default it is set to the center of the actor (.5, .5)\r\n *\r\n * An anchor of (.5, .5) will ensure that drawings are centered.\r\n *\r\n * Use `anchor.setTo` to set the anchor to a different point using\r\n * values between 0 and 1. For example, anchoring to the top-left would be\r\n * `Actor.anchor.setTo(0, 0)` and top-right would be `Actor.anchor.setTo(0, 1)`.\r\n */\r\n this._anchor = watch(Vector.Half, (v) => this._handleAnchorChange(v));\r\n /**\r\n * Convenience reference to the global logger\r\n */\r\n this.logger = Logger.getInstance();\r\n /**\r\n * Draggable helper\r\n */\r\n this._draggable = false;\r\n this._dragging = false;\r\n this._pointerDragStartHandler = () => {\r\n this._dragging = true;\r\n };\r\n this._pointerDragEndHandler = () => {\r\n this._dragging = false;\r\n };\r\n this._pointerDragMoveHandler = (pe) => {\r\n if (this._dragging) {\r\n this.pos = pe.worldPos;\r\n }\r\n };\r\n this._pointerDragLeaveHandler = (pe) => {\r\n if (this._dragging) {\r\n this.pos = pe.worldPos;\r\n }\r\n };\r\n const { name, x, y, pos, coordPlane, scale, width, height, radius, collider, vel, acc, rotation, angularVelocity, z, color, visible, anchor, collisionType, collisionGroup } = {\r\n ...config\r\n };\r\n this._setName(name);\r\n this.anchor = anchor !== null && anchor !== void 0 ? anchor : Actor.defaults.anchor.clone();\r\n const tx = new TransformComponent();\r\n this.addComponent(tx);\r\n this.pos = pos !== null && pos !== void 0 ? pos : vec(x !== null && x !== void 0 ? x : 0, y !== null && y !== void 0 ? y : 0);\r\n this.rotation = rotation !== null && rotation !== void 0 ? rotation : 0;\r\n this.scale = scale !== null && scale !== void 0 ? scale : vec(1, 1);\r\n this.z = z !== null && z !== void 0 ? z : 0;\r\n tx.coordPlane = coordPlane !== null && coordPlane !== void 0 ? coordPlane : CoordPlane.World;\r\n this.addComponent(new PointerComponent);\r\n this.addComponent(new GraphicsComponent({\r\n anchor: this.anchor\r\n }));\r\n this.addComponent(new MotionComponent());\r\n this.vel = vel !== null && vel !== void 0 ? vel : Vector.Zero;\r\n this.acc = acc !== null && acc !== void 0 ? acc : Vector.Zero;\r\n this.angularVelocity = angularVelocity !== null && angularVelocity !== void 0 ? angularVelocity : 0;\r\n this.addComponent(new ActionsComponent());\r\n this.addComponent(new BodyComponent());\r\n this.body.collisionType = collisionType !== null && collisionType !== void 0 ? collisionType : CollisionType.Passive;\r\n if (collisionGroup) {\r\n this.body.group = collisionGroup;\r\n }\r\n if (collider) {\r\n this.addComponent(new ColliderComponent(collider));\r\n }\r\n else if (radius) {\r\n this.addComponent(new ColliderComponent(Shape.Circle(radius)));\r\n }\r\n else {\r\n if (width > 0 && height > 0) {\r\n this.addComponent(new ColliderComponent(Shape.Box(width, height, this.anchor)));\r\n }\r\n else {\r\n this.addComponent(new ColliderComponent()); // no collider\r\n }\r\n }\r\n this.graphics.visible = visible !== null && visible !== void 0 ? visible : true;\r\n if (color) {\r\n this.color = color;\r\n if (width && height) {\r\n this.graphics.add(new Rectangle({\r\n color: color,\r\n width,\r\n height\r\n }));\r\n }\r\n else if (radius) {\r\n this.graphics.add(new Circle({\r\n color: color,\r\n radius\r\n }));\r\n }\r\n }\r\n }\r\n clone() {\r\n const clone = new Actor({\r\n color: this.color.clone(),\r\n anchor: this.anchor.clone()\r\n });\r\n clone.clearComponents();\r\n clone.processComponentRemoval();\r\n // Clone the current actors components\r\n const components = this.getComponents();\r\n for (const c of components) {\r\n clone.addComponent(c.clone(), true);\r\n }\r\n return clone;\r\n }\r\n /**\r\n * `onInitialize` is called before the first update of the actor. This method is meant to be\r\n * overridden. This is where initialization of child actors should take place.\r\n *\r\n * Synonymous with the event handler `.on('initialize', (evt) => {...})`\r\n */\r\n onInitialize(_engine) {\r\n // Override me\r\n }\r\n /**\r\n * Initializes this actor and all it's child actors, meant to be called by the Scene before first update not by users of Excalibur.\r\n *\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * @internal\r\n */\r\n _initialize(engine) {\r\n super._initialize(engine);\r\n for (const child of this.children) {\r\n child._initialize(engine);\r\n }\r\n }\r\n emit(eventName, event) {\r\n this.events.emit(eventName, event);\r\n }\r\n on(eventName, handler) {\r\n return this.events.on(eventName, handler);\r\n }\r\n once(eventName, handler) {\r\n return this.events.once(eventName, handler);\r\n }\r\n off(eventName, handler) {\r\n this.events.off(eventName, handler);\r\n }\r\n // #endregion\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Internal _prekill handler for [[onPreKill]] lifecycle event\r\n * @internal\r\n */\r\n _prekill(_scene) {\r\n this.events.emit('prekill', new PreKillEvent(this));\r\n this.onPreKill(_scene);\r\n }\r\n /**\r\n * Safe to override onPreKill lifecycle event handler. Synonymous with `.on('prekill', (evt) =>{...})`\r\n *\r\n * `onPreKill` is called directly before an actor is killed and removed from its current [[Scene]].\r\n */\r\n onPreKill(_scene) {\r\n // Override me\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Internal _prekill handler for [[onPostKill]] lifecycle event\r\n * @internal\r\n */\r\n _postkill(_scene) {\r\n this.events.emit('postkill', new PostKillEvent(this));\r\n this.onPostKill(_scene);\r\n }\r\n /**\r\n * Safe to override onPostKill lifecycle event handler. Synonymous with `.on('postkill', (evt) => {...})`\r\n *\r\n * `onPostKill` is called directly after an actor is killed and remove from its current [[Scene]].\r\n */\r\n onPostKill(_scene) {\r\n // Override me\r\n }\r\n /**\r\n * If the current actor is a member of the scene, this will remove\r\n * it from the scene graph. It will no longer be drawn or updated.\r\n */\r\n kill() {\r\n if (this.scene) {\r\n this._prekill(this.scene);\r\n this.events.emit('kill', new KillEvent(this));\r\n super.kill();\r\n this._postkill(this.scene);\r\n }\r\n else {\r\n this.logger.warn(`Cannot kill actor named \"${this.name}\", it was never added to the Scene`);\r\n }\r\n }\r\n /**\r\n * If the current actor is killed, it will now not be killed.\r\n */\r\n unkill() {\r\n this.active = true;\r\n }\r\n /**\r\n * Indicates wether the actor has been killed.\r\n */\r\n isKilled() {\r\n return !this.active;\r\n }\r\n /**\r\n * Gets the z-index of an actor. The z-index determines the relative order an actor is drawn in.\r\n * Actors with a higher z-index are drawn on top of actors with a lower z-index\r\n */\r\n get z() {\r\n return this.get(TransformComponent).z;\r\n }\r\n /**\r\n * Sets the z-index of an actor and updates it in the drawing list for the scene.\r\n * The z-index determines the relative order an actor is drawn in.\r\n * Actors with a higher z-index are drawn on top of actors with a lower z-index\r\n * @param newZ new z-index to assign\r\n */\r\n set z(newZ) {\r\n this.get(TransformComponent).z = newZ;\r\n }\r\n /**\r\n * Get the center point of an actor (global position)\r\n */\r\n get center() {\r\n const globalPos = this.getGlobalPos();\r\n return new Vector(globalPos.x + this.width / 2 - this.anchor.x * this.width, globalPos.y + this.height / 2 - this.anchor.y * this.height);\r\n }\r\n /**\r\n * Get the local center point of an actor\r\n */\r\n get localCenter() {\r\n return new Vector(this.pos.x + this.width / 2 - this.anchor.x * this.width, this.pos.y + this.height / 2 - this.anchor.y * this.height);\r\n }\r\n get width() {\r\n return this.collider.localBounds.width * this.getGlobalScale().x;\r\n }\r\n get height() {\r\n return this.collider.localBounds.height * this.getGlobalScale().y;\r\n }\r\n /**\r\n * Gets this actor's rotation taking into account any parent relationships\r\n *\r\n * @returns Rotation angle in radians\r\n */\r\n getGlobalRotation() {\r\n return this.get(TransformComponent).globalRotation;\r\n }\r\n /**\r\n * Gets an actor's world position taking into account parent relationships, scaling, rotation, and translation\r\n *\r\n * @returns Position in world coordinates\r\n */\r\n getGlobalPos() {\r\n return this.get(TransformComponent).globalPos;\r\n }\r\n /**\r\n * Gets the global scale of the Actor\r\n */\r\n getGlobalScale() {\r\n return this.get(TransformComponent).globalScale;\r\n }\r\n // #region Collision\r\n /**\r\n * Tests whether the x/y specified are contained in the actor\r\n * @param x X coordinate to test (in world coordinates)\r\n * @param y Y coordinate to test (in world coordinates)\r\n * @param recurse checks whether the x/y are contained in any child actors (if they exist).\r\n */\r\n contains(x, y, recurse = false) {\r\n const point = vec(x, y);\r\n const collider = this.get(ColliderComponent);\r\n collider.update();\r\n const geom = collider.get();\r\n if (!geom) {\r\n return false;\r\n }\r\n const containment = geom.contains(point);\r\n if (recurse) {\r\n return (containment ||\r\n this.children.some((child) => {\r\n return child.contains(x, y, true);\r\n }));\r\n }\r\n return containment;\r\n }\r\n /**\r\n * Returns true if the two actor.collider's surfaces are less than or equal to the distance specified from each other\r\n * @param actor Actor to test\r\n * @param distance Distance in pixels to test\r\n */\r\n within(actor, distance) {\r\n const collider = this.get(ColliderComponent);\r\n const otherCollider = actor.get(ColliderComponent);\r\n const me = collider.get();\r\n const other = otherCollider.get();\r\n if (me && other) {\r\n return me.getClosestLineBetween(other).getLength() <= distance;\r\n }\r\n return false;\r\n }\r\n // #endregion\r\n // #region Update\r\n /**\r\n * Called by the Engine, updates the state of the actor\r\n * @internal\r\n * @param engine The reference to the current game engine\r\n * @param delta The time elapsed since the last update in milliseconds\r\n */\r\n update(engine, delta) {\r\n this._initialize(engine);\r\n this._preupdate(engine, delta);\r\n this._postupdate(engine, delta);\r\n }\r\n /**\r\n * Safe to override onPreUpdate lifecycle event handler. Synonymous with `.on('preupdate', (evt) =>{...})`\r\n *\r\n * `onPreUpdate` is called directly before an actor is updated.\r\n */\r\n onPreUpdate(_engine, _delta) {\r\n // Override me\r\n }\r\n /**\r\n * Safe to override onPostUpdate lifecycle event handler. Synonymous with `.on('postupdate', (evt) =>{...})`\r\n *\r\n * `onPostUpdate` is called directly after an actor is updated.\r\n */\r\n onPostUpdate(_engine, _delta) {\r\n // Override me\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Internal _preupdate handler for [[onPreUpdate]] lifecycle event\r\n * @internal\r\n */\r\n _preupdate(engine, delta) {\r\n this.events.emit('preupdate', new PreUpdateEvent(engine, delta, this));\r\n this.onPreUpdate(engine, delta);\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Internal _preupdate handler for [[onPostUpdate]] lifecycle event\r\n * @internal\r\n */\r\n _postupdate(engine, delta) {\r\n this.events.emit('postupdate', new PostUpdateEvent(engine, delta, this));\r\n this.onPostUpdate(engine, delta);\r\n }\r\n}\r\n// #region Properties\r\n/**\r\n * Set defaults for all Actors\r\n */\r\nActor.defaults = {\r\n anchor: Vector.Half\r\n};\r\n\n;// CONCATENATED MODULE: ./ScreenElement.ts\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Type guard to detect a screen element\r\n */\r\nfunction isScreenElement(actor) {\r\n return actor instanceof ScreenElement;\r\n}\r\n/**\r\n * Helper [[Actor]] primitive for drawing UI's, optimized for UI drawing. Does\r\n * not participate in collisions. Drawn on top of all other actors.\r\n */\r\nclass ScreenElement extends Actor {\r\n constructor(config) {\r\n var _a, _b;\r\n super({ ...config });\r\n this.get(TransformComponent).coordPlane = CoordPlane.Screen;\r\n this.anchor = (_a = config === null || config === void 0 ? void 0 : config.anchor) !== null && _a !== void 0 ? _a : vec(0, 0);\r\n this.body.collisionType = (_b = config === null || config === void 0 ? void 0 : config.collisionType) !== null && _b !== void 0 ? _b : CollisionType.PreventCollision;\r\n this.pointer.useGraphicsBounds = true;\r\n this.pointer.useColliderShape = false;\r\n if (!(config === null || config === void 0 ? void 0 : config.collider) &&\r\n (config === null || config === void 0 ? void 0 : config.width) > 0 &&\r\n (config === null || config === void 0 ? void 0 : config.height) > 0) {\r\n this.collider.useBoxCollider(this.width, this.height, this.anchor);\r\n }\r\n }\r\n _initialize(engine) {\r\n this._engine = engine;\r\n super._initialize(engine);\r\n }\r\n contains(x, y, useWorld = true) {\r\n if (useWorld) {\r\n return super.contains(x, y);\r\n }\r\n const coords = this._engine.worldToScreenCoordinates(new Vector(x, y));\r\n return super.contains(coords.x, coords.y);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Timer.ts\n\r\n\r\n/**\r\n * The Excalibur timer hooks into the internal timer and fires callbacks,\r\n * after a certain interval, optionally repeating.\r\n */\r\nclass Timer {\r\n get complete() {\r\n return this._complete;\r\n }\r\n constructor(fcn, interval, repeats, numberOfRepeats, randomRange, random) {\r\n this._logger = Logger.getInstance();\r\n this.id = 0;\r\n this._elapsedTime = 0;\r\n this._totalTimeAlive = 0;\r\n this._running = false;\r\n this._numberOfTicks = 0;\r\n this.interval = 10;\r\n this.repeats = false;\r\n this.maxNumberOfRepeats = -1;\r\n this.randomRange = [0, 0];\r\n this._baseInterval = 10;\r\n this._generateRandomInterval = () => {\r\n return this._baseInterval + this.random.integer(this.randomRange[0], this.randomRange[1]);\r\n };\r\n this._complete = false;\r\n this.scene = null;\r\n if (typeof fcn !== 'function') {\r\n const options = fcn;\r\n fcn = options.fcn;\r\n interval = options.interval;\r\n repeats = options.repeats;\r\n numberOfRepeats = options.numberOfRepeats;\r\n randomRange = options.randomRange;\r\n random = options.random;\r\n }\r\n if (!!numberOfRepeats && numberOfRepeats >= 0) {\r\n this.maxNumberOfRepeats = numberOfRepeats;\r\n if (!repeats) {\r\n throw new Error('repeats must be set to true if numberOfRepeats is set');\r\n }\r\n }\r\n this.id = Timer._MAX_ID++;\r\n this._callbacks = [];\r\n this._baseInterval = this.interval = interval;\r\n if (!!randomRange) {\r\n if (randomRange[0] > randomRange[1]) {\r\n throw new Error('min value must be lower than max value for range');\r\n }\r\n //We use the instance of ex.Random to generate the range\r\n this.random = random !== null && random !== void 0 ? random : new Random();\r\n this.randomRange = randomRange;\r\n this.interval = this._generateRandomInterval();\r\n this.on(() => {\r\n this.interval = this._generateRandomInterval();\r\n });\r\n }\r\n ;\r\n this.repeats = repeats || this.repeats;\r\n if (fcn) {\r\n this.on(fcn);\r\n }\r\n }\r\n /**\r\n * Adds a new callback to be fired after the interval is complete\r\n * @param fcn The callback to be added to the callback list, to be fired after the interval is complete.\r\n */\r\n on(fcn) {\r\n this._callbacks.push(fcn);\r\n }\r\n /**\r\n * Removes a callback from the callback list to be fired after the interval is complete.\r\n * @param fcn The callback to be removed from the callback list, to be fired after the interval is complete.\r\n */\r\n off(fcn) {\r\n const index = this._callbacks.indexOf(fcn);\r\n this._callbacks.splice(index, 1);\r\n }\r\n /**\r\n * Updates the timer after a certain number of milliseconds have elapsed. This is used internally by the engine.\r\n * @param delta Number of elapsed milliseconds since the last update.\r\n */\r\n update(delta) {\r\n if (this._running) {\r\n this._totalTimeAlive += delta;\r\n this._elapsedTime += delta;\r\n if (this.maxNumberOfRepeats > -1 && this._numberOfTicks >= this.maxNumberOfRepeats) {\r\n this._complete = true;\r\n this._running = false;\r\n this._elapsedTime = 0;\r\n }\r\n if (!this.complete && this._elapsedTime >= this.interval) {\r\n this._callbacks.forEach((c) => {\r\n c.call(this);\r\n });\r\n this._numberOfTicks++;\r\n if (this.repeats) {\r\n this._elapsedTime = 0;\r\n }\r\n else {\r\n this._complete = true;\r\n this._running = false;\r\n this._elapsedTime = 0;\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Resets the timer so that it can be reused, and optionally reconfigure the timers interval.\r\n *\r\n * Warning** you may need to call `timer.start()` again if the timer had completed\r\n * @param newInterval If specified, sets a new non-negative interval in milliseconds to refire the callback\r\n * @param newNumberOfRepeats If specified, sets a new non-negative upper limit to the number of time this timer executes\r\n */\r\n reset(newInterval, newNumberOfRepeats) {\r\n if (!!newInterval && newInterval >= 0) {\r\n this._baseInterval = this.interval = newInterval;\r\n }\r\n if (!!this.maxNumberOfRepeats && this.maxNumberOfRepeats >= 0) {\r\n this.maxNumberOfRepeats = newNumberOfRepeats;\r\n if (!this.repeats) {\r\n throw new Error('repeats must be set to true if numberOfRepeats is set');\r\n }\r\n }\r\n this._complete = false;\r\n this._elapsedTime = 0;\r\n this._numberOfTicks = 0;\r\n }\r\n get timesRepeated() {\r\n return this._numberOfTicks;\r\n }\r\n getTimeRunning() {\r\n return this._totalTimeAlive;\r\n }\r\n /**\r\n * @returns milliseconds until the next action callback, if complete will return 0\r\n */\r\n get timeToNextAction() {\r\n if (this.complete) {\r\n return 0;\r\n }\r\n return this.interval - this._elapsedTime;\r\n }\r\n /**\r\n * @returns milliseconds elapsed toward the next action\r\n */\r\n get timeElapsedTowardNextAction() {\r\n return this._elapsedTime;\r\n }\r\n get isRunning() {\r\n return this._running;\r\n }\r\n /**\r\n * Pauses the timer, time will no longer increment towards the next call\r\n */\r\n pause() {\r\n this._running = false;\r\n return this;\r\n }\r\n /**\r\n * Resumes the timer, time will now increment towards the next call.\r\n */\r\n resume() {\r\n this._running = true;\r\n return this;\r\n }\r\n /**\r\n * Starts the timer, if the timer was complete it will restart the timer and reset the elapsed time counter\r\n */\r\n start() {\r\n if (!this.scene) {\r\n this._logger.warn('Cannot start a timer not part of a scene, timer wont start until added');\r\n }\r\n this._running = true;\r\n if (this.complete) {\r\n this._complete = false;\r\n this._elapsedTime = 0;\r\n this._numberOfTicks = 0;\r\n }\r\n return this;\r\n }\r\n /**\r\n * Stops the timer and resets the elapsed time counter towards the next action invocation\r\n */\r\n stop() {\r\n this._running = false;\r\n this._elapsedTime = 0;\r\n this._numberOfTicks = 0;\r\n return this;\r\n }\r\n /**\r\n * Cancels the timer, preventing any further executions.\r\n */\r\n cancel() {\r\n this.pause();\r\n if (this.scene) {\r\n this.scene.cancelTimer(this);\r\n }\r\n }\r\n}\r\nTimer._MAX_ID = 0;\r\n\n;// CONCATENATED MODULE: ./Graphics/ParallaxComponent.ts\n\r\n\r\nclass ParallaxComponent extends Component {\r\n constructor(parallaxFactor) {\r\n super();\r\n this.type = 'ex.parallax';\r\n this.parallaxFactor = vec(1.0, 1.0);\r\n this.parallaxFactor = parallaxFactor !== null && parallaxFactor !== void 0 ? parallaxFactor : this.parallaxFactor;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/DebugGraphicsComponent.ts\n\r\n/**\r\n * Provide arbitrary drawing for the purposes of debugging your game\r\n *\r\n * Will only show when the Engine is set to debug mode [[Engine.showDebug]] or [[Engine.toggleDebug]]\r\n *\r\n */\r\nclass DebugGraphicsComponent extends Component {\r\n constructor(draw, useTransform = true) {\r\n super();\r\n this.draw = draw;\r\n this.useTransform = useTransform;\r\n this.type = 'ex.debuggraphics';\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./TileMap/TileMap.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst TileMapEvents = {\r\n PreUpdate: 'preupdate',\r\n PostUpdate: 'postupdate',\r\n PreDraw: 'predraw',\r\n PostDraw: 'postdraw'\r\n};\r\n/**\r\n * The TileMap provides a mechanism for doing flat 2D tiles rendered in a grid.\r\n *\r\n * TileMaps are useful for top down or side scrolling grid oriented games.\r\n */\r\nclass TileMap extends Entity {\r\n flagCollidersDirty() {\r\n this._collidersDirty = true;\r\n }\r\n flagTilesDirty() {\r\n for (let i = 0; i < this.tiles.length; i++) {\r\n if (this.tiles[i]) {\r\n this.tiles[i].flagDirty();\r\n }\r\n }\r\n }\r\n get x() {\r\n var _a;\r\n return (_a = this._transform.pos.x) !== null && _a !== void 0 ? _a : 0;\r\n }\r\n set x(val) {\r\n var _a;\r\n if ((_a = this._transform) === null || _a === void 0 ? void 0 : _a.pos) {\r\n this.get(TransformComponent).pos = vec(val, this.y);\r\n }\r\n }\r\n get y() {\r\n var _a, _b;\r\n return (_b = (_a = this._transform) === null || _a === void 0 ? void 0 : _a.pos.y) !== null && _b !== void 0 ? _b : 0;\r\n }\r\n set y(val) {\r\n var _a;\r\n if ((_a = this._transform) === null || _a === void 0 ? void 0 : _a.pos) {\r\n this._transform.pos = vec(this.x, val);\r\n }\r\n }\r\n get z() {\r\n var _a;\r\n return (_a = this._transform.z) !== null && _a !== void 0 ? _a : 0;\r\n }\r\n set z(val) {\r\n if (this._transform) {\r\n this._transform.z = val;\r\n }\r\n }\r\n get rotation() {\r\n var _a, _b;\r\n return (_b = (_a = this._transform) === null || _a === void 0 ? void 0 : _a.rotation) !== null && _b !== void 0 ? _b : 0;\r\n }\r\n set rotation(val) {\r\n var _a;\r\n if ((_a = this._transform) === null || _a === void 0 ? void 0 : _a.rotation) {\r\n this._transform.rotation = val;\r\n }\r\n }\r\n get scale() {\r\n var _a, _b;\r\n return (_b = (_a = this._transform) === null || _a === void 0 ? void 0 : _a.scale) !== null && _b !== void 0 ? _b : Vector.One;\r\n }\r\n set scale(val) {\r\n var _a;\r\n if ((_a = this._transform) === null || _a === void 0 ? void 0 : _a.scale) {\r\n this._transform.scale = val;\r\n }\r\n }\r\n get pos() {\r\n return this._transform.pos;\r\n }\r\n set pos(val) {\r\n this._transform.pos = val;\r\n }\r\n get vel() {\r\n return this._motion.vel;\r\n }\r\n set vel(val) {\r\n this._motion.vel = val;\r\n }\r\n emit(eventName, event) {\r\n this.events.emit(eventName, event);\r\n }\r\n on(eventName, handler) {\r\n return this.events.on(eventName, handler);\r\n }\r\n once(eventName, handler) {\r\n return this.events.once(eventName, handler);\r\n }\r\n off(eventName, handler) {\r\n this.events.off(eventName, handler);\r\n }\r\n /**\r\n * @param options\r\n */\r\n constructor(options) {\r\n var _a, _b;\r\n super(null, options.name);\r\n this.events = new EventEmitter();\r\n this._token = 0;\r\n this.logger = Logger.getInstance();\r\n this.tiles = [];\r\n this._rows = [];\r\n this._cols = [];\r\n this.renderFromTopOfGraphic = false;\r\n this._collidersDirty = true;\r\n this._originalOffsets = new WeakMap();\r\n this.addComponent(new TransformComponent());\r\n this.addComponent(new MotionComponent());\r\n this.addComponent(new BodyComponent({\r\n type: CollisionType.Fixed\r\n }));\r\n this.addComponent(new GraphicsComponent({\r\n onPostDraw: (ctx, delta) => this.draw(ctx, delta)\r\n }));\r\n this.addComponent(new DebugGraphicsComponent((ctx) => this.debug(ctx)));\r\n this.addComponent(new ColliderComponent());\r\n this._graphics = this.get(GraphicsComponent);\r\n this._transform = this.get(TransformComponent);\r\n this._motion = this.get(MotionComponent);\r\n this._collider = this.get(ColliderComponent);\r\n this._composite = this._collider.useCompositeCollider([]);\r\n this._transform.pos = (_a = options.pos) !== null && _a !== void 0 ? _a : Vector.Zero;\r\n this._oldPos = this._transform.pos.clone();\r\n this._oldScale = this._transform.scale.clone();\r\n this.renderFromTopOfGraphic = (_b = options.renderFromTopOfGraphic) !== null && _b !== void 0 ? _b : this.renderFromTopOfGraphic;\r\n this.tileWidth = options.tileWidth;\r\n this.tileHeight = options.tileHeight;\r\n this.rows = options.rows;\r\n this.columns = options.columns;\r\n this.tiles = new Array(this.rows * this.columns);\r\n this._rows = new Array(this.rows);\r\n this._cols = new Array(this.columns);\r\n let currentCol = [];\r\n for (let i = 0; i < this.columns; i++) {\r\n for (let j = 0; j < this.rows; j++) {\r\n const cd = new Tile({\r\n x: i,\r\n y: j,\r\n map: this\r\n });\r\n cd.map = this;\r\n this.tiles[i + j * this.columns] = cd;\r\n currentCol.push(cd);\r\n if (!this._rows[j]) {\r\n this._rows[j] = [];\r\n }\r\n this._rows[j].push(cd);\r\n }\r\n this._cols[i] = currentCol;\r\n currentCol = [];\r\n }\r\n this._graphics.localBounds = new BoundingBox({\r\n left: 0,\r\n top: 0,\r\n right: this.columns * this.tileWidth * this.scale.x,\r\n bottom: this.rows * this.tileHeight * this.scale.y\r\n });\r\n }\r\n _initialize(engine) {\r\n super._initialize(engine);\r\n this._engine = engine;\r\n }\r\n _getOrSetColliderOriginalOffset(collider) {\r\n if (!this._originalOffsets.has(collider)) {\r\n const originalOffset = collider.offset;\r\n this._originalOffsets.set(collider, originalOffset);\r\n return originalOffset;\r\n }\r\n else {\r\n return this._originalOffsets.get(collider);\r\n }\r\n }\r\n /**\r\n * Tiles colliders based on the solid tiles in the tilemap.\r\n */\r\n _updateColliders() {\r\n this._collider.$colliderRemoved.notifyAll(this._composite);\r\n this._composite.clearColliders();\r\n const colliders = [];\r\n this._composite = this._collider.useCompositeCollider([]);\r\n let current;\r\n // Bad square tesselation algo\r\n for (let i = 0; i < this.columns; i++) {\r\n // Scan column for colliders\r\n for (let j = 0; j < this.rows; j++) {\r\n // Columns start with a new collider\r\n if (j === 0) {\r\n current = null;\r\n }\r\n const tile = this.tiles[i + j * this.columns];\r\n // Current tile in column is solid build up current collider\r\n if (tile.solid) {\r\n // Use custom collider otherwise bounding box\r\n if (tile.getColliders().length > 0) {\r\n // tile with custom collider interrupting the current run\r\n for (const collider of tile.getColliders()) {\r\n const originalOffset = this._getOrSetColliderOriginalOffset(collider);\r\n collider.offset = vec(tile.x * this.tileWidth * this.scale.x, tile.y * this.tileHeight * this.scale.y).add(originalOffset);\r\n collider.owner = this;\r\n this._composite.addCollider(collider);\r\n }\r\n //we push any current collider before nulling the current run\r\n if (current) {\r\n colliders.push(current);\r\n }\r\n current = null;\r\n }\r\n else {\r\n if (!current) {\r\n // no current run, start one\r\n current = tile.bounds;\r\n }\r\n else {\r\n // combine with current run\r\n current = current.combine(tile.bounds);\r\n }\r\n }\r\n }\r\n else {\r\n // Not solid skip and cut off the current collider\r\n if (current) {\r\n colliders.push(current);\r\n }\r\n current = null;\r\n }\r\n }\r\n // After a column is complete check to see if it can be merged into the last one\r\n if (current) {\r\n // if previous is the same combine it\r\n const prev = colliders[colliders.length - 1];\r\n if (prev && prev.top === current.top && prev.bottom === current.bottom) {\r\n colliders[colliders.length - 1] = prev.combine(current);\r\n }\r\n else {\r\n // else new collider\r\n colliders.push(current);\r\n }\r\n }\r\n }\r\n for (const c of colliders) {\r\n const collider = Shape.Box(c.width, c.height, Vector.Zero, vec(c.left - this.pos.x, c.top - this.pos.y));\r\n collider.owner = this;\r\n this._composite.addCollider(collider);\r\n }\r\n this._collider.update();\r\n // Notify that colliders have been updated\r\n this._collider.$colliderAdded.notifyAll(this._composite);\r\n }\r\n /**\r\n * Returns the [[Tile]] by index (row major order)\r\n */\r\n getTileByIndex(index) {\r\n return this.tiles[index];\r\n }\r\n /**\r\n * Returns the [[Tile]] by its x and y integer coordinates\r\n */\r\n getTile(x, y) {\r\n if (x < 0 || y < 0 || x >= this.columns || y >= this.rows) {\r\n return null;\r\n }\r\n return this.tiles[x + y * this.columns];\r\n }\r\n /**\r\n * Returns the [[Tile]] by testing a point in world coordinates,\r\n * returns `null` if no Tile was found.\r\n */\r\n getTileByPoint(point) {\r\n const x = Math.floor((point.x - this.pos.x) / (this.tileWidth * this.scale.x));\r\n const y = Math.floor((point.y - this.pos.y) / (this.tileHeight * this.scale.y));\r\n const tile = this.getTile(x, y);\r\n if (x >= 0 && y >= 0 && x < this.columns && y < this.rows && tile) {\r\n return tile;\r\n }\r\n return null;\r\n }\r\n getRows() {\r\n return this._rows;\r\n }\r\n getColumns() {\r\n return this._cols;\r\n }\r\n update(engine, delta) {\r\n this.onPreUpdate(engine, delta);\r\n this.emit('preupdate', new PreUpdateEvent(engine, delta, this));\r\n if (!this._oldPos.equals(this.pos) ||\r\n !this._oldScale.equals(this.scale)) {\r\n this.flagCollidersDirty();\r\n this.flagTilesDirty();\r\n }\r\n if (this._collidersDirty) {\r\n this._collidersDirty = false;\r\n this._updateColliders();\r\n }\r\n this._token++;\r\n this.pos.clone(this._oldPos);\r\n this.scale.clone(this._oldScale);\r\n this._transform.pos = this.pos;\r\n this.onPostUpdate(engine, delta);\r\n this.emit('postupdate', new PostUpdateEvent(engine, delta, this));\r\n }\r\n /**\r\n * Draws the tile map to the screen. Called by the [[Scene]].\r\n * @param ctx ExcaliburGraphicsContext\r\n * @param delta The number of milliseconds since the last draw\r\n */\r\n draw(ctx, delta) {\r\n this.emit('predraw', new PreDrawEvent(ctx, delta, this)); // TODO fix event\r\n let worldBounds = this._engine.screen.getWorldBounds();\r\n // TODO can we trim this down by using world bounds?\r\n let x = 0;\r\n const xEnd = this.columns;\r\n let y = 0;\r\n const yEnd = this.rows;\r\n let graphics, graphicsIndex, graphicsLen;\r\n const maybeParallax = this.get(ParallaxComponent);\r\n if (maybeParallax) {\r\n let pos = this.pos;\r\n const oneMinusFactor = Vector.One.sub(maybeParallax.parallaxFactor);\r\n const parallaxOffset = this._engine.currentScene.camera.pos.scale(oneMinusFactor);\r\n pos = pos.sub(parallaxOffset);\r\n // adjust world bounds by parallax factor\r\n worldBounds = worldBounds.translate(pos);\r\n }\r\n let tile;\r\n for (x; x < xEnd; x++) {\r\n for (y; y < yEnd; y++) {\r\n tile = this.getTile(x, y);\r\n // fixme: This has a large perf impact, we iterate over every tile in the tilemap\r\n // this probably requires a spatial data structure to do more efficiently\r\n if (!worldBounds.overlaps(tile.bounds)) {\r\n continue;\r\n }\r\n // get non-negative tile sprites\r\n graphics = this.getTile(x, y).getGraphics();\r\n for (graphicsIndex = 0, graphicsLen = graphics.length; graphicsIndex < graphicsLen; graphicsIndex++) {\r\n // draw sprite, warning if sprite doesn't exist\r\n const graphic = graphics[graphicsIndex];\r\n if (graphic) {\r\n if (hasGraphicsTick(graphic)) {\r\n graphic === null || graphic === void 0 ? void 0 : graphic.tick(delta, this._token);\r\n }\r\n const offsetY = this.renderFromTopOfGraphic ? 0 : (graphic.height - this.tileHeight);\r\n graphic.draw(ctx, x * this.tileWidth, y * this.tileHeight - offsetY);\r\n }\r\n }\r\n }\r\n y = 0;\r\n }\r\n this.emit('postdraw', new PostDrawEvent(ctx, delta, this));\r\n }\r\n debug(gfx) {\r\n const width = this.tileWidth * this.columns;\r\n const height = this.tileHeight * this.rows;\r\n const pos = Vector.Zero;\r\n for (let r = 0; r < this.rows + 1; r++) {\r\n const yOffset = vec(0, r * this.tileHeight);\r\n gfx.drawLine(pos.add(yOffset), pos.add(vec(width, yOffset.y)), Color.Red, 2);\r\n }\r\n for (let c = 0; c < this.columns + 1; c++) {\r\n const xOffset = vec(c * this.tileWidth, 0);\r\n gfx.drawLine(pos.add(xOffset), pos.add(vec(xOffset.x, height)), Color.Red, 2);\r\n }\r\n const colliders = this._composite.getColliders();\r\n for (const collider of colliders) {\r\n const grayish = Color.Gray;\r\n grayish.a = 0.5;\r\n const bounds = collider.localBounds;\r\n const pos = collider.worldPos.sub(this.pos);\r\n gfx.drawRectangle(pos, bounds.width, bounds.height, grayish);\r\n }\r\n }\r\n}\r\n/**\r\n * TileMap Tile\r\n *\r\n * A light-weight object that occupies a space in a collision map. Generally\r\n * created by a [[TileMap]].\r\n *\r\n * Tiles can draw multiple sprites. Note that the order of drawing is the order\r\n * of the sprites in the array so the last one will be drawn on top. You can\r\n * use transparency to create layers this way.\r\n */\r\nclass Tile extends Entity {\r\n // private _transform: TransformComponent;\r\n /**\r\n * Return the world position of the top left corner of the tile\r\n */\r\n get pos() {\r\n if (this._posDirty) {\r\n this._recalculate();\r\n this._posDirty = false;\r\n }\r\n return this._pos;\r\n }\r\n /**\r\n * Width of the tile in pixels\r\n */\r\n get width() {\r\n return this._width;\r\n }\r\n /**\r\n * Height of the tile in pixels\r\n */\r\n get height() {\r\n return this._height;\r\n }\r\n /**\r\n * Wether this tile should be treated as solid by the tilemap\r\n */\r\n get solid() {\r\n return this._solid;\r\n }\r\n /**\r\n * Wether this tile should be treated as solid by the tilemap\r\n */\r\n set solid(val) {\r\n var _a;\r\n (_a = this.map) === null || _a === void 0 ? void 0 : _a.flagCollidersDirty();\r\n this._solid = val;\r\n }\r\n /**\r\n * Current list of graphics for this tile\r\n */\r\n getGraphics() {\r\n return this._graphics;\r\n }\r\n /**\r\n * Add another [[Graphic]] to this TileMap tile\r\n * @param graphic\r\n */\r\n addGraphic(graphic) {\r\n this._graphics.push(graphic);\r\n }\r\n /**\r\n * Remove an instance of a [[Graphic]] from this tile\r\n */\r\n removeGraphic(graphic) {\r\n removeItemFromArray(graphic, this._graphics);\r\n }\r\n /**\r\n * Clear all graphics from this tile\r\n */\r\n clearGraphics() {\r\n this._graphics.length = 0;\r\n }\r\n /**\r\n * Returns the list of colliders\r\n */\r\n getColliders() {\r\n return this._colliders;\r\n }\r\n /**\r\n * Adds a custom collider to the [[Tile]] to use instead of it's bounds\r\n *\r\n * If no collider is set but [[Tile.solid]] is set, the tile bounds are used as a collider.\r\n *\r\n * **Note!** the [[Tile.solid]] must be set to true for it to act as a \"fixed\" collider\r\n * @param collider\r\n */\r\n addCollider(collider) {\r\n this._colliders.push(collider);\r\n this.map.flagCollidersDirty();\r\n }\r\n /**\r\n * Removes a collider from the [[Tile]]\r\n * @param collider\r\n */\r\n removeCollider(collider) {\r\n const index = this._colliders.indexOf(collider);\r\n if (index > -1) {\r\n this._colliders.splice(index, 1);\r\n }\r\n this.map.flagCollidersDirty();\r\n }\r\n /**\r\n * Clears all colliders from the [[Tile]]\r\n */\r\n clearColliders() {\r\n this._colliders.length = 0;\r\n this.map.flagCollidersDirty();\r\n }\r\n constructor(options) {\r\n var _a, _b;\r\n super();\r\n this._posDirty = false;\r\n this._solid = false;\r\n this._graphics = [];\r\n /**\r\n * Current list of colliders for this tile\r\n */\r\n this._colliders = [];\r\n /**\r\n * Arbitrary data storage per tile, useful for any game specific data\r\n */\r\n this.data = new Map();\r\n this.x = options.x;\r\n this.y = options.y;\r\n this.map = options.map;\r\n this._width = options.map.tileWidth * this.map.scale.x;\r\n this._height = options.map.tileHeight * this.map.scale.y;\r\n this.solid = (_a = options.solid) !== null && _a !== void 0 ? _a : this.solid;\r\n this._graphics = (_b = options.graphics) !== null && _b !== void 0 ? _b : [];\r\n this._recalculate();\r\n }\r\n flagDirty() {\r\n return this._posDirty = true;\r\n }\r\n _recalculate() {\r\n this._width = this.map.tileWidth * this.map.scale.x;\r\n this._height = this.map.tileHeight * this.map.scale.y;\r\n this._pos = this.map.pos.add(vec(this.x * this._width, this.y * this._height));\r\n this._bounds = new BoundingBox(this._pos.x, this._pos.y, this._pos.x + this._width, this._pos.y + this._height);\r\n this._posDirty = false;\r\n }\r\n /**\r\n * Tile bounds in world space\r\n */\r\n get bounds() {\r\n if (this._posDirty) {\r\n this._recalculate();\r\n }\r\n return this._bounds;\r\n }\r\n /**\r\n * Tile position in world space\r\n */\r\n get center() {\r\n if (this._posDirty) {\r\n this._recalculate();\r\n }\r\n return new Vector(this._pos.x + this._width / 2, this._pos.y + this._height / 2);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Camera.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Container to house convenience strategy methods\r\n * @internal\r\n */\r\nclass StrategyContainer {\r\n constructor(camera) {\r\n this.camera = camera;\r\n }\r\n /**\r\n * Creates and adds the [[LockCameraToActorStrategy]] on the current camera.\r\n * @param actor The actor to lock the camera to\r\n */\r\n lockToActor(actor) {\r\n this.camera.addStrategy(new LockCameraToActorStrategy(actor));\r\n }\r\n /**\r\n * Creates and adds the [[LockCameraToActorAxisStrategy]] on the current camera\r\n * @param actor The actor to lock the camera to\r\n * @param axis The axis to follow the actor on\r\n */\r\n lockToActorAxis(actor, axis) {\r\n this.camera.addStrategy(new LockCameraToActorAxisStrategy(actor, axis));\r\n }\r\n /**\r\n * Creates and adds the [[ElasticToActorStrategy]] on the current camera\r\n * If cameraElasticity < cameraFriction < 1.0, the behavior will be a dampened spring that will slowly end at the target without bouncing\r\n * If cameraFriction < cameraElasticity < 1.0, the behavior will be an oscillating spring that will over\r\n * correct and bounce around the target\r\n *\r\n * @param actor Target actor to elastically follow\r\n * @param cameraElasticity [0 - 1.0] The higher the elasticity the more force that will drive the camera towards the target\r\n * @param cameraFriction [0 - 1.0] The higher the friction the more that the camera will resist motion towards the target\r\n */\r\n elasticToActor(actor, cameraElasticity, cameraFriction) {\r\n this.camera.addStrategy(new ElasticToActorStrategy(actor, cameraElasticity, cameraFriction));\r\n }\r\n /**\r\n * Creates and adds the [[RadiusAroundActorStrategy]] on the current camera\r\n * @param actor Target actor to follow when it is \"radius\" pixels away\r\n * @param radius Number of pixels away before the camera will follow\r\n */\r\n radiusAroundActor(actor, radius) {\r\n this.camera.addStrategy(new RadiusAroundActorStrategy(actor, radius));\r\n }\r\n /**\r\n * Creates and adds the [[LimitCameraBoundsStrategy]] on the current camera\r\n * @param box The bounding box to limit the camera to.\r\n */\r\n limitCameraBounds(box) {\r\n this.camera.addStrategy(new LimitCameraBoundsStrategy(box));\r\n }\r\n}\r\n/**\r\n * Camera axis enum\r\n */\r\nvar Axis;\r\n(function (Axis) {\r\n Axis[Axis[\"X\"] = 0] = \"X\";\r\n Axis[Axis[\"Y\"] = 1] = \"Y\";\r\n})(Axis || (Axis = {}));\r\n/**\r\n * Lock a camera to the exact x/y position of an actor.\r\n */\r\nclass LockCameraToActorStrategy {\r\n constructor(target) {\r\n this.target = target;\r\n this.action = (target, _cam, _eng, _delta) => {\r\n const center = target.center;\r\n return center;\r\n };\r\n }\r\n}\r\n/**\r\n * Lock a camera to a specific axis around an actor.\r\n */\r\nclass LockCameraToActorAxisStrategy {\r\n constructor(target, axis) {\r\n this.target = target;\r\n this.axis = axis;\r\n this.action = (target, cam, _eng, _delta) => {\r\n const center = target.center;\r\n const currentFocus = cam.getFocus();\r\n if (this.axis === Axis.X) {\r\n return new Vector(center.x, currentFocus.y);\r\n }\r\n else {\r\n return new Vector(currentFocus.x, center.y);\r\n }\r\n };\r\n }\r\n}\r\n/**\r\n * Using [Hook's law](https://en.wikipedia.org/wiki/Hooke's_law), elastically move the camera towards the target actor.\r\n */\r\nclass ElasticToActorStrategy {\r\n /**\r\n * If cameraElasticity < cameraFriction < 1.0, the behavior will be a dampened spring that will slowly end at the target without bouncing\r\n * If cameraFriction < cameraElasticity < 1.0, the behavior will be an oscillating spring that will over\r\n * correct and bounce around the target\r\n *\r\n * @param target Target actor to elastically follow\r\n * @param cameraElasticity [0 - 1.0] The higher the elasticity the more force that will drive the camera towards the target\r\n * @param cameraFriction [0 - 1.0] The higher the friction the more that the camera will resist motion towards the target\r\n */\r\n constructor(target, cameraElasticity, cameraFriction) {\r\n this.target = target;\r\n this.cameraElasticity = cameraElasticity;\r\n this.cameraFriction = cameraFriction;\r\n this.action = (target, cam, _eng, _delta) => {\r\n const position = target.center;\r\n let focus = cam.getFocus();\r\n let cameraVel = cam.vel.clone();\r\n // Calculate the stretch vector, using the spring equation\r\n // F = kX\r\n // https://en.wikipedia.org/wiki/Hooke's_law\r\n // Apply to the current camera velocity\r\n const stretch = position.sub(focus).scale(this.cameraElasticity); // stretch is X\r\n cameraVel = cameraVel.add(stretch);\r\n // Calculate the friction (-1 to apply a force in the opposition of motion)\r\n // Apply to the current camera velocity\r\n const friction = cameraVel.scale(-1).scale(this.cameraFriction);\r\n cameraVel = cameraVel.add(friction);\r\n // Update position by velocity deltas\r\n focus = focus.add(cameraVel);\r\n return focus;\r\n };\r\n }\r\n}\r\nclass RadiusAroundActorStrategy {\r\n /**\r\n *\r\n * @param target Target actor to follow when it is \"radius\" pixels away\r\n * @param radius Number of pixels away before the camera will follow\r\n */\r\n constructor(target, radius) {\r\n this.target = target;\r\n this.radius = radius;\r\n this.action = (target, cam, _eng, _delta) => {\r\n const position = target.center;\r\n const focus = cam.getFocus();\r\n const direction = position.sub(focus);\r\n const distance = direction.size;\r\n if (distance >= this.radius) {\r\n const offset = distance - this.radius;\r\n return focus.add(direction.normalize().scale(offset));\r\n }\r\n return focus;\r\n };\r\n }\r\n}\r\n/**\r\n * Prevent a camera from going beyond the given camera dimensions.\r\n */\r\nclass LimitCameraBoundsStrategy {\r\n constructor(target) {\r\n this.target = target;\r\n /**\r\n * Useful for limiting the camera to a [[TileMap]]'s dimensions, or a specific area inside the map.\r\n *\r\n * Note that this strategy does not perform any movement by itself.\r\n * It only sets the camera position to within the given bounds when the camera has gone beyond them.\r\n * Thus, it is a good idea to combine it with other camera strategies and set this strategy as the last one.\r\n *\r\n * Make sure that the camera bounds are at least as large as the viewport size.\r\n *\r\n * @param target The bounding box to limit the camera to\r\n */\r\n this.boundSizeChecked = false; // Check and warn only once\r\n this.action = (target, cam, _eng, _delta) => {\r\n const focus = cam.getFocus();\r\n if (!this.boundSizeChecked) {\r\n if (target.bottom - target.top < _eng.drawHeight || target.right - target.left < _eng.drawWidth) {\r\n Logger.getInstance().warn('Camera bounds should not be smaller than the engine viewport');\r\n }\r\n this.boundSizeChecked = true;\r\n }\r\n let focusX = focus.x;\r\n let focusY = focus.y;\r\n if (focus.x < target.left + _eng.halfDrawWidth) {\r\n focusX = target.left + _eng.halfDrawWidth;\r\n }\r\n else if (focus.x > target.right - _eng.halfDrawWidth) {\r\n focusX = target.right - _eng.halfDrawWidth;\r\n }\r\n if (focus.y < target.top + _eng.halfDrawHeight) {\r\n focusY = target.top + _eng.halfDrawHeight;\r\n }\r\n else if (focus.y > target.bottom - _eng.halfDrawHeight) {\r\n focusY = target.bottom - _eng.halfDrawHeight;\r\n }\r\n return vec(focusX, focusY);\r\n };\r\n }\r\n}\r\nconst CameraEvents = {\r\n Initialize: 'initialize',\r\n PreUpdate: 'preupdate',\r\n PostUpdate: 'postupdate'\r\n};\r\n/**\r\n * Cameras\r\n *\r\n * [[Camera]] is the base class for all Excalibur cameras. Cameras are used\r\n * to move around your game and set focus. They are used to determine\r\n * what is \"off screen\" and can be used to scale the game.\r\n *\r\n */\r\nclass Camera {\r\n constructor() {\r\n this.events = new EventEmitter();\r\n this.transform = AffineMatrix.identity();\r\n this.inverse = AffineMatrix.identity();\r\n this._cameraStrategies = [];\r\n this.strategy = new StrategyContainer(this);\r\n /**\r\n * Get or set current zoom of the camera, defaults to 1\r\n */\r\n this._z = 1;\r\n /**\r\n * Get or set rate of change in zoom, defaults to 0\r\n */\r\n this.dz = 0;\r\n /**\r\n * Get or set zoom acceleration\r\n */\r\n this.az = 0;\r\n /**\r\n * Current rotation of the camera\r\n */\r\n this.rotation = 0;\r\n this._angularVelocity = 0;\r\n /**\r\n * Get or set the camera's position\r\n */\r\n this._posChanged = false;\r\n this._pos = watchAny(Vector.Zero, () => (this._posChanged = true));\r\n /**\r\n * Get or set the camera's velocity\r\n */\r\n this.vel = Vector.Zero;\r\n /**\r\n * Get or set the camera's acceleration\r\n */\r\n this.acc = Vector.Zero;\r\n this._cameraMoving = false;\r\n this._currentLerpTime = 0;\r\n this._lerpDuration = 1000; // 1 second\r\n this._lerpStart = null;\r\n this._lerpEnd = null;\r\n //camera effects\r\n this._isShaking = false;\r\n this._shakeMagnitudeX = 0;\r\n this._shakeMagnitudeY = 0;\r\n this._shakeDuration = 0;\r\n this._elapsedShakeTime = 0;\r\n this._xShake = 0;\r\n this._yShake = 0;\r\n this._isZooming = false;\r\n this._zoomStart = 1;\r\n this._zoomEnd = 1;\r\n this._currentZoomTime = 0;\r\n this._zoomDuration = 0;\r\n this._zoomEasing = EasingFunctions.EaseInOutCubic;\r\n this._easing = EasingFunctions.EaseInOutCubic;\r\n this._halfWidth = 0;\r\n this._halfHeight = 0;\r\n this._viewport = null;\r\n this._isInitialized = false;\r\n }\r\n get zoom() {\r\n return this._z;\r\n }\r\n set zoom(val) {\r\n this._z = val;\r\n if (this._engine) {\r\n this._halfWidth = this._engine.halfDrawWidth;\r\n this._halfHeight = this._engine.halfDrawHeight;\r\n }\r\n }\r\n /**\r\n * Get or set the camera's angular velocity\r\n */\r\n get angularVelocity() {\r\n return this._angularVelocity;\r\n }\r\n set angularVelocity(value) {\r\n this._angularVelocity = value;\r\n }\r\n get pos() {\r\n return this._pos;\r\n }\r\n set pos(vec) {\r\n this._pos = watchAny(vec, () => (this._posChanged = true));\r\n this._posChanged = true;\r\n }\r\n /**\r\n * Get the camera's x position\r\n */\r\n get x() {\r\n return this.pos.x;\r\n }\r\n /**\r\n * Set the camera's x position (cannot be set when following an [[Actor]] or when moving)\r\n */\r\n set x(value) {\r\n if (!this._follow && !this._cameraMoving) {\r\n this.pos = vec(value, this.pos.y);\r\n }\r\n }\r\n /**\r\n * Get the camera's y position\r\n */\r\n get y() {\r\n return this.pos.y;\r\n }\r\n /**\r\n * Set the camera's y position (cannot be set when following an [[Actor]] or when moving)\r\n */\r\n set y(value) {\r\n if (!this._follow && !this._cameraMoving) {\r\n this.pos = vec(this.pos.x, value);\r\n }\r\n }\r\n /**\r\n * Get or set the camera's x velocity\r\n */\r\n get dx() {\r\n return this.vel.x;\r\n }\r\n set dx(value) {\r\n this.vel = vec(value, this.vel.y);\r\n }\r\n /**\r\n * Get or set the camera's y velocity\r\n */\r\n get dy() {\r\n return this.vel.y;\r\n }\r\n set dy(value) {\r\n this.vel = vec(this.vel.x, value);\r\n }\r\n /**\r\n * Get or set the camera's x acceleration\r\n */\r\n get ax() {\r\n return this.acc.x;\r\n }\r\n set ax(value) {\r\n this.acc = vec(value, this.acc.y);\r\n }\r\n /**\r\n * Get or set the camera's y acceleration\r\n */\r\n get ay() {\r\n return this.acc.y;\r\n }\r\n set ay(value) {\r\n this.acc = vec(this.acc.x, value);\r\n }\r\n /**\r\n * Returns the focal point of the camera, a new point giving the x and y position of the camera\r\n */\r\n getFocus() {\r\n return this.pos;\r\n }\r\n /**\r\n * This moves the camera focal point to the specified position using specified easing function. Cannot move when following an Actor.\r\n *\r\n * @param pos The target position to move to\r\n * @param duration The duration in milliseconds the move should last\r\n * @param [easingFn] An optional easing function ([[ex.EasingFunctions.EaseInOutCubic]] by default)\r\n * @returns A [[Promise]] that resolves when movement is finished, including if it's interrupted.\r\n * The [[Promise]] value is the [[Vector]] of the target position. It will be rejected if a move cannot be made.\r\n */\r\n move(pos, duration, easingFn = EasingFunctions.EaseInOutCubic) {\r\n if (typeof easingFn !== 'function') {\r\n throw 'Please specify an EasingFunction';\r\n }\r\n // cannot move when following an actor\r\n if (this._follow) {\r\n return Promise.reject(pos);\r\n }\r\n // resolve existing promise, if any\r\n if (this._lerpPromise && this._lerpResolve) {\r\n this._lerpResolve(pos);\r\n }\r\n this._lerpPromise = new Promise((resolve) => {\r\n this._lerpResolve = resolve;\r\n });\r\n this._lerpStart = this.getFocus().clone();\r\n this._lerpDuration = duration;\r\n this._lerpEnd = pos;\r\n this._currentLerpTime = 0;\r\n this._cameraMoving = true;\r\n this._easing = easingFn;\r\n return this._lerpPromise;\r\n }\r\n /**\r\n * Sets the camera to shake at the specified magnitudes for the specified duration\r\n * @param magnitudeX The x magnitude of the shake\r\n * @param magnitudeY The y magnitude of the shake\r\n * @param duration The duration of the shake in milliseconds\r\n */\r\n shake(magnitudeX, magnitudeY, duration) {\r\n this._isShaking = true;\r\n this._shakeMagnitudeX = magnitudeX;\r\n this._shakeMagnitudeY = magnitudeY;\r\n this._shakeDuration = duration;\r\n }\r\n /**\r\n * Zooms the camera in or out by the specified scale over the specified duration.\r\n * If no duration is specified, it take effect immediately.\r\n * @param scale The scale of the zoom\r\n * @param duration The duration of the zoom in milliseconds\r\n */\r\n zoomOverTime(scale, duration = 0, easingFn = EasingFunctions.EaseInOutCubic) {\r\n this._zoomPromise = new Promise((resolve) => {\r\n this._zoomResolve = resolve;\r\n });\r\n if (duration) {\r\n this._isZooming = true;\r\n this._zoomEasing = easingFn;\r\n this._currentZoomTime = 0;\r\n this._zoomDuration = duration;\r\n this._zoomStart = this.zoom;\r\n this._zoomEnd = scale;\r\n }\r\n else {\r\n this._isZooming = false;\r\n this.zoom = scale;\r\n return Promise.resolve(true);\r\n }\r\n return this._zoomPromise;\r\n }\r\n /**\r\n * Gets the bounding box of the viewport of this camera in world coordinates\r\n */\r\n get viewport() {\r\n if (this._viewport) {\r\n return this._viewport;\r\n }\r\n return new BoundingBox(0, 0, 0, 0);\r\n }\r\n /**\r\n * Adds a new camera strategy to this camera\r\n * @param cameraStrategy Instance of an [[CameraStrategy]]\r\n */\r\n addStrategy(cameraStrategy) {\r\n this._cameraStrategies.push(cameraStrategy);\r\n }\r\n /**\r\n * Removes a camera strategy by reference\r\n * @param cameraStrategy Instance of an [[CameraStrategy]]\r\n */\r\n removeStrategy(cameraStrategy) {\r\n removeItemFromArray(cameraStrategy, this._cameraStrategies);\r\n }\r\n /**\r\n * Clears all camera strategies from the camera\r\n */\r\n clearAllStrategies() {\r\n this._cameraStrategies.length = 0;\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Internal _preupdate handler for [[onPreUpdate]] lifecycle event\r\n * @internal\r\n */\r\n _preupdate(engine, delta) {\r\n this.events.emit('preupdate', new PreUpdateEvent(engine, delta, this));\r\n this.onPreUpdate(engine, delta);\r\n }\r\n /**\r\n * Safe to override onPreUpdate lifecycle event handler. Synonymous with `.on('preupdate', (evt) =>{...})`\r\n *\r\n * `onPreUpdate` is called directly before a scene is updated.\r\n */\r\n onPreUpdate(_engine, _delta) {\r\n // Overridable\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Internal _preupdate handler for [[onPostUpdate]] lifecycle event\r\n * @internal\r\n */\r\n _postupdate(engine, delta) {\r\n this.events.emit('postupdate', new PostUpdateEvent(engine, delta, this));\r\n this.onPostUpdate(engine, delta);\r\n }\r\n /**\r\n * Safe to override onPostUpdate lifecycle event handler. Synonymous with `.on('preupdate', (evt) =>{...})`\r\n *\r\n * `onPostUpdate` is called directly after a scene is updated.\r\n */\r\n onPostUpdate(_engine, _delta) {\r\n // Overridable\r\n }\r\n get isInitialized() {\r\n return this._isInitialized;\r\n }\r\n _initialize(_engine) {\r\n if (!this.isInitialized) {\r\n this._engine = _engine;\r\n this._screen = _engine.screen;\r\n const currentRes = this._screen.contentArea;\r\n let center = vec(currentRes.width / 2, currentRes.height / 2);\r\n if (!this._engine.loadingComplete) {\r\n // If there was a loading screen, we peek the configured resolution\r\n const res = this._screen.peekResolution();\r\n if (res) {\r\n center = vec(res.width / 2, res.height / 2);\r\n }\r\n }\r\n this._halfWidth = center.x;\r\n this._halfHeight = center.y;\r\n // If the user has not set the camera pos, apply default center screen position\r\n if (!this._posChanged) {\r\n this.pos = center;\r\n }\r\n // First frame bootstrap\r\n // Ensure camera tx is correct\r\n // Run update twice to ensure properties are init'd\r\n this.updateTransform();\r\n // Run strategies for first frame\r\n this.runStrategies(_engine, _engine.clock.elapsed());\r\n // Setup the first frame viewport\r\n this.updateViewport();\r\n // It's important to update the camera after strategies\r\n // This prevents jitter\r\n this.updateTransform();\r\n this.onInitialize(_engine);\r\n this.events.emit('initialize', new InitializeEvent(_engine, this));\r\n this._isInitialized = true;\r\n }\r\n }\r\n /**\r\n * Safe to override onPostUpdate lifecycle event handler. Synonymous with `.on('preupdate', (evt) =>{...})`\r\n *\r\n * `onPostUpdate` is called directly after a scene is updated.\r\n */\r\n onInitialize(_engine) {\r\n // Overridable\r\n }\r\n emit(eventName, event) {\r\n this.events.emit(eventName, event);\r\n }\r\n on(eventName, handler) {\r\n return this.events.on(eventName, handler);\r\n }\r\n once(eventName, handler) {\r\n return this.events.once(eventName, handler);\r\n }\r\n off(eventName, handler) {\r\n this.events.off(eventName, handler);\r\n }\r\n runStrategies(engine, delta) {\r\n for (const s of this._cameraStrategies) {\r\n this.pos = s.action.call(s, s.target, this, engine, delta);\r\n }\r\n }\r\n updateViewport() {\r\n // recalc viewport\r\n this._viewport = new BoundingBox(this.x - this._halfWidth, this.y - this._halfHeight, this.x + this._halfWidth, this.y + this._halfHeight);\r\n }\r\n update(_engine, delta) {\r\n this._initialize(_engine);\r\n this._preupdate(_engine, delta);\r\n // Update placements based on linear algebra\r\n this.pos = this.pos.add(this.vel.scale(delta / 1000));\r\n this.zoom += (this.dz * delta) / 1000;\r\n this.vel = this.vel.add(this.acc.scale(delta / 1000));\r\n this.dz += (this.az * delta) / 1000;\r\n this.rotation += (this.angularVelocity * delta) / 1000;\r\n if (this._isZooming) {\r\n if (this._currentZoomTime < this._zoomDuration) {\r\n const zoomEasing = this._zoomEasing;\r\n const newZoom = zoomEasing(this._currentZoomTime, this._zoomStart, this._zoomEnd, this._zoomDuration);\r\n this.zoom = newZoom;\r\n this._currentZoomTime += delta;\r\n }\r\n else {\r\n this._isZooming = false;\r\n this.zoom = this._zoomEnd;\r\n this._currentZoomTime = 0;\r\n this._zoomResolve(true);\r\n }\r\n }\r\n if (this._cameraMoving) {\r\n if (this._currentLerpTime < this._lerpDuration) {\r\n const moveEasing = EasingFunctions.CreateVectorEasingFunction(this._easing);\r\n const lerpPoint = moveEasing(this._currentLerpTime, this._lerpStart, this._lerpEnd, this._lerpDuration);\r\n this.pos = lerpPoint;\r\n this._currentLerpTime += delta;\r\n }\r\n else {\r\n this.pos = this._lerpEnd;\r\n const end = this._lerpEnd.clone();\r\n this._lerpStart = null;\r\n this._lerpEnd = null;\r\n this._currentLerpTime = 0;\r\n this._cameraMoving = false;\r\n // Order matters here, resolve should be last so any chain promises have a clean slate\r\n this._lerpResolve(end);\r\n }\r\n }\r\n if (this._isDoneShaking()) {\r\n this._isShaking = false;\r\n this._elapsedShakeTime = 0;\r\n this._shakeMagnitudeX = 0;\r\n this._shakeMagnitudeY = 0;\r\n this._shakeDuration = 0;\r\n this._xShake = 0;\r\n this._yShake = 0;\r\n }\r\n else {\r\n this._elapsedShakeTime += delta;\r\n this._xShake = ((Math.random() * this._shakeMagnitudeX) | 0) + 1;\r\n this._yShake = ((Math.random() * this._shakeMagnitudeY) | 0) + 1;\r\n }\r\n this.runStrategies(_engine, delta);\r\n this.updateViewport();\r\n // It's important to update the camera after strategies\r\n // This prevents jitter\r\n this.updateTransform();\r\n this._postupdate(_engine, delta);\r\n }\r\n /**\r\n * Applies the relevant transformations to the game canvas to \"move\" or apply effects to the Camera\r\n * @param ctx Canvas context to apply transformations\r\n */\r\n draw(ctx) {\r\n ctx.multiply(this.transform);\r\n }\r\n updateTransform() {\r\n // center the camera\r\n const newCanvasWidth = this._screen.resolution.width / this.zoom;\r\n const newCanvasHeight = this._screen.resolution.height / this.zoom;\r\n const cameraPos = vec(-this.x + newCanvasWidth / 2 + this._xShake, -this.y + newCanvasHeight / 2 + this._yShake);\r\n // Calculate camera transform\r\n this.transform.reset();\r\n this.transform.scale(this.zoom, this.zoom);\r\n // rotate about the focus\r\n this.transform.translate(newCanvasWidth / 2, newCanvasHeight / 2);\r\n this.transform.rotate(this.rotation);\r\n this.transform.translate(-newCanvasWidth / 2, -newCanvasHeight / 2);\r\n this.transform.translate(cameraPos.x, cameraPos.y);\r\n this.transform.inverse(this.inverse);\r\n }\r\n _isDoneShaking() {\r\n return !this._isShaking || this._elapsedShakeTime >= this._shakeDuration;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Trigger.ts\n\r\n\r\n\r\n\r\n\r\nconst TriggerEvents = {\r\n ExitTrigger: 'exittrigger',\r\n EnterTrigger: 'entertrigger'\r\n};\r\nconst triggerDefaults = {\r\n pos: Vector.Zero,\r\n width: 10,\r\n height: 10,\r\n visible: false,\r\n action: () => {\r\n return;\r\n },\r\n filter: () => true,\r\n repeat: -1\r\n};\r\n/**\r\n * Triggers are a method of firing arbitrary code on collision. These are useful\r\n * as 'buttons', 'switches', or to trigger effects in a game. By default triggers\r\n * are invisible, and can only be seen when [[Trigger.visible]] is set to `true`.\r\n */\r\nclass Trigger extends Actor {\r\n /**\r\n *\r\n * @param opts Trigger options\r\n */\r\n constructor(opts) {\r\n super({ x: opts.pos.x, y: opts.pos.y, width: opts.width, height: opts.height });\r\n this.events = new EventEmitter();\r\n /**\r\n * Action to fire when triggered by collision\r\n */\r\n this.action = () => {\r\n return;\r\n };\r\n /**\r\n * Filter to add additional granularity to action dispatch, if a filter is specified the action will only fire when\r\n * filter return true for the collided actor.\r\n */\r\n this.filter = () => true;\r\n /**\r\n * Number of times to repeat before killing the trigger,\r\n */\r\n this.repeat = -1;\r\n opts = {\r\n ...triggerDefaults,\r\n ...opts\r\n };\r\n this.filter = opts.filter || this.filter;\r\n this.repeat = opts.repeat || this.repeat;\r\n this.action = opts.action || this.action;\r\n if (opts.target) {\r\n this.target = opts.target;\r\n }\r\n this.graphics.visible = opts.visible;\r\n this.body.collisionType = CollisionType.Passive;\r\n this.events.on('collisionstart', (evt) => {\r\n if (this.filter(evt.other)) {\r\n this.emit('enter', new EnterTriggerEvent(this, evt.other));\r\n this._dispatchAction();\r\n // remove trigger if its done, -1 repeat forever\r\n if (this.repeat === 0) {\r\n this.kill();\r\n }\r\n }\r\n });\r\n this.events.on('collisionend', (evt) => {\r\n if (this.filter(evt.other)) {\r\n this.emit('exit', new ExitTriggerEvent(this, evt.other));\r\n }\r\n });\r\n }\r\n set target(target) {\r\n this._target = target;\r\n this.filter = (actor) => actor === target;\r\n }\r\n get target() {\r\n return this._target;\r\n }\r\n _initialize(engine) {\r\n super._initialize(engine);\r\n }\r\n _dispatchAction() {\r\n if (this.repeat !== 0) {\r\n this.action.call(this);\r\n this.repeat--;\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./EntityComponentSystem/System.ts\n/**\r\n * Enum that determines whether to run the system in the update or draw phase\r\n */\r\nvar SystemType;\r\n(function (SystemType) {\r\n SystemType[\"Update\"] = \"update\";\r\n SystemType[\"Draw\"] = \"draw\";\r\n})(SystemType || (SystemType = {}));\r\n/**\r\n * An Excalibur [[System]] that updates entities of certain types.\r\n * Systems are scene specific\r\n *\r\n * Excalibur Systems currently require at least 1 Component type to operated\r\n *\r\n * Multiple types are declared as a type union\r\n * For example:\r\n *\r\n * ```typescript\r\n * class MySystem extends System {\r\n * public readonly types = ['a', 'b'] as const;\r\n * public readonly systemType = SystemType.Update;\r\n * public update(entities: Entity) {\r\n * ...\r\n * }\r\n * }\r\n * ```\r\n */\r\nclass System {\r\n constructor() {\r\n /**\r\n * System can execute in priority order, by default all systems are priority 0. Lower values indicated higher priority.\r\n * For a system to execute before all other a lower priority value (-1 for example) must be set.\r\n * For a system to execute after all other a higher priority value (10 for example) must be set.\r\n */\r\n this.priority = 0;\r\n }\r\n /**\r\n * Systems observe when entities match their types or no longer match their types, override\r\n * @param _entityAddedOrRemoved\r\n */\r\n notify(_entityAddedOrRemoved) {\r\n // Override me\r\n }\r\n}\r\n/**\r\n * An [[Entity]] with [[Component]] types that matches a [[System]] types exists in the current scene.\r\n */\r\nclass AddedEntity {\r\n constructor(data) {\r\n this.data = data;\r\n this.type = 'Entity Added';\r\n }\r\n}\r\n/**\r\n * Type guard to check for AddedEntity messages\r\n * @param x\r\n */\r\nfunction isAddedSystemEntity(x) {\r\n return !!x && x.type === 'Entity Added';\r\n}\r\n/**\r\n * An [[Entity]] with [[Component]] types that no longer matches a [[System]] types exists in the current scene.\r\n */\r\nclass RemovedEntity {\r\n constructor(data) {\r\n this.data = data;\r\n this.type = 'Entity Removed';\r\n }\r\n}\r\n/**\r\n * type guard to check for the RemovedEntity message\r\n */\r\nfunction isRemoveSystemEntity(x) {\r\n return !!x && x.type === 'Entity Removed';\r\n}\r\n\n;// CONCATENATED MODULE: ./EntityComponentSystem/EntityManager.ts\n\r\n\r\n// Add/Remove entities and components\r\nclass EntityManager {\r\n constructor(_world) {\r\n this._world = _world;\r\n this.entities = [];\r\n this._entityIndex = {};\r\n this._entitiesToRemove = [];\r\n }\r\n /**\r\n * Runs the entity lifecycle\r\n * @param _context\r\n */\r\n updateEntities(_context, elapsed) {\r\n for (const entity of this.entities) {\r\n // TODO is this right?\r\n entity.update(_context.engine, elapsed);\r\n if (!entity.active) {\r\n this.removeEntity(entity);\r\n }\r\n }\r\n }\r\n findEntitiesForRemoval() {\r\n for (const entity of this.entities) {\r\n if (!entity.active) {\r\n this.removeEntity(entity);\r\n }\r\n }\r\n }\r\n /**\r\n * EntityManager observes changes on entities\r\n * @param message\r\n */\r\n notify(message) {\r\n if (isAddedComponent(message)) {\r\n // we don't need the component, it's already on the entity\r\n this._world.queryManager.addEntity(message.data.entity);\r\n }\r\n if (isRemovedComponent(message)) {\r\n this._world.queryManager.removeComponent(message.data.entity, message.data.component);\r\n }\r\n }\r\n /**\r\n * Adds an entity to be tracked by the EntityManager\r\n * @param entity\r\n */\r\n addEntity(entity) {\r\n entity.active = true;\r\n entity.scene = this._world.context;\r\n if (entity && !this._entityIndex[entity.id]) {\r\n this._entityIndex[entity.id] = entity;\r\n this.entities.push(entity);\r\n this._world.queryManager.addEntity(entity);\r\n entity.componentAdded$.register(this);\r\n entity.componentRemoved$.register(this);\r\n // if entity has children\r\n entity.children.forEach((c) => {\r\n c.scene = entity.scene;\r\n this.addEntity(c);\r\n });\r\n entity.childrenAdded$.register({\r\n notify: (e) => {\r\n this.addEntity(e);\r\n }\r\n });\r\n entity.childrenRemoved$.register({\r\n notify: (e) => {\r\n this.removeEntity(e, false);\r\n }\r\n });\r\n }\r\n }\r\n removeEntity(idOrEntity, deferred = true) {\r\n var _a;\r\n let id = 0;\r\n if (idOrEntity instanceof Entity) {\r\n id = idOrEntity.id;\r\n }\r\n else {\r\n id = idOrEntity;\r\n }\r\n const entity = this._entityIndex[id];\r\n if (entity && entity.active) {\r\n entity.active = false;\r\n }\r\n if (entity && deferred) {\r\n this._entitiesToRemove.push(entity);\r\n return;\r\n }\r\n delete this._entityIndex[id];\r\n if (entity) {\r\n entity.scene = null;\r\n removeItemFromArray(entity, this.entities);\r\n this._world.queryManager.removeEntity(entity);\r\n entity.componentAdded$.unregister(this);\r\n entity.componentRemoved$.unregister(this);\r\n // if entity has children\r\n entity.children.forEach((c) => {\r\n c.scene = null;\r\n this.removeEntity(c, deferred);\r\n });\r\n entity.childrenAdded$.clear();\r\n entity.childrenRemoved$.clear();\r\n // stats\r\n if ((_a = this._world.context) === null || _a === void 0 ? void 0 : _a.engine) {\r\n this._world.context.engine.stats.currFrame.actors.killed++;\r\n }\r\n }\r\n }\r\n processEntityRemovals() {\r\n for (const entity of this._entitiesToRemove) {\r\n if (entity.active) {\r\n continue;\r\n }\r\n this.removeEntity(entity, false);\r\n }\r\n this._entitiesToRemove.length = 0;\r\n }\r\n processComponentRemovals() {\r\n for (const entity of this.entities) {\r\n entity.processComponentRemoval();\r\n }\r\n }\r\n getById(id) {\r\n return this._entityIndex[id];\r\n }\r\n getByName(name) {\r\n return this.entities.filter(e => e.name === name);\r\n }\r\n clear() {\r\n for (const entity of this.entities) {\r\n this.removeEntity(entity);\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./EntityComponentSystem/Util.ts\nconst buildTypeKey = (types) => {\r\n const key = [...types].sort((a, b) => a.localeCompare(b)).join('+');\r\n return key;\r\n};\r\n\n;// CONCATENATED MODULE: ./EntityComponentSystem/Query.ts\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Represents query for entities that match a list of types that is cached and observable\r\n *\r\n * Queries can be strongly typed by supplying a type union in the optional type parameter\r\n * ```typescript\r\n * const queryAB = new ex.Query(['A', 'B']);\r\n * ```\r\n */\r\nclass Query extends Observable {\r\n get key() {\r\n if (this._key) {\r\n return this._key;\r\n }\r\n return (this._key = buildTypeKey(this.types));\r\n }\r\n constructor(types) {\r\n super();\r\n this._entities = [];\r\n if (types[0] instanceof Function) {\r\n this.types = types.map(T => (new T).type);\r\n }\r\n else {\r\n this.types = types;\r\n }\r\n }\r\n /**\r\n * Returns a list of entities that match the query\r\n *\r\n * @param sort Optional sorting function to sort entities returned from the query\r\n */\r\n getEntities(sort) {\r\n if (sort) {\r\n this._entities.sort(sort);\r\n }\r\n return this._entities;\r\n }\r\n /**\r\n * Add an entity to the query, will only be added if the entity matches the query types\r\n * @param entity\r\n */\r\n addEntity(entity) {\r\n if (!contains(this._entities, entity) && this.matches(entity)) {\r\n this._entities.push(entity);\r\n this.notifyAll(new AddedEntity(entity));\r\n }\r\n }\r\n /**\r\n * If the entity is part of the query it will be removed regardless of types\r\n * @param entity\r\n */\r\n removeEntity(entity) {\r\n if (removeItemFromArray(entity, this._entities)) {\r\n this.notifyAll(new RemovedEntity(entity));\r\n }\r\n }\r\n /**\r\n * Removes all entities and observers from the query\r\n */\r\n clear() {\r\n this._entities.length = 0;\r\n for (const observer of this.observers) {\r\n this.unregister(observer);\r\n }\r\n }\r\n matches(typesOrEntity) {\r\n let types = [];\r\n if (typesOrEntity instanceof Entity) {\r\n types = typesOrEntity.types;\r\n }\r\n else {\r\n types = typesOrEntity;\r\n }\r\n let matches = true;\r\n for (const type of this.types) {\r\n matches = matches && types.indexOf(type) > -1;\r\n if (!matches) {\r\n return false;\r\n }\r\n }\r\n return matches;\r\n }\r\n contain(type) {\r\n return this.types.indexOf(type) > -1;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./EntityComponentSystem/QueryManager.ts\n\r\n\r\n/**\r\n * The query manager is responsible for updating all queries when entities/components change\r\n */\r\nclass QueryManager {\r\n constructor(_world) {\r\n this._world = _world;\r\n this._queries = {};\r\n }\r\n /**\r\n * Adds a query to the manager and populates with any entities that match\r\n * @param query\r\n */\r\n _addQuery(query) {\r\n this._queries[buildTypeKey(query.types)] = query;\r\n for (const entity of this._world.entityManager.entities) {\r\n query.addEntity(entity);\r\n }\r\n }\r\n /**\r\n * Removes the query if there are no observers left\r\n * @param query\r\n */\r\n maybeRemoveQuery(query) {\r\n if (query.observers.length === 0) {\r\n query.clear();\r\n delete this._queries[buildTypeKey(query.types)];\r\n }\r\n }\r\n /**\r\n * Adds the entity to any matching query in the query manage\r\n * @param entity\r\n */\r\n addEntity(entity) {\r\n for (const queryType in this._queries) {\r\n if (this._queries[queryType]) {\r\n this._queries[queryType].addEntity(entity);\r\n }\r\n }\r\n }\r\n /**\r\n * Removes an entity from queries if the removed component disqualifies it\r\n * @param entity\r\n * @param component\r\n */\r\n removeComponent(entity, component) {\r\n for (const queryType in this._queries) {\r\n // If the component being removed from an entity is a part of a query,\r\n // it is now disqualified from that query, remove it\r\n if (this._queries[queryType].contain(component.type)) {\r\n this._queries[queryType].removeEntity(entity);\r\n }\r\n }\r\n }\r\n /**\r\n * Removes an entity from all queries it is currently a part of\r\n * @param entity\r\n */\r\n removeEntity(entity) {\r\n for (const queryType in this._queries) {\r\n this._queries[queryType].removeEntity(entity);\r\n }\r\n }\r\n /**\r\n * Creates a populated query and returns, if the query already exists that will be returned instead of a new instance\r\n * @param types\r\n */\r\n createQuery(types) {\r\n const maybeExistingQuery = this.getQuery(types);\r\n if (maybeExistingQuery) {\r\n return maybeExistingQuery;\r\n }\r\n const query = new Query(types);\r\n this._addQuery(query);\r\n return query;\r\n }\r\n /**\r\n * Retrieves an existing query by types if it exists otherwise returns null\r\n * @param types\r\n */\r\n getQuery(types) {\r\n const key = buildTypeKey(types);\r\n if (this._queries[key]) {\r\n return this._queries[key];\r\n }\r\n return null;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./EntityComponentSystem/SystemManager.ts\n\r\n/**\r\n * The SystemManager is responsible for keeping track of all systems in a scene.\r\n * Systems are scene specific\r\n */\r\nclass SystemManager {\r\n constructor(_world) {\r\n this._world = _world;\r\n /**\r\n * List of systems, to add a new system call [[SystemManager.addSystem]]\r\n */\r\n this.systems = [];\r\n this.initialized = false;\r\n }\r\n /**\r\n * Get a system registered in the manager by type\r\n * @param systemType\r\n */\r\n get(systemType) {\r\n return this.systems.find((s) => s instanceof systemType);\r\n }\r\n /**\r\n * Adds a system to the manager, it will now be updated every frame\r\n * @param system\r\n */\r\n addSystem(system) {\r\n // validate system has types\r\n if (!system.types || system.types.length === 0) {\r\n throw new Error(`Attempted to add a System without any types`);\r\n }\r\n const query = this._world.queryManager.createQuery(system.types);\r\n this.systems.push(system);\r\n this.systems.sort((a, b) => a.priority - b.priority);\r\n query.register(system);\r\n // If systems are added and the manager has already been init'd\r\n // then immediately init the system\r\n if (this.initialized && system.initialize) {\r\n system.initialize(this._world.context);\r\n }\r\n }\r\n /**\r\n * Removes a system from the manager, it will no longer be updated\r\n * @param system\r\n */\r\n removeSystem(system) {\r\n removeItemFromArray(system, this.systems);\r\n const query = this._world.queryManager.getQuery(system.types);\r\n if (query) {\r\n query.unregister(system);\r\n this._world.queryManager.maybeRemoveQuery(query);\r\n }\r\n }\r\n /**\r\n * Initialize all systems in the manager\r\n *\r\n * Systems added after initialize() will be initialized on add\r\n */\r\n initialize() {\r\n if (!this.initialized) {\r\n this.initialized = true;\r\n for (const s of this.systems) {\r\n if (s.initialize) {\r\n s.initialize(this._world.context);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Updates all systems\r\n * @param type whether this is an update or draw system\r\n * @param context context reference\r\n * @param delta time in milliseconds\r\n */\r\n updateSystems(type, context, delta) {\r\n const systems = this.systems.filter((s) => s.systemType === type);\r\n for (const s of systems) {\r\n if (s.preupdate) {\r\n s.preupdate(context, delta);\r\n }\r\n }\r\n for (const s of systems) {\r\n // Get entities that match the system types, pre-sort\r\n const entities = this._world.queryManager.getQuery(s.types).getEntities(s.sort);\r\n // Initialize entities if needed\r\n if (context instanceof Scene) {\r\n for (const entity of entities) {\r\n entity._initialize(context === null || context === void 0 ? void 0 : context.engine);\r\n }\r\n }\r\n s.update(entities, delta);\r\n }\r\n for (const s of systems) {\r\n if (s.postupdate) {\r\n s.postupdate(context, delta);\r\n }\r\n }\r\n }\r\n clear() {\r\n for (const system of this.systems) {\r\n this.removeSystem(system);\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./EntityComponentSystem/World.ts\n\r\n\r\n\r\n\r\n\r\n/**\r\n * The World is a self-contained entity component system for a particular context.\r\n */\r\nclass World {\r\n /**\r\n * The context type is passed to the system updates\r\n * @param context\r\n */\r\n constructor(context) {\r\n this.context = context;\r\n this.queryManager = new QueryManager(this);\r\n this.entityManager = new EntityManager(this);\r\n this.systemManager = new SystemManager(this);\r\n }\r\n /**\r\n * Update systems by type and time elapsed in milliseconds\r\n */\r\n update(type, delta) {\r\n if (type === SystemType.Update) {\r\n this.entityManager.updateEntities(this.context, delta);\r\n }\r\n this.systemManager.updateSystems(type, this.context, delta);\r\n this.entityManager.findEntitiesForRemoval();\r\n this.entityManager.processComponentRemovals();\r\n this.entityManager.processEntityRemovals();\r\n }\r\n add(entityOrSystem) {\r\n if (entityOrSystem instanceof Entity) {\r\n this.entityManager.addEntity(entityOrSystem);\r\n }\r\n if (entityOrSystem instanceof System) {\r\n this.systemManager.addSystem(entityOrSystem);\r\n }\r\n }\r\n remove(entityOrSystem, deferred = true) {\r\n if (entityOrSystem instanceof Entity) {\r\n this.entityManager.removeEntity(entityOrSystem, deferred);\r\n }\r\n if (entityOrSystem instanceof System) {\r\n this.systemManager.removeSystem(entityOrSystem);\r\n }\r\n }\r\n clearEntities() {\r\n this.entityManager.clear();\r\n }\r\n clearSystems() {\r\n this.systemManager.clear();\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Integrator.ts\n\r\nclass EulerIntegrator {\r\n static integrate(transform, motion, totalAcc, elapsedMs) {\r\n const seconds = elapsedMs / 1000;\r\n // This code looks a little wild, but it's to avoid creating any new Vector instances\r\n // integration is done in a tight loop so this is key to avoid GC'ing\r\n motion.vel.addEqual(totalAcc.scale(seconds, EulerIntegrator._ACC));\r\n transform.pos\r\n .add(motion.vel.scale(seconds, EulerIntegrator._VEL), EulerIntegrator._POS)\r\n .addEqual(totalAcc.scale(0.5 * seconds * seconds, EulerIntegrator._VEL_ACC));\r\n motion.angularVelocity += motion.torque * (1.0 / motion.inertia) * seconds;\r\n const rotation = transform.rotation + motion.angularVelocity * seconds;\r\n transform.scale.add(motion.scaleFactor.scale(seconds, this._SCALE_FACTOR), EulerIntegrator._SCALE);\r\n const tx = transform.get();\r\n tx.setTransform(EulerIntegrator._POS, rotation, EulerIntegrator._SCALE);\r\n }\r\n}\r\n// Scratch vectors to avoid allocation\r\nEulerIntegrator._POS = new Vector(0, 0);\r\nEulerIntegrator._SCALE = new Vector(1, 1);\r\nEulerIntegrator._ACC = new Vector(0, 0);\r\nEulerIntegrator._VEL = new Vector(0, 0);\r\nEulerIntegrator._VEL_ACC = new Vector(0, 0);\r\nEulerIntegrator._SCALE_FACTOR = new Vector(0, 0);\r\n\n;// CONCATENATED MODULE: ./Collision/MotionSystem.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass MotionSystem extends System {\r\n constructor() {\r\n super(...arguments);\r\n this.types = ['ex.transform', 'ex.motion'];\r\n this.systemType = SystemType.Update;\r\n this.priority = -1;\r\n }\r\n update(entities, elapsedMs) {\r\n let transform;\r\n let motion;\r\n for (let i = 0; i < entities.length; i++) {\r\n transform = entities[i].get(TransformComponent);\r\n motion = entities[i].get(MotionComponent);\r\n const optionalBody = entities[i].get(BodyComponent);\r\n if (optionalBody === null || optionalBody === void 0 ? void 0 : optionalBody.sleeping) {\r\n continue;\r\n }\r\n const totalAcc = motion.acc.clone();\r\n if ((optionalBody === null || optionalBody === void 0 ? void 0 : optionalBody.collisionType) === CollisionType.Active && (optionalBody === null || optionalBody === void 0 ? void 0 : optionalBody.useGravity)) {\r\n totalAcc.addEqual(Physics.gravity);\r\n }\r\n optionalBody === null || optionalBody === void 0 ? void 0 : optionalBody.captureOldTransform();\r\n // Update transform and motion based on Euler linear algebra\r\n EulerIntegrator.integrate(transform, motion, totalAcc, elapsedMs);\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Solver/ArcadeSolver.ts\n\r\n\r\n\r\n\r\n/**\r\n * ArcadeSolver is the default in Excalibur. It solves collisions so that there is no overlap between contacts,\r\n * and negates velocity along the collision normal.\r\n *\r\n * This is usually the type of collisions used for 2D games that don't need a more realistic collision simulation.\r\n *\r\n */\r\nclass ArcadeSolver {\r\n constructor() {\r\n this.directionMap = new Map();\r\n this.distanceMap = new Map();\r\n }\r\n solve(contacts) {\r\n // Events and init\r\n this.preSolve(contacts);\r\n // Remove any canceled contacts\r\n contacts = contacts.filter(c => !c.isCanceled());\r\n // Sort contacts by distance to avoid artifacts with seams\r\n // It's important to solve in a specific order\r\n contacts.sort((a, b) => {\r\n const aDist = this.distanceMap.get(a.id);\r\n const bDist = this.distanceMap.get(b.id);\r\n return aDist - bDist;\r\n });\r\n for (const contact of contacts) {\r\n // Solve position first in arcade\r\n this.solvePosition(contact);\r\n // Solve velocity second in arcade\r\n this.solveVelocity(contact);\r\n }\r\n // Events and any contact house-keeping the solver needs\r\n this.postSolve(contacts);\r\n return contacts;\r\n }\r\n preSolve(contacts) {\r\n const epsilon = .0001;\r\n for (const contact of contacts) {\r\n if (Math.abs(contact.mtv.x) < epsilon && Math.abs(contact.mtv.y) < epsilon) {\r\n // Cancel near 0 mtv collisions\r\n contact.cancel();\r\n continue;\r\n }\r\n const side = Side.fromDirection(contact.mtv);\r\n const mtv = contact.mtv.negate();\r\n const distance = contact.colliderA.worldPos.squareDistance(contact.colliderB.worldPos);\r\n this.distanceMap.set(contact.id, distance);\r\n // Publish collision events on both participants\r\n contact.colliderA.events.emit('precollision', new PreCollisionEvent(contact.colliderA, contact.colliderB, side, mtv));\r\n contact.colliderB.events.emit('precollision', new PreCollisionEvent(contact.colliderB, contact.colliderA, Side.getOpposite(side), mtv.negate()));\r\n }\r\n }\r\n postSolve(contacts) {\r\n var _a, _b;\r\n for (const contact of contacts) {\r\n if (contact.isCanceled()) {\r\n continue;\r\n }\r\n const colliderA = contact.colliderA;\r\n const colliderB = contact.colliderB;\r\n const bodyA = (_a = colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);\r\n const bodyB = (_b = colliderB.owner) === null || _b === void 0 ? void 0 : _b.get(BodyComponent);\r\n if (bodyA && bodyB) {\r\n if (bodyA.collisionType === CollisionType.Passive || bodyB.collisionType === CollisionType.Passive) {\r\n continue;\r\n }\r\n }\r\n const side = Side.fromDirection(contact.mtv);\r\n const mtv = contact.mtv.negate();\r\n // Publish collision events on both participants\r\n contact.colliderA.events.emit('postcollision', new PostCollisionEvent(contact.colliderA, contact.colliderB, side, mtv));\r\n contact.colliderB.events.emit('postcollision', new PostCollisionEvent(contact.colliderB, contact.colliderA, Side.getOpposite(side), mtv.negate()));\r\n }\r\n }\r\n solvePosition(contact) {\r\n var _a, _b;\r\n const epsilon = .0001;\r\n // if bounds no longer intersect skip to the next\r\n // this removes jitter from overlapping/stacked solid tiles or a wall of solid tiles\r\n if (!contact.colliderA.bounds.overlaps(contact.colliderB.bounds, epsilon)) {\r\n // Cancel the contact to prevent and solving\r\n contact.cancel();\r\n return;\r\n }\r\n if (Math.abs(contact.mtv.x) < epsilon && Math.abs(contact.mtv.y) < epsilon) {\r\n // Cancel near 0 mtv collisions\r\n contact.cancel();\r\n return;\r\n }\r\n let mtv = contact.mtv;\r\n const colliderA = contact.colliderA;\r\n const colliderB = contact.colliderB;\r\n const bodyA = (_a = colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);\r\n const bodyB = (_b = colliderB.owner) === null || _b === void 0 ? void 0 : _b.get(BodyComponent);\r\n if (bodyA && bodyB) {\r\n if (bodyA.collisionType === CollisionType.Passive || bodyB.collisionType === CollisionType.Passive) {\r\n return;\r\n }\r\n if (bodyA.collisionType === CollisionType.Active && bodyB.collisionType === CollisionType.Active) {\r\n // split overlaps if both are Active\r\n mtv = mtv.scale(0.5);\r\n }\r\n // Resolve overlaps\r\n if (bodyA.collisionType === CollisionType.Active) {\r\n bodyA.globalPos.x -= mtv.x;\r\n bodyA.globalPos.y -= mtv.y;\r\n colliderA.update(bodyA.transform.get());\r\n }\r\n if (bodyB.collisionType === CollisionType.Active) {\r\n bodyB.globalPos.x += mtv.x;\r\n bodyB.globalPos.y += mtv.y;\r\n colliderB.update(bodyB.transform.get());\r\n }\r\n }\r\n }\r\n solveVelocity(contact) {\r\n var _a, _b;\r\n if (contact.isCanceled()) {\r\n return;\r\n }\r\n const colliderA = contact.colliderA;\r\n const colliderB = contact.colliderB;\r\n const bodyA = (_a = colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);\r\n const bodyB = (_b = colliderB.owner) === null || _b === void 0 ? void 0 : _b.get(BodyComponent);\r\n if (bodyA && bodyB) {\r\n if (bodyA.collisionType === CollisionType.Passive || bodyB.collisionType === CollisionType.Passive) {\r\n return;\r\n }\r\n const normal = contact.normal;\r\n const opposite = normal.negate();\r\n if (bodyA.collisionType === CollisionType.Active) {\r\n // only adjust velocity if the contact normal is opposite to the current velocity\r\n // this avoids catching edges on a platform when sliding off\r\n if (bodyA.vel.normalize().dot(opposite) < 0) {\r\n // Cancel out velocity opposite direction of collision normal\r\n const velAdj = normal.scale(normal.dot(bodyA.vel.negate()));\r\n bodyA.vel = bodyA.vel.add(velAdj);\r\n }\r\n }\r\n if (bodyB.collisionType === CollisionType.Active) {\r\n // only adjust velocity if the contact normal is opposite to the current velocity\r\n // this avoids catching edges on a platform\r\n if (bodyB.vel.normalize().dot(normal) < 0) {\r\n const velAdj = opposite.scale(opposite.dot(bodyB.vel.negate()));\r\n bodyB.vel = bodyB.vel.add(velAdj);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Solver/ContactConstraintPoint.ts\n\r\n\r\n/**\r\n * Holds information about contact points, meant to be reused over multiple frames of contact\r\n */\r\nclass ContactConstraintPoint {\r\n constructor(point, local, contact) {\r\n this.point = point;\r\n this.local = local;\r\n this.contact = contact;\r\n /**\r\n * Impulse accumulated over time in normal direction\r\n */\r\n this.normalImpulse = 0;\r\n /**\r\n * Impulse accumulated over time in the tangent direction\r\n */\r\n this.tangentImpulse = 0;\r\n /**\r\n * Effective mass seen in the normal direction\r\n */\r\n this.normalMass = 0;\r\n /**\r\n * Effective mass seen in the tangent direction\r\n */\r\n this.tangentMass = 0;\r\n /**\r\n * Direction from center of mass of bodyA to contact point\r\n */\r\n this.aToContact = new Vector(0, 0);\r\n /**\r\n * Direction from center of mass of bodyB to contact point\r\n */\r\n this.bToContact = new Vector(0, 0);\r\n /**\r\n * Original contact velocity combined with bounciness\r\n */\r\n this.originalVelocityAndRestitution = 0;\r\n this.update();\r\n }\r\n /**\r\n * Updates the contact information\r\n */\r\n update() {\r\n var _a, _b;\r\n const bodyA = (_a = this.contact.colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);\r\n const bodyB = (_b = this.contact.colliderB.owner) === null || _b === void 0 ? void 0 : _b.get(BodyComponent);\r\n if (bodyA && bodyB) {\r\n const normal = this.contact.normal;\r\n const tangent = this.contact.tangent;\r\n this.aToContact = this.point.sub(bodyA.globalPos);\r\n this.bToContact = this.point.sub(bodyB.globalPos);\r\n const aToContactNormal = this.aToContact.cross(normal);\r\n const bToContactNormal = this.bToContact.cross(normal);\r\n this.normalMass =\r\n bodyA.inverseMass +\r\n bodyB.inverseMass +\r\n bodyA.inverseInertia * aToContactNormal * aToContactNormal +\r\n bodyB.inverseInertia * bToContactNormal * bToContactNormal;\r\n const aToContactTangent = this.aToContact.cross(tangent);\r\n const bToContactTangent = this.bToContact.cross(tangent);\r\n this.tangentMass =\r\n bodyA.inverseMass +\r\n bodyB.inverseMass +\r\n bodyA.inverseInertia * aToContactTangent * aToContactTangent +\r\n bodyB.inverseInertia * bToContactTangent * bToContactTangent;\r\n }\r\n return this;\r\n }\r\n /**\r\n * Returns the relative velocity between bodyA and bodyB\r\n */\r\n getRelativeVelocity() {\r\n var _a, _b;\r\n const bodyA = (_a = this.contact.colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);\r\n const bodyB = (_b = this.contact.colliderB.owner) === null || _b === void 0 ? void 0 : _b.get(BodyComponent);\r\n if (bodyA && bodyB) {\r\n // Relative velocity in linear terms\r\n // Angular to linear velocity formula -> omega = velocity/radius so omega x radius = velocity\r\n const velA = bodyA.vel.add(Vector.cross(bodyA.angularVelocity, this.aToContact));\r\n const velB = bodyB.vel.add(Vector.cross(bodyB.angularVelocity, this.bToContact));\r\n return velB.sub(velA);\r\n }\r\n return Vector.Zero;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/Solver/RealisticSolver.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass RealisticSolver {\r\n constructor() {\r\n this.lastFrameContacts = new Map();\r\n // map contact id to contact points\r\n this.idToContactConstraint = new Map();\r\n }\r\n getContactConstraints(id) {\r\n var _a;\r\n return (_a = this.idToContactConstraint.get(id)) !== null && _a !== void 0 ? _a : [];\r\n }\r\n solve(contacts) {\r\n // Events and init\r\n this.preSolve(contacts);\r\n // Remove any canceled contacts\r\n contacts = contacts.filter(c => !c.isCanceled());\r\n // Solve velocity first\r\n this.solveVelocity(contacts);\r\n // Solve position last because non-overlap is the most important\r\n this.solvePosition(contacts);\r\n // Events and any contact house-keeping the solver needs\r\n this.postSolve(contacts);\r\n return contacts;\r\n }\r\n preSolve(contacts) {\r\n var _a, _b, _c;\r\n const epsilon = .0001;\r\n for (const contact of contacts) {\r\n if (Math.abs(contact.mtv.x) < epsilon && Math.abs(contact.mtv.y) < epsilon) {\r\n // Cancel near 0 mtv collisions\r\n contact.cancel();\r\n continue;\r\n }\r\n // Publish collision events on both participants\r\n const side = Side.fromDirection(contact.mtv);\r\n contact.colliderA.events.emit('precollision', new PreCollisionEvent(contact.colliderA, contact.colliderB, side, contact.mtv));\r\n contact.colliderA.events.emit('beforecollisionresolve', new CollisionPreSolveEvent(contact.colliderA, contact.colliderB, side, contact.mtv, contact));\r\n contact.colliderB.events.emit('precollision', new PreCollisionEvent(contact.colliderB, contact.colliderA, Side.getOpposite(side), contact.mtv.negate()));\r\n contact.colliderB.events.emit('beforecollisionresolve', new CollisionPreSolveEvent(contact.colliderB, contact.colliderA, Side.getOpposite(side), contact.mtv.negate(), contact));\r\n // Match awake state for sleeping\r\n contact.matchAwake();\r\n }\r\n // Keep track of contacts that done\r\n const finishedContactIds = Array.from(this.idToContactConstraint.keys());\r\n for (const contact of contacts) {\r\n // Remove all current contacts that are not done\r\n const index = finishedContactIds.indexOf(contact.id);\r\n if (index > -1) {\r\n finishedContactIds.splice(index, 1);\r\n }\r\n const contactPoints = (_a = this.idToContactConstraint.get(contact.id)) !== null && _a !== void 0 ? _a : [];\r\n let pointIndex = 0;\r\n const bodyA = contact.colliderA.owner.get(BodyComponent);\r\n const bodyB = contact.colliderB.owner.get(BodyComponent);\r\n if (bodyA && bodyB) {\r\n for (const point of contact.points) {\r\n const normal = contact.normal;\r\n const tangent = contact.tangent;\r\n const aToContact = point.sub(bodyA.globalPos);\r\n const bToContact = point.sub(bodyB.globalPos);\r\n const aToContactNormal = aToContact.cross(normal);\r\n const bToContactNormal = bToContact.cross(normal);\r\n const normalMass = bodyA.inverseMass +\r\n bodyB.inverseMass +\r\n bodyA.inverseInertia * aToContactNormal * aToContactNormal +\r\n bodyB.inverseInertia * bToContactNormal * bToContactNormal;\r\n const aToContactTangent = aToContact.cross(tangent);\r\n const bToContactTangent = bToContact.cross(tangent);\r\n const tangentMass = bodyA.inverseMass +\r\n bodyB.inverseMass +\r\n bodyA.inverseInertia * aToContactTangent * aToContactTangent +\r\n bodyB.inverseInertia * bToContactTangent * bToContactTangent;\r\n // Preserve normal/tangent impulse by re-using the contact point if it's close\r\n if (contactPoints[pointIndex] && ((_c = (_b = contactPoints[pointIndex]) === null || _b === void 0 ? void 0 : _b.point) === null || _c === void 0 ? void 0 : _c.squareDistance(point)) < 4) {\r\n contactPoints[pointIndex].point = point;\r\n contactPoints[pointIndex].local = contact.localPoints[pointIndex];\r\n }\r\n else {\r\n // new contact if it's not close or doesn't exist\r\n contactPoints[pointIndex] = new ContactConstraintPoint(point, contact.localPoints[pointIndex], contact);\r\n }\r\n // Update contact point calculations\r\n contactPoints[pointIndex].aToContact = aToContact;\r\n contactPoints[pointIndex].bToContact = bToContact;\r\n contactPoints[pointIndex].normalMass = 1.0 / normalMass;\r\n contactPoints[pointIndex].tangentMass = 1.0 / tangentMass;\r\n // Calculate relative velocity before solving to accurately do restitution\r\n const restitution = bodyA.bounciness > bodyB.bounciness ? bodyA.bounciness : bodyB.bounciness;\r\n const relativeVelocity = contact.normal.dot(contactPoints[pointIndex].getRelativeVelocity());\r\n contactPoints[pointIndex].originalVelocityAndRestitution = 0;\r\n if (relativeVelocity < -0.1) { // TODO what's a good threshold here?\r\n contactPoints[pointIndex].originalVelocityAndRestitution = -restitution * relativeVelocity;\r\n }\r\n pointIndex++;\r\n }\r\n }\r\n this.idToContactConstraint.set(contact.id, contactPoints);\r\n }\r\n // Clean up any contacts that did not occur last frame\r\n for (const id of finishedContactIds) {\r\n this.idToContactConstraint.delete(id);\r\n }\r\n // Warm contacts with accumulated impulse\r\n // Useful for tall stacks\r\n if (Physics.warmStart) {\r\n this.warmStart(contacts);\r\n }\r\n else {\r\n for (const contact of contacts) {\r\n const contactPoints = this.getContactConstraints(contact.id);\r\n for (const point of contactPoints) {\r\n point.normalImpulse = 0;\r\n point.tangentImpulse = 0;\r\n }\r\n }\r\n }\r\n }\r\n postSolve(contacts) {\r\n for (const contact of contacts) {\r\n const bodyA = contact.colliderA.owner.get(BodyComponent);\r\n const bodyB = contact.colliderB.owner.get(BodyComponent);\r\n if (bodyA && bodyB) {\r\n // Skip post solve for active+passive collisions\r\n if (bodyA.collisionType === CollisionType.Passive || bodyB.collisionType === CollisionType.Passive) {\r\n continue;\r\n }\r\n // Update motion values for sleeping\r\n bodyA.updateMotion();\r\n bodyB.updateMotion();\r\n }\r\n // Publish collision events on both participants\r\n const side = Side.fromDirection(contact.mtv);\r\n contact.colliderA.events.emit('postcollision', new PostCollisionEvent(contact.colliderA, contact.colliderB, side, contact.mtv));\r\n contact.colliderA.events.emit('aftercollisionresolve', new CollisionPostSolveEvent(contact.colliderA, contact.colliderB, side, contact.mtv, contact));\r\n contact.colliderB.events.emit('postcollision', new PostCollisionEvent(contact.colliderB, contact.colliderA, Side.getOpposite(side), contact.mtv.negate()));\r\n contact.colliderB.events.emit('aftercollisionresolve', new CollisionPostSolveEvent(contact.colliderB, contact.colliderA, Side.getOpposite(side), contact.mtv.negate(), contact));\r\n }\r\n // Store contacts\r\n this.lastFrameContacts.clear();\r\n for (const c of contacts) {\r\n this.lastFrameContacts.set(c.id, c);\r\n }\r\n }\r\n /**\r\n * Warm up body's based on previous frame contact points\r\n * @param contacts\r\n */\r\n warmStart(contacts) {\r\n var _a, _b, _c;\r\n for (const contact of contacts) {\r\n const bodyA = (_a = contact.colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);\r\n const bodyB = (_b = contact.colliderB.owner) === null || _b === void 0 ? void 0 : _b.get(BodyComponent);\r\n if (bodyA && bodyB) {\r\n const contactPoints = (_c = this.idToContactConstraint.get(contact.id)) !== null && _c !== void 0 ? _c : [];\r\n for (const point of contactPoints) {\r\n if (Physics.warmStart) {\r\n const normalImpulse = contact.normal.scale(point.normalImpulse);\r\n const tangentImpulse = contact.tangent.scale(point.tangentImpulse);\r\n const impulse = normalImpulse.add(tangentImpulse);\r\n bodyA.applyImpulse(point.point, impulse.negate());\r\n bodyB.applyImpulse(point.point, impulse);\r\n }\r\n else {\r\n point.normalImpulse = 0;\r\n point.tangentImpulse = 0;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Iteratively solve the position overlap constraint\r\n * @param contacts\r\n */\r\n solvePosition(contacts) {\r\n var _a, _b, _c;\r\n for (let i = 0; i < Physics.positionIterations; i++) {\r\n for (const contact of contacts) {\r\n const bodyA = (_a = contact.colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);\r\n const bodyB = (_b = contact.colliderB.owner) === null || _b === void 0 ? void 0 : _b.get(BodyComponent);\r\n if (bodyA && bodyB) {\r\n // Skip solving active+passive\r\n if (bodyA.collisionType === CollisionType.Passive || bodyB.collisionType === CollisionType.Passive) {\r\n continue;\r\n }\r\n const constraints = (_c = this.idToContactConstraint.get(contact.id)) !== null && _c !== void 0 ? _c : [];\r\n for (const point of constraints) {\r\n const normal = contact.normal;\r\n const separation = CollisionJumpTable.FindContactSeparation(contact, point.local);\r\n const steeringConstant = Physics.steeringFactor; //0.2;\r\n const maxCorrection = -5;\r\n const slop = Physics.slop; //1;\r\n // Clamp to avoid over-correction\r\n // Remember that we are shooting for 0 overlap in the end\r\n const steeringForce = clamp(steeringConstant * (separation + slop), maxCorrection, 0);\r\n const impulse = normal.scale(-steeringForce * point.normalMass);\r\n // This is a pseudo impulse, meaning we aren't doing a real impulse calculation\r\n // We adjust position and rotation instead of doing the velocity\r\n if (bodyA.collisionType === CollisionType.Active) {\r\n // TODO make applyPseudoImpulse function?\r\n const impulseForce = impulse.negate().scale(bodyA.inverseMass);\r\n if (bodyA.limitDegreeOfFreedom.includes(DegreeOfFreedom.X)) {\r\n impulseForce.x = 0;\r\n }\r\n if (bodyA.limitDegreeOfFreedom.includes(DegreeOfFreedom.Y)) {\r\n impulseForce.y = 0;\r\n }\r\n bodyA.globalPos = bodyA.globalPos.add(impulseForce);\r\n if (!bodyA.limitDegreeOfFreedom.includes(DegreeOfFreedom.Rotation)) {\r\n bodyA.rotation -= point.aToContact.cross(impulse) * bodyA.inverseInertia;\r\n }\r\n }\r\n if (bodyB.collisionType === CollisionType.Active) {\r\n const impulseForce = impulse.scale(bodyB.inverseMass);\r\n if (bodyB.limitDegreeOfFreedom.includes(DegreeOfFreedom.X)) {\r\n impulseForce.x = 0;\r\n }\r\n if (bodyB.limitDegreeOfFreedom.includes(DegreeOfFreedom.Y)) {\r\n impulseForce.y = 0;\r\n }\r\n bodyB.globalPos = bodyB.globalPos.add(impulseForce);\r\n if (!bodyB.limitDegreeOfFreedom.includes(DegreeOfFreedom.Rotation)) {\r\n bodyB.rotation += point.bToContact.cross(impulse) * bodyB.inverseInertia;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n solveVelocity(contacts) {\r\n var _a, _b, _c;\r\n for (let i = 0; i < Physics.velocityIterations; i++) {\r\n for (const contact of contacts) {\r\n const bodyA = (_a = contact.colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);\r\n const bodyB = (_b = contact.colliderB.owner) === null || _b === void 0 ? void 0 : _b.get(BodyComponent);\r\n if (bodyA && bodyB) {\r\n // Skip solving active+passive\r\n if (bodyA.collisionType === CollisionType.Passive || bodyB.collisionType === CollisionType.Passive) {\r\n continue;\r\n }\r\n const friction = Math.min(bodyA.friction, bodyB.friction);\r\n const constraints = (_c = this.idToContactConstraint.get(contact.id)) !== null && _c !== void 0 ? _c : [];\r\n // Friction constraint\r\n for (const point of constraints) {\r\n const relativeVelocity = point.getRelativeVelocity();\r\n // Negate velocity in tangent direction to simulate friction\r\n const tangentVelocity = -relativeVelocity.dot(contact.tangent);\r\n let impulseDelta = tangentVelocity * point.tangentMass;\r\n // Clamping based in Erin Catto's GDC 2006 talk\r\n // Correct clamping https://github.com/erincatto/box2d-lite/blob/master/docs/GDC2006_Catto_Erin_PhysicsTutorial.pdf\r\n // Accumulated fiction impulse is always between -uMaxFriction < dT < uMaxFriction\r\n // But deltas can vary\r\n const maxFriction = friction * point.normalImpulse;\r\n const newImpulse = clamp(point.tangentImpulse + impulseDelta, -maxFriction, maxFriction);\r\n impulseDelta = newImpulse - point.tangentImpulse;\r\n point.tangentImpulse = newImpulse;\r\n const impulse = contact.tangent.scale(impulseDelta);\r\n bodyA.applyImpulse(point.point, impulse.negate());\r\n bodyB.applyImpulse(point.point, impulse);\r\n }\r\n // Bounce constraint\r\n for (const point of constraints) {\r\n // Need to recalc relative velocity because the previous step could have changed vel\r\n const relativeVelocity = point.getRelativeVelocity();\r\n // Compute impulse in normal direction\r\n const normalVelocity = relativeVelocity.dot(contact.normal);\r\n // Per Erin it is a mistake to apply the restitution inside the iteration\r\n // From Erin Catto's Box2D we keep original contact velocity and adjust by small impulses\r\n let impulseDelta = -point.normalMass * (normalVelocity - point.originalVelocityAndRestitution);\r\n // Clamping based in Erin Catto's GDC 2014 talk\r\n // Accumulated impulse stored in the contact is always positive (dV > 0)\r\n // But deltas can be negative\r\n const newImpulse = Math.max(point.normalImpulse + impulseDelta, 0);\r\n impulseDelta = newImpulse - point.normalImpulse;\r\n point.normalImpulse = newImpulse;\r\n const impulse = contact.normal.scale(impulseDelta);\r\n bodyA.applyImpulse(point.point, impulse.negate());\r\n bodyB.applyImpulse(point.point, impulse);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/CollisionSystem.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass CollisionSystem extends System {\r\n constructor(physics) {\r\n super();\r\n this.types = ['ex.transform', 'ex.motion', 'ex.collider'];\r\n this.systemType = SystemType.Update;\r\n this.priority = -1;\r\n this._realisticSolver = new RealisticSolver();\r\n this._arcadeSolver = new ArcadeSolver();\r\n this._lastFrameContacts = new Map();\r\n this._currentFrameContacts = new Map();\r\n this._processor = physics.collisionProcessor;\r\n this._trackCollider = (c) => this._processor.track(c);\r\n this._untrackCollider = (c) => this._processor.untrack(c);\r\n }\r\n notify(message) {\r\n if (isAddedSystemEntity(message)) {\r\n const colliderComponent = message.data.get(ColliderComponent);\r\n colliderComponent.$colliderAdded.subscribe(this._trackCollider);\r\n colliderComponent.$colliderRemoved.subscribe(this._untrackCollider);\r\n const collider = colliderComponent.get();\r\n if (collider) {\r\n this._processor.track(collider);\r\n }\r\n }\r\n else {\r\n const colliderComponent = message.data.get(ColliderComponent);\r\n const collider = colliderComponent.get();\r\n if (colliderComponent && collider) {\r\n this._processor.untrack(collider);\r\n }\r\n }\r\n }\r\n initialize(scene) {\r\n this._engine = scene.engine;\r\n }\r\n update(entities, elapsedMs) {\r\n var _a, _b, _c, _d;\r\n if (!Physics.enabled) {\r\n return;\r\n }\r\n // Collect up all the colliders and update them\r\n let colliders = [];\r\n for (const entity of entities) {\r\n const colliderComp = entity.get(ColliderComponent);\r\n const collider = colliderComp === null || colliderComp === void 0 ? void 0 : colliderComp.get();\r\n if (colliderComp && ((_a = colliderComp.owner) === null || _a === void 0 ? void 0 : _a.active) && collider) {\r\n colliderComp.update();\r\n if (collider instanceof CompositeCollider) {\r\n const compositeColliders = collider.getColliders();\r\n colliders = colliders.concat(compositeColliders);\r\n }\r\n else {\r\n colliders.push(collider);\r\n }\r\n }\r\n }\r\n // Update the spatial partitioning data structures\r\n // TODO if collider invalid it will break the processor\r\n // TODO rename \"update\" to something more specific\r\n this._processor.update(colliders);\r\n // Run broadphase on all colliders and locates potential collisions\r\n const pairs = this._processor.broadphase(colliders, elapsedMs);\r\n this._currentFrameContacts.clear();\r\n // Given possible pairs find actual contacts\r\n let contacts = this._processor.narrowphase(pairs, (_d = (_c = (_b = this._engine) === null || _b === void 0 ? void 0 : _b.debug) === null || _c === void 0 ? void 0 : _c.stats) === null || _d === void 0 ? void 0 : _d.currFrame);\r\n const solver = this.getSolver();\r\n // Solve, this resolves the position/velocity so entities aren't overlapping\r\n contacts = solver.solve(contacts);\r\n // Record contacts for start/end\r\n for (const contact of contacts) {\r\n // Process composite ids, things with the same composite id are treated as the same collider for start/end\r\n const index = contact.id.indexOf('|');\r\n if (index > 0) {\r\n const compositeId = contact.id.substring(index + 1);\r\n this._currentFrameContacts.set(compositeId, contact);\r\n }\r\n else {\r\n this._currentFrameContacts.set(contact.id, contact);\r\n }\r\n }\r\n // Emit contact start/end events\r\n this.runContactStartEnd();\r\n // reset the last frame cache\r\n this._lastFrameContacts.clear();\r\n // Keep track of collisions contacts that have started or ended\r\n this._lastFrameContacts = new Map(this._currentFrameContacts);\r\n }\r\n getSolver() {\r\n return Physics.collisionResolutionStrategy === CollisionResolutionStrategy.Realistic ? this._realisticSolver : this._arcadeSolver;\r\n }\r\n debug(ex) {\r\n this._processor.debug(ex);\r\n }\r\n runContactStartEnd() {\r\n // Composite collider collisions may have a duplicate id because we want to treat those as a singular start/end\r\n for (const [id, c] of this._currentFrameContacts) {\r\n // find all new contacts\r\n if (!this._lastFrameContacts.has(id)) {\r\n const colliderA = c.colliderA;\r\n const colliderB = c.colliderB;\r\n colliderA.events.emit('collisionstart', new CollisionStartEvent(colliderA, colliderB, c));\r\n colliderA.events.emit('contactstart', new ContactStartEvent(colliderA, colliderB, c));\r\n colliderB.events.emit('collisionstart', new CollisionStartEvent(colliderB, colliderA, c));\r\n colliderB.events.emit('contactstart', new ContactStartEvent(colliderB, colliderA, c));\r\n }\r\n }\r\n // find all contacts that have ceased\r\n for (const [id, c] of this._lastFrameContacts) {\r\n if (!this._currentFrameContacts.has(id)) {\r\n const colliderA = c.colliderA;\r\n const colliderB = c.colliderB;\r\n colliderA.events.emit('collisionend', new CollisionEndEvent(colliderA, colliderB));\r\n colliderA.events.emit('contactend', new ContactEndEvent(colliderA, colliderB));\r\n colliderB.events.emit('collisionend', new CollisionEndEvent(colliderB, colliderA));\r\n colliderB.events.emit('contactend', new ContactEndEvent(colliderB, colliderA));\r\n }\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Animation.ts\n\r\n\r\n\r\n\r\nvar AnimationDirection;\r\n(function (AnimationDirection) {\r\n /**\r\n * Animation is playing forwards\r\n */\r\n AnimationDirection[\"Forward\"] = \"forward\";\r\n /**\r\n * Animation is playing backwards\r\n */\r\n AnimationDirection[\"Backward\"] = \"backward\";\r\n})(AnimationDirection || (AnimationDirection = {}));\r\nvar AnimationStrategy;\r\n(function (AnimationStrategy) {\r\n /**\r\n * Animation ends without displaying anything\r\n */\r\n AnimationStrategy[\"End\"] = \"end\";\r\n /**\r\n * Animation loops to the first frame after the last frame\r\n */\r\n AnimationStrategy[\"Loop\"] = \"loop\";\r\n /**\r\n * Animation plays to the last frame, then backwards to the first frame, then repeats\r\n */\r\n AnimationStrategy[\"PingPong\"] = \"pingpong\";\r\n /**\r\n * Animation ends stopping on the last frame\r\n */\r\n AnimationStrategy[\"Freeze\"] = \"freeze\";\r\n})(AnimationStrategy || (AnimationStrategy = {}));\r\nconst AnimationEvents = {\r\n Frame: 'frame',\r\n Loop: 'loop',\r\n Ended: 'ended'\r\n};\r\n/**\r\n * Create an Animation given a list of [[Frame|frames]] in [[AnimationOptions]]\r\n *\r\n * To create an Animation from a [[SpriteSheet]], use [[Animation.fromSpriteSheet]]\r\n */\r\nclass Animation extends Graphic {\r\n constructor(options) {\r\n var _a, _b;\r\n super(options);\r\n this.events = new EventEmitter();\r\n this.frames = [];\r\n this.strategy = AnimationStrategy.Loop;\r\n this.frameDuration = 100;\r\n this.timeScale = 1;\r\n this._idempotencyToken = -1;\r\n this._firstTick = true;\r\n this._currentFrame = 0;\r\n this._timeLeftInFrame = 0;\r\n this._pingPongDirection = 1;\r\n this._done = false;\r\n this._playing = true;\r\n this._reversed = false;\r\n this.frames = options.frames;\r\n this.strategy = (_a = options.strategy) !== null && _a !== void 0 ? _a : this.strategy;\r\n this.frameDuration = options.totalDuration ? options.totalDuration / this.frames.length : (_b = options.frameDuration) !== null && _b !== void 0 ? _b : this.frameDuration;\r\n if (options.reverse) {\r\n this.reverse();\r\n }\r\n this.goToFrame(0);\r\n }\r\n clone() {\r\n return new Animation({\r\n frames: this.frames.map((f) => ({ ...f })),\r\n frameDuration: this.frameDuration,\r\n reverse: this._reversed,\r\n strategy: this.strategy,\r\n ...this.cloneGraphicOptions()\r\n });\r\n }\r\n get width() {\r\n const maybeFrame = this.currentFrame;\r\n if (maybeFrame) {\r\n return Math.abs(maybeFrame.graphic.width * this.scale.x);\r\n }\r\n return 0;\r\n }\r\n get height() {\r\n const maybeFrame = this.currentFrame;\r\n if (maybeFrame) {\r\n return Math.abs(maybeFrame.graphic.height * this.scale.y);\r\n }\r\n return 0;\r\n }\r\n /**\r\n * Create an Animation from a [[SpriteSheet]], a list of indices into the sprite sheet, a duration per frame\r\n * and optional [[AnimationStrategy]]\r\n *\r\n * Example:\r\n * ```typescript\r\n * const spriteSheet = SpriteSheet.fromImageSource({...});\r\n *\r\n * const anim = Animation.fromSpriteSheet(spriteSheet, range(0, 5), 200, AnimationStrategy.Loop);\r\n * ```\r\n *\r\n * @param spriteSheet\r\n * @param frameIndices\r\n * @param durationPerFrameMs\r\n * @param strategy\r\n */\r\n static fromSpriteSheet(spriteSheet, frameIndices, durationPerFrameMs, strategy = AnimationStrategy.Loop) {\r\n const maxIndex = spriteSheet.sprites.length - 1;\r\n const invalidIndices = frameIndices.filter((index) => index < 0 || index > maxIndex);\r\n if (invalidIndices.length) {\r\n Animation._LOGGER.warn(`Indices into SpriteSheet were provided that don\\'t exist: ${invalidIndices.join(',')} no frame will be shown`);\r\n }\r\n return new Animation({\r\n frames: spriteSheet.sprites\r\n .filter((_, index) => frameIndices.indexOf(index) > -1)\r\n .map((f) => ({\r\n graphic: f,\r\n duration: durationPerFrameMs\r\n })),\r\n strategy: strategy\r\n });\r\n }\r\n /**\r\n * Create an [[Animation]] from a [[SpriteSheet]] given a list of coordinates\r\n *\r\n * Example:\r\n * ```typescript\r\n * const spriteSheet = SpriteSheet.fromImageSource({...});\r\n *\r\n * const anim = Animation.fromSpriteSheetCoordinates({\r\n * spriteSheet,\r\n * frameCoordinates: [\r\n * {x: 0, y: 5, duration: 100},\r\n * {x: 1, y: 5, duration: 200},\r\n * {x: 2, y: 5, duration: 100},\r\n * {x: 3, y: 5, duration: 500}\r\n * ],\r\n * strategy: AnimationStrategy.PingPong\r\n * });\r\n * ```\r\n *\r\n * @param options\r\n * @returns Animation\r\n */\r\n static fromSpriteSheetCoordinates(options) {\r\n const { spriteSheet, frameCoordinates, durationPerFrameMs, strategy, reverse } = options;\r\n const defaultDuration = durationPerFrameMs !== null && durationPerFrameMs !== void 0 ? durationPerFrameMs : 100;\r\n const frames = [];\r\n for (const coord of frameCoordinates) {\r\n const { x, y, duration } = coord;\r\n const sprite = spriteSheet.getSprite(x, y);\r\n if (sprite) {\r\n frames.push({\r\n graphic: sprite,\r\n duration: duration !== null && duration !== void 0 ? duration : defaultDuration\r\n });\r\n }\r\n else {\r\n Animation._LOGGER.warn(`Skipping frame! SpriteSheet does not have coordinate (${x}, ${y}), please check your SpriteSheet to confirm that sprite exists`);\r\n }\r\n }\r\n return new Animation({\r\n frames,\r\n strategy,\r\n reverse\r\n });\r\n }\r\n /**\r\n * Returns the current Frame of the animation\r\n *\r\n * Use [[Animation.currentFrameIndex]] to get the frame number and\r\n * [[Animation.goToFrame]] to set the current frame index\r\n */\r\n get currentFrame() {\r\n if (this._currentFrame >= 0 && this._currentFrame < this.frames.length) {\r\n return this.frames[this._currentFrame];\r\n }\r\n return null;\r\n }\r\n /**\r\n * Returns the current frame index of the animation\r\n *\r\n * Use [[Animation.currentFrame]] to grab the current [[Frame]] object\r\n */\r\n get currentFrameIndex() {\r\n return this._currentFrame;\r\n }\r\n /**\r\n * Returns `true` if the animation is playing\r\n */\r\n get isPlaying() {\r\n return this._playing;\r\n }\r\n /**\r\n * Reverses the play direction of the Animation, this preserves the current frame\r\n */\r\n reverse() {\r\n // Don't mutate with the original frame list, create a copy\r\n this.frames = this.frames.slice().reverse();\r\n this._reversed = !this._reversed;\r\n }\r\n /**\r\n * Returns the current play direction of the animation\r\n */\r\n get direction() {\r\n // Keep logically consistent with ping-pong direction\r\n // If ping-pong is forward = 1 and reversed is true then we are logically reversed\r\n const reversed = (this._reversed && this._pingPongDirection === 1) ? true : false;\r\n return reversed ? AnimationDirection.Backward : AnimationDirection.Forward;\r\n }\r\n /**\r\n * Plays or resumes the animation from the current frame\r\n */\r\n play() {\r\n this._playing = true;\r\n }\r\n /**\r\n * Pauses the animation on the current frame\r\n */\r\n pause() {\r\n this._playing = false;\r\n this._firstTick = true; // firstTick must be set to emit the proper frame event\r\n }\r\n /**\r\n * Reset the animation back to the beginning, including if the animation were done\r\n */\r\n reset() {\r\n this._done = false;\r\n this._firstTick = true;\r\n this._currentFrame = 0;\r\n }\r\n /**\r\n * Returns `true` if the animation can end\r\n */\r\n get canFinish() {\r\n switch (this.strategy) {\r\n case AnimationStrategy.End:\r\n case AnimationStrategy.Freeze: {\r\n return true;\r\n }\r\n default: {\r\n return false;\r\n }\r\n }\r\n }\r\n /**\r\n * Returns `true` if the animation is done, for looping type animations\r\n * `ex.AnimationStrategy.PingPong` and `ex.AnimationStrategy.Loop` this will always return `false`\r\n *\r\n * See the `ex.Animation.canFinish()` method to know if an animation type can end\r\n */\r\n get done() {\r\n return this._done;\r\n }\r\n /**\r\n * Jump the animation immediately to a specific frame if it exists\r\n * @param frameNumber\r\n */\r\n goToFrame(frameNumber) {\r\n this._currentFrame = frameNumber;\r\n this._timeLeftInFrame = this.frameDuration;\r\n const maybeFrame = this.frames[this._currentFrame];\r\n if (maybeFrame && !this._done) {\r\n this._timeLeftInFrame = (maybeFrame === null || maybeFrame === void 0 ? void 0 : maybeFrame.duration) || this.frameDuration;\r\n this.events.emit('frame', { ...maybeFrame, frameIndex: this.currentFrameIndex });\r\n }\r\n }\r\n _nextFrame() {\r\n const currentFrame = this._currentFrame;\r\n if (this._done) {\r\n return currentFrame;\r\n }\r\n let next = -1;\r\n switch (this.strategy) {\r\n case AnimationStrategy.Loop: {\r\n next = (currentFrame + 1) % this.frames.length;\r\n if (next === 0) {\r\n this.events.emit('loop', this);\r\n }\r\n break;\r\n }\r\n case AnimationStrategy.End: {\r\n next = currentFrame + 1;\r\n if (next >= this.frames.length) {\r\n this._done = true;\r\n this._currentFrame = this.frames.length;\r\n this.events.emit('end', this);\r\n }\r\n break;\r\n }\r\n case AnimationStrategy.Freeze: {\r\n next = clamp(currentFrame + 1, 0, this.frames.length - 1);\r\n if (next >= this.frames.length - 1) {\r\n this._done = true;\r\n this.events.emit('end', this);\r\n }\r\n break;\r\n }\r\n case AnimationStrategy.PingPong: {\r\n if (currentFrame + this._pingPongDirection >= this.frames.length) {\r\n this._pingPongDirection = -1;\r\n this.events.emit('loop', this);\r\n }\r\n if (currentFrame + this._pingPongDirection < 0) {\r\n this._pingPongDirection = 1;\r\n this.events.emit('loop', this);\r\n }\r\n next = currentFrame + (this._pingPongDirection % this.frames.length);\r\n break;\r\n }\r\n }\r\n return next;\r\n }\r\n /**\r\n * Called internally by Excalibur to update the state of the animation potential update the current frame\r\n * @param elapsedMilliseconds Milliseconds elapsed\r\n * @param idempotencyToken Prevents double ticking in a frame by passing a unique token to the frame\r\n */\r\n tick(elapsedMilliseconds, idempotencyToken = 0) {\r\n if (this._idempotencyToken === idempotencyToken) {\r\n return;\r\n }\r\n this._idempotencyToken = idempotencyToken;\r\n if (!this._playing) {\r\n return;\r\n }\r\n // if it's the first frame emit frame event\r\n if (this._firstTick) {\r\n this._firstTick = false;\r\n this.events.emit('frame', { ...this.currentFrame, frameIndex: this.currentFrameIndex });\r\n }\r\n this._timeLeftInFrame -= elapsedMilliseconds * this.timeScale;\r\n if (this._timeLeftInFrame <= 0) {\r\n this.goToFrame(this._nextFrame());\r\n }\r\n }\r\n _drawImage(ctx, x, y) {\r\n if (this.currentFrame) {\r\n this.currentFrame.graphic.draw(ctx, x, y);\r\n }\r\n }\r\n}\r\nAnimation._LOGGER = Logger.getInstance();\r\n\n;// CONCATENATED MODULE: ./Graphics/GraphicsGroup.ts\n\r\n\r\n\r\nclass GraphicsGroup extends Graphic {\r\n constructor(options) {\r\n super(options);\r\n this.members = [];\r\n this.members = options.members;\r\n this._updateDimensions();\r\n }\r\n clone() {\r\n return new GraphicsGroup({\r\n members: [...this.members],\r\n ...this.cloneGraphicOptions()\r\n });\r\n }\r\n _updateDimensions() {\r\n let bb = new BoundingBox();\r\n for (const { graphic, pos } of this.members) {\r\n bb = graphic.localBounds.translate(pos).combine(bb);\r\n }\r\n this.width = bb.width;\r\n this.height = bb.height;\r\n return bb;\r\n }\r\n get localBounds() {\r\n let bb = new BoundingBox();\r\n for (const { graphic, pos } of this.members) {\r\n bb = graphic.localBounds.translate(pos).combine(bb);\r\n }\r\n return bb;\r\n }\r\n _isAnimationOrGroup(graphic) {\r\n return graphic instanceof Animation || graphic instanceof GraphicsGroup;\r\n }\r\n tick(elapsedMilliseconds, idempotencyToken) {\r\n for (const member of this.members) {\r\n const maybeAnimation = member.graphic;\r\n if (this._isAnimationOrGroup(maybeAnimation)) {\r\n maybeAnimation.tick(elapsedMilliseconds, idempotencyToken);\r\n }\r\n }\r\n }\r\n reset() {\r\n for (const member of this.members) {\r\n const maybeAnimation = member.graphic;\r\n if (this._isAnimationOrGroup(maybeAnimation)) {\r\n maybeAnimation.reset();\r\n }\r\n }\r\n }\r\n _preDraw(ex, x, y) {\r\n this._updateDimensions();\r\n super._preDraw(ex, x, y);\r\n }\r\n _drawImage(ex, x, y) {\r\n for (const member of this.members) {\r\n ex.save();\r\n ex.translate(x, y);\r\n member.graphic.draw(ex, member.pos.x, member.pos.y);\r\n if (this.showDebug) {\r\n /* istanbul ignore next */\r\n ex.debug.drawRect(0, 0, this.width, this.height);\r\n }\r\n ex.restore();\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Configurable.ts\n/**\r\n * Configurable helper extends base type and makes all properties available as option bag arguments\r\n * @internal\r\n * @param base\r\n */\r\nfunction Configurable(base) {\r\n return class extends base {\r\n assign(props) {\r\n //set the value of every property that was passed in,\r\n //if the constructor previously set this value, it will be overridden here\r\n for (const k in props) {\r\n // eslint-disable-next-line\r\n if (typeof this[k] !== 'function') {\r\n // eslint-disable-next-line\r\n this[k] = props[k];\r\n }\r\n }\r\n }\r\n constructor(...args) {\r\n super(...args);\r\n //get the number of arguments that aren't undefined. TS passes a value to all parameters\r\n //of whatever ctor is the implementation, so args.length doesn't work here.\r\n const size = args.filter(function (value) {\r\n return value !== undefined;\r\n }).length;\r\n if (size === 1 && args[0] && typeof args[0] === 'object' && !(args[0] instanceof Array)) {\r\n this.assign(args[0]);\r\n }\r\n }\r\n };\r\n}\r\n\n;// CONCATENATED MODULE: ./Particles.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * An enum that represents the types of emitter nozzles\r\n */\r\nvar EmitterType;\r\n(function (EmitterType) {\r\n /**\r\n * Constant for the circular emitter type\r\n */\r\n EmitterType[EmitterType[\"Circle\"] = 0] = \"Circle\";\r\n /**\r\n * Constant for the rectangular emitter type\r\n */\r\n EmitterType[EmitterType[\"Rectangle\"] = 1] = \"Rectangle\";\r\n})(EmitterType || (EmitterType = {}));\r\n/**\r\n * @hidden\r\n */\r\nclass ParticleImpl extends Entity {\r\n constructor(emitterOrConfig, life, opacity, beginColor, endColor, position, velocity, acceleration, startSize, endSize) {\r\n super();\r\n this.position = new Vector(0, 0);\r\n this.velocity = new Vector(0, 0);\r\n this.acceleration = new Vector(0, 0);\r\n this.particleRotationalVelocity = 0;\r\n this.currentRotation = 0;\r\n this.focus = null;\r\n this.focusAccel = 0;\r\n this.opacity = 1;\r\n this.beginColor = Color.White;\r\n this.endColor = Color.White;\r\n // Life is counted in ms\r\n this.life = 300;\r\n this.fadeFlag = false;\r\n // Color transitions\r\n this._rRate = 1;\r\n this._gRate = 1;\r\n this._bRate = 1;\r\n this._aRate = 0;\r\n this._currentColor = Color.White;\r\n this.emitter = null;\r\n this.particleSize = 5;\r\n this.particleSprite = null;\r\n this.sizeRate = 0;\r\n this.elapsedMultiplier = 0;\r\n this.visible = true;\r\n this.isOffscreen = false;\r\n let emitter = emitterOrConfig;\r\n if (emitter && !(emitterOrConfig instanceof ParticleEmitter)) {\r\n const config = emitterOrConfig;\r\n emitter = config.emitter;\r\n life = config.life;\r\n opacity = config.opacity;\r\n endColor = config.endColor;\r\n beginColor = config.beginColor;\r\n position = config.position;\r\n velocity = config.velocity;\r\n acceleration = config.acceleration;\r\n startSize = config.startSize;\r\n endSize = config.endSize;\r\n }\r\n this.emitter = emitter;\r\n this.life = life || this.life;\r\n this.opacity = opacity || this.opacity;\r\n this.endColor = endColor || this.endColor.clone();\r\n this.beginColor = beginColor || this.beginColor.clone();\r\n this._currentColor = this.beginColor.clone();\r\n if (this.emitter.particleTransform === ParticleTransform.Global) {\r\n const globalPos = this.emitter.transform.globalPos;\r\n this.position = (position || this.position).add(globalPos);\r\n this.velocity = (velocity || this.velocity).rotate(this.emitter.transform.globalRotation);\r\n }\r\n else {\r\n this.velocity = velocity || this.velocity;\r\n this.position = (position || this.position);\r\n }\r\n this.acceleration = acceleration || this.acceleration;\r\n this._rRate = (this.endColor.r - this.beginColor.r) / this.life;\r\n this._gRate = (this.endColor.g - this.beginColor.g) / this.life;\r\n this._bRate = (this.endColor.b - this.beginColor.b) / this.life;\r\n this._aRate = this.opacity / this.life;\r\n this.startSize = startSize || 0;\r\n this.endSize = endSize || 0;\r\n if (this.endSize > 0 && this.startSize > 0) {\r\n this.sizeRate = (this.endSize - this.startSize) / this.life;\r\n this.particleSize = this.startSize;\r\n }\r\n this.addComponent((this.transform = new TransformComponent()));\r\n this.addComponent((this.graphics = new GraphicsComponent()));\r\n this.transform.pos = this.position;\r\n this.transform.rotation = this.currentRotation;\r\n this.transform.scale = vec(1, 1); // TODO wut\r\n if (this.particleSprite) {\r\n this.graphics.opacity = this.opacity;\r\n this.graphics.use(this.particleSprite);\r\n }\r\n else {\r\n this.graphics.localBounds = BoundingBox.fromDimension(this.particleSize, this.particleSize, Vector.Half);\r\n this.graphics.onPostDraw = (ctx) => {\r\n ctx.save();\r\n this.graphics.opacity = this.opacity;\r\n const tmpColor = this._currentColor.clone();\r\n tmpColor.a = 1;\r\n ctx.debug.drawPoint(vec(0, 0), { color: tmpColor, size: this.particleSize });\r\n ctx.restore();\r\n };\r\n }\r\n }\r\n kill() {\r\n this.emitter.removeParticle(this);\r\n }\r\n update(_engine, delta) {\r\n this.life = this.life - delta;\r\n this.elapsedMultiplier = this.elapsedMultiplier + delta;\r\n if (this.life < 0) {\r\n this.kill();\r\n }\r\n if (this.fadeFlag) {\r\n this.opacity = clamp(this._aRate * this.life, 0.0001, 1);\r\n }\r\n if (this.startSize > 0 && this.endSize > 0) {\r\n this.particleSize = clamp(this.sizeRate * delta + this.particleSize, Math.min(this.startSize, this.endSize), Math.max(this.startSize, this.endSize));\r\n }\r\n this._currentColor.r = clamp(this._currentColor.r + this._rRate * delta, 0, 255);\r\n this._currentColor.g = clamp(this._currentColor.g + this._gRate * delta, 0, 255);\r\n this._currentColor.b = clamp(this._currentColor.b + this._bRate * delta, 0, 255);\r\n this._currentColor.a = clamp(this.opacity, 0.0001, 1);\r\n if (this.focus) {\r\n const accel = this.focus\r\n .sub(this.position)\r\n .normalize()\r\n .scale(this.focusAccel)\r\n .scale(delta / 1000);\r\n this.velocity = this.velocity.add(accel);\r\n }\r\n else {\r\n this.velocity = this.velocity.add(this.acceleration.scale(delta / 1000));\r\n }\r\n this.position = this.position.add(this.velocity.scale(delta / 1000));\r\n if (this.particleRotationalVelocity) {\r\n this.currentRotation = (this.currentRotation + (this.particleRotationalVelocity * delta) / 1000) % (2 * Math.PI);\r\n }\r\n this.transform.pos = this.position;\r\n this.transform.rotation = this.currentRotation;\r\n this.transform.scale = vec(1, 1); // todo wut\r\n this.graphics.opacity = this.opacity;\r\n }\r\n}\r\n/**\r\n * Particle is used in a [[ParticleEmitter]]\r\n */\r\nclass Particle extends Configurable(ParticleImpl) {\r\n constructor(emitterOrConfig, life, opacity, beginColor, endColor, position, velocity, acceleration, startSize, endSize) {\r\n super(emitterOrConfig, life, opacity, beginColor, endColor, position, velocity, acceleration, startSize, endSize);\r\n }\r\n}\r\nvar ParticleTransform;\r\n(function (ParticleTransform) {\r\n /**\r\n * [[ParticleTransform.Global]] is the default and emits particles as if\r\n * they were world space objects, useful for most effects.\r\n */\r\n ParticleTransform[\"Global\"] = \"global\";\r\n /**\r\n * [[ParticleTransform.Local]] particles are children of the emitter and move relative to the emitter\r\n * as they would in a parent/child actor relationship.\r\n */\r\n ParticleTransform[\"Local\"] = \"local\";\r\n})(ParticleTransform || (ParticleTransform = {}));\r\n/**\r\n * Using a particle emitter is a great way to create interesting effects\r\n * in your game, like smoke, fire, water, explosions, etc. `ParticleEmitter`\r\n * extend [[Actor]] allowing you to use all of the features that come with.\r\n */\r\nclass ParticleEmitter extends Actor {\r\n /**\r\n * Gets the opacity of each particle from 0 to 1.0\r\n */\r\n get opacity() {\r\n return super.graphics.opacity;\r\n }\r\n /**\r\n * Gets the opacity of each particle from 0 to 1.0\r\n */\r\n set opacity(opacity) {\r\n super.graphics.opacity = opacity;\r\n }\r\n /**\r\n * Gets or sets the sprite that a particle should use\r\n */\r\n get particleSprite() {\r\n return this._sprite;\r\n }\r\n set particleSprite(val) {\r\n if (val) {\r\n this._sprite = val;\r\n }\r\n }\r\n /**\r\n * @param config particle emitter options bag\r\n */\r\n constructor(config) {\r\n var _a, _b;\r\n super({ width: (_a = config.width) !== null && _a !== void 0 ? _a : 0, height: (_b = config.height) !== null && _b !== void 0 ? _b : 0 });\r\n this._particlesToEmit = 0;\r\n this.numParticles = 0;\r\n /**\r\n * Gets or sets the isEmitting flag\r\n */\r\n this.isEmitting = true;\r\n /**\r\n * Gets or sets the backing particle collection\r\n */\r\n this.particles = [];\r\n /**\r\n * Gets or sets the backing deadParticle collection\r\n */\r\n this.deadParticles = [];\r\n /**\r\n * Gets or sets the minimum particle velocity\r\n */\r\n this.minVel = 0;\r\n /**\r\n * Gets or sets the maximum particle velocity\r\n */\r\n this.maxVel = 0;\r\n /**\r\n * Gets or sets the acceleration vector for all particles\r\n */\r\n this.acceleration = new Vector(0, 0);\r\n /**\r\n * Gets or sets the minimum angle in radians\r\n */\r\n this.minAngle = 0;\r\n /**\r\n * Gets or sets the maximum angle in radians\r\n */\r\n this.maxAngle = 0;\r\n /**\r\n * Gets or sets the emission rate for particles (particles/sec)\r\n */\r\n this.emitRate = 1; //particles/sec\r\n /**\r\n * Gets or sets the life of each particle in milliseconds\r\n */\r\n this.particleLife = 2000;\r\n /**\r\n * Gets or sets the fade flag which causes particles to gradually fade out over the course of their life.\r\n */\r\n this.fadeFlag = false;\r\n /**\r\n * Gets or sets the optional focus where all particles should accelerate towards\r\n */\r\n this.focus = null;\r\n /**\r\n * Gets or sets the acceleration for focusing particles if a focus has been specified\r\n */\r\n this.focusAccel = null;\r\n /**\r\n * Gets or sets the optional starting size for the particles\r\n */\r\n this.startSize = null;\r\n /**\r\n * Gets or sets the optional ending size for the particles\r\n */\r\n this.endSize = null;\r\n /**\r\n * Gets or sets the minimum size of all particles\r\n */\r\n this.minSize = 5;\r\n /**\r\n * Gets or sets the maximum size of all particles\r\n */\r\n this.maxSize = 5;\r\n /**\r\n * Gets or sets the beginning color of all particles\r\n */\r\n this.beginColor = Color.White;\r\n /**\r\n * Gets or sets the ending color of all particles\r\n */\r\n this.endColor = Color.White;\r\n this._sprite = null;\r\n /**\r\n * Gets or sets the emitter type for the particle emitter\r\n */\r\n this.emitterType = EmitterType.Rectangle;\r\n /**\r\n * Gets or sets the emitter radius, only takes effect when the [[emitterType]] is [[EmitterType.Circle]]\r\n */\r\n this.radius = 0;\r\n /**\r\n * Gets or sets the particle rotational speed velocity\r\n */\r\n this.particleRotationalVelocity = 0;\r\n /**\r\n * Indicates whether particles should start with a random rotation\r\n */\r\n this.randomRotation = false;\r\n /**\r\n * Gets or sets the emitted particle transform style, [[ParticleTransform.Global]] is the default and emits particles as if\r\n * they were world space objects, useful for most effects.\r\n *\r\n * If set to [[ParticleTransform.Local]] particles are children of the emitter and move relative to the emitter\r\n * as they would in a parent/child actor relationship.\r\n */\r\n this.particleTransform = ParticleTransform.Global;\r\n const { x, y, pos, isEmitting, minVel, maxVel, acceleration, minAngle, maxAngle, emitRate, particleLife, opacity, fadeFlag, focus, focusAccel, startSize, endSize, minSize, maxSize, beginColor, endColor, particleSprite, emitterType, radius, particleRotationalVelocity, particleTransform, randomRotation, random } = { ...config };\r\n this.pos = pos !== null && pos !== void 0 ? pos : vec(x !== null && x !== void 0 ? x : 0, y !== null && y !== void 0 ? y : 0);\r\n this.isEmitting = isEmitting !== null && isEmitting !== void 0 ? isEmitting : this.isEmitting;\r\n this.minVel = minVel !== null && minVel !== void 0 ? minVel : this.minVel;\r\n this.maxVel = maxVel !== null && maxVel !== void 0 ? maxVel : this.maxVel;\r\n this.acceleration = acceleration !== null && acceleration !== void 0 ? acceleration : this.acceleration;\r\n this.minAngle = minAngle !== null && minAngle !== void 0 ? minAngle : this.minAngle;\r\n this.maxAngle = maxAngle !== null && maxAngle !== void 0 ? maxAngle : this.maxAngle;\r\n this.emitRate = emitRate !== null && emitRate !== void 0 ? emitRate : this.emitRate;\r\n this.particleLife = particleLife !== null && particleLife !== void 0 ? particleLife : this.particleLife;\r\n this.opacity = opacity !== null && opacity !== void 0 ? opacity : this.opacity;\r\n this.fadeFlag = fadeFlag !== null && fadeFlag !== void 0 ? fadeFlag : this.fadeFlag;\r\n this.focus = focus !== null && focus !== void 0 ? focus : this.focus;\r\n this.focusAccel = focusAccel !== null && focusAccel !== void 0 ? focusAccel : this.focusAccel;\r\n this.startSize = startSize !== null && startSize !== void 0 ? startSize : this.startSize;\r\n this.endSize = endSize !== null && endSize !== void 0 ? endSize : this.endSize;\r\n this.minSize = minSize !== null && minSize !== void 0 ? minSize : this.minSize;\r\n this.maxSize = maxSize !== null && maxSize !== void 0 ? maxSize : this.maxSize;\r\n this.beginColor = beginColor !== null && beginColor !== void 0 ? beginColor : this.beginColor;\r\n this.endColor = endColor !== null && endColor !== void 0 ? endColor : this.endColor;\r\n this.particleSprite = particleSprite !== null && particleSprite !== void 0 ? particleSprite : this.particleSprite;\r\n this.emitterType = emitterType !== null && emitterType !== void 0 ? emitterType : this.emitterType;\r\n this.radius = radius !== null && radius !== void 0 ? radius : this.radius;\r\n this.particleRotationalVelocity = particleRotationalVelocity !== null && particleRotationalVelocity !== void 0 ? particleRotationalVelocity : this.particleRotationalVelocity;\r\n this.randomRotation = randomRotation !== null && randomRotation !== void 0 ? randomRotation : this.randomRotation;\r\n this.particleTransform = particleTransform !== null && particleTransform !== void 0 ? particleTransform : this.particleTransform;\r\n this.body.collisionType = CollisionType.PreventCollision;\r\n this.random = random !== null && random !== void 0 ? random : new Random();\r\n }\r\n removeParticle(particle) {\r\n this.deadParticles.push(particle);\r\n }\r\n /**\r\n * Causes the emitter to emit particles\r\n * @param particleCount Number of particles to emit right now\r\n */\r\n emitParticles(particleCount) {\r\n var _a;\r\n for (let i = 0; i < particleCount; i++) {\r\n const p = this._createParticle();\r\n this.particles.push(p);\r\n if ((_a = this === null || this === void 0 ? void 0 : this.scene) === null || _a === void 0 ? void 0 : _a.world) {\r\n if (this.particleTransform === ParticleTransform.Global) {\r\n this.scene.world.add(p);\r\n }\r\n else {\r\n this.addChild(p);\r\n }\r\n }\r\n }\r\n }\r\n clearParticles() {\r\n this.particles.length = 0;\r\n }\r\n // Creates a new particle given the constraints of the emitter\r\n _createParticle() {\r\n // todo implement emitter constraints;\r\n let ranX = 0;\r\n let ranY = 0;\r\n const angle = randomInRange(this.minAngle, this.maxAngle, this.random);\r\n const vel = randomInRange(this.minVel, this.maxVel, this.random);\r\n const size = this.startSize || randomInRange(this.minSize, this.maxSize, this.random);\r\n const dx = vel * Math.cos(angle);\r\n const dy = vel * Math.sin(angle);\r\n if (this.emitterType === EmitterType.Rectangle) {\r\n ranX = randomInRange(0, this.width, this.random);\r\n ranY = randomInRange(0, this.height, this.random);\r\n }\r\n else if (this.emitterType === EmitterType.Circle) {\r\n const radius = randomInRange(0, this.radius, this.random);\r\n ranX = radius * Math.cos(angle);\r\n ranY = radius * Math.sin(angle);\r\n }\r\n const p = new Particle(this, this.particleLife, this.opacity, this.beginColor, this.endColor, new Vector(ranX, ranY), new Vector(dx, dy), this.acceleration, this.startSize, this.endSize);\r\n p.fadeFlag = this.fadeFlag;\r\n p.particleSize = size;\r\n if (this.particleSprite) {\r\n p.particleSprite = this.particleSprite;\r\n p.graphics.opacity = this.opacity;\r\n p.graphics.use(this._sprite);\r\n }\r\n p.particleRotationalVelocity = this.particleRotationalVelocity;\r\n if (this.randomRotation) {\r\n p.currentRotation = randomInRange(0, Math.PI * 2, this.random);\r\n }\r\n if (this.focus) {\r\n p.focus = this.focus.add(new Vector(this.pos.x, this.pos.y));\r\n p.focusAccel = this.focusAccel;\r\n }\r\n return p;\r\n }\r\n update(engine, delta) {\r\n var _a;\r\n super.update(engine, delta);\r\n if (this.isEmitting) {\r\n this._particlesToEmit += this.emitRate * (delta / 1000);\r\n if (this._particlesToEmit > 1.0) {\r\n this.emitParticles(Math.floor(this._particlesToEmit));\r\n this._particlesToEmit = this._particlesToEmit - Math.floor(this._particlesToEmit);\r\n }\r\n }\r\n // deferred removal\r\n for (let i = 0; i < this.deadParticles.length; i++) {\r\n removeItemFromArray(this.deadParticles[i], this.particles);\r\n if ((_a = this === null || this === void 0 ? void 0 : this.scene) === null || _a === void 0 ? void 0 : _a.world) {\r\n this.scene.world.remove(this.deadParticles[i], false);\r\n }\r\n }\r\n this.deadParticles.length = 0;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/GraphicsSystem.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass GraphicsSystem extends System {\r\n constructor() {\r\n super(...arguments);\r\n this.types = ['ex.transform', 'ex.graphics'];\r\n this.systemType = SystemType.Draw;\r\n this.priority = 0;\r\n this._token = 0;\r\n this._sortedTransforms = [];\r\n this._zHasChanged = false;\r\n this._zIndexUpdate = () => {\r\n this._zHasChanged = true;\r\n };\r\n }\r\n get sortedTransforms() {\r\n return this._sortedTransforms;\r\n }\r\n initialize(scene) {\r\n this._camera = scene.camera;\r\n this._engine = scene.engine;\r\n }\r\n preupdate() {\r\n // Graphics context could be switched to fallback in a new frame\r\n this._graphicsContext = this._engine.graphicsContext;\r\n if (this._zHasChanged) {\r\n this._sortedTransforms.sort((a, b) => {\r\n return a.z - b.z;\r\n });\r\n this._zHasChanged = false;\r\n }\r\n }\r\n notify(entityAddedOrRemoved) {\r\n if (isAddedSystemEntity(entityAddedOrRemoved)) {\r\n const tx = entityAddedOrRemoved.data.get(TransformComponent);\r\n this._sortedTransforms.push(tx);\r\n tx.zIndexChanged$.subscribe(this._zIndexUpdate);\r\n this._zHasChanged = true;\r\n }\r\n else {\r\n const tx = entityAddedOrRemoved.data.get(TransformComponent);\r\n tx.zIndexChanged$.unsubscribe(this._zIndexUpdate);\r\n const index = this._sortedTransforms.indexOf(tx);\r\n if (index > -1) {\r\n this._sortedTransforms.splice(index, 1);\r\n }\r\n }\r\n }\r\n update(_entities, delta) {\r\n this._token++;\r\n let graphics;\r\n FontCache.checkAndClearCache();\r\n // This is a performance enhancement, most things are in world space\r\n // so if we can only do this once saves a ton of transform updates\r\n this._graphicsContext.save();\r\n if (this._camera) {\r\n this._camera.draw(this._graphicsContext);\r\n }\r\n for (const transform of this._sortedTransforms) {\r\n const entity = transform.owner;\r\n // If the entity is offscreen skip\r\n if (entity.hasTag('ex.offscreen')) {\r\n continue;\r\n }\r\n graphics = entity.get(GraphicsComponent);\r\n // Exit if graphics set to not visible\r\n if (!graphics.visible) {\r\n continue;\r\n }\r\n // This optionally sets our camera based on the entity coord plan (world vs. screen)\r\n if (transform.coordPlane === CoordPlane.Screen) {\r\n this._graphicsContext.restore();\r\n }\r\n this._graphicsContext.save();\r\n if (transform.coordPlane === CoordPlane.Screen) {\r\n this._graphicsContext.translate(this._engine.screen.contentArea.left, this._engine.screen.contentArea.top);\r\n }\r\n // Tick any graphics state (but only once) for animations and graphics groups\r\n graphics.update(delta, this._token);\r\n // Apply parallax\r\n const parallax = entity.get(ParallaxComponent);\r\n if (parallax) {\r\n // We use the Tiled formula\r\n // https://doc.mapeditor.org/en/latest/manual/layers/#parallax-scrolling-factor\r\n // cameraPos * (1 - parallaxFactor)\r\n const oneMinusFactor = Vector.One.sub(parallax.parallaxFactor);\r\n const parallaxOffset = this._camera.pos.scale(oneMinusFactor);\r\n this._graphicsContext.translate(parallaxOffset.x, parallaxOffset.y);\r\n }\r\n // Position the entity + estimate lag\r\n this._applyTransform(entity);\r\n // If there is a material enable it on the context\r\n if (graphics.material) {\r\n this._graphicsContext.material = graphics.material;\r\n }\r\n // Optionally run the onPreDraw graphics lifecycle draw\r\n if (graphics.onPreDraw) {\r\n graphics.onPreDraw(this._graphicsContext, delta);\r\n }\r\n // TODO remove this hack on the particle redo\r\n const particleOpacity = (entity instanceof Particle) ? entity.opacity : 1;\r\n this._graphicsContext.opacity *= graphics.opacity * particleOpacity;\r\n // Draw the graphics component\r\n this._drawGraphicsComponent(graphics);\r\n // Optionally run the onPostDraw graphics lifecycle draw\r\n if (graphics.onPostDraw) {\r\n graphics.onPostDraw(this._graphicsContext, delta);\r\n }\r\n this._graphicsContext.restore();\r\n // Reset the transform back to the original world space\r\n if (transform.coordPlane === CoordPlane.Screen) {\r\n this._graphicsContext.save();\r\n if (this._camera) {\r\n this._camera.draw(this._graphicsContext);\r\n }\r\n }\r\n }\r\n this._graphicsContext.restore();\r\n }\r\n _drawGraphicsComponent(graphicsComponent) {\r\n var _a, _b;\r\n if (graphicsComponent.visible) {\r\n const flipHorizontal = graphicsComponent.flipHorizontal;\r\n const flipVertical = graphicsComponent.flipVertical;\r\n for (const layer of graphicsComponent.layers.get()) {\r\n for (const { graphic, options } of layer.graphics) {\r\n let anchor = graphicsComponent.anchor;\r\n let offset = graphicsComponent.offset;\r\n // handle layer specific overrides\r\n if (options === null || options === void 0 ? void 0 : options.anchor) {\r\n anchor = options.anchor;\r\n }\r\n if (options === null || options === void 0 ? void 0 : options.offset) {\r\n offset = options.offset;\r\n }\r\n // See https://github.com/excaliburjs/Excalibur/pull/619 for discussion on this formula\r\n const offsetX = -graphic.width * anchor.x + offset.x;\r\n const offsetY = -graphic.height * anchor.y + offset.y;\r\n const oldFlipHorizontal = graphic.flipHorizontal;\r\n const oldFlipVertical = graphic.flipVertical;\r\n if (flipHorizontal || flipVertical) {\r\n // flip any currently flipped graphics\r\n graphic.flipHorizontal = flipHorizontal ? !oldFlipHorizontal : oldFlipHorizontal;\r\n graphic.flipVertical = flipVertical ? !oldFlipVertical : oldFlipVertical;\r\n }\r\n graphic === null || graphic === void 0 ? void 0 : graphic.draw(this._graphicsContext, offsetX + layer.offset.x, offsetY + layer.offset.y);\r\n if (flipHorizontal || flipVertical) {\r\n graphic.flipHorizontal = oldFlipHorizontal;\r\n graphic.flipVertical = oldFlipVertical;\r\n }\r\n if (((_a = this._engine) === null || _a === void 0 ? void 0 : _a.isDebug) && this._engine.debug.graphics.showBounds) {\r\n const offset = vec(offsetX + layer.offset.x, offsetY + layer.offset.y);\r\n if (graphic instanceof GraphicsGroup) {\r\n for (const g of graphic.members) {\r\n (_b = g.graphic) === null || _b === void 0 ? void 0 : _b.localBounds.translate(offset.add(g.pos)).draw(this._graphicsContext, this._engine.debug.graphics.boundsColor);\r\n }\r\n }\r\n else {\r\n /* istanbul ignore next */\r\n graphic === null || graphic === void 0 ? void 0 : graphic.localBounds.translate(offset).draw(this._graphicsContext, this._engine.debug.graphics.boundsColor);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * This applies the current entity transform to the graphics context\r\n * @param entity\r\n */\r\n _applyTransform(entity) {\r\n const ancestors = entity.getAncestors();\r\n for (const ancestor of ancestors) {\r\n const transform = ancestor === null || ancestor === void 0 ? void 0 : ancestor.get(TransformComponent);\r\n const optionalBody = ancestor === null || ancestor === void 0 ? void 0 : ancestor.get(BodyComponent);\r\n let interpolatedPos = transform.pos;\r\n let interpolatedScale = transform.scale;\r\n let interpolatedRotation = transform.rotation;\r\n if (optionalBody) {\r\n if (this._engine.fixedUpdateFps &&\r\n optionalBody.__oldTransformCaptured &&\r\n optionalBody.enableFixedUpdateInterpolate) {\r\n // Interpolate graphics if needed\r\n const blend = this._engine.currentFrameLagMs / (1000 / this._engine.fixedUpdateFps);\r\n interpolatedPos = transform.pos.scale(blend).add(optionalBody.oldPos.scale(1.0 - blend));\r\n interpolatedScale = transform.scale.scale(blend).add(optionalBody.oldScale.scale(1.0 - blend));\r\n // Rotational lerp https://stackoverflow.com/a/30129248\r\n const cosine = (1.0 - blend) * Math.cos(optionalBody.oldRotation) + blend * Math.cos(transform.rotation);\r\n const sine = (1.0 - blend) * Math.sin(optionalBody.oldRotation) + blend * Math.sin(transform.rotation);\r\n interpolatedRotation = Math.atan2(sine, cosine);\r\n }\r\n }\r\n if (transform) {\r\n this._graphicsContext.z = transform.z;\r\n this._graphicsContext.translate(interpolatedPos.x, interpolatedPos.y);\r\n this._graphicsContext.scale(interpolatedScale.x, interpolatedScale.y);\r\n this._graphicsContext.rotate(interpolatedRotation);\r\n }\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Debug/DebugSystem.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass DebugSystem extends System {\r\n constructor() {\r\n super(...arguments);\r\n this.types = ['ex.transform'];\r\n this.systemType = SystemType.Draw;\r\n this.priority = 999; // lowest priority\r\n }\r\n initialize(scene) {\r\n this._graphicsContext = scene.engine.graphicsContext;\r\n this._camera = scene.camera;\r\n this._engine = scene.engine;\r\n this._collisionSystem = scene.world.systemManager.get(CollisionSystem);\r\n }\r\n update(entities, _delta) {\r\n var _a;\r\n if (!this._engine.isDebug) {\r\n return;\r\n }\r\n const filterSettings = this._engine.debug.filter;\r\n let id;\r\n let name;\r\n const entitySettings = this._engine.debug.entity;\r\n let tx;\r\n const txSettings = this._engine.debug.transform;\r\n let motion;\r\n const motionSettings = this._engine.debug.motion;\r\n let colliderComp;\r\n const colliderSettings = this._engine.debug.collider;\r\n const physicsSettings = this._engine.debug.physics;\r\n let graphics;\r\n const graphicsSettings = this._engine.debug.graphics;\r\n let debugDraw;\r\n let body;\r\n const bodySettings = this._engine.debug.body;\r\n const cameraSettings = this._engine.debug.camera;\r\n for (const entity of entities) {\r\n if (entity.hasTag('offscreen')) {\r\n // skip offscreen entities\r\n continue;\r\n }\r\n if (entity instanceof Particle) {\r\n // Particles crush the renderer :(\r\n continue;\r\n }\r\n if (filterSettings.useFilter) {\r\n const allIds = filterSettings.ids.length === 0;\r\n const idMatch = allIds || filterSettings.ids.includes(entity.id);\r\n if (!idMatch) {\r\n continue;\r\n }\r\n const allNames = filterSettings.nameQuery === '';\r\n const nameMatch = allNames || entity.name.includes(filterSettings.nameQuery);\r\n if (!nameMatch) {\r\n continue;\r\n }\r\n }\r\n let cursor = Vector.Zero;\r\n const lineHeight = vec(0, 16);\r\n id = entity.id;\r\n name = entity.name;\r\n tx = entity.get(TransformComponent);\r\n // This optionally sets our camera based on the entity coord plan (world vs. screen)\r\n this._pushCameraTransform(tx);\r\n this._graphicsContext.save();\r\n this._applyTransform(entity);\r\n if (tx) {\r\n if (txSettings.showAll || txSettings.showPosition) {\r\n this._graphicsContext.debug.drawPoint(Vector.Zero, { size: 4, color: txSettings.positionColor });\r\n }\r\n if (txSettings.showAll || txSettings.showPositionLabel) {\r\n this._graphicsContext.debug.drawText(`pos${tx.pos.toString(2)}`, cursor);\r\n cursor = cursor.add(lineHeight);\r\n }\r\n if (txSettings.showAll || txSettings.showZIndex) {\r\n this._graphicsContext.debug.drawText(`z(${tx.z.toFixed(1)})`, cursor);\r\n cursor = cursor.add(lineHeight);\r\n }\r\n if (entitySettings.showAll || entitySettings.showId) {\r\n this._graphicsContext.debug.drawText(`id(${id}) ${entity.parent ? 'child of id(' + ((_a = entity.parent) === null || _a === void 0 ? void 0 : _a.id) + ')' : ''}`, cursor);\r\n cursor = cursor.add(lineHeight);\r\n }\r\n if (entitySettings.showAll || entitySettings.showName) {\r\n this._graphicsContext.debug.drawText(`name(${name})`, cursor);\r\n cursor = cursor.add(lineHeight);\r\n }\r\n if (txSettings.showAll || txSettings.showRotation) {\r\n this._graphicsContext.drawLine(Vector.Zero, Vector.fromAngle(tx.rotation).scale(50).add(Vector.Zero), txSettings.rotationColor, 2);\r\n this._graphicsContext.debug.drawText(`rot deg(${toDegrees(tx.rotation).toFixed(2)})`, cursor);\r\n cursor = cursor.add(lineHeight);\r\n }\r\n if (txSettings.showAll || txSettings.showScale) {\r\n this._graphicsContext.drawLine(Vector.Zero, tx.scale.add(Vector.Zero), txSettings.scaleColor, 2);\r\n }\r\n }\r\n graphics = entity.get(GraphicsComponent);\r\n if (graphics) {\r\n if (graphicsSettings.showAll || graphicsSettings.showBounds) {\r\n const bounds = graphics.localBounds;\r\n bounds.draw(this._graphicsContext, graphicsSettings.boundsColor);\r\n }\r\n }\r\n debugDraw = entity.get(DebugGraphicsComponent);\r\n if (debugDraw) {\r\n if (!debugDraw.useTransform) {\r\n this._graphicsContext.restore();\r\n }\r\n debugDraw.draw(this._graphicsContext);\r\n if (!debugDraw.useTransform) {\r\n this._graphicsContext.save();\r\n this._applyTransform(entity);\r\n }\r\n }\r\n body = entity.get(BodyComponent);\r\n if (body) {\r\n if (bodySettings.showAll || bodySettings.showCollisionGroup) {\r\n this._graphicsContext.debug.drawText(`collision group(${body.group.name})`, cursor);\r\n cursor = cursor.add(lineHeight);\r\n }\r\n if (bodySettings.showAll || bodySettings.showCollisionType) {\r\n this._graphicsContext.debug.drawText(`collision type(${body.collisionType})`, cursor);\r\n cursor = cursor.add(lineHeight);\r\n }\r\n if (bodySettings.showAll || bodySettings.showMass) {\r\n this._graphicsContext.debug.drawText(`mass(${body.mass})`, cursor);\r\n cursor = cursor.add(lineHeight);\r\n }\r\n if (bodySettings.showAll || bodySettings.showMotion) {\r\n this._graphicsContext.debug.drawText(`motion(${body.sleepMotion})`, cursor);\r\n cursor = cursor.add(lineHeight);\r\n }\r\n if (bodySettings.showAll || bodySettings.showSleeping) {\r\n this._graphicsContext.debug.drawText(`sleeping(${body.canSleep ? body.sleeping : 'cant sleep'})`, cursor);\r\n cursor = cursor.add(lineHeight);\r\n }\r\n }\r\n this._graphicsContext.restore();\r\n motion = entity.get(MotionComponent);\r\n if (motion) {\r\n if (motionSettings.showAll || motionSettings.showVelocity) {\r\n this._graphicsContext.debug.drawText(`vel${motion.vel.toString(2)}`, cursor.add(tx.globalPos));\r\n this._graphicsContext.drawLine(tx.globalPos, tx.globalPos.add(motion.vel), motionSettings.velocityColor, 2);\r\n cursor = cursor.add(lineHeight);\r\n }\r\n if (motionSettings.showAll || motionSettings.showAcceleration) {\r\n this._graphicsContext.drawLine(tx.globalPos, tx.globalPos.add(motion.acc), motionSettings.accelerationColor, 2);\r\n }\r\n }\r\n // Colliders live in world space already so after the restore()\r\n colliderComp = entity.get(ColliderComponent);\r\n if (colliderComp) {\r\n const collider = colliderComp.get();\r\n if ((colliderSettings.showAll || colliderSettings.showGeometry) && collider) {\r\n collider.debug(this._graphicsContext, colliderSettings.geometryColor);\r\n }\r\n if (colliderSettings.showAll || colliderSettings.showBounds) {\r\n if (collider instanceof CompositeCollider) {\r\n const colliders = collider.getColliders();\r\n for (const collider of colliders) {\r\n const bounds = collider.bounds;\r\n const pos = vec(bounds.left, bounds.top);\r\n this._graphicsContext.debug.drawRect(pos.x, pos.y, bounds.width, bounds.height, { color: colliderSettings.boundsColor });\r\n if (colliderSettings.showAll || colliderSettings.showOwner) {\r\n this._graphicsContext.debug.drawText(`owner id(${collider.owner.id})`, pos);\r\n }\r\n }\r\n colliderComp.bounds.draw(this._graphicsContext, colliderSettings.boundsColor);\r\n }\r\n else if (collider) {\r\n const bounds = colliderComp.bounds;\r\n const pos = vec(bounds.left, bounds.top);\r\n this._graphicsContext.debug.drawRect(pos.x, pos.y, bounds.width, bounds.height, { color: colliderSettings.boundsColor });\r\n if (colliderSettings.showAll || colliderSettings.showOwner) {\r\n this._graphicsContext.debug.drawText(`owner id(${colliderComp.owner.id})`, pos);\r\n }\r\n }\r\n }\r\n }\r\n this._popCameraTransform(tx);\r\n }\r\n this._graphicsContext.save();\r\n this._camera.draw(this._graphicsContext);\r\n if (physicsSettings.showAll || physicsSettings.showBroadphaseSpacePartitionDebug) {\r\n this._collisionSystem.debug(this._graphicsContext);\r\n }\r\n if (physicsSettings.showAll || physicsSettings.showCollisionContacts || physicsSettings.showCollisionNormals) {\r\n for (const [_, contact] of this._engine.debug.stats.currFrame.physics.contacts) {\r\n if (physicsSettings.showAll || physicsSettings.showCollisionContacts) {\r\n for (const point of contact.points) {\r\n this._graphicsContext.debug.drawPoint(point, { size: 5, color: physicsSettings.collisionContactColor });\r\n }\r\n }\r\n if (physicsSettings.showAll || physicsSettings.showCollisionNormals) {\r\n for (const point of contact.points) {\r\n this._graphicsContext.debug.drawLine(point, contact.normal.scale(30).add(point), {\r\n color: physicsSettings.collisionNormalColor\r\n });\r\n }\r\n }\r\n }\r\n }\r\n this._graphicsContext.restore();\r\n if (cameraSettings) {\r\n this._graphicsContext.save();\r\n this._camera.draw(this._graphicsContext);\r\n if (cameraSettings.showAll || cameraSettings.showFocus) {\r\n this._graphicsContext.drawCircle(this._camera.pos, 4, cameraSettings.focusColor);\r\n }\r\n if (cameraSettings.showAll || cameraSettings.showZoom) {\r\n this._graphicsContext.debug.drawText(`zoom(${this._camera.zoom})`, this._camera.pos);\r\n }\r\n this._graphicsContext.restore();\r\n }\r\n this._graphicsContext.flush();\r\n }\r\n /**\r\n * This applies the current entity transform to the graphics context\r\n * @param entity\r\n */\r\n _applyTransform(entity) {\r\n const ancestors = entity.getAncestors();\r\n for (const ancestor of ancestors) {\r\n const transform = ancestor === null || ancestor === void 0 ? void 0 : ancestor.get(TransformComponent);\r\n if (transform) {\r\n this._graphicsContext.translate(transform.pos.x, transform.pos.y);\r\n this._graphicsContext.scale(transform.scale.x, transform.scale.y);\r\n this._graphicsContext.rotate(transform.rotation);\r\n }\r\n }\r\n }\r\n /**\r\n * Applies the current camera transform if in world coordinates\r\n * @param transform\r\n */\r\n _pushCameraTransform(transform) {\r\n // Establish camera offset per entity\r\n if (transform.coordPlane === CoordPlane.World) {\r\n this._graphicsContext.save();\r\n if (this._camera) {\r\n this._camera.draw(this._graphicsContext);\r\n }\r\n }\r\n }\r\n /**\r\n * Resets the current camera transform if in world coordinates\r\n * @param transform\r\n */\r\n _popCameraTransform(transform) {\r\n if (transform.coordPlane === CoordPlane.World) {\r\n // Apply camera world offset\r\n this._graphicsContext.restore();\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Input/PointerSystem.ts\n\r\n\r\n\r\n\r\n\r\n/**\r\n * The PointerSystem is responsible for dispatching pointer events to entities\r\n * that need them.\r\n *\r\n * The PointerSystem can be optionally configured by the [[PointerComponent]], by default Entities use\r\n * the [[Collider]]'s shape for pointer events.\r\n */\r\nclass PointerSystem extends System {\r\n constructor() {\r\n super(...arguments);\r\n this.types = ['ex.transform', 'ex.pointer'];\r\n this.systemType = SystemType.Update;\r\n this.priority = -1;\r\n /**\r\n * Optionally override component configuration for all entities\r\n */\r\n this.overrideUseColliderShape = false;\r\n /**\r\n * Optionally override component configuration for all entities\r\n */\r\n this.overrideUseGraphicsBounds = false;\r\n this.lastFrameEntityToPointers = new Map();\r\n this.currentFrameEntityToPointers = new Map();\r\n this._sortedTransforms = [];\r\n this._sortedEntities = [];\r\n this._zHasChanged = false;\r\n this._zIndexUpdate = () => {\r\n this._zHasChanged = true;\r\n };\r\n }\r\n initialize(scene) {\r\n this._engine = scene.engine;\r\n }\r\n preupdate() {\r\n // event receiver might change per frame\r\n this._receiver = this._engine.input.pointers;\r\n if (this._zHasChanged) {\r\n this._sortedTransforms.sort((a, b) => {\r\n return b.z - a.z;\r\n });\r\n this._sortedEntities = this._sortedTransforms.map(t => t.owner);\r\n this._zHasChanged = false;\r\n }\r\n }\r\n notify(entityAddedOrRemoved) {\r\n if (isAddedSystemEntity(entityAddedOrRemoved)) {\r\n const tx = entityAddedOrRemoved.data.get(TransformComponent);\r\n this._sortedTransforms.push(tx);\r\n this._sortedEntities.push(tx.owner);\r\n tx.zIndexChanged$.subscribe(this._zIndexUpdate);\r\n this._zHasChanged = true;\r\n }\r\n else {\r\n const tx = entityAddedOrRemoved.data.get(TransformComponent);\r\n tx.zIndexChanged$.unsubscribe(this._zIndexUpdate);\r\n const index = this._sortedTransforms.indexOf(tx);\r\n if (index > -1) {\r\n this._sortedTransforms.splice(index, 1);\r\n this._sortedEntities.splice(index, 1);\r\n }\r\n }\r\n }\r\n entityCurrentlyUnderPointer(entity, pointerId) {\r\n return this.currentFrameEntityToPointers.has(entity.id) &&\r\n this.currentFrameEntityToPointers.get(entity.id).includes(pointerId);\r\n }\r\n entityWasUnderPointer(entity, pointerId) {\r\n return this.lastFrameEntityToPointers.has(entity.id) &&\r\n this.lastFrameEntityToPointers.get(entity.id).includes(pointerId);\r\n }\r\n entered(entity, pointerId) {\r\n return this.entityCurrentlyUnderPointer(entity, pointerId) &&\r\n !this.lastFrameEntityToPointers.has(entity.id);\r\n }\r\n left(entity, pointerId) {\r\n return !this.currentFrameEntityToPointers.has(entity.id) &&\r\n this.entityWasUnderPointer(entity, pointerId);\r\n }\r\n addPointerToEntity(entity, pointerId) {\r\n if (!this.currentFrameEntityToPointers.has(entity.id)) {\r\n this.currentFrameEntityToPointers.set(entity.id, [pointerId]);\r\n return;\r\n }\r\n const pointers = this.currentFrameEntityToPointers.get(entity.id);\r\n this.currentFrameEntityToPointers.set(entity.id, pointers.concat(pointerId));\r\n }\r\n update(_entities) {\r\n // Locate all the pointer/entity mappings\r\n this._processPointerToEntity(this._sortedEntities);\r\n // Dispatch pointer events on entities\r\n this._dispatchEvents(this._sortedEntities);\r\n // Clear last frame's events\r\n this._receiver.update();\r\n this.lastFrameEntityToPointers.clear();\r\n this.lastFrameEntityToPointers = new Map(this.currentFrameEntityToPointers);\r\n this.currentFrameEntityToPointers.clear();\r\n this._receiver.clear();\r\n }\r\n _processPointerToEntity(entities) {\r\n var _a;\r\n let transform;\r\n let collider;\r\n let graphics;\r\n let pointer;\r\n // TODO probably a spatial partition optimization here to quickly query bounds for pointer\r\n // doesn't seem to cause issues tho for perf\r\n // Pre-process find entities under pointers\r\n for (const entity of entities) {\r\n transform = entity.get(TransformComponent);\r\n pointer = (_a = entity.get(PointerComponent)) !== null && _a !== void 0 ? _a : new PointerComponent;\r\n // Check collider contains pointer\r\n collider = entity.get(ColliderComponent);\r\n if (collider && (pointer.useColliderShape || this.overrideUseColliderShape)) {\r\n collider.update();\r\n const geom = collider.get();\r\n if (geom) {\r\n for (const [pointerId, pos] of this._receiver.currentFramePointerCoords.entries()) {\r\n if (geom.contains(transform.coordPlane === CoordPlane.World ? pos.worldPos : pos.screenPos)) {\r\n this.addPointerToEntity(entity, pointerId);\r\n }\r\n }\r\n }\r\n }\r\n // Check graphics contains pointer\r\n graphics = entity.get(GraphicsComponent);\r\n if (graphics && (pointer.useGraphicsBounds || this.overrideUseGraphicsBounds)) {\r\n const graphicBounds = graphics.localBounds.transform(transform.get().matrix);\r\n for (const [pointerId, pos] of this._receiver.currentFramePointerCoords.entries()) {\r\n if (graphicBounds.contains(transform.coordPlane === CoordPlane.World ? pos.worldPos : pos.screenPos)) {\r\n this.addPointerToEntity(entity, pointerId);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n _processDownAndEmit(entity) {\r\n const lastDownPerPointer = new Map();\r\n // Loop through down and dispatch to entities\r\n for (const event of this._receiver.currentFrameDown) {\r\n if (event.active && entity.active && this.entityCurrentlyUnderPointer(entity, event.pointerId)) {\r\n entity.events.emit('pointerdown', event);\r\n if (this._receiver.isDragStart(event.pointerId)) {\r\n entity.events.emit('pointerdragstart', event);\r\n }\r\n }\r\n lastDownPerPointer.set(event.pointerId, event);\r\n }\r\n return lastDownPerPointer;\r\n }\r\n _processUpAndEmit(entity) {\r\n const lastUpPerPointer = new Map();\r\n // Loop through up and dispatch to entities\r\n for (const event of this._receiver.currentFrameUp) {\r\n if (event.active && entity.active && this.entityCurrentlyUnderPointer(entity, event.pointerId)) {\r\n entity.events.emit('pointerup', event);\r\n if (this._receiver.isDragEnd(event.pointerId)) {\r\n entity.events.emit('pointerdragend', event);\r\n }\r\n }\r\n lastUpPerPointer.set(event.pointerId, event);\r\n }\r\n return lastUpPerPointer;\r\n }\r\n _processMoveAndEmit(entity) {\r\n const lastMovePerPointer = new Map();\r\n // Loop through move and dispatch to entities\r\n for (const event of this._receiver.currentFrameMove) {\r\n if (event.active && entity.active && this.entityCurrentlyUnderPointer(entity, event.pointerId)) {\r\n // move\r\n entity.events.emit('pointermove', event);\r\n if (this._receiver.isDragging(event.pointerId)) {\r\n entity.events.emit('pointerdragmove', event);\r\n }\r\n }\r\n lastMovePerPointer.set(event.pointerId, event);\r\n }\r\n return lastMovePerPointer;\r\n }\r\n _processEnterLeaveAndEmit(entity, lastUpDownMoveEvents) {\r\n // up, down, and move are considered for enter and leave\r\n for (const event of lastUpDownMoveEvents) {\r\n // enter\r\n if (event.active && entity.active && this.entered(entity, event.pointerId)) {\r\n entity.events.emit('pointerenter', event);\r\n if (this._receiver.isDragging(event.pointerId)) {\r\n entity.events.emit('pointerdragenter', event);\r\n }\r\n break;\r\n }\r\n if (event.active && entity.active &&\r\n // leave can happen on move\r\n (this.left(entity, event.pointerId) ||\r\n // or leave can happen on pointer up\r\n (this.entityCurrentlyUnderPointer(entity, event.pointerId) && event.type === 'up'))) {\r\n entity.events.emit('pointerleave', event);\r\n if (this._receiver.isDragging(event.pointerId)) {\r\n entity.events.emit('pointerdragleave', event);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n _processCancelAndEmit(entity) {\r\n // cancel\r\n for (const event of this._receiver.currentFrameCancel) {\r\n if (event.active && entity.active && this.entityCurrentlyUnderPointer(entity, event.pointerId)) {\r\n entity.events.emit('pointercancel', event);\r\n }\r\n }\r\n }\r\n _processWheelAndEmit(entity) {\r\n // wheel\r\n for (const event of this._receiver.currentFrameWheel) {\r\n // Currently the wheel only fires under the primary pointer '0'\r\n if (event.active && entity.active && this.entityCurrentlyUnderPointer(entity, 0)) {\r\n entity.events.emit('pointerwheel', event);\r\n }\r\n }\r\n }\r\n _dispatchEvents(entities) {\r\n const lastFrameEntities = new Set(this.lastFrameEntityToPointers.keys());\r\n const currentFrameEntities = new Set(this.currentFrameEntityToPointers.keys());\r\n // Filter preserves z order\r\n const entitiesWithEvents = entities.filter(e => lastFrameEntities.has(e.id) || currentFrameEntities.has(e.id));\r\n let lastMovePerPointer;\r\n let lastUpPerPointer;\r\n let lastDownPerPointer;\r\n // Dispatch events in entity z order\r\n for (const entity of entitiesWithEvents) {\r\n lastDownPerPointer = this._processDownAndEmit(entity);\r\n lastUpPerPointer = this._processUpAndEmit(entity);\r\n lastMovePerPointer = this._processMoveAndEmit(entity);\r\n const lastUpDownMoveEvents = [\r\n ...lastMovePerPointer.values(),\r\n ...lastDownPerPointer.values(),\r\n ...lastUpPerPointer.values()\r\n ];\r\n this._processEnterLeaveAndEmit(entity, lastUpDownMoveEvents);\r\n this._processCancelAndEmit(entity);\r\n this._processWheelAndEmit(entity);\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/ActionsSystem.ts\n\r\n\r\nclass ActionsSystem extends System {\r\n constructor() {\r\n super(...arguments);\r\n this.types = ['ex.actions'];\r\n this.systemType = SystemType.Update;\r\n this.priority = -1;\r\n this._actions = [];\r\n }\r\n notify(entityAddedOrRemoved) {\r\n if (isAddedSystemEntity(entityAddedOrRemoved)) {\r\n const action = entityAddedOrRemoved.data.get(ActionsComponent);\r\n this._actions.push(action);\r\n }\r\n else {\r\n const action = entityAddedOrRemoved.data.get(ActionsComponent);\r\n const index = this._actions.indexOf(action);\r\n if (index > -1) {\r\n this._actions.splice(index, 1);\r\n }\r\n }\r\n }\r\n update(_entities, delta) {\r\n for (const actions of this._actions) {\r\n actions.update(delta);\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./TileMap/IsometricEntityComponent.ts\n\r\nclass IsometricEntityComponent extends Component {\r\n /**\r\n * Specify the isometric map to use to position this entity's z-index\r\n * @param map\r\n */\r\n constructor(map) {\r\n super();\r\n this.type = 'ex.isometricentity';\r\n /**\r\n * Vertical \"height\" in the isometric world\r\n */\r\n this.elevation = 0;\r\n this.map = map;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./TileMap/IsometricEntitySystem.ts\n\r\n\r\n\r\nclass IsometricEntitySystem extends System {\r\n constructor() {\r\n super(...arguments);\r\n this.types = ['ex.transform', 'ex.isometricentity'];\r\n this.systemType = SystemType.Update;\r\n this.priority = 99;\r\n }\r\n update(entities, _delta) {\r\n let transform;\r\n let iso;\r\n for (const entity of entities) {\r\n transform = entity.get(TransformComponent);\r\n iso = entity.get(IsometricEntityComponent);\r\n const maxZindexPerElevation = Math.max(iso.map.columns * iso.map.tileWidth, iso.map.rows * iso.map.tileHeight);\r\n const newZ = maxZindexPerElevation * iso.elevation + transform.pos.y;\r\n transform.z = newZ;\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/OffscreenSystem.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass OffscreenSystem extends System {\r\n constructor() {\r\n super(...arguments);\r\n this.types = ['ex.transform', 'ex.graphics'];\r\n this.systemType = SystemType.Draw;\r\n this.priority = -1;\r\n }\r\n initialize(scene) {\r\n this._camera = scene.camera;\r\n this._screen = scene.engine.screen;\r\n }\r\n update(entities) {\r\n this._worldBounds = this._screen.getWorldBounds();\r\n let transform;\r\n let graphics;\r\n let maybeParallax;\r\n for (const entity of entities) {\r\n graphics = entity.get(GraphicsComponent);\r\n transform = entity.get(TransformComponent);\r\n maybeParallax = entity.get(ParallaxComponent);\r\n let parallaxOffset;\r\n if (maybeParallax) {\r\n // We use the Tiled formula\r\n // https://doc.mapeditor.org/en/latest/manual/layers/#parallax-scrolling-factor\r\n // cameraPos * (1 - parallaxFactor)\r\n const oneMinusFactor = Vector.One.sub(maybeParallax.parallaxFactor);\r\n parallaxOffset = this._camera.pos.scale(oneMinusFactor);\r\n }\r\n // Figure out if entities are offscreen\r\n const entityOffscreen = this._isOffscreen(transform, graphics, parallaxOffset);\r\n if (entityOffscreen && !entity.hasTag('ex.offscreen')) {\r\n entity.events.emit('exitviewport', new ExitViewPortEvent(entity));\r\n entity.addTag('ex.offscreen');\r\n }\r\n if (!entityOffscreen && entity.hasTag('ex.offscreen')) {\r\n entity.events.emit('enterviewport', new EnterViewPortEvent(entity));\r\n entity.removeTag('ex.offscreen');\r\n }\r\n }\r\n }\r\n _isOffscreen(transform, graphics, parallaxOffset) {\r\n if (transform.coordPlane === CoordPlane.World) {\r\n let bounds = graphics.localBounds;\r\n if (parallaxOffset) {\r\n bounds = bounds.translate(parallaxOffset);\r\n }\r\n const transformedBounds = bounds.transform(transform.get().matrix);\r\n const graphicsOffscreen = !this._worldBounds.overlaps(transformedBounds);\r\n return graphicsOffscreen;\r\n }\r\n else {\r\n // TODO screen coordinates\r\n return false;\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Collision/PhysicsWorld.ts\n\r\nclass PhysicsWorld {\r\n constructor() {\r\n this.collisionProcessor = new DynamicTreeCollisionProcessor();\r\n }\r\n rayCast(ray, options) {\r\n return this.collisionProcessor.rayCast(ray, options);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Scene.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst SceneEvents = {\r\n Initialize: 'initialize',\r\n Activate: 'activate',\r\n Deactivate: 'deactivate',\r\n PreUpdate: 'preupdate',\r\n PostUpdate: 'postupdate',\r\n PreDraw: 'predraw',\r\n PostDraw: 'postdraw',\r\n PreDebugDraw: 'predebugdraw',\r\n PostDebugDraw: 'postdebugdraw'\r\n};\r\n/**\r\n * [[Actor|Actors]] are composed together into groupings called Scenes in\r\n * Excalibur. The metaphor models the same idea behind real world\r\n * actors in a scene. Only actors in scenes will be updated and drawn.\r\n *\r\n * Typical usages of a scene include: levels, menus, loading screens, etc.\r\n */\r\nclass Scene {\r\n /**\r\n * The actors in the current scene\r\n */\r\n get actors() {\r\n return this.world.entityManager.entities.filter((e) => {\r\n return e instanceof Actor;\r\n });\r\n }\r\n /**\r\n * The entities in the current scene\r\n */\r\n get entities() {\r\n return this.world.entityManager.entities;\r\n }\r\n /**\r\n * The triggers in the current scene\r\n */\r\n get triggers() {\r\n return this.world.entityManager.entities.filter((e) => {\r\n return e instanceof Trigger;\r\n });\r\n }\r\n /**\r\n * The [[TileMap]]s in the scene, if any\r\n */\r\n get tileMaps() {\r\n return this.world.entityManager.entities.filter((e) => {\r\n return e instanceof TileMap;\r\n });\r\n }\r\n get timers() {\r\n return this._timers;\r\n }\r\n constructor() {\r\n // Initialize systems\r\n this._logger = Logger.getInstance();\r\n this.events = new EventEmitter();\r\n /**\r\n * Gets or sets the current camera for the scene\r\n */\r\n this.camera = new Camera();\r\n /**\r\n * The ECS world for the scene\r\n */\r\n this.world = new World(this);\r\n /**\r\n * The Excalibur physics world for the scene. Used to interact\r\n * with colliders included in the scene.\r\n *\r\n * Can be used to perform scene ray casts, track colliders, broadphase, and narrowphase.\r\n */\r\n this.physics = new PhysicsWorld();\r\n this._isInitialized = false;\r\n this._timers = [];\r\n this._cancelQueue = [];\r\n // Update\r\n this.world.add(new ActionsSystem());\r\n this.world.add(new MotionSystem());\r\n this.world.add(new CollisionSystem(this.physics));\r\n this.world.add(new PointerSystem());\r\n this.world.add(new IsometricEntitySystem());\r\n // Draw\r\n this.world.add(new OffscreenSystem());\r\n this.world.add(new GraphicsSystem());\r\n this.world.add(new DebugSystem());\r\n }\r\n emit(eventName, event) {\r\n this.events.emit(eventName, event);\r\n }\r\n on(eventName, handler) {\r\n return this.events.on(eventName, handler);\r\n }\r\n once(eventName, handler) {\r\n return this.events.once(eventName, handler);\r\n }\r\n off(eventName, handler) {\r\n this.events.off(eventName, handler);\r\n }\r\n /**\r\n * This is called before the first update of the [[Scene]]. Initializes scene members like the camera. This method is meant to be\r\n * overridden. This is where initialization of child actors should take place.\r\n */\r\n onInitialize(_engine) {\r\n // will be overridden\r\n }\r\n /**\r\n * This is called when the scene is made active and started. It is meant to be overridden,\r\n * this is where you should setup any DOM UI or event handlers needed for the scene.\r\n */\r\n onActivate(_context) {\r\n // will be overridden\r\n }\r\n /**\r\n * This is called when the scene is made transitioned away from and stopped. It is meant to be overridden,\r\n * this is where you should cleanup any DOM UI or event handlers needed for the scene.\r\n */\r\n onDeactivate(_context) {\r\n // will be overridden\r\n }\r\n /**\r\n * Safe to override onPreUpdate lifecycle event handler. Synonymous with `.on('preupdate', (evt) =>{...})`\r\n *\r\n * `onPreUpdate` is called directly before a scene is updated.\r\n */\r\n onPreUpdate(_engine, _delta) {\r\n // will be overridden\r\n }\r\n /**\r\n * Safe to override onPostUpdate lifecycle event handler. Synonymous with `.on('preupdate', (evt) =>{...})`\r\n *\r\n * `onPostUpdate` is called directly after a scene is updated.\r\n */\r\n onPostUpdate(_engine, _delta) {\r\n // will be overridden\r\n }\r\n /**\r\n * Safe to override onPreDraw lifecycle event handler. Synonymous with `.on('preupdate', (evt) =>{...})`\r\n *\r\n * `onPreDraw` is called directly before a scene is drawn.\r\n *\r\n */\r\n onPreDraw(_ctx, _delta) {\r\n // will be overridden\r\n }\r\n /**\r\n * Safe to override onPostDraw lifecycle event handler. Synonymous with `.on('preupdate', (evt) =>{...})`\r\n *\r\n * `onPostDraw` is called directly after a scene is drawn.\r\n *\r\n */\r\n onPostDraw(_ctx, _delta) {\r\n // will be overridden\r\n }\r\n /**\r\n * Initializes actors in the scene\r\n */\r\n _initializeChildren() {\r\n for (const child of this.entities) {\r\n child._initialize(this.engine);\r\n }\r\n }\r\n /**\r\n * Gets whether or not the [[Scene]] has been initialized\r\n */\r\n get isInitialized() {\r\n return this._isInitialized;\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Initializes the scene before the first update, meant to be called by engine not by users of\r\n * Excalibur\r\n * @internal\r\n */\r\n _initialize(engine) {\r\n if (!this.isInitialized) {\r\n this.engine = engine;\r\n // Initialize camera first\r\n this.camera._initialize(engine);\r\n this.world.systemManager.initialize();\r\n // This order is important! we want to be sure any custom init that add actors\r\n // fire before the actor init\r\n this.onInitialize.call(this, engine);\r\n this._initializeChildren();\r\n this._logger.debug('Scene.onInitialize', this, engine);\r\n this.events.emit('initialize', new InitializeEvent(engine, this));\r\n this._isInitialized = true;\r\n }\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Activates the scene with the base behavior, then calls the overridable `onActivate` implementation.\r\n * @internal\r\n */\r\n _activate(context) {\r\n this._logger.debug('Scene.onActivate', this);\r\n this.onActivate(context);\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Deactivates the scene with the base behavior, then calls the overridable `onDeactivate` implementation.\r\n * @internal\r\n */\r\n _deactivate(context) {\r\n this._logger.debug('Scene.onDeactivate', this);\r\n this.onDeactivate(context);\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Internal _preupdate handler for [[onPreUpdate]] lifecycle event\r\n * @internal\r\n */\r\n _preupdate(_engine, delta) {\r\n this.emit('preupdate', new PreUpdateEvent(_engine, delta, this));\r\n this.onPreUpdate(_engine, delta);\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Internal _preupdate handler for [[onPostUpdate]] lifecycle event\r\n * @internal\r\n */\r\n _postupdate(_engine, delta) {\r\n this.emit('postupdate', new PostUpdateEvent(_engine, delta, this));\r\n this.onPostUpdate(_engine, delta);\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Internal _predraw handler for [[onPreDraw]] lifecycle event\r\n *\r\n * @internal\r\n */\r\n _predraw(_ctx, _delta) {\r\n this.emit('predraw', new PreDrawEvent(_ctx, _delta, this));\r\n this.onPreDraw(_ctx, _delta);\r\n }\r\n /**\r\n * It is not recommended that internal excalibur methods be overridden, do so at your own risk.\r\n *\r\n * Internal _postdraw handler for [[onPostDraw]] lifecycle event\r\n *\r\n * @internal\r\n */\r\n _postdraw(_ctx, _delta) {\r\n this.emit('postdraw', new PostDrawEvent(_ctx, _delta, this));\r\n this.onPostDraw(_ctx, _delta);\r\n }\r\n /**\r\n * Updates all the actors and timers in the scene. Called by the [[Engine]].\r\n * @param engine Reference to the current Engine\r\n * @param delta The number of milliseconds since the last update\r\n */\r\n update(engine, delta) {\r\n this._preupdate(engine, delta);\r\n // TODO differed entity removal for timers\r\n let i, len;\r\n // Remove timers in the cancel queue before updating them\r\n for (i = 0, len = this._cancelQueue.length; i < len; i++) {\r\n this.removeTimer(this._cancelQueue[i]);\r\n }\r\n this._cancelQueue.length = 0;\r\n // Cycle through timers updating timers\r\n for (const timer of this._timers) {\r\n timer.update(delta);\r\n }\r\n this.world.update(SystemType.Update, delta);\r\n // Camera last keeps renders smooth that are based on entity/actor\r\n if (this.camera) {\r\n this.camera.update(engine, delta);\r\n }\r\n this._collectActorStats(engine);\r\n this._postupdate(engine, delta);\r\n }\r\n /**\r\n * Draws all the actors in the Scene. Called by the [[Engine]].\r\n *\r\n * @param ctx The current rendering context\r\n * @param delta The number of milliseconds since the last draw\r\n */\r\n draw(ctx, delta) {\r\n var _a;\r\n this._predraw(ctx, delta);\r\n this.world.update(SystemType.Draw, delta);\r\n if ((_a = this.engine) === null || _a === void 0 ? void 0 : _a.isDebug) {\r\n this.debugDraw(ctx);\r\n }\r\n this._postdraw(ctx, delta);\r\n }\r\n /**\r\n * Draws all the actors' debug information in the Scene. Called by the [[Engine]].\r\n * @param ctx The current rendering context\r\n */\r\n /* istanbul ignore next */\r\n debugDraw(ctx) {\r\n this.emit('predebugdraw', new PreDebugDrawEvent(ctx, this));\r\n // pass\r\n this.emit('postdebugdraw', new PostDebugDrawEvent(ctx, this));\r\n }\r\n /**\r\n * Checks whether an actor is contained in this scene or not\r\n */\r\n contains(actor) {\r\n return this.actors.indexOf(actor) > -1;\r\n }\r\n add(entity) {\r\n this.emit('entityadded', { target: entity });\r\n this.world.add(entity);\r\n entity.scene = this;\r\n if (entity instanceof Timer) {\r\n if (!contains(this._timers, entity)) {\r\n this.addTimer(entity);\r\n }\r\n return;\r\n }\r\n }\r\n /**\r\n * Removes an [[Entity]] (Actor, TileMap, Trigger, etc) or [[Timer]] from it's current scene\r\n * and adds it to this scene.\r\n *\r\n * Useful if you want to have an object be present in only 1 scene at a time.\r\n * @param entity\r\n */\r\n transfer(entity) {\r\n let scene;\r\n if (entity instanceof Entity && entity.scene && entity.scene !== this) {\r\n scene = entity.scene;\r\n entity.scene.world.remove(entity, false);\r\n }\r\n if (entity instanceof Timer && entity.scene) {\r\n scene = entity.scene;\r\n entity.scene.removeTimer(entity);\r\n }\r\n scene === null || scene === void 0 ? void 0 : scene.emit('entityremoved', { target: entity });\r\n this.add(entity);\r\n }\r\n remove(entity) {\r\n if (entity instanceof Entity) {\r\n this.emit('entityremoved', { target: entity });\r\n if (entity.active) {\r\n entity.kill();\r\n }\r\n this.world.remove(entity);\r\n }\r\n if (entity instanceof Timer) {\r\n this.removeTimer(entity);\r\n }\r\n }\r\n /**\r\n * Removes all entities and timers from the scene, optionally indicate whether deferred should or shouldn't be used.\r\n *\r\n * By default entities use deferred removal\r\n * @param deferred\r\n */\r\n clear(deferred = true) {\r\n for (const entity of this.entities) {\r\n this.world.remove(entity, deferred);\r\n }\r\n for (const timer of this.timers) {\r\n this.removeTimer(timer);\r\n }\r\n }\r\n /**\r\n * Adds a [[Timer]] to the scene\r\n * @param timer The timer to add\r\n */\r\n addTimer(timer) {\r\n this._timers.push(timer);\r\n timer.scene = this;\r\n return timer;\r\n }\r\n /**\r\n * Removes a [[Timer]] from the scene.\r\n * @warning Can be dangerous, use [[cancelTimer]] instead\r\n * @param timer The timer to remove\r\n */\r\n removeTimer(timer) {\r\n const i = this._timers.indexOf(timer);\r\n if (i !== -1) {\r\n this._timers.splice(i, 1);\r\n }\r\n return timer;\r\n }\r\n /**\r\n * Cancels a [[Timer]], removing it from the scene nicely\r\n * @param timer The timer to cancel\r\n */\r\n cancelTimer(timer) {\r\n this._cancelQueue.push(timer);\r\n return timer;\r\n }\r\n /**\r\n * Tests whether a [[Timer]] is active in the scene\r\n */\r\n isTimerActive(timer) {\r\n return this._timers.indexOf(timer) > -1 && !timer.complete;\r\n }\r\n isCurrentScene() {\r\n if (this.engine) {\r\n return this.engine.currentScene === this;\r\n }\r\n return false;\r\n }\r\n _collectActorStats(engine) {\r\n const screenElements = this.actors.filter((a) => a instanceof ScreenElement);\r\n for (const _ui of screenElements) {\r\n engine.stats.currFrame.actors.ui++;\r\n }\r\n for (const actor of this.actors) {\r\n engine.stats.currFrame.actors.alive++;\r\n for (const child of actor.children) {\r\n if (isScreenElement(child)) {\r\n // TODO not true\r\n engine.stats.currFrame.actors.ui++;\r\n }\r\n else {\r\n engine.stats.currFrame.actors.alive++;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/PostProcessor/ColorBlindnessMode.ts\nvar ColorBlindnessMode;\r\n(function (ColorBlindnessMode) {\r\n ColorBlindnessMode[\"Protanope\"] = \"Protanope\";\r\n ColorBlindnessMode[\"Deuteranope\"] = \"Deuteranope\";\r\n ColorBlindnessMode[\"Tritanope\"] = \"Tritanope\";\r\n})(ColorBlindnessMode || (ColorBlindnessMode = {}));\r\n\n;// CONCATENATED MODULE: ./Graphics/PostProcessor/color-blind-fragment.glsl\n/* harmony default export */ const color_blind_fragment = (\"#version 300 es\\r\\nprecision mediump float;\\r\\n// our texture\\r\\nuniform sampler2D u_image;\\r\\n// the texCoords passed in from the vertex shader.\\r\\nin vec2 v_texcoord;\\r\\n\\r\\n// color blind type\\r\\nuniform int u_type;\\r\\n\\r\\n// simulation?\\r\\nuniform bool u_simulate;\\r\\n\\r\\nout vec4 fragColor;\\r\\n\\r\\nvoid main() {\\r\\n vec4 o = texture(u_image, v_texcoord);\\r\\n // RGB to LMS matrix conversion\\r\\n float L = (17.8824 * o.r) + (43.5161 * o.g) + (4.11935 * o.b);\\r\\n float M = (3.45565 * o.r) + (27.1554 * o.g) + (3.86714 * o.b);\\r\\n float S = (0.0299566 * o.r) + (0.184309 * o.g) + (1.46709 * o.b);\\r\\n // Simulate color blindness\\r\\n float l;\\r\\n float m;\\r\\n float s;\\r\\n //MODE CODE//\\r\\n if (u_type == 0) {\\r\\n // Protanope\\r\\n l = 0.0 * L + 2.02344 * M + -2.52581 * S;\\r\\n m = 0.0 * L + 1.0 * M + 0.0 * S;\\r\\n s = 0.0 * L + 0.0 * M + 1.0 * S;;\\r\\n } else if (u_type == 1) {\\r\\n // Deuteranope\\r\\n l = 1.0 * L + 0.0 * M + 0.0 * S;\\r\\n m = 0.494207 * L + 0.0 * M + 1.24827 * S;\\r\\n s = 0.0 * L + 0.0 * M + 1.0 * S;\\r\\n } else if (u_type == 2) {\\r\\n // Tritanope\\r\\n l = 1.0 * L + 0.0 * M + 0.0 * S;\\r\\n m = 0.0 * L + 1.0 * M + 0.0 * S;\\r\\n s = -0.395913 * L + 0.801109 * M + 0.0 * S;\\r\\n }\\r\\n\\r\\n // LMS to RGB matrix conversion\\r\\n vec4 error; // simulate the colors\\r\\n error.r = (0.0809444479 * l) + (-0.130504409 * m) + (0.116721066 * s);\\r\\n error.g = (-0.0102485335 * l) + (0.0540193266 * m) + (-0.113614708 * s);\\r\\n error.b = (-0.000365296938 * l) + (-0.00412161469 * m) + (0.693511405 * s);\\r\\n error.a = 1.0;\\r\\n vec4 diff = o - error;\\r\\n vec4 correction; // correct the colors\\r\\n correction.r = 0.0;\\r\\n correction.g = (diff.r * 0.7) + (diff.g * 1.0);\\r\\n correction.b = (diff.r * 0.7) + (diff.b * 1.0);\\r\\n correction = o + correction;\\r\\n correction.a = o.a;\\r\\n //SIMULATE//\\r\\n\\r\\n // sim \\r\\n if (u_simulate) {\\r\\n fragColor = error.rgba;\\r\\n } else {\\r\\n fragColor = correction.rgba;\\r\\n }\\r\\n}\");\n;// CONCATENATED MODULE: ./Graphics/PostProcessor/ScreenShader.ts\n\r\n\r\n\r\n/**\r\n * Helper that defines a whole screen renderer, just provide a fragment source!\r\n *\r\n * Currently supports 1 varying\r\n * - vec2 a_texcoord between 0-1 which corresponds to screen position\r\n */\r\nclass ScreenShader {\r\n constructor(gl, fragmentSource) {\r\n this._shader = new Shader({\r\n gl,\r\n vertexSource: `#version 300 es\r\n in vec2 a_position;\r\n in vec2 a_texcoord;\r\n out vec2 v_texcoord;\r\n\r\n void main() {\r\n gl_Position = vec4(a_position, 0.0, 1.0);\r\n // Pass the texcoord to the fragment shader.\r\n v_texcoord = a_texcoord;\r\n }`,\r\n fragmentSource: fragmentSource\r\n });\r\n this._shader.compile();\r\n // Setup memory layout\r\n this._buffer = new VertexBuffer({\r\n gl,\r\n type: 'static',\r\n // clip space quad + uv since we don't need a camera\r\n data: new Float32Array([\r\n -1, -1, 0, 0,\r\n -1, 1, 0, 1,\r\n 1, -1, 1, 0,\r\n 1, -1, 1, 0,\r\n -1, 1, 0, 1,\r\n 1, 1, 1, 1\r\n ])\r\n });\r\n this._layout = new VertexLayout({\r\n gl,\r\n shader: this._shader,\r\n vertexBuffer: this._buffer,\r\n attributes: [\r\n ['a_position', 2],\r\n ['a_texcoord', 2]\r\n ]\r\n });\r\n this._buffer.upload();\r\n }\r\n getShader() {\r\n return this._shader;\r\n }\r\n getLayout() {\r\n return this._layout;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/PostProcessor/ColorBlindnessPostProcessor.ts\n\r\n\r\n\r\nclass ColorBlindnessPostProcessor {\r\n constructor(_colorBlindnessMode, simulate = false) {\r\n this._colorBlindnessMode = _colorBlindnessMode;\r\n this._simulate = false;\r\n this._simulate = simulate;\r\n }\r\n initialize(gl) {\r\n this._shader = new ScreenShader(gl, color_blind_fragment);\r\n this.simulate = this._simulate;\r\n this.colorBlindnessMode = this._colorBlindnessMode;\r\n }\r\n getShader() {\r\n return this._shader.getShader();\r\n }\r\n getLayout() {\r\n return this._shader.getLayout();\r\n }\r\n set colorBlindnessMode(colorBlindMode) {\r\n this._colorBlindnessMode = colorBlindMode;\r\n if (this._shader) {\r\n const shader = this._shader.getShader();\r\n shader.use();\r\n if (this._colorBlindnessMode === ColorBlindnessMode.Protanope) {\r\n shader.setUniformInt('u_type', 0);\r\n }\r\n else if (this._colorBlindnessMode === ColorBlindnessMode.Deuteranope) {\r\n shader.setUniformInt('u_type', 1);\r\n }\r\n else if (this._colorBlindnessMode === ColorBlindnessMode.Tritanope) {\r\n shader.setUniformInt('u_type', 2);\r\n }\r\n }\r\n }\r\n get colorBlindnessMode() {\r\n return this._colorBlindnessMode;\r\n }\r\n set simulate(value) {\r\n this._simulate = value;\r\n if (this._shader) {\r\n const shader = this._shader.getShader();\r\n shader.use();\r\n shader.setUniformBoolean('u_simulate', value);\r\n }\r\n }\r\n get simulate() {\r\n return this._simulate;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Debug/DebugFlags.ts\n\r\n\r\n\r\nclass ColorBlindFlags {\r\n constructor(engine) {\r\n this._engine = engine;\r\n this._colorBlindPostProcessor = new ColorBlindnessPostProcessor(ColorBlindnessMode.Protanope);\r\n }\r\n /**\r\n * Correct colors for a specified color blindness\r\n * @param colorBlindness\r\n */\r\n correct(colorBlindness) {\r\n if (this._engine.graphicsContext instanceof ExcaliburGraphicsContextWebGL) {\r\n this.clear();\r\n this._colorBlindPostProcessor.colorBlindnessMode = colorBlindness;\r\n this._colorBlindPostProcessor.simulate = false;\r\n this._engine.graphicsContext.addPostProcessor(this._colorBlindPostProcessor);\r\n }\r\n }\r\n /**\r\n * Simulate colors for a specified color blindness\r\n * @param colorBlindness\r\n */\r\n simulate(colorBlindness) {\r\n if (this._engine.graphicsContext instanceof ExcaliburGraphicsContextWebGL) {\r\n this.clear();\r\n this._colorBlindPostProcessor.colorBlindnessMode = colorBlindness;\r\n this._colorBlindPostProcessor.simulate = true;\r\n this._engine.graphicsContext.addPostProcessor(this._colorBlindPostProcessor);\r\n }\r\n }\r\n /**\r\n * Remove color blindness post processor\r\n */\r\n clear() {\r\n this._engine.graphicsContext.removePostProcessor(this._colorBlindPostProcessor);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Debug/Debug.ts\n\r\n\r\n/**\r\n * Debug statistics and flags for Excalibur. If polling these values, it would be\r\n * best to do so on the `postupdate` event for [[Engine]], after all values have been\r\n * updated during a frame.\r\n */\r\nclass Debug {\r\n constructor(engine) {\r\n /**\r\n * Performance statistics\r\n */\r\n this.stats = {\r\n /**\r\n * Current frame statistics. Engine reuses this instance, use [[FrameStats.clone]] to copy frame stats.\r\n * Best accessed on [[postframe]] event. See [[FrameStats]]\r\n */\r\n currFrame: new FrameStats(),\r\n /**\r\n * Previous frame statistics. Engine reuses this instance, use [[FrameStats.clone]] to copy frame stats.\r\n * Best accessed on [[preframe]] event. Best inspected on engine event `preframe`. See [[FrameStats]]\r\n */\r\n prevFrame: new FrameStats()\r\n };\r\n /**\r\n * Filter debug context to named entities or entity ids\r\n */\r\n this.filter = {\r\n /**\r\n * Toggle filter on or off (default off) must be on for DebugDraw to use filters\r\n */\r\n useFilter: false,\r\n /**\r\n * Query for entities by name, if the entity name contains `nameQuery` it will be included\r\n */\r\n nameQuery: '',\r\n /**\r\n * Query for Entity ids, if the id matches it will be included\r\n */\r\n ids: []\r\n };\r\n /**\r\n * Entity debug settings\r\n */\r\n this.entity = {\r\n showAll: false,\r\n showId: true,\r\n showName: false\r\n };\r\n /**\r\n * Transform component debug settings\r\n */\r\n this.transform = {\r\n showAll: false,\r\n showPosition: false,\r\n showPositionLabel: false,\r\n positionColor: Color.Yellow,\r\n showZIndex: false,\r\n showScale: false,\r\n scaleColor: Color.Green,\r\n showRotation: false,\r\n rotationColor: Color.Blue\r\n };\r\n /**\r\n * Graphics component debug settings\r\n */\r\n this.graphics = {\r\n showAll: false,\r\n showBounds: true,\r\n boundsColor: Color.Yellow\r\n };\r\n /**\r\n * Collider component debug settings\r\n */\r\n this.collider = {\r\n showAll: false,\r\n showBounds: true,\r\n boundsColor: Color.Blue,\r\n showOwner: false,\r\n showGeometry: true,\r\n geometryColor: Color.Green\r\n };\r\n /**\r\n * Physics simulation debug settings\r\n */\r\n this.physics = {\r\n showAll: false,\r\n showBroadphaseSpacePartitionDebug: false,\r\n showCollisionNormals: false,\r\n collisionNormalColor: Color.Cyan,\r\n showCollisionContacts: true,\r\n collisionContactColor: Color.Red\r\n };\r\n /**\r\n * Motion component debug settings\r\n */\r\n this.motion = {\r\n showAll: false,\r\n showVelocity: false,\r\n velocityColor: Color.Yellow,\r\n showAcceleration: false,\r\n accelerationColor: Color.Red\r\n };\r\n /**\r\n * Body component debug settings\r\n */\r\n this.body = {\r\n showAll: false,\r\n showCollisionGroup: false,\r\n showCollisionType: false,\r\n showSleeping: false,\r\n showMotion: false,\r\n showMass: false\r\n };\r\n /**\r\n * Camera debug settings\r\n */\r\n this.camera = {\r\n showAll: false,\r\n showFocus: false,\r\n focusColor: Color.Red,\r\n showZoom: false\r\n };\r\n this._engine = engine;\r\n this.colorBlindMode = new ColorBlindFlags(this._engine);\r\n }\r\n /**\r\n * Switch the current excalibur clock with the [[TestClock]] and return\r\n * it in the same running state.\r\n *\r\n * This is useful when you need to debug frame by frame.\r\n */\r\n useTestClock() {\r\n const clock = this._engine.clock;\r\n const wasRunning = clock.isRunning();\r\n clock.stop();\r\n const testClock = clock.toTestClock();\r\n if (wasRunning) {\r\n testClock.start();\r\n }\r\n this._engine.clock = testClock;\r\n return testClock;\r\n }\r\n /**\r\n * Switch the current excalibur clock with the [[StandardClock]] and\r\n * return it in the same running state.\r\n *\r\n * This is useful when you need to switch back to normal mode after\r\n * debugging.\r\n */\r\n useStandardClock() {\r\n const currentClock = this._engine.clock;\r\n const wasRunning = currentClock.isRunning();\r\n currentClock.stop();\r\n const standardClock = currentClock.toStandardClock();\r\n if (wasRunning) {\r\n standardClock.start();\r\n }\r\n this._engine.clock = standardClock;\r\n return standardClock;\r\n }\r\n}\r\n/**\r\n * Implementation of a frame's stats. Meant to have values copied via [[FrameStats.reset]], avoid\r\n * creating instances of this every frame.\r\n */\r\nclass FrameStats {\r\n constructor() {\r\n this._id = 0;\r\n this._delta = 0;\r\n this._fps = 0;\r\n this._actorStats = {\r\n alive: 0,\r\n killed: 0,\r\n ui: 0,\r\n get remaining() {\r\n return this.alive - this.killed;\r\n },\r\n get total() {\r\n return this.remaining + this.ui;\r\n }\r\n };\r\n this._durationStats = {\r\n update: 0,\r\n draw: 0,\r\n get total() {\r\n return this.update + this.draw;\r\n }\r\n };\r\n this._physicsStats = new PhysicsStats();\r\n this._graphicsStats = {\r\n drawCalls: 0,\r\n drawnImages: 0\r\n };\r\n }\r\n /**\r\n * Zero out values or clone other IFrameStat stats. Allows instance reuse.\r\n *\r\n * @param [otherStats] Optional stats to clone\r\n */\r\n reset(otherStats) {\r\n if (otherStats) {\r\n this.id = otherStats.id;\r\n this.delta = otherStats.delta;\r\n this.fps = otherStats.fps;\r\n this.actors.alive = otherStats.actors.alive;\r\n this.actors.killed = otherStats.actors.killed;\r\n this.actors.ui = otherStats.actors.ui;\r\n this.duration.update = otherStats.duration.update;\r\n this.duration.draw = otherStats.duration.draw;\r\n this._physicsStats.reset(otherStats.physics);\r\n this.graphics.drawCalls = otherStats.graphics.drawCalls;\r\n this.graphics.drawnImages = otherStats.graphics.drawnImages;\r\n }\r\n else {\r\n this.id = this.delta = this.fps = 0;\r\n this.actors.alive = this.actors.killed = this.actors.ui = 0;\r\n this.duration.update = this.duration.draw = 0;\r\n this._physicsStats.reset();\r\n this.graphics.drawnImages = this.graphics.drawCalls = 0;\r\n }\r\n }\r\n /**\r\n * Provides a clone of this instance.\r\n */\r\n clone() {\r\n const fs = new FrameStats();\r\n fs.reset(this);\r\n return fs;\r\n }\r\n /**\r\n * Gets the frame's id\r\n */\r\n get id() {\r\n return this._id;\r\n }\r\n /**\r\n * Sets the frame's id\r\n */\r\n set id(value) {\r\n this._id = value;\r\n }\r\n /**\r\n * Gets the frame's delta (time since last frame)\r\n */\r\n get delta() {\r\n return this._delta;\r\n }\r\n /**\r\n * Sets the frame's delta (time since last frame). Internal use only.\r\n * @internal\r\n */\r\n set delta(value) {\r\n this._delta = value;\r\n }\r\n /**\r\n * Gets the frame's frames-per-second (FPS)\r\n */\r\n get fps() {\r\n return this._fps;\r\n }\r\n /**\r\n * Sets the frame's frames-per-second (FPS). Internal use only.\r\n * @internal\r\n */\r\n set fps(value) {\r\n this._fps = value;\r\n }\r\n /**\r\n * Gets the frame's actor statistics\r\n */\r\n get actors() {\r\n return this._actorStats;\r\n }\r\n /**\r\n * Gets the frame's duration statistics\r\n */\r\n get duration() {\r\n return this._durationStats;\r\n }\r\n /**\r\n * Gets the frame's physics statistics\r\n */\r\n get physics() {\r\n return this._physicsStats;\r\n }\r\n /**\r\n * Gets the frame's graphics statistics\r\n */\r\n get graphics() {\r\n return this._graphicsStats;\r\n }\r\n}\r\nclass PhysicsStats {\r\n constructor() {\r\n this._pairs = 0;\r\n this._collisions = 0;\r\n this._contacts = new Map();\r\n this._fastBodies = 0;\r\n this._fastBodyCollisions = 0;\r\n this._broadphase = 0;\r\n this._narrowphase = 0;\r\n }\r\n /**\r\n * Zero out values or clone other IPhysicsStats stats. Allows instance reuse.\r\n *\r\n * @param [otherStats] Optional stats to clone\r\n */\r\n reset(otherStats) {\r\n if (otherStats) {\r\n this.pairs = otherStats.pairs;\r\n this.collisions = otherStats.collisions;\r\n this.contacts = otherStats.contacts;\r\n this.fastBodies = otherStats.fastBodies;\r\n this.fastBodyCollisions = otherStats.fastBodyCollisions;\r\n this.broadphase = otherStats.broadphase;\r\n this.narrowphase = otherStats.narrowphase;\r\n }\r\n else {\r\n this.pairs = this.collisions = this.fastBodies = 0;\r\n this.fastBodyCollisions = this.broadphase = this.narrowphase = 0;\r\n this.contacts.clear();\r\n }\r\n }\r\n /**\r\n * Provides a clone of this instance.\r\n */\r\n clone() {\r\n const ps = new PhysicsStats();\r\n ps.reset(this);\r\n return ps;\r\n }\r\n get pairs() {\r\n return this._pairs;\r\n }\r\n set pairs(value) {\r\n this._pairs = value;\r\n }\r\n get collisions() {\r\n return this._collisions;\r\n }\r\n set collisions(value) {\r\n this._collisions = value;\r\n }\r\n get contacts() {\r\n return this._contacts;\r\n }\r\n set contacts(contacts) {\r\n this._contacts = contacts;\r\n }\r\n get fastBodies() {\r\n return this._fastBodies;\r\n }\r\n set fastBodies(value) {\r\n this._fastBodies = value;\r\n }\r\n get fastBodyCollisions() {\r\n return this._fastBodyCollisions;\r\n }\r\n set fastBodyCollisions(value) {\r\n this._fastBodyCollisions = value;\r\n }\r\n get broadphase() {\r\n return this._broadphase;\r\n }\r\n set broadphase(value) {\r\n this._broadphase = value;\r\n }\r\n get narrowphase() {\r\n return this._narrowphase;\r\n }\r\n set narrowphase(value) {\r\n this._narrowphase = value;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Util/Browser.ts\nclass BrowserComponent {\r\n on(eventName, handler) {\r\n if (this._nativeHandlers[eventName]) {\r\n this.off(eventName, this._nativeHandlers[eventName]);\r\n }\r\n this._nativeHandlers[eventName] = this._decorate(handler);\r\n this.nativeComponent.addEventListener(eventName, this._nativeHandlers[eventName]);\r\n }\r\n off(eventName, handler) {\r\n if (!handler) {\r\n handler = this._nativeHandlers[eventName];\r\n }\r\n this.nativeComponent.removeEventListener(eventName, handler);\r\n this._nativeHandlers[eventName] = null;\r\n }\r\n _decorate(handler) {\r\n return (evt) => {\r\n if (!this._paused) {\r\n handler(evt);\r\n }\r\n };\r\n }\r\n pause() {\r\n this._paused = true;\r\n }\r\n resume() {\r\n this._paused = false;\r\n }\r\n clear() {\r\n for (const event in this._nativeHandlers) {\r\n this.off(event);\r\n }\r\n }\r\n constructor(nativeComponent) {\r\n this.nativeComponent = nativeComponent;\r\n this._paused = false;\r\n this._nativeHandlers = {};\r\n }\r\n}\r\nclass BrowserEvents {\r\n constructor(_windowGlobal, _documentGlobal) {\r\n this._windowGlobal = _windowGlobal;\r\n this._documentGlobal = _documentGlobal;\r\n this._windowComponent = new BrowserComponent(this._windowGlobal);\r\n this._documentComponent = new BrowserComponent(this._documentGlobal);\r\n }\r\n get window() {\r\n return this._windowComponent;\r\n }\r\n get document() {\r\n return this._documentComponent;\r\n }\r\n pause() {\r\n this.window.pause();\r\n this.document.pause();\r\n }\r\n resume() {\r\n this.window.resume();\r\n this.document.resume();\r\n }\r\n clear() {\r\n this.window.clear();\r\n this.document.clear();\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Math/global-coordinates.ts\n\r\nclass GlobalCoordinates {\r\n static fromPagePosition(xOrPos, yOrEngine, engineOrUndefined) {\r\n let pageX;\r\n let pageY;\r\n let pagePos;\r\n let engine;\r\n if (arguments.length === 3) {\r\n pageX = xOrPos;\r\n pageY = yOrEngine;\r\n pagePos = new Vector(pageX, pageY);\r\n engine = engineOrUndefined;\r\n }\r\n else {\r\n pagePos = xOrPos;\r\n pageX = pagePos.x;\r\n pageY = pagePos.y;\r\n engine = yOrEngine;\r\n }\r\n const screenPos = engine.screen.pageToScreenCoordinates(pagePos);\r\n const worldPos = engine.screen.screenToWorldCoordinates(screenPos);\r\n return new GlobalCoordinates(worldPos, pagePos, screenPos);\r\n }\r\n constructor(worldPos, pagePos, screenPos) {\r\n this.worldPos = worldPos;\r\n this.pagePos = pagePos;\r\n this.screenPos = screenPos;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Input/PointerEvent.ts\nclass PointerEvent {\r\n cancel() {\r\n this.active = false;\r\n }\r\n get pagePos() {\r\n return this.coordinates.pagePos;\r\n }\r\n get screenPos() {\r\n return this.coordinates.screenPos;\r\n }\r\n get worldPos() {\r\n return this.coordinates.worldPos;\r\n }\r\n constructor(type, pointerId, button, pointerType, coordinates, nativeEvent) {\r\n this.type = type;\r\n this.pointerId = pointerId;\r\n this.button = button;\r\n this.pointerType = pointerType;\r\n this.coordinates = coordinates;\r\n this.nativeEvent = nativeEvent;\r\n this.active = true;\r\n }\r\n ;\r\n}\r\n\n;// CONCATENATED MODULE: ./Input/WheelEvent.ts\nclass WheelEvent {\r\n cancel() {\r\n this.active = false;\r\n }\r\n constructor(x, y, pageX, pageY, screenX, screenY, index, deltaX, deltaY, deltaZ, deltaMode, ev) {\r\n this.x = x;\r\n this.y = y;\r\n this.pageX = pageX;\r\n this.pageY = pageY;\r\n this.screenX = screenX;\r\n this.screenY = screenY;\r\n this.index = index;\r\n this.deltaX = deltaX;\r\n this.deltaY = deltaY;\r\n this.deltaZ = deltaZ;\r\n this.deltaMode = deltaMode;\r\n this.ev = ev;\r\n this.active = true;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Input/PointerAbstraction.ts\n\r\n\r\nclass PointerAbstraction {\r\n constructor() {\r\n this.events = new EventEmitter();\r\n /**\r\n * The last position on the document this pointer was at. Can be `null` if pointer was never active.\r\n */\r\n this.lastPagePos = Vector.Zero;\r\n /**\r\n * The last position on the screen this pointer was at. Can be `null` if pointer was never active.\r\n */\r\n this.lastScreenPos = Vector.Zero;\r\n /**\r\n * The last position in the game world coordinates this pointer was at. Can be `null` if pointer was never active.\r\n */\r\n this.lastWorldPos = Vector.Zero;\r\n this._onPointerMove = (ev) => {\r\n this.lastPagePos = new Vector(ev.pagePos.x, ev.pagePos.y);\r\n this.lastScreenPos = new Vector(ev.screenPos.x, ev.screenPos.y);\r\n this.lastWorldPos = new Vector(ev.worldPos.x, ev.worldPos.y);\r\n };\r\n this._onPointerDown = (ev) => {\r\n this.lastPagePos = new Vector(ev.pagePos.x, ev.pagePos.y);\r\n this.lastScreenPos = new Vector(ev.screenPos.x, ev.screenPos.y);\r\n this.lastWorldPos = new Vector(ev.worldPos.x, ev.worldPos.y);\r\n };\r\n this.on('move', this._onPointerMove);\r\n this.on('down', this._onPointerDown);\r\n }\r\n emit(eventName, event) {\r\n this.events.emit(eventName, event);\r\n }\r\n on(eventName, handler) {\r\n return this.events.on(eventName, handler);\r\n }\r\n once(eventName, handler) {\r\n return this.events.once(eventName, handler);\r\n }\r\n off(eventName, handler) {\r\n this.events.off(eventName, handler);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Input/WheelDeltaMode.ts\nvar WheelDeltaMode;\r\n(function (WheelDeltaMode) {\r\n WheelDeltaMode[\"Pixel\"] = \"Pixel\";\r\n WheelDeltaMode[\"Line\"] = \"Line\";\r\n WheelDeltaMode[\"Page\"] = \"Page\";\r\n})(WheelDeltaMode || (WheelDeltaMode = {}));\r\n\n;// CONCATENATED MODULE: ./Input/NativePointerButton.ts\n/**\r\n * Native browser button enumeration\r\n */\r\nvar NativePointerButton;\r\n(function (NativePointerButton) {\r\n NativePointerButton[NativePointerButton[\"NoButton\"] = -1] = \"NoButton\";\r\n NativePointerButton[NativePointerButton[\"Left\"] = 0] = \"Left\";\r\n NativePointerButton[NativePointerButton[\"Middle\"] = 1] = \"Middle\";\r\n NativePointerButton[NativePointerButton[\"Right\"] = 2] = \"Right\";\r\n NativePointerButton[NativePointerButton[\"Unknown\"] = 3] = \"Unknown\";\r\n})(NativePointerButton || (NativePointerButton = {}));\r\n\n;// CONCATENATED MODULE: ./Input/PointerButton.ts\n/**\r\n * The mouse button being pressed.\r\n */\r\nvar PointerButton;\r\n(function (PointerButton) {\r\n PointerButton[\"Left\"] = \"Left\";\r\n PointerButton[\"Middle\"] = \"Middle\";\r\n PointerButton[\"Right\"] = \"Right\";\r\n PointerButton[\"Unknown\"] = \"Unknown\";\r\n PointerButton[\"NoButton\"] = \"NoButton\";\r\n})(PointerButton || (PointerButton = {}));\r\n\n;// CONCATENATED MODULE: ./Input/PointerType.ts\n/**\r\n * The type of pointer for a [[PointerEvent]].\r\n */\r\nvar PointerType;\r\n(function (PointerType) {\r\n PointerType[\"Touch\"] = \"Touch\";\r\n PointerType[\"Mouse\"] = \"Mouse\";\r\n PointerType[\"Pen\"] = \"Pen\";\r\n PointerType[\"Unknown\"] = \"Unknown\";\r\n})(PointerType || (PointerType = {}));\r\n\n;// CONCATENATED MODULE: ./Input/PointerEventReceiver.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst PointerEvents = {\r\n Move: 'move',\r\n Down: 'down',\r\n Up: 'up',\r\n Wheel: 'wheel'\r\n};\r\n/**\r\n * Is this event a native touch event?\r\n */\r\nfunction isTouchEvent(value) {\r\n // Guard for Safari <= 13.1\r\n return globalThis.TouchEvent && value instanceof globalThis.TouchEvent;\r\n}\r\n/**\r\n * Is this event a native pointer event\r\n */\r\nfunction isPointerEvent(value) {\r\n // Guard for Safari <= 13.1\r\n return globalThis.PointerEvent && value instanceof globalThis.PointerEvent;\r\n}\r\n/**\r\n * The PointerEventProcessor is responsible for collecting all the events from the canvas and transforming them into GlobalCoordinates\r\n */\r\nclass PointerEventReceiver {\r\n constructor(target, engine) {\r\n this.target = target;\r\n this.engine = engine;\r\n this.events = new EventEmitter();\r\n this.primary = new PointerAbstraction();\r\n this._activeNativePointerIdsToNormalized = new Map();\r\n this.lastFramePointerCoords = new Map();\r\n this.currentFramePointerCoords = new Map();\r\n this.currentFramePointerDown = new Map();\r\n this.lastFramePointerDown = new Map();\r\n this.currentFrameDown = [];\r\n this.currentFrameUp = [];\r\n this.currentFrameMove = [];\r\n this.currentFrameCancel = [];\r\n this.currentFrameWheel = [];\r\n this._pointers = [this.primary];\r\n this._boundHandle = this._handle.bind(this);\r\n this._boundWheel = this._handleWheel.bind(this);\r\n }\r\n /**\r\n * Creates a new PointerEventReceiver with a new target and engine while preserving existing pointer event\r\n * handlers.\r\n * @param target\r\n * @param engine\r\n */\r\n recreate(target, engine) {\r\n const eventReceiver = new PointerEventReceiver(target, engine);\r\n eventReceiver.primary = this.primary;\r\n eventReceiver._pointers = this._pointers;\r\n return eventReceiver;\r\n }\r\n /**\r\n * Locates a specific pointer by id, creates it if it doesn't exist\r\n * @param index\r\n */\r\n at(index) {\r\n if (index >= this._pointers.length) {\r\n // Ensure there is a pointer to retrieve\r\n for (let i = this._pointers.length - 1, max = index; i < max; i++) {\r\n this._pointers.push(new PointerAbstraction());\r\n }\r\n }\r\n return this._pointers[index];\r\n }\r\n /**\r\n * The number of pointers currently being tracked by excalibur\r\n */\r\n count() {\r\n return this._pointers.length;\r\n }\r\n /**\r\n * Is the specified pointer id down this frame\r\n * @param pointerId\r\n */\r\n isDown(pointerId) {\r\n var _a;\r\n return (_a = this.currentFramePointerDown.get(pointerId)) !== null && _a !== void 0 ? _a : false;\r\n }\r\n /**\r\n * Was the specified pointer id down last frame\r\n * @param pointerId\r\n */\r\n wasDown(pointerId) {\r\n var _a;\r\n return (_a = this.lastFramePointerDown.get(pointerId)) !== null && _a !== void 0 ? _a : false;\r\n }\r\n /**\r\n * Whether the Pointer is currently dragging.\r\n */\r\n isDragging(pointerId) {\r\n return this.isDown(pointerId);\r\n }\r\n /**\r\n * Whether the Pointer just started dragging.\r\n */\r\n isDragStart(pointerId) {\r\n return this.isDown(pointerId) && !this.wasDown(pointerId);\r\n }\r\n /**\r\n * Whether the Pointer just ended dragging.\r\n */\r\n isDragEnd(pointerId) {\r\n return !this.isDown(pointerId) && this.wasDown(pointerId);\r\n }\r\n emit(eventName, event) {\r\n this.events.emit(eventName, event);\r\n }\r\n on(eventName, handler) {\r\n return this.events.on(eventName, handler);\r\n }\r\n once(eventName, handler) {\r\n return this.events.once(eventName, handler);\r\n }\r\n off(eventName, handler) {\r\n this.events.off(eventName, handler);\r\n }\r\n /**\r\n * Called internally by excalibur\r\n *\r\n * Updates the current frame pointer info and emits raw pointer events\r\n *\r\n * This does not emit events to entities, see PointerSystem\r\n */\r\n update() {\r\n this.lastFramePointerDown = new Map(this.currentFramePointerDown);\r\n this.lastFramePointerCoords = new Map(this.currentFramePointerCoords);\r\n for (const event of this.currentFrameDown) {\r\n this.emit('down', event);\r\n const pointer = this.at(event.pointerId);\r\n pointer.emit('down', event);\r\n this.primary.emit('pointerdown', event);\r\n }\r\n for (const event of this.currentFrameUp) {\r\n this.emit('up', event);\r\n const pointer = this.at(event.pointerId);\r\n pointer.emit('up', event);\r\n }\r\n for (const event of this.currentFrameMove) {\r\n this.emit('move', event);\r\n const pointer = this.at(event.pointerId);\r\n pointer.emit('move', event);\r\n }\r\n for (const event of this.currentFrameCancel) {\r\n this.emit('cancel', event);\r\n const pointer = this.at(event.pointerId);\r\n pointer.emit('cancel', event);\r\n }\r\n for (const event of this.currentFrameWheel) {\r\n this.emit('wheel', event);\r\n this.primary.emit('pointerwheel', event);\r\n }\r\n }\r\n /**\r\n * Clears the current frame event and pointer data\r\n */\r\n clear() {\r\n for (const event of this.currentFrameUp) {\r\n this.currentFramePointerCoords.delete(event.pointerId);\r\n const ids = this._activeNativePointerIdsToNormalized.entries();\r\n for (const [native, normalized] of ids) {\r\n if (normalized === event.pointerId) {\r\n this._activeNativePointerIdsToNormalized.delete(native);\r\n }\r\n }\r\n }\r\n this.currentFrameDown.length = 0;\r\n this.currentFrameUp.length = 0;\r\n this.currentFrameMove.length = 0;\r\n this.currentFrameCancel.length = 0;\r\n this.currentFrameWheel.length = 0;\r\n }\r\n /**\r\n * Initializes the pointer event receiver so that it can start listening to native\r\n * browser events.\r\n */\r\n init(options) {\r\n var _a;\r\n // Disabling the touch action avoids browser/platform gestures from firing on the canvas\r\n // It is important on mobile to have touch action 'none'\r\n // https://stackoverflow.com/questions/48124372/pointermove-event-not-working-with-touch-why-not\r\n if (this.target === this.engine.canvas) {\r\n this.engine.canvas.style.touchAction = 'none';\r\n }\r\n else {\r\n document.body.style.touchAction = 'none';\r\n }\r\n // Preferred pointer events\r\n if (window.PointerEvent) {\r\n this.target.addEventListener('pointerdown', this._boundHandle);\r\n this.target.addEventListener('pointerup', this._boundHandle);\r\n this.target.addEventListener('pointermove', this._boundHandle);\r\n this.target.addEventListener('pointercancel', this._boundHandle);\r\n }\r\n else {\r\n // Touch Events\r\n this.target.addEventListener('touchstart', this._boundHandle);\r\n this.target.addEventListener('touchend', this._boundHandle);\r\n this.target.addEventListener('touchmove', this._boundHandle);\r\n this.target.addEventListener('touchcancel', this._boundHandle);\r\n // Mouse Events\r\n this.target.addEventListener('mousedown', this._boundHandle);\r\n this.target.addEventListener('mouseup', this._boundHandle);\r\n this.target.addEventListener('mousemove', this._boundHandle);\r\n }\r\n // MDN MouseWheelEvent\r\n const wheelOptions = {\r\n passive: !(this.engine.pageScrollPreventionMode === ScrollPreventionMode.All ||\r\n this.engine.pageScrollPreventionMode === ScrollPreventionMode.Canvas)\r\n };\r\n if ('onwheel' in document.createElement('div')) {\r\n // Modern Browsers\r\n this.target.addEventListener('wheel', this._boundWheel, wheelOptions);\r\n }\r\n else if (document.onmousewheel !== undefined) {\r\n // Webkit and IE\r\n this.target.addEventListener('mousewheel', this._boundWheel, wheelOptions);\r\n }\r\n else {\r\n // Remaining browser and older Firefox\r\n this.target.addEventListener('MozMousePixelScroll', this._boundWheel, wheelOptions);\r\n }\r\n const grabWindowFocus = (_a = options === null || options === void 0 ? void 0 : options.grabWindowFocus) !== null && _a !== void 0 ? _a : true;\r\n // Handle cross origin iframe\r\n if (grabWindowFocus && isCrossOriginIframe()) {\r\n const grabFocus = () => {\r\n window.focus();\r\n };\r\n // Preferred pointer events\r\n if (window.PointerEvent) {\r\n this.target.addEventListener('pointerdown', grabFocus);\r\n }\r\n else {\r\n // Touch Events\r\n this.target.addEventListener('touchstart', grabFocus);\r\n // Mouse Events\r\n this.target.addEventListener('mousedown', grabFocus);\r\n }\r\n }\r\n }\r\n detach() {\r\n // Preferred pointer events\r\n if (window.PointerEvent) {\r\n this.target.removeEventListener('pointerdown', this._boundHandle);\r\n this.target.removeEventListener('pointerup', this._boundHandle);\r\n this.target.removeEventListener('pointermove', this._boundHandle);\r\n this.target.removeEventListener('pointercancel', this._boundHandle);\r\n }\r\n else {\r\n // Touch Events\r\n this.target.removeEventListener('touchstart', this._boundHandle);\r\n this.target.removeEventListener('touchend', this._boundHandle);\r\n this.target.removeEventListener('touchmove', this._boundHandle);\r\n this.target.removeEventListener('touchcancel', this._boundHandle);\r\n // Mouse Events\r\n this.target.removeEventListener('mousedown', this._boundHandle);\r\n this.target.removeEventListener('mouseup', this._boundHandle);\r\n this.target.removeEventListener('mousemove', this._boundHandle);\r\n }\r\n if ('onwheel' in document.createElement('div')) {\r\n // Modern Browsers\r\n this.target.removeEventListener('wheel', this._boundWheel);\r\n }\r\n else if (document.onmousewheel !== undefined) {\r\n // Webkit and IE\r\n this.target.addEventListener('mousewheel', this._boundWheel);\r\n }\r\n else {\r\n // Remaining browser and older Firefox\r\n this.target.addEventListener('MozMousePixelScroll', this._boundWheel);\r\n }\r\n }\r\n /**\r\n * Take native pointer id and map it to index in active pointers\r\n * @param nativePointerId\r\n */\r\n _normalizePointerId(nativePointerId) {\r\n // Add to the the native pointer set id\r\n this._activeNativePointerIdsToNormalized.set(nativePointerId, -1);\r\n // Native pointer ids in ascending order\r\n const currentPointerIds = Array.from(this._activeNativePointerIdsToNormalized.keys()).sort((a, b) => a - b);\r\n // The index into sorted ids will be the new id, will always have an id\r\n const id = currentPointerIds.findIndex(p => p === nativePointerId);\r\n // Save the mapping so we can reverse it later\r\n this._activeNativePointerIdsToNormalized.set(nativePointerId, id);\r\n // ignore pointer because game isn't watching\r\n return id;\r\n }\r\n /**\r\n * Responsible for handling and parsing pointer events\r\n */\r\n _handle(ev) {\r\n ev.preventDefault();\r\n const eventCoords = new Map();\r\n let button;\r\n let pointerType;\r\n if (isTouchEvent(ev)) {\r\n button = PointerButton.Unknown;\r\n pointerType = PointerType.Touch;\r\n // https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent\r\n for (let i = 0; i < ev.changedTouches.length; i++) {\r\n const touch = ev.changedTouches[i];\r\n const coordinates = GlobalCoordinates.fromPagePosition(touch.pageX, touch.pageY, this.engine);\r\n const nativePointerId = i + 1;\r\n const pointerId = this._normalizePointerId(nativePointerId);\r\n this.currentFramePointerCoords.set(pointerId, coordinates);\r\n eventCoords.set(pointerId, coordinates);\r\n }\r\n }\r\n else {\r\n button = this._nativeButtonToPointerButton(ev.button);\r\n pointerType = PointerType.Mouse;\r\n const coordinates = GlobalCoordinates.fromPagePosition(ev.pageX, ev.pageY, this.engine);\r\n let nativePointerId = 1;\r\n if (isPointerEvent(ev)) {\r\n nativePointerId = ev.pointerId;\r\n pointerType = this._stringToPointerType(ev.pointerType);\r\n }\r\n const pointerId = this._normalizePointerId(nativePointerId);\r\n this.currentFramePointerCoords.set(pointerId, coordinates);\r\n eventCoords.set(pointerId, coordinates);\r\n }\r\n for (const [pointerId, coord] of eventCoords.entries()) {\r\n switch (ev.type) {\r\n case 'mousedown':\r\n case 'pointerdown':\r\n case 'touchstart':\r\n this.currentFrameDown.push(new PointerEvent('down', pointerId, button, pointerType, coord, ev));\r\n this.currentFramePointerDown.set(pointerId, true);\r\n break;\r\n case 'mouseup':\r\n case 'pointerup':\r\n case 'touchend':\r\n this.currentFrameUp.push(new PointerEvent('up', pointerId, button, pointerType, coord, ev));\r\n this.currentFramePointerDown.set(pointerId, false);\r\n break;\r\n case 'mousemove':\r\n case 'pointermove':\r\n case 'touchmove':\r\n this.currentFrameMove.push(new PointerEvent('move', pointerId, button, pointerType, coord, ev));\r\n break;\r\n case 'touchcancel':\r\n case 'pointercancel':\r\n this.currentFrameCancel.push(new PointerEvent('cancel', pointerId, button, pointerType, coord, ev));\r\n break;\r\n }\r\n }\r\n }\r\n _handleWheel(ev) {\r\n // Should we prevent page scroll because of this event\r\n if (this.engine.pageScrollPreventionMode === ScrollPreventionMode.All ||\r\n (this.engine.pageScrollPreventionMode === ScrollPreventionMode.Canvas && ev.target === this.engine.canvas)) {\r\n ev.preventDefault();\r\n }\r\n const screen = this.engine.screen.pageToScreenCoordinates(vec(ev.pageX, ev.pageY));\r\n const world = this.engine.screen.screenToWorldCoordinates(screen);\r\n /**\r\n * A constant used to normalize wheel events across different browsers\r\n *\r\n * This normalization factor is pulled from\r\n * https://developer.mozilla.org/en-US/docs/Web/Events/wheel#Listening_to_this_event_across_browser\r\n */\r\n const ScrollWheelNormalizationFactor = -1 / 40;\r\n const deltaX = ev.deltaX || ev.wheelDeltaX * ScrollWheelNormalizationFactor || 0;\r\n const deltaY = ev.deltaY || ev.wheelDeltaY * ScrollWheelNormalizationFactor || ev.wheelDelta * ScrollWheelNormalizationFactor || ev.detail || 0;\r\n const deltaZ = ev.deltaZ || 0;\r\n let deltaMode = WheelDeltaMode.Pixel;\r\n if (ev.deltaMode) {\r\n if (ev.deltaMode === 1) {\r\n deltaMode = WheelDeltaMode.Line;\r\n }\r\n else if (ev.deltaMode === 2) {\r\n deltaMode = WheelDeltaMode.Page;\r\n }\r\n }\r\n const we = new WheelEvent(world.x, world.y, ev.pageX, ev.pageY, screen.x, screen.y, 0, deltaX, deltaY, deltaZ, deltaMode, ev);\r\n this.currentFrameWheel.push(we);\r\n }\r\n /**\r\n * Triggers an excalibur pointer event in a world space pos\r\n *\r\n * Useful for testing pointers in excalibur\r\n * @param type\r\n * @param pos\r\n */\r\n triggerEvent(type, pos) {\r\n const page = this.engine.screen.worldToPageCoordinates(pos);\r\n // Send an event to the event receiver\r\n if (window.PointerEvent) {\r\n this._handle(new window.PointerEvent('pointer' + type, {\r\n pointerId: 0,\r\n clientX: page.x,\r\n clientY: page.y\r\n }));\r\n }\r\n else {\r\n // Safari hack\r\n this._handle(new window.MouseEvent('mouse' + type, {\r\n clientX: page.x,\r\n clientY: page.y\r\n }));\r\n }\r\n // Force update pointer system\r\n const pointerSystem = this.engine.currentScene.world.systemManager.get(PointerSystem);\r\n const transformEntities = this.engine.currentScene.world.queryManager.createQuery(pointerSystem.types);\r\n pointerSystem.preupdate();\r\n pointerSystem.update(transformEntities.getEntities());\r\n }\r\n _nativeButtonToPointerButton(s) {\r\n switch (s) {\r\n case NativePointerButton.NoButton:\r\n return PointerButton.NoButton;\r\n case NativePointerButton.Left:\r\n return PointerButton.Left;\r\n case NativePointerButton.Middle:\r\n return PointerButton.Middle;\r\n case NativePointerButton.Right:\r\n return PointerButton.Right;\r\n case NativePointerButton.Unknown:\r\n return PointerButton.Unknown;\r\n default:\r\n return fail(s);\r\n }\r\n }\r\n _stringToPointerType(s) {\r\n switch (s) {\r\n case 'touch':\r\n return PointerType.Touch;\r\n case 'mouse':\r\n return PointerType.Mouse;\r\n case 'pen':\r\n return PointerType.Pen;\r\n default:\r\n return PointerType.Unknown;\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Util/Fps.ts\nclass FpsSampler {\r\n constructor(options) {\r\n var _a;\r\n this._samplePeriod = 100;\r\n this._currentFrameTime = 0;\r\n this._frames = 0;\r\n this._previousSampleTime = 0;\r\n this._beginFrameTime = 0;\r\n this._fps = options.initialFps;\r\n this._samplePeriod = (_a = options.samplePeriod) !== null && _a !== void 0 ? _a : this._samplePeriod;\r\n this._currentFrameTime = 1000 / options.initialFps;\r\n this._nowFn = options.nowFn;\r\n this._previousSampleTime = this._nowFn();\r\n }\r\n /**\r\n * Start of code block to sample FPS for\r\n */\r\n start() {\r\n this._beginFrameTime = this._nowFn();\r\n }\r\n /**\r\n * End of code block to sample FPS for\r\n */\r\n end() {\r\n this._frames++;\r\n const time = this._nowFn();\r\n this._currentFrameTime = time - this._beginFrameTime;\r\n if (time >= this._previousSampleTime + this._samplePeriod) {\r\n this._fps = (this._frames * 1000) / (time - this._previousSampleTime);\r\n this._previousSampleTime = time;\r\n this._frames = 0;\r\n }\r\n }\r\n /**\r\n * Return the currently sampled fps over the last sample period, by default every 100ms\r\n */\r\n get fps() {\r\n return this._fps;\r\n }\r\n /**\r\n * Return the instantaneous fps, this can be less useful because it will fluctuate given the current frames time\r\n */\r\n get instant() {\r\n return 1000 / this._currentFrameTime;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Util/Clock.ts\n\r\n\r\n/**\r\n * Abstract Clock is the base type of all Clocks\r\n *\r\n * It has a few opinions\r\n * 1. It manages the calculation of what \"elapsed\" time means and thus maximum fps\r\n * 2. The default timing api is implemented in now()\r\n *\r\n * To implement your own clock, extend Clock and override start/stop to start and stop the clock, then call update() with whatever\r\n * method is unique to your clock implementation.\r\n */\r\nclass Clock {\r\n constructor(options) {\r\n var _a, _b, _c;\r\n this._onFatalException = () => { };\r\n this._maxFps = Infinity;\r\n this._lastTime = 0;\r\n this._elapsed = 1;\r\n this._scheduledCbs = [];\r\n this._totalElapsed = 0;\r\n this._options = options;\r\n this.tick = options.tick;\r\n this._lastTime = (_a = this.now()) !== null && _a !== void 0 ? _a : 0;\r\n this._maxFps = (_b = options.maxFps) !== null && _b !== void 0 ? _b : this._maxFps;\r\n this._onFatalException = (_c = options.onFatalException) !== null && _c !== void 0 ? _c : this._onFatalException;\r\n this.fpsSampler = new FpsSampler({\r\n initialFps: 60,\r\n nowFn: () => this.now()\r\n });\r\n }\r\n /**\r\n * Get the elapsed time for the last completed frame\r\n */\r\n elapsed() {\r\n return this._elapsed;\r\n }\r\n /**\r\n * Get the current time in milliseconds\r\n */\r\n now() {\r\n return performance.now();\r\n }\r\n toTestClock() {\r\n const testClock = new TestClock({\r\n ...this._options,\r\n defaultUpdateMs: 16.6\r\n });\r\n return testClock;\r\n }\r\n toStandardClock() {\r\n const clock = new StandardClock({\r\n ...this._options\r\n });\r\n return clock;\r\n }\r\n setFatalExceptionHandler(handler) {\r\n this._onFatalException = handler;\r\n }\r\n /**\r\n * Schedule a callback to fire given a timeout in milliseconds using the excalibur [[Clock]]\r\n *\r\n * This is useful to use over the built in browser `setTimeout` because callbacks will be tied to the\r\n * excalibur update clock, instead of browser time, this means that callbacks wont fire if the game is\r\n * stopped or paused.\r\n *\r\n * @param cb callback to fire\r\n * @param timeoutMs Optionally specify a timeout in milliseconds from now, default is 0ms which means the next possible tick\r\n */\r\n schedule(cb, timeoutMs = 0) {\r\n // Scheduled based on internal elapsed time\r\n const scheduledTime = this._totalElapsed + timeoutMs;\r\n this._scheduledCbs.push([cb, scheduledTime]);\r\n }\r\n _runScheduledCbs() {\r\n // walk backwards to delete items as we loop\r\n for (let i = this._scheduledCbs.length - 1; i > -1; i--) {\r\n if (this._scheduledCbs[i][1] <= this._totalElapsed) {\r\n this._scheduledCbs[i][0]();\r\n this._scheduledCbs.splice(i, 1);\r\n }\r\n }\r\n }\r\n update(overrideUpdateMs) {\r\n try {\r\n this.fpsSampler.start();\r\n // Get the time to calculate time-elapsed\r\n const now = this.now();\r\n let elapsed = now - this._lastTime || 1; // first frame\r\n // Constrain fps\r\n const fpsInterval = (1000 / this._maxFps);\r\n // only run frame if enough time has elapsed\r\n if (elapsed >= fpsInterval) {\r\n let leftover = 0;\r\n if (fpsInterval !== 0) {\r\n leftover = (elapsed % fpsInterval);\r\n elapsed = elapsed - leftover; // shift elapsed to be \"in phase\" with the current loop fps\r\n }\r\n // Resolves issue #138 if the game has been paused, or blurred for\r\n // more than a 200 milliseconds, reset elapsed time to 1. This improves reliability\r\n // and provides more expected behavior when the engine comes back\r\n // into focus\r\n if (elapsed > 200) {\r\n elapsed = 1;\r\n }\r\n // tick the mainloop and run scheduled callbacks\r\n this._elapsed = overrideUpdateMs || elapsed;\r\n this._totalElapsed += this._elapsed;\r\n this._runScheduledCbs();\r\n this.tick(overrideUpdateMs || elapsed);\r\n if (fpsInterval !== 0) {\r\n this._lastTime = now - leftover;\r\n }\r\n else {\r\n this._lastTime = now;\r\n }\r\n this.fpsSampler.end();\r\n }\r\n }\r\n catch (e) {\r\n this._onFatalException(e);\r\n this.stop();\r\n }\r\n }\r\n}\r\n/**\r\n * The [[StandardClock]] implements the requestAnimationFrame browser api to run the tick()\r\n */\r\nclass StandardClock extends Clock {\r\n constructor(options) {\r\n super(options);\r\n this._running = false;\r\n }\r\n isRunning() {\r\n return this._running;\r\n }\r\n start() {\r\n if (this._running) {\r\n return;\r\n }\r\n this._running = true;\r\n const mainloop = () => {\r\n // stop the loop\r\n if (!this._running) {\r\n return;\r\n }\r\n try {\r\n // request next loop\r\n this._requestId = window.requestAnimationFrame(mainloop);\r\n this.update();\r\n }\r\n catch (e) {\r\n window.cancelAnimationFrame(this._requestId);\r\n throw e;\r\n }\r\n };\r\n // begin the first frame\r\n mainloop();\r\n }\r\n stop() {\r\n this._running = false;\r\n }\r\n}\r\n/**\r\n * The TestClock is meant for debugging interactions in excalibur that require precise timing to replicate or test\r\n */\r\nclass TestClock extends Clock {\r\n constructor(options) {\r\n super({\r\n ...options\r\n });\r\n this._logger = Logger.getInstance();\r\n this._running = false;\r\n this._currentTime = 0;\r\n this._updateMs = options.defaultUpdateMs;\r\n }\r\n /**\r\n * Get the current time in milliseconds\r\n */\r\n now() {\r\n var _a;\r\n return (_a = this._currentTime) !== null && _a !== void 0 ? _a : 0;\r\n }\r\n isRunning() {\r\n return this._running;\r\n }\r\n start() {\r\n this._running = true;\r\n }\r\n stop() {\r\n this._running = false;\r\n }\r\n /**\r\n * Manually step the clock forward 1 tick, optionally specify an elapsed time in milliseconds\r\n * @param overrideUpdateMs\r\n */\r\n step(overrideUpdateMs) {\r\n const time = overrideUpdateMs !== null && overrideUpdateMs !== void 0 ? overrideUpdateMs : this._updateMs;\r\n if (this._running) {\r\n // to be comparable to RAF this needs to be a full blown Task\r\n // For example, images cannot decode synchronously in a single step\r\n this.update(time);\r\n this._currentTime += time;\r\n }\r\n else {\r\n this._logger.warn('The clock is not running, no step will be performed');\r\n }\r\n }\r\n /**\r\n * Run a number of steps that tick the clock, optionally specify an elapsed time in milliseconds\r\n * @param numberOfSteps\r\n * @param overrideUpdateMs\r\n */\r\n run(numberOfSteps, overrideUpdateMs) {\r\n for (let i = 0; i < numberOfSteps; i++) {\r\n this.step(overrideUpdateMs !== null && overrideUpdateMs !== void 0 ? overrideUpdateMs : this._updateMs);\r\n }\r\n }\r\n}\r\n\n// EXTERNAL MODULE: ./Util/Toaster.css\nvar Util_Toaster = __webpack_require__(7379);\n;// CONCATENATED MODULE: ./Util/Toaster.ts\n\r\n/**\r\n * The Toaster is only meant to be called from inside Excalibur to display messages to players\r\n */\r\nclass Toaster {\r\n constructor() {\r\n this._toasterCss = Util_Toaster/* default */.Z.toString();\r\n this._isInitialized = false;\r\n }\r\n _initialize() {\r\n if (!this._isInitialized) {\r\n this._container = document.createElement('div');\r\n this._container.id = 'ex-toast-container';\r\n document.body.appendChild(this._container);\r\n this._isInitialized = true;\r\n this._styleBlock = document.createElement('style');\r\n this._styleBlock.textContent = this._toasterCss;\r\n document.head.appendChild(this._styleBlock);\r\n }\r\n }\r\n dispose() {\r\n this._container.parentElement.removeChild(this._container);\r\n this._styleBlock.parentElement.removeChild(this._styleBlock);\r\n this._isInitialized = false;\r\n }\r\n _createFragment(message) {\r\n const toastMessage = document.createElement('span');\r\n toastMessage.innerText = message;\r\n return toastMessage;\r\n }\r\n /**\r\n * Display a toast message to a player\r\n * @param message Text of the message, messages may have a single \"[LINK]\" to influence placement\r\n * @param linkTarget Optionally specify a link location\r\n * @param linkName Optionally specify a name for that link location\r\n */\r\n toast(message, linkTarget, linkName) {\r\n this._initialize();\r\n const toast = document.createElement('div');\r\n toast.className = 'ex-toast-message';\r\n const messageFragments = message.split('[LINK]').map(message => this._createFragment(message));\r\n if (linkTarget) {\r\n const link = document.createElement('a');\r\n link.href = linkTarget;\r\n if (linkName) {\r\n link.innerText = linkName;\r\n }\r\n else {\r\n link.innerText = linkTarget;\r\n }\r\n messageFragments.splice(1, 0, link);\r\n }\r\n // Assembly message\r\n const finalMessage = document.createElement('div');\r\n messageFragments.forEach(message => {\r\n finalMessage.appendChild(message);\r\n });\r\n toast.appendChild(finalMessage);\r\n // Dismiss button\r\n const dismissBtn = document.createElement('button');\r\n dismissBtn.innerText = 'x';\r\n dismissBtn.addEventListener('click', () => {\r\n this._container.removeChild(toast);\r\n });\r\n toast.appendChild(dismissBtn);\r\n // Escape to dismiss\r\n const keydownHandler = (evt) => {\r\n if (evt.key === 'Escape') {\r\n try {\r\n this._container.removeChild(toast);\r\n }\r\n catch (_a) {\r\n // pass\r\n }\r\n }\r\n document.removeEventListener('keydown', keydownHandler);\r\n };\r\n document.addEventListener('keydown', keydownHandler);\r\n // Insert into container\r\n const first = this._container.firstChild;\r\n this._container.insertBefore(toast, first);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Input/InputMapper.ts\n/**\r\n * This allows you to map multiple inputs to specific commands! This is especially useful when\r\n * you need to allow multiple input sources to control a specific action.\r\n */\r\nclass InputMapper {\r\n constructor(inputs) {\r\n this.inputs = inputs;\r\n this._handlers = new Map();\r\n }\r\n /**\r\n * Executes the input map, called internally by Excalibur\r\n */\r\n execute() {\r\n for (const [input, command] of this._handlers.entries()) {\r\n const results = input(this.inputs);\r\n if (results) {\r\n command(results);\r\n }\r\n }\r\n }\r\n /**\r\n * This allows you to map multiple inputs to specific commands! This is useful\r\n *\r\n * The inputHandler should return a truthy value if you wish the commandHandler to fire.\r\n *\r\n * Example:\r\n * ```typescript\r\n * const moveRight = (amount: number) => { actor.vel.x = 100 * amount }\r\n * const moveLeft = (amount: number) => { actor.vel.x = -100 * amount }\r\n * const moveUp = (amount: number) => { actor.vel.y = -100 * amount }\r\n * const moveDown = (amount: number) => { actor.vel.y = 100 * amount }\r\n *\r\n * engine.inputMapper.on(({keyboard}) => keyboard.isHeld(ex.Keys.ArrowRight) ? 1 : 0, moveRight);\r\n * engine.inputMapper.on(({gamepads}) => gamepads.at(0).isButtonPressed(ex.Buttons.DpadRight) ? 1 : 0, moveRight);\r\n * engine.inputMapper.on(({gamepads}) => gamepads.at(0).getAxes(ex.Axes.LeftStickX) > 0 ?\r\n * gamepads.at(0).getAxes(ex.Axes.LeftStickX) : 0, moveRight);\r\n * ```\r\n * @param inputHandler\r\n * @param commandHandler\r\n */\r\n on(inputHandler, commandHandler) {\r\n this._handlers.set(inputHandler, commandHandler);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Engine.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\npolyfill();\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst EngineEvents = {\r\n FallbackGraphicsContext: 'fallbackgraphicscontext',\r\n Initialize: 'initialize',\r\n Visible: 'visible',\r\n Hidden: 'hidden',\r\n Start: 'start',\r\n Stop: 'stop',\r\n PreUpdate: 'preupdate',\r\n PostUpdate: 'postupdate',\r\n PreFrame: 'preframe',\r\n PostFrame: 'postframe',\r\n PreDraw: 'predraw',\r\n PostDraw: 'postdraw'\r\n};\r\n/**\r\n * Enum representing the different mousewheel event bubble prevention\r\n */\r\nvar ScrollPreventionMode;\r\n(function (ScrollPreventionMode) {\r\n /**\r\n * Do not prevent any page scrolling\r\n */\r\n ScrollPreventionMode[ScrollPreventionMode[\"None\"] = 0] = \"None\";\r\n /**\r\n * Prevent page scroll if mouse is over the game canvas\r\n */\r\n ScrollPreventionMode[ScrollPreventionMode[\"Canvas\"] = 1] = \"Canvas\";\r\n /**\r\n * Prevent all page scrolling via mouse wheel\r\n */\r\n ScrollPreventionMode[ScrollPreventionMode[\"All\"] = 2] = \"All\";\r\n})(ScrollPreventionMode || (ScrollPreventionMode = {}));\r\n/**\r\n * The Excalibur Engine\r\n *\r\n * The [[Engine]] is the main driver for a game. It is responsible for\r\n * starting/stopping the game, maintaining state, transmitting events,\r\n * loading resources, and managing the scene.\r\n */\r\nclass Engine {\r\n /**\r\n * The width of the game canvas in pixels (physical width component of the\r\n * resolution of the canvas element)\r\n */\r\n get canvasWidth() {\r\n return this.screen.canvasWidth;\r\n }\r\n /**\r\n * Returns half width of the game canvas in pixels (half physical width component)\r\n */\r\n get halfCanvasWidth() {\r\n return this.screen.halfCanvasWidth;\r\n }\r\n /**\r\n * The height of the game canvas in pixels, (physical height component of\r\n * the resolution of the canvas element)\r\n */\r\n get canvasHeight() {\r\n return this.screen.canvasHeight;\r\n }\r\n /**\r\n * Returns half height of the game canvas in pixels (half physical height component)\r\n */\r\n get halfCanvasHeight() {\r\n return this.screen.halfCanvasHeight;\r\n }\r\n /**\r\n * Returns the width of the engine's visible drawing surface in pixels including zoom and device pixel ratio.\r\n */\r\n get drawWidth() {\r\n return this.screen.drawWidth;\r\n }\r\n /**\r\n * Returns half the width of the engine's visible drawing surface in pixels including zoom and device pixel ratio.\r\n */\r\n get halfDrawWidth() {\r\n return this.screen.halfDrawWidth;\r\n }\r\n /**\r\n * Returns the height of the engine's visible drawing surface in pixels including zoom and device pixel ratio.\r\n */\r\n get drawHeight() {\r\n return this.screen.drawHeight;\r\n }\r\n /**\r\n * Returns half the height of the engine's visible drawing surface in pixels including zoom and device pixel ratio.\r\n */\r\n get halfDrawHeight() {\r\n return this.screen.halfDrawHeight;\r\n }\r\n /**\r\n * Returns whether excalibur detects the current screen to be HiDPI\r\n */\r\n get isHiDpi() {\r\n return this.screen.isHiDpi;\r\n }\r\n /**\r\n * Access [[stats]] that holds frame statistics.\r\n */\r\n get stats() {\r\n return this.debug.stats;\r\n }\r\n /**\r\n * Indicates whether the engine is set to fullscreen or not\r\n */\r\n get isFullscreen() {\r\n return this.screen.isFullScreen;\r\n }\r\n /**\r\n * Indicates the current [[DisplayMode]] of the engine.\r\n */\r\n get displayMode() {\r\n return this.screen.displayMode;\r\n }\r\n /**\r\n * Returns the calculated pixel ration for use in rendering\r\n */\r\n get pixelRatio() {\r\n return this.screen.pixelRatio;\r\n }\r\n get isDebug() {\r\n return this._isDebug;\r\n }\r\n /**\r\n * Hints the graphics context to truncate fractional world space coordinates\r\n */\r\n get snapToPixel() {\r\n return this.graphicsContext.snapToPixel;\r\n }\r\n ;\r\n set snapToPixel(shouldSnapToPixel) {\r\n this.graphicsContext.snapToPixel = shouldSnapToPixel;\r\n }\r\n ;\r\n emit(eventName, event) {\r\n this.events.emit(eventName, event);\r\n }\r\n on(eventName, handler) {\r\n return this.events.on(eventName, handler);\r\n }\r\n once(eventName, handler) {\r\n return this.events.once(eventName, handler);\r\n }\r\n off(eventName, handler) {\r\n this.events.off(eventName, handler);\r\n }\r\n /**\r\n * Creates a new game using the given [[EngineOptions]]. By default, if no options are provided,\r\n * the game will be rendered full screen (taking up all available browser window space).\r\n * You can customize the game rendering through [[EngineOptions]].\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var game = new ex.Engine({\r\n * width: 0, // the width of the canvas\r\n * height: 0, // the height of the canvas\r\n * enableCanvasTransparency: true, // the transparencySection of the canvas\r\n * canvasElementId: '', // the DOM canvas element ID, if you are providing your own\r\n * displayMode: ex.DisplayMode.FullScreen, // the display mode\r\n * pointerScope: ex.PointerScope.Document, // the scope of capturing pointer (mouse/touch) events\r\n * backgroundColor: ex.Color.fromHex('#2185d0') // background color of the engine\r\n * });\r\n *\r\n * // call game.start, which is a Promise\r\n * game.start().then(function () {\r\n * // ready, set, go!\r\n * });\r\n * ```\r\n */\r\n constructor(options) {\r\n var _a, _b, _c, _d, _e, _f;\r\n /**\r\n * Listen to and emit events on the Engine\r\n */\r\n this.events = new EventEmitter();\r\n /**\r\n * Optionally set the maximum fps if not set Excalibur will go as fast as the device allows.\r\n *\r\n * You may want to constrain max fps if your game cannot maintain fps consistently, it can look and feel better to have a 30fps game than\r\n * one that bounces between 30fps and 60fps\r\n */\r\n this.maxFps = Number.POSITIVE_INFINITY;\r\n /**\r\n * Contains all the scenes currently registered with Excalibur\r\n */\r\n this.scenes = {};\r\n this._suppressPlayButton = false;\r\n /**\r\n * Indicates whether audio should be paused when the game is no longer visible.\r\n */\r\n this.pauseAudioWhenHidden = true;\r\n /**\r\n * Indicates whether the engine should draw with debug information\r\n */\r\n this._isDebug = false;\r\n /**\r\n * Sets the Transparency for the engine.\r\n */\r\n this.enableCanvasTransparency = true;\r\n /**\r\n * The action to take when a fatal exception is thrown\r\n */\r\n this.onFatalException = (e) => {\r\n Logger.getInstance().fatal(e);\r\n };\r\n this._toaster = new Toaster();\r\n this._timescale = 1.0;\r\n this._isInitialized = false;\r\n this._deferredGoTo = null;\r\n this._originalOptions = {};\r\n this._performanceThresholdTriggered = false;\r\n this._fpsSamples = [];\r\n this._loadingComplete = false;\r\n this._isReady = false;\r\n this._isReadyPromise = new Promise(resolve => {\r\n this._isReadyResolve = resolve;\r\n });\r\n /**\r\n * Returns the current frames elapsed milliseconds\r\n */\r\n this.currentFrameElapsedMs = 0;\r\n /**\r\n * Returns the current frame lag when in fixed update mode\r\n */\r\n this.currentFrameLagMs = 0;\r\n this._lagMs = 0;\r\n this._screenShotRequests = [];\r\n options = { ...Engine._DEFAULT_ENGINE_OPTIONS, ...options };\r\n this._originalOptions = options;\r\n Flags.freeze();\r\n // Initialize browser events facade\r\n this.browser = new BrowserEvents(window, document);\r\n // Check compatibility\r\n const detector = new Detector();\r\n if (!options.suppressMinimumBrowserFeatureDetection && !(this._compatible = detector.test())) {\r\n const message = document.createElement('div');\r\n message.innerText = 'Sorry, your browser does not support all the features needed for Excalibur';\r\n document.body.appendChild(message);\r\n detector.failedTests.forEach(function (test) {\r\n const testMessage = document.createElement('div');\r\n testMessage.innerText = 'Browser feature missing ' + test;\r\n document.body.appendChild(testMessage);\r\n });\r\n if (options.canvasElementId) {\r\n const canvas = document.getElementById(options.canvasElementId);\r\n if (canvas) {\r\n canvas.parentElement.removeChild(canvas);\r\n }\r\n }\r\n return;\r\n }\r\n else {\r\n this._compatible = true;\r\n }\r\n // Use native console API for color fun\r\n // eslint-disable-next-line no-console\r\n if (console.log && !options.suppressConsoleBootMessage) {\r\n // eslint-disable-next-line no-console\r\n console.log(`%cPowered by Excalibur.js (v${EX_VERSION})`, 'background: #176BAA; color: white; border-radius: 5px; padding: 15px; font-size: 1.5em; line-height: 80px;');\r\n // eslint-disable-next-line no-console\r\n console.log('\\n\\\r\n /| ________________\\n\\\r\nO|===|* >________________>\\n\\\r\n \\\\|');\r\n // eslint-disable-next-line no-console\r\n console.log('Visit', 'http://excaliburjs.com', 'for more information');\r\n }\r\n // Suppress play button\r\n if (options.suppressPlayButton) {\r\n this._suppressPlayButton = true;\r\n }\r\n this._logger = Logger.getInstance();\r\n // If debug is enabled, let's log browser features to the console.\r\n if (this._logger.defaultLevel === LogLevel.Debug) {\r\n detector.logBrowserFeatures();\r\n }\r\n this._logger.debug('Building engine...');\r\n this.canvasElementId = options.canvasElementId;\r\n if (options.canvasElementId) {\r\n this._logger.debug('Using Canvas element specified: ' + options.canvasElementId);\r\n this.canvas = document.getElementById(options.canvasElementId);\r\n }\r\n else if (options.canvasElement) {\r\n this._logger.debug('Using Canvas element specified:', options.canvasElement);\r\n this.canvas = options.canvasElement;\r\n }\r\n else {\r\n this._logger.debug('Using generated canvas element');\r\n this.canvas = document.createElement('canvas');\r\n }\r\n let displayMode = (_a = options.displayMode) !== null && _a !== void 0 ? _a : DisplayMode.Fixed;\r\n if ((options.width && options.height) || options.viewport) {\r\n if (options.displayMode === undefined) {\r\n displayMode = DisplayMode.Fixed;\r\n }\r\n this._logger.debug('Engine viewport is size ' + options.width + ' x ' + options.height);\r\n }\r\n else if (!options.displayMode) {\r\n this._logger.debug('Engine viewport is fit');\r\n displayMode = DisplayMode.FitScreen;\r\n }\r\n this._originalDisplayMode = displayMode;\r\n // Canvas 2D fallback can be flagged on\r\n let useCanvasGraphicsContext = Flags.isEnabled('use-canvas-context');\r\n if (!useCanvasGraphicsContext) {\r\n // Attempt webgl first\r\n try {\r\n this.graphicsContext = new ExcaliburGraphicsContextWebGL({\r\n canvasElement: this.canvas,\r\n enableTransparency: this.enableCanvasTransparency,\r\n smoothing: options.antialiasing,\r\n backgroundColor: options.backgroundColor,\r\n snapToPixel: options.snapToPixel,\r\n useDrawSorting: options.useDrawSorting\r\n });\r\n }\r\n catch (e) {\r\n this._logger.warn(`Excalibur could not load webgl for some reason (${e.message}) and loaded a Canvas 2D fallback. ` +\r\n `Some features of Excalibur will not work in this mode. \\n\\n` +\r\n 'Read more about this issue at https://excaliburjs.com/docs/webgl');\r\n // fallback to canvas in case of failure\r\n useCanvasGraphicsContext = true;\r\n }\r\n }\r\n if (useCanvasGraphicsContext) {\r\n this.graphicsContext = new ExcaliburGraphicsContext2DCanvas({\r\n canvasElement: this.canvas,\r\n enableTransparency: this.enableCanvasTransparency,\r\n smoothing: options.antialiasing,\r\n backgroundColor: options.backgroundColor,\r\n snapToPixel: options.snapToPixel,\r\n useDrawSorting: options.useDrawSorting\r\n });\r\n }\r\n this.screen = new Screen({\r\n canvas: this.canvas,\r\n context: this.graphicsContext,\r\n antialiasing: (_b = options.antialiasing) !== null && _b !== void 0 ? _b : true,\r\n browser: this.browser,\r\n viewport: (_c = options.viewport) !== null && _c !== void 0 ? _c : (options.width && options.height ? { width: options.width, height: options.height } : Resolution.SVGA),\r\n resolution: options.resolution,\r\n displayMode,\r\n pixelRatio: options.suppressHiDPIScaling ? 1 : ((_d = options.pixelRatio) !== null && _d !== void 0 ? _d : null)\r\n });\r\n // Set default filtering based on antialiasing\r\n TextureLoader.filtering = options.antialiasing ? ImageFiltering.Blended : ImageFiltering.Pixel;\r\n if (options.backgroundColor) {\r\n this.backgroundColor = options.backgroundColor.clone();\r\n }\r\n this.maxFps = (_e = options.maxFps) !== null && _e !== void 0 ? _e : this.maxFps;\r\n this.fixedUpdateFps = (_f = options.fixedUpdateFps) !== null && _f !== void 0 ? _f : this.fixedUpdateFps;\r\n this.clock = new StandardClock({\r\n maxFps: this.maxFps,\r\n tick: this._mainloop.bind(this),\r\n onFatalException: (e) => this.onFatalException(e)\r\n });\r\n this.enableCanvasTransparency = options.enableCanvasTransparency;\r\n this._loader = new Loader();\r\n this._loader.wireEngine(this);\r\n this.debug = new Debug(this);\r\n this._initialize(options);\r\n this.rootScene = this.currentScene = new Scene();\r\n this.addScene('root', this.rootScene);\r\n window.___EXCALIBUR_DEVTOOL = this;\r\n }\r\n _monitorPerformanceThresholdAndTriggerFallback() {\r\n const { allow } = this._originalOptions.configurePerformanceCanvas2DFallback;\r\n let { threshold, showPlayerMessage } = this._originalOptions.configurePerformanceCanvas2DFallback;\r\n if (threshold === undefined) {\r\n threshold = Engine._DEFAULT_ENGINE_OPTIONS.configurePerformanceCanvas2DFallback.threshold;\r\n }\r\n if (showPlayerMessage === undefined) {\r\n showPlayerMessage = Engine._DEFAULT_ENGINE_OPTIONS.configurePerformanceCanvas2DFallback.showPlayerMessage;\r\n }\r\n if (!Flags.isEnabled('use-canvas-context') && allow && this.ready && !this._performanceThresholdTriggered) {\r\n // Calculate Average fps for last X number of frames after start\r\n if (this._fpsSamples.length === threshold.numberOfFrames) {\r\n this._fpsSamples.splice(0, 1);\r\n }\r\n this._fpsSamples.push(this.clock.fpsSampler.fps);\r\n let total = 0;\r\n for (let i = 0; i < this._fpsSamples.length; i++) {\r\n total += this._fpsSamples[i];\r\n }\r\n const average = total / this._fpsSamples.length;\r\n if (this._fpsSamples.length === threshold.numberOfFrames) {\r\n if (average <= threshold.fps) {\r\n this._performanceThresholdTriggered = true;\r\n this._logger.warn(`Switching to browser 2D Canvas fallback due to performance. Some features of Excalibur will not work in this mode.\\n` +\r\n 'this might mean your browser doesn\\'t have webgl enabled or hardware acceleration is unavailable.\\n\\n' +\r\n 'If in Chrome:\\n' +\r\n ' * Visit Settings > Advanced > System, and ensure \"Use Hardware Acceleration\" is checked.\\n' +\r\n ' * Visit chrome://flags/#ignore-gpu-blocklist and ensure \"Override software rendering list\" is \"enabled\"\\n' +\r\n 'If in Firefox, visit about:config\\n' +\r\n ' * Ensure webgl.disabled = false\\n' +\r\n ' * Ensure webgl.force-enabled = true\\n' +\r\n ' * Ensure layers.acceleration.force-enabled = true\\n\\n' +\r\n 'Read more about this issue at https://excaliburjs.com/docs/performance');\r\n if (showPlayerMessage) {\r\n this._toaster.toast('Excalibur is encountering performance issues. ' +\r\n 'It\\'s possible that your browser doesn\\'t have hardware acceleration enabled. ' +\r\n 'Visit [LINK] for more information and potential solutions.', 'https://excaliburjs.com/docs/performance');\r\n }\r\n this.useCanvas2DFallback();\r\n this.emit('fallbackgraphicscontext', this.graphicsContext);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Switches the engine's graphics context to the 2D Canvas.\r\n * @warning Some features of Excalibur will not work in this mode.\r\n */\r\n useCanvas2DFallback() {\r\n var _a, _b, _c;\r\n // Swap out the canvas\r\n const newCanvas = this.canvas.cloneNode(false);\r\n this.canvas.parentNode.replaceChild(newCanvas, this.canvas);\r\n this.canvas = newCanvas;\r\n const options = this._originalOptions;\r\n const displayMode = this._originalDisplayMode;\r\n // New graphics context\r\n this.graphicsContext = new ExcaliburGraphicsContext2DCanvas({\r\n canvasElement: this.canvas,\r\n enableTransparency: this.enableCanvasTransparency,\r\n smoothing: options.antialiasing,\r\n backgroundColor: options.backgroundColor,\r\n snapToPixel: options.snapToPixel,\r\n useDrawSorting: options.useDrawSorting\r\n });\r\n // Reset screen\r\n if (this.screen) {\r\n this.screen.dispose();\r\n }\r\n this.screen = new Screen({\r\n canvas: this.canvas,\r\n context: this.graphicsContext,\r\n antialiasing: (_a = options.antialiasing) !== null && _a !== void 0 ? _a : true,\r\n browser: this.browser,\r\n viewport: (_b = options.viewport) !== null && _b !== void 0 ? _b : (options.width && options.height ? { width: options.width, height: options.height } : Resolution.SVGA),\r\n resolution: options.resolution,\r\n displayMode,\r\n pixelRatio: options.suppressHiDPIScaling ? 1 : ((_c = options.pixelRatio) !== null && _c !== void 0 ? _c : null)\r\n });\r\n this.screen.setCurrentCamera(this.currentScene.camera);\r\n // Reset pointers\r\n this.input.pointers.detach();\r\n const pointerTarget = options && options.pointerScope === PointerScope.Document ? document : this.canvas;\r\n this.input.pointers = this.input.pointers.recreate(pointerTarget, this);\r\n this.input.pointers.init();\r\n }\r\n /**\r\n * Returns a BoundingBox of the top left corner of the screen\r\n * and the bottom right corner of the screen.\r\n */\r\n getWorldBounds() {\r\n return this.screen.getWorldBounds();\r\n }\r\n /**\r\n * Gets the current engine timescale factor (default is 1.0 which is 1:1 time)\r\n */\r\n get timescale() {\r\n return this._timescale;\r\n }\r\n /**\r\n * Sets the current engine timescale factor. Useful for creating slow-motion effects or fast-forward effects\r\n * when using time-based movement.\r\n */\r\n set timescale(value) {\r\n if (value <= 0) {\r\n Logger.getInstance().error('Cannot set engine.timescale to a value of 0 or less than 0.');\r\n return;\r\n }\r\n this._timescale = value;\r\n }\r\n /**\r\n * Adds a [[Timer]] to the [[currentScene]].\r\n * @param timer The timer to add to the [[currentScene]].\r\n */\r\n addTimer(timer) {\r\n return this.currentScene.addTimer(timer);\r\n }\r\n /**\r\n * Removes a [[Timer]] from the [[currentScene]].\r\n * @param timer The timer to remove to the [[currentScene]].\r\n */\r\n removeTimer(timer) {\r\n return this.currentScene.removeTimer(timer);\r\n }\r\n /**\r\n * Adds a [[Scene]] to the engine, think of scenes in Excalibur as you\r\n * would levels or menus.\r\n *\r\n * @param key The name of the scene, must be unique\r\n * @param scene The scene to add to the engine\r\n */\r\n addScene(key, scene) {\r\n if (this.scenes[key]) {\r\n this._logger.warn('Scene', key, 'already exists overwriting');\r\n }\r\n this.scenes[key] = scene;\r\n }\r\n /**\r\n * @internal\r\n */\r\n removeScene(entity) {\r\n if (entity instanceof Scene) {\r\n // remove scene\r\n for (const key in this.scenes) {\r\n if (this.scenes.hasOwnProperty(key)) {\r\n if (this.scenes[key] === entity) {\r\n delete this.scenes[key];\r\n }\r\n }\r\n }\r\n }\r\n if (typeof entity === 'string') {\r\n // remove scene\r\n delete this.scenes[entity];\r\n }\r\n }\r\n add(entity) {\r\n if (arguments.length === 2) {\r\n this.addScene(arguments[0], arguments[1]);\r\n return;\r\n }\r\n if (this._deferredGoTo && this.scenes[this._deferredGoTo]) {\r\n this.scenes[this._deferredGoTo].add(entity);\r\n }\r\n else {\r\n this.currentScene.add(entity);\r\n }\r\n }\r\n remove(entity) {\r\n if (entity instanceof Entity) {\r\n this.currentScene.remove(entity);\r\n }\r\n if (entity instanceof Scene) {\r\n this.removeScene(entity);\r\n }\r\n if (typeof entity === 'string') {\r\n this.removeScene(entity);\r\n }\r\n }\r\n /**\r\n * Changes the currently updating and drawing scene to a different,\r\n * named scene. Calls the [[Scene]] lifecycle events.\r\n * @param key The key of the scene to transition to.\r\n * @param data Optional data to send to the scene's onActivate method\r\n */\r\n goToScene(key, data) {\r\n // if not yet initialized defer goToScene\r\n if (!this.isInitialized) {\r\n this._deferredGoTo = key;\r\n return;\r\n }\r\n if (this.scenes[key]) {\r\n const previousScene = this.currentScene;\r\n const nextScene = this.scenes[key];\r\n this._logger.debug('Going to scene:', key);\r\n // only deactivate when initialized\r\n if (this.currentScene.isInitialized) {\r\n const context = { engine: this, previousScene, nextScene };\r\n this.currentScene._deactivate.apply(this.currentScene, [context, nextScene]);\r\n this.currentScene.events.emit('deactivate', new DeactivateEvent(context, this.currentScene));\r\n }\r\n // set current scene to new one\r\n this.currentScene = nextScene;\r\n this.screen.setCurrentCamera(nextScene.camera);\r\n // initialize the current scene if has not been already\r\n this.currentScene._initialize(this);\r\n const context = { engine: this, previousScene, nextScene, data };\r\n this.currentScene._activate.apply(this.currentScene, [context, nextScene]);\r\n this.currentScene.events.emit('activate', new ActivateEvent(context, this.currentScene));\r\n }\r\n else {\r\n this._logger.error('Scene', key, 'does not exist!');\r\n }\r\n }\r\n /**\r\n * Transforms the current x, y from screen coordinates to world coordinates\r\n * @param point Screen coordinate to convert\r\n */\r\n screenToWorldCoordinates(point) {\r\n return this.screen.screenToWorldCoordinates(point);\r\n }\r\n /**\r\n * Transforms a world coordinate, to a screen coordinate\r\n * @param point World coordinate to convert\r\n */\r\n worldToScreenCoordinates(point) {\r\n return this.screen.worldToScreenCoordinates(point);\r\n }\r\n /**\r\n * Initializes the internal canvas, rendering context, display mode, and native event listeners\r\n */\r\n _initialize(options) {\r\n var _a, _b, _c, _d;\r\n this.pageScrollPreventionMode = options.scrollPreventionMode;\r\n // initialize inputs\r\n const pointerTarget = options && options.pointerScope === PointerScope.Document ? document : this.canvas;\r\n this.input = {\r\n keyboard: new Keyboard(),\r\n pointers: new PointerEventReceiver(pointerTarget, this),\r\n gamepads: new Gamepads()\r\n };\r\n this.input.keyboard.init({\r\n grabWindowFocus: (_b = (_a = this._originalOptions) === null || _a === void 0 ? void 0 : _a.grabWindowFocus) !== null && _b !== void 0 ? _b : true\r\n });\r\n this.input.pointers.init({\r\n grabWindowFocus: (_d = (_c = this._originalOptions) === null || _c === void 0 ? void 0 : _c.grabWindowFocus) !== null && _d !== void 0 ? _d : true\r\n });\r\n this.input.gamepads.init();\r\n this.inputMapper = new InputMapper(this.input);\r\n // Issue #385 make use of the visibility api\r\n // https://developer.mozilla.org/en-US/docs/Web/Guide/User_experience/Using_the_Page_Visibility_API\r\n this.browser.document.on('visibilitychange', () => {\r\n if (document.visibilityState === 'hidden') {\r\n this.events.emit('hidden', new HiddenEvent(this));\r\n this._logger.debug('Window hidden');\r\n }\r\n else if (document.visibilityState === 'visible') {\r\n this.events.emit('visible', new VisibleEvent(this));\r\n this._logger.debug('Window visible');\r\n }\r\n });\r\n if (!this.canvasElementId && !options.canvasElement) {\r\n document.body.appendChild(this.canvas);\r\n }\r\n }\r\n onInitialize(_engine) {\r\n // Override me\r\n }\r\n /**\r\n * If supported by the browser, this will set the antialiasing flag on the\r\n * canvas. Set this to `false` if you want a 'jagged' pixel art look to your\r\n * image resources.\r\n * @param isSmooth Set smoothing to true or false\r\n */\r\n setAntialiasing(isSmooth) {\r\n this.screen.antialiasing = isSmooth;\r\n }\r\n /**\r\n * Return the current smoothing status of the canvas\r\n */\r\n getAntialiasing() {\r\n return this.screen.antialiasing;\r\n }\r\n /**\r\n * Gets whether the actor is Initialized\r\n */\r\n get isInitialized() {\r\n return this._isInitialized;\r\n }\r\n _overrideInitialize(engine) {\r\n if (!this.isInitialized) {\r\n this.onInitialize(engine);\r\n this.events.emit('initialize', new InitializeEvent(engine, this));\r\n this._isInitialized = true;\r\n if (this._deferredGoTo) {\r\n const deferredScene = this._deferredGoTo;\r\n this._deferredGoTo = null;\r\n this.goToScene(deferredScene);\r\n }\r\n else {\r\n this.goToScene('root');\r\n }\r\n }\r\n }\r\n /**\r\n * Updates the entire state of the game\r\n * @param delta Number of milliseconds elapsed since the last update.\r\n */\r\n _update(delta) {\r\n if (!this.ready) {\r\n // suspend updates until loading is finished\r\n this._loader.update(this, delta);\r\n // Update input listeners\r\n this.input.keyboard.update();\r\n this.input.gamepads.update();\r\n this.inputMapper.execute();\r\n return;\r\n }\r\n // Publish preupdate events\r\n this._preupdate(delta);\r\n // process engine level events\r\n this.currentScene.update(this, delta);\r\n // Update graphics postprocessors\r\n this.graphicsContext.updatePostProcessors(delta);\r\n // Publish update event\r\n this._postupdate(delta);\r\n // Update input listeners\r\n this.input.keyboard.update();\r\n this.input.gamepads.update();\r\n this.inputMapper.execute();\r\n }\r\n /**\r\n * @internal\r\n */\r\n _preupdate(delta) {\r\n this.emit('preupdate', new PreUpdateEvent(this, delta, this));\r\n this.onPreUpdate(this, delta);\r\n }\r\n onPreUpdate(_engine, _delta) {\r\n // Override me\r\n }\r\n /**\r\n * @internal\r\n */\r\n _postupdate(delta) {\r\n this.emit('postupdate', new PostUpdateEvent(this, delta, this));\r\n this.onPostUpdate(this, delta);\r\n }\r\n onPostUpdate(_engine, _delta) {\r\n // Override me\r\n }\r\n /**\r\n * Draws the entire game\r\n * @param delta Number of milliseconds elapsed since the last draw.\r\n */\r\n _draw(delta) {\r\n this.graphicsContext.beginDrawLifecycle();\r\n this.graphicsContext.clear();\r\n this._predraw(this.graphicsContext, delta);\r\n // Drawing nothing else while loading\r\n if (!this._isReady) {\r\n this._loader.canvas.draw(this.graphicsContext, 0, 0);\r\n this.graphicsContext.flush();\r\n return;\r\n }\r\n this.graphicsContext.backgroundColor = this.backgroundColor;\r\n this.currentScene.draw(this.graphicsContext, delta);\r\n this._postdraw(this.graphicsContext, delta);\r\n // Flush any pending drawings\r\n this.graphicsContext.flush();\r\n this.graphicsContext.endDrawLifecycle();\r\n this._checkForScreenShots();\r\n }\r\n /**\r\n * @internal\r\n */\r\n _predraw(_ctx, delta) {\r\n this.emit('predraw', new PreDrawEvent(_ctx, delta, this));\r\n this.onPreDraw(_ctx, delta);\r\n }\r\n onPreDraw(_ctx, _delta) {\r\n // Override me\r\n }\r\n /**\r\n * @internal\r\n */\r\n _postdraw(_ctx, delta) {\r\n this.emit('postdraw', new PostDrawEvent(_ctx, delta, this));\r\n this.onPostDraw(_ctx, delta);\r\n }\r\n onPostDraw(_ctx, _delta) {\r\n // Override me\r\n }\r\n /**\r\n * Enable or disable Excalibur debugging functionality.\r\n * @param toggle a value that debug drawing will be changed to\r\n */\r\n showDebug(toggle) {\r\n this._isDebug = toggle;\r\n }\r\n /**\r\n * Toggle Excalibur debugging functionality.\r\n */\r\n toggleDebug() {\r\n this._isDebug = !this._isDebug;\r\n return this._isDebug;\r\n }\r\n /**\r\n * Returns true when loading is totally complete and the player has clicked start\r\n */\r\n get loadingComplete() {\r\n return this._loadingComplete;\r\n }\r\n get ready() {\r\n return this._isReady;\r\n }\r\n isReady() {\r\n return this._isReadyPromise;\r\n }\r\n /**\r\n * Starts the internal game loop for Excalibur after loading\r\n * any provided assets.\r\n * @param loader Optional [[Loader]] to use to load resources. The default loader is [[Loader]], override to provide your own\r\n * custom loader.\r\n *\r\n * Note: start() only resolves AFTER the user has clicked the play button\r\n */\r\n async start(loader) {\r\n if (!this._compatible) {\r\n throw new Error('Excalibur is incompatible with your browser');\r\n }\r\n // Wire loader if we have it\r\n if (loader) {\r\n // Push the current user entered resolution/viewport\r\n this.screen.pushResolutionAndViewport();\r\n // Configure resolution for loader, it expects resolution === viewport\r\n this.screen.resolution = this.screen.viewport;\r\n this.screen.applyResolutionAndViewport();\r\n this._loader = loader;\r\n this._loader.suppressPlayButton = this._suppressPlayButton || this._loader.suppressPlayButton;\r\n this._loader.wireEngine(this);\r\n }\r\n // Start the excalibur clock which drives the mainloop\r\n // has started is a slight misnomer, it's really mainloop started\r\n this._logger.debug('Starting game clock...');\r\n this.browser.resume();\r\n this.clock.start();\r\n this._logger.debug('Game clock started');\r\n if (loader) {\r\n await this.load(this._loader);\r\n this._loadingComplete = true;\r\n // reset back to previous user resolution/viewport\r\n this.screen.popResolutionAndViewport();\r\n this.screen.applyResolutionAndViewport();\r\n }\r\n this._loadingComplete = true;\r\n // Initialize before ready\r\n this._overrideInitialize(this);\r\n this._isReady = true;\r\n this._isReadyResolve();\r\n this.emit('start', new GameStartEvent(this));\r\n return this._isReadyPromise;\r\n }\r\n _mainloop(elapsed) {\r\n this.emit('preframe', new PreFrameEvent(this, this.stats.prevFrame));\r\n const delta = elapsed * this.timescale;\r\n this.currentFrameElapsedMs = delta;\r\n // reset frame stats (reuse existing instances)\r\n const frameId = this.stats.prevFrame.id + 1;\r\n this.stats.currFrame.reset();\r\n this.stats.currFrame.id = frameId;\r\n this.stats.currFrame.delta = delta;\r\n this.stats.currFrame.fps = this.clock.fpsSampler.fps;\r\n GraphicsDiagnostics.clear();\r\n const beforeUpdate = this.clock.now();\r\n const fixedTimestepMs = 1000 / this.fixedUpdateFps;\r\n if (this.fixedUpdateFps) {\r\n this._lagMs += delta;\r\n while (this._lagMs >= fixedTimestepMs) {\r\n this._update(fixedTimestepMs);\r\n this._lagMs -= fixedTimestepMs;\r\n }\r\n }\r\n else {\r\n this._update(delta);\r\n }\r\n const afterUpdate = this.clock.now();\r\n this.currentFrameLagMs = this._lagMs;\r\n this._draw(delta);\r\n const afterDraw = this.clock.now();\r\n this.stats.currFrame.duration.update = afterUpdate - beforeUpdate;\r\n this.stats.currFrame.duration.draw = afterDraw - afterUpdate;\r\n this.stats.currFrame.graphics.drawnImages = GraphicsDiagnostics.DrawnImagesCount;\r\n this.stats.currFrame.graphics.drawCalls = GraphicsDiagnostics.DrawCallCount;\r\n this.emit('postframe', new PostFrameEvent(this, this.stats.currFrame));\r\n this.stats.prevFrame.reset(this.stats.currFrame);\r\n this._monitorPerformanceThresholdAndTriggerFallback();\r\n }\r\n /**\r\n * Stops Excalibur's main loop, useful for pausing the game.\r\n */\r\n stop() {\r\n if (this.clock.isRunning()) {\r\n this.emit('stop', new GameStopEvent(this));\r\n this.browser.pause();\r\n this.clock.stop();\r\n this._logger.debug('Game stopped');\r\n }\r\n }\r\n /**\r\n * Returns the Engine's running status, Useful for checking whether engine is running or paused.\r\n */\r\n isRunning() {\r\n return this.clock.isRunning();\r\n }\r\n /**\r\n * Takes a screen shot of the current viewport and returns it as an\r\n * HTML Image Element.\r\n * @param preserveHiDPIResolution in the case of HiDPI return the full scaled backing image, by default false\r\n */\r\n screenshot(preserveHiDPIResolution = false) {\r\n const screenShotPromise = new Promise((resolve) => {\r\n this._screenShotRequests.push({ preserveHiDPIResolution, resolve });\r\n });\r\n return screenShotPromise;\r\n }\r\n _checkForScreenShots() {\r\n // We must grab the draw buffer before we yield to the browser\r\n // the draw buffer is cleared after compositing\r\n // the reason for the asynchrony is setting `preserveDrawingBuffer: true`\r\n // forces the browser to copy buffers which can have a mass perf impact on mobile\r\n for (const request of this._screenShotRequests) {\r\n const finalWidth = request.preserveHiDPIResolution ? this.canvas.width : this.screen.resolution.width;\r\n const finalHeight = request.preserveHiDPIResolution ? this.canvas.height : this.screen.resolution.height;\r\n const screenshot = document.createElement('canvas');\r\n screenshot.width = finalWidth;\r\n screenshot.height = finalHeight;\r\n const ctx = screenshot.getContext('2d');\r\n ctx.imageSmoothingEnabled = this.screen.antialiasing;\r\n ctx.drawImage(this.canvas, 0, 0, finalWidth, finalHeight);\r\n const result = new Image();\r\n const raw = screenshot.toDataURL('image/png');\r\n result.src = raw;\r\n request.resolve(result);\r\n }\r\n // Reset state\r\n this._screenShotRequests.length = 0;\r\n }\r\n /**\r\n * Another option available to you to load resources into the game.\r\n * Immediately after calling this the game will pause and the loading screen\r\n * will appear.\r\n * @param loader Some [[Loadable]] such as a [[Loader]] collection, [[Sound]], or [[Texture]].\r\n */\r\n async load(loader) {\r\n try {\r\n await loader.load();\r\n }\r\n catch (e) {\r\n this._logger.error('Error loading resources, things may not behave properly', e);\r\n await Promise.resolve();\r\n }\r\n }\r\n}\r\n/**\r\n * Default [[EngineOptions]]\r\n */\r\nEngine._DEFAULT_ENGINE_OPTIONS = {\r\n width: 0,\r\n height: 0,\r\n enableCanvasTransparency: true,\r\n useDrawSorting: true,\r\n configurePerformanceCanvas2DFallback: {\r\n allow: true,\r\n showPlayerMessage: false,\r\n threshold: { fps: 20, numberOfFrames: 100 }\r\n },\r\n canvasElementId: '',\r\n canvasElement: undefined,\r\n snapToPixel: false,\r\n pointerScope: PointerScope.Canvas,\r\n suppressConsoleBootMessage: null,\r\n suppressMinimumBrowserFeatureDetection: null,\r\n suppressHiDPIScaling: null,\r\n suppressPlayButton: null,\r\n grabWindowFocus: true,\r\n scrollPreventionMode: ScrollPreventionMode.Canvas,\r\n backgroundColor: Color.fromHex('#2185d0') // Excalibur blue\r\n};\r\n\n;// CONCATENATED MODULE: ./Math/Index.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\n;// CONCATENATED MODULE: ./Debug/index.ts\n\r\n\r\n\r\n\n;// CONCATENATED MODULE: ./EventDispatcher.ts\n\r\n/**\r\n * @deprecated Use [[EventEmitter]] will be removed in v0.29.0\r\n */\r\nclass EventDispatcher {\r\n constructor() {\r\n this._handlers = {};\r\n this._wiredEventDispatchers = [];\r\n this._deferedHandlerRemovals = [];\r\n }\r\n /**\r\n * Clears any existing handlers or wired event dispatchers on this event dispatcher\r\n */\r\n clear() {\r\n this._handlers = {};\r\n this._wiredEventDispatchers = [];\r\n }\r\n _processDeferredHandlerRemovals() {\r\n for (const eventHandler of this._deferedHandlerRemovals) {\r\n this._removeHandler(eventHandler.name, eventHandler.handler);\r\n }\r\n this._deferedHandlerRemovals.length = 0;\r\n }\r\n /**\r\n * Emits an event for target\r\n * @param eventName The name of the event to publish\r\n * @param event Optionally pass an event data object to the handler\r\n */\r\n emit(eventName, event) {\r\n this._processDeferredHandlerRemovals();\r\n if (!eventName) {\r\n // key not mapped\r\n return;\r\n }\r\n eventName = eventName.toLowerCase();\r\n if (typeof event === 'undefined' || event === null) {\r\n event = new GameEvent();\r\n }\r\n let i, len;\r\n if (this._handlers[eventName]) {\r\n i = 0;\r\n len = this._handlers[eventName].length;\r\n for (i; i < len; i++) {\r\n this._handlers[eventName][i](event);\r\n }\r\n }\r\n i = 0;\r\n len = this._wiredEventDispatchers.length;\r\n for (i; i < len; i++) {\r\n this._wiredEventDispatchers[i].emit(eventName, event);\r\n }\r\n }\r\n /**\r\n * Subscribe an event handler to a particular event name, multiple handlers per event name are allowed.\r\n * @param eventName The name of the event to subscribe to\r\n * @param handler The handler callback to fire on this event\r\n */\r\n on(eventName, handler) {\r\n this._processDeferredHandlerRemovals();\r\n eventName = eventName.toLowerCase();\r\n if (!this._handlers[eventName]) {\r\n this._handlers[eventName] = [];\r\n }\r\n this._handlers[eventName].push(handler);\r\n }\r\n /**\r\n * Unsubscribe an event handler(s) from an event. If a specific handler\r\n * is specified for an event, only that handler will be unsubscribed.\r\n * Otherwise all handlers will be unsubscribed for that event.\r\n *\r\n * @param eventName The name of the event to unsubscribe\r\n * @param handler Optionally the specific handler to unsubscribe\r\n */\r\n off(eventName, handler) {\r\n this._deferedHandlerRemovals.push({ name: eventName, handler });\r\n }\r\n _removeHandler(eventName, handler) {\r\n eventName = eventName.toLowerCase();\r\n const eventHandlers = this._handlers[eventName];\r\n if (eventHandlers) {\r\n // if no explicit handler is give with the event name clear all handlers\r\n if (!handler) {\r\n this._handlers[eventName].length = 0;\r\n }\r\n else {\r\n const index = eventHandlers.indexOf(handler);\r\n if (index > -1) {\r\n this._handlers[eventName].splice(index, 1);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Once listens to an event one time, then unsubscribes from that event\r\n *\r\n * @param eventName The name of the event to subscribe to once\r\n * @param handler The handler of the event that will be auto unsubscribed\r\n */\r\n once(eventName, handler) {\r\n this._processDeferredHandlerRemovals();\r\n const metaHandler = (event) => {\r\n const ev = event || new GameEvent();\r\n this.off(eventName, metaHandler);\r\n handler(ev);\r\n };\r\n this.on(eventName, metaHandler);\r\n }\r\n /**\r\n * Wires this event dispatcher to also receive events from another\r\n */\r\n wire(eventDispatcher) {\r\n eventDispatcher._wiredEventDispatchers.push(this);\r\n }\r\n /**\r\n * Unwires this event dispatcher from another\r\n */\r\n unwire(eventDispatcher) {\r\n const index = eventDispatcher._wiredEventDispatchers.indexOf(this);\r\n if (index > -1) {\r\n eventDispatcher._wiredEventDispatchers.splice(index, 1);\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Label.ts\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Labels are the way to draw small amounts of text to the screen. They are\r\n * actors and inherit all of the benefits and capabilities.\r\n */\r\nclass Label extends Actor {\r\n get font() {\r\n return this._font;\r\n }\r\n set font(newFont) {\r\n this._font = newFont;\r\n this._text.font = newFont;\r\n }\r\n /**\r\n * The text to draw.\r\n */\r\n get text() {\r\n return this._text.text;\r\n }\r\n set text(text) {\r\n this._text.text = text;\r\n }\r\n get color() {\r\n return this._text.color;\r\n }\r\n set color(color) {\r\n if (this._text) {\r\n this._text.color = color;\r\n }\r\n }\r\n get opacity() {\r\n return this._text.opacity;\r\n }\r\n set opacity(opacity) {\r\n this._text.opacity = opacity;\r\n }\r\n /**\r\n * The [[SpriteFont]] to use, if any. Overrides [[Font|font]] if present.\r\n */\r\n get spriteFont() {\r\n return this._spriteFont;\r\n }\r\n set spriteFont(sf) {\r\n if (sf) {\r\n this._spriteFont = sf;\r\n this._text.font = this._spriteFont;\r\n }\r\n }\r\n /**\r\n * Build a new label\r\n * @param options\r\n */\r\n constructor(options) {\r\n super(options);\r\n this._font = new Font();\r\n this._text = new Text({ text: '', font: this._font });\r\n const { text, pos, x, y, spriteFont, font, color } = options;\r\n this.pos = pos !== null && pos !== void 0 ? pos : (x && y ? vec(x, y) : this.pos);\r\n this.text = text !== null && text !== void 0 ? text : this.text;\r\n this.font = font !== null && font !== void 0 ? font : this.font;\r\n this.spriteFont = spriteFont !== null && spriteFont !== void 0 ? spriteFont : this.spriteFont;\r\n this._text.color = color !== null && color !== void 0 ? color : this.color;\r\n const gfx = this.get(GraphicsComponent);\r\n gfx.anchor = Vector.Zero;\r\n gfx.use(this._text);\r\n }\r\n _initialize(engine) {\r\n super._initialize(engine);\r\n }\r\n /**\r\n * Returns the width of the text in the label (in pixels);\r\n */\r\n getTextWidth() {\r\n return this._text.width;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./TileMap/IsometricMap.ts\n\r\n\r\n\r\n\r\n\r\nclass IsometricTile extends Entity {\r\n getGraphics() {\r\n return this._graphics;\r\n }\r\n /**\r\n * Tile graphics\r\n */\r\n addGraphic(graphic) {\r\n this._graphics.push(graphic);\r\n this._gfx.visible = true;\r\n this._gfx.localBounds = this._recalculateBounds();\r\n }\r\n _recalculateBounds() {\r\n let bounds = this._tileBounds.clone();\r\n for (const graphic of this._graphics) {\r\n const offset = vec(this.map.graphicsOffset.x - this.map.tileWidth / 2, this.map.graphicsOffset.y - (this.map.renderFromTopOfGraphic ? 0 : (graphic.height - this.map.tileHeight)));\r\n bounds = bounds.combine(graphic.localBounds.translate(offset));\r\n }\r\n return bounds;\r\n }\r\n removeGraphic(graphic) {\r\n const index = this._graphics.indexOf(graphic);\r\n if (index > -1) {\r\n this._graphics.splice(index, 1);\r\n }\r\n this._gfx.localBounds = this._recalculateBounds();\r\n }\r\n clearGraphics() {\r\n this._graphics.length = 0;\r\n this._gfx.visible = false;\r\n this._gfx.localBounds = this._recalculateBounds();\r\n }\r\n getColliders() {\r\n return this._colliders;\r\n }\r\n /**\r\n * Adds a collider to the IsometricTile\r\n *\r\n * **Note!** the [[Tile.solid]] must be set to true for it to act as a \"fixed\" collider\r\n * @param collider\r\n */\r\n addCollider(collider) {\r\n this._colliders.push(collider);\r\n this.map.flagCollidersDirty();\r\n }\r\n /**\r\n * Removes a collider from the IsometricTile\r\n * @param collider\r\n */\r\n removeCollider(collider) {\r\n const index = this._colliders.indexOf(collider);\r\n if (index > -1) {\r\n this._colliders.splice(index, 1);\r\n }\r\n this.map.flagCollidersDirty();\r\n }\r\n /**\r\n * Clears all colliders from the IsometricTile\r\n */\r\n clearColliders() {\r\n this._colliders.length = 0;\r\n this.map.flagCollidersDirty();\r\n }\r\n /**\r\n * Returns the top left corner of the [[IsometricTile]] in world space\r\n */\r\n get pos() {\r\n return this.map.tileToWorld(vec(this.x, this.y));\r\n }\r\n /**\r\n * Returns the center of the [[IsometricTile]]\r\n */\r\n get center() {\r\n return this.pos.add(vec(0, this.map.tileHeight / 2));\r\n }\r\n /**\r\n * Construct a new IsometricTile\r\n * @param x tile coordinate in x (not world position)\r\n * @param y tile coordinate in y (not world position)\r\n * @param graphicsOffset offset that tile should be shifted by (default (0, 0))\r\n * @param map reference to owning IsometricMap\r\n */\r\n constructor(x, y, graphicsOffset, map) {\r\n super([\r\n new TransformComponent(),\r\n new GraphicsComponent({\r\n offset: graphicsOffset !== null && graphicsOffset !== void 0 ? graphicsOffset : Vector.Zero,\r\n onPostDraw: (gfx, elapsed) => this.draw(gfx, elapsed)\r\n }),\r\n new IsometricEntityComponent(map)\r\n ]);\r\n /**\r\n * Indicates whether this tile is solid\r\n */\r\n this.solid = false;\r\n this._tileBounds = new BoundingBox();\r\n this._graphics = [];\r\n /**\r\n * Tile colliders\r\n */\r\n this._colliders = [];\r\n this.x = x;\r\n this.y = y;\r\n this.map = map;\r\n this._transform = this.get(TransformComponent);\r\n this._isometricEntityComponent = this.get(IsometricEntityComponent);\r\n const halfTileWidth = this.map.tileWidth / 2;\r\n const halfTileHeight = this.map.tileHeight / 2;\r\n // See https://clintbellanger.net/articles/isometric_math/ for formula\r\n // The x position shifts left with every y step\r\n const xPos = (this.x - this.y) * halfTileWidth;\r\n // The y position needs to go down with every x step\r\n const yPos = (this.x + this.y) * halfTileHeight;\r\n this._transform.pos = vec(xPos, yPos);\r\n this._isometricEntityComponent.elevation = 0;\r\n this._gfx = this.get(GraphicsComponent);\r\n this._gfx.visible = false; // start not visible\r\n const totalWidth = this.map.tileWidth;\r\n const totalHeight = this.map.tileHeight;\r\n // initial guess at gfx bounds based on the tile\r\n const offset = vec(0, (this.map.renderFromTopOfGraphic ? totalHeight : 0));\r\n this._gfx.localBounds = this._tileBounds = new BoundingBox({\r\n left: -totalWidth / 2,\r\n top: -totalHeight,\r\n right: totalWidth / 2,\r\n bottom: totalHeight\r\n }).translate(offset);\r\n }\r\n draw(gfx, _elapsed) {\r\n const halfTileWidth = this.map.tileWidth / 2;\r\n gfx.save();\r\n // shift left origin to corner of map, not the left corner of the first sprite\r\n gfx.translate(-halfTileWidth, 0);\r\n for (const graphic of this._graphics) {\r\n graphic.draw(gfx, this.map.graphicsOffset.x, this.map.graphicsOffset.y - (this.map.renderFromTopOfGraphic ? 0 : (graphic.height - this.map.tileHeight)));\r\n }\r\n gfx.restore();\r\n }\r\n}\r\n/**\r\n * The IsometricMap is a special tile map that provides isometric rendering support to Excalibur\r\n *\r\n * The tileWidth and tileHeight should be the height and width in pixels of the parallelogram of the base of the tile art asset.\r\n * The tileWidth and tileHeight is not necessarily the same as your graphic pixel width and height.\r\n *\r\n * Please refer to the docs https://excaliburjs.com for more details calculating what your tile width and height should be given\r\n * your art assets.\r\n */\r\nclass IsometricMap extends Entity {\r\n constructor(options) {\r\n super([\r\n new TransformComponent(),\r\n new BodyComponent({\r\n type: CollisionType.Fixed\r\n }),\r\n new ColliderComponent(),\r\n new DebugGraphicsComponent((ctx) => this.debug(ctx), false)\r\n ], options.name);\r\n /**\r\n * Render the tile graphic from the top instead of the bottom\r\n *\r\n * default is `false` meaning rendering from the bottom\r\n */\r\n this.renderFromTopOfGraphic = false;\r\n this.graphicsOffset = vec(0, 0);\r\n this._collidersDirty = false;\r\n this._originalOffsets = new WeakMap();\r\n const { pos, tileWidth, tileHeight, columns: width, rows: height, renderFromTopOfGraphic, graphicsOffset } = options;\r\n this.transform = this.get(TransformComponent);\r\n if (pos) {\r\n this.transform.pos = pos;\r\n }\r\n this.collider = this.get(ColliderComponent);\r\n if (this.collider) {\r\n this.collider.set(this._composite = new CompositeCollider([]));\r\n }\r\n this.renderFromTopOfGraphic = renderFromTopOfGraphic !== null && renderFromTopOfGraphic !== void 0 ? renderFromTopOfGraphic : this.renderFromTopOfGraphic;\r\n this.graphicsOffset = graphicsOffset !== null && graphicsOffset !== void 0 ? graphicsOffset : this.graphicsOffset;\r\n this.tileWidth = tileWidth;\r\n this.tileHeight = tileHeight;\r\n this.columns = width;\r\n this.rows = height;\r\n this.tiles = new Array(width * height);\r\n // build up tile representation\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n const tile = new IsometricTile(x, y, this.graphicsOffset, this);\r\n this.tiles[x + y * width] = tile;\r\n this.addChild(tile);\r\n // TODO row/columns helpers\r\n }\r\n }\r\n }\r\n update() {\r\n if (this._collidersDirty) {\r\n this.updateColliders();\r\n this._collidersDirty = false;\r\n }\r\n }\r\n flagCollidersDirty() {\r\n this._collidersDirty = true;\r\n }\r\n _getOrSetColliderOriginalOffset(collider) {\r\n if (!this._originalOffsets.has(collider)) {\r\n const originalOffset = collider.offset;\r\n this._originalOffsets.set(collider, originalOffset);\r\n return originalOffset;\r\n }\r\n else {\r\n return this._originalOffsets.get(collider);\r\n }\r\n }\r\n updateColliders() {\r\n this._composite.clearColliders();\r\n const pos = this.get(TransformComponent).pos;\r\n for (const tile of this.tiles) {\r\n if (tile.solid) {\r\n for (const collider of tile.getColliders()) {\r\n const originalOffset = this._getOrSetColliderOriginalOffset(collider);\r\n collider.offset = this.tileToWorld(vec(tile.x, tile.y))\r\n .sub(pos)\r\n .add(originalOffset)\r\n .sub(vec(this.tileWidth / 2, this.tileHeight)); // We need to unshift height based on drawing\r\n collider.owner = this;\r\n this._composite.addCollider(collider);\r\n }\r\n }\r\n }\r\n this.collider.update();\r\n }\r\n /**\r\n * Convert world space coordinates to the tile x, y coordinate\r\n * @param worldCoordinate\r\n */\r\n worldToTile(worldCoordinate) {\r\n worldCoordinate = worldCoordinate.sub(this.transform.globalPos);\r\n const halfTileWidth = this.tileWidth / 2;\r\n const halfTileHeight = this.tileHeight / 2;\r\n // See https://clintbellanger.net/articles/isometric_math/ for formula\r\n return vec(~~((worldCoordinate.x / halfTileWidth + (worldCoordinate.y / halfTileHeight)) / 2), ~~((worldCoordinate.y / halfTileHeight - (worldCoordinate.x / halfTileWidth)) / 2));\r\n }\r\n /**\r\n * Given a tile coordinate, return the top left corner in world space\r\n * @param tileCoordinate\r\n */\r\n tileToWorld(tileCoordinate) {\r\n const halfTileWidth = this.tileWidth / 2;\r\n const halfTileHeight = this.tileHeight / 2;\r\n // The x position shifts left with every y step\r\n const xPos = (tileCoordinate.x - tileCoordinate.y) * halfTileWidth;\r\n // The y position needs to go down with every x step\r\n const yPos = (tileCoordinate.x + tileCoordinate.y) * halfTileHeight;\r\n return vec(xPos, yPos).add(this.transform.pos);\r\n }\r\n /**\r\n * Returns the [[IsometricTile]] by its x and y coordinates\r\n */\r\n getTile(x, y) {\r\n if (x < 0 || y < 0 || x >= this.columns || y >= this.rows) {\r\n return null;\r\n }\r\n return this.tiles[x + y * this.columns];\r\n }\r\n /**\r\n * Returns the [[IsometricTile]] by testing a point in world coordinates,\r\n * returns `null` if no Tile was found.\r\n */\r\n getTileByPoint(point) {\r\n const tileCoord = this.worldToTile(point);\r\n const tile = this.getTile(tileCoord.x, tileCoord.y);\r\n return tile;\r\n }\r\n _getMaxZIndex() {\r\n let maxZ = Number.NEGATIVE_INFINITY;\r\n for (const tile of this.tiles) {\r\n const currentZ = tile.get(TransformComponent).z;\r\n if (currentZ > maxZ) {\r\n maxZ = currentZ;\r\n }\r\n }\r\n return maxZ;\r\n }\r\n /**\r\n * Debug draw for IsometricMap, called internally by excalibur when debug mode is toggled on\r\n * @param gfx\r\n */\r\n debug(gfx) {\r\n gfx.save();\r\n gfx.z = this._getMaxZIndex() + 0.5;\r\n for (let y = 0; y < this.rows + 1; y++) {\r\n const left = this.tileToWorld(vec(0, y));\r\n const right = this.tileToWorld(vec(this.columns, y));\r\n gfx.drawLine(left, right, Color.Red, 2);\r\n }\r\n for (let x = 0; x < this.columns + 1; x++) {\r\n const top = this.tileToWorld(vec(x, 0));\r\n const bottom = this.tileToWorld(vec(x, this.rows));\r\n gfx.drawLine(top, bottom, Color.Red, 2);\r\n }\r\n for (const tile of this.tiles) {\r\n gfx.drawCircle(this.tileToWorld(vec(tile.x, tile.y)), 3, Color.Yellow);\r\n }\r\n gfx.restore();\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./TileMap/index.ts\n\r\n\r\n\r\n\r\n\n;// CONCATENATED MODULE: ./Actions/Action/ActionSequence.ts\n\r\n/**\r\n * Action that can represent a sequence of actions, this can be useful in conjunction with\r\n * [[ParallelActions]] to run multiple sequences in parallel.\r\n */\r\nclass ActionSequence {\r\n constructor(entity, actionBuilder) {\r\n this._stopped = false;\r\n this._sequenceBuilder = actionBuilder;\r\n this._sequenceContext = new ActionContext(entity);\r\n this._actionQueue = this._sequenceContext.getQueue();\r\n this._sequenceBuilder(this._sequenceContext);\r\n }\r\n update(delta) {\r\n this._actionQueue.update(delta);\r\n }\r\n isComplete() {\r\n return this._stopped || this._actionQueue.isComplete();\r\n }\r\n stop() {\r\n this._stopped = true;\r\n }\r\n reset() {\r\n this._stopped = false;\r\n this._actionQueue.reset();\r\n }\r\n clone(entity) {\r\n return new ActionSequence(entity, this._sequenceBuilder);\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Action/ParallelActions.ts\n/**\r\n * Action that can run multiple [[Action]]s or [[ActionSequence]]s at the same time\r\n */\r\nclass ParallelActions {\r\n constructor(parallelActions) {\r\n this._actions = parallelActions;\r\n }\r\n update(delta) {\r\n for (let i = 0; i < this._actions.length; i++) {\r\n this._actions[i].update(delta);\r\n }\r\n }\r\n isComplete(entity) {\r\n return this._actions.every(a => a.isComplete(entity));\r\n }\r\n reset() {\r\n this._actions.forEach(a => a.reset());\r\n }\r\n stop() {\r\n this._actions.forEach(a => a.stop());\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Actions/Index.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\n;// CONCATENATED MODULE: ./Collision/Group/CollisionGroupManager.ts\n\r\n/**\r\n * Static class for managing collision groups in excalibur, there is a maximum of 32 collision groups possible in excalibur\r\n */\r\nclass CollisionGroupManager {\r\n /**\r\n * Create a new named collision group up to a max of 32.\r\n * @param name Name for the collision group\r\n * @param mask Optionally provide your own 32-bit mask, if none is provide the manager will generate one\r\n */\r\n static create(name, mask) {\r\n if (this._CURRENT_GROUP > this._MAX_GROUPS) {\r\n throw new Error(`Cannot have more than ${this._MAX_GROUPS} collision groups`);\r\n }\r\n if (this._GROUPS.get(name)) {\r\n throw new Error(`Collision group ${name} already exists`);\r\n }\r\n const group = new CollisionGroup(name, this._CURRENT_BIT, mask !== undefined ? mask : ~this._CURRENT_BIT);\r\n this._CURRENT_BIT = (this._CURRENT_BIT << 1) | 0;\r\n this._CURRENT_GROUP++;\r\n this._GROUPS.set(name, group);\r\n return group;\r\n }\r\n /**\r\n * Get all collision groups currently tracked by excalibur\r\n */\r\n static get groups() {\r\n return Array.from(this._GROUPS.values());\r\n }\r\n /**\r\n * Get a collision group by it's name\r\n * @param name\r\n */\r\n static groupByName(name) {\r\n return this._GROUPS.get(name);\r\n }\r\n /**\r\n * Resets the managers internal group management state\r\n */\r\n static reset() {\r\n this._GROUPS = new Map();\r\n this._CURRENT_BIT = this._STARTING_BIT;\r\n this._CURRENT_GROUP = 1;\r\n }\r\n}\r\n// using bitmasking the maximum number of groups is 32, because that is the highest 32bit integer that JS can present.\r\nCollisionGroupManager._STARTING_BIT = 0b1 | 0;\r\nCollisionGroupManager._MAX_GROUPS = 32;\r\nCollisionGroupManager._CURRENT_GROUP = 1;\r\nCollisionGroupManager._CURRENT_BIT = CollisionGroupManager._STARTING_BIT;\r\nCollisionGroupManager._GROUPS = new Map();\r\n\n;// CONCATENATED MODULE: ./Collision/Index.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\n;// CONCATENATED MODULE: ./Interfaces/LifecycleEvents.ts\n/**\r\n * Type guard checking for internal initialize method\r\n * @internal\r\n * @param a\r\n */\r\nfunction has_initialize(a) {\r\n return !!a._initialize;\r\n}\r\n/**\r\n *\r\n */\r\nfunction hasOnInitialize(a) {\r\n return !!a.onInitialize;\r\n}\r\n/**\r\n *\r\n */\r\nfunction has_preupdate(a) {\r\n return !!a._preupdate;\r\n}\r\n/**\r\n *\r\n */\r\nfunction hasOnPreUpdate(a) {\r\n return !!a.onPreUpdate;\r\n}\r\n/**\r\n *\r\n */\r\nfunction has_postupdate(a) {\r\n return !!a.onPostUpdate;\r\n}\r\n/**\r\n *\r\n */\r\nfunction hasOnPostUpdate(a) {\r\n return !!a.onPostUpdate;\r\n}\r\n/**\r\n *\r\n */\r\nfunction hasPreDraw(a) {\r\n return !!a.onPreDraw;\r\n}\r\n/**\r\n *\r\n */\r\nfunction hasPostDraw(a) {\r\n return !!a.onPostDraw;\r\n}\r\n\n;// CONCATENATED MODULE: ./Interfaces/Index.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\n;// CONCATENATED MODULE: ./Resources/Sound/Index.ts\n\r\n\r\n\r\n\n;// CONCATENATED MODULE: ./Resources/Gif.ts\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * The [[Texture]] object allows games built in Excalibur to load image resources.\r\n * [[Texture]] is an [[Loadable]] which means it can be passed to a [[Loader]]\r\n * to pre-load before starting a level or game.\r\n */\r\nclass Gif {\r\n /**\r\n * @param path Path to the image resource\r\n * @param color Optionally set the color to treat as transparent the gif, by default [[Color.Magenta]]\r\n * @param bustCache Optionally load texture with cache busting\r\n */\r\n constructor(path, color = Color.Magenta, bustCache = false) {\r\n this.path = path;\r\n this.color = color;\r\n this._stream = null;\r\n this._gif = null;\r\n this._textures = [];\r\n this._animation = null;\r\n this._transparentColor = null;\r\n this._resource = new Resource(path, 'arraybuffer', bustCache);\r\n this._transparentColor = color;\r\n }\r\n /**\r\n * Should excalibur add a cache busting querystring? By default false.\r\n * Must be set before loading\r\n */\r\n get bustCache() {\r\n return this._resource.bustCache;\r\n }\r\n set bustCache(val) {\r\n this._resource.bustCache = val;\r\n }\r\n /**\r\n * Begins loading the texture and returns a promise to be resolved on completion\r\n */\r\n async load() {\r\n const arraybuffer = await this._resource.load();\r\n this._stream = new Stream(arraybuffer);\r\n this._gif = new ParseGif(this._stream, this._transparentColor);\r\n const images = this._gif.images.map(i => new ImageSource(i.src, false));\r\n // Load all textures\r\n await Promise.all(images.map(t => t.load()));\r\n return this.data = this._textures = images;\r\n }\r\n isLoaded() {\r\n return !!this.data;\r\n }\r\n /**\r\n * Return a frame of the gif as a sprite by id\r\n * @param id\r\n */\r\n toSprite(id = 0) {\r\n const sprite = this._textures[id].toSprite();\r\n return sprite;\r\n }\r\n /**\r\n * Return the gif as a spritesheet\r\n */\r\n toSpriteSheet() {\r\n const sprites = this._textures.map((image) => {\r\n return image.toSprite();\r\n });\r\n return new SpriteSheet({ sprites });\r\n }\r\n /**\r\n * Transform the GIF into an animation with duration per frame\r\n */\r\n toAnimation(durationPerFrameMs) {\r\n const spriteSheet = this.toSpriteSheet();\r\n const length = spriteSheet.sprites.length;\r\n this._animation = Animation.fromSpriteSheet(spriteSheet, range(0, length), durationPerFrameMs);\r\n return this._animation;\r\n }\r\n get readCheckBytes() {\r\n return this._gif.checkBytes;\r\n }\r\n}\r\nconst bitsToNum = (ba) => {\r\n return ba.reduce(function (s, n) {\r\n return s * 2 + n;\r\n }, 0);\r\n};\r\nconst byteToBitArr = (bite) => {\r\n const a = [];\r\n for (let i = 7; i >= 0; i--) {\r\n a.push(!!(bite & (1 << i)));\r\n }\r\n return a;\r\n};\r\nclass Stream {\r\n constructor(dataArray) {\r\n this.data = null;\r\n this.len = 0;\r\n this.position = 0;\r\n this.readByte = () => {\r\n if (this.position >= this.data.byteLength) {\r\n throw new Error('Attempted to read past end of stream.');\r\n }\r\n return this.data[this.position++];\r\n };\r\n this.readBytes = (n) => {\r\n const bytes = [];\r\n for (let i = 0; i < n; i++) {\r\n bytes.push(this.readByte());\r\n }\r\n return bytes;\r\n };\r\n this.read = (n) => {\r\n let s = '';\r\n for (let i = 0; i < n; i++) {\r\n s += String.fromCharCode(this.readByte());\r\n }\r\n return s;\r\n };\r\n this.readUnsigned = () => {\r\n // Little-endian.\r\n const a = this.readBytes(2);\r\n return (a[1] << 8) + a[0];\r\n };\r\n this.data = new Uint8Array(dataArray);\r\n this.len = this.data.byteLength;\r\n if (this.len === 0) {\r\n throw new Error('No data loaded from file');\r\n }\r\n }\r\n}\r\nconst lzwDecode = function (minCodeSize, data) {\r\n // TODO: Now that the GIF parser is a bit different, maybe this should get an array of bytes instead of a String?\r\n let pos = 0; // Maybe this streaming thing should be merged with the Stream?\r\n const readCode = function (size) {\r\n let code = 0;\r\n for (let i = 0; i < size; i++) {\r\n if (data.charCodeAt(pos >> 3) & (1 << (pos & 7))) {\r\n code |= 1 << i;\r\n }\r\n pos++;\r\n }\r\n return code;\r\n };\r\n const output = [];\r\n const clearCode = 1 << minCodeSize;\r\n const eoiCode = clearCode + 1;\r\n let codeSize = minCodeSize + 1;\r\n let dict = [];\r\n const clear = function () {\r\n dict = [];\r\n codeSize = minCodeSize + 1;\r\n for (let i = 0; i < clearCode; i++) {\r\n dict[i] = [i];\r\n }\r\n dict[clearCode] = [];\r\n dict[eoiCode] = null;\r\n };\r\n let code;\r\n let last;\r\n while (true) {\r\n last = code;\r\n code = readCode(codeSize);\r\n if (code === clearCode) {\r\n clear();\r\n continue;\r\n }\r\n if (code === eoiCode) {\r\n break;\r\n }\r\n if (code < dict.length) {\r\n if (last !== clearCode) {\r\n dict.push(dict[last].concat(dict[code][0]));\r\n }\r\n }\r\n else {\r\n if (code !== dict.length) {\r\n throw new Error('Invalid LZW code.');\r\n }\r\n dict.push(dict[last].concat(dict[last][0]));\r\n }\r\n output.push.apply(output, dict[code]);\r\n if (dict.length === 1 << codeSize && codeSize < 12) {\r\n // If we're at the last code and codeSize is 12, the next code will be a clearCode, and it'll be 12 bits long.\r\n codeSize++;\r\n }\r\n }\r\n // I don't know if this is technically an error, but some GIFs do it.\r\n //if (Math.ceil(pos / 8) !== data.length) throw new Error('Extraneous LZW bytes.');\r\n return output;\r\n};\r\n// The actual parsing; returns an object with properties.\r\nclass ParseGif {\r\n constructor(stream, color = Color.Magenta) {\r\n this._st = null;\r\n this._handler = {};\r\n this._transparentColor = null;\r\n this.frames = [];\r\n this.images = [];\r\n this.globalColorTable = [];\r\n this.checkBytes = [];\r\n // LZW (GIF-specific)\r\n this.parseColorTable = (entries) => {\r\n // Each entry is 3 bytes, for RGB.\r\n const ct = [];\r\n for (let i = 0; i < entries; i++) {\r\n const rgb = this._st.readBytes(3);\r\n const rgba = '#' +\r\n rgb\r\n .map((x) => {\r\n const hex = x.toString(16);\r\n return hex.length === 1 ? '0' + hex : hex;\r\n })\r\n .join('');\r\n ct.push(rgba);\r\n }\r\n return ct;\r\n };\r\n this.readSubBlocks = () => {\r\n let size, data;\r\n data = '';\r\n do {\r\n size = this._st.readByte();\r\n data += this._st.read(size);\r\n } while (size !== 0);\r\n return data;\r\n };\r\n this.parseHeader = () => {\r\n const hdr = {\r\n sig: null,\r\n ver: null,\r\n width: null,\r\n height: null,\r\n colorRes: null,\r\n globalColorTableSize: null,\r\n gctFlag: null,\r\n sorted: null,\r\n globalColorTable: [],\r\n bgColor: null,\r\n pixelAspectRatio: null // if not 0, aspectRatio = (pixelAspectRatio + 15) / 64\r\n };\r\n hdr.sig = this._st.read(3);\r\n hdr.ver = this._st.read(3);\r\n if (hdr.sig !== 'GIF') {\r\n throw new Error('Not a GIF file.'); // XXX: This should probably be handled more nicely.\r\n }\r\n hdr.width = this._st.readUnsigned();\r\n hdr.height = this._st.readUnsigned();\r\n const bits = byteToBitArr(this._st.readByte());\r\n hdr.gctFlag = bits.shift();\r\n hdr.colorRes = bitsToNum(bits.splice(0, 3));\r\n hdr.sorted = bits.shift();\r\n hdr.globalColorTableSize = bitsToNum(bits.splice(0, 3));\r\n hdr.bgColor = this._st.readByte();\r\n hdr.pixelAspectRatio = this._st.readByte(); // if not 0, aspectRatio = (pixelAspectRatio + 15) / 64\r\n if (hdr.gctFlag) {\r\n hdr.globalColorTable = this.parseColorTable(1 << (hdr.globalColorTableSize + 1));\r\n this.globalColorTable = hdr.globalColorTable;\r\n }\r\n if (this._handler.hdr && this._handler.hdr(hdr)) {\r\n this.checkBytes.push(this._handler.hdr);\r\n }\r\n };\r\n this.parseExt = (block) => {\r\n const parseGCExt = (block) => {\r\n this.checkBytes.push(this._st.readByte()); // Always 4\r\n const bits = byteToBitArr(this._st.readByte());\r\n block.reserved = bits.splice(0, 3); // Reserved; should be 000.\r\n block.disposalMethod = bitsToNum(bits.splice(0, 3));\r\n block.userInput = bits.shift();\r\n block.transparencyGiven = bits.shift();\r\n block.delayTime = this._st.readUnsigned();\r\n block.transparencyIndex = this._st.readByte();\r\n block.terminator = this._st.readByte();\r\n if (this._handler.gce && this._handler.gce(block)) {\r\n this.checkBytes.push(this._handler.gce);\r\n }\r\n };\r\n const parseComExt = (block) => {\r\n block.comment = this.readSubBlocks();\r\n if (this._handler.com && this._handler.com(block)) {\r\n this.checkBytes.push(this._handler.com);\r\n }\r\n };\r\n const parsePTExt = (block) => {\r\n this.checkBytes.push(this._st.readByte()); // Always 12\r\n block.ptHeader = this._st.readBytes(12);\r\n block.ptData = this.readSubBlocks();\r\n if (this._handler.pte && this._handler.pte(block)) {\r\n this.checkBytes.push(this._handler.pte);\r\n }\r\n };\r\n const parseAppExt = (block) => {\r\n const parseNetscapeExt = (block) => {\r\n this.checkBytes.push(this._st.readByte()); // Always 3\r\n block.unknown = this._st.readByte(); // Q: Always 1? What is this?\r\n block.iterations = this._st.readUnsigned();\r\n block.terminator = this._st.readByte();\r\n if (this._handler.app && this._handler.app.NETSCAPE && this._handler.app.NETSCAPE(block)) {\r\n this.checkBytes.push(this._handler.app);\r\n }\r\n };\r\n const parseUnknownAppExt = (block) => {\r\n block.appData = this.readSubBlocks();\r\n // FIXME: This won't work if a handler wants to match on any identifier.\r\n if (this._handler.app && this._handler.app[block.identifier] && this._handler.app[block.identifier](block)) {\r\n this.checkBytes.push(this._handler.app[block.identifier]);\r\n }\r\n };\r\n this.checkBytes.push(this._st.readByte()); // Always 11\r\n block.identifier = this._st.read(8);\r\n block.authCode = this._st.read(3);\r\n switch (block.identifier) {\r\n case 'NETSCAPE':\r\n parseNetscapeExt(block);\r\n break;\r\n default:\r\n parseUnknownAppExt(block);\r\n break;\r\n }\r\n };\r\n const parseUnknownExt = (block) => {\r\n block.data = this.readSubBlocks();\r\n if (this._handler.unknown && this._handler.unknown(block)) {\r\n this.checkBytes.push(this._handler.unknown);\r\n }\r\n };\r\n block.label = this._st.readByte();\r\n switch (block.label) {\r\n case 0xf9:\r\n block.extType = 'gce';\r\n parseGCExt(block);\r\n break;\r\n case 0xfe:\r\n block.extType = 'com';\r\n parseComExt(block);\r\n break;\r\n case 0x01:\r\n block.extType = 'pte';\r\n parsePTExt(block);\r\n break;\r\n case 0xff:\r\n block.extType = 'app';\r\n parseAppExt(block);\r\n break;\r\n default:\r\n block.extType = 'unknown';\r\n parseUnknownExt(block);\r\n break;\r\n }\r\n };\r\n this.parseImg = (img) => {\r\n const deinterlace = (pixels, width) => {\r\n // Of course this defeats the purpose of interlacing. And it's *probably*\r\n // the least efficient way it's ever been implemented. But nevertheless...\r\n const newPixels = new Array(pixels.length);\r\n const rows = pixels.length / width;\r\n const cpRow = (toRow, fromRow) => {\r\n const fromPixels = pixels.slice(fromRow * width, (fromRow + 1) * width);\r\n newPixels.splice.apply(newPixels, [toRow * width, width].concat(fromPixels));\r\n };\r\n const offsets = [0, 4, 2, 1];\r\n const steps = [8, 8, 4, 2];\r\n let fromRow = 0;\r\n for (let pass = 0; pass < 4; pass++) {\r\n for (let toRow = offsets[pass]; toRow < rows; toRow += steps[pass]) {\r\n cpRow(toRow, fromRow);\r\n fromRow++;\r\n }\r\n }\r\n return newPixels;\r\n };\r\n img.leftPos = this._st.readUnsigned();\r\n img.topPos = this._st.readUnsigned();\r\n img.width = this._st.readUnsigned();\r\n img.height = this._st.readUnsigned();\r\n const bits = byteToBitArr(this._st.readByte());\r\n img.lctFlag = bits.shift();\r\n img.interlaced = bits.shift();\r\n img.sorted = bits.shift();\r\n img.reserved = bits.splice(0, 2);\r\n img.lctSize = bitsToNum(bits.splice(0, 3));\r\n if (img.lctFlag) {\r\n img.lct = this.parseColorTable(1 << (img.lctSize + 1));\r\n }\r\n img.lzwMinCodeSize = this._st.readByte();\r\n const lzwData = this.readSubBlocks();\r\n img.pixels = lzwDecode(img.lzwMinCodeSize, lzwData);\r\n if (img.interlaced) {\r\n // Move\r\n img.pixels = deinterlace(img.pixels, img.width);\r\n }\r\n this.frames.push(img);\r\n this.arrayToImage(img);\r\n if (this._handler.img && this._handler.img(img)) {\r\n this.checkBytes.push(this._handler);\r\n }\r\n };\r\n this.parseBlock = () => {\r\n const block = {\r\n sentinel: this._st.readByte(),\r\n type: ''\r\n };\r\n const blockChar = String.fromCharCode(block.sentinel);\r\n switch (blockChar) {\r\n case '!':\r\n block.type = 'ext';\r\n this.parseExt(block);\r\n break;\r\n case ',':\r\n block.type = 'img';\r\n this.parseImg(block);\r\n break;\r\n case ';':\r\n block.type = 'eof';\r\n if (this._handler.eof && this._handler.eof(block)) {\r\n this.checkBytes.push(this._handler.eof);\r\n }\r\n break;\r\n default:\r\n throw new Error('Unknown block: 0x' + block.sentinel.toString(16));\r\n }\r\n if (block.type !== 'eof') {\r\n this.parseBlock();\r\n }\r\n };\r\n this.arrayToImage = (frame) => {\r\n let count = 0;\r\n const c = document.createElement('canvas');\r\n c.id = count.toString();\r\n c.width = frame.width;\r\n c.height = frame.height;\r\n count++;\r\n const context = c.getContext('2d');\r\n const pixSize = 1;\r\n let y = 0;\r\n let x = 0;\r\n for (let i = 0; i < frame.pixels.length; i++) {\r\n if (x % frame.width === 0) {\r\n y++;\r\n x = 0;\r\n }\r\n if (this.globalColorTable[frame.pixels[i]] === this._transparentColor.toHex()) {\r\n context.fillStyle = `rgba(0, 0, 0, 0)`;\r\n }\r\n else {\r\n context.fillStyle = this.globalColorTable[frame.pixels[i]];\r\n }\r\n context.fillRect(x, y, pixSize, pixSize);\r\n x++;\r\n }\r\n const img = new Image();\r\n img.src = c.toDataURL();\r\n this.images.push(img);\r\n };\r\n this._st = stream;\r\n this._handler = {};\r\n this._transparentColor = color;\r\n this.parseHeader();\r\n this.parseBlock();\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Resources/Index.ts\n\r\n\r\n\r\n\n;// CONCATENATED MODULE: ./EntityComponentSystem/index.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\n;// CONCATENATED MODULE: ./Graphics/Line.ts\n\r\n\r\n\r\nclass Line extends Graphic {\r\n constructor(options) {\r\n super();\r\n this.color = Color.Black;\r\n this.thickness = 1;\r\n const { start, end, color, thickness } = options;\r\n this.start = start;\r\n this.end = end;\r\n this.color = color !== null && color !== void 0 ? color : this.color;\r\n this.thickness = thickness !== null && thickness !== void 0 ? thickness : this.thickness;\r\n const { width, height } = BoundingBox.fromPoints([start, end]);\r\n this.width = width;\r\n this.height = height;\r\n }\r\n _drawImage(ctx, _x, _y) {\r\n ctx.drawLine(this.start, this.end, this.color, this.thickness);\r\n }\r\n clone() {\r\n return new Line({\r\n start: this.start,\r\n end: this.end,\r\n color: this.color,\r\n thickness: this.thickness\r\n });\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/Polygon.ts\n\r\n\r\n\r\n/**\r\n * A polygon [[Graphic]] for drawing arbitrary polygons to the [[ExcaliburGraphicsContext]]\r\n *\r\n * Polygons default to [[ImageFiltering.Blended]]\r\n */\r\nclass Polygon extends Raster {\r\n get points() {\r\n return this._points;\r\n }\r\n set points(points) {\r\n this._points = points;\r\n const min = this.minPoint;\r\n this.width = this._points.reduce((max, p) => Math.max(p.x, max), 0) - min.x;\r\n this.height = this._points.reduce((max, p) => Math.max(p.y, max), 0) - min.y;\r\n this.flagDirty();\r\n }\r\n get minPoint() {\r\n const minX = this._points.reduce((min, p) => Math.min(p.x, min), Infinity);\r\n const minY = this._points.reduce((min, p) => Math.min(p.y, min), Infinity);\r\n return vec(minX, minY);\r\n }\r\n constructor(options) {\r\n super(options);\r\n this.points = options.points;\r\n this.filtering = ImageFiltering.Blended;\r\n this.rasterize();\r\n }\r\n clone() {\r\n return new Polygon({\r\n points: this.points.map((p) => p.clone()),\r\n ...this.cloneGraphicOptions(),\r\n ...this.cloneRasterOptions()\r\n });\r\n }\r\n execute(ctx) {\r\n if (this.points && this.points.length) {\r\n ctx.beginPath();\r\n // Iterate through the supplied points and construct a 'polygon'\r\n const min = this.minPoint.negate();\r\n const firstPoint = this.points[0].add(min);\r\n ctx.moveTo(firstPoint.x, firstPoint.y);\r\n this.points.forEach((point) => {\r\n ctx.lineTo(point.x + min.x, point.y + min.y);\r\n });\r\n ctx.lineTo(firstPoint.x, firstPoint.y);\r\n ctx.closePath();\r\n if (this.color) {\r\n ctx.fill();\r\n }\r\n if (this.strokeColor) {\r\n ctx.stroke();\r\n }\r\n }\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./Graphics/index.ts\n// Graphics\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Graphics ECS\r\n\r\n\r\n\r\n\r\n\r\n// Raster graphics\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Post Processor\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Rendering\r\n\r\n\r\n\r\n\r\n\r\n// Util\r\n\r\n\r\n\n;// CONCATENATED MODULE: ./Input/Index.ts\n// This import site is deprecated\r\n// TODO remove deprecated exports in v0.29.0\r\n/**\r\n * @module\r\n * Provides support for mice, keyboards, and controllers.\r\n */\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Re-export hack to deprecate import site gently\r\n\r\n\n;// CONCATENATED MODULE: ./Util/Index.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\n;// CONCATENATED MODULE: ./Util/Semaphore.ts\n\r\nclass AsyncWaitQueue {\r\n constructor() {\r\n // Code from StephenCleary https://gist.github.com/StephenCleary/ba50b2da419c03b9cba1d20cb4654d5e\r\n this._queue = [];\r\n }\r\n get length() {\r\n return this._queue.length;\r\n }\r\n enqueue() {\r\n const future = new Future();\r\n this._queue.push(future);\r\n return future.promise;\r\n }\r\n dequeue(value) {\r\n const future = this._queue.shift();\r\n future.resolve(value);\r\n }\r\n}\r\n/**\r\n * Semaphore allows you to limit the amount of async calls happening between `enter()` and `exit()`\r\n *\r\n * This can be useful when limiting the number of http calls, browser api calls, etc either for performance or to work\r\n * around browser limitations like max Image.decode() calls in chromium being 256.\r\n */\r\nclass Semaphore {\r\n constructor(_count) {\r\n this._count = _count;\r\n this._waitQueue = new AsyncWaitQueue();\r\n }\r\n get count() {\r\n return this._count;\r\n }\r\n get waiting() {\r\n return this._waitQueue.length;\r\n }\r\n async enter() {\r\n if (this._count !== 0) {\r\n this._count--;\r\n return Promise.resolve();\r\n }\r\n return this._waitQueue.enqueue();\r\n }\r\n exit(count = 1) {\r\n if (count === 0) {\r\n return;\r\n }\r\n while (count !== 0 && this._waitQueue.length !== 0) {\r\n this._waitQueue.dequeue(null);\r\n count--;\r\n }\r\n this._count += count;\r\n }\r\n}\r\n\n;// CONCATENATED MODULE: ./index.ts\n/**\r\n * The current Excalibur version string\r\n * @description `process.env.__EX_VERSION` gets replaced by Webpack on build\r\n */\r\nconst EX_VERSION = \"0.28.0\";\r\n\r\npolyfill();\r\n// This file is used as the bundle entry point and exports everything\r\n// that will be exposed as the `ex` global variable.\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// ex.Events namespace\r\n\r\n\r\n// ex.Input namespace\r\n// TODO deprecated import site remove in v0.29.0\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// ex.Util namespaces\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// ex.Deprecated\r\n// import * as deprecated from './Deprecated';\r\n// export { deprecated as Deprecated };\r\n// export * from './Deprecated';\r\n\n})();\n\nvar __webpack_exports__ActionContext = __webpack_exports__.fWn;\nvar __webpack_exports__ActionQueue = __webpack_exports__.Ia8;\nvar __webpack_exports__ActionSequence = __webpack_exports__.rqv;\nvar __webpack_exports__ActionsComponent = __webpack_exports__.hLI;\nvar __webpack_exports__ActionsSystem = __webpack_exports__.yyv;\nvar __webpack_exports__ActivateEvent = __webpack_exports__.tX5;\nvar __webpack_exports__Actor = __webpack_exports__.vtX;\nvar __webpack_exports__AddedComponent = __webpack_exports__.r7K;\nvar __webpack_exports__AddedEntity = __webpack_exports__.lCh;\nvar __webpack_exports__AffineMatrix = __webpack_exports__.cE4;\nvar __webpack_exports__Animation = __webpack_exports__.fwF;\nvar __webpack_exports__AnimationDirection = __webpack_exports__.sce;\nvar __webpack_exports__AnimationEvents = __webpack_exports__.AQ6;\nvar __webpack_exports__AnimationStrategy = __webpack_exports__._c7;\nvar __webpack_exports__ArcadeSolver = __webpack_exports__.KUs;\nvar __webpack_exports__AudioContextFactory = __webpack_exports__.Ajp;\nvar __webpack_exports__Axes = __webpack_exports__.dkO;\nvar __webpack_exports__Axis = __webpack_exports__.RDh;\nvar __webpack_exports__BaseAlign = __webpack_exports__._H9;\nvar __webpack_exports__Blink = __webpack_exports__.mxs;\nvar __webpack_exports__BodyComponent = __webpack_exports__.OmD;\nvar __webpack_exports__BoundingBox = __webpack_exports__.kBf;\nvar __webpack_exports__BroadphaseStrategy = __webpack_exports__.C4F;\nvar __webpack_exports__BrowserComponent = __webpack_exports__.NQt;\nvar __webpack_exports__BrowserEvents = __webpack_exports__.JjN;\nvar __webpack_exports__Buttons = __webpack_exports__.EK_;\nvar __webpack_exports__Camera = __webpack_exports__.V1s;\nvar __webpack_exports__CameraEvents = __webpack_exports__.xHm;\nvar __webpack_exports__Canvas = __webpack_exports__.Xz7;\nvar __webpack_exports__Circle = __webpack_exports__.Cdc;\nvar __webpack_exports__CircleCollider = __webpack_exports__.FKn;\nvar __webpack_exports__Clock = __webpack_exports__.SUY;\nvar __webpack_exports__ClosestLine = __webpack_exports__.ab2;\nvar __webpack_exports__ClosestLineJumpTable = __webpack_exports__.GfZ;\nvar __webpack_exports__Collider = __webpack_exports__.YMS;\nvar __webpack_exports__ColliderComponent = __webpack_exports__.oyv;\nvar __webpack_exports__CollisionContact = __webpack_exports__.aUb;\nvar __webpack_exports__CollisionEndEvent = __webpack_exports__.SdD;\nvar __webpack_exports__CollisionGroup = __webpack_exports__.JUv;\nvar __webpack_exports__CollisionGroupManager = __webpack_exports__.jEj;\nvar __webpack_exports__CollisionJumpTable = __webpack_exports__.TFq;\nvar __webpack_exports__CollisionPostSolveEvent = __webpack_exports__.HDU;\nvar __webpack_exports__CollisionPreSolveEvent = __webpack_exports__.R_y;\nvar __webpack_exports__CollisionResolutionStrategy = __webpack_exports__.ydN;\nvar __webpack_exports__CollisionStartEvent = __webpack_exports__.t50;\nvar __webpack_exports__CollisionSystem = __webpack_exports__.s$$;\nvar __webpack_exports__CollisionType = __webpack_exports__.v2G;\nvar __webpack_exports__Color = __webpack_exports__.Ilk;\nvar __webpack_exports__ColorBlindFlags = __webpack_exports__.s9i;\nvar __webpack_exports__ColorBlindnessMode = __webpack_exports__.dxL;\nvar __webpack_exports__ColorBlindnessPostProcessor = __webpack_exports__.LLX;\nvar __webpack_exports__Component = __webpack_exports__.wA2;\nvar __webpack_exports__CompositeCollider = __webpack_exports__.R_p;\nvar __webpack_exports__Configurable = __webpack_exports__.IQ$;\nvar __webpack_exports__ConsoleAppender = __webpack_exports__.I5F;\nvar __webpack_exports__ContactConstraintPoint = __webpack_exports__.X8$;\nvar __webpack_exports__ContactEndEvent = __webpack_exports__.FR6;\nvar __webpack_exports__ContactStartEvent = __webpack_exports__.U8o;\nvar __webpack_exports__CoordPlane = __webpack_exports__.kbG;\nvar __webpack_exports__DeactivateEvent = __webpack_exports__.iS_;\nvar __webpack_exports__Debug = __webpack_exports__.cGG;\nvar __webpack_exports__DebugGraphicsComponent = __webpack_exports__.RPN;\nvar __webpack_exports__DebugSystem = __webpack_exports__.skb;\nvar __webpack_exports__DebugText = __webpack_exports__.SLU;\nvar __webpack_exports__DegreeOfFreedom = __webpack_exports__.RdJ;\nvar __webpack_exports__Delay = __webpack_exports__.cNu;\nvar __webpack_exports__Detector = __webpack_exports__.gU7;\nvar __webpack_exports__Die = __webpack_exports__.LSk;\nvar __webpack_exports__Direction = __webpack_exports__.Nmp;\nvar __webpack_exports__DisplayMode = __webpack_exports__.d1Y;\nvar __webpack_exports__DynamicTree = __webpack_exports__.xrL;\nvar __webpack_exports__DynamicTreeCollisionProcessor = __webpack_exports__.sRW;\nvar __webpack_exports__EX_VERSION = __webpack_exports__.cmV;\nvar __webpack_exports__EaseBy = __webpack_exports__.qWz;\nvar __webpack_exports__EaseTo = __webpack_exports__.N0Q;\nvar __webpack_exports__EasingFunctions = __webpack_exports__.q8b;\nvar __webpack_exports__EdgeCollider = __webpack_exports__.ynB;\nvar __webpack_exports__ElasticToActorStrategy = __webpack_exports__.jT9;\nvar __webpack_exports__EmitterType = __webpack_exports__.wAz;\nvar __webpack_exports__Engine = __webpack_exports__.D4V;\nvar __webpack_exports__EngineEvents = __webpack_exports__.NLr;\nvar __webpack_exports__EnterTriggerEvent = __webpack_exports__.N6H;\nvar __webpack_exports__EnterViewPortEvent = __webpack_exports__.W1A;\nvar __webpack_exports__Entity = __webpack_exports__.JHW;\nvar __webpack_exports__EntityEvents = __webpack_exports__.ZZ$;\nvar __webpack_exports__EntityManager = __webpack_exports__.v2K;\nvar __webpack_exports__EventDispatcher = __webpack_exports__.pBf;\nvar __webpack_exports__EventEmitter = __webpack_exports__.vpe;\nvar __webpack_exports__EventTypes = __webpack_exports__.GMl;\nvar __webpack_exports__Events = __webpack_exports__.zW2;\nvar __webpack_exports__ExResponse = __webpack_exports__.B0K;\nvar __webpack_exports__ExcaliburGraphicsContext2DCanvas = __webpack_exports__.Nv7;\nvar __webpack_exports__ExcaliburGraphicsContextWebGL = __webpack_exports__.C_p;\nvar __webpack_exports__ExitTriggerEvent = __webpack_exports__.MUA;\nvar __webpack_exports__ExitViewPortEvent = __webpack_exports__.xqU;\nvar __webpack_exports__Fade = __webpack_exports__.pTp;\nvar __webpack_exports__Flags = __webpack_exports__.vUK;\nvar __webpack_exports__Follow = __webpack_exports__.j9l;\nvar __webpack_exports__Font = __webpack_exports__.Zxw;\nvar __webpack_exports__FontCache = __webpack_exports__.v51;\nvar __webpack_exports__FontStyle = __webpack_exports__.Hdx;\nvar __webpack_exports__FontUnit = __webpack_exports__.Z$d;\nvar __webpack_exports__FpsSampler = __webpack_exports__.iqV;\nvar __webpack_exports__FrameStats = __webpack_exports__.o$7;\nvar __webpack_exports__Future = __webpack_exports__.olM;\nvar __webpack_exports__GameEvent = __webpack_exports__.Zm$;\nvar __webpack_exports__GameStartEvent = __webpack_exports__.$QH;\nvar __webpack_exports__GameStopEvent = __webpack_exports__.i78;\nvar __webpack_exports__Gamepad = __webpack_exports__.nJg;\nvar __webpack_exports__GamepadAxisEvent = __webpack_exports__.h6u;\nvar __webpack_exports__GamepadButtonEvent = __webpack_exports__.hts;\nvar __webpack_exports__GamepadConnectEvent = __webpack_exports__.j88;\nvar __webpack_exports__GamepadDisconnectEvent = __webpack_exports__.VME;\nvar __webpack_exports__Gamepads = __webpack_exports__.fy2;\nvar __webpack_exports__Gif = __webpack_exports__.nt;\nvar __webpack_exports__GlobalCoordinates = __webpack_exports__.Ukr;\nvar __webpack_exports__Graphic = __webpack_exports__.zsu;\nvar __webpack_exports__GraphicsComponent = __webpack_exports__.oA6;\nvar __webpack_exports__GraphicsGroup = __webpack_exports__.TVh;\nvar __webpack_exports__GraphicsLayer = __webpack_exports__.TwZ;\nvar __webpack_exports__GraphicsLayers = __webpack_exports__.GTT;\nvar __webpack_exports__GraphicsSystem = __webpack_exports__.xxj;\nvar __webpack_exports__HiddenEvent = __webpack_exports__.XdK;\nvar __webpack_exports__ImageFiltering = __webpack_exports__.Jmb;\nvar __webpack_exports__ImageSource = __webpack_exports__.cXo;\nvar __webpack_exports__InitializeEvent = __webpack_exports__.Dm5;\nvar __webpack_exports__Input = __webpack_exports__.IIB;\nvar __webpack_exports__InputMapper = __webpack_exports__.ebW;\nvar __webpack_exports__Integrator = __webpack_exports__.zI0;\nvar __webpack_exports__IsometricEntityComponent = __webpack_exports__.LYD;\nvar __webpack_exports__IsometricEntitySystem = __webpack_exports__.cEG;\nvar __webpack_exports__IsometricMap = __webpack_exports__.SEl;\nvar __webpack_exports__IsometricTile = __webpack_exports__.t9V;\nvar __webpack_exports__KeyEvent = __webpack_exports__.ez5;\nvar __webpack_exports__Keyboard = __webpack_exports__.N1d;\nvar __webpack_exports__Keys = __webpack_exports__.R8U;\nvar __webpack_exports__KillEvent = __webpack_exports__.SKZ;\nvar __webpack_exports__Label = __webpack_exports__.__J;\nvar __webpack_exports__LimitCameraBoundsStrategy = __webpack_exports__.RI$;\nvar __webpack_exports__Line = __webpack_exports__.x12;\nvar __webpack_exports__LineSegment = __webpack_exports__.ccz;\nvar __webpack_exports__Loader = __webpack_exports__.aNw;\nvar __webpack_exports__LoaderEvents = __webpack_exports__.XrL;\nvar __webpack_exports__LockCameraToActorAxisStrategy = __webpack_exports__.xwn;\nvar __webpack_exports__LockCameraToActorStrategy = __webpack_exports__.dNK;\nvar __webpack_exports__LogLevel = __webpack_exports__.ini;\nvar __webpack_exports__Logger = __webpack_exports__.YdH;\nvar __webpack_exports__Material = __webpack_exports__.F5T;\nvar __webpack_exports__Matrix = __webpack_exports__.y3G;\nvar __webpack_exports__MatrixLocations = __webpack_exports__.l57;\nvar __webpack_exports__MediaEvent = __webpack_exports__.xn0;\nvar __webpack_exports__Meet = __webpack_exports__.t2V;\nvar __webpack_exports__MotionComponent = __webpack_exports__.uxB;\nvar __webpack_exports__MotionSystem = __webpack_exports__.cpd;\nvar __webpack_exports__MoveBy = __webpack_exports__.fiy;\nvar __webpack_exports__MoveTo = __webpack_exports__.$XZ;\nvar __webpack_exports__NativePointerButton = __webpack_exports__.UG6;\nvar __webpack_exports__NativeSoundEvent = __webpack_exports__.uqK;\nvar __webpack_exports__NativeSoundProcessedEvent = __webpack_exports__.STE;\nvar __webpack_exports__Observable = __webpack_exports__.y$z;\nvar __webpack_exports__OffscreenSystem = __webpack_exports__.mAD;\nvar __webpack_exports__Pair = __webpack_exports__.sOq;\nvar __webpack_exports__ParallaxComponent = __webpack_exports__.hUw;\nvar __webpack_exports__ParallelActions = __webpack_exports__._0G;\nvar __webpack_exports__ParseGif = __webpack_exports__.Sqs;\nvar __webpack_exports__Particle = __webpack_exports__.hpZ;\nvar __webpack_exports__ParticleEmitter = __webpack_exports__.Vol;\nvar __webpack_exports__ParticleTransform = __webpack_exports__.vYX;\nvar __webpack_exports__Physics = __webpack_exports__.wIZ;\nvar __webpack_exports__PhysicsStats = __webpack_exports__.cBi;\nvar __webpack_exports__PhysicsWorld = __webpack_exports__.c30;\nvar __webpack_exports__PointerButton = __webpack_exports__.MPV;\nvar __webpack_exports__PointerComponent = __webpack_exports__.RFv;\nvar __webpack_exports__PointerEvent = __webpack_exports__.Ux6;\nvar __webpack_exports__PointerEventReceiver = __webpack_exports__.rxy;\nvar __webpack_exports__PointerScope = __webpack_exports__.I$c;\nvar __webpack_exports__PointerSystem = __webpack_exports__.kfC;\nvar __webpack_exports__PointerType = __webpack_exports__.VjY;\nvar __webpack_exports__Polygon = __webpack_exports__.mgq;\nvar __webpack_exports__PolygonCollider = __webpack_exports__.YVA;\nvar __webpack_exports__Pool = __webpack_exports__.Kgp;\nvar __webpack_exports__PostCollisionEvent = __webpack_exports__.HH$;\nvar __webpack_exports__PostDebugDrawEvent = __webpack_exports__.M_d;\nvar __webpack_exports__PostDrawEvent = __webpack_exports__.rgh;\nvar __webpack_exports__PostFrameEvent = __webpack_exports__.Ra6;\nvar __webpack_exports__PostKillEvent = __webpack_exports__.KhR;\nvar __webpack_exports__PostUpdateEvent = __webpack_exports__.BS5;\nvar __webpack_exports__PreCollisionEvent = __webpack_exports__.xhz;\nvar __webpack_exports__PreDebugDrawEvent = __webpack_exports__.xOq;\nvar __webpack_exports__PreDrawEvent = __webpack_exports__.a9j;\nvar __webpack_exports__PreFrameEvent = __webpack_exports__.bHk;\nvar __webpack_exports__PreKillEvent = __webpack_exports__.CgK;\nvar __webpack_exports__PreUpdateEvent = __webpack_exports__.cuY;\nvar __webpack_exports__Projection = __webpack_exports__.kvE;\nvar __webpack_exports__QuadIndexBuffer = __webpack_exports__.SBu;\nvar __webpack_exports__Query = __webpack_exports__.AE_;\nvar __webpack_exports__QueryManager = __webpack_exports__.ctO;\nvar __webpack_exports__RadiusAroundActorStrategy = __webpack_exports__.OLH;\nvar __webpack_exports__Random = __webpack_exports__.kky;\nvar __webpack_exports__Raster = __webpack_exports__.nSF;\nvar __webpack_exports__Ray = __webpack_exports__.zHn;\nvar __webpack_exports__RealisticSolver = __webpack_exports__.zwx;\nvar __webpack_exports__Rectangle = __webpack_exports__.AeJ;\nvar __webpack_exports__RemovedComponent = __webpack_exports__.hLz;\nvar __webpack_exports__RemovedEntity = __webpack_exports__.D9g;\nvar __webpack_exports__Repeat = __webpack_exports__.wA;\nvar __webpack_exports__RepeatForever = __webpack_exports__.jhr;\nvar __webpack_exports__Resolution = __webpack_exports__.GVs;\nvar __webpack_exports__Resource = __webpack_exports__._zO;\nvar __webpack_exports__ResourceEvents = __webpack_exports__.LXZ;\nvar __webpack_exports__RotateBy = __webpack_exports__.w6$;\nvar __webpack_exports__RotateTo = __webpack_exports__.mhV;\nvar __webpack_exports__RotationType = __webpack_exports__.MOD;\nvar __webpack_exports__ScaleBy = __webpack_exports__.kwd;\nvar __webpack_exports__ScaleTo = __webpack_exports__.Lmr;\nvar __webpack_exports__Scene = __webpack_exports__.xsS;\nvar __webpack_exports__SceneEvents = __webpack_exports__.K5l;\nvar __webpack_exports__Screen = __webpack_exports__.lLr;\nvar __webpack_exports__ScreenAppender = __webpack_exports__.Z$r;\nvar __webpack_exports__ScreenElement = __webpack_exports__.IXb;\nvar __webpack_exports__ScreenShader = __webpack_exports__.SGH;\nvar __webpack_exports__ScrollPreventionMode = __webpack_exports__.SMj;\nvar __webpack_exports__Semaphore = __webpack_exports__.L34;\nvar __webpack_exports__Shader = __webpack_exports__.exe;\nvar __webpack_exports__Shape = __webpack_exports__.bnF;\nvar __webpack_exports__Side = __webpack_exports__.MFA;\nvar __webpack_exports__Sound = __webpack_exports__.$uU;\nvar __webpack_exports__SoundEvents = __webpack_exports__.Sap;\nvar __webpack_exports__Sprite = __webpack_exports__.jyi;\nvar __webpack_exports__SpriteFont = __webpack_exports__.E03;\nvar __webpack_exports__SpriteSheet = __webpack_exports__.V6q;\nvar __webpack_exports__StandardClock = __webpack_exports__.rg2;\nvar __webpack_exports__StateMachine = __webpack_exports__.DVW;\nvar __webpack_exports__StrategyContainer = __webpack_exports__.nVo;\nvar __webpack_exports__Stream = __webpack_exports__.F6N;\nvar __webpack_exports__System = __webpack_exports__.xP7;\nvar __webpack_exports__SystemManager = __webpack_exports__.Odq;\nvar __webpack_exports__SystemType = __webpack_exports__.Zif;\nvar __webpack_exports__TagComponent = __webpack_exports__.ZGJ;\nvar __webpack_exports__TestClock = __webpack_exports__.MJk;\nvar __webpack_exports__Text = __webpack_exports__.xvT;\nvar __webpack_exports__TextAlign = __webpack_exports__.PHM;\nvar __webpack_exports__TextureLoader = __webpack_exports__.dpR;\nvar __webpack_exports__Tile = __webpack_exports__.n9L;\nvar __webpack_exports__TileMap = __webpack_exports__.KwO;\nvar __webpack_exports__TileMapEvents = __webpack_exports__.SxM;\nvar __webpack_exports__Timer = __webpack_exports__.B7y;\nvar __webpack_exports__Toaster = __webpack_exports__.x7r;\nvar __webpack_exports__Transform = __webpack_exports__.wx7;\nvar __webpack_exports__TransformComponent = __webpack_exports__.Uvn;\nvar __webpack_exports__TreeNode = __webpack_exports__.OFT;\nvar __webpack_exports__Trigger = __webpack_exports__.xzN;\nvar __webpack_exports__TriggerEvents = __webpack_exports__.CcZ;\nvar __webpack_exports__TwoPI = __webpack_exports__.M5Z;\nvar __webpack_exports__Util = __webpack_exports__.ZrN;\nvar __webpack_exports__Vector = __webpack_exports__.OWs;\nvar __webpack_exports__VectorView = __webpack_exports__.dF9;\nvar __webpack_exports__VertexBuffer = __webpack_exports__.oZy;\nvar __webpack_exports__VertexLayout = __webpack_exports__.rD2;\nvar __webpack_exports__VisibleEvent = __webpack_exports__.VHo;\nvar __webpack_exports__WebAudio = __webpack_exports__.ohE;\nvar __webpack_exports__WebAudioInstance = __webpack_exports__.R$E;\nvar __webpack_exports__WheelDeltaMode = __webpack_exports__.xQN;\nvar __webpack_exports__WheelEvent = __webpack_exports__.AdJ;\nvar __webpack_exports__World = __webpack_exports__.q3I;\nvar __webpack_exports__canonicalizeAngle = __webpack_exports__.Pab;\nvar __webpack_exports__clamp = __webpack_exports__.uZ5;\nvar __webpack_exports__createId = __webpack_exports__.McK;\nvar __webpack_exports__frac = __webpack_exports__.F9c;\nvar __webpack_exports__hasGraphicsTick = __webpack_exports__.k0b;\nvar __webpack_exports__hasOnInitialize = __webpack_exports__.hnT;\nvar __webpack_exports__hasOnPostUpdate = __webpack_exports__.RSJ;\nvar __webpack_exports__hasOnPreUpdate = __webpack_exports__.Mku;\nvar __webpack_exports__hasPostDraw = __webpack_exports__.h90;\nvar __webpack_exports__hasPreDraw = __webpack_exports__.rms;\nvar __webpack_exports__has_initialize = __webpack_exports__.ErP;\nvar __webpack_exports__has_postupdate = __webpack_exports__.aVg;\nvar __webpack_exports__has_preupdate = __webpack_exports__.lPc;\nvar __webpack_exports__isAddedComponent = __webpack_exports__.Z8E;\nvar __webpack_exports__isAddedSystemEntity = __webpack_exports__._N2;\nvar __webpack_exports__isRemoveSystemEntity = __webpack_exports__.yFn;\nvar __webpack_exports__isRemovedComponent = __webpack_exports__.lNv;\nvar __webpack_exports__isScreenElement = __webpack_exports__.cu9;\nvar __webpack_exports__maxMessages = __webpack_exports__.MZQ;\nvar __webpack_exports__obsolete = __webpack_exports__.FUM;\nvar __webpack_exports__pixelSnapEpsilon = __webpack_exports__.BxR;\nvar __webpack_exports__randomInRange = __webpack_exports__.vdf;\nvar __webpack_exports__randomIntInRange = __webpack_exports__.iaL;\nvar __webpack_exports__range = __webpack_exports__.w6H;\nvar __webpack_exports__resetObsoleteCounter = __webpack_exports__.Q4c;\nvar __webpack_exports__sign = __webpack_exports__.Xxe;\nvar __webpack_exports__toDegrees = __webpack_exports__.Uxb;\nvar __webpack_exports__toRadians = __webpack_exports__.Yr5;\nvar __webpack_exports__vec = __webpack_exports__.Bhw;\nvar __webpack_exports__webgl = __webpack_exports__.yOA;\nexport { __webpack_exports__ActionContext as ActionContext, __webpack_exports__ActionQueue as ActionQueue, __webpack_exports__ActionSequence as ActionSequence, __webpack_exports__ActionsComponent as ActionsComponent, __webpack_exports__ActionsSystem as ActionsSystem, __webpack_exports__ActivateEvent as ActivateEvent, __webpack_exports__Actor as Actor, __webpack_exports__AddedComponent as AddedComponent, __webpack_exports__AddedEntity as AddedEntity, __webpack_exports__AffineMatrix as AffineMatrix, __webpack_exports__Animation as Animation, __webpack_exports__AnimationDirection as AnimationDirection, __webpack_exports__AnimationEvents as AnimationEvents, __webpack_exports__AnimationStrategy as AnimationStrategy, __webpack_exports__ArcadeSolver as ArcadeSolver, __webpack_exports__AudioContextFactory as AudioContextFactory, __webpack_exports__Axes as Axes, __webpack_exports__Axis as Axis, __webpack_exports__BaseAlign as BaseAlign, __webpack_exports__Blink as Blink, __webpack_exports__BodyComponent as BodyComponent, __webpack_exports__BoundingBox as BoundingBox, __webpack_exports__BroadphaseStrategy as BroadphaseStrategy, __webpack_exports__BrowserComponent as BrowserComponent, __webpack_exports__BrowserEvents as BrowserEvents, __webpack_exports__Buttons as Buttons, __webpack_exports__Camera as Camera, __webpack_exports__CameraEvents as CameraEvents, __webpack_exports__Canvas as Canvas, __webpack_exports__Circle as Circle, __webpack_exports__CircleCollider as CircleCollider, __webpack_exports__Clock as Clock, __webpack_exports__ClosestLine as ClosestLine, __webpack_exports__ClosestLineJumpTable as ClosestLineJumpTable, __webpack_exports__Collider as Collider, __webpack_exports__ColliderComponent as ColliderComponent, __webpack_exports__CollisionContact as CollisionContact, __webpack_exports__CollisionEndEvent as CollisionEndEvent, __webpack_exports__CollisionGroup as CollisionGroup, __webpack_exports__CollisionGroupManager as CollisionGroupManager, __webpack_exports__CollisionJumpTable as CollisionJumpTable, __webpack_exports__CollisionPostSolveEvent as CollisionPostSolveEvent, __webpack_exports__CollisionPreSolveEvent as CollisionPreSolveEvent, __webpack_exports__CollisionResolutionStrategy as CollisionResolutionStrategy, __webpack_exports__CollisionStartEvent as CollisionStartEvent, __webpack_exports__CollisionSystem as CollisionSystem, __webpack_exports__CollisionType as CollisionType, __webpack_exports__Color as Color, __webpack_exports__ColorBlindFlags as ColorBlindFlags, __webpack_exports__ColorBlindnessMode as ColorBlindnessMode, __webpack_exports__ColorBlindnessPostProcessor as ColorBlindnessPostProcessor, __webpack_exports__Component as Component, __webpack_exports__CompositeCollider as CompositeCollider, __webpack_exports__Configurable as Configurable, __webpack_exports__ConsoleAppender as ConsoleAppender, __webpack_exports__ContactConstraintPoint as ContactConstraintPoint, __webpack_exports__ContactEndEvent as ContactEndEvent, __webpack_exports__ContactStartEvent as ContactStartEvent, __webpack_exports__CoordPlane as CoordPlane, __webpack_exports__DeactivateEvent as DeactivateEvent, __webpack_exports__Debug as Debug, __webpack_exports__DebugGraphicsComponent as DebugGraphicsComponent, __webpack_exports__DebugSystem as DebugSystem, __webpack_exports__DebugText as DebugText, __webpack_exports__DegreeOfFreedom as DegreeOfFreedom, __webpack_exports__Delay as Delay, __webpack_exports__Detector as Detector, __webpack_exports__Die as Die, __webpack_exports__Direction as Direction, __webpack_exports__DisplayMode as DisplayMode, __webpack_exports__DynamicTree as DynamicTree, __webpack_exports__DynamicTreeCollisionProcessor as DynamicTreeCollisionProcessor, __webpack_exports__EX_VERSION as EX_VERSION, __webpack_exports__EaseBy as EaseBy, __webpack_exports__EaseTo as EaseTo, __webpack_exports__EasingFunctions as EasingFunctions, __webpack_exports__EdgeCollider as EdgeCollider, __webpack_exports__ElasticToActorStrategy as ElasticToActorStrategy, __webpack_exports__EmitterType as EmitterType, __webpack_exports__Engine as Engine, __webpack_exports__EngineEvents as EngineEvents, __webpack_exports__EnterTriggerEvent as EnterTriggerEvent, __webpack_exports__EnterViewPortEvent as EnterViewPortEvent, __webpack_exports__Entity as Entity, __webpack_exports__EntityEvents as EntityEvents, __webpack_exports__EntityManager as EntityManager, __webpack_exports__EventDispatcher as EventDispatcher, __webpack_exports__EventEmitter as EventEmitter, __webpack_exports__EventTypes as EventTypes, __webpack_exports__Events as Events, __webpack_exports__ExResponse as ExResponse, __webpack_exports__ExcaliburGraphicsContext2DCanvas as ExcaliburGraphicsContext2DCanvas, __webpack_exports__ExcaliburGraphicsContextWebGL as ExcaliburGraphicsContextWebGL, __webpack_exports__ExitTriggerEvent as ExitTriggerEvent, __webpack_exports__ExitViewPortEvent as ExitViewPortEvent, __webpack_exports__Fade as Fade, __webpack_exports__Flags as Flags, __webpack_exports__Follow as Follow, __webpack_exports__Font as Font, __webpack_exports__FontCache as FontCache, __webpack_exports__FontStyle as FontStyle, __webpack_exports__FontUnit as FontUnit, __webpack_exports__FpsSampler as FpsSampler, __webpack_exports__FrameStats as FrameStats, __webpack_exports__Future as Future, __webpack_exports__GameEvent as GameEvent, __webpack_exports__GameStartEvent as GameStartEvent, __webpack_exports__GameStopEvent as GameStopEvent, __webpack_exports__Gamepad as Gamepad, __webpack_exports__GamepadAxisEvent as GamepadAxisEvent, __webpack_exports__GamepadButtonEvent as GamepadButtonEvent, __webpack_exports__GamepadConnectEvent as GamepadConnectEvent, __webpack_exports__GamepadDisconnectEvent as GamepadDisconnectEvent, __webpack_exports__Gamepads as Gamepads, __webpack_exports__Gif as Gif, __webpack_exports__GlobalCoordinates as GlobalCoordinates, __webpack_exports__Graphic as Graphic, __webpack_exports__GraphicsComponent as GraphicsComponent, __webpack_exports__GraphicsGroup as GraphicsGroup, __webpack_exports__GraphicsLayer as GraphicsLayer, __webpack_exports__GraphicsLayers as GraphicsLayers, __webpack_exports__GraphicsSystem as GraphicsSystem, __webpack_exports__HiddenEvent as HiddenEvent, __webpack_exports__ImageFiltering as ImageFiltering, __webpack_exports__ImageSource as ImageSource, __webpack_exports__InitializeEvent as InitializeEvent, __webpack_exports__Input as Input, __webpack_exports__InputMapper as InputMapper, __webpack_exports__Integrator as Integrator, __webpack_exports__IsometricEntityComponent as IsometricEntityComponent, __webpack_exports__IsometricEntitySystem as IsometricEntitySystem, __webpack_exports__IsometricMap as IsometricMap, __webpack_exports__IsometricTile as IsometricTile, __webpack_exports__KeyEvent as KeyEvent, __webpack_exports__Keyboard as Keyboard, __webpack_exports__Keys as Keys, __webpack_exports__KillEvent as KillEvent, __webpack_exports__Label as Label, __webpack_exports__LimitCameraBoundsStrategy as LimitCameraBoundsStrategy, __webpack_exports__Line as Line, __webpack_exports__LineSegment as LineSegment, __webpack_exports__Loader as Loader, __webpack_exports__LoaderEvents as LoaderEvents, __webpack_exports__LockCameraToActorAxisStrategy as LockCameraToActorAxisStrategy, __webpack_exports__LockCameraToActorStrategy as LockCameraToActorStrategy, __webpack_exports__LogLevel as LogLevel, __webpack_exports__Logger as Logger, __webpack_exports__Material as Material, __webpack_exports__Matrix as Matrix, __webpack_exports__MatrixLocations as MatrixLocations, __webpack_exports__MediaEvent as MediaEvent, __webpack_exports__Meet as Meet, __webpack_exports__MotionComponent as MotionComponent, __webpack_exports__MotionSystem as MotionSystem, __webpack_exports__MoveBy as MoveBy, __webpack_exports__MoveTo as MoveTo, __webpack_exports__NativePointerButton as NativePointerButton, __webpack_exports__NativeSoundEvent as NativeSoundEvent, __webpack_exports__NativeSoundProcessedEvent as NativeSoundProcessedEvent, __webpack_exports__Observable as Observable, __webpack_exports__OffscreenSystem as OffscreenSystem, __webpack_exports__Pair as Pair, __webpack_exports__ParallaxComponent as ParallaxComponent, __webpack_exports__ParallelActions as ParallelActions, __webpack_exports__ParseGif as ParseGif, __webpack_exports__Particle as Particle, __webpack_exports__ParticleEmitter as ParticleEmitter, __webpack_exports__ParticleTransform as ParticleTransform, __webpack_exports__Physics as Physics, __webpack_exports__PhysicsStats as PhysicsStats, __webpack_exports__PhysicsWorld as PhysicsWorld, __webpack_exports__PointerButton as PointerButton, __webpack_exports__PointerComponent as PointerComponent, __webpack_exports__PointerEvent as PointerEvent, __webpack_exports__PointerEventReceiver as PointerEventReceiver, __webpack_exports__PointerScope as PointerScope, __webpack_exports__PointerSystem as PointerSystem, __webpack_exports__PointerType as PointerType, __webpack_exports__Polygon as Polygon, __webpack_exports__PolygonCollider as PolygonCollider, __webpack_exports__Pool as Pool, __webpack_exports__PostCollisionEvent as PostCollisionEvent, __webpack_exports__PostDebugDrawEvent as PostDebugDrawEvent, __webpack_exports__PostDrawEvent as PostDrawEvent, __webpack_exports__PostFrameEvent as PostFrameEvent, __webpack_exports__PostKillEvent as PostKillEvent, __webpack_exports__PostUpdateEvent as PostUpdateEvent, __webpack_exports__PreCollisionEvent as PreCollisionEvent, __webpack_exports__PreDebugDrawEvent as PreDebugDrawEvent, __webpack_exports__PreDrawEvent as PreDrawEvent, __webpack_exports__PreFrameEvent as PreFrameEvent, __webpack_exports__PreKillEvent as PreKillEvent, __webpack_exports__PreUpdateEvent as PreUpdateEvent, __webpack_exports__Projection as Projection, __webpack_exports__QuadIndexBuffer as QuadIndexBuffer, __webpack_exports__Query as Query, __webpack_exports__QueryManager as QueryManager, __webpack_exports__RadiusAroundActorStrategy as RadiusAroundActorStrategy, __webpack_exports__Random as Random, __webpack_exports__Raster as Raster, __webpack_exports__Ray as Ray, __webpack_exports__RealisticSolver as RealisticSolver, __webpack_exports__Rectangle as Rectangle, __webpack_exports__RemovedComponent as RemovedComponent, __webpack_exports__RemovedEntity as RemovedEntity, __webpack_exports__Repeat as Repeat, __webpack_exports__RepeatForever as RepeatForever, __webpack_exports__Resolution as Resolution, __webpack_exports__Resource as Resource, __webpack_exports__ResourceEvents as ResourceEvents, __webpack_exports__RotateBy as RotateBy, __webpack_exports__RotateTo as RotateTo, __webpack_exports__RotationType as RotationType, __webpack_exports__ScaleBy as ScaleBy, __webpack_exports__ScaleTo as ScaleTo, __webpack_exports__Scene as Scene, __webpack_exports__SceneEvents as SceneEvents, __webpack_exports__Screen as Screen, __webpack_exports__ScreenAppender as ScreenAppender, __webpack_exports__ScreenElement as ScreenElement, __webpack_exports__ScreenShader as ScreenShader, __webpack_exports__ScrollPreventionMode as ScrollPreventionMode, __webpack_exports__Semaphore as Semaphore, __webpack_exports__Shader as Shader, __webpack_exports__Shape as Shape, __webpack_exports__Side as Side, __webpack_exports__Sound as Sound, __webpack_exports__SoundEvents as SoundEvents, __webpack_exports__Sprite as Sprite, __webpack_exports__SpriteFont as SpriteFont, __webpack_exports__SpriteSheet as SpriteSheet, __webpack_exports__StandardClock as StandardClock, __webpack_exports__StateMachine as StateMachine, __webpack_exports__StrategyContainer as StrategyContainer, __webpack_exports__Stream as Stream, __webpack_exports__System as System, __webpack_exports__SystemManager as SystemManager, __webpack_exports__SystemType as SystemType, __webpack_exports__TagComponent as TagComponent, __webpack_exports__TestClock as TestClock, __webpack_exports__Text as Text, __webpack_exports__TextAlign as TextAlign, __webpack_exports__TextureLoader as TextureLoader, __webpack_exports__Tile as Tile, __webpack_exports__TileMap as TileMap, __webpack_exports__TileMapEvents as TileMapEvents, __webpack_exports__Timer as Timer, __webpack_exports__Toaster as Toaster, __webpack_exports__Transform as Transform, __webpack_exports__TransformComponent as TransformComponent, __webpack_exports__TreeNode as TreeNode, __webpack_exports__Trigger as Trigger, __webpack_exports__TriggerEvents as TriggerEvents, __webpack_exports__TwoPI as TwoPI, __webpack_exports__Util as Util, __webpack_exports__Vector as Vector, __webpack_exports__VectorView as VectorView, __webpack_exports__VertexBuffer as VertexBuffer, __webpack_exports__VertexLayout as VertexLayout, __webpack_exports__VisibleEvent as VisibleEvent, __webpack_exports__WebAudio as WebAudio, __webpack_exports__WebAudioInstance as WebAudioInstance, __webpack_exports__WheelDeltaMode as WheelDeltaMode, __webpack_exports__WheelEvent as WheelEvent, __webpack_exports__World as World, __webpack_exports__canonicalizeAngle as canonicalizeAngle, __webpack_exports__clamp as clamp, __webpack_exports__createId as createId, __webpack_exports__frac as frac, __webpack_exports__hasGraphicsTick as hasGraphicsTick, __webpack_exports__hasOnInitialize as hasOnInitialize, __webpack_exports__hasOnPostUpdate as hasOnPostUpdate, __webpack_exports__hasOnPreUpdate as hasOnPreUpdate, __webpack_exports__hasPostDraw as hasPostDraw, __webpack_exports__hasPreDraw as hasPreDraw, __webpack_exports__has_initialize as has_initialize, __webpack_exports__has_postupdate as has_postupdate, __webpack_exports__has_preupdate as has_preupdate, __webpack_exports__isAddedComponent as isAddedComponent, __webpack_exports__isAddedSystemEntity as isAddedSystemEntity, __webpack_exports__isRemoveSystemEntity as isRemoveSystemEntity, __webpack_exports__isRemovedComponent as isRemovedComponent, __webpack_exports__isScreenElement as isScreenElement, __webpack_exports__maxMessages as maxMessages, __webpack_exports__obsolete as obsolete, __webpack_exports__pixelSnapEpsilon as pixelSnapEpsilon, __webpack_exports__randomInRange as randomInRange, __webpack_exports__randomIntInRange as randomIntInRange, __webpack_exports__range as range, __webpack_exports__resetObsoleteCounter as resetObsoleteCounter, __webpack_exports__sign as sign, __webpack_exports__toDegrees as toDegrees, __webpack_exports__toRadians as toRadians, __webpack_exports__vec as vec, __webpack_exports__webgl as webgl };\n\n//# sourceMappingURL=excalibur.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Config = void 0;\nexports.Config = {\n PlayerSpeed: 16 * 2,\n PlayerFrameSpeed: 200, // ms\n};\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ex = __importStar(require(\"excalibur\"));\nconst resources_1 = require(\"./resources\");\nconst player_1 = require(\"./player\");\nconst game = new ex.Engine({\n width: 800,\n height: 600,\n canvasElementId: 'game',\n antialiasing: false\n});\ngame.start(resources_1.loader).then(() => {\n var _a, _b;\n const objects = resources_1.Resources.TiledMap.data.getObjectLayerByName(\"Objects\");\n const camera = objects.getObjectByName(\"Camera\");\n if (camera) {\n game.currentScene.camera.pos = ex.vec(camera.x, camera.y);\n game.currentScene.camera.zoom = (_b = (_a = camera.getProperty('zoom')) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : 1.0;\n }\n const player = objects.getObjectByName(\"Player\");\n if (player) {\n const playerActor = new player_1.Player(ex.vec(player.x, player.y));\n game.currentScene.add(playerActor);\n playerActor.z = 100;\n }\n resources_1.Resources.TiledMap.addTiledMapToScene(game.currentScene);\n});\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Player = void 0;\nconst ex = __importStar(require(\"excalibur\"));\nconst resources_1 = require(\"./resources\");\nconst config_1 = require(\"./config\");\nclass Player extends ex.Actor {\n constructor(pos) {\n super({\n pos,\n width: 16,\n height: 16,\n collisionType: ex.CollisionType.Active\n });\n }\n onInitialize(engine) {\n const playerSpriteSheet = ex.SpriteSheet.fromImageSource({\n image: resources_1.Resources.HeroSpriteSheetPng,\n grid: {\n spriteWidth: 16,\n spriteHeight: 16,\n rows: 8,\n columns: 8\n }\n });\n const leftIdle = new ex.Animation({\n frames: [\n { graphic: playerSpriteSheet.getSprite(0, 1), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(1, 1), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(2, 1), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(3, 1), duration: config_1.Config.PlayerFrameSpeed },\n ]\n });\n this.graphics.add('left-idle', leftIdle);\n const rightIdle = new ex.Animation({\n frames: [\n { graphic: playerSpriteSheet.getSprite(0, 2), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(1, 2), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(2, 2), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(3, 2), duration: config_1.Config.PlayerFrameSpeed },\n ]\n });\n this.graphics.add('right-idle', rightIdle);\n const upIdle = new ex.Animation({\n frames: [\n { graphic: playerSpriteSheet.getSprite(0, 3), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(1, 3), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(2, 3), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(3, 3), duration: config_1.Config.PlayerFrameSpeed },\n ]\n });\n this.graphics.add('up-idle', upIdle);\n const downIdle = new ex.Animation({\n frames: [\n { graphic: playerSpriteSheet.getSprite(0, 0), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(1, 0), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(2, 0), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(3, 0), duration: config_1.Config.PlayerFrameSpeed },\n ]\n });\n this.graphics.add('down-idle', downIdle);\n const leftWalk = new ex.Animation({\n frames: [\n { graphic: playerSpriteSheet.getSprite(0, 5), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(1, 5), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(2, 5), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(3, 5), duration: config_1.Config.PlayerFrameSpeed },\n ]\n });\n this.graphics.add('left-walk', leftWalk);\n const rightWalk = new ex.Animation({\n frames: [\n { graphic: playerSpriteSheet.getSprite(0, 6), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(1, 6), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(2, 6), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(3, 6), duration: config_1.Config.PlayerFrameSpeed },\n ]\n });\n this.graphics.add('right-walk', rightWalk);\n const upWalk = new ex.Animation({\n frames: [\n { graphic: playerSpriteSheet.getSprite(0, 7), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(1, 7), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(2, 7), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(3, 7), duration: config_1.Config.PlayerFrameSpeed },\n ]\n });\n this.graphics.add('up-walk', upWalk);\n const downWalk = new ex.Animation({\n frames: [\n { graphic: playerSpriteSheet.getSprite(0, 4), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(1, 4), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(2, 4), duration: config_1.Config.PlayerFrameSpeed },\n { graphic: playerSpriteSheet.getSprite(3, 4), duration: config_1.Config.PlayerFrameSpeed },\n ]\n });\n this.graphics.add('down-walk', downWalk);\n }\n onPreUpdate(engine, elapsedMs) {\n this.vel = ex.Vector.Zero;\n this.graphics.use('down-idle');\n if (engine.input.keyboard.isHeld(ex.Input.Keys.ArrowRight)) {\n this.vel = ex.vec(config_1.Config.PlayerSpeed, 0);\n this.graphics.use('right-walk');\n }\n if (engine.input.keyboard.isHeld(ex.Input.Keys.ArrowLeft)) {\n this.vel = ex.vec(-config_1.Config.PlayerSpeed, 0);\n this.graphics.use('left-walk');\n }\n if (engine.input.keyboard.isHeld(ex.Input.Keys.ArrowUp)) {\n this.vel = ex.vec(0, -config_1.Config.PlayerSpeed);\n this.graphics.use('up-walk');\n }\n if (engine.input.keyboard.isHeld(ex.Input.Keys.ArrowDown)) {\n this.vel = ex.vec(0, config_1.Config.PlayerSpeed);\n this.graphics.use('down-walk');\n }\n }\n}\nexports.Player = Player;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.loader = exports.Resources = void 0;\nconst excalibur_1 = require(\"excalibur\");\nconst plugin_tiled_1 = require(\"@excaliburjs/plugin-tiled\");\nexports.Resources = {\n HeroSpriteSheetPng: new excalibur_1.ImageSource('../img/Solaria Demo Pack Update 03/Solaria Demo Pack Update 03/16x16/Sprites/Hero 01.png', false, excalibur_1.ImageFiltering.Pixel),\n TiledMap: new plugin_tiled_1.TiledMapResource('../res/first-level.tmx')\n};\nexports.loader = new excalibur_1.Loader();\nfor (let resource of Object.values(exports.Resources)) {\n exports.loader.addResource(resource);\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(519);\n"],"names":["t","self","A","e","i","buildOptions","a","attributeNamePrefix","attrNodeName","textNodeName","ignoreAttributes","cdataTagName","cdataPositionChar","format","indentBy","supressEmptyNode","tagValueProcessor","attrValueProcessor","s","o","this","options","isAttribute","attrPrefixLen","length","E","isCDATA","d","replaceCDATAstr","g","replaceCDATAarr","n","processTextOrObjNode","r","indentate","Q","tagEndChar","newLine","buildTextNode","C","buildObjNode","l","B","I","buildTextValNode","buildObjectNode","j2x","Object","keys","val","attrStr","replace","join","indexOf","repeat","startsWith","substr","prototype","parse","Array","isArray","rootNodeName","Date","exports","String","fromCharCode","nilChar","missingChar","nilPremitive","missingPremitive","emptyChar","emptyValue","boundryChar","objStart","arrStart","arrayEnd","child","attrsMap","convert2nimn","defaultOptions","props","alwaysCreateTextNode","isEmptyObject","isExist","isTagNameInArrayMode","tagname","arrayMode","merge","hasOwnProperty","push","convertToJson","isNaN","convertToJsonString","validate","Error","err","msg","parseTrueNumberOnly","parseNodeValue","numParseOptions","leadingZeros","getTraversalObj","convertTonimn","j2xParser","parseToNimn","RegExp","getValue","test","isName","exec","getAllMatches","startIndex","lastIndex","nameRegexp","allowBooleanAttributes","value","index","tagClosed","h","trim","substring","c","u","code","line","pop","tagName","tagStartPos","col","JSON","stringify","map","match","split","parent","addChild","Number","parseInt","window","parseFloat","ignoreNameSpace","parseAttributeValue","trimValues","hex","stopNodes","charAt","data","includes","lastIndexOf","assign","toString","level","method","chunkSize","windowBits","memLevel","strategy","to","raw","gzip","ended","chunks","strm","avail_out","deflateInit2","header","deflateSetHeader","dictionary","string2buf","call","Uint8Array","deflateSetDictionary","_dict_set","result","input","next_in","avail_in","output","Buf8","next_out","deflate","onEnd","onData","buf2binstring","shrinkBuf","deflateEnd","flattenChunks","Deflate","deflateRaw","inflateInit2","Z_OK","inflateGetHeader","inflateSetDictionary","Z_FINISH","Z_NO_FLUSH","binstring2buf","inflate","Z_NEED_DICT","Z_BUF_ERROR","Z_STREAM_END","Z_SYNC_FLUSH","utf8border","buf2string","arraySet","inflateEnd","Inflate","inflateRaw","ungzip","Uint16Array","Int32Array","slice","arguments","shift","TypeError","subarray","set","concat","apply","setTyped","Buf16","Buf32","charCodeAt","Z_PARTIAL_FLUSH","Z_FULL_FLUSH","Z_BLOCK","Z_TREES","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","state","pending","pending_buf","pending_out","total_out","_tr_flush_block","block_start","strstart","f","p","w","max_chain_length","prev_length","nice_match","w_size","w_mask","prev","good_match","lookahead","match_start","m","window_size","hash_size","head","wrap","adler","total_in","insert","ins_h","hash_shift","hash_mask","y","match_length","_tr_tally","max_lazy_match","last_lit","D","prev_match","match_available","_","good_length","max_lazy","nice_length","max_chain","func","b","status","pending_buf_size","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","heap","heap_len","heap_max","depth","l_buf","lit_bufsize","d_buf","opt_len","static_len","matches","bi_buf","bi_valid","k","data_type","_tr_init","v","F","deflateInit","deflateReset","deflateResetKeep","text","hcrc","extra","name","comment","time","os","_tr_align","_tr_stored_block","deflateInfo","xflags","extra_len","done","dmax","wsize","whave","wnext","hold","bits","lencode","distcode","lenbits","distbits","mode","sane","last","havedict","flags","check","total","wbits","offset","ncode","nlen","ndist","have","next","lens","work","lendyn","distdyn","back","was","inflateReset","inflateReset2","inflateResetKeep","inflateInit","G","x","N","S","L","R","M","U","J","inflateInfo","static_tree","extra_bits","extra_base","elems","max_length","has_stree","dyn_tree","max_code","stat_desc","decimalPoint","skipLike","FLIPPED_DIAGONALLY_FLAG","FLIPPED_HORIZONTALLY_FLAG","FLIPPED_VERTICALLY_FLAG","TiledEntity","TiledLayer","TiledLayerComponent","TiledMap","TiledMapFormat","TiledMapResource","TiledObject","TiledObjectComponent","TiledObjectGroup","TiledTileset","TiledTilesetTile","getCanonicalGid","getProperty","isFlippedDiagonally","isFlippedHorizontally","isFlippedVertically","parseExternalJson","parseExternalTsx","filter","toLocaleLowerCase","constructor","properties","Component","super","layer","type","Vector","Zero","parallaxFactor","encoding","id","vec","offsetx","offsety","parallaxx","parallaxy","width","height","compression","order","rawLayer","Promise","throw","then","layers","tileSets","objectGroups","getExcaliburObjects","getObjectLayerByProperty","getObjects","getObjectLayerByName","getTileLayerByName","getTileLayersByProperty","fromTmx","property","objectgroup","object","objects","forEach","halign","valign","fontfamily","pixelsize","kerning","italic","bold","underline","strikeout","color","point","ellipse","polyline","points","polygon","imagelayers","image","source","imagelayer","tilesets","imagewidth","imageheight","objectalignment","tiles","_fromRawTiledMap","fromJson","_decompresslayers","orientation","rawMap","tileWidth","tilewidth","tileHeight","tileheight","decompressBase64","decompressCsv","ZSTDDecoder","init","decode","TMX","path","isoLayers","_layerZIndexStart","_mapToRawLayer","Map","mapFormatOverride","startingLayerZIndex","_resource","Resource","mapFormat","ex","imageMap","sheetMap","tileImageMap","convertPath","_addTiledCamera","camera","isIsometric","_isoTileToScreenCoords","zoom","_addTiledColliders","colliders","Actor","pos","collisionType","CollisionType","Fixed","Color","fromHex","BoundingBox","left","top","right","bottom","getPoints","collider","usePolygonCollider","useBoxCollider","useCircleCollider","radius","addComponent","tiled","add","zIndex","z","_addTiledText","getText","pixelSize","Label","anchor","_getEntityName","font","Font","family","fontFamily","size","unit","FontUnit","Px","textAlign","TextAlign","Left","baseAlign","BaseAlign","Top","rotation","Shape","Box","body","PreventCollision","_calculateZIndex","IsometricEntityComponent","elevation","_addTiledInsertedTiles","getInsertedTiles","gid","getSpriteForGid","getCollidersForGid","clear","CompositeCollider","graphics","destSize","use","useSolidLayers","getTileMapLayers","get","solid","addTiledMapToScene","_parseExcaliburInfo","find","getObjectByClass","getCamera","getObjectsByClass","Math","max","isLoaded","load","_importMapData","firstgid","Logger","getInstance","error","all","ImageSource","debug","_createTileMap","getTilesetForTile","firstGid","tileCount","sprites","clone","PI","scale","_transformPoints","diagonalFlipTransform","multiply","horizontalFlipTransform","verticalFlipTransform","getPolygons","Polygon","getBoxes","getEllipses","Circle","min","getAnimationForGid","hasAnimation","getAnimation","spacing","floor","SpriteSheet","fromImageSource","grid","columns","rows","spriteWidth","spriteHeight","originOffset","margin","toSprite","TileMap","ParallaxComponent","addGraphic","addCollider","clearGraphics","IsometricMap","TransformComponent","updateColliders","getIsometricMapLayers","_lookupTile","tileset","getTileByPoint","getTileByCoordinate","getTile","getObjectByType","getObjectsByType","class","getObjectByName","getObjectsByName","getPolyLines","rawObjectGroup","visible","toRadians","rawObject","tilecount","tileOffset","tileoffset","tiledVersion","tiledversion","backgroundColor","backgroundcolor","transparentColor","transparentcolor","wangSets","wangsets","imageWidth","imageHeight","objectAlignment","Matrix","identity","translate","rotate","animation","graphic","tileid","duration","Animation","frames","animationStrategy","AnimationStrategy","Loop","terrain","frame","toLowerCase","End","Freeze","PingPong","env","emscripten_notify_memory_growth","memory","buffer","fetch","arrayBuffer","WebAssembly","instantiate","_init","Buffer","from","instance","byteLength","malloc","ZSTD_findDecompressedSize","ZSTD_decompress","free","excalibur","__esModule","default","defineProperty","enumerable","Symbol","toStringTag","module","__webpack_modules__","__unused_webpack_exports","entryUnbind","isCallable","tryToString","$TypeError","argument","isObject","$String","toIndexedObject","toAbsoluteIndex","lengthOfArrayLike","createMethod","IS_INCLUDES","$this","el","fromIndex","O","fails","METHOD_NAME","createProperty","$Array","start","end","fin","undefined","arraySlice","mergeSort","array","comparefn","middle","insertionSort","element","j","llength","rlength","lindex","rindex","uncurryThis","stringSlice","it","TO_STRING_TAG_SUPPORT","classofRaw","TO_STRING_TAG","wellKnownSymbol","$Object","CORRECT_ARGUMENTS","tag","key","tryGet","callee","hasOwn","ownKeys","getOwnPropertyDescriptorModule","definePropertyModule","target","exceptions","getOwnPropertyDescriptor","DESCRIPTORS","createPropertyDescriptor","bitmap","configurable","writable","toPropertyKey","propertyKey","makeBuiltIn","defineGlobalProperty","simple","global","unsafe","nonConfigurable","nonWritable","P","documentAll","document","IS_HTMLDDA","EXISTS","createElement","firefox","UA","navigator","userAgent","version","process","Deno","versions","v8","webkit","CONSTRUCTOR","METHOD","createNonEnumerableProperty","defineBuiltIn","copyConstructorProperties","isForced","targetProperty","sourceProperty","descriptor","TARGET","GLOBAL","STATIC","stat","dontCallGetSet","forced","sham","bind","NATIVE_BIND","Function","FunctionPrototype","getDescriptor","PROPER","CONFIGURABLE","uncurryThisWithBind","fn","namespace","aCallable","isNullOrUndefined","V","globalThis","toObject","classof","propertyIsEnumerable","store","functionToString","inspectSource","has","NATIVE_WEAK_MAP","shared","sharedKey","hiddenKeys","OBJECT_ALREADY_INITIALIZED","WeakMap","metadata","facade","STATE","enforce","getterFor","TYPE","$documentAll","replacement","feature","detection","normalize","POLYFILL","NATIVE","string","getBuiltIn","isPrototypeOf","USE_SYMBOL_AS_UID","$Symbol","toLength","obj","CONFIGURABLE_FUNCTION_NAME","InternalStateModule","enforceInternalState","getInternalState","CONFIGURABLE_LENGTH","TEMPLATE","getter","setter","arity","ceil","trunc","__unused_webpack_module","IE8_DOM_DEFINE","V8_PROTOTYPE_DEFINE_BUG","anObject","$defineProperty","$getOwnPropertyDescriptor","ENUMERABLE","WRITABLE","Attributes","current","propertyIsEnumerableModule","internalObjectKeys","getOwnPropertyNames","getOwnPropertySymbols","names","enumBugKeys","$propertyIsEnumerable","NASHORN_BUG","pref","valueOf","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","uid","SHARED","IS_PURE","copyright","license","V8_VERSION","symbol","toIntegerOrInfinity","integer","IndexedObject","requireObjectCoercible","number","isSymbol","getMethod","ordinaryToPrimitive","TO_PRIMITIVE","exoticToPrim","toPrimitive","postfix","random","NATIVE_SYMBOL","iterator","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","$","deletePropertyOrThrow","internalSort","arrayMethodIsStrict","FF","IE_OR_EDGE","V8","WEBKIT","nativeSort","sort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","STRICT_METHOD","STABLE_SORT","chr","proto","itemsLength","items","arrayLength","getSortCompare","nativeKeys","Z","_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__","_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__","___CSS_LOADER_EXPORT___","_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default","__WEBPACK_DEFAULT_EXPORT__","cssWithMappingToString","list","item","content","needLayer","modules","media","dedupe","supports","alreadyImportedModules","_k","cssMapping","btoa","base64","unescape","encodeURIComponent","sourceMapping","__webpack_module_cache__","moduleId","cachedModule","definition","prop","fWn","Ia8","rqv","hLI","yyv","tX5","vtX","r7K","lCh","cE4","fwF","sce","AQ6","_c7","KUs","Ajp","dkO","RDh","_H9","mxs","OmD","kBf","C4F","NQt","JjN","EK_","V1s","xHm","Xz7","Cdc","FKn","SUY","ab2","GfZ","YMS","oyv","aUb","SdD","JUv","jEj","TFq","HDU","R_y","ydN","t50","s$$","v2G","Ilk","s9i","dxL","LLX","wA2","R_p","IQ$","I5F","X8$","FR6","U8o","kbG","iS_","cGG","RPN","skb","SLU","RdJ","cNu","gU7","LSk","Nmp","d1Y","xrL","sRW","cmV","qWz","N0Q","q8b","ynB","jT9","wAz","D4V","NLr","N6H","W1A","JHW","ZZ$","v2K","pBf","vpe","GMl","zW2","B0K","Nv7","C_p","MUA","xqU","pTp","vUK","j9l","Zxw","v51","Hdx","Z$d","iqV","o$7","olM","Zm$","$QH","i78","nJg","h6u","hts","j88","VME","fy2","nt","Ukr","zsu","oA6","TVh","TwZ","GTT","xxj","XdK","Jmb","cXo","Dm5","IIB","ebW","zI0","LYD","cEG","SEl","t9V","ez5","N1d","R8U","SKZ","__J","RI$","x12","ccz","aNw","XrL","xwn","dNK","ini","YdH","F5T","y3G","l57","xn0","t2V","uxB","cpd","fiy","$XZ","UG6","uqK","STE","y$z","mAD","sOq","hUw","_0G","Sqs","hpZ","Vol","vYX","wIZ","cBi","c30","MPV","RFv","Ux6","rxy","I$c","kfC","VjY","mgq","YVA","Kgp","HH$","M_d","rgh","Ra6","KhR","BS5","xhz","xOq","a9j","bHk","CgK","cuY","kvE","SBu","AE_","ctO","OLH","kky","nSF","zHn","zwx","AeJ","hLz","D9g","wA","jhr","GVs","_zO","LXZ","w6$","mhV","MOD","kwd","Lmr","xsS","K5l","lLr","Z$r","IXb","SGH","SMj","L34","exe","bnF","MFA","$uU","Sap","jyi","E03","V6q","rg2","DVW","nVo","F6N","xP7","Odq","Zif","ZGJ","MJk","xvT","PHM","dpR","n9L","KwO","SxM","B7y","x7r","wx7","Uvn","OFT","xzN","CcZ","M5Z","ZrN","OWs","dF9","oZy","rD2","VHo","ohE","R$E","xQN","AdJ","q3I","Pab","uZ5","McK","F9c","k0b","hnT","RSJ","Mku","h90","rms","ErP","aVg","lPc","Z8E","_N2","yFn","lNv","cu9","MZQ","FUM","BxR","vdf","iaL","w6H","Q4c","Xxe","Uxb","Yr5","Bhw","yOA","Events_namespaceObject","ActivateEvent","CollisionEndEvent","CollisionPostSolveEvent","CollisionPreSolveEvent","CollisionStartEvent","ContactEndEvent","ContactStartEvent","DeactivateEvent","EnterTriggerEvent","EnterViewPortEvent","EventTypes","ExitTriggerEvent","ExitViewPortEvent","GameEvent","GameStartEvent","GameStopEvent","GamepadAxisEvent","GamepadButtonEvent","GamepadConnectEvent","GamepadDisconnectEvent","HiddenEvent","InitializeEvent","KillEvent","PostCollisionEvent","PostDebugDrawEvent","PostDrawEvent","PostFrameEvent","PostKillEvent","PostUpdateEvent","PreCollisionEvent","PreDebugDrawEvent","PreDrawEvent","PreFrameEvent","PreKillEvent","PreUpdateEvent","VisibleEvent","webgl_util_namespaceObject","getAttributeComponentSize","getAttributePointerType","getGlTypeSizeBytes","DrawUtil_namespaceObject","circle","roundRect","vector","Input_Index_namespaceObject","Axes","Buttons","Gamepad","Gamepads","KeyEvent","Keyboard","Keys","NativePointerButton","PointerButton","PointerComponent","PointerEvent","PointerEventReceiver","PointerScope","PointerSystem","PointerType","WheelDeltaMode","WheelEvent","LogLevel","Util_Index_namespaceObject","polyfill","audioContext","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","callback","setInterval","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","AudioContext","webkitAudioContext","replaceMe","decodeAudioData","resolve","reject","mozAudioContext","msAudioContext","oAudioContext","devicePixelRatio","ConsoleAppender","DrawUtil","EasingFunctions","Observable","ScreenAppender","addItemToArray","contains","delay","fail","getPosition","removeItemFromArray","Flags","useCanvasGraphicsContext","enable","freeze","_FROZEN","_reset","_FLAGS","flagName","disable","isEnabled","show","createId","EventEmitter","_paused","_listeners","_listenersOnce","_pipes","on","eventName","handler","_a","close","off","once","_b","_c","_d","listenerIndex","splice","onceIndex","emit","event","onces","pipe","emitter","unpipe","pause","unpause","_bubbles","bubbles","stopPropagation","ctx","delta","engine","prevStats","stats","gamepad","button","axis","actor","other","side","intersection","contact","context","events","enabled","supported","getGamepads","_gamePadTimeStamps","_oldPads","_pads","_initSuccess","_navigator","_minimumConfiguration","_clonePads","setMinimumGamepadConfiguration","config","_enableAndUpdate","update","_isGamepadValid","pad","axesLength","axes","buttonLength","buttons","connected","gamepads","at","timestamp","bi","ai","navigatorGamepad","getButton","pressed","updateButton","getAxes","updateAxes","_clonePad","getValidGamepads","count","pads","arr","len","clonedPad","MinAxisMoveThreshold","_axes","_buttons","_buttonsUp","_buttonsDown","isButtonPressed","threshold","isButtonHeld","wasButtonPressed","wasButtonReleased","Boolean","abs","buttonIndex","axesIndex","_appenders","defaultLevel","Info","_INSTANCE","addAppender","appender","clearAppenders","_log","args","log","Debug","info","warn","Warn","fatal","Fatal","console","consoleArgs","unshift","_messages","_canvas","innerWidth","innerHeight","style","position","_ctx","getContext","appendChild","message","clearRect","opacity","fillStyle","toFixed","fillText","isCrossOriginIframe","noop","addEventListener","removeEventListener","originalEvent","_keys","_keysUp","_keysDown","_releaseAllKeys","ev","keyEvent","Set","_handleKeyDown","metaKey","MetaLeft","MetaRight","_handleKeyUp","keyboardOptions","grabWindowFocus","focus","getKeys","wasPressed","isHeld","wasReleased","triggerEvent","character","KeyboardEvent","BITMASK32","Random","seed","_lowerMask","_upperMask","_w","_n","_m","_u","_s","_t","_l","_f","_mt","now","_index","_twist","mag01","nextInt","floating","bool","likelihood","pickOne","pickSet","numPicks","allowDuplicates","_pickSetWithDuplicates","_pickSetWithoutDuplicates","currentPick","tempArray","shuffle","swap","randomIndex","range","d4","d6","d8","d10","d12","d20","TwoPI","frac","sign","clamp","canonicalizeAngle","angle","tmpAngle","toDegrees","radians","degrees","_x","randomInRange","randomIntInRange","round","One","Half","Up","Down","Right","fromAngle","cos","sin","isValid","Infinity","distance","vec1","vec2","sqrt","pow","_y","setTo","equals","tolerance","deltaX","deltaY","squareDistance","clampMagnitude","magnitude","newSize","newLength","average","sizeOrScale","dest","sub","addEqual","subEqual","scaleEqual","dot","cross","num","perpendicular","normal","negate","toAngle","atan2","sinAngle","cosAngle","fixed","fromRGB","fromRGBString","fromHSL","HSLColor","toRGBA","lighten","factor","temp","fromRGBA","darken","saturate","desaturate","newR","newG","newB","newA","screen","color1","invert","color2","equal","toHSLA","toHex","_componentToHex","Black","White","Gray","LightGray","DarkGray","Yellow","Orange","Red","Vermilion","Rose","Magenta","Violet","Blue","Azure","Cyan","Viridian","Green","Chartreuse","Transparent","ExcaliburBlue","hue2rgb","q","Side","MatrixLocations","getOpposite","Bottom","None","fromDirection","direction","directions","directionEnum","MAX_VALUE","maxIndex","leftOrOptions","getSideFromIntersection","fromPoints","minX","minY","maxX","maxY","fromDimension","hasZeroDimensions","center","shifted","transform","matrix","xa1","xa2","xb1","xb2","ya1","ya2","yb1","yb2","matrixPos","getPerimeter","results","rayCast","ray","farClipDistance","tmin","tmax","xinv","dir","yinv","tx1","tx2","ty1","ty2","rayCastTime","combine","dimensions","overlaps","epsilon","totalBoundingBox","intersect","overlapX","overlapY","intersectWithSide","bb","draw","drawRect","Future","_isCompleted","promise","_resolver","_rejecter","isCompleted","oLeft","oTop","calcOffsetLeft","offsetLeft","offsetParent","calcOffsetTop","offsetTop","milliseconds","clock","future","schedule","setTimeout","Float32Array","_scaleX","_scaleSignX","_scaleY","_scaleSignY","ortho","near","far","mat","toDOMMatrix","DOMMatrix","fromFloat32Array","reset","translation","sx","sy","angleRadians","vectorOrMatrix","resultX","resultY","a11","a21","a31","a41","a12","a22","a32","a42","a13","a23","a33","a43","a14","a24","a34","a44","b11","b21","b31","b41","b12","b22","b32","b42","b13","b23","b33","b43","b14","b24","b34","b44","getScale","setPosition","sine","cosine","setRotation","currentScale","getRotation","getScaleY","getScaleX","xscale","yscale","setScaleX","setScaleY","setScale","getBasisDeterminant","getAffineInverse","inverseDet","tx","ty","isIdentity","AffineMatrix","Float64Array","_scale","determinant","inverse","to4x4","TransformStack","_transforms","_currentTransform","save","restore","StateStack","_states","_currentState","_getDefaultState","tint","material","_cloneState","ResourceEvents","Complete","Load","LoadStart","Progress","responseType","bustCache","logger","_cacheBust","uri","request","XMLHttpRequest","open","response","statusText","send","watch","change","__isProxy","Proxy","watchAny","Graphic","isStale","_transformStale","flipHorizontal","_flipHorizontal","flipVertical","_flipVertical","_rotation","origin","_origin","_e","_ID","showDebug","_width","_height","cloneGraphicOptions","localBounds","_preDraw","_drawImage","_postDraw","_rotate","_flip","scaleDirX","scaleDirY","Sprite","_logger","_dirty","_logNotLoadedWarning","sourceView","_updateSpriteDimensions","ready","newWidth","newHeight","nativeWidth","nativeHeight","drawImage","ImageFiltering","TextureLoader","gl","_textureMap","_gl","_MAX_TEXTURE_SIZE","getParameter","MAX_TEXTURE_SIZE","filtering","forceUpdate","tex","bindTexture","TEXTURE_2D","texImage2D","RGBA","UNSIGNED_BYTE","createTexture","checkImageSizeSupportedAndLog","pixelStorei","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","filterMode","TEXTURE_MIN_FILTER","Pixel","NEAREST","LINEAR","TEXTURE_MAG_FILTER","deleteTexture","originalSrc","dataset","_LOGGER","Blended","naturalWidth","naturalHeight","_src","src","Image","_readyFuture","endsWith","url","blob","URL","createObjectURL","loadedFuture","onload","setAttribute","unload","getSprite","spriteIndex","fromImageSourceWithSourceViews","sourceViews","cols","offsetDefaults","marginDefaults","sprite","SpriteFont","_text","alphabet","shadow","caseInsensitive","_alreadyWarnedAlphabet","_alreadyWarnedSpriteSheet","spriteSheet","_getCharacterSprites","textToRender","letterIndex","letter","letterSprite","measureText","maxWidth","lines","_getLinesFromText","maxWidthLine","reduce","xCursor","yCursor","render","_color","bounds","_cachedText","_cachedRenderWidth","_cachedLines","DebugText","fontSheet","_imageSource","_spriteSheet","_spriteFont","write","RenderSource","_texture","activeTexture","TEXTURE0","RenderTarget","_setupFramebuffer","setResolution","_frameTexture","frameBuffer","_frameBuffer","frameTexture","attachmentPoint","COLOR_ATTACHMENT0","createFramebuffer","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","toRenderSource","viewport","FLOAT","SHORT","UNSIGNED_SHORT","BYTE","LOW_FLOAT","HIGH_FLOAT","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","Shader","compiled","_compiled","uniforms","attributes","vertexSource","fragmentSource","useProgram","program","_ACTIVE_SHADER_INSTANCE","isCurrentlyBound","compile","vertexShader","_compileShader","VERTEX_SHADER","fragmentShader","FRAGMENT_SHADER","_createProgram","getAttributes","attribute","getUniforms","uniform","uniformCount","getProgramParameter","ACTIVE_UNIFORMS","getActiveUniform","uniformLocation","getUniformLocation","glType","location","attributeCount","ACTIVE_ATTRIBUTES","getActiveAttrib","attributeLocation","getAttribLocation","normalized","setTexture","slotNumber","texture","setUniformInt","setUniform","trySetUniformInt","trySetUniform","setUniformIntArray","trySetUniformIntArray","setUniformBoolean","trySetUniformBoolean","setUniformFloat","trySetUniformFloat","setUniformFloatArray","trySetUniformFloatArray","setUniformFloatVector","trySetUniformFloatVector","setUniformFloatColor","trySetUniformFloatColor","setUniformMatrix","trySetUniformMatrix","uniformType","createProgram","attachShader","linkProgram","LINK_STATUS","getProgramInfoLog","typeName","shader","createShader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","errorInfo","getShaderInfoLog","_processSourceForError","errorLineStart","search","errorLineEnd","error2","VertexBuffer","createBuffer","bufferData","bindBuffer","ARRAY_BUFFER","STATIC_DRAW","DYNAMIC_DRAW","upload","bufferSubData","VertexLayout","vertexBuffer","_vertexBuffer","_attributes","_layout","_vertexTotalSizeBytes","_shader","initialize","totalVertexSizeBytes","shaderAttributes","attrib","componentsPerVertex","vertAttribute","typeSize","uploadBuffer","vert","vertexAttribPointer","enableVertexAttribArray","GraphicsDiagnostics","DrawCallCount","DrawnImagesCount","LineRenderer","priority","_maxLines","_vertexIndex","_lineCount","_context","_isFull","flush","getTransform","finalStart","finalEnd","hasPendingDraws","drawArrays","LINES","PointRenderer","_maxPoints","_pointCount","_buffer","snapToPixel","finalPoint","pixelSnapEpsilon","POINTS","ScreenPassPainter","renderWithPostProcessor","postprocessor","getShader","getLayout","TRIANGLES","renderToScreen","QuadIndexBuffer","numberOfQuads","useUint16","ELEMENT_ARRAY_BUFFER","totalVertices","maxUint16","maxUint16Index","bufferGlType","Uint32Array","currentQuad","ImageRenderer","_maxImages","_maxTextures","_imageCount","_textures","MAX_TEXTURE_IMAGE_UNITS","transformedFrag","_transformFragmentSource","_quads","maxTextures","newSource","texturePickerBuilder","_addImageAsTexture","maybeFiltering","getAttribute","force","textureLoader","removeAttribute","_bindTextures","_getTextureIdForImage","maybeTexture","swidth","sheight","dx","dy","dwidth","dheight","view","sw","sh","topLeft","topRight","bottomLeft","bottomRight","textureId","uvx0","uvy0","uvx1","uvy1","drawElements","RectangleRenderer","_maxRectangles","_rectangleCount","drawLine","drawRectangle","thickness","halfThick","startTop","startBottom","endTop","endBottom","stroke","strokeThickness","CircleRenderer","_maxCircles","_circleCount","Pool","builder","recycler","maxObjects","totalAllocations","disableWarnings","preallocate","using","borrow","poolIndex","DrawCall","Material","_initialized","_name","_vertexSource","_fragmentSource","MaterialRenderer","vertexIndex","ExcaliburGraphicsContextWebGLDebug","_webglCtx","_debugText","rectOptions","lineOptions","drawPoint","pointOptions","drawText","ExcaliburGraphicsContextWebGL","_state","__gl","canvas","_ortho","checkIfResolutionSupported","dim","_renderers","_isDrawLifecycle","useDrawSorting","_drawCallPool","renderer","_drawCalls","_postProcessTargets","_postprocessors","_transform","smoothing","_alreadyWarnedDrawLifecycle","_totalPostProcessorTime","canvasElement","enableTransparency","antialias","premultipliedAlpha","alpha","powerPreference","clearColor","COLOR_BUFFER_BIT","BLEND","blendEquation","FUNC_ADD","blendFunc","ONE","ONE_MINUS_SRC_ALPHA","blendEquationSeparate","blendFuncSeparate","register","_screenRenderer","_renderTarget","rendererName","_isCurrentRenderer","_currentRenderer","beginDrawLifecycle","endDrawLifecycle","drawCall","resetTransform","updateViewport","resolution","trace","drawCircle","addPostProcessor","removePostProcessor","clearPostProcessors","updatePostProcessors","onUpdate","createMaterial","originalSort","firstIndex","findIndex","dc","originalSortOrder","oldTransform","oldState","currentRendererName","currentRenderer","values","ExcaliburGraphicsContext2DCanvas_pixelSnapEpsilon","ExcaliburGraphicsContext2DCanvasDebug","_ex","__ctx","strokeStyle","strokeRect","beginPath","moveTo","lineTo","lineWidth","closePath","arc","fill","ExcaliburGraphicsContext2DCanvas","imageSmoothingEnabled","_resolution","globalAlpha","fillRect","setTransform","_postprocessor","_delta","_options","DisplayMode","Resolution","SVGA","Standard","Atari2600","GameBoy","GameBoyAdvance","NintendoDS","NES","SNES","Screen","_antialiasing","_resolutionStack","_viewportStack","_pixelRatioOverride","_isFullScreen","_isDisposed","_fullscreenChangeHandler","_pixelRatioChangeHandler","_listenForPixelRatio","_devicePixelRatio","_calculateDevicePixelRatio","applyResolutionAndViewport","_resizeHandler","_setResolutionAndViewportByDisplayMode","_alreadyWarned","_contentArea","_contentResolution","_displayMode","displayMode","graphicsContext","antialiasing","_browser","browser","pixelRatio","_applyDisplayMode","_mediaQueryList","removeListener","nativeComponent","matchMedia","addListener","dispose","_resizeObserver","disconnect","isHiDpi","FillContainer","FitContainer","FitContainerAndFill","FitContainerAndZoom","parentElement","_viewport","aspectRatio","scaledWidth","scaledHeight","setCurrentCamera","_camera","pushResolutionAndViewport","peekViewport","peekResolution","popResolutionAndViewport","imageRendering","isSmooth","isFullScreen","goFullScreen","elementId","maybeElement","getElementById","requestFullscreen","exitFullScreen","exitFullscreen","pageToScreenCoordinates","newX","newY","screenHeight","screenWidth","screenToPageCoordinates","screenMarginY","screenMarginX","screenToWorldCoordinates","worldToScreenCoordinates","pageToWorldCoordinates","worldToPageCoordinates","getWorldBounds","canvasWidth","halfCanvasWidth","canvasHeight","halfCanvasHeight","drawWidth","halfDrawWidth","drawHeight","halfDrawHeight","contentArea","_computeFit","overflow","aspect","adjustedWidth","adjustedHeight","_computeFitScreenAndFill","vw","vh","_computeFitAndFill","_computeFitContainerAndFill","clientWidth","clientHeight","clip","_computeFitScreenAndZoom","_computeFitAndZoom","_computeFitContainerAndZoom","scaleX","scaleY","maxScaleFactor","zoomedWidth","zoomedHeight","_computeFitContainer","Window","ResizeObserver","observe","FillScreen","FitScreen","FitScreenAndFill","FitScreenAndZoom","AudioContextFactory","create","WebAudio","unlock","_UNLOCKED","unlockTimeoutTimer","resume","createBufferSource","connect","destination","onended","playbackState","isLegacyWebAudioSource","currentTime","PLAYING_STATE","FINISHED_STATE","clearTimeout","isUnlocked","x1","y1","x2","y2","cap","lineCap","br","tl","tr","bl","defaultRadius","quadraticCurveTo","Loader_0","Raster","_g","_h","_j","quality","_smoothing","flagDirty","_lineWidth","_lineDash","_padding","strokeColor","lineDash","padding","_bitmap","bitmapWidth","bitmapHeight","maybeCtx","cloneRasterOptions","dirty","_getTotalWidth","_originalWidth","_getTotalHeight","_originalHeight","_strokeColor","rasterize","_applyRasterProperties","execute","setLineDash","getLineDash","Canvas","cache","ExResponse","any","json","arraybuffer","StateMachine","states","currentState","machineDescription","machine","stateName","transitionState","transitions","startState","go","eventData","potentialNewState","onExit","onEnter","onState","elapsedMs","saveKey","localStorage","setItem","getItem","WebAudioInstance","_createNewBufferSource","_instance","_audioContext","loop","playbackRate","_playbackRate","_volumeNode","_handleEnd","_playingResolve","_loop","volume","_volume","_stateMachine","in","gain","setTargetAtTime","_duration","getTotalPlaybackDuration","createGain","_playingPromise","PLAYING","pausedAt","startedAt","_playStarted","stop","SEEK","STOPPED","PAUSED","isPlaying","isPaused","play","playStarted","seek","getPlaybackPosition","MediaEvent","_value","_path","_val","action","propagate","layPath","_actor","NativeSoundEvent","track","NativeSoundProcessedEvent","_processedData","canPlayFile","file","Audio","filetype","canPlayType","SoundEvents","VolumeChange","Processed","Pause","Stop","PlaybackEnd","Resume","PlaybackStart","Sound","_tracks","instances","paths","_isStopped","_wasPlayingOnHidden","audiobuffer","decodeAudio","wireEngine","_engine","pauseAudioWhenHidden","instanceCount","some","_resumePlayback","_startPlayback","trackId","_getTrackInstance","getTrackId","resumed","complete","newTrack","LoaderEvents","Loader","_image","_imageElement","logo","playButtonRootElement","_playButtonRootElement","playButtonElement","_playButtonElement","_playButton","existingRoot","_styleBlock","textContent","_playButtonStyles","startButtonFactory","loadables","_resourceList","_playButtonShown","_resourceCount","_numLoaded","_progressCounts","_totalCounts","logoWidth","logoHeight","loadingBarColor","suppressPlayButton","playButtonText","buttonElement","display","_loadingFuture","addResources","addResource","loadable","showPlayButton","resizeHandler","_positionPlayButton","evt","click","playButtonClicked","startButtonHandler","hidePlayButton","removeChild","areResourcesLoaded","async","finally","resource","markResourceComplete","progress","buttonWidth","buttonHeight","playButtonPosition","logoY","logoX","logoPosition","oldAntialias","getAntialiasing","setAntialiasing","loadingX","loadingY","loadingBarPosition","progressWidth","REPORTED_FEATURES","webgl","webaudio","gamepadapi","Detector","_features","failedTests","_criticalTests","canvasSupport","elem","arrayBufferSupport","xhr","dataUrlSupport","toDataURL","objectUrlSupport","rgbaSupport","cssText","_warningTest","webAudioSupport","webglSupport","_loadBrowserFeatures","getBrowserFeatures","logBrowserFeatures","dataurl","objecturl","rgba","failedCritical","warning","maxMessages","obsoleteMessage","resetObsoleteCounter","logMessage","suppressObsoleteMessages","showStackTrace","obsolete","alternateMethod","SyntaxError","DecoratedClass","CollisionResolutionStrategy","BroadphaseStrategy","Integrator","CoordPlane","Physics","gravity","acc","useArcadePhysics","collisionResolutionStrategy","Arcade","useRealisticPhysics","Realistic","dynamicTreeVelocityMultiplyer","dynamicTreeVelocityMultiplier","broadphaseStrategy","DynamicAABBTree","defaultMass","integrator","Euler","boundsPadding","positionIterations","velocityIterations","slop","steeringFactor","warmStart","bodiesCanSleepByDefault","surfaceEpsilon","sleepEpsilon","wakeThreshold","sleepBias","checkForFastBodies","disableMinimumSpeedForFastBody","decorators","desc","Reflect","decorate","__decorate","VectorView","_getX","getX","_getY","getY","_setX","setX","_setY","setY","WatchVector","original","Transform","_parent","_children","_pos","_isDirty","_isInverseDirty","_matrix","_inverse","children","globalPos","localPos","canonRotation","globalRotation","inverseRotation","globalScale","inverseScale","globalScaleX","globalScaleY","_calculateMatrix","applyInverse","owner","newComponent","TagComponent","observers","subscriptions","observer","subscribe","unregister","unsubscribe","notifyAll","observersLength","notify","subscriptionsLength","_addChildTransform","childTxComponent","zIndexChanged$","_z","coordPlane","World","onAdd","childrenAdded$","childrenRemoved$","onRemove","_previousOwner","oldz","component","MotionComponent","vel","scaleFactor","angularVelocity","torque","inertia","CollisionGroup","category","mask","_category","_mask","canCollide","collisionGroups","combinedName","combinedCategory","collidesWith","All","Pair","colliderA","colliderB","calculatePairHash","bodyA","BodyComponent","bodyB","group","active","collide","hasCollider","idA","idB","Projection","projection","getOverlap","TreeNode","isLeaf","DynamicTree","worldBounds","root","nodes","_insert","leaf","leafAABB","currentRoot","area","combinedArea","cost","inheritanceCost","leftCost","leftCombined","newArea","oldArea","rightCost","rightCombined","oldParent","newParent","currentNode","_balance","_remove","grandParent","sibling","trackCollider","node","updateCollider","untrackCollider","multdx","multdy","balance","getHeight","query","helper","rayCastQuery","getNodes","Ray","numerator","begin","getSlope","divisor","getLength","intersectPoint","getPoint","DynamicTreeCollisionProcessor","_dynamicCollisionTree","_pairs","_collisionPairCache","_colliders","getColliders","maxDistance","collisionGroup","searchAllColliders","maybeBody","hit","untrack","_pairExists","hash","broadphase","targets","seconds","potentialColliders","pair","physics","pairs","Active","updateDistance","minDimension","fastBodies","updateVec","oldPos","centerPoint","furthestPoint","getFurthestPoint","minCollider","minTranslate","hitPoint","fastBodyCollisions","narrowphase","contacts","newContacts","collisions","updated","Collider","__compositeColliderId","touching","_collisionProcessor","_dynamicAABBTree","clearColliders","removeCollider","worldPos","furthestPoints","bestPoint","getInertia","mass","totalInertia","otherColliders","potentialCollider","getClosestLineBetween","maybeLine","minLength","minLine","minPoint","minDistance","project","projs","proj","newProjection","LineSegment","slope","intercept","_normal","_dir","_slope","getEdge","_length","midpoint","flip","below","sideVector","clipTime","distanceToPoint","signed","x0","y0","findVectorToPoint","aMinusP","findPoint","hasPoint","currPoint","dxc","dyc","dx1","dy1","ClosestLine","p0","q0","w0","denom","sDenom","tDenom","tClosestParallel","sClosest","tClosest","ClosestLineJumpTable","PolygonPolygonClosestLine","polygonA","polygonB","otherWorldPos","otherDirection","thisDirection","rayTowardsOther","rayTowardsThis","thisPoint","otherPoint","thisFace","getClosestFace","otherFace","face","PolygonEdgeClosestLine","edge","edgeLine","asLine","PolygonCircleClosestLine","circlex","circley","CircleCircleClosestLine","circleA","circleB","CircleEdgeClosestLine","circleWorlPos","EdgeEdgeClosestLine","edgeA","edgeB","edgeLineA","edgeLineB","CircleCollider","_globalMatrix","_naturalRadius","orig","discriminant","toi","toi1","toi2","positiveToi","mintoi","shape","PolygonCollider","EdgeCollider","CollisionJumpTable","CollideCircleCircle","CollideCirclePolygon","CollideCircleEdge","getFurthestLocalPoint","scalars","dotProduct","CollisionContact","mtv","tangent","localPoints","_canceled","matchAwake","sleeping","sleepMotion","setSleeping","isCanceled","cancel","SeparatingAxis","findPolygonPolygonSeparation","polyA","polyB","bestSeparation","bestSide","bestAxis","bestSideIndex","bestOtherPoint","sides","getSides","localSides","getLocalSides","vertB","vertSeparation","separation","localSide","sideId","localPoint","findCirclePolygonSeparation","polyDir","closestPointOnPoly","minOverlap","minAxis","minIndex","proj1","proj2","overlap","circleAPos","circleBPos","combinedRadius","mvt","local","samedir","findSide","findLocalSide","cc","edgeWorld","asLocalLine","da","dda","db","ddb","den","pointOnEdge","dd","CollideEdgeEdge","CollidePolygonEdge","pc","linePoly","CollidePolygonPolygon","separationA","separationB","incident","reference","refDir","clipRight","clipLeft","xf","FindContactSeparation","shapeA","txA","shapeB","txB","worldPoint","circlePoint","dist","_getTransformedBegin","_getTransformedEnd","transformedBegin","transformedEnd","_boundsFromBeginEnd","edgeNormal","_localBoundsDirty","_localSidesDirty","_sidesDirty","_points","_transformedPoints","_sides","_localSides","_transformedPointsDirty","_isCounterClockwiseWinding","reverse","isConvex","_calculateTransformation","sum","oldPoint","newPoint","oldDirection","angleSum","entries","tessellate","polygons","triangulate","isPointInTriangle","ab","bc","ca","ap","bp","cp","cross1","cross2","cross3","triangles","vertices","indices","va","vb","vc","leftArm","isEar","vertIndex","getTransformedPoints","currentSide","mostDirection","testRay","accum","pts","POSITIVE_INFINITY","faceIndex","_localBounds","_cachedMass","_cachedInertia","denominator","iplusone","crossTerm","minContactTime","contactIndex","contactTime","scalar","firstPoint","Edge","Capsule","ColliderComponent","$colliderAdded","$colliderRemoved","_collider","flipped","entity","precollision","postcollision","poly","useEdgeCollider","useCompositeCollider","DegreeOfFreedom","dependencies","_oldTransform","__oldTransformCaptured","enableFixedUpdateInterpolate","_mass","canSleep","_sleeping","bounciness","friction","useGravity","limitDegreeOfFreedom","oldVel","oldAcc","newMass","_cachedInverseInertia","inverseMass","updateMotion","currentMotion","bias","maybeCollider","inverseInertia","motion","oldRotation","oldScale","applyImpulse","impulse","finalImpulse","X","Y","Rotation","distanceFromCenter","applyLinearImpulse","applyAngularImpulse","captureOldTransform","AddedComponent","isAddedComponent","RemovedComponent","isRemovedComponent","EntityEvents","Initialize","PreUpdate","PostUpdate","Entity","components","scene","_componentsToRemove","_componentTypeToInstance","_componentStringToInstance","_tagsMemo","_typesMemo","componentAdded$","componentRemoved$","_isInitialized","_setName","kill","unparent","isKilled","tags","hasTag","addTag","removeTag","removeComponent","types","_rebuildMemos","getComponents","_notifyAddComponent","added","_notifyRemoveComponent","removed","getAncestors","removeAllChildren","getDescendants","queue","curr","newEntity","addTemplate","templateEntity","ctor","constuctorType","componentOrType","_removeComponentByType","clearComponents","delete","processComponentRemoval","isInitialized","_initialize","onInitialize","_preupdate","onPreUpdate","_postupdate","onPostUpdate","hasGraphicsTick","tick","GraphicsLayer","_graphics","hide","nameOrGraphic","gfx","getGraphic","recalculateBounds","copyGraphics","getNames","currentKeys","graphicsComponent","GraphicsLayers","_component","_layers","_layerMap","_maybeAddLayer","_getLayer","graphicsLayerKeys","GraphicsComponent","onPreDraw","onPostDraw","graphicToSet","offsetX","offsetY","elapsed","idempotencyToken","Rectangle","_radius","useColliderShape","useGraphicsBounds","CreateReversibleEasingFunction","easing","CreateVectorEasingFunction","Linear","startValue","endValue","EaseInQuad","EaseOutQuad","EaseInOutQuad","EaseInCubic","EaseOutCubic","EaseInOutCubic","ActionQueue","_actions","_completedActions","_entity","remove","clearActions","_currentAction","getActions","hasNext","isComplete","Repeat","repeatBuilder","_stopped","_repeatBuilder","_repeatContext","ActionContext","_actionQueue","getQueue","_repeat","_originalRepeat","RepeatForever","MoveBy","speed","_started","_tx","_motion","_speed","_offset","_start","_end","_distance","MoveTo","destx","desty","RotationType","FontStyle","Direction","RotateTo","rotationType","_rotationType","ShortestPath","_currentNonCannonAngle","distance1","distance2","_shortDistance","_longDistance","_shortestPathIsPositive","_direction","LongestPath","Clockwise","CounterClockwise","distanceTraveled","RotateBy","angleRadiansOffset","ScaleTo","speedX","speedY","_endX","_endY","_speedX","_speedY","_startX","_startY","_distanceX","_distanceY","directionX","directionY","ScaleBy","scaleOffsetX","scaleOffsetY","_startScale","_endScale","_directionX","_directionY","CallMethod","_method","_hasBeenCalled","EaseTo","easingFcn","_currentLerpTime","_lerpDuration","_lerpStart","_lerpEnd","EaseBy","Blink","timeVisible","timeNotVisible","numBlinks","_timeVisible","_timeNotVisible","_elapsedTime","_totalTime","Fade","endOpacity","_multiplier","_endOpacity","_ogspeed","Delay","_delay","Die","ActionsComponent","Follow","entityToFollow","followDistance","_followTx","_followMotion","_current","_maximumDistance","_distanceBetween","actorToFollowSpeed","Meet","actorToMeet","_speedWasSpecified","_meetTx","_meetMotion","actorToMeetSpeed","_queue","runAction","easeTo","easeBy","xOrPos","yOrSpeed","speedOrUndefined","moveBy","xOffsetOrVector","yOffsetOrSpeed","xOffset","yOffset","rotateTo","rotateBy","scaleTo","sizeXOrVector","sizeYOrSpeed","speedXOrUndefined","speedYOrUndefined","sizeX","sizeY","scaleBy","sizeOffsetXOrVector","sizeOffsetYOrSpeed","sizeOffsetX","sizeOffsetY","blink","fade","die","callMethod","times","repeatForever","follow","meet","toPromise","FontTextInstance","_textFragments","disposed","_setDimension","_lastHashCode","getHashCode","_applyFont","metrics","textHeight","actualBoundingBoxAscent","actualBoundingBoxDescent","lineAdjustedHeight","bottomBounds","actualBoundingBoxLeft","actualBoundingBoxRight","textBounds","fontString","includeColor","textBaseline","shadowColor","shadowBlur","blur","shadowOffsetX","shadowOffsetY","_drawText","lineHeight","strokeText","_splitTextBitmap","textImages","currentX","currentY","hashCode","frag","_chachedText","_chachedLines","FontCache","_MEASURE_CACHE","measurement","measureTextWithoutCache","getTextInstance","textInstance","_TEXT_CACHE","_TEXT_USAGE","performance","checkAndClearCache","deferred","currentHashCodes","newTextMeasurementCache","cacheSize","clearCache","_o","_p","_q","_r","Normal","Alphabetic","LeftToRight","_textBounds","_textMeasurement","colorOverride","Text","_textWidth","_textHeight","_calculateDimension","_font","pointer","actions","thePos","theVel","theAcc","theAngle","_anchor","_handleAnchorChange","isOffScreen","draggable","_draggable","isDraggable","_pointerDragStartHandler","_pointerDragEndHandler","_pointerDragMoveHandler","_pointerDragLeaveHandler","currentGraphic","_dragging","pe","defaults","Passive","_prekill","_scene","onPreKill","_postkill","onPostKill","unkill","newZ","getGlobalPos","localCenter","getGlobalScale","getGlobalRotation","recurse","geom","containment","within","otherCollider","me","isScreenElement","ScreenElement","useWorld","coords","Timer","_complete","fcn","interval","repeats","numberOfRepeats","randomRange","_totalTimeAlive","_running","_numberOfTicks","maxNumberOfRepeats","_baseInterval","_generateRandomInterval","_MAX_ID","_callbacks","newInterval","newNumberOfRepeats","timesRepeated","getTimeRunning","timeToNextAction","timeElapsedTowardNextAction","isRunning","cancelTimer","DebugGraphicsComponent","useTransform","TileMapEvents","PreDraw","PostDraw","flagCollidersDirty","_collidersDirty","flagTilesDirty","_token","_rows","_cols","renderFromTopOfGraphic","_originalOffsets","_composite","_oldPos","_oldScale","currentCol","cd","Tile","_getOrSetColliderOriginalOffset","originalOffset","_updateColliders","tile","getTileByIndex","getRows","getColumns","xEnd","yEnd","graphicsIndex","graphicsLen","maybeParallax","oneMinusFactor","parallaxOffset","currentScene","getGraphics","grayish","_posDirty","_recalculate","_solid","removeGraphic","_bounds","StrategyContainer","lockToActor","addStrategy","LockCameraToActorStrategy","lockToActorAxis","LockCameraToActorAxisStrategy","elasticToActor","cameraElasticity","cameraFriction","ElasticToActorStrategy","radiusAroundActor","RadiusAroundActorStrategy","limitCameraBounds","box","LimitCameraBoundsStrategy","Axis","_cam","_eng","cam","currentFocus","getFocus","cameraVel","stretch","boundSizeChecked","focusX","focusY","CameraEvents","Camera","_cameraStrategies","dz","az","_angularVelocity","_posChanged","_cameraMoving","_isShaking","_shakeMagnitudeX","_shakeMagnitudeY","_shakeDuration","_elapsedShakeTime","_xShake","_yShake","_isZooming","_zoomStart","_zoomEnd","_currentZoomTime","_zoomDuration","_zoomEasing","_easing","_halfWidth","_halfHeight","_follow","ax","ay","move","easingFn","_lerpPromise","_lerpResolve","shake","magnitudeX","magnitudeY","zoomOverTime","_zoomPromise","_zoomResolve","cameraStrategy","removeStrategy","clearAllStrategies","_screen","currentRes","loadingComplete","res","updateTransform","runStrategies","newZoom","zoomEasing","lerpPoint","moveEasing","_isDoneShaking","newCanvasWidth","newCanvasHeight","cameraPos","TriggerEvents","ExitTrigger","EnterTrigger","triggerDefaults","Trigger","opts","_dispatchAction","_target","SystemType","System","_entityAddedOrRemoved","AddedEntity","isAddedSystemEntity","RemovedEntity","isRemoveSystemEntity","EntityManager","_world","entities","_entityIndex","_entitiesToRemove","updateEntities","removeEntity","findEntitiesForRemoval","queryManager","addEntity","idOrEntity","currFrame","actors","killed","processEntityRemovals","processComponentRemovals","getById","getByName","buildTypeKey","localeCompare","Query","_key","_entities","T","getEntities","typesOrEntity","contain","QueryManager","_queries","_addQuery","entityManager","maybeRemoveQuery","queryType","createQuery","maybeExistingQuery","getQuery","SystemManager","systems","initialized","systemType","addSystem","system","removeSystem","updateSystems","preupdate","Scene","postupdate","systemManager","Update","entityOrSystem","clearEntities","clearSystems","EulerIntegrator","integrate","totalAcc","_ACC","_VEL","_POS","_VEL_ACC","_SCALE_FACTOR","_SCALE","MotionSystem","optionalBody","ArcadeSolver","directionMap","distanceMap","solve","preSolve","solvePosition","solveVelocity","postSolve","opposite","velAdj","ContactConstraintPoint","normalImpulse","tangentImpulse","normalMass","tangentMass","aToContact","bToContact","originalVelocityAndRestitution","aToContactNormal","bToContactNormal","aToContactTangent","bToContactTangent","getRelativeVelocity","velA","RealisticSolver","lastFrameContacts","idToContactConstraint","getContactConstraints","finishedContactIds","contactPoints","pointIndex","restitution","relativeVelocity","constraints","maxCorrection","steeringForce","impulseForce","impulseDelta","maxFriction","newImpulse","normalVelocity","CollisionSystem","_realisticSolver","_arcadeSolver","_lastFrameContacts","_currentFrameContacts","_processor","collisionProcessor","_trackCollider","_untrackCollider","colliderComponent","colliderComp","compositeColliders","getSolver","compositeId","runContactStartEnd","AnimationDirection","AnimationEvents","Frame","Ended","frameDuration","timeScale","_idempotencyToken","_firstTick","_currentFrame","_timeLeftInFrame","_pingPongDirection","_done","_playing","_reversed","totalDuration","goToFrame","maybeFrame","currentFrame","fromSpriteSheet","frameIndices","durationPerFrameMs","invalidIndices","fromSpriteSheetCoordinates","frameCoordinates","defaultDuration","coord","currentFrameIndex","Backward","Forward","canFinish","frameNumber","frameIndex","_nextFrame","elapsedMilliseconds","GraphicsGroup","members","_updateDimensions","_isAnimationOrGroup","member","maybeAnimation","Configurable","base","EmitterType","ParticleTransform","ParticleImpl","emitterOrConfig","life","beginColor","endColor","velocity","acceleration","startSize","endSize","particleRotationalVelocity","currentRotation","focusAccel","fadeFlag","_rRate","_gRate","_bRate","_aRate","_currentColor","particleSize","particleSprite","sizeRate","elapsedMultiplier","isOffscreen","ParticleEmitter","particleTransform","Global","tmpColor","removeParticle","accel","Particle","_sprite","_particlesToEmit","numParticles","isEmitting","particles","deadParticles","minVel","maxVel","minAngle","maxAngle","emitRate","particleLife","minSize","maxSize","emitterType","randomRotation","particle","emitParticles","particleCount","_createParticle","world","clearParticles","ranX","ranY","GraphicsSystem","Draw","_sortedTransforms","_zHasChanged","_zIndexUpdate","sortedTransforms","_graphicsContext","entityAddedOrRemoved","parallax","_applyTransform","particleOpacity","_drawGraphicsComponent","oldFlipHorizontal","oldFlipVertical","isDebug","showBounds","boundsColor","ancestors","ancestor","interpolatedPos","interpolatedScale","interpolatedRotation","fixedUpdateFps","blend","currentFrameLagMs","DebugSystem","_collisionSystem","filterSettings","entitySettings","txSettings","motionSettings","colliderSettings","physicsSettings","graphicsSettings","debugDraw","bodySettings","cameraSettings","useFilter","ids","nameQuery","cursor","_pushCameraTransform","showAll","showPosition","positionColor","showPositionLabel","showZIndex","showId","showName","showRotation","rotationColor","showScale","scaleColor","showCollisionGroup","showCollisionType","showMass","showMotion","showSleeping","showVelocity","velocityColor","showAcceleration","accelerationColor","showGeometry","geometryColor","showOwner","_popCameraTransform","showBroadphaseSpacePartitionDebug","showCollisionContacts","showCollisionNormals","collisionContactColor","collisionNormalColor","showFocus","focusColor","showZoom","overrideUseColliderShape","overrideUseGraphicsBounds","lastFrameEntityToPointers","currentFrameEntityToPointers","_sortedEntities","_receiver","pointers","entityCurrentlyUnderPointer","pointerId","entityWasUnderPointer","entered","addPointerToEntity","_processPointerToEntity","_dispatchEvents","currentFramePointerCoords","screenPos","graphicBounds","_processDownAndEmit","lastDownPerPointer","currentFrameDown","isDragStart","_processUpAndEmit","lastUpPerPointer","currentFrameUp","isDragEnd","_processMoveAndEmit","lastMovePerPointer","currentFrameMove","isDragging","_processEnterLeaveAndEmit","lastUpDownMoveEvents","_processCancelAndEmit","currentFrameCancel","_processWheelAndEmit","currentFrameWheel","lastFrameEntities","currentFrameEntities","entitiesWithEvents","ActionsSystem","IsometricEntitySystem","iso","OffscreenSystem","_worldBounds","entityOffscreen","_isOffscreen","transformedBounds","PhysicsWorld","SceneEvents","Activate","Deactivate","PreDebugDraw","PostDebugDraw","triggers","tileMaps","timers","_timers","_cancelQueue","onActivate","onDeactivate","_initializeChildren","_activate","_deactivate","_predraw","_postdraw","removeTimer","timer","_collectActorStats","addTimer","transfer","isTimerActive","isCurrentScene","screenElements","_ui","ui","alive","ColorBlindnessMode","ScreenShader","ColorBlindnessPostProcessor","_colorBlindnessMode","simulate","_simulate","colorBlindnessMode","colorBlindMode","Protanope","Deuteranope","Tritanope","ColorBlindFlags","_colorBlindPostProcessor","correct","colorBlindness","FrameStats","prevFrame","useTestClock","wasRunning","testClock","toTestClock","useStandardClock","currentClock","standardClock","toStandardClock","_id","_fps","_actorStats","remaining","_durationStats","_physicsStats","PhysicsStats","_graphicsStats","drawCalls","drawnImages","otherStats","fps","fs","_collisions","_contacts","_fastBodies","_fastBodyCollisions","_broadphase","_narrowphase","ps","BrowserComponent","_nativeHandlers","_decorate","BrowserEvents","_windowGlobal","_documentGlobal","_windowComponent","_documentComponent","GlobalCoordinates","fromPagePosition","yOrEngine","engineOrUndefined","pageX","pageY","pagePos","coordinates","pointerType","nativeEvent","screenX","screenY","deltaZ","deltaMode","PointerAbstraction","lastPagePos","lastScreenPos","lastWorldPos","_onPointerMove","_onPointerDown","primary","_activeNativePointerIdsToNormalized","lastFramePointerCoords","currentFramePointerDown","lastFramePointerDown","_pointers","_boundHandle","_handle","_boundWheel","_handleWheel","recreate","eventReceiver","isDown","wasDown","native","touchAction","wheelOptions","passive","pageScrollPreventionMode","ScrollPreventionMode","onmousewheel","grabFocus","detach","_normalizePointerId","nativePointerId","preventDefault","eventCoords","TouchEvent","Unknown","Touch","changedTouches","touch","_nativeButtonToPointerButton","Mouse","isPointerEvent","_stringToPointerType","ScrollWheelNormalizationFactor","wheelDeltaX","wheelDeltaY","wheelDelta","detail","Line","Page","we","page","clientX","clientY","MouseEvent","pointerSystem","transformEntities","NoButton","Middle","Pen","FpsSampler","_samplePeriod","_currentFrameTime","_frames","_previousSampleTime","_beginFrameTime","initialFps","samplePeriod","_nowFn","nowFn","instant","Clock","_onFatalException","_maxFps","_lastTime","_elapsed","_scheduledCbs","_totalElapsed","maxFps","onFatalException","fpsSampler","TestClock","defaultUpdateMs","StandardClock","setFatalExceptionHandler","cb","timeoutMs","scheduledTime","_runScheduledCbs","overrideUpdateMs","fpsInterval","leftover","mainloop","_requestId","_currentTime","_updateMs","step","run","numberOfSteps","Util_Toaster","Toaster","_toasterCss","_container","_createFragment","toastMessage","innerText","toast","linkTarget","linkName","className","messageFragments","link","href","finalMessage","dismissBtn","keydownHandler","first","firstChild","insertBefore","InputMapper","inputs","_handlers","command","inputHandler","commandHandler","EngineEvents","FallbackGraphicsContext","Visible","Hidden","Start","PreFrame","PostFrame","Engine","isFullscreen","_isDebug","shouldSnapToPixel","scenes","_suppressPlayButton","enableCanvasTransparency","_toaster","_timescale","_deferredGoTo","_originalOptions","_performanceThresholdTriggered","_fpsSamples","_loadingComplete","_isReady","_isReadyPromise","_isReadyResolve","currentFrameElapsedMs","_lagMs","_screenShotRequests","_DEFAULT_ENGINE_OPTIONS","detector","suppressMinimumBrowserFeatureDetection","_compatible","testMessage","canvasElementId","suppressConsoleBootMessage","EX_VERSION","_originalDisplayMode","suppressHiDPIScaling","_mainloop","_loader","rootScene","addScene","___EXCALIBUR_DEVTOOL","_monitorPerformanceThresholdAndTriggerFallback","allow","configurePerformanceCanvas2DFallback","showPlayerMessage","numberOfFrames","useCanvas2DFallback","newCanvas","cloneNode","parentNode","replaceChild","pointerTarget","pointerScope","Document","timescale","removeScene","goToScene","previousScene","nextScene","scrollPreventionMode","keyboard","inputMapper","visibilityState","_overrideInitialize","deferredScene","_update","_draw","_checkForScreenShots","toggle","toggleDebug","isReady","loader","frameId","beforeUpdate","fixedTimestepMs","afterUpdate","afterDraw","screenshot","preserveHiDPIResolution","finalWidth","finalHeight","EventDispatcher","_wiredEventDispatchers","_deferedHandlerRemovals","_processDeferredHandlerRemovals","eventHandler","_removeHandler","eventHandlers","metaHandler","wire","eventDispatcher","unwire","newFont","spriteFont","sf","getTextWidth","IsometricTile","_gfx","_recalculateBounds","_tileBounds","graphicsOffset","tileToWorld","_isometricEntityComponent","halfTileWidth","halfTileHeight","xPos","yPos","totalWidth","totalHeight","worldToTile","worldCoordinate","tileCoordinate","tileCoord","_getMaxZIndex","maxZ","NEGATIVE_INFINITY","currentZ","ActionSequence","actionBuilder","_sequenceBuilder","_sequenceContext","ParallelActions","parallelActions","every","CollisionGroupManager","_CURRENT_GROUP","_MAX_GROUPS","_GROUPS","_CURRENT_BIT","groups","groupByName","_STARTING_BIT","has_initialize","hasOnInitialize","has_preupdate","hasOnPreUpdate","has_postupdate","hasOnPostUpdate","hasPreDraw","hasPostDraw","Gif","_stream","_gif","_animation","_transparentColor","Stream","ParseGif","images","toSpriteSheet","toAnimation","readCheckBytes","checkBytes","bitsToNum","ba","byteToBitArr","bite","dataArray","readByte","readBytes","bytes","read","readUnsigned","stream","_st","_handler","globalColorTable","parseColorTable","ct","readSubBlocks","parseHeader","hdr","sig","ver","colorRes","globalColorTableSize","gctFlag","sorted","bgColor","pixelAspectRatio","parseExt","block","parseGCExt","reserved","disposalMethod","userInput","transparencyGiven","delayTime","transparencyIndex","terminator","gce","parseComExt","com","parsePTExt","ptHeader","ptData","pte","parseAppExt","identifier","authCode","unknown","iterations","app","NETSCAPE","parseNetscapeExt","appData","parseUnknownAppExt","parseUnknownExt","label","extType","parseImg","img","leftPos","topPos","lctFlag","interlaced","lctSize","lct","lzwMinCodeSize","lzwData","pixels","minCodeSize","readCode","clearCode","eoiCode","codeSize","dict","lzwDecode","newPixels","cpRow","toRow","fromRow","fromPixels","offsets","steps","pass","deinterlace","arrayToImage","parseBlock","sentinel","eof","AsyncWaitQueue","enqueue","dequeue","Semaphore","_count","_waitQueue","waiting","enter","exit","__webpack_exports__ActionContext","__webpack_exports__ActionQueue","__webpack_exports__ActionSequence","__webpack_exports__ActionsComponent","__webpack_exports__ActionsSystem","__webpack_exports__ActivateEvent","__webpack_exports__Actor","__webpack_exports__AddedComponent","__webpack_exports__AddedEntity","__webpack_exports__AffineMatrix","__webpack_exports__Animation","__webpack_exports__AnimationDirection","__webpack_exports__AnimationEvents","__webpack_exports__AnimationStrategy","__webpack_exports__ArcadeSolver","__webpack_exports__AudioContextFactory","__webpack_exports__Axes","__webpack_exports__Axis","__webpack_exports__BaseAlign","__webpack_exports__Blink","__webpack_exports__BodyComponent","__webpack_exports__BoundingBox","__webpack_exports__BroadphaseStrategy","__webpack_exports__BrowserComponent","__webpack_exports__BrowserEvents","__webpack_exports__Buttons","__webpack_exports__Camera","__webpack_exports__CameraEvents","__webpack_exports__Canvas","__webpack_exports__Circle","__webpack_exports__CircleCollider","__webpack_exports__Clock","__webpack_exports__ClosestLine","__webpack_exports__ClosestLineJumpTable","__webpack_exports__Collider","__webpack_exports__ColliderComponent","__webpack_exports__CollisionContact","__webpack_exports__CollisionEndEvent","__webpack_exports__CollisionGroup","__webpack_exports__CollisionGroupManager","__webpack_exports__CollisionJumpTable","__webpack_exports__CollisionPostSolveEvent","__webpack_exports__CollisionPreSolveEvent","__webpack_exports__CollisionResolutionStrategy","__webpack_exports__CollisionStartEvent","__webpack_exports__CollisionSystem","__webpack_exports__CollisionType","__webpack_exports__Color","__webpack_exports__ColorBlindFlags","__webpack_exports__ColorBlindnessMode","__webpack_exports__ColorBlindnessPostProcessor","__webpack_exports__Component","__webpack_exports__CompositeCollider","__webpack_exports__Configurable","__webpack_exports__ConsoleAppender","__webpack_exports__ContactConstraintPoint","__webpack_exports__ContactEndEvent","__webpack_exports__ContactStartEvent","__webpack_exports__CoordPlane","__webpack_exports__DeactivateEvent","__webpack_exports__Debug","__webpack_exports__DebugGraphicsComponent","__webpack_exports__DebugSystem","__webpack_exports__DebugText","__webpack_exports__DegreeOfFreedom","__webpack_exports__Delay","__webpack_exports__Detector","__webpack_exports__Die","__webpack_exports__Direction","__webpack_exports__DisplayMode","__webpack_exports__DynamicTree","__webpack_exports__DynamicTreeCollisionProcessor","__webpack_exports__EX_VERSION","__webpack_exports__EaseBy","__webpack_exports__EaseTo","__webpack_exports__EasingFunctions","__webpack_exports__EdgeCollider","__webpack_exports__ElasticToActorStrategy","__webpack_exports__EmitterType","__webpack_exports__Engine","__webpack_exports__EngineEvents","__webpack_exports__EnterTriggerEvent","__webpack_exports__EnterViewPortEvent","__webpack_exports__Entity","__webpack_exports__EntityEvents","__webpack_exports__EntityManager","__webpack_exports__EventDispatcher","__webpack_exports__EventEmitter","__webpack_exports__EventTypes","__webpack_exports__Events","__webpack_exports__ExResponse","__webpack_exports__ExcaliburGraphicsContext2DCanvas","__webpack_exports__ExcaliburGraphicsContextWebGL","__webpack_exports__ExitTriggerEvent","__webpack_exports__ExitViewPortEvent","__webpack_exports__Fade","__webpack_exports__Flags","__webpack_exports__Follow","__webpack_exports__Font","__webpack_exports__FontCache","__webpack_exports__FontStyle","__webpack_exports__FontUnit","__webpack_exports__FpsSampler","__webpack_exports__FrameStats","__webpack_exports__Future","__webpack_exports__GameEvent","__webpack_exports__GameStartEvent","__webpack_exports__GameStopEvent","__webpack_exports__Gamepad","__webpack_exports__GamepadAxisEvent","__webpack_exports__GamepadButtonEvent","__webpack_exports__GamepadConnectEvent","__webpack_exports__GamepadDisconnectEvent","__webpack_exports__Gamepads","__webpack_exports__Gif","__webpack_exports__GlobalCoordinates","__webpack_exports__Graphic","__webpack_exports__GraphicsComponent","__webpack_exports__GraphicsGroup","__webpack_exports__GraphicsLayer","__webpack_exports__GraphicsLayers","__webpack_exports__GraphicsSystem","__webpack_exports__HiddenEvent","__webpack_exports__ImageFiltering","__webpack_exports__ImageSource","__webpack_exports__InitializeEvent","__webpack_exports__Input","__webpack_exports__InputMapper","__webpack_exports__Integrator","__webpack_exports__IsometricEntityComponent","__webpack_exports__IsometricEntitySystem","__webpack_exports__IsometricMap","__webpack_exports__IsometricTile","__webpack_exports__KeyEvent","__webpack_exports__Keyboard","__webpack_exports__Keys","__webpack_exports__KillEvent","__webpack_exports__Label","__webpack_exports__LimitCameraBoundsStrategy","__webpack_exports__Line","__webpack_exports__LineSegment","__webpack_exports__Loader","__webpack_exports__LoaderEvents","__webpack_exports__LockCameraToActorAxisStrategy","__webpack_exports__LockCameraToActorStrategy","__webpack_exports__LogLevel","__webpack_exports__Logger","__webpack_exports__Material","__webpack_exports__Matrix","__webpack_exports__MatrixLocations","__webpack_exports__MediaEvent","__webpack_exports__Meet","__webpack_exports__MotionComponent","__webpack_exports__MotionSystem","__webpack_exports__MoveBy","__webpack_exports__MoveTo","__webpack_exports__NativePointerButton","__webpack_exports__NativeSoundEvent","__webpack_exports__NativeSoundProcessedEvent","__webpack_exports__Observable","__webpack_exports__OffscreenSystem","__webpack_exports__Pair","__webpack_exports__ParallaxComponent","__webpack_exports__ParallelActions","__webpack_exports__ParseGif","__webpack_exports__Particle","__webpack_exports__ParticleEmitter","__webpack_exports__ParticleTransform","__webpack_exports__Physics","__webpack_exports__PhysicsStats","__webpack_exports__PhysicsWorld","__webpack_exports__PointerButton","__webpack_exports__PointerComponent","__webpack_exports__PointerEvent","__webpack_exports__PointerEventReceiver","__webpack_exports__PointerScope","__webpack_exports__PointerSystem","__webpack_exports__PointerType","__webpack_exports__Polygon","__webpack_exports__PolygonCollider","__webpack_exports__Pool","__webpack_exports__PostCollisionEvent","__webpack_exports__PostDebugDrawEvent","__webpack_exports__PostDrawEvent","__webpack_exports__PostFrameEvent","__webpack_exports__PostKillEvent","__webpack_exports__PostUpdateEvent","__webpack_exports__PreCollisionEvent","__webpack_exports__PreDebugDrawEvent","__webpack_exports__PreDrawEvent","__webpack_exports__PreFrameEvent","__webpack_exports__PreKillEvent","__webpack_exports__PreUpdateEvent","__webpack_exports__Projection","__webpack_exports__QuadIndexBuffer","__webpack_exports__Query","__webpack_exports__QueryManager","__webpack_exports__RadiusAroundActorStrategy","__webpack_exports__Random","__webpack_exports__Raster","__webpack_exports__Ray","__webpack_exports__RealisticSolver","__webpack_exports__Rectangle","__webpack_exports__RemovedComponent","__webpack_exports__RemovedEntity","__webpack_exports__Repeat","__webpack_exports__RepeatForever","__webpack_exports__Resolution","__webpack_exports__Resource","__webpack_exports__ResourceEvents","__webpack_exports__RotateBy","__webpack_exports__RotateTo","__webpack_exports__RotationType","__webpack_exports__ScaleBy","__webpack_exports__ScaleTo","__webpack_exports__Scene","__webpack_exports__SceneEvents","__webpack_exports__Screen","__webpack_exports__ScreenAppender","__webpack_exports__ScreenElement","__webpack_exports__ScreenShader","__webpack_exports__ScrollPreventionMode","__webpack_exports__Semaphore","__webpack_exports__Shader","__webpack_exports__Shape","__webpack_exports__Side","__webpack_exports__Sound","__webpack_exports__SoundEvents","__webpack_exports__Sprite","__webpack_exports__SpriteFont","__webpack_exports__SpriteSheet","__webpack_exports__StandardClock","__webpack_exports__StateMachine","__webpack_exports__StrategyContainer","__webpack_exports__Stream","__webpack_exports__System","__webpack_exports__SystemManager","__webpack_exports__SystemType","__webpack_exports__TagComponent","__webpack_exports__TestClock","__webpack_exports__Text","__webpack_exports__TextAlign","__webpack_exports__TextureLoader","__webpack_exports__Tile","__webpack_exports__TileMap","__webpack_exports__TileMapEvents","__webpack_exports__Timer","__webpack_exports__Toaster","__webpack_exports__Transform","__webpack_exports__TransformComponent","__webpack_exports__TreeNode","__webpack_exports__Trigger","__webpack_exports__TriggerEvents","__webpack_exports__TwoPI","__webpack_exports__Util","__webpack_exports__Vector","__webpack_exports__VectorView","__webpack_exports__VertexBuffer","__webpack_exports__VertexLayout","__webpack_exports__VisibleEvent","__webpack_exports__WebAudio","__webpack_exports__WebAudioInstance","__webpack_exports__WheelDeltaMode","__webpack_exports__WheelEvent","__webpack_exports__World","__webpack_exports__canonicalizeAngle","__webpack_exports__clamp","__webpack_exports__createId","__webpack_exports__frac","__webpack_exports__hasGraphicsTick","__webpack_exports__hasOnInitialize","__webpack_exports__hasOnPostUpdate","__webpack_exports__hasOnPreUpdate","__webpack_exports__hasPostDraw","__webpack_exports__hasPreDraw","__webpack_exports__has_initialize","__webpack_exports__has_postupdate","__webpack_exports__has_preupdate","__webpack_exports__isAddedComponent","__webpack_exports__isAddedSystemEntity","__webpack_exports__isRemoveSystemEntity","__webpack_exports__isRemovedComponent","__webpack_exports__isScreenElement","__webpack_exports__maxMessages","__webpack_exports__obsolete","__webpack_exports__pixelSnapEpsilon","__webpack_exports__randomInRange","__webpack_exports__randomIntInRange","__webpack_exports__range","__webpack_exports__resetObsoleteCounter","__webpack_exports__sign","__webpack_exports__toDegrees","__webpack_exports__toRadians","__webpack_exports__vec","__webpack_exports__webgl","Config","PlayerSpeed","PlayerFrameSpeed","__createBinding","k2","__setModuleDefault","__importStar","mod","resources_1","player_1","game","Resources","player","playerActor","Player","config_1","playerSpriteSheet","HeroSpriteSheetPng","leftIdle","rightIdle","upIdle","downIdle","leftWalk","rightWalk","upWalk","downWalk","Input","ArrowRight","ArrowLeft","ArrowUp","ArrowDown","excalibur_1","plugin_tiled_1","__webpack_require__"],"sourceRoot":""} \ No newline at end of file