|
'use strict'; |
|
(window.g_aYk = class { |
|
constructor(e, g) { |
|
(this.g_ars = e), (this.g_aYl = g), (this.g_aYm = !1), (this.g_aYn = () => this.g_KZ()); |
|
} |
|
g_aYo() {} |
|
g_aYp(e, g, a, _) { |
|
this.g_ars.g_aYq(this.g_aYl, e, g, a, _); |
|
} |
|
g_aYr(e, g, a, _) { |
|
return this.g_ars.g_aYs(this.g_aYl, e, g, a, _); |
|
} |
|
g_aYt(e, g, a) { |
|
this.g_ars.g_aYu() |
|
? this.g_aYp(e, g, a) |
|
: this.g_ars |
|
.g_aYv() |
|
._OnMessageFromDOM({ |
|
type: 'event', |
|
component: this.g_aYl, |
|
handler: e, |
|
dispatchOpts: a || null, |
|
data: g, |
|
responseId: null |
|
}); |
|
} |
|
g_aYw(e, g) { |
|
this.g_ars.g_aYx(this.g_aYl, e, g); |
|
} |
|
g_aYy(e) { |
|
for (const [g, a] of e) this.g_aYw(g, a); |
|
} |
|
g_aYz() { |
|
return this.g_ars; |
|
} |
|
g_aYA() { |
|
return this.g_aYl; |
|
} |
|
g_ael() { |
|
this.g_aYm || (this.g_ars.g_aYB(this.g_aYn), (this.g_aYm = !0)); |
|
} |
|
g_adY() { |
|
this.g_aYm && (this.g_ars.g_aYC(this.g_aYn), (this.g_aYm = !1)); |
|
} |
|
g_KZ() {} |
|
}), |
|
(window.g_mQ = class { |
|
constructor(e, g) { |
|
(this.g_ly = e), |
|
(this.g_mR = g), |
|
(this.g_mT = -1), |
|
(this.g_mU = -Infinity), |
|
(this.g_mV = () => this.g_mW()), |
|
(this.g_mX = !1), |
|
(this.g_mY = !1); |
|
} |
|
g_m_(e) { |
|
this.g_mY = !!e; |
|
} |
|
g_nc() { |
|
if (-1 === this.g_mT) { |
|
const e = Date.now(), |
|
g = e - this.g_mU, |
|
a = this.g_mR; |
|
g >= a && this.g_mY |
|
? ((this.g_mU = e), this.g_nd()) |
|
: (this.g_mT = self.setTimeout(this.g_mV, Math.max(a - g, 4))); |
|
} |
|
} |
|
g_nd() { |
|
(this.g_mX = !0), this.g_ly(), (this.g_mX = !1); |
|
} |
|
g_lC() { |
|
this.g_mX || (this.g_ne(), (this.g_mU = Date.now())); |
|
} |
|
g_mW() { |
|
(this.g_mT = -1), (this.g_mU = Date.now()), this.g_nd(); |
|
} |
|
g_ne() { |
|
-1 !== this.g_mT && (self.clearTimeout(this.g_mT), (this.g_mT = -1)); |
|
} |
|
g_ek() { |
|
this.g_ne(), (this.g_ly = null), (this.g_mV = null); |
|
} |
|
}), |
|
'use strict', |
|
(window.g_aYD = class extends g_aYk { |
|
constructor(e, g) { |
|
super(e, g), |
|
(this.g_aYE = new Map()), |
|
(this.g_aYF = !0), |
|
this.g_aYw('create', (e) => this.g_aYG(e)), |
|
this.g_aYw('destroy', (e) => this.g_aYH(e)), |
|
this.g_aYw('set-visible', (e) => this.g_aYI(e)), |
|
this.g_aYw('update-position', (e) => this.g_aYJ(e)), |
|
this.g_aYw('update-state', (e) => this.g_aAc(e)), |
|
this.g_aYw('focus', (e) => this.g_aYK(e)), |
|
this.g_aYw('set-css-style', (e) => this.g_aYL(e)); |
|
} |
|
g_aYM(e) { |
|
this.g_aYF = !!e; |
|
} |
|
g_aYN(e, g) { |
|
this.g_aYw(e, (e) => { |
|
const a = e.elementId, |
|
_ = this.g_aYE.get(a); |
|
return g(_, e); |
|
}); |
|
} |
|
g_aYG(e) { |
|
const g = e.elementId, |
|
a = this.g_aeM(g, e); |
|
this.g_aYE.set(g, a), |
|
e.isVisible || (a.style.display = 'none'), |
|
this.g_aYF && document.body.appendChild(a); |
|
} |
|
g_aeM() { |
|
throw new Error('required override'); |
|
} |
|
g_aYO() {} |
|
g_aYH(e) { |
|
const g = e.elementId, |
|
a = this.g_aYE.get(g); |
|
this.g_aYO(a), this.g_aYF && a.parentElement.removeChild(a), this.g_aYE.delete(g); |
|
} |
|
g_aYP(e, g, a) { |
|
a || (a = {}), (a.elementId = g), this.g_aYp(e, a); |
|
} |
|
g_aYQ(e, g, a) { |
|
a || (a = {}), (a.elementId = g), this.g_aYt(e, a); |
|
} |
|
g_aYI(e) { |
|
if (this.g_aYF) { |
|
const g = this.g_aYE.get(e.elementId); |
|
g.style.display = e.isVisible ? '' : 'none'; |
|
} |
|
} |
|
g_aYJ(e) { |
|
if (this.g_aYF) { |
|
const g = this.g_aYE.get(e.elementId); |
|
(g.style.left = e.left + 'px'), |
|
(g.style.top = e.top + 'px'), |
|
(g.style.width = e.width + 'px'), |
|
(g.style.height = e.height + 'px'); |
|
const a = e.fontSize; |
|
null !== a && (g.style.fontSize = a + 'em'); |
|
} |
|
} |
|
g_aAc(e) { |
|
const g = this.g_aYE.get(e.elementId); |
|
this.g_aYR(g, e); |
|
} |
|
g_aYR() { |
|
throw new Error('required override'); |
|
} |
|
g_aYK(e) { |
|
const g = this.g_aYE.get(e.elementId); |
|
e.focus ? g.focus() : g.blur(); |
|
} |
|
g_aYL(e) { |
|
const g = this.g_aYE.get(e.elementId); |
|
g.style[e.prop] = e.val; |
|
} |
|
g_aYS(e) { |
|
return this.g_aYE.get(e); |
|
} |
|
}), |
|
'use strict'; |
|
{ |
|
function _(e) { |
|
if (e.g_aYT) { |
|
const g = document.createElement('script'); |
|
(g.async = !1), (g.textContent = e.g_C), document.head.appendChild(g); |
|
} else |
|
return new Promise((g, a) => { |
|
const _ = document.createElement('script'); |
|
(_.onload = g), (_.onerror = a), (_.async = !1), (_.src = e), document.head.appendChild(_); |
|
}); |
|
} |
|
async function t(e) { |
|
const g = await r(e), |
|
a = new TextDecoder('utf-8'); |
|
return a.decode(g); |
|
} |
|
function r(e) { |
|
return new Promise((g, _) => { |
|
const a = new FileReader(); |
|
(a.onload = (e) => g(e.target.result)), (a.onerror = (e) => _(e)), a.readAsArrayBuffer(e); |
|
}); |
|
} |
|
function b(e) { |
|
return n.has(e); |
|
} |
|
const a = /(iphone|ipod|ipad)/i.test(navigator.userAgent); |
|
let e = new Audio(); |
|
const c = { |
|
'audio/webm; codecs=opus': !!e.canPlayType('audio/webm; codecs=opus'), |
|
'audio/ogg; codecs=opus': !!e.canPlayType('audio/ogg; codecs=opus'), |
|
'audio/webm; codecs=vorbis': !!e.canPlayType('audio/webm; codecs=vorbis'), |
|
'audio/ogg; codecs=vorbis': !!e.canPlayType('audio/ogg; codecs=vorbis'), |
|
'audio/mp4': !!e.canPlayType('audio/mp4'), |
|
'audio/mpeg': !!e.canPlayType('audio/mpeg') |
|
}; |
|
e = null; |
|
const g = []; |
|
let s = 0; |
|
window.RealFile = window.File; |
|
const i = [], |
|
u = new Map(), |
|
p = new Map(); |
|
let l = 0; |
|
const m = []; |
|
self.g_aYU = function (e) { |
|
if ('function' != typeof e) throw new Error('runOnStartup called without a function'); |
|
m.push(e); |
|
}; |
|
const n = new Set(['cordova', 'playable-ad', 'instant-games']); |
|
window.g_aYV = class e { |
|
constructor(e) { |
|
(this.g_aYW = e.g_aYX), |
|
(this.g_aYY = null), |
|
(this.g_apn = ''), |
|
(this.g_aYZ = e.g_aY_), |
|
(this.g_aY$ = {}), |
|
(this.g_aZa = null), |
|
(this.g_aZb = null), |
|
(this.g_aZc = []), |
|
(this.g_aZd = null), |
|
(this.g_ano = null), |
|
(this.g_arm = null), |
|
(this.g_anX = -1), |
|
(this.g_aZe = () => this.g_aZf()), |
|
(this.g_aZg = []), |
|
(this.g_aps = e.g_aZh), |
|
b(this.g_aps) && |
|
this.g_aYW && |
|
(console.warn( |
|
'[C3 runtime] Worker mode is enabled and supported, but is disabled in WebViews due to crbug.com/923007. Reverting to DOM mode.' |
|
), |
|
(this.g_aYW = !1)), |
|
(this.g_aZi = !1), |
|
(this.g_aZj = null), |
|
(this.g_aZk = null), |
|
('html5' === this.g_aps || 'playable-ad' === this.g_aps) && |
|
'file' === location.protocol.substr(0, 4) && |
|
alert( |
|
"Exported games won't work until you upload them. (When running on the file: protocol, browsers block many features from working for security reasons.)" |
|
), |
|
this.g_aYx('runtime', 'cordova-fetch-local-file', (e) => this.g_aZl(e)), |
|
this.g_aYx('runtime', 'create-job-worker', (e) => this.g_aZm(e)), |
|
'cordova' === this.g_aps |
|
? document.addEventListener('deviceready', () => this.g_ac$(e)) |
|
: this.g_ac$(e); |
|
} |
|
g_ek() { |
|
this.g_ask(), |
|
this.g_aYY && ((this.g_aYY.onmessage = null), (this.g_aYY = null)), |
|
this.g_aZa && (this.g_aZa.terminate(), (this.g_aZa = null)), |
|
this.g_aZb && (this.g_aZb.g_ek(), (this.g_aZb = null)), |
|
this.g_ano && (this.g_ano.parentElement.removeChild(this.g_ano), (this.g_ano = null)); |
|
} |
|
g_aZn() { |
|
return this.g_ano; |
|
} |
|
g_fe() { |
|
return this.g_apn; |
|
} |
|
g_aYu() { |
|
return this.g_aYW; |
|
} |
|
g_asZ() { |
|
return this.g_aps; |
|
} |
|
g_arM() { |
|
return a && 'cordova' === this.g_aps; |
|
} |
|
g_as_() { |
|
return a && b(this.g_aps); |
|
} |
|
async g_ac$(e) { |
|
if ('playable-ad' === this.g_aps) { |
|
(this.g_aZj = self.c3_base64files), (this.g_aZk = {}), await this.g_aZo(); |
|
for (let g = 0, a = e.g_aZp.length; g < a; ++g) { |
|
const a = e.g_aZp[g].toLowerCase(); |
|
this.g_aZk.hasOwnProperty(a) |
|
? (e.g_aZp[g] = { g_aYT: !0, g_C: this.g_aZk[a] }) |
|
: this.g_aZj.hasOwnProperty(a) && (e.g_aZp[g] = URL.createObjectURL(this.g_aZj[a])); |
|
} |
|
} |
|
if (e.g_aZq) this.g_apn = e.g_aZq; |
|
else { |
|
const e = location.origin; |
|
this.g_apn = ('null' === e ? 'file:///' : e) + location.pathname; |
|
const g = this.g_apn.lastIndexOf('/'); |
|
-1 !== g && (this.g_apn = this.g_apn.substr(0, g + 1)); |
|
} |
|
if (e.g_aZr) |
|
for (const [g, a] of Object.entries(e.g_aZr)) this.g_aY$[g] = URL.createObjectURL(a); |
|
const g = new MessageChannel(); |
|
(this.g_aYY = g.port1), |
|
(this.g_aYY.onmessage = (e) => this._OnMessageFromRuntime(e.data)), |
|
window.c3_addPortMessageHandler && window.c3_addPortMessageHandler((e) => this.g_aZs(e)), |
|
(this.g_arm = new self.g_aZt(this)), |
|
await this.g_arm.g_akw(), |
|
this.g_aZu(), |
|
'object' == typeof window.StatusBar && window.StatusBar.hide(), |
|
'object' == typeof window.AndroidFullScreen && window.AndroidFullScreen.immersiveMode(), |
|
await this.g_aZv(), |
|
this.g_aYW ? await this.g_aZw(e, g.port2) : await this.g_aZx(e, g.port2); |
|
} |
|
g_aZy(e) { |
|
return this.g_aY$.hasOwnProperty(e) |
|
? this.g_aY$[e] |
|
: e.endsWith('/workermain.js') && this.g_aY$.hasOwnProperty('workermain.js') |
|
? this.g_aY$['workermain.js'] |
|
: 'playable-ad' === this.g_aps && this.g_aZj.hasOwnProperty(e.toLowerCase()) |
|
? URL.createObjectURL(this.g_aZj[e.toLowerCase()]) |
|
: e; |
|
} |
|
async g_aZz(g, a, _) { |
|
if (g.startsWith('blob:')) return new Worker(g, _); |
|
if (this.g_arM()) { |
|
const e = await this.g_BT(this.g_aYZ + g), |
|
a = new Blob([e], { type: 'application/javascript' }); |
|
return new Worker(URL.createObjectURL(a), _); |
|
} |
|
const t = new URL(g, a), |
|
n = location.origin !== t.origin; |
|
if (n) { |
|
const e = await fetch(t); |
|
if (!e.ok) throw new Error('failed to fetch worker script'); |
|
const g = await e.blob(); |
|
return new Worker(URL.createObjectURL(g), _); |
|
} |
|
return new Worker(t, _); |
|
} |
|
g_aZu() { |
|
if (this.g_as_()) { |
|
const g = document.documentElement.style, |
|
a = document.body.style, |
|
_ = window.innerWidth < window.innerHeight, |
|
t = _ ? window.screen.width : window.screen.height, |
|
n = _ ? window.screen.height : window.screen.width; |
|
(a.height = g.height = n + 'px'), (a.width = g.width = t + 'px'); |
|
} |
|
} |
|
g_aZA(g) { |
|
return { |
|
baseUrl: this.g_apn, |
|
windowInnerWidth: window.innerWidth, |
|
windowInnerHeight: window.innerHeight, |
|
devicePixelRatio: window.devicePixelRatio, |
|
isFullscreen: e.g_aoA(), |
|
projectData: g.g_aZB, |
|
previewImageBlobs: window.cr_previewImageBlobs || this.g_aZj, |
|
previewProjectFileBlobs: window.cr_previewProjectFileBlobs, |
|
exportType: g.g_aZh, |
|
isDebug: -1 < self.location.search.indexOf('debug'), |
|
ife: !!self.g_aZC, |
|
jobScheduler: this.g_arm.g_aZD(), |
|
supportedAudioFormats: c, |
|
opusWasmScriptUrl: window.cr_opusWasmScriptUrl || this.g_aYZ + 'opus.wasm.js', |
|
opusWasmBinaryUrl: window.cr_opusWasmBinaryUrl || this.g_aYZ + 'opus.wasm.wasm', |
|
isiOSCordova: this.g_arM(), |
|
isiOSWebView: this.g_as_(), |
|
isFBInstantAvailable: 'undefined' != typeof self.FBInstant |
|
}; |
|
} |
|
async g_aZw(e, g) { |
|
const a = this.g_aZy(e.g_aZE); |
|
(this.g_aZa = await this.g_aZz(a, this.g_apn, { name: 'Runtime' })), |
|
(this.g_ano = document.createElement('canvas')), |
|
(this.g_ano.style.display = 'none'); |
|
const _ = this.g_ano.transferControlToOffscreen(); |
|
document.body.appendChild(this.g_ano), |
|
(window.c3canvas = this.g_ano), |
|
this.g_aZa.postMessage( |
|
Object.assign(this.g_aZA(e), { |
|
type: 'init-runtime', |
|
isInWorker: !0, |
|
messagePort: g, |
|
canvas: _, |
|
workerDependencyScripts: e.g_aZF || [], |
|
engineScripts: e.g_aZp, |
|
projectScripts: window.g_aZG, |
|
projectScriptsStatus: self.C3_ProjectScriptsStatus |
|
}), |
|
[g, _, ...this.g_arm.g_aZH()] |
|
), |
|
(this.g_aZc = i.map((e) => new e(this))), |
|
this.g_aZI(), |
|
(self.c3_callFunction = (e, g) => this.g_aZd.g_Vr(e, g)), |
|
'preview' === this.g_aps && |
|
(self.goToLastErrorScript = () => this.g_aYq('runtime', 'go-to-last-error-script')); |
|
} |
|
async g_aZx(g, a) { |
|
(this.g_ano = document.createElement('canvas')), |
|
(this.g_ano.style.display = 'none'), |
|
document.body.appendChild(this.g_ano), |
|
(window.c3canvas = this.g_ano), |
|
(this.g_aZc = i.map((e) => new e(this))), |
|
this.g_aZI(); |
|
const t = g.g_aZp.map((e) => ('string' == typeof e ? new URL(e, this.g_apn).toString() : e)); |
|
if ( |
|
(Array.isArray(g.g_aZF) && t.unshift(...g.g_aZF), |
|
await Promise.all(t.map((e) => _(e))), |
|
g.g_aZJ && 0 < g.g_aZJ.length) |
|
) { |
|
const e = self.C3_ProjectScriptsStatus; |
|
try { |
|
if ((await Promise.all(g.g_aZJ.map((e) => _(e[1]))), Object.values(e).some((e) => !e))) |
|
return void self.setTimeout(() => this.g_aZK(e), 100); |
|
} catch (g) { |
|
return ( |
|
console.error('[Preview] Error loading project scripts: ', g), |
|
void self.setTimeout(() => this.g_aZK(e), 100) |
|
); |
|
} |
|
} |
|
if ('preview' === this.g_aps && 'object' != typeof self.g_aO.g_aYj) |
|
return ( |
|
console.error( |
|
'[C3 runtime] Failed to load JavaScript code used in events. Check all your JavaScript code has valid syntax.' |
|
), |
|
void alert( |
|
'Failed to load JavaScript code used in events. Check all your JavaScript code has valid syntax.' |
|
) |
|
); |
|
const n = Object.assign(this.g_aZA(g), { |
|
isInWorker: !1, |
|
messagePort: a, |
|
canvas: this.g_ano, |
|
runOnStartupFunctions: m |
|
}); |
|
(this.g_aZb = self.C3_CreateRuntime(n)), await self.C3_InitRuntime(this.g_aZb, n); |
|
} |
|
g_aZK(e) { |
|
const g = Object.entries(e) |
|
.filter((e) => !e[1]) |
|
.map((e) => e[0]), |
|
a = `Failed to load project script '${g[0]}'. Check all your JavaScript code has valid syntax.`; |
|
console.error('[Preview] ' + a), alert(a); |
|
} |
|
async g_aZm() { |
|
const e = await this.g_arm.g_aZL(); |
|
return { outputPort: e, transferables: [e] }; |
|
} |
|
g_aYv() { |
|
if (this.g_aYW) throw new Error('not available in worker mode'); |
|
return this.g_aZb; |
|
} |
|
g_aYq(g, a, _, t, n) { |
|
this.g_aYY.postMessage( |
|
{ |
|
type: 'event', |
|
component: g, |
|
handler: a, |
|
dispatchOpts: t || null, |
|
data: _, |
|
responseId: null |
|
}, |
|
this.g_aZi ? void 0 : n |
|
); |
|
} |
|
g_aYs(_, a, t, n, b) { |
|
const e = l++, |
|
i = new Promise((g, a) => { |
|
p.set(e, { resolve: g, reject: a }); |
|
}); |
|
return ( |
|
this.g_aYY.postMessage( |
|
{ |
|
type: 'event', |
|
component: _, |
|
handler: a, |
|
dispatchOpts: n || null, |
|
data: t, |
|
responseId: e |
|
}, |
|
this.g_aZi ? void 0 : b |
|
), |
|
i |
|
); |
|
} |
|
['_OnMessageFromRuntime'](e) { |
|
const g = e.type; |
|
if ('event' === g) this.g_aZM(e); |
|
else if ('result' === g) this.g_aZN(e); |
|
else if ('runtime-ready' === g) this.g_aZO(); |
|
else if ('alert' === g) alert(e.message); |
|
else throw new Error(`unknown message '${g}'`); |
|
} |
|
g_aZM(_) { |
|
const t = _.component, |
|
n = _.handler, |
|
a = _.data, |
|
b = _.responseId, |
|
e = u.get(t); |
|
if (!e) return void console.warn(`[DOM] No event handlers for component '${t}'`); |
|
const i = e.get(n); |
|
if (!i) return void console.warn(`[DOM] No handler '${n}' for component '${t}'`); |
|
let g = null; |
|
try { |
|
g = i(a); |
|
} catch (e) { |
|
return ( |
|
console.error(`Exception in '${t}' handler '${n}':`, e), |
|
void (null !== b && this.g_aZP(b, !1, '' + e)) |
|
); |
|
} |
|
null !== b && |
|
(g && g.then |
|
? g |
|
.then((e) => this.g_aZP(b, !0, e)) |
|
.catch((e) => { |
|
console.error(`Rejection from '${t}' handler '${n}':`, e), |
|
this.g_aZP(b, !1, '' + e); |
|
}) |
|
: this.g_aZP(b, !0, g)); |
|
} |
|
g_aZP(e, g, a) { |
|
let _; |
|
a && a.transferables && (_ = a.transferables), |
|
this.g_aYY.postMessage({ type: 'result', responseId: e, isOk: g, result: a }, _); |
|
} |
|
g_aZN(g) { |
|
const a = g.responseId, |
|
_ = g.isOk, |
|
t = g.result, |
|
n = p.get(a); |
|
_ ? n.resolve(t) : n.reject(t), p.delete(a); |
|
} |
|
g_aYx(e, g, a) { |
|
let _ = u.get(e); |
|
if ((_ || ((_ = new Map()), u.set(e, _)), _.has(g))) |
|
throw new Error(`[DOM] Component '${e}' already has handler '${g}'`); |
|
_.set(g, a); |
|
} |
|
static g_aZQ(e) { |
|
if (i.includes(e)) throw new Error('DOM handler already added'); |
|
i.push(e); |
|
} |
|
g_aZI() { |
|
for (const e of this.g_aZc) if ('runtime' === e.g_aYA()) return void (this.g_aZd = e); |
|
throw new Error('cannot find runtime DOM handler'); |
|
} |
|
g_aZs(e) { |
|
this.g_aYq('debugger', 'message', e); |
|
} |
|
g_aZO() { |
|
for (const e of this.g_aZc) e.g_aYo(); |
|
} |
|
static g_aoA() { |
|
return !!( |
|
document.fullscreenElement || |
|
document.webkitFullscreenElement || |
|
document.mozFullScreenElement |
|
); |
|
} |
|
async g_aZR() { |
|
return await this.g_aYs('runtime', 'get-remote-preview-status-info'); |
|
} |
|
g_aYB(e) { |
|
this.g_aZg.push(e), this.g_asj(); |
|
} |
|
g_aYC(e) { |
|
const g = this.g_aZg.indexOf(e); |
|
if (-1 === g) throw new Error('invalid callback'); |
|
this.g_aZg.splice(g, 1), this.g_aZg.length || this.g_ask(); |
|
} |
|
g_asj() { |
|
-1 === this.g_anX && this.g_aZg.length && (this.g_anX = requestAnimationFrame(this.g_aZe)); |
|
} |
|
g_ask() { |
|
-1 !== this.g_anX && (cancelAnimationFrame(this.g_anX), (this.g_anX = -1)); |
|
} |
|
g_aZf() { |
|
this.g_anX = -1; |
|
for (const e of this.g_aZg) e(); |
|
this.g_asj(); |
|
} |
|
g_aZS(e) { |
|
this.g_aZd.g_aZS(e); |
|
} |
|
g_aZT(e) { |
|
this.g_aZd.g_aZT(e); |
|
} |
|
g_aZU() { |
|
this.g_aZd.g_aZU(); |
|
} |
|
g_aAQ(e) { |
|
this.g_aZd.g_aAQ(e); |
|
} |
|
g_Co(e) { |
|
return !!c[e]; |
|
} |
|
async g_agl(e) { |
|
const g = await this.g_aYs('runtime', 'opus-decode', { arrayBuffer: e }, null, [e]); |
|
return new Float32Array(g); |
|
} |
|
g_fZ(e) { |
|
return ( |
|
/^(?:[a-z]+:)?\/\//.test(e) || 'data:' === e.substr(0, 5) || 'blob:' === e.substr(0, 5) |
|
); |
|
} |
|
g_f_(e) { |
|
return !this.g_fZ(e); |
|
} |
|
async g_aZl(e) { |
|
const g = e.filename; |
|
switch (e.as) { |
|
case 'text': |
|
return await this.g_BU(g); |
|
case 'buffer': |
|
return await this.g_BT(g); |
|
default: |
|
throw new Error('unsupported type'); |
|
} |
|
} |
|
g_aZV() { |
|
const e = window.cordova && window.cordova.plugins && window.cordova.plugins.permissions; |
|
if ('object' != typeof e) throw new Error('Permission API is not loaded'); |
|
return e; |
|
} |
|
g_aZW(e, g) { |
|
const a = e[g]; |
|
if ('string' != typeof a) throw new Error('Invalid permission name'); |
|
return a; |
|
} |
|
g_aZX(e) { |
|
const g = this.g_aZV(); |
|
return new Promise((_, a) => |
|
g.checkPermission(this.g_aZW(g, e), (e) => _(!!e.hasPermission), a) |
|
); |
|
} |
|
g_aJJ(e) { |
|
const g = this.g_aZV(); |
|
return new Promise((_, a) => |
|
g.requestPermission(this.g_aZW(g, e), (e) => _(!!e.hasPermission), a) |
|
); |
|
} |
|
async g_aZY(e) { |
|
if ('cordova' !== this.g_asZ()) return !0; |
|
if (this.g_arM()) return !0; |
|
for (const g of e) { |
|
const e = await this.g_aZX(g); |
|
if (e) continue; |
|
const a = await this.g_aJJ(g); |
|
if (!1 === a) return !1; |
|
} |
|
return !0; |
|
} |
|
async g_aZZ(...e) { |
|
if (!1 === (await this.g_aZY(e))) throw new Error('Permission not granted'); |
|
} |
|
g_aZ_(e) { |
|
const g = window.cordova.file.applicationDirectory + 'www/' + e.toLowerCase(); |
|
return new Promise((e, a) => { |
|
window.resolveLocalFileSystemURL( |
|
g, |
|
(g) => { |
|
g.file(e, a); |
|
}, |
|
a |
|
); |
|
}); |
|
} |
|
async g_BU(e) { |
|
const g = await this.g_aZ_(e); |
|
return await t(g); |
|
} |
|
g_aZ$() { |
|
if (g.length && !(8 <= s)) { |
|
s++; |
|
const e = g.shift(); |
|
this.g_a_a(e.filename, e.g_a_b, e.g_a_c); |
|
} |
|
} |
|
g_BT(e) { |
|
return new Promise((_, t) => { |
|
g.push({ |
|
filename: e, |
|
g_a_b: (e) => { |
|
s--, this.g_aZ$(), _(e); |
|
}, |
|
g_a_c: (e) => { |
|
s--, this.g_aZ$(), t(e); |
|
} |
|
}), |
|
this.g_aZ$(); |
|
}); |
|
} |
|
async g_a_a(g, a, e) { |
|
try { |
|
const _ = await this.g_aZ_(g), |
|
t = await r(_); |
|
a(t); |
|
} catch (g) { |
|
e(g); |
|
} |
|
} |
|
async g_aZo() { |
|
const e = []; |
|
for (const [g, a] of Object.entries(this.g_aZj)) e.push(this.g_a_d(g, a)); |
|
await Promise.all(e); |
|
} |
|
async g_a_d(e, g) { |
|
if ('object' == typeof g) |
|
(this.g_aZj[e] = new Blob([g.str], { type: g.type })), (this.g_aZk[e] = g.str); |
|
else { |
|
let a = await this.g_a_e(g); |
|
a || (a = this.g_a_f(g)), (this.g_aZj[e] = a); |
|
} |
|
} |
|
async g_a_e(e) { |
|
try { |
|
const g = await fetch(e); |
|
return await g.blob(); |
|
} catch (e) { |
|
return ( |
|
console.warn( |
|
'Failed to fetch a data: URI. Falling back to a slower workaround. This is probably because the Content Security Policy unnecessarily blocked it. Allow data: URIs in your CSP to avoid this.', |
|
e |
|
), |
|
null |
|
); |
|
} |
|
} |
|
g_a_f(e) { |
|
const g = this.g_a_g(e); |
|
return this.g_a_h(g.data, g.g_gq); |
|
} |
|
g_a_g(_) { |
|
const a = _.indexOf(','); |
|
if (0 > a) throw new URIError('expected comma in data: uri'); |
|
const t = _.substring(5, a), |
|
n = _.substring(a + 1), |
|
b = t.split(';'), |
|
e = b[0] || '', |
|
c = b[1], |
|
g = b[2]; |
|
let o; |
|
return ( |
|
(o = 'base64' === c || 'base64' === g ? atob(n) : decodeURIComponent(n)), |
|
{ g_gq: e, data: o } |
|
); |
|
} |
|
g_a_h(_, a) { |
|
let t, |
|
n, |
|
b = _.length, |
|
e = b >> 2, |
|
i = new Uint8Array(b), |
|
g = new Uint32Array(i.buffer, 0, e); |
|
for (t = 0, n = 0; t < e; ++t) |
|
g[t] = |
|
_.charCodeAt(n++) | |
|
(_.charCodeAt(n++) << 8) | |
|
(_.charCodeAt(n++) << 16) | |
|
(_.charCodeAt(n++) << 24); |
|
for (let e = 3 & b; e--; ) (i[n] = _.charCodeAt(n)), ++n; |
|
return new Blob([i], { type: a }); |
|
} |
|
g_aZv() { |
|
let e = null; |
|
const g = new Promise((g) => (e = g)), |
|
_ = new ArrayBuffer(1), |
|
t = new MessageChannel(); |
|
return ( |
|
(t.port2.onmessage = (g) => { |
|
(g.data && g.data.arrayBuffer) || |
|
((this.g_aZi = !0), |
|
console.warn( |
|
'MessageChannel transfers determined to be broken. Disabling transferables.' |
|
)), |
|
e(); |
|
}), |
|
t.port1.postMessage({ arrayBuffer: _ }, [_]), |
|
g |
|
); |
|
} |
|
}; |
|
} |
|
{ |
|
function _(e) { |
|
return ( |
|
(e.sourceCapabilities && e.sourceCapabilities.firesTouchEvents) || |
|
(e.originalEvent && |
|
e.originalEvent.sourceCapabilities && |
|
e.originalEvent.sourceCapabilities.firesTouchEvents) |
|
); |
|
} |
|
function t(e) { |
|
return new Promise((g, _) => { |
|
const a = document.createElement('link'); |
|
(a.onload = () => g(a)), |
|
(a.onerror = (e) => _(e)), |
|
(a.rel = 'stylesheet'), |
|
(a.href = e), |
|
document.head.appendChild(a); |
|
}); |
|
} |
|
function a(e) { |
|
return new Promise((g, _) => { |
|
const a = new Image(); |
|
(a.onload = () => g(a)), (a.onerror = (e) => _(e)), (a.src = e); |
|
}); |
|
} |
|
async function s(e) { |
|
const g = URL.createObjectURL(e); |
|
try { |
|
return await a(g); |
|
} finally { |
|
URL.revokeObjectURL(g); |
|
} |
|
} |
|
function d(e) { |
|
return new Promise((g, _) => { |
|
let a = new FileReader(); |
|
(a.onload = (e) => g(e.target.result)), (a.onerror = (e) => _(e)), a.readAsText(e); |
|
}); |
|
} |
|
async function u(e, _, t) { |
|
if (!/firefox/i.test(navigator.userAgent)) return await s(e); |
|
let n = await d(e); |
|
const b = new DOMParser(), |
|
g = b.parseFromString(n, 'image/svg+xml'), |
|
o = g.documentElement; |
|
if (o.hasAttribute('width') && o.hasAttribute('height')) { |
|
const g = o.getAttribute('width'), |
|
a = o.getAttribute('height'); |
|
if (!g.includes('%') && !a.includes('%')) return await s(e); |
|
} |
|
o.setAttribute('width', _ + 'px'), o.setAttribute('height', t + 'px'); |
|
const i = new XMLSerializer(); |
|
return (n = i.serializeToString(g)), (e = new Blob([n], { type: 'image/svg+xml' })), await s(e); |
|
} |
|
function e(e) { |
|
do { |
|
if (e.parentNode && e.hasAttribute('contenteditable')) return !0; |
|
e = e.parentNode; |
|
} while (e); |
|
return !1; |
|
} |
|
function g(e) { |
|
const g = e.target.tagName.toLowerCase(); |
|
c.has(g) && e.preventDefault(); |
|
} |
|
function f(e) { |
|
(e.metaKey || e.ctrlKey) && e.preventDefault(); |
|
} |
|
function b() { |
|
try { |
|
return window.parent && window.parent.document.hasFocus(); |
|
} catch (e) { |
|
return !1; |
|
} |
|
} |
|
function i() { |
|
const g = document.activeElement; |
|
if (!g) return !1; |
|
const a = g.tagName.toLowerCase(), |
|
_ = new Set(['email', 'number', 'password', 'search', 'tel', 'text', 'url']); |
|
return 'textarea' === a || ('input' === a ? _.has(g.type.toLowerCase() || 'text') : e(g)); |
|
} |
|
const h = new Map([ |
|
['OSLeft', 'MetaLeft'], |
|
['OSRight', 'MetaRight'] |
|
]), |
|
l = { dispatchRuntimeEvent: !0, dispatchUserScriptEvent: !0 }, |
|
m = { dispatchUserScriptEvent: !0 }, |
|
n = { dispatchRuntimeEvent: !0 }, |
|
c = new Set(['canvas', 'body', 'html']); |
|
(self.C3_GetSvgImageSize = async function (e) { |
|
const g = await s(e); |
|
if (0 < g.width && 0 < g.height) return [g.width, g.height]; |
|
else { |
|
(g.style.position = 'absolute'), |
|
(g.style.left = '0px'), |
|
(g.style.top = '0px'), |
|
(g.style.visibility = 'hidden'), |
|
document.body.appendChild(g); |
|
const e = g.getBoundingClientRect(); |
|
return document.body.removeChild(g), [e.width, e.height]; |
|
} |
|
}), |
|
(self.C3_RasterSvgImageBlob = async function (_, a, t, n, b) { |
|
const e = await u(_, a, t), |
|
g = document.createElement('canvas'); |
|
(g.width = n), (g.height = b); |
|
const c = g.getContext('2d'); |
|
return c.drawImage(e, 0, 0, a, t), g; |
|
}); |
|
let o = !1; |
|
document.addEventListener('pause', () => (o = !0)), |
|
document.addEventListener('resume', () => (o = !1)); |
|
const p = class extends g_aYk { |
|
constructor(_) { |
|
super(_, 'runtime'), |
|
(this.g_a_i = !0), |
|
(this.g_a_j = -1), |
|
(this.g_a_k = 'any'), |
|
(this.g_a_l = !1), |
|
(this.g_a_m = !1), |
|
(this.g_a_n = null), |
|
(this.g_a_o = null), |
|
(this.g_a_p = null), |
|
_.g_aYx('canvas', 'update-size', (e) => this.g_a_q(e)), |
|
_.g_aYx('runtime', 'invoke-download', (e) => this.g_a_r(e)), |
|
_.g_aYx('runtime', 'raster-svg-image', (e) => this.g_a_s(e)), |
|
_.g_aYx('runtime', 'get-svg-image-size', (e) => this.g_a_t(e)), |
|
_.g_aYx('runtime', 'set-target-orientation', (e) => this.g_a_u(e)), |
|
_.g_aYx('runtime', 'register-sw', () => this.g_a_v()), |
|
_.g_aYx('runtime', 'post-to-debugger', (e) => this.g_a_w(e)), |
|
_.g_aYx('runtime', 'go-to-script', (e) => this.g_a_w(e)), |
|
_.g_aYx('runtime', 'before-start-ticking', () => this.g_a_x()), |
|
_.g_aYx('runtime', 'debug-highlight', (e) => this.g_a_y(e)), |
|
_.g_aYx('runtime', 'enable-device-orientation', () => this.g_a_z()), |
|
_.g_aYx('runtime', 'enable-device-motion', () => this.g_a_A()), |
|
_.g_aYx('runtime', 'add-stylesheet', (e) => this.g_a_B(e)), |
|
_.g_aYx('runtime', 'alert', (e) => this.g_a_C(e)); |
|
const t = new Set(['input', 'textarea', 'datalist']); |
|
window.addEventListener('contextmenu', (g) => { |
|
const a = g.target, |
|
_ = a.tagName.toLowerCase(); |
|
t.has(_) || e(a) || g.preventDefault(); |
|
}); |
|
const a = _.g_aZn(); |
|
window.addEventListener('selectstart', g), |
|
window.addEventListener('gesturehold', g), |
|
a.addEventListener('selectstart', g), |
|
a.addEventListener('gesturehold', g), |
|
window.addEventListener('touchstart', g, { passive: !1 }), |
|
'undefined' == typeof PointerEvent |
|
? a.addEventListener('touchstart', g) |
|
: (window.addEventListener('pointerdown', g, { passive: !1 }), |
|
a.addEventListener('pointerdown', g)), |
|
(this.g_a_D = 0), |
|
window.addEventListener('mousedown', (e) => { |
|
1 === e.button && e.preventDefault(); |
|
}), |
|
window.addEventListener('mousewheel', f, { passive: !1 }), |
|
window.addEventListener('wheel', f, { passive: !1 }), |
|
window.addEventListener('resize', () => this.g_aom()), |
|
_.g_as_() && |
|
window.addEventListener('focusout', () => { |
|
i() || (document.scrollingElement.scrollTop = 0); |
|
}), |
|
(this.g_a_E = new Set()), |
|
(this.g_a_F = new WeakSet()), |
|
(this.g_azW = !1); |
|
} |
|
g_a_x() { |
|
return ( |
|
'cordova' === this.g_ars.g_asZ() |
|
? (document.addEventListener('pause', () => this.g_aro(!0)), |
|
document.addEventListener('resume', () => this.g_aro(!1))) |
|
: document.addEventListener('visibilitychange', () => this.g_aro(document.hidden)), |
|
{ isSuspended: !!(document.hidden || o) } |
|
); |
|
} |
|
g_aYo() { |
|
window.addEventListener('focus', () => this.g_a_G('window-focus')), |
|
window.addEventListener('blur', () => { |
|
this.g_a_G('window-blur', { parentHasFocus: b() }), (this.g_a_D = 0); |
|
}), |
|
window.addEventListener('fullscreenchange', () => this.g_aon()), |
|
window.addEventListener('webkitfullscreenchange', () => this.g_aon()), |
|
window.addEventListener('mozfullscreenchange', () => this.g_aon()), |
|
window.addEventListener('fullscreenerror', (e) => this.g_aoo(e)), |
|
window.addEventListener('webkitfullscreenerror', (e) => this.g_aoo(e)), |
|
window.addEventListener('mozfullscreenerror', (e) => this.g_aoo(e)), |
|
window.addEventListener('keydown', (e) => this.g_a_H('keydown', e)), |
|
window.addEventListener('keyup', (e) => this.g_a_H('keyup', e)), |
|
window.addEventListener('dblclick', (e) => this.g_a_I('dblclick', e, l)), |
|
window.addEventListener('wheel', (e) => this.g_a_J('wheel', e)), |
|
'undefined' == typeof PointerEvent |
|
? (window.addEventListener('mousedown', (e) => this.g_a_K('pointerdown', e)), |
|
window.addEventListener('mousemove', (e) => this.g_a_K('pointermove', e)), |
|
window.addEventListener('mouseup', (e) => this.g_a_K('pointerup', e)), |
|
window.addEventListener('touchstart', (e) => this.g_a_L('pointerdown', e)), |
|
window.addEventListener('touchmove', (e) => this.g_a_L('pointermove', e)), |
|
window.addEventListener('touchend', (e) => this.g_a_L('pointerup', e)), |
|
window.addEventListener('touchcancel', (e) => this.g_a_L('pointercancel', e))) |
|
: (window.addEventListener('pointerdown', (e) => this.g_a_M('pointerdown', e)), |
|
this.g_ars.g_aYu() && |
|
'undefined' != typeof window.onpointerrawupdate && |
|
self === self.top |
|
? ((this.g_a_o = new g_mQ(() => this.g_a_N(), 5)), |
|
this.g_a_o.g_m_(!0), |
|
window.addEventListener('pointerrawupdate', (e) => this.g_a_O(e))) |
|
: window.addEventListener('pointermove', (e) => this.g_a_M('pointermove', e)), |
|
window.addEventListener('pointerup', (e) => this.g_a_M('pointerup', e)), |
|
window.addEventListener('pointercancel', (e) => this.g_a_M('pointercancel', e))); |
|
const e = () => this.g_aZU(); |
|
window.addEventListener('pointerup', e, !0), |
|
window.addEventListener('touchend', e, !0), |
|
window.addEventListener('click', e, !0), |
|
window.addEventListener('keydown', e, !0), |
|
window.addEventListener('gamepadconnected', e, !0); |
|
} |
|
g_a_G(e, g) { |
|
this.g_aYp(e, g || null, n); |
|
} |
|
g_a_P() { |
|
return Math.max(window.innerWidth, 1); |
|
} |
|
g_a_Q() { |
|
return Math.max(window.innerHeight, 1); |
|
} |
|
g_aom() { |
|
const e = this.g_a_P(), |
|
g = this.g_a_Q(); |
|
this.g_a_G('window-resize', { |
|
innerWidth: e, |
|
innerHeight: g, |
|
devicePixelRatio: window.devicePixelRatio |
|
}), |
|
this.g_ars.g_as_() && (-1 !== this.g_a_j && clearTimeout(this.g_a_j), this.g_a_R(e, g, 0)); |
|
} |
|
g_a_S(e, g, a) { |
|
-1 !== this.g_a_j && clearTimeout(this.g_a_j), |
|
(this.g_a_j = setTimeout(() => this.g_a_R(e, g, a), 48)); |
|
} |
|
g_a_R(g, a, _) { |
|
const t = this.g_a_P(), |
|
n = this.g_a_Q(); |
|
(this.g_a_j = -1), |
|
t != g || n != a |
|
? this.g_a_G('window-resize', { |
|
innerWidth: t, |
|
innerHeight: n, |
|
devicePixelRatio: window.devicePixelRatio |
|
}) |
|
: 10 > _ && this.g_a_S(t, n, _ + 1); |
|
} |
|
g_a_u(e) { |
|
this.g_a_k = e.targetOrientation; |
|
} |
|
g_a_T() { |
|
const e = this.g_a_k; |
|
if (screen.orientation && screen.orientation.lock) |
|
screen.orientation |
|
.lock(e) |
|
.catch((e) => console.warn('[Construct 3] Failed to lock orientation: ', e)); |
|
else |
|
try { |
|
let g = !1; |
|
screen.lockOrientation |
|
? (g = screen.lockOrientation(e)) |
|
: screen.webkitLockOrientation |
|
? (g = screen.webkitLockOrientation(e)) |
|
: screen.mozLockOrientation |
|
? (g = screen.mozLockOrientation(e)) |
|
: screen.msLockOrientation && (g = screen.msLockOrientation(e)), |
|
g || console.warn('[Construct 3] Failed to lock orientation'); |
|
} catch (e) { |
|
console.warn('[Construct 3] Failed to lock orientation: ', e); |
|
} |
|
} |
|
g_aon() { |
|
const e = g_aYV.g_aoA(); |
|
e && 'any' !== this.g_a_k && this.g_a_T(), |
|
this.g_aYp('fullscreenchange', { |
|
isFullscreen: e, |
|
innerWidth: this.g_a_P(), |
|
innerHeight: this.g_a_Q() |
|
}); |
|
} |
|
g_aoo(e) { |
|
console.warn('[Construct 3] Fullscreen request failed: ', e), |
|
this.g_aYp('fullscreenerror', { |
|
isFullscreen: g_aYV.g_aoA(), |
|
innerWidth: this.g_a_P(), |
|
innerHeight: this.g_a_Q() |
|
}); |
|
} |
|
g_aro(e) { |
|
e ? this.g_ars.g_ask() : this.g_ars.g_asj(), this.g_aYp('visibilitychange', { hidden: e }); |
|
} |
|
g_a_H(e, a) { |
|
'Backspace' === a.key && g(a); |
|
const _ = h.get(a.code) || a.code; |
|
this.g_aYt( |
|
e, |
|
{ |
|
code: _, |
|
key: a.key, |
|
which: a.which, |
|
repeat: a.repeat, |
|
altKey: a.altKey, |
|
ctrlKey: a.ctrlKey, |
|
metaKey: a.metaKey, |
|
shiftKey: a.shiftKey, |
|
timeStamp: a.timeStamp |
|
}, |
|
l |
|
); |
|
} |
|
g_a_J(e, g) { |
|
this.g_aYp( |
|
e, |
|
{ |
|
clientX: g.clientX, |
|
clientY: g.clientY, |
|
deltaX: g.deltaX, |
|
deltaY: g.deltaY, |
|
deltaZ: g.deltaZ, |
|
deltaMode: g.deltaMode, |
|
timeStamp: g.timeStamp |
|
}, |
|
l |
|
); |
|
} |
|
g_a_I(e, g, a) { |
|
_(g) || |
|
('mousedown' === e && window !== window.top && window.focus(), |
|
this.g_aYt( |
|
e, |
|
{ |
|
button: g.button, |
|
buttons: g.buttons, |
|
clientX: g.clientX, |
|
clientY: g.clientY, |
|
timeStamp: g.timeStamp |
|
}, |
|
a |
|
)); |
|
} |
|
g_a_K(e, g) { |
|
if (!_(g)) { |
|
'pointerdown' === e && window !== window.top && window.focus(); |
|
const a = this.g_a_D; |
|
'pointerdown' === e && 0 !== a |
|
? (e = 'pointermove') |
|
: 'pointerup' == e && 0 !== g.buttons && (e = 'pointermove'), |
|
this.g_aYt( |
|
e, |
|
{ |
|
pointerId: 1, |
|
pointerType: 'mouse', |
|
button: g.button, |
|
buttons: g.buttons, |
|
lastButtons: a, |
|
clientX: g.clientX, |
|
clientY: g.clientY, |
|
width: 0, |
|
height: 0, |
|
pressure: 0, |
|
tangentialPressure: 0, |
|
tiltX: 0, |
|
tiltY: 0, |
|
twist: 0, |
|
timeStamp: g.timeStamp |
|
}, |
|
l |
|
), |
|
(this.g_a_D = g.buttons), |
|
this.g_a_I(g.type, g, m); |
|
} |
|
} |
|
g_a_M(e, g) { |
|
'pointerdown' === e && window !== window.top && window.focus(), |
|
this.g_a_o && 'pointermove' !== e && this.g_a_o.g_lC(); |
|
let a = 0; |
|
if ( |
|
('mouse' === g.pointerType && (a = this.g_a_D), |
|
this.g_aYt( |
|
e, |
|
{ |
|
pointerId: g.pointerId, |
|
pointerType: g.pointerType, |
|
button: g.button, |
|
buttons: g.buttons, |
|
lastButtons: a, |
|
clientX: g.clientX, |
|
clientY: g.clientY, |
|
width: g.width || 0, |
|
height: g.height || 0, |
|
pressure: g.pressure || 0, |
|
tangentialPressure: g.tangentialPressure || 0, |
|
tiltX: g.tiltX || 0, |
|
tiltY: g.tiltY || 0, |
|
twist: g.twist || 0, |
|
timeStamp: g.timeStamp |
|
}, |
|
l |
|
), |
|
'mouse' === g.pointerType) |
|
) { |
|
let a = 'mousemove'; |
|
'pointerdown' === e ? (a = 'mousedown') : 'pointerup' == e && (a = 'pointerup'), |
|
this.g_a_I(a, g, m), |
|
(this.g_a_D = g.buttons); |
|
} |
|
} |
|
g_a_O(e) { |
|
(this.g_a_p = e), this.g_a_o.g_nc(); |
|
} |
|
g_a_N() { |
|
this.g_a_M('pointermove', this.g_a_p), (this.g_a_p = null); |
|
} |
|
g_a_L(e, g) { |
|
'pointerdown' === e && window !== window.top && window.focus(); |
|
for (let a = 0, _ = g.changedTouches.length; a < _; ++a) { |
|
const _ = g.changedTouches[a]; |
|
this.g_aYt( |
|
e, |
|
{ |
|
pointerId: _.identifier, |
|
pointerType: 'touch', |
|
button: 0, |
|
buttons: 0, |
|
lastButtons: 0, |
|
clientX: _.clientX, |
|
clientY: _.clientY, |
|
width: 2 * (_.radiusX || _.webkitRadiusX || 0), |
|
height: 2 * (_.radiusY || _.webkitRadiusY || 0), |
|
pressure: _.force || _.webkitForce || 0, |
|
tangentialPressure: 0, |
|
tiltX: 0, |
|
tiltY: 0, |
|
twist: _.rotationAngle || 0, |
|
timeStamp: g.timeStamp |
|
}, |
|
l |
|
); |
|
} |
|
} |
|
g_a_z() { |
|
this.g_a_l || |
|
((this.g_a_l = !0), window.addEventListener('deviceorientation', (e) => this.g_aKc(e))); |
|
} |
|
g_a_A() { |
|
this.g_a_m || |
|
((this.g_a_m = !0), window.addEventListener('devicemotion', (e) => this.g_aKd(e))); |
|
} |
|
g_aKc(e) { |
|
this.g_aYp( |
|
'deviceorientation', |
|
{ alpha: e.alpha || 0, beta: e.beta || 0, gamma: e.gamma || 0, timeStamp: e.timeStamp }, |
|
l |
|
); |
|
} |
|
g_aKd(_) { |
|
let a = null; |
|
const t = _.acceleration; |
|
t && (a = { x: t.x || 0, y: t.y || 0, z: t.z || 0 }); |
|
let n = null; |
|
const i = _.accelerationIncludingGravity; |
|
i && (n = { x: i.x || 0, y: i.y || 0, z: i.z || 0 }); |
|
let e = null; |
|
const c = _.rotationRate; |
|
c && (e = { alpha: c.alpha || 0, beta: c.beta || 0, gamma: c.gamma || 0 }), |
|
this.g_aYp( |
|
'devicemotion', |
|
{ |
|
acceleration: a, |
|
accelerationIncludingGravity: n, |
|
rotationRate: e, |
|
interval: _.interval, |
|
timeStamp: _.timeStamp |
|
}, |
|
l |
|
); |
|
} |
|
g_a_q(e) { |
|
const g = this.g_aYz(), |
|
a = g.g_aZn(); |
|
(a.style.width = e.styleWidth + 'px'), |
|
(a.style.height = e.styleHeight + 'px'), |
|
(a.style.marginLeft = e.marginLeft + 'px'), |
|
(a.style.marginTop = e.marginTop + 'px'), |
|
g.g_aZu(), |
|
this.g_a_i && ((a.style.display = ''), (this.g_a_i = !1)); |
|
} |
|
g_a_r(g) { |
|
const _ = g.url, |
|
t = g.filename, |
|
n = document.createElement('a'), |
|
e = document.body; |
|
(n.textContent = t), |
|
(n.href = _), |
|
(n.download = t), |
|
e.appendChild(n), |
|
n.click(), |
|
e.removeChild(n); |
|
} |
|
async g_a_s(_) { |
|
const a = _.blob, |
|
t = _.imageWidth, |
|
n = _.imageHeight, |
|
b = _.surfaceWidth, |
|
e = _.surfaceHeight, |
|
c = _.imageBitmapOpts, |
|
g = await self.C3_RasterSvgImageBlob(a, t, n, b, e); |
|
let o; |
|
return ( |
|
(o = c ? await createImageBitmap(g, c) : await createImageBitmap(g)), |
|
{ imageBitmap: o, transferables: [o] } |
|
); |
|
} |
|
async g_a_t(e) { |
|
return await self.C3_GetSvgImageSize(e.blob); |
|
} |
|
async g_a_B(e) { |
|
await t(e.url); |
|
} |
|
g_aZU() { |
|
const e = [...this.g_a_E]; |
|
if ((this.g_a_E.clear(), !this.g_azW)) |
|
for (const g of e) { |
|
const e = g.play(); |
|
e && |
|
e.catch(() => { |
|
this.g_a_F.has(g) || this.g_a_E.add(g); |
|
}); |
|
} |
|
} |
|
g_aZS(e) { |
|
if ('function' != typeof e.play) throw new Error('missing play function'); |
|
this.g_a_F.delete(e); |
|
let g; |
|
try { |
|
g = e.play(); |
|
} catch (g) { |
|
return void this.g_a_E.add(e); |
|
} |
|
g && |
|
g.catch(() => { |
|
this.g_a_F.has(e) || this.g_a_E.add(e); |
|
}); |
|
} |
|
g_aZT(e) { |
|
this.g_a_E.delete(e), this.g_a_F.add(e); |
|
} |
|
g_aAQ(e) { |
|
this.g_azW = !!e; |
|
} |
|
g_a_y(e) { |
|
const g = e.show; |
|
if (!g) return void (this.g_a_n && (this.g_a_n.style.display = 'none')); |
|
this.g_a_n || |
|
((this.g_a_n = document.createElement('div')), |
|
(this.g_a_n.id = 'inspectOutline'), |
|
document.body.appendChild(this.g_a_n)); |
|
const a = this.g_a_n; |
|
(a.style.display = ''), |
|
(a.style.left = e.left - 1 + 'px'), |
|
(a.style.top = e.top - 1 + 'px'), |
|
(a.style.width = e.width + 2 + 'px'), |
|
(a.style.height = e.height + 2 + 'px'), |
|
(a.textContent = e.name); |
|
} |
|
g_a_v() { |
|
window.C3_RegisterSW && window.C3_RegisterSW(); |
|
} |
|
g_a_w(e) { |
|
window.c3_postToMessagePort && ((e.from = 'runtime'), window.c3_postToMessagePort(e)); |
|
} |
|
g_Vr(e, g) { |
|
return this.g_aYr('js-invoke-function', { name: e, params: g }); |
|
} |
|
g_a_C(e) { |
|
alert(e.message + ' [via Web Worker]'); |
|
} |
|
}; |
|
g_aYV.g_aZQ(p); |
|
} |
|
{ |
|
const e = document.currentScript.src; |
|
self.g_aZt = class { |
|
constructor(g) { |
|
(this.g_a_U = g), |
|
(this.g_apn = e ? e.substr(0, e.lastIndexOf('/') + 1) : g.g_fe()), |
|
(this.g_atG = Math.min(navigator.hardwareConcurrency || 2, 16)), |
|
(this.g_a_V = null), |
|
(this.g_a_W = []), |
|
(this.g_atE = null), |
|
(this.g_a_X = null); |
|
} |
|
async g_akw() { |
|
if (this.g_a_Y) throw new Error('already initialised'); |
|
this.g_a_Y = !0; |
|
const e = this.g_a_U.g_aZy('dispatchworker.js'); |
|
this.g_a_V = await this.g_a_U.g_aZz(e, this.g_apn, { name: 'DispatchWorker' }); |
|
const g = new MessageChannel(); |
|
(this.g_atE = g.port1), |
|
this.g_a_V.postMessage({ type: '_init', 'in-port': g.port2 }, [g.port2]), |
|
(this.g_a_X = await this.g_aZL()); |
|
} |
|
async g_aZL() { |
|
const g = this.g_a_W.length, |
|
a = this.g_a_U.g_aZy('jobworker.js'), |
|
_ = await this.g_a_U.g_aZz(a, this.g_apn, { name: 'JobWorker' + g }), |
|
t = new MessageChannel(), |
|
n = new MessageChannel(); |
|
return ( |
|
this.g_a_V.postMessage({ type: '_addJobWorker', port: t.port1 }, [t.port1]), |
|
_.postMessage( |
|
{ type: 'init', number: g, 'dispatch-port': t.port2, 'output-port': n.port2 }, |
|
[t.port2, n.port2] |
|
), |
|
this.g_a_W.push(_), |
|
n.port1 |
|
); |
|
} |
|
g_aZD() { |
|
return { inputPort: this.g_atE, outputPort: this.g_a_X, maxNumWorkers: this.g_atG }; |
|
} |
|
g_aZH() { |
|
return [this.g_atE, this.g_a_X]; |
|
} |
|
}; |
|
} |
|
if (('use strict', window.C3_IsSupported)) { |
|
'undefined' != typeof OffscreenCanvas; |
|
window.c3_runtimeInterface = new g_aYV({ |
|
g_aYX: !1, |
|
g_aZE: 'workermain.js', |
|
g_aZp: ['scripts/c3runtime.js'], |
|
g_aY_: 'scripts/', |
|
g_aZF: [], |
|
g_aZh: 'html5' |
|
}); |
|
} |
|
{ |
|
function e(e, g) { |
|
return e.length === g.length && (e === g || e.toLowerCase() === g.toLowerCase()); |
|
} |
|
const g = class extends g_aYk { |
|
constructor(e) { |
|
super(e, 'audio'), |
|
(this.g_a_Z = null), |
|
(this.g_a__ = null), |
|
(this.g_a_$ = !1), |
|
(this.g_a$a = () => this.g_a$b()), |
|
(this.g_a$c = []), |
|
(this.g_a$d = []), |
|
(this.g_a$e = null), |
|
(this.g_a$f = ''), |
|
(this.g_a$g = -1), |
|
(this.g_a$h = new Map()), |
|
(this.g_azV = 1), |
|
(this.g_azW = !1), |
|
(this.g_azI = 0), |
|
(this.g_aks = 1), |
|
(this.g_aqN = 0), |
|
(this.g_azL = 'HRTF'), |
|
(this.g_azM = 'inverse'), |
|
(this.g_a$i = 600), |
|
(this.g_azR = 1e4), |
|
(this.g_azS = 1), |
|
(this.g_a$j = !1), |
|
(this.g_a$k = !1), |
|
(this.g_a$l = this.g_ars.g_Co('audio/webm; codecs=opus')), |
|
(this.g_a$m = new Map()), |
|
(this.g_a$n = new Set()), |
|
(this.g_a$o = !1), |
|
(this.g_a$p = ''), |
|
(this.g_a$q = null), |
|
(self.C3Audio_OnMicrophoneStream = (e, g) => this.g_a$r(e, g)), |
|
(this.g_a$s = null), |
|
(self.C3Audio_GetOutputStream = () => this.g_a$t()), |
|
(self.C3Audio_DOMInterface = this), |
|
this.g_aYy([ |
|
['create-audio-context', (e) => this.g_a$u(e)], |
|
['play', (e) => this.g_a$v(e)], |
|
['stop', (e) => this.g_a$w(e)], |
|
['stop-all', () => this.g_a$x()], |
|
['set-paused', (e) => this.g_a$y(e)], |
|
['set-volume', (e) => this.g_a$z(e)], |
|
['fade-volume', (e) => this.g_a$A(e)], |
|
['set-master-volume', (e) => this.g_a$B(e)], |
|
['set-muted', (e) => this.g_a$C(e)], |
|
['set-silent', (e) => this.g_a$D(e)], |
|
['set-looping', (e) => this.g_a$E(e)], |
|
['set-playback-rate', (e) => this.g_a$F(e)], |
|
['seek', (e) => this.g_a$G(e)], |
|
['preload', (e) => this.g_a$H(e)], |
|
['unload', (e) => this.g_HE(e)], |
|
['unload-all', () => this.g_a$I()], |
|
['set-suspended', (e) => this.g_a$J(e)], |
|
['add-effect', (e) => this.g_a$K(e)], |
|
['set-effect-param', (e) => this.g_a$L(e)], |
|
['remove-effects', (e) => this.g_a$M(e)], |
|
['tick', (e) => this.g_JX(e)], |
|
['load-state', (e) => this.g_a$N(e)] |
|
]); |
|
} |
|
async g_a$u(e) { |
|
e.isiOSCordova && (this.g_a$j = !0), |
|
(this.g_azI = e.timeScaleMode), |
|
(this.g_azL = ['equalpower', 'HRTF', 'soundfield'][e.panningModel]), |
|
(this.g_azM = ['linear', 'inverse', 'exponential'][e.distanceModel]), |
|
(this.g_a$i = e.refDistance), |
|
(this.g_azR = e.maxDistance), |
|
(this.g_azS = e.rolloffFactor); |
|
const g = { latencyHint: e.latencyHint }; |
|
if ('undefined' != typeof AudioContext) this.g_a_Z = new AudioContext(g); |
|
else if ('undefined' != typeof webkitAudioContext) this.g_a_Z = new webkitAudioContext(g); |
|
else throw new Error('Web Audio API not supported'); |
|
(this.g_a__ = this.g_a_Z.createGain()), this.g_a__.connect(this.g_a_Z.destination); |
|
const a = e.listenerPos; |
|
this.g_a_Z.listener.setPosition(a[0], a[1], a[2]), |
|
this.g_a_Z.listener.setOrientation(0, 0, 1, 0, -1, 0), |
|
window.addEventListener('pointerup', this.g_a$a, !0), |
|
window.addEventListener('touchend', this.g_a$a, !0), |
|
window.addEventListener('click', this.g_a$a, !0), |
|
window.addEventListener('keydown', this.g_a$a, !0), |
|
(self.C3_GetAudioContextCurrentTime = () => this.g_a$O()); |
|
try { |
|
await Promise.all(e.preloadList.map((e) => this.g_a$P(e.originalUrl, e.url, e.type, !1))); |
|
} catch (e) { |
|
console.error('[Construct 3] Preloading sounds failed: ', e); |
|
} |
|
return { sampleRate: this.g_a_Z.sampleRate }; |
|
} |
|
g_a$b() { |
|
if (!this.g_a_$) { |
|
const e = this.g_a_Z; |
|
'suspended' === e.state && e.resume && e.resume(); |
|
const g = e.createBuffer(1, 220, 22050), |
|
a = e.createBufferSource(); |
|
(a.buffer = g), |
|
a.connect(e.destination), |
|
a.start(0), |
|
'running' === e.state && |
|
((this.g_a_$ = !0), |
|
window.removeEventListener('pointerup', this.g_a$a, !0), |
|
window.removeEventListener('touchend', this.g_a$a, !0), |
|
window.removeEventListener('click', this.g_a$a, !0), |
|
window.removeEventListener('keydown', this.g_a$a, !0), |
|
(this.g_a$a = null)); |
|
} |
|
} |
|
g_azD() { |
|
return this.g_a_Z; |
|
} |
|
g_a$O() { |
|
return this.g_a_Z.currentTime; |
|
} |
|
g_azF() { |
|
return this.g_a__; |
|
} |
|
g_a$Q(e) { |
|
const g = this.g_a$m.get(e.toLowerCase()); |
|
return g ? g[0].g_a$R() : this.g_azF(); |
|
} |
|
g_a$S(e, g) { |
|
e = e.toLowerCase(); |
|
let _ = this.g_a$m.get(e); |
|
_ || ((_ = []), this.g_a$m.set(e, _)), |
|
g.g_al_(_.length), |
|
g.g_a$T(e), |
|
_.push(g), |
|
this.g_a$U(e); |
|
} |
|
g_a$U(e) { |
|
let g = this.g_azF(); |
|
const _ = this.g_a$m.get(e); |
|
if (_ && _.length) { |
|
g = _[0].g_a$R(); |
|
for (let e = 0, g = _.length; e < g; ++e) { |
|
const a = _[e]; |
|
e + 1 === g ? a.g_a$V(this.g_azF()) : a.g_a$V(_[e + 1].g_a$R()); |
|
} |
|
} |
|
for (const a of this.g_a$W(e)) a.g_a$X(g); |
|
this.g_a$q && this.g_a$p === e && (this.g_a$q.disconnect(), this.g_a$q.connect(g)); |
|
} |
|
g_a$Y() { |
|
return this.g_azV; |
|
} |
|
g_aAz() { |
|
return this.g_azW; |
|
} |
|
g_a$Z() { |
|
return this.g_azI; |
|
} |
|
g_KX() { |
|
return this.g_aks; |
|
} |
|
g_Gk() { |
|
return this.g_aqN; |
|
} |
|
g_a$_() { |
|
return this.g_a$j; |
|
} |
|
g_a$$() { |
|
return this.g_a$l; |
|
} |
|
g_baa() { |
|
this.g_a$k = !0; |
|
} |
|
g_bab() { |
|
return this.g_azL; |
|
} |
|
g_bac() { |
|
return this.g_azM; |
|
} |
|
g_bad() { |
|
return this.g_a$i; |
|
} |
|
g_bae() { |
|
return this.g_azR; |
|
} |
|
g_baf() { |
|
return this.g_azS; |
|
} |
|
g_bag(e, g) { |
|
return g |
|
? this.g_ars.g_agl(e).then((e) => { |
|
const g = this.g_a_Z.createBuffer(1, e.length, 48e3), |
|
a = g.getChannelData(0); |
|
return a.set(e), g; |
|
}) |
|
: new Promise((g, a) => { |
|
this.g_a_Z.decodeAudioData(e, g, a); |
|
}); |
|
} |
|
g_aZS(e) { |
|
this.g_ars.g_aZS(e); |
|
} |
|
g_aZT(e) { |
|
this.g_ars.g_aZT(e); |
|
} |
|
g_bah(g) { |
|
let a = 0; |
|
for (let _ = 0, e = this.g_a$d.length; _ < e; ++_) { |
|
const t = this.g_a$d[_]; |
|
(this.g_a$d[a] = t), t.g_bai() === g ? t.g_ek() : ++a; |
|
} |
|
this.g_a$d.length = a; |
|
} |
|
g_baj() { |
|
let e = 0; |
|
for (let g = 0, a = this.g_a$c.length; g < a; ++g) { |
|
const a = this.g_a$c[g]; |
|
(this.g_a$c[e] = a), a.g_bak() ? a.g_ek() : ++e; |
|
} |
|
this.g_a$c.length = e; |
|
} |
|
*g_a$W(g) { |
|
if (g) for (const a of this.g_a$d) e(a.g_bal(), g) && (yield a); |
|
else this.g_a$e && !this.g_a$e.g_bam() && (yield this.g_a$e); |
|
} |
|
async g_a$P(g, a, _, t, n) { |
|
for (const e of this.g_a$c) if (e.g_ban() === a) return await e.g_Cd(), e; |
|
if (n) return null; |
|
t && (this.g_a$j || this.g_a$k) && this.g_baj(); |
|
const e = g_bao.g_sf(this, g, a, _, t); |
|
return this.g_a$c.push(e), await e.g_Cd(), e; |
|
} |
|
async g_bap(_, a, t, n, b) { |
|
for (const e of this.g_a$d) if (e.g_ban() === a && (e.g_baq() || b)) return e.g_bar(n), e; |
|
const e = await this.g_a$P(_, a, t, b), |
|
i = e.g_agB(n); |
|
return this.g_a$d.push(i), i; |
|
} |
|
g_bas(e) { |
|
let g = this.g_a$h.get(e); |
|
if (!g) { |
|
let _ = null; |
|
const a = new Promise((e) => (_ = e)); |
|
(g = { g_bat: 0, promise: a, resolve: _ }), this.g_a$h.set(e, g); |
|
} |
|
g.g_bat++; |
|
} |
|
g_bau(e) { |
|
const g = this.g_a$h.get(e); |
|
if (!g) throw new Error('expected pending tag'); |
|
g.g_bat--, 0 === g.g_bat && (g.resolve(), this.g_a$h.delete(e)); |
|
} |
|
g_bav(e) { |
|
e || (e = this.g_a$f); |
|
const g = this.g_a$h.get(e); |
|
return g ? g.promise : Promise.resolve(); |
|
} |
|
g_baw() { |
|
if (0 < this.g_a$n.size) return void this.g_ael(); |
|
for (const e of this.g_a$d) if (e.g_Yd()) return void this.g_ael(); |
|
} |
|
g_KZ() { |
|
for (const e of this.g_a$n) e.g_KZ(); |
|
const e = this.g_a$O(); |
|
for (const g of this.g_a$d) g.g_KZ(e); |
|
const g = this.g_a$d.filter((e) => e.g_Yd()).map((e) => e.g_bax()); |
|
this.g_aYp('state', { |
|
tickCount: this.g_a$g, |
|
audioInstances: g, |
|
analysers: [...this.g_a$n].map((e) => e.g_bay()) |
|
}), |
|
0 === g.length && 0 === this.g_a$n.size && this.g_adY(); |
|
} |
|
g_baz(e, g, a) { |
|
this.g_aYp('trigger', { type: e, tag: g, aiid: a }); |
|
} |
|
async g_a$v(_) { |
|
const a = _.originalUrl, |
|
t = _.url, |
|
n = _.type, |
|
b = _.isMusic, |
|
e = _.tag, |
|
c = _.isLooping, |
|
g = _.vol, |
|
o = _.pos, |
|
i = _.panning; |
|
let r = _.off; |
|
if (0 < r && !_.trueClock) |
|
if (this.g_a_Z.getOutputTimestamp) { |
|
const e = this.g_a_Z.getOutputTimestamp(); |
|
r = r - e.performanceTime / 1e3 + e.contextTime; |
|
} else r = r - performance.now() / 1e3 + this.g_a_Z.currentTime; |
|
(this.g_a$f = e), this.g_bas(e); |
|
try { |
|
(this.g_a$e = await this.g_bap(a, t, n, e, b)), |
|
i |
|
? (this.g_a$e.g_baA(!0), |
|
this.g_a$e.g_baB(i.x, i.y, i.angle, i.innerAngle, i.outerAngle, i.outerGain), |
|
i.hasOwnProperty('uid') && this.g_a$e.g_baC(i.uid)) |
|
: this.g_a$e.g_baA(!1), |
|
this.g_a$e.g_MW(c, g, o, r); |
|
} catch (e) { |
|
return void console.error('[Construct 3] Audio: error starting playback: ', e); |
|
} finally { |
|
this.g_bau(e); |
|
} |
|
this.g_ael(); |
|
} |
|
g_a$w(e) { |
|
const g = e.tag; |
|
for (const a of this.g_a$W(g)) a.g_Kg(); |
|
} |
|
g_a$x() { |
|
for (const e of this.g_a$d) e.g_Kg(); |
|
} |
|
g_a$y(e) { |
|
const g = e.tag, |
|
a = e.paused; |
|
for (const _ of this.g_a$W(g)) a ? _.g_baD() : _.g_MV(); |
|
this.g_baw(); |
|
} |
|
g_a$z(e) { |
|
const g = e.tag, |
|
a = e.vol; |
|
for (const _ of this.g_a$W(g)) _.g_aAJ(a); |
|
} |
|
async g_a$A(g) { |
|
const a = g.tag, |
|
_ = g.vol, |
|
t = g.duration, |
|
n = g.stopOnEnd; |
|
await this.g_bav(a); |
|
for (const e of this.g_a$W(a)) e.g_aAK(_, t, n); |
|
this.g_baw(); |
|
} |
|
g_a$B(e) { |
|
this.g_azV = e.vol; |
|
for (const g of this.g_a$d) g.g_baE(); |
|
} |
|
g_a$C(e) { |
|
const g = e.tag, |
|
a = e.isMuted; |
|
for (const _ of this.g_a$W(g)) _.g_aAI(a); |
|
} |
|
g_a$D(e) { |
|
(this.g_azW = e.isSilent), this.g_ars.g_aAQ(this.g_azW); |
|
for (const g of this.g_a$d) g.g_baF(); |
|
} |
|
g_a$E(e) { |
|
const g = e.tag, |
|
a = e.isLooping; |
|
for (const _ of this.g_a$W(g)) _.g_aAH(a); |
|
} |
|
async g_a$F(e) { |
|
const g = e.tag, |
|
a = e.rate; |
|
await this.g_bav(g); |
|
for (const _ of this.g_a$W(g)) _.g_Mj(a); |
|
} |
|
async g_a$G(e) { |
|
const g = e.tag, |
|
a = e.pos; |
|
await this.g_bav(g); |
|
for (const _ of this.g_a$W(g)) _.g_aAP(a); |
|
} |
|
async g_a$H(g) { |
|
const a = g.originalUrl, |
|
_ = g.url, |
|
t = g.type, |
|
n = g.isMusic; |
|
try { |
|
await this.g_bap(a, _, t, '', n); |
|
} catch (e) { |
|
console.error('[Construct 3] Audio: error preloading: ', e); |
|
} |
|
} |
|
async g_HE(g) { |
|
const a = g.url, |
|
_ = g.type, |
|
t = g.isMusic, |
|
n = await this.g_a$P('', a, _, t, !0); |
|
if (n) { |
|
n.g_ek(); |
|
const e = this.g_a$c.indexOf(n); |
|
-1 !== e && this.g_a$c.splice(e, 1); |
|
} |
|
} |
|
g_a$I() { |
|
for (const e of this.g_a$c) e.g_ek(); |
|
this.g_a$c.length = 0; |
|
} |
|
g_a$J(e) { |
|
const g = e.isSuspended; |
|
!g && this.g_a_Z.resume && this.g_a_Z.resume(); |
|
for (const a of this.g_a$d) a.g_asi(g); |
|
g && this.g_a_Z.suspend && this.g_a_Z.suspend(); |
|
} |
|
g_JX(e) { |
|
if ( |
|
((this.g_aks = e.timeScale), |
|
(this.g_aqN = e.gameTime), |
|
(this.g_a$g = e.tickCount), |
|
0 !== this.g_azI) |
|
) |
|
for (const e of this.g_a$d) e.g_baG(); |
|
const g = e.listenerPos; |
|
g && this.g_a_Z.listener.setPosition(g[0], g[1], g[2]); |
|
for (const g of e.instPans) { |
|
const e = g.uid; |
|
for (const a of this.g_a$d) a.g_Ei() === e && a.g_baH(g.x, g.y, g.angle); |
|
} |
|
} |
|
async g_a$K(g) { |
|
const a = g.type, |
|
_ = g.tag, |
|
t = g.params; |
|
let n; |
|
if ('filter' === a) n = new g_baI(this, ...t); |
|
else if ('delay' === a) n = new g_baJ(this, ...t); |
|
else if ('convolution' === a) { |
|
let e = null; |
|
try { |
|
e = await this.g_a$P(g.bufferOriginalUrl, g.bufferUrl, g.bufferType, !1); |
|
} catch (e) { |
|
return void console.log('[Construct 3] Audio: error loading convolution: ', e); |
|
} |
|
(n = new g_baK(this, e.g_baL(), ...t)), |
|
n.g_baM(g.bufferOriginalUrl, g.bufferUrl, g.bufferType); |
|
} else if ('flanger' === a) n = new g_baN(this, ...t); |
|
else if ('phaser' === a) n = new g_baO(this, ...t); |
|
else if ('gain' === a) n = new g_baP(this, ...t); |
|
else if ('tremolo' === a) n = new g_baQ(this, ...t); |
|
else if ('ringmod' === a) n = new g_baR(this, ...t); |
|
else if ('distortion' === a) n = new g_baS(this, ...t); |
|
else if ('compressor' === a) n = new g_baT(this, ...t); |
|
else if ('analyser' === a) n = new g_baU(this, ...t); |
|
else throw new Error('invalid effect type'); |
|
this.g_a$S(_, n), this.g_baV(); |
|
} |
|
g_a$L(_) { |
|
const a = _.tag, |
|
t = _.index, |
|
n = _.param, |
|
b = _.value, |
|
e = _.ramp, |
|
i = _.time, |
|
g = this.g_a$m.get(a); |
|
!g || 0 > t || t >= g.length || (g[t].g_baW(n, b, e, i), this.g_baV()); |
|
} |
|
g_a$M(e) { |
|
const g = e.tag.toLowerCase(), |
|
_ = this.g_a$m.get(g); |
|
if (_ && _.length) { |
|
for (const e of _) e.g_ek(); |
|
this.g_a$m.delete(g), this.g_a$U(g); |
|
} |
|
} |
|
g_baX(e) { |
|
this.g_a$n.add(e), this.g_baw(); |
|
} |
|
g_baY(e) { |
|
this.g_a$n.delete(e); |
|
} |
|
g_baV() { |
|
this.g_a$o || ((this.g_a$o = !0), Promise.resolve().then(() => this.g_baZ())); |
|
} |
|
g_baZ() { |
|
const e = {}; |
|
for (const [g, a] of this.g_a$m) e[g] = a.map((e) => e.g_bax()); |
|
this.g_aYp('fxstate', { fxstate: e }), (this.g_a$o = !1); |
|
} |
|
async g_a$N(e) { |
|
const g = e.saveLoadMode; |
|
if (3 !== g) |
|
for (const e of this.g_a$d) (e.g_bak() && 1 === g) || (!e.g_bak() && 2 === g) || e.g_Kg(); |
|
for (const g of this.g_a$m.values()) for (const e of g) e.g_ek(); |
|
this.g_a$m.clear(), (this.g_aks = e.timeScale), (this.g_aqN = e.gameTime); |
|
const a = e.listenerPos; |
|
this.g_a_Z.listener.setPosition(a[0], a[1], a[2]), |
|
(this.g_azW = e.isSilent), |
|
this.g_ars.g_aAQ(this.g_azW), |
|
(this.g_azV = e.masterVolume); |
|
const _ = []; |
|
for (const g of Object.values(e.effects)) _.push(Promise.all(g.map((e) => this.g_a$K(e)))); |
|
await Promise.all(_), await Promise.all(e.playing.map((e) => this.g_ba_(e, g))), this.g_baw(); |
|
} |
|
async g_ba_(_, a) { |
|
if (3 === a) return; |
|
const t = _.bufferOriginalUrl, |
|
n = _.bufferUrl, |
|
b = _.bufferType, |
|
e = _.isMusic, |
|
c = _.tag, |
|
g = _.isLooping, |
|
o = _.volume, |
|
i = _.playbackTime; |
|
if (e && 1 === a) return; |
|
if (!e && 2 === a) return; |
|
let r = null; |
|
try { |
|
r = await this.g_bap(t, n, b, c, e); |
|
} catch (e) { |
|
return void console.error('[Construct 3] Audio: error loading audio state: ', e); |
|
} |
|
r.g_ba$(_.pan), r.g_MW(g, o, i, 0), _.isPlaying || r.g_baD(), r.g_bba(_); |
|
} |
|
g_a$r(e, g) { |
|
this.g_a$q && this.g_a$q.disconnect(), |
|
(this.g_a$p = g.toLowerCase()), |
|
(this.g_a$q = this.g_a_Z.createMediaStreamSource(e)), |
|
this.g_a$q.connect(this.g_a$Q(this.g_a$p)); |
|
} |
|
g_a$t() { |
|
return ( |
|
this.g_a$s || |
|
((this.g_a$s = this.g_a_Z.createMediaStreamDestination()), |
|
this.g_a__.connect(this.g_a$s)), |
|
this.g_a$s.stream |
|
); |
|
} |
|
}; |
|
g_aYV.g_aZQ(g); |
|
} |
|
'use strict', |
|
(self.g_bao = class { |
|
constructor(g, a, _, t, n) { |
|
(this.g_bbb = g), |
|
(this.g_bbc = a), |
|
(this.g_CE = _), |
|
(this.g_kL = t), |
|
(this.g_bbd = n), |
|
(this.g_bbe = ''), |
|
(this.g_bbf = 'not-loaded'), |
|
(this.g_CJ = null); |
|
} |
|
g_ek() { |
|
(this.g_bbf = 'not-loaded'), (this.g_bbb = null), (this.g_CJ = null); |
|
} |
|
static g_sf(g, a, _, t, n) { |
|
const e = 'audio/webm; codecs=opus' === t && !g.g_a$$(); |
|
return ( |
|
n && e && g.g_baa(), |
|
!n || g.g_a$_() || e ? new g_bbg(g, a, _, t, n, e) : new g_bbh(g, a, _, t, n) |
|
); |
|
} |
|
g_agB(e) { |
|
return 'html5' === this.g_bbe |
|
? new g_bbi(this.g_bbb, this, e) |
|
: new g_bbj(this.g_bbb, this, e); |
|
} |
|
g_Hw() {} |
|
g_Cd() { |
|
return this.g_CJ || (this.g_CJ = this.g_Hw()), this.g_CJ; |
|
} |
|
g_CK() {} |
|
g_bbk() {} |
|
g_bbl() { |
|
return 'failed' === this.g_bbf; |
|
} |
|
g_azD() { |
|
return this.g_bbb.g_azD(); |
|
} |
|
g_bbm() { |
|
return this.g_bbe; |
|
} |
|
g_bbn() { |
|
return this.g_bbc; |
|
} |
|
g_ban() { |
|
return this.g_CE; |
|
} |
|
g_bbo() { |
|
return this.g_kL; |
|
} |
|
g_bak() { |
|
return this.g_bbd; |
|
} |
|
g_aio() {} |
|
}), |
|
'use strict', |
|
(self.g_bbh = class extends g_bao { |
|
constructor(g, a, _, t, n) { |
|
super(g, a, _, t, n), |
|
(this.g_bbe = 'html5'), |
|
(this.g_bbp = new Audio()), |
|
(this.g_bbp.crossOrigin = 'anonymous'), |
|
(this.g_bbp.autoplay = !1), |
|
(this.g_bbp.preload = 'auto'), |
|
(this.g_bbq = null), |
|
(this.g_bbr = null), |
|
(this.g_bbs = !1), |
|
this.g_bbp.addEventListener('canplaythrough', () => (this.g_bbs = !0)), |
|
(this.g_bbt = this.g_azD().createGain()), |
|
(this.g_bbu = null), |
|
this.g_bbp.addEventListener('canplay', () => { |
|
this.g_bbq && |
|
((this.g_bbf = 'loaded'), this.g_bbq(), (this.g_bbq = null), (this.g_bbr = null)), |
|
this.g_bbu || |
|
!this.g_bbp || |
|
((this.g_bbu = this.g_azD().createMediaElementSource(this.g_bbp)), |
|
this.g_bbu.connect(this.g_bbt)); |
|
}), |
|
(this.onended = null), |
|
this.g_bbp.addEventListener('ended', () => { |
|
this.onended && this.onended(); |
|
}), |
|
this.g_bbp.addEventListener('error', (e) => this.g_bbv(e)); |
|
} |
|
g_ek() { |
|
this.g_bbb.g_bah(this), |
|
this.g_bbt.disconnect(), |
|
(this.g_bbt = null), |
|
this.g_bbu.disconnect(), |
|
(this.g_bbu = null), |
|
this.g_bbp && !this.g_bbp.paused && this.g_bbp.pause(), |
|
(this.onended = null), |
|
(this.g_bbp = null), |
|
super.g_ek(); |
|
} |
|
g_Hw() { |
|
return ( |
|
(this.g_bbf = 'loading'), |
|
new Promise((e, g) => { |
|
(this.g_bbq = e), (this.g_bbr = g), (this.g_bbp.src = this.g_CE); |
|
}) |
|
); |
|
} |
|
g_bbv(e) { |
|
console.error(`[Construct 3] Audio '${this.g_CE}' error: `, e), |
|
this.g_bbr && |
|
((this.g_bbf = 'failed'), this.g_bbr(e), (this.g_bbq = null), (this.g_bbr = null)); |
|
} |
|
g_CK() { |
|
const e = 4 <= this.g_bbp.readyState; |
|
return e && (this.g_bbs = !0), e || this.g_bbs; |
|
} |
|
g_bbk() { |
|
return this.g_CK(); |
|
} |
|
g_bbw() { |
|
return this.g_bbp; |
|
} |
|
g_bbx() { |
|
return this.g_bbt; |
|
} |
|
g_aio() { |
|
return this.g_bbp.duration; |
|
} |
|
}), |
|
'use strict', |
|
(self.g_bbg = class extends g_bao { |
|
constructor(g, a, _, t, n, e) { |
|
super(g, a, _, t, n), |
|
(this.g_bbe = 'webaudio'), |
|
(this.g_bby = null), |
|
(this.g_bbz = null), |
|
(this.g_bbA = !!e); |
|
} |
|
g_ek() { |
|
this.g_bbb.g_bah(this), (this.g_bby = null), (this.g_bbz = null), super.g_ek(); |
|
} |
|
async g_bbB() { |
|
if (this.g_bby) return this.g_bby; |
|
const e = this.g_bbb.g_aYz(); |
|
if ('cordova' === e.g_asZ() && e.g_f_(this.g_CE)) this.g_bby = await e.g_BT(this.g_CE); |
|
else { |
|
const e = await fetch(this.g_CE); |
|
if (!e.ok) throw new Error(`error fetching audio data: ${e.status} ${e.statusText}`); |
|
this.g_bby = await e.arrayBuffer(); |
|
} |
|
} |
|
async g_bbC() { |
|
return this.g_bbz |
|
? this.g_bbz |
|
: void ((this.g_bbz = await this.g_bbb.g_bag(this.g_bby, this.g_bbA)), (this.g_bby = null)); |
|
} |
|
async g_Hw() { |
|
try { |
|
(this.g_bbf = 'loading'), await this.g_bbB(), await this.g_bbC(), (this.g_bbf = 'loaded'); |
|
} catch (e) { |
|
(this.g_bbf = 'failed'), |
|
console.error(`[Construct 3] Failed to load audio '${this.g_CE}': `, e); |
|
} |
|
} |
|
g_CK() { |
|
return !!(this.g_bby || this.g_bbz); |
|
} |
|
g_bbk() { |
|
return !!this.g_bbz; |
|
} |
|
g_baL() { |
|
return this.g_bbz; |
|
} |
|
g_aio() { |
|
return this.g_bbz ? this.g_bbz.duration : 0; |
|
} |
|
}), |
|
'use strict'; |
|
{ |
|
function _(g) { |
|
return g * e; |
|
} |
|
const e = 180 / Math.PI; |
|
let g = 0; |
|
self.g_bbD = class { |
|
constructor(_, a, t) { |
|
(this.g_bbb = _), |
|
(this.g_xD = a), |
|
(this.g_bbE = t), |
|
(this.g_bbF = g++), |
|
(this.g_bbG = this.g_azD().createGain()), |
|
this.g_bbG.connect(this.g_azF()), |
|
(this.g_bbH = null), |
|
(this.g_bbI = !1), |
|
(this.g_UO = !0), |
|
(this.g_aRp = !1), |
|
(this.g_bbJ = !1), |
|
(this.g_aad = !1), |
|
(this.g_bbK = 1), |
|
(this.g_bbL = !1), |
|
(this.g_Lz = 1); |
|
const n = this.g_bbb.g_a$Z(); |
|
(this.g_bbM = (1 === n && !this.g_bak()) || 2 === n), |
|
(this.g_bbN = -1), |
|
(this.g_bbO = -1), |
|
(this.g_bbP = !1); |
|
} |
|
g_ek() { |
|
(this.g_bbb = null), |
|
(this.g_xD = null), |
|
this.g_bbH && (this.g_bbH.disconnect(), (this.g_bbH = null)), |
|
this.g_bbG.disconnect(), |
|
(this.g_bbG = null); |
|
} |
|
g_azD() { |
|
return this.g_bbb.g_azD(); |
|
} |
|
g_azF() { |
|
return this.g_bbb.g_a$Q(this.g_bbE); |
|
} |
|
g_a$Y() { |
|
return this.g_bbb.g_a$Y(); |
|
} |
|
g_aRq() { |
|
return this.g_bbM ? this.g_bbb.g_Gk() : performance.now() / 1e3; |
|
} |
|
g_bbn() { |
|
return this.g_xD.g_bbn(); |
|
} |
|
g_ban() { |
|
return this.g_xD.g_ban(); |
|
} |
|
g_bbo() { |
|
return this.g_xD.g_bbo(); |
|
} |
|
g_bai() { |
|
return this.g_xD; |
|
} |
|
g_bak() { |
|
return this.g_xD.g_bak(); |
|
} |
|
g_bar(e) { |
|
this.g_bbE = e; |
|
} |
|
g_bal() { |
|
return this.g_bbE; |
|
} |
|
g_bbQ() { |
|
return this.g_bbF; |
|
} |
|
g_bam() {} |
|
g_baq() {} |
|
g_Mm() { |
|
return !this.g_UO && !this.g_aRp && !this.g_bam(); |
|
} |
|
g_Yd() { |
|
return !this.g_UO && !this.g_bam(); |
|
} |
|
g_bbR() {} |
|
g_aio(e) { |
|
let g = this.g_xD.g_aio(); |
|
return e && (g /= this.g_Lz || 0.001), g; |
|
} |
|
g_MW() {} |
|
g_Kg() {} |
|
g_baD() {} |
|
g_aRr() { |
|
return this.g_aRp; |
|
} |
|
g_MV() {} |
|
g_aAJ(e) { |
|
(this.g_bbK = e), |
|
this.g_bbG.gain.cancelScheduledValues(0), |
|
(this.g_bbO = -1), |
|
(this.g_bbG.gain.value = this.g_bbS()); |
|
} |
|
g_aAK(g, _, t) { |
|
if (!this.g_bbT()) { |
|
g *= this.g_a$Y(); |
|
const a = this.g_bbG.gain; |
|
a.cancelScheduledValues(0); |
|
const n = this.g_bbb.g_a$O(), |
|
e = n + _; |
|
a.setValueAtTime(a.value, n), |
|
a.linearRampToValueAtTime(g, e), |
|
(this.g_bbK = g), |
|
(this.g_bbO = e), |
|
(this.g_bbP = t); |
|
} |
|
} |
|
g_baE() { |
|
this.g_aAJ(this.g_bbK); |
|
} |
|
g_KZ(e) { |
|
-1 !== this.g_bbO && |
|
e >= this.g_bbO && |
|
((this.g_bbO = -1), |
|
this.g_bbP && this.g_Kg(), |
|
this.g_bbb.g_baz('fade-ended', this.g_bbE, this.g_bbF)); |
|
} |
|
g_bbS() { |
|
const e = this.g_bbK * this.g_a$Y(); |
|
return isFinite(e) ? e : 0; |
|
} |
|
g_aAI(e) { |
|
(e = !!e), this.g_bbL === e || ((this.g_bbL = e), this.g_baF()); |
|
} |
|
g_bbT() { |
|
return this.g_bbL; |
|
} |
|
g_aAz() { |
|
return this.g_bbb.g_aAz(); |
|
} |
|
g_baF() {} |
|
g_aAH() {} |
|
g_ZM() { |
|
return this.g_aad; |
|
} |
|
g_Mj(e) { |
|
this.g_Lz === e || ((this.g_Lz = e), this.g_baG()); |
|
} |
|
g_baG() {} |
|
g_Mk() { |
|
return this.g_Lz; |
|
} |
|
g_aAP() {} |
|
g_asi() {} |
|
g_baA(e) { |
|
(e = !!e), |
|
this.g_bbI === e || |
|
((this.g_bbI = e), |
|
this.g_bbI |
|
? (!this.g_bbH && |
|
((this.g_bbH = this.g_azD().createPanner()), |
|
(this.g_bbH.panningModel = this.g_bbb.g_bab()), |
|
(this.g_bbH.distanceModel = this.g_bbb.g_bac()), |
|
(this.g_bbH.refDistance = this.g_bbb.g_bad()), |
|
(this.g_bbH.maxDistance = this.g_bbb.g_bae()), |
|
(this.g_bbH.rolloffFactor = this.g_bbb.g_baf())), |
|
this.g_bbG.disconnect(), |
|
this.g_bbG.connect(this.g_bbH), |
|
this.g_bbH.connect(this.g_azF())) |
|
: (this.g_bbH.disconnect(), this.g_bbG.disconnect(), this.g_bbG.connect(this.g_azF()))); |
|
} |
|
g_baB(a, t, n, b, e, i) { |
|
this.g_bbI && |
|
(this.g_baH(a, t, n), |
|
(this.g_bbH.coneInnerAngle = _(b)), |
|
(this.g_bbH.coneOuterAngle = _(e)), |
|
(this.g_bbH.coneOuterGain = i)); |
|
} |
|
g_baH(e, g, a) { |
|
this.g_bbI && |
|
(this.g_bbH.setPosition(e, g, 0), this.g_bbH.setOrientation(Math.cos(a), Math.sin(a), 0)); |
|
} |
|
g_baC(e) { |
|
this.g_bbN = e; |
|
} |
|
g_Ei() { |
|
return this.g_bbN; |
|
} |
|
g_bbU() {} |
|
g_a$X(e) { |
|
const g = this.g_bbH || this.g_bbG; |
|
g.disconnect(), g.connect(e); |
|
} |
|
g_bax() { |
|
return { |
|
aiid: this.g_bbQ(), |
|
tag: this.g_bbE, |
|
duration: this.g_aio(), |
|
volume: this.g_bbK, |
|
isPlaying: this.g_Mm(), |
|
playbackTime: this.g_bbR(), |
|
playbackRate: this.g_Mk(), |
|
uid: this.g_bbN, |
|
bufferOriginalUrl: this.g_bbn(), |
|
bufferUrl: '', |
|
bufferType: this.g_bbo(), |
|
isMusic: this.g_bak(), |
|
isLooping: this.g_ZM(), |
|
isMuted: this.g_bbT(), |
|
resumePosition: this.g_bbU(), |
|
pan: this.g_bbV() |
|
}; |
|
} |
|
g_bba(e) { |
|
this.g_Mj(e.playbackRate), this.g_aAI(e.isMuted); |
|
} |
|
g_bbV() { |
|
if (!this.g_bbH) return null; |
|
const e = this.g_bbH; |
|
return { |
|
pos: [e.positionX.value, e.positionY.value, e.positionZ.value], |
|
orient: [e.orientationX.value, e.orientationY.value, e.orientationZ.value], |
|
cia: e.coneInnerAngle, |
|
coa: e.coneOuterAngle, |
|
cog: e.coneOuterGain, |
|
uid: this.g_bbN |
|
}; |
|
} |
|
g_ba$(e) { |
|
if (!e) return void this.g_baA(!1); |
|
this.g_baA(!0); |
|
const g = this.g_bbH; |
|
g.setPosition(...g.pos), |
|
g.setOrientation(...g.orient), |
|
(g.coneInnerAngle = g.cia), |
|
(g.coneOuterAngle = g.coa), |
|
(g.coneOuterGain = g.cog), |
|
(this.g_bbN = g.uid); |
|
} |
|
}; |
|
} |
|
'use strict', |
|
(self.g_bbi = class extends g_bbD { |
|
constructor(e, g, a) { |
|
super(e, g, a), |
|
this.g_xD.g_bbx().connect(this.g_bbG), |
|
(this.g_xD.onended = () => this.g_bbW()); |
|
} |
|
g_ek() { |
|
this.g_Kg(), this.g_xD.g_bbx().disconnect(), super.g_ek(); |
|
} |
|
g_bbw() { |
|
return this.g_xD.g_bbw(); |
|
} |
|
g_bbW() { |
|
(this.g_UO = !0), (this.g_bbN = -1), this.g_bbb.g_baz('ended', this.g_bbE, this.g_bbF); |
|
} |
|
g_bam() { |
|
return this.g_bbw().ended; |
|
} |
|
g_baq() { |
|
return !!this.g_UO || this.g_bam(); |
|
} |
|
g_bbR(e) { |
|
let g = this.g_bbw().currentTime; |
|
return e && (g *= this.g_Lz), this.g_aad || (g = Math.min(g, this.g_aio())), g; |
|
} |
|
g_MW(e, g, _) { |
|
const a = this.g_bbw(); |
|
if ( |
|
(1 !== a.playbackRate && (a.playbackRate = 1), |
|
a.loop !== e && (a.loop = e), |
|
this.g_aAJ(g), |
|
a.muted && (a.muted = !1), |
|
a.currentTime !== _) |
|
) |
|
try { |
|
a.currentTime = _; |
|
} catch (e) { |
|
console.warn( |
|
`[Construct 3] Exception seeking audio '${this.g_xD.g_ban()}' to position '${_}': `, |
|
e |
|
); |
|
} |
|
this.g_bbb.g_aZS(a), (this.g_UO = !1), (this.g_aRp = !1), (this.g_aad = e), (this.g_Lz = 1); |
|
} |
|
g_Kg() { |
|
const e = this.g_bbw(); |
|
e.paused || e.pause(), |
|
this.g_bbb.g_aZT(e), |
|
(this.g_UO = !0), |
|
(this.g_aRp = !1), |
|
(this.g_bbN = -1); |
|
} |
|
g_baD() { |
|
if (!(this.g_aRp || this.g_UO || this.g_bam())) { |
|
const e = this.g_bbw(); |
|
e.paused || e.pause(), this.g_bbb.g_aZT(e), (this.g_aRp = !0); |
|
} |
|
} |
|
g_MV() { |
|
!this.g_aRp || |
|
this.g_UO || |
|
this.g_bam() || |
|
(this.g_bbb.g_aZS(this.g_bbw()), (this.g_aRp = !1)); |
|
} |
|
g_baF() { |
|
this.g_bbw().muted = this.g_bbL || this.g_aAz(); |
|
} |
|
g_aAH(e) { |
|
(e = !!e), this.g_aad === e || ((this.g_aad = e), (this.g_bbw().loop = e)); |
|
} |
|
g_baG() { |
|
let e = this.g_Lz; |
|
this.g_bbM && (e *= this.g_bbb.g_KX()); |
|
try { |
|
this.g_bbw().playbackRate = e; |
|
} catch (g) { |
|
console.warn(`[Construct 3] Unable to set playback rate '${e}':`, g); |
|
} |
|
} |
|
g_aAP(e) { |
|
if (!(this.g_UO || this.g_bam())) |
|
try { |
|
this.g_bbw().currentTime = e; |
|
} catch (g) { |
|
console.warn(`[Construct 3] Error seeking audio to '${e}': `, g); |
|
} |
|
} |
|
g_bbU() { |
|
return this.g_bbR(); |
|
} |
|
g_asi(e) { |
|
e |
|
? this.g_Mm() |
|
? (this.g_bbw().pause(), (this.g_bbJ = !0)) |
|
: (this.g_bbJ = !1) |
|
: this.g_bbJ && (this.g_bbb.g_aZS(this.g_bbw()), (this.g_bbJ = !1)); |
|
} |
|
}), |
|
'use strict', |
|
(self.g_bbj = class extends g_bbD { |
|
constructor(e, g, a) { |
|
super(e, g, a), |
|
(this.g_bbX = null), |
|
(this.g_bbY = (e) => this.g_bbW(e)), |
|
(this.g_bbZ = !0), |
|
(this.g_bb_ = null), |
|
(this.g_aqI = 0), |
|
(this.g_bb$ = 0), |
|
(this.g_bca = 1); |
|
} |
|
g_ek() { |
|
this.g_Kg(), this.g_bcb(), (this.g_bbY = null), super.g_ek(); |
|
} |
|
g_bcb() { |
|
this.g_bbX && this.g_bbX.disconnect(), (this.g_bbX = null), (this.g_bb_ = null); |
|
} |
|
g_bbW(e) { |
|
this.g_aRp || |
|
this.g_bbJ || |
|
e.target !== this.g_bb_ || |
|
((this.g_bbZ = !0), |
|
(this.g_UO = !0), |
|
(this.g_bbN = -1), |
|
this.g_bcb(), |
|
this.g_bbb.g_baz('ended', this.g_bbE, this.g_bbF)); |
|
} |
|
g_bam() { |
|
return !(!this.g_UO && this.g_bbX && this.g_bbX.loop) && !this.g_aRp && this.g_bbZ; |
|
} |
|
g_baq() { |
|
return !this.g_bbX || this.g_UO || this.g_bam(); |
|
} |
|
g_bbR(e) { |
|
let g = 0; |
|
return ( |
|
(g = this.g_aRp ? this.g_bb$ : this.g_aRq() - this.g_aqI), |
|
e && (g *= this.g_Lz), |
|
this.g_aad || (g = Math.min(g, this.g_aio())), |
|
g |
|
); |
|
} |
|
g_MW(e, g, a, _) { |
|
(this.g_bca = 1), |
|
this.g_aAJ(g), |
|
this.g_bcb(), |
|
(this.g_bbX = this.g_azD().createBufferSource()), |
|
(this.g_bbX.buffer = this.g_xD.g_baL()), |
|
this.g_bbX.connect(this.g_bbG), |
|
(this.g_bb_ = this.g_bbX), |
|
(this.g_bbX.onended = this.g_bbY), |
|
(this.g_bbX.loop = e), |
|
this.g_bbX.start(_, a), |
|
(this.g_bbZ = !1), |
|
(this.g_UO = !1), |
|
(this.g_aRp = !1), |
|
(this.g_aad = e), |
|
(this.g_Lz = 1), |
|
(this.g_aqI = this.g_aRq() - a); |
|
} |
|
g_Kg() { |
|
this.g_bbX && this.g_bbX.stop(0), (this.g_UO = !0), (this.g_aRp = !1), (this.g_bbN = -1); |
|
} |
|
g_baD() { |
|
this.g_aRp || |
|
this.g_UO || |
|
this.g_bam() || |
|
((this.g_bb$ = this.g_bbR(!0)), |
|
this.g_aad && (this.g_bb$ %= this.g_aio()), |
|
(this.g_aRp = !0), |
|
this.g_bbX.stop(0)); |
|
} |
|
g_MV() { |
|
!this.g_aRp || |
|
this.g_UO || |
|
this.g_bam() || |
|
(this.g_bcb(), |
|
(this.g_bbX = this.g_azD().createBufferSource()), |
|
(this.g_bbX.buffer = this.g_xD.g_baL()), |
|
this.g_bbX.connect(this.g_bbG), |
|
(this.g_bb_ = this.g_bbX), |
|
(this.g_bbX.onended = this.g_bbY), |
|
(this.g_bbX.loop = this.g_aad), |
|
this.g_baE(), |
|
this.g_baG(), |
|
(this.g_aqI = this.g_aRq() - this.g_bb$ / (this.g_Lz || 0.001)), |
|
this.g_bbX.start(0, this.g_bb$), |
|
(this.g_aRp = !1)); |
|
} |
|
g_bbS() { |
|
return super.g_bbS() * this.g_bca; |
|
} |
|
g_baF() { |
|
(this.g_bca = this.g_bbL || this.g_aAz() ? 0 : 1), this.g_baE(); |
|
} |
|
g_aAH(e) { |
|
(e = !!e), this.g_aad === e || ((this.g_aad = e), this.g_bbX && (this.g_bbX.loop = e)); |
|
} |
|
g_baG() { |
|
let e = this.g_Lz; |
|
this.g_bbM && (e *= this.g_bbb.g_KX()), this.g_bbX && (this.g_bbX.playbackRate.value = e); |
|
} |
|
g_aAP(e) { |
|
this.g_UO || |
|
this.g_bam() || |
|
(this.g_aRp ? (this.g_bb$ = e) : (this.g_baD(), (this.g_bb$ = e), this.g_MV())); |
|
} |
|
g_bbU() { |
|
return this.g_bb$; |
|
} |
|
g_asi(e) { |
|
e |
|
? this.g_Mm() |
|
? ((this.g_bbJ = !0), |
|
(this.g_bb$ = this.g_bbR(!0)), |
|
this.g_aad && (this.g_bb$ %= this.g_aio()), |
|
this.g_bbX.stop(0)) |
|
: (this.g_bbJ = !1) |
|
: this.g_bbJ && |
|
(this.g_bcb(), |
|
(this.g_bbX = this.g_azD().createBufferSource()), |
|
(this.g_bbX.buffer = this.g_xD.g_baL()), |
|
this.g_bbX.connect(this.g_bbG), |
|
(this.g_bb_ = this.g_bbX), |
|
(this.g_bbX.onended = this.g_bbY), |
|
(this.g_bbX.loop = this.g_aad), |
|
this.g_baE(), |
|
this.g_baG(), |
|
(this.g_aqI = this.g_aRq() - this.g_bb$ / (this.g_Lz || 0.001)), |
|
this.g_bbX.start(0, this.g_bb$), |
|
(this.g_bbJ = !1)); |
|
} |
|
g_bba(e) { |
|
super.g_bba(e), (this.g_bb$ = e.resumePosition); |
|
} |
|
}), |
|
'use strict'; |
|
{ |
|
function g(e) { |
|
return Math.pow(10, e / 20); |
|
} |
|
function _(e) { |
|
return Math.max(Math.min(g(e), 1), 0); |
|
} |
|
function t(e) { |
|
return 20 * (Math.log(e) / 2.302585092994046); |
|
} |
|
function n(e) { |
|
return t(Math.max(Math.min(e, 1), 0)); |
|
} |
|
function i(e, g) { |
|
return 1 - Math.exp(-g * e); |
|
} |
|
class e { |
|
constructor(e) { |
|
(this.g_bbb = e), |
|
(this.g_a_Z = e.g_azD()), |
|
(this.g_Dr = -1), |
|
(this.g_bbE = ''), |
|
(this.g_kL = ''), |
|
(this.g_bcc = null); |
|
} |
|
g_ek() { |
|
this.g_a_Z = null; |
|
} |
|
g_al_(e) { |
|
this.g_Dr = e; |
|
} |
|
g_EM() { |
|
return this.g_Dr; |
|
} |
|
g_a$T(e) { |
|
this.g_bbE = e; |
|
} |
|
g_bal() { |
|
return this.g_bbE; |
|
} |
|
g_bcd() { |
|
return this.g_a_Z.createGain(); |
|
} |
|
g_a$R() {} |
|
g_a$V() {} |
|
g_bce(g, a, _, t) { |
|
if ((g.cancelScheduledValues(0), 0 === t)) return void (g.value = a); |
|
const n = this.g_a_Z.currentTime; |
|
(t += n), |
|
0 === _ |
|
? g.setValueAtTime(a, t) |
|
: 1 === _ |
|
? (g.setValueAtTime(g.value, n), g.linearRampToValueAtTime(a, t)) |
|
: 2 === _ |
|
? (g.setValueAtTime(g.value, n), g.exponentialRampToValueAtTime(a, t)) |
|
: void 0; |
|
} |
|
g_bax() { |
|
return { type: this.g_kL, tag: this.g_bbE, params: this.g_bcc }; |
|
} |
|
} |
|
(self.g_baI = class extends e { |
|
constructor(_, a, t, n, b, e, i) { |
|
super(_), |
|
(this.g_kL = 'filter'), |
|
(this.g_bcc = [a, t, n, b, e, i]), |
|
(this.g_bcf = this.g_bcd()), |
|
(this.g_bcg = this.g_bcd()), |
|
(this.g_bcg.gain.value = i), |
|
(this.g_bch = this.g_bcd()), |
|
(this.g_bch.gain.value = 1 - i), |
|
(this.g_bci = this.g_a_Z.createBiquadFilter()), |
|
(this.g_bci.type = a), |
|
(this.g_bci.frequency.value = t), |
|
(this.g_bci.detune.value = n), |
|
(this.g_bci.Q.value = b), |
|
(this.g_bci.gain.vlaue = e), |
|
this.g_bcf.connect(this.g_bci), |
|
this.g_bcf.connect(this.g_bch), |
|
this.g_bci.connect(this.g_bcg); |
|
} |
|
g_ek() { |
|
this.g_bcf.disconnect(), |
|
this.g_bci.disconnect(), |
|
this.g_bcg.disconnect(), |
|
this.g_bch.disconnect(), |
|
super.g_ek(); |
|
} |
|
g_a$V(e) { |
|
this.g_bcg.disconnect(), |
|
this.g_bcg.connect(e), |
|
this.g_bch.disconnect(), |
|
this.g_bch.connect(e); |
|
} |
|
g_a$R() { |
|
return this.g_bcf; |
|
} |
|
g_baW(e, g, a, _) { |
|
0 === e |
|
? ((g = Math.max(Math.min(g / 100, 1), 0)), |
|
(this.g_bcc[5] = g), |
|
this.g_bce(this.g_bcg.gain, g, a, _), |
|
this.g_bce(this.g_bch.gain, 1 - g, a, _)) |
|
: 1 === e |
|
? ((this.g_bcc[1] = g), this.g_bce(this.g_bci.frequency, g, a, _)) |
|
: 2 === e |
|
? ((this.g_bcc[2] = g), this.g_bce(this.g_bci.detune, g, a, _)) |
|
: 3 === e |
|
? ((this.g_bcc[3] = g), this.g_bce(this.g_bci.Q, g, a, _)) |
|
: 4 === e |
|
? ((this.g_bcc[4] = g), this.g_bce(this.g_bci.gain, g, a, _)) |
|
: void 0; |
|
} |
|
}), |
|
(self.g_baJ = class extends e { |
|
constructor(e, g, a, _) { |
|
super(e), |
|
(this.g_kL = 'delay'), |
|
(this.g_bcc = [g, a, _]), |
|
(this.g_bcf = this.g_bcd()), |
|
(this.g_bcg = this.g_bcd()), |
|
(this.g_bcg.gain.value = _), |
|
(this.g_bch = this.g_bcd()), |
|
(this.g_bch.gain.value = 1 - _), |
|
(this.g_bcj = this.g_bcd()), |
|
(this.g_bck = this.g_a_Z.createDelay(g)), |
|
(this.g_bck.delayTime.value = g), |
|
(this.g_bcl = this.g_bcd()), |
|
(this.g_bcl.gain.value = a), |
|
this.g_bcf.connect(this.g_bcj), |
|
this.g_bcf.connect(this.g_bch), |
|
this.g_bcj.connect(this.g_bcg), |
|
this.g_bcj.connect(this.g_bck), |
|
this.g_bck.connect(this.g_bcl), |
|
this.g_bcl.connect(this.g_bcj); |
|
} |
|
g_ek() { |
|
this.g_bcf.disconnect(), |
|
this.g_bcg.disconnect(), |
|
this.g_bch.disconnect(), |
|
this.g_bcj.disconnect(), |
|
this.g_bck.disconnect(), |
|
this.g_bcl.disconnect(), |
|
super.g_ek(); |
|
} |
|
g_a$V(e) { |
|
this.g_bcg.disconnect(), |
|
this.g_bcg.connect(e), |
|
this.g_bch.disconnect(), |
|
this.g_bch.connect(e); |
|
} |
|
g_a$R() { |
|
return this.g_bcf; |
|
} |
|
g_baW(g, a, t, n) { |
|
0 === g |
|
? ((a = Math.max(Math.min(a / 100, 1), 0)), |
|
(this.g_bcc[2] = a), |
|
this.g_bce(this.g_bcg.gain, a, t, n), |
|
this.g_bce(this.g_bch.gain, 1 - a, t, n)) |
|
: 4 === g |
|
? ((this.g_bcc[1] = _(a)), this.g_bce(this.g_bcl.gain, _(a), t, n)) |
|
: 5 === g |
|
? ((this.g_bcc[0] = a), this.g_bce(this.g_bck.delayTime, a, t, n)) |
|
: void 0; |
|
} |
|
}), |
|
(self.g_baK = class extends e { |
|
constructor(e, g, a, _) { |
|
super(e), |
|
(this.g_kL = 'convolution'), |
|
(this.g_bcc = [a, _]), |
|
(this.g_bcm = ''), |
|
(this.g_bcn = ''), |
|
(this.g_bco = ''), |
|
(this.g_bcf = this.g_bcd()), |
|
(this.g_bcg = this.g_bcd()), |
|
(this.g_bcg.gain.value = _), |
|
(this.g_bch = this.g_bcd()), |
|
(this.g_bch.gain.value = 1 - _), |
|
(this.g_bcp = this.g_a_Z.createConvolver()), |
|
(this.g_bcp.normalize = a), |
|
(this.g_bcp.buffer = g), |
|
this.g_bcf.connect(this.g_bcp), |
|
this.g_bcf.connect(this.g_bch), |
|
this.g_bcp.connect(this.g_bcg); |
|
} |
|
g_ek() { |
|
this.g_bcf.disconnect(), |
|
this.g_bcp.disconnect(), |
|
this.g_bcg.disconnect(), |
|
this.g_bch.disconnect(), |
|
super.g_ek(); |
|
} |
|
g_a$V(e) { |
|
this.g_bcg.disconnect(), |
|
this.g_bcg.connect(e), |
|
this.g_bch.disconnect(), |
|
this.g_bch.connect(e); |
|
} |
|
g_a$R() { |
|
return this.g_bcf; |
|
} |
|
g_baW(e, g, a, _) { |
|
0 === e |
|
? ((g = Math.max(Math.min(g / 100, 1), 0)), |
|
(this.g_bcc[1] = g), |
|
this.g_bce(this.g_bcg.gain, g, a, _), |
|
this.g_bce(this.g_bch.gain, 1 - g, a, _)) |
|
: void 0; |
|
} |
|
g_baM(e, g, a) { |
|
(this.g_bcm = e), (this.g_bcn = g), (this.g_bco = a); |
|
} |
|
g_bax() { |
|
const e = super.g_bax(); |
|
return ( |
|
(e.bufferOriginalUrl = this.g_bcm), (e.bufferUrl = ''), (e.bufferType = this.g_bco), e |
|
); |
|
} |
|
}), |
|
(self.g_baN = class extends e { |
|
constructor(g, a, _, t, n, e) { |
|
super(g), |
|
(this.g_kL = 'flanger'), |
|
(this.g_bcc = [a, _, t, n, e]), |
|
(this.g_bcf = this.g_bcd()), |
|
(this.g_bch = this.g_bcd()), |
|
(this.g_bch.gain.value = 1 - e / 2), |
|
(this.g_bcg = this.g_bcd()), |
|
(this.g_bcg.gain.value = e / 2), |
|
(this.g_bcq = this.g_bcd()), |
|
(this.g_bcq.gain.value = n), |
|
(this.g_bck = this.g_a_Z.createDelay(a + _)), |
|
(this.g_bck.delayTime.value = a), |
|
(this.g_bcr = this.g_a_Z.createOscillator()), |
|
(this.g_bcr.frequency.value = t), |
|
(this.g_bcs = this.g_bcd()), |
|
(this.g_bcs.gain.value = _), |
|
this.g_bcf.connect(this.g_bck), |
|
this.g_bcf.connect(this.g_bch), |
|
this.g_bck.connect(this.g_bcg), |
|
this.g_bck.connect(this.g_bcq), |
|
this.g_bcq.connect(this.g_bck), |
|
this.g_bcr.connect(this.g_bcs), |
|
this.g_bcs.connect(this.g_bck.delayTime), |
|
this.g_bcr.start(0); |
|
} |
|
g_ek() { |
|
this.g_bcr.stop(0), |
|
this.g_bcf.disconnect(), |
|
this.g_bck.disconnect(), |
|
this.g_bcr.disconnect(), |
|
this.g_bcs.disconnect(), |
|
this.g_bch.disconnect(), |
|
this.g_bcg.disconnect(), |
|
this.g_bcq.disconnect(), |
|
super.g_ek(); |
|
} |
|
g_a$V(e) { |
|
this.g_bcg.disconnect(), |
|
this.g_bcg.connect(e), |
|
this.g_bch.disconnect(), |
|
this.g_bch.connect(e); |
|
} |
|
g_a$R() { |
|
return this.g_bcf; |
|
} |
|
g_baW(e, g, a, _) { |
|
0 === e |
|
? ((g = Math.max(Math.min(g / 100, 1), 0)), |
|
(this.g_bcc[4] = g), |
|
this.g_bce(this.g_bcg.gain, g / 2, a, _), |
|
this.g_bce(this.g_bch.gain, 1 - g / 2, a, _)) |
|
: 6 === e |
|
? ((this.g_bcc[1] = g / 1e3), this.g_bce(this.g_bcs.gain, g / 1e3, a, _)) |
|
: 7 === e |
|
? ((this.g_bcc[2] = g), this.g_bce(this.g_bcr.frequency, g, a, _)) |
|
: 8 === e |
|
? ((this.g_bcc[3] = g / 100), this.g_bce(this.g_bcq.gain, g / 100, a, _)) |
|
: void 0; |
|
} |
|
}), |
|
(self.g_baO = class extends e { |
|
constructor(_, a, t, n, b, e, i) { |
|
super(_), |
|
(this.g_kL = 'phaser'), |
|
(this.g_bcc = [a, t, n, b, e, i]), |
|
(this.g_bcf = this.g_bcd()), |
|
(this.g_bch = this.g_bcd()), |
|
(this.g_bch.gain.value = 1 - i / 2), |
|
(this.g_bcg = this.g_bcd()), |
|
(this.g_bcg.gain.value = i / 2), |
|
(this.g_bci = this.g_a_Z.createBiquadFilter()), |
|
(this.g_bci.type = 'allpass'), |
|
(this.g_bci.frequency.value = a), |
|
(this.g_bci.detune.value = t), |
|
(this.g_bci.Q.value = n), |
|
(this.g_bcr = this.g_a_Z.createOscillator()), |
|
(this.g_bcr.frequency.value = e), |
|
(this.g_bcs = this.g_bcd()), |
|
(this.g_bcs.gain.value = b), |
|
this.g_bcf.connect(this.g_bci), |
|
this.g_bcf.connect(this.g_bch), |
|
this.g_bci.connect(this.g_bcg), |
|
this.g_bcr.connect(this.g_bcs), |
|
this.g_bcs.connect(this.g_bci.frequency), |
|
this.g_bcr.start(0); |
|
} |
|
g_ek() { |
|
this.g_bcr.stop(0), |
|
this.g_bcf.disconnect(), |
|
this.g_bci.disconnect(), |
|
this.g_bcr.disconnect(), |
|
this.g_bcs.disconnect(), |
|
this.g_bch.disconnect(), |
|
this.g_bcg.disconnect(), |
|
super.g_ek(); |
|
} |
|
g_a$V(e) { |
|
this.g_bcg.disconnect(), |
|
this.g_bcg.connect(e), |
|
this.g_bch.disconnect(), |
|
this.g_bch.connect(e); |
|
} |
|
g_a$R() { |
|
return this.g_bcf; |
|
} |
|
g_baW(e, g, a, _) { |
|
0 === e |
|
? ((g = Math.max(Math.min(g / 100, 1), 0)), |
|
(this.g_bcc[5] = g), |
|
this.g_bce(this.g_bcg.gain, g / 2, a, _), |
|
this.g_bce(this.g_bch.gain, 1 - g / 2, a, _)) |
|
: 1 === e |
|
? ((this.g_bcc[0] = g), this.g_bce(this.g_bci.frequency, g, a, _)) |
|
: 2 === e |
|
? ((this.g_bcc[1] = g), this.g_bce(this.g_bci.detune, g, a, _)) |
|
: 3 === e |
|
? ((this.g_bcc[2] = g), this.g_bce(this.g_bci.Q, g, a, _)) |
|
: 6 === e |
|
? ((this.g_bcc[3] = g), this.g_bce(this.g_bcs.gain, g, a, _)) |
|
: 7 === e |
|
? ((this.g_bcc[4] = g), this.g_bce(this.g_bcr.frequency, g, a, _)) |
|
: void 0; |
|
} |
|
}), |
|
(self.g_baP = class extends e { |
|
constructor(e, g) { |
|
super(e), |
|
(this.g_kL = 'gain'), |
|
(this.g_bcc = [g]), |
|
(this.g_bct = this.g_bcd()), |
|
(this.g_bct.gain.value = g); |
|
} |
|
g_ek() { |
|
this.g_bct.disconnect(), super.g_ek(); |
|
} |
|
g_a$V(e) { |
|
this.g_bct.disconnect(), this.g_bct.connect(e); |
|
} |
|
g_a$R() { |
|
return this.g_bct; |
|
} |
|
g_baW(g, a, t, n) { |
|
4 === g ? ((this.g_bcc[0] = _(a)), this.g_bce(this.g_bct.gain, _(a), t, n)) : void 0; |
|
} |
|
}), |
|
(self.g_baQ = class extends e { |
|
constructor(e, g, a) { |
|
super(e), |
|
(this.g_kL = 'tremolo'), |
|
(this.g_bcc = [g, a]), |
|
(this.g_bct = this.g_bcd()), |
|
(this.g_bct.gain.value = 1 - a / 2), |
|
(this.g_bcr = this.g_a_Z.createOscillator()), |
|
(this.g_bcr.frequency.value = g), |
|
(this.g_bcs = this.g_bcd()), |
|
(this.g_bcs.gain.value = a / 2), |
|
this.g_bcr.connect(this.g_bcs), |
|
this.g_bcs.connect(this.g_bct.gain), |
|
this.g_bcr.start(0); |
|
} |
|
g_ek() { |
|
this.g_bcr.stop(0), |
|
this.g_bcr.disconnect(), |
|
this.g_bcs.disconnect(), |
|
this.g_bct.disconnect(), |
|
super.g_ek(); |
|
} |
|
g_a$V(e) { |
|
this.g_bct.disconnect(), this.g_bct.connect(e); |
|
} |
|
g_a$R() { |
|
return this.g_bct; |
|
} |
|
g_baW(e, g, a, _) { |
|
0 === e |
|
? ((g = Math.max(Math.min(g / 100, 1), 0)), |
|
(this.g_bcc[1] = g), |
|
this.g_bce(this.g_bct.gain.value, 1 - g / 2, a, _), |
|
this.g_bce(this.g_bcs.gain.value, g / 2, a, _)) |
|
: 7 === e |
|
? ((this.g_bcc[0] = g), this.g_bce(this.g_bcr.frequency, g, a, _)) |
|
: void 0; |
|
} |
|
}), |
|
(self.g_baR = class extends e { |
|
constructor(e, g, a) { |
|
super(e), |
|
(this.g_kL = 'ringmod'), |
|
(this.g_bcc = [g, a]), |
|
(this.g_bcf = this.g_bcd()), |
|
(this.g_bcg = this.g_bcd()), |
|
(this.g_bcg.gain.value = a), |
|
(this.g_bch = this.g_bcd()), |
|
(this.g_bch.gain.value = 1 - a), |
|
(this.g_bcu = this.g_bcd()), |
|
(this.g_bcu.gain.value = 0), |
|
(this.g_bcr = this.g_a_Z.createOscillator()), |
|
(this.g_bcr.frequency.value = g), |
|
this.g_bcr.connect(this.g_bcu.gain), |
|
this.g_bcr.start(0), |
|
this.g_bcf.connect(this.g_bcu), |
|
this.g_bcf.connect(this.g_bch), |
|
this.g_bcu.connect(this.g_bcg); |
|
} |
|
g_ek() { |
|
this.g_bcr.stop(0), |
|
this.g_bcr.disconnect(), |
|
this.g_bcu.disconnect(), |
|
this.g_bcf.disconnect(), |
|
this.g_bcg.disconnect(), |
|
this.g_bch.disconnect(), |
|
super.g_ek(); |
|
} |
|
g_a$V(e) { |
|
this.g_bcg.disconnect(), |
|
this.g_bcg.connect(e), |
|
this.g_bch.disconnect(), |
|
this.g_bch.connect(e); |
|
} |
|
g_a$R() { |
|
return this.g_bcf; |
|
} |
|
g_baW(e, g, a, _) { |
|
0 === e |
|
? ((g = Math.max(Math.min(g / 100, 1), 0)), |
|
(this.g_bcc[1] = g), |
|
this.g_bce(this.g_bcg.gain, g, a, _), |
|
this.g_bce(this.g_bch.gain, 1 - g, a, _)) |
|
: 7 === e |
|
? ((this.g_bcc[0] = g), this.g_bce(this.g_bcr.frequency, g, a, _)) |
|
: void 0; |
|
} |
|
}), |
|
(self.g_baS = class extends e { |
|
constructor(g, a, _, t, n, e) { |
|
super(g), |
|
(this.g_kL = 'distortion'), |
|
(this.g_bcc = [a, _, t, n, e]), |
|
(this.g_bcf = this.g_bcd()), |
|
(this.g_bcv = this.g_bcd()), |
|
(this.g_bcw = this.g_bcd()), |
|
this.g_bcx(t, n), |
|
(this.g_bcg = this.g_bcd()), |
|
(this.g_bcg.gain.value = e), |
|
(this.g_bch = this.g_bcd()), |
|
(this.g_bch.gain.value = 1 - e), |
|
(this.g_bcy = this.g_a_Z.createWaveShaper()), |
|
(this.g_bcz = new Float32Array(65536)), |
|
this.g_bcA(a, _), |
|
(this.g_bcy.curve = this.g_bcz), |
|
this.g_bcf.connect(this.g_bcv), |
|
this.g_bcf.connect(this.g_bch), |
|
this.g_bcv.connect(this.g_bcy), |
|
this.g_bcy.connect(this.g_bcw), |
|
this.g_bcw.connect(this.g_bcg); |
|
} |
|
g_ek() { |
|
this.g_bcf.disconnect(), |
|
this.g_bcv.disconnect(), |
|
this.g_bcy.disconnect(), |
|
this.g_bcw.disconnect(), |
|
this.g_bcg.disconnect(), |
|
this.g_bch.disconnect(), |
|
super.g_ek(); |
|
} |
|
g_bcx(e, g) { |
|
0.01 > e && (e = 0.01), |
|
(this.g_bcv.gain.value = e), |
|
(this.g_bcw.gain.value = Math.pow(1 / e, 0.6) * g); |
|
} |
|
g_bcA(e, g) { |
|
for (let a, _ = 0; 32768 > _; ++_) |
|
(a = _ / 32768), |
|
(a = this.g_bcB(a, e, g)), |
|
(this.g_bcz[32768 + _] = a), |
|
(this.g_bcz[32768 - _ - 1] = -a); |
|
} |
|
g_bcB(e, a, _) { |
|
const t = 1.05 * _ * a - a, |
|
n = 0 > e ? -1 : 1, |
|
b = 0 > e ? -e : e; |
|
let g = b < a ? b : a + t * i(b - a, 1 / t); |
|
return (g *= n), g; |
|
} |
|
g_a$V(e) { |
|
this.g_bcg.disconnect(), |
|
this.g_bcg.connect(e), |
|
this.g_bch.disconnect(), |
|
this.g_bch.connect(e); |
|
} |
|
g_a$R() { |
|
return this.g_bcf; |
|
} |
|
g_baW(e, g, a, _) { |
|
0 === e |
|
? ((g = Math.max(Math.min(g / 100, 1), 0)), |
|
(this.g_bcc[4] = g), |
|
this.g_bce(this.g_bcg.gain, g, a, _), |
|
this.g_bce(this.g_bch.gain, 1 - g, a, _)) |
|
: void 0; |
|
} |
|
}), |
|
(self.g_baT = class extends e { |
|
constructor(g, a, _, t, n, e) { |
|
super(g), |
|
(this.g_kL = 'compressor'), |
|
(this.g_bcc = [a, _, t, n, e]), |
|
(this.g_bct = this.g_a_Z.createDynamicsCompressor()), |
|
(this.g_bct.threshold.value = a), |
|
(this.g_bct.knee.value = _), |
|
(this.g_bct.ratio.value = t), |
|
(this.g_bct.attack.value = n), |
|
(this.g_bct.release.value = e); |
|
} |
|
g_ek() { |
|
this.g_bct.disconnect(), super.g_ek(); |
|
} |
|
g_a$V(e) { |
|
this.g_bct.disconnect(), this.g_bct.connect(e); |
|
} |
|
g_a$R() { |
|
return this.g_bct; |
|
} |
|
g_baW() {} |
|
}), |
|
(self.g_baU = class extends e { |
|
constructor(e, g, a) { |
|
super(e), |
|
(this.g_kL = 'analyser'), |
|
(this.g_bcc = [g, a]), |
|
(this.g_bct = this.g_a_Z.createAnalyser()), |
|
(this.g_bct.fftSize = g), |
|
(this.g_bct.smoothingTimeConstant = a), |
|
(this.g_bcC = new Float32Array(this.g_bct.frequencyBinCount)), |
|
(this.g_bcD = new Uint8Array(g)), |
|
(this.g_bcE = 0), |
|
(this.g_bcF = 0), |
|
this.g_bbb.g_baX(this); |
|
} |
|
g_ek() { |
|
this.g_bbb.g_baY(this), this.g_bct.disconnect(), super.g_ek(); |
|
} |
|
g_KZ() { |
|
this.g_bct.getFloatFrequencyData(this.g_bcC), this.g_bct.getByteTimeDomainData(this.g_bcD); |
|
const e = this.g_bct.fftSize; |
|
this.g_bcE = 0; |
|
let g = 0; |
|
for (let a, _ = 0; _ < e; ++_) |
|
(a = (this.g_bcD[_] - 128) / 128), |
|
0 > a && (a = -a), |
|
this.g_bcE < a && (this.g_bcE = a), |
|
(g += a * a); |
|
(this.g_bcE = n(this.g_bcE)), (this.g_bcF = n(Math.sqrt(g / e))); |
|
} |
|
g_a$V(e) { |
|
this.g_bct.disconnect(), this.g_bct.connect(e); |
|
} |
|
g_a$R() { |
|
return this.g_bct; |
|
} |
|
g_baW() {} |
|
g_bay() { |
|
return { |
|
tag: this.g_bal(), |
|
index: this.g_EM(), |
|
peak: this.g_bcE, |
|
rms: this.g_bcF, |
|
binCount: this.g_bct.frequencyBinCount, |
|
freqBins: this.g_bcC |
|
}; |
|
} |
|
}); |
|
} |
|
{ |
|
const e = class extends g_aYk { |
|
constructor(e) { |
|
super(e, 'mouse'), this.g_aYw('cursor', (e) => this.g_bcG(e)); |
|
} |
|
g_bcG(e) { |
|
document.documentElement.style.cursor = e; |
|
} |
|
}; |
|
g_aYV.g_aZQ(e); |
|
} |
|
{ |
|
const e = class extends g_aYk { |
|
constructor(e) { |
|
super(e, 'touch'), this.g_aYw('request-permission', (e) => this.g_bcH(e)); |
|
} |
|
async g_bcH(e) { |
|
const g = e.type; |
|
let a = !0; |
|
0 === g ? (a = await this.g_bcI()) : 1 === g && (a = await this.g_bcJ()), |
|
this.g_aYp('permission-result', { type: g, result: a }); |
|
} |
|
async g_bcI() { |
|
if (!self.DeviceOrientationEvent || !self.DeviceOrientationEvent.requestPermission) return !0; |
|
try { |
|
const e = await self.DeviceOrientationEvent.requestPermission(); |
|
return 'granted' === e; |
|
} catch (e) { |
|
return console.warn('[Touch] Failed to request orientation permission: ', e), !1; |
|
} |
|
} |
|
async g_bcJ() { |
|
if (!self.DeviceMotionEvent || !self.DeviceMotionEvent.requestPermission) return !0; |
|
try { |
|
const e = await self.DeviceMotionEvent.requestPermission(); |
|
return 'granted' === e; |
|
} catch (e) { |
|
return console.warn('[Touch] Failed to request motion permission: ', e), !1; |
|
} |
|
} |
|
}; |
|
g_aYV.g_aZQ(e); |
|
} |
|
{ |
|
const e = class extends g_aYk { |
|
constructor(e) { |
|
super(e, 'browser'), |
|
(this.g_aps = ''), |
|
this.g_aYw('get-initial-state', (e) => this.g_bcK(e)), |
|
this.g_aYw('ready-for-sw-messages', () => this.g_bcL()), |
|
this.g_aYw('alert', (e) => this.g_a_C(e)), |
|
this.g_aYw('close', () => this.g_bcM()), |
|
this.g_aYw('set-focus', (e) => this.g_aYK(e)), |
|
this.g_aYw('vibrate', (e) => this.g_bcN(e)), |
|
this.g_aYw('lock-orientation', (e) => this.g_bcO(e)), |
|
this.g_aYw('unlock-orientation', () => this.g_bcP()), |
|
this.g_aYw('navigate', (e) => this.g_bcQ(e)), |
|
this.g_aYw('request-fullscreen', (e) => this.g_bcR(e)), |
|
this.g_aYw('exit-fullscreen', () => this.g_bcS()), |
|
window.addEventListener('online', () => this.g_aLB(!0)), |
|
window.addEventListener('offline', () => this.g_aLB(!1)), |
|
document.addEventListener('backbutton', () => this.g_bcT()), |
|
'undefined' != typeof Windows && |
|
Windows.UI.Core.SystemNavigationManager.getForCurrentView().addEventListener( |
|
'backrequested', |
|
(e) => this.g_bcU(e) |
|
); |
|
} |
|
g_bcK(e) { |
|
return ( |
|
(this.g_aps = e.exportType), |
|
{ |
|
location: location.toString(), |
|
isOnline: !!navigator.onLine, |
|
referrer: document.referrer, |
|
title: document.title, |
|
isCookieEnabled: !!navigator.cookieEnabled, |
|
screenWidth: screen.width, |
|
screenHeight: screen.height, |
|
windowOuterWidth: window.outerWidth, |
|
windowOuterHeight: window.outerHeight, |
|
isScirraArcade: 'undefined' != typeof window.is_scirra_arcade |
|
} |
|
); |
|
} |
|
g_bcL() { |
|
window.C3_RegisterSW && |
|
window.OfflineClientInfo && |
|
window.OfflineClientInfo.SetMessageCallback((e) => this.g_aYp('sw-message', e.data)); |
|
} |
|
g_aLB(e) { |
|
this.g_aYp('online-state', { isOnline: e }); |
|
} |
|
g_bcT() { |
|
this.g_aYp('backbutton'); |
|
} |
|
g_bcU(e) { |
|
(e.handled = !0), this.g_aYp('backbutton'); |
|
} |
|
g_bcV() { |
|
return 'nwjs' === this.g_aps ? nw.Window.get() : null; |
|
} |
|
g_a_C(e) { |
|
alert(e.message); |
|
} |
|
g_bcM() { |
|
navigator.app && navigator.app.exitApp |
|
? navigator.app.exitApp() |
|
: navigator.device && navigator.device.exitApp |
|
? navigator.device.exitApp() |
|
: window.close(); |
|
} |
|
g_aYK(e) { |
|
const g = e.isFocus; |
|
if ('nwjs' === this.g_aps) { |
|
const e = this.g_bcV(); |
|
g ? e.focus() : e.blur(); |
|
} else g ? window.focus() : window.blur(); |
|
} |
|
g_bcN(e) { |
|
navigator.vibrate && navigator.vibrate(e.pattern); |
|
} |
|
g_bcO(e) { |
|
const g = e.orientation; |
|
if (screen.orientation && screen.orientation.lock) |
|
screen.orientation |
|
.lock(g) |
|
.catch((e) => console.warn('[Construct 3] Failed to lock orientation: ', e)); |
|
else |
|
try { |
|
let e = !1; |
|
screen.lockOrientation |
|
? (e = screen.lockOrientation(g)) |
|
: screen.webkitLockOrientation |
|
? (e = screen.webkitLockOrientation(g)) |
|
: screen.mozLockOrientation |
|
? (e = screen.mozLockOrientation(g)) |
|
: screen.msLockOrientation && (e = screen.msLockOrientation(g)), |
|
e || console.warn('[Construct 3] Failed to lock orientation'); |
|
} catch (e) { |
|
console.warn('[Construct 3] Failed to lock orientation: ', e); |
|
} |
|
} |
|
g_bcP() { |
|
try { |
|
screen.orientation && screen.orientation.unlock |
|
? screen.orientation.unlock() |
|
: screen.unlockOrientation |
|
? screen.unlockOrientation() |
|
: screen.webkitUnlockOrientation |
|
? screen.webkitUnlockOrientation() |
|
: screen.mozUnlockOrientation |
|
? screen.mozUnlockOrientation() |
|
: screen.msUnlockOrientation && screen.msUnlockOrientation(); |
|
} catch (e) {} |
|
} |
|
g_bcQ(e) { |
|
const g = e.type; |
|
if ('back' === g) |
|
navigator.app && navigator.app.backHistory ? navigator.app.backHistory() : window.back(); |
|
else if ('forward' === g) window.forward(); |
|
else if ('home' === g) window.g_bcW(); |
|
else if ('reload' === g) location.reload(); |
|
else if ('url' === g) { |
|
const g = e.url, |
|
a = e.target, |
|
_ = e.exportType; |
|
'windows-uwp' === _ && 'undefined' != typeof Windows |
|
? Windows.System.Launcher.launchUriAsync(new Windows.Foundation.Uri(g)) |
|
: 'cordova' === _ |
|
? window.open(g, '_system') |
|
: 'preview' === _ |
|
? window.open(g, '_blank') |
|
: !this.g_aLA && |
|
(2 === a |
|
? (window.top.location = g) |
|
: 1 === a |
|
? (window.parent.location = g) |
|
: (window.location = g)); |
|
} else if ('new-window' === g) { |
|
const g = e.url, |
|
a = e.tag, |
|
_ = e.exportType; |
|
'windows-uwp' === _ && 'undefined' != typeof Windows |
|
? Windows.System.Launcher.launchUriAsync(new Windows.Foundation.Uri(g)) |
|
: 'cordova' === _ |
|
? window.open(g, '_system') |
|
: window.open(g, a); |
|
} |
|
} |
|
g_bcR(e) { |
|
const g = { navigationUI: 'auto' }, |
|
a = e.navUI; |
|
1 === a ? (g.navigationUI = 'hide') : 2 === a && (g.navigationUI = 'show'); |
|
const _ = document.documentElement; |
|
_.requestFullscreen |
|
? _.requestFullscreen(g) |
|
: _.mozRequestFullScreen |
|
? _.mozRequestFullScreen(g) |
|
: _.msRequestFullscreen |
|
? _.msRequestFullscreen(g) |
|
: _.webkitRequestFullScreen && |
|
('undefined' == typeof Element.ALLOW_KEYBOARD_INPUT |
|
? _.webkitRequestFullScreen() |
|
: _.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)); |
|
} |
|
g_bcS() { |
|
document.exitFullscreen |
|
? document.exitFullscreen() |
|
: document.mozCancelFullScreen |
|
? document.mozCancelFullScreen() |
|
: document.msExitFullscreen |
|
? document.msExitFullscreen() |
|
: document.webkitCancelFullScreen && document.webkitCancelFullScreen(); |
|
} |
|
}; |
|
g_aYV.g_aZQ(e); |
|
} |
|
|