vanta-engine 1.0.3 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../node_modules/wasmoon/dist/index.js","../src/index.ts","../src/graphics/assets/asset_loaders/obj.ts","../src/graphics/assets/texture.ts","../src/graphics/assets/model.ts","../src/graphics/utility.ts","../src/graphics/shader_program.ts","../src/graphics/assets/material.ts","../src/graphics/assets/mesh.ts","../src/node.ts","../src/node/object3d.ts","../src/graphics/assets/vaos.ts","../src/node/skybox.ts","../src/graphics/framebuffer.ts","../src/graphics/graphics_manager.ts","../src/shaders/default_2d.vs.ts","../src/shaders/default_2d.fs.ts","../src/shaders/default_3d.vs.ts","../src/shaders/default_3d.fs.ts","../src/shaders/default_skybox.vs.ts","../src/shaders/default_skybox.fs.ts","../src/shaders/default_directional_shadow.vs.ts","../src/shaders/default_directional_shadow.fs.ts","../src/shaders/default_point_shadow.vs.ts","../src/shaders/default_point_shadow.fs.ts","../src/node/camera3d.ts","../src/node/lights/light.ts","../src/node/lights/point_light.ts","../src/node/lights/directional_light.ts","../src/node/lights/spot_light.ts","../src/node/sprite2d.ts","../src/input/input_manager.ts","../src/utility.ts","../src/hook_manager.ts","../src/scene.ts","../src/engine.ts"],"sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.wasmoon = {}));\n})(this, (function (exports) { 'use strict';\n\n var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;\n exports.LuaReturn = void 0;\n (function (LuaReturn) {\n LuaReturn[LuaReturn[\"Ok\"] = 0] = \"Ok\";\n LuaReturn[LuaReturn[\"Yield\"] = 1] = \"Yield\";\n LuaReturn[LuaReturn[\"ErrorRun\"] = 2] = \"ErrorRun\";\n LuaReturn[LuaReturn[\"ErrorSyntax\"] = 3] = \"ErrorSyntax\";\n LuaReturn[LuaReturn[\"ErrorMem\"] = 4] = \"ErrorMem\";\n LuaReturn[LuaReturn[\"ErrorErr\"] = 5] = \"ErrorErr\";\n LuaReturn[LuaReturn[\"ErrorFile\"] = 6] = \"ErrorFile\";\n })(exports.LuaReturn || (exports.LuaReturn = {}));\n const PointerSize = 4;\n const LUA_MULTRET = -1;\n const LUAI_MAXSTACK = 1000000;\n const LUA_REGISTRYINDEX = -LUAI_MAXSTACK - 1000;\n exports.LuaType = void 0;\n (function (LuaType) {\n LuaType[LuaType[\"None\"] = -1] = \"None\";\n LuaType[LuaType[\"Nil\"] = 0] = \"Nil\";\n LuaType[LuaType[\"Boolean\"] = 1] = \"Boolean\";\n LuaType[LuaType[\"LightUserdata\"] = 2] = \"LightUserdata\";\n LuaType[LuaType[\"Number\"] = 3] = \"Number\";\n LuaType[LuaType[\"String\"] = 4] = \"String\";\n LuaType[LuaType[\"Table\"] = 5] = \"Table\";\n LuaType[LuaType[\"Function\"] = 6] = \"Function\";\n LuaType[LuaType[\"Userdata\"] = 7] = \"Userdata\";\n LuaType[LuaType[\"Thread\"] = 8] = \"Thread\";\n })(exports.LuaType || (exports.LuaType = {}));\n exports.LuaEventCodes = void 0;\n (function (LuaEventCodes) {\n LuaEventCodes[LuaEventCodes[\"Call\"] = 0] = \"Call\";\n LuaEventCodes[LuaEventCodes[\"Ret\"] = 1] = \"Ret\";\n LuaEventCodes[LuaEventCodes[\"Line\"] = 2] = \"Line\";\n LuaEventCodes[LuaEventCodes[\"Count\"] = 3] = \"Count\";\n LuaEventCodes[LuaEventCodes[\"TailCall\"] = 4] = \"TailCall\";\n })(exports.LuaEventCodes || (exports.LuaEventCodes = {}));\n exports.LuaEventMasks = void 0;\n (function (LuaEventMasks) {\n LuaEventMasks[LuaEventMasks[\"Call\"] = 1] = \"Call\";\n LuaEventMasks[LuaEventMasks[\"Ret\"] = 2] = \"Ret\";\n LuaEventMasks[LuaEventMasks[\"Line\"] = 4] = \"Line\";\n LuaEventMasks[LuaEventMasks[\"Count\"] = 8] = \"Count\";\n })(exports.LuaEventMasks || (exports.LuaEventMasks = {}));\n exports.LuaLibraries = void 0;\n (function (LuaLibraries) {\n LuaLibraries[\"Base\"] = \"_G\";\n LuaLibraries[\"Coroutine\"] = \"coroutine\";\n LuaLibraries[\"Table\"] = \"table\";\n LuaLibraries[\"IO\"] = \"io\";\n LuaLibraries[\"OS\"] = \"os\";\n LuaLibraries[\"String\"] = \"string\";\n LuaLibraries[\"UTF8\"] = \"utf8\";\n LuaLibraries[\"Math\"] = \"math\";\n LuaLibraries[\"Debug\"] = \"debug\";\n LuaLibraries[\"Package\"] = \"package\";\n })(exports.LuaLibraries || (exports.LuaLibraries = {}));\n class LuaTimeoutError extends Error {\n }\n\n class Decoration {\n constructor(target, options) {\n this.target = target;\n this.options = options;\n }\n }\n function decorate(target, options) {\n return new Decoration(target, options);\n }\n\n class Pointer extends Number {\n }\n\n class MultiReturn extends Array {\n }\n\n const INSTRUCTION_HOOK_COUNT = 1000;\n class Thread {\n constructor(lua, typeExtensions, address, parent) {\n this.closed = false;\n this.lua = lua;\n this.typeExtensions = typeExtensions;\n this.address = address;\n this.parent = parent;\n }\n newThread() {\n const address = this.lua.lua_newthread(this.address);\n if (!address) {\n throw new Error('lua_newthread returned a null pointer');\n }\n return new Thread(this.lua, this.typeExtensions, address, this.parent || this);\n }\n resetThread() {\n this.assertOk(this.lua.lua_resetthread(this.address));\n }\n loadString(luaCode, name) {\n const size = this.lua.module.lengthBytesUTF8(luaCode);\n const pointerSize = size + 1;\n const bufferPointer = this.lua.module._malloc(pointerSize);\n try {\n this.lua.module.stringToUTF8(luaCode, bufferPointer, pointerSize);\n this.assertOk(this.lua.luaL_loadbufferx(this.address, bufferPointer, size, name !== null && name !== void 0 ? name : bufferPointer, null));\n }\n finally {\n this.lua.module._free(bufferPointer);\n }\n }\n loadFile(filename) {\n this.assertOk(this.lua.luaL_loadfilex(this.address, filename, null));\n }\n resume(argCount = 0) {\n const dataPointer = this.lua.module._malloc(PointerSize);\n try {\n this.lua.module.setValue(dataPointer, 0, 'i32');\n const luaResult = this.lua.lua_resume(this.address, null, argCount, dataPointer);\n return {\n result: luaResult,\n resultCount: this.lua.module.getValue(dataPointer, 'i32'),\n };\n }\n finally {\n this.lua.module._free(dataPointer);\n }\n }\n getTop() {\n return this.lua.lua_gettop(this.address);\n }\n setTop(index) {\n this.lua.lua_settop(this.address, index);\n }\n remove(index) {\n return this.lua.lua_remove(this.address, index);\n }\n setField(index, name, value) {\n index = this.lua.lua_absindex(this.address, index);\n this.pushValue(value);\n this.lua.lua_setfield(this.address, index, name);\n }\n async run(argCount = 0, options) {\n const originalTimeout = this.timeout;\n try {\n if ((options === null || options === void 0 ? void 0 : options.timeout) !== undefined) {\n this.setTimeout(Date.now() + options.timeout);\n }\n let resumeResult = this.resume(argCount);\n while (resumeResult.result === exports.LuaReturn.Yield) {\n if (this.timeout && Date.now() > this.timeout) {\n if (resumeResult.resultCount > 0) {\n this.pop(resumeResult.resultCount);\n }\n throw new LuaTimeoutError(`thread timeout exceeded`);\n }\n if (resumeResult.resultCount > 0) {\n const lastValue = this.getValue(-1);\n this.pop(resumeResult.resultCount);\n if (lastValue === Promise.resolve(lastValue)) {\n await lastValue;\n }\n else {\n await new Promise((resolve) => setImmediate(resolve));\n }\n }\n else {\n await new Promise((resolve) => setImmediate(resolve));\n }\n resumeResult = this.resume(0);\n }\n this.assertOk(resumeResult.result);\n return this.getStackValues();\n }\n finally {\n if ((options === null || options === void 0 ? void 0 : options.timeout) !== undefined) {\n this.setTimeout(originalTimeout);\n }\n }\n }\n runSync(argCount = 0) {\n const base = this.getTop() - argCount - 1;\n this.assertOk(this.lua.lua_pcallk(this.address, argCount, LUA_MULTRET, 0, 0, null));\n return this.getStackValues(base);\n }\n pop(count = 1) {\n this.lua.lua_pop(this.address, count);\n }\n call(name, ...args) {\n const type = this.lua.lua_getglobal(this.address, name);\n if (type !== exports.LuaType.Function) {\n throw new Error(`A function of type '${type}' was pushed, expected is ${exports.LuaType.Function}`);\n }\n for (const arg of args) {\n this.pushValue(arg);\n }\n const base = this.getTop() - args.length - 1;\n this.lua.lua_callk(this.address, args.length, LUA_MULTRET, 0, null);\n return this.getStackValues(base);\n }\n getStackValues(start = 0) {\n const returns = this.getTop() - start;\n const returnValues = new MultiReturn(returns);\n for (let i = 0; i < returns; i++) {\n returnValues[i] = this.getValue(start + i + 1);\n }\n return returnValues;\n }\n stateToThread(L) {\n var _a;\n return L === ((_a = this.parent) === null || _a === void 0 ? void 0 : _a.address) ? this.parent : new Thread(this.lua, this.typeExtensions, L, this.parent || this);\n }\n pushValue(rawValue, userdata) {\n const decoratedValue = this.getValueDecorations(rawValue);\n const target = decoratedValue.target;\n if (target instanceof Thread) {\n const isMain = this.lua.lua_pushthread(target.address) === 1;\n if (!isMain) {\n this.lua.lua_xmove(target.address, this.address, 1);\n }\n return;\n }\n const startTop = this.getTop();\n switch (typeof target) {\n case 'undefined':\n this.lua.lua_pushnil(this.address);\n break;\n case 'number':\n if (Number.isInteger(target)) {\n this.lua.lua_pushinteger(this.address, BigInt(target));\n }\n else {\n this.lua.lua_pushnumber(this.address, target);\n }\n break;\n case 'string':\n this.lua.lua_pushstring(this.address, target);\n break;\n case 'boolean':\n this.lua.lua_pushboolean(this.address, target ? 1 : 0);\n break;\n default:\n if (!this.typeExtensions.find((wrapper) => wrapper.extension.pushValue(this, decoratedValue, userdata))) {\n throw new Error(`The type '${typeof target}' is not supported by Lua`);\n }\n }\n if (decoratedValue.options.metatable) {\n this.setMetatable(-1, decoratedValue.options.metatable);\n }\n if (this.getTop() !== startTop + 1) {\n throw new Error(`pushValue expected stack size ${startTop + 1}, got ${this.getTop()}`);\n }\n }\n setMetatable(index, metatable) {\n index = this.lua.lua_absindex(this.address, index);\n if (this.lua.lua_getmetatable(this.address, index)) {\n this.pop(1);\n const name = this.getMetatableName(index);\n throw new Error(`data already has associated metatable: ${name || 'unknown name'}`);\n }\n this.pushValue(metatable);\n this.lua.lua_setmetatable(this.address, index);\n }\n getMetatableName(index) {\n const metatableNameType = this.lua.luaL_getmetafield(this.address, index, '__name');\n if (metatableNameType === exports.LuaType.Nil) {\n return undefined;\n }\n if (metatableNameType !== exports.LuaType.String) {\n this.pop(1);\n return undefined;\n }\n const name = this.lua.lua_tolstring(this.address, -1, null);\n this.pop(1);\n return name;\n }\n getValue(index, inputType, userdata) {\n index = this.lua.lua_absindex(this.address, index);\n const type = inputType !== null && inputType !== void 0 ? inputType : this.lua.lua_type(this.address, index);\n switch (type) {\n case exports.LuaType.None:\n return undefined;\n case exports.LuaType.Nil:\n return null;\n case exports.LuaType.Number:\n return this.lua.lua_tonumberx(this.address, index, null);\n case exports.LuaType.String:\n return this.lua.lua_tolstring(this.address, index, null);\n case exports.LuaType.Boolean:\n return Boolean(this.lua.lua_toboolean(this.address, index));\n case exports.LuaType.Thread:\n return this.stateToThread(this.lua.lua_tothread(this.address, index));\n default: {\n let metatableName;\n if (type === exports.LuaType.Table || type === exports.LuaType.Userdata) {\n metatableName = this.getMetatableName(index);\n }\n const typeExtensionWrapper = this.typeExtensions.find((wrapper) => wrapper.extension.isType(this, index, type, metatableName));\n if (typeExtensionWrapper) {\n return typeExtensionWrapper.extension.getValue(this, index, userdata);\n }\n console.warn(`The type '${this.lua.lua_typename(this.address, type)}' returned is not supported on JS`);\n return new Pointer(this.lua.lua_topointer(this.address, index));\n }\n }\n }\n close() {\n if (this.isClosed()) {\n return;\n }\n if (this.hookFunctionPointer) {\n this.lua.module.removeFunction(this.hookFunctionPointer);\n }\n this.closed = true;\n }\n setTimeout(timeout) {\n if (timeout && timeout > 0) {\n if (!this.hookFunctionPointer) {\n this.hookFunctionPointer = this.lua.module.addFunction(() => {\n if (Date.now() > timeout) {\n this.pushValue(new LuaTimeoutError(`thread timeout exceeded`));\n this.lua.lua_error(this.address);\n }\n }, 'vii');\n }\n this.lua.lua_sethook(this.address, this.hookFunctionPointer, exports.LuaEventMasks.Count, INSTRUCTION_HOOK_COUNT);\n this.timeout = timeout;\n }\n else if (this.hookFunctionPointer) {\n this.hookFunctionPointer = undefined;\n this.timeout = undefined;\n this.lua.lua_sethook(this.address, null, 0, 0);\n }\n }\n getTimeout() {\n return this.timeout;\n }\n getPointer(index) {\n return new Pointer(this.lua.lua_topointer(this.address, index));\n }\n isClosed() {\n var _a;\n return !this.address || this.closed || Boolean((_a = this.parent) === null || _a === void 0 ? void 0 : _a.isClosed());\n }\n indexToString(index) {\n const str = this.lua.luaL_tolstring(this.address, index, null);\n this.pop();\n return str;\n }\n dumpStack(log = console.log) {\n const top = this.getTop();\n for (let i = 1; i <= top; i++) {\n const type = this.lua.lua_type(this.address, i);\n const typename = this.lua.lua_typename(this.address, type);\n const pointer = this.getPointer(i);\n const name = this.indexToString(i);\n const value = this.getValue(i, type);\n log(i, typename, pointer, name, value);\n }\n }\n assertOk(result) {\n if (result !== exports.LuaReturn.Ok && result !== exports.LuaReturn.Yield) {\n const resultString = exports.LuaReturn[result];\n const error = new Error(`Lua Error(${resultString}/${result})`);\n if (this.getTop() > 0) {\n if (result === exports.LuaReturn.ErrorMem) {\n error.message = this.lua.lua_tolstring(this.address, -1, null);\n }\n else {\n const luaError = this.getValue(-1);\n if (luaError instanceof Error) {\n error.stack = luaError.stack;\n }\n error.message = this.indexToString(-1);\n }\n }\n if (result !== exports.LuaReturn.ErrorMem) {\n try {\n this.lua.luaL_traceback(this.address, this.address, null, 1);\n const traceback = this.lua.lua_tolstring(this.address, -1, null);\n if (traceback.trim() !== 'stack traceback:') {\n error.message = `${error.message}\\n${traceback}`;\n }\n this.pop(1);\n }\n catch (err) {\n console.warn('Failed to generate stack trace', err);\n }\n }\n throw error;\n }\n }\n getValueDecorations(value) {\n return value instanceof Decoration ? value : new Decoration(value, {});\n }\n }\n\n class Global extends Thread {\n constructor(cmodule, shouldTraceAllocations) {\n if (shouldTraceAllocations) {\n const memoryStats = { memoryUsed: 0 };\n const allocatorFunctionPointer = cmodule.module.addFunction((_userData, pointer, oldSize, newSize) => {\n if (newSize === 0) {\n if (pointer) {\n memoryStats.memoryUsed -= oldSize;\n cmodule.module._free(pointer);\n }\n return 0;\n }\n const endMemoryDelta = pointer ? newSize - oldSize : newSize;\n const endMemory = memoryStats.memoryUsed + endMemoryDelta;\n if (newSize > oldSize && memoryStats.memoryMax && endMemory > memoryStats.memoryMax) {\n return 0;\n }\n const reallocated = cmodule.module._realloc(pointer, newSize);\n if (reallocated) {\n memoryStats.memoryUsed = endMemory;\n }\n return reallocated;\n }, 'iiiii');\n const address = cmodule.lua_newstate(allocatorFunctionPointer, null);\n if (!address) {\n cmodule.module.removeFunction(allocatorFunctionPointer);\n throw new Error('lua_newstate returned a null pointer');\n }\n super(cmodule, [], address);\n this.memoryStats = memoryStats;\n this.allocatorFunctionPointer = allocatorFunctionPointer;\n }\n else {\n super(cmodule, [], cmodule.luaL_newstate());\n }\n if (this.isClosed()) {\n throw new Error('Global state could not be created (probably due to lack of memory)');\n }\n }\n close() {\n if (this.isClosed()) {\n return;\n }\n super.close();\n this.lua.lua_close(this.address);\n if (this.allocatorFunctionPointer) {\n this.lua.module.removeFunction(this.allocatorFunctionPointer);\n }\n for (const wrapper of this.typeExtensions) {\n wrapper.extension.close();\n }\n }\n registerTypeExtension(priority, extension) {\n this.typeExtensions.push({ extension, priority });\n this.typeExtensions.sort((a, b) => b.priority - a.priority);\n }\n loadLibrary(library) {\n switch (library) {\n case exports.LuaLibraries.Base:\n this.lua.luaopen_base(this.address);\n break;\n case exports.LuaLibraries.Coroutine:\n this.lua.luaopen_coroutine(this.address);\n break;\n case exports.LuaLibraries.Table:\n this.lua.luaopen_table(this.address);\n break;\n case exports.LuaLibraries.IO:\n this.lua.luaopen_io(this.address);\n break;\n case exports.LuaLibraries.OS:\n this.lua.luaopen_os(this.address);\n break;\n case exports.LuaLibraries.String:\n this.lua.luaopen_string(this.address);\n break;\n case exports.LuaLibraries.UTF8:\n this.lua.luaopen_string(this.address);\n break;\n case exports.LuaLibraries.Math:\n this.lua.luaopen_math(this.address);\n break;\n case exports.LuaLibraries.Debug:\n this.lua.luaopen_debug(this.address);\n break;\n case exports.LuaLibraries.Package:\n this.lua.luaopen_package(this.address);\n break;\n }\n this.lua.lua_setglobal(this.address, library);\n }\n get(name) {\n const type = this.lua.lua_getglobal(this.address, name);\n const value = this.getValue(-1, type);\n this.pop();\n return value;\n }\n set(name, value) {\n this.pushValue(value);\n this.lua.lua_setglobal(this.address, name);\n }\n getTable(name, callback) {\n const startStackTop = this.getTop();\n const type = this.lua.lua_getglobal(this.address, name);\n try {\n if (type !== exports.LuaType.Table) {\n throw new TypeError(`Unexpected type in ${name}. Expected ${exports.LuaType[exports.LuaType.Table]}. Got ${exports.LuaType[type]}.`);\n }\n callback(startStackTop + 1);\n }\n finally {\n if (this.getTop() !== startStackTop + 1) {\n console.warn(`getTable: expected stack size ${startStackTop} got ${this.getTop()}`);\n }\n this.setTop(startStackTop);\n }\n }\n getMemoryUsed() {\n return this.getMemoryStatsRef().memoryUsed;\n }\n getMemoryMax() {\n return this.getMemoryStatsRef().memoryMax;\n }\n setMemoryMax(max) {\n this.getMemoryStatsRef().memoryMax = max;\n }\n getMemoryStatsRef() {\n if (!this.memoryStats) {\n throw new Error('Memory allocations is not being traced, please build engine with { traceAllocations: true }');\n }\n return this.memoryStats;\n }\n }\n\n class LuaTypeExtension {\n constructor(thread, name) {\n this.thread = thread;\n this.name = name;\n }\n isType(_thread, _index, type, name) {\n return type === exports.LuaType.Userdata && name === this.name;\n }\n getValue(thread, index, _userdata) {\n const refUserdata = thread.lua.luaL_testudata(thread.address, index, this.name);\n if (!refUserdata) {\n throw new Error(`data does not have the expected metatable: ${this.name}`);\n }\n const referencePointer = thread.lua.module.getValue(refUserdata, '*');\n return thread.lua.getRef(referencePointer);\n }\n pushValue(thread, decoratedValue, _userdata) {\n const { target } = decoratedValue;\n const pointer = thread.lua.ref(target);\n const userDataPointer = thread.lua.lua_newuserdatauv(thread.address, PointerSize, 0);\n thread.lua.module.setValue(userDataPointer, pointer, '*');\n if (exports.LuaType.Nil === thread.lua.luaL_getmetatable(thread.address, this.name)) {\n thread.pop(2);\n throw new Error(`metatable not found: ${this.name}`);\n }\n thread.lua.lua_setmetatable(thread.address, -2);\n return true;\n }\n }\n\n class ErrorTypeExtension extends LuaTypeExtension {\n constructor(thread, injectObject) {\n super(thread, 'js_error');\n this.gcPointer = thread.lua.module.addFunction((functionStateAddress) => {\n const userDataPointer = thread.lua.luaL_checkudata(functionStateAddress, 1, this.name);\n const referencePointer = thread.lua.module.getValue(userDataPointer, '*');\n thread.lua.unref(referencePointer);\n return exports.LuaReturn.Ok;\n }, 'ii');\n if (thread.lua.luaL_newmetatable(thread.address, this.name)) {\n const metatableIndex = thread.lua.lua_gettop(thread.address);\n thread.lua.lua_pushstring(thread.address, 'protected metatable');\n thread.lua.lua_setfield(thread.address, metatableIndex, '__metatable');\n thread.lua.lua_pushcclosure(thread.address, this.gcPointer, 0);\n thread.lua.lua_setfield(thread.address, metatableIndex, '__gc');\n thread.pushValue((jsRefError, key) => {\n if (key === 'message') {\n return jsRefError.message;\n }\n return null;\n });\n thread.lua.lua_setfield(thread.address, metatableIndex, '__index');\n thread.pushValue((jsRefError) => {\n return jsRefError.message;\n });\n thread.lua.lua_setfield(thread.address, metatableIndex, '__tostring');\n }\n thread.lua.lua_pop(thread.address, 1);\n if (injectObject) {\n thread.set('Error', {\n create: (message) => {\n if (message && typeof message !== 'string') {\n throw new Error('message must be a string');\n }\n return new Error(message);\n },\n });\n }\n }\n pushValue(thread, decoration) {\n if (!(decoration.target instanceof Error)) {\n return false;\n }\n return super.pushValue(thread, decoration);\n }\n close() {\n this.thread.lua.module.removeFunction(this.gcPointer);\n }\n }\n function createTypeExtension$6(thread, injectObject) {\n return new ErrorTypeExtension(thread, injectObject);\n }\n\n class RawResult {\n constructor(count) {\n this.count = count;\n }\n }\n\n function decorateFunction(target, options) {\n return new Decoration(target, options);\n }\n class FunctionTypeExtension extends LuaTypeExtension {\n constructor(thread, options) {\n super(thread, 'js_function');\n this.functionRegistry = typeof FinalizationRegistry !== 'undefined'\n ? new FinalizationRegistry((func) => {\n if (!this.thread.isClosed()) {\n this.thread.lua.luaL_unref(this.thread.address, LUA_REGISTRYINDEX, func);\n }\n })\n : undefined;\n this.options = options;\n this.callbackContext = thread.newThread();\n this.callbackContextIndex = this.thread.lua.luaL_ref(thread.address, LUA_REGISTRYINDEX);\n if (!this.functionRegistry) {\n console.warn('FunctionTypeExtension: FinalizationRegistry not found. Memory leaks likely.');\n }\n this.gcPointer = thread.lua.module.addFunction((calledL) => {\n thread.lua.luaL_checkudata(calledL, 1, this.name);\n const userDataPointer = thread.lua.luaL_checkudata(calledL, 1, this.name);\n const referencePointer = thread.lua.module.getValue(userDataPointer, '*');\n thread.lua.unref(referencePointer);\n return exports.LuaReturn.Ok;\n }, 'ii');\n if (thread.lua.luaL_newmetatable(thread.address, this.name)) {\n thread.lua.lua_pushstring(thread.address, '__gc');\n thread.lua.lua_pushcclosure(thread.address, this.gcPointer, 0);\n thread.lua.lua_settable(thread.address, -3);\n thread.lua.lua_pushstring(thread.address, '__metatable');\n thread.lua.lua_pushstring(thread.address, 'protected metatable');\n thread.lua.lua_settable(thread.address, -3);\n }\n thread.lua.lua_pop(thread.address, 1);\n this.functionWrapper = thread.lua.module.addFunction((calledL) => {\n const calledThread = thread.stateToThread(calledL);\n const refUserdata = thread.lua.luaL_checkudata(calledL, thread.lua.lua_upvalueindex(1), this.name);\n const refPointer = thread.lua.module.getValue(refUserdata, '*');\n const { target, options } = thread.lua.getRef(refPointer);\n const argsQuantity = calledThread.getTop();\n const args = [];\n if (options.receiveThread) {\n args.push(calledThread);\n }\n if (options.receiveArgsQuantity) {\n args.push(argsQuantity);\n }\n else {\n for (let i = 1; i <= argsQuantity; i++) {\n const value = calledThread.getValue(i);\n if (i !== 1 || !(options === null || options === void 0 ? void 0 : options.self) || value !== options.self) {\n args.push(value);\n }\n }\n }\n try {\n const result = target.apply(options === null || options === void 0 ? void 0 : options.self, args);\n if (result === undefined) {\n return 0;\n }\n else if (result instanceof RawResult) {\n return result.count;\n }\n else if (result instanceof MultiReturn) {\n for (const item of result) {\n calledThread.pushValue(item);\n }\n return result.length;\n }\n else {\n calledThread.pushValue(result);\n return 1;\n }\n }\n catch (err) {\n if (err === Infinity) {\n throw err;\n }\n calledThread.pushValue(err);\n return calledThread.lua.lua_error(calledThread.address);\n }\n }, 'ii');\n }\n close() {\n this.thread.lua.module.removeFunction(this.gcPointer);\n this.thread.lua.module.removeFunction(this.functionWrapper);\n this.callbackContext.close();\n this.callbackContext.lua.luaL_unref(this.callbackContext.address, LUA_REGISTRYINDEX, this.callbackContextIndex);\n }\n isType(_thread, _index, type) {\n return type === exports.LuaType.Function;\n }\n pushValue(thread, decoration) {\n if (typeof decoration.target !== 'function') {\n return false;\n }\n const pointer = thread.lua.ref(decoration);\n const userDataPointer = thread.lua.lua_newuserdatauv(thread.address, PointerSize, 0);\n thread.lua.module.setValue(userDataPointer, pointer, '*');\n if (exports.LuaType.Nil === thread.lua.luaL_getmetatable(thread.address, this.name)) {\n thread.pop(1);\n thread.lua.unref(pointer);\n throw new Error(`metatable not found: ${this.name}`);\n }\n thread.lua.lua_setmetatable(thread.address, -2);\n thread.lua.lua_pushcclosure(thread.address, this.functionWrapper, 1);\n return true;\n }\n getValue(thread, index) {\n var _a;\n thread.lua.lua_pushvalue(thread.address, index);\n const func = thread.lua.luaL_ref(thread.address, LUA_REGISTRYINDEX);\n const jsFunc = (...args) => {\n var _a;\n if (this.callbackContext.isClosed()) {\n console.warn('Tried to call a function after closing lua state');\n return;\n }\n const callThread = this.callbackContext.newThread();\n try {\n const internalType = callThread.lua.lua_rawgeti(callThread.address, LUA_REGISTRYINDEX, BigInt(func));\n if (internalType !== exports.LuaType.Function) {\n const callMetafieldType = callThread.lua.luaL_getmetafield(callThread.address, -1, '__call');\n callThread.pop();\n if (callMetafieldType !== exports.LuaType.Function) {\n throw new Error(`A value of type '${internalType}' was pushed but it is not callable`);\n }\n }\n for (const arg of args) {\n callThread.pushValue(arg);\n }\n if ((_a = this.options) === null || _a === void 0 ? void 0 : _a.functionTimeout) {\n callThread.setTimeout(Date.now() + this.options.functionTimeout);\n }\n const status = callThread.lua.lua_pcallk(callThread.address, args.length, 1, 0, 0, null);\n if (status === exports.LuaReturn.Yield) {\n throw new Error('cannot yield in callbacks from javascript');\n }\n callThread.assertOk(status);\n if (callThread.getTop() > 0) {\n return callThread.getValue(-1);\n }\n return undefined;\n }\n finally {\n callThread.close();\n this.callbackContext.pop();\n }\n };\n (_a = this.functionRegistry) === null || _a === void 0 ? void 0 : _a.register(jsFunc, func);\n return jsFunc;\n }\n }\n function createTypeExtension$5(thread, options) {\n return new FunctionTypeExtension(thread, options);\n }\n\n class NullTypeExtension extends LuaTypeExtension {\n constructor(thread) {\n super(thread, 'js_null');\n this.gcPointer = thread.lua.module.addFunction((functionStateAddress) => {\n const userDataPointer = thread.lua.luaL_checkudata(functionStateAddress, 1, this.name);\n const referencePointer = thread.lua.module.getValue(userDataPointer, '*');\n thread.lua.unref(referencePointer);\n return exports.LuaReturn.Ok;\n }, 'ii');\n if (thread.lua.luaL_newmetatable(thread.address, this.name)) {\n const metatableIndex = thread.lua.lua_gettop(thread.address);\n thread.lua.lua_pushstring(thread.address, 'protected metatable');\n thread.lua.lua_setfield(thread.address, metatableIndex, '__metatable');\n thread.lua.lua_pushcclosure(thread.address, this.gcPointer, 0);\n thread.lua.lua_setfield(thread.address, metatableIndex, '__gc');\n thread.pushValue(() => null);\n thread.lua.lua_setfield(thread.address, metatableIndex, '__index');\n thread.pushValue(() => 'null');\n thread.lua.lua_setfield(thread.address, metatableIndex, '__tostring');\n thread.pushValue((self, other) => self === other);\n thread.lua.lua_setfield(thread.address, metatableIndex, '__eq');\n }\n thread.lua.lua_pop(thread.address, 1);\n super.pushValue(thread, new Decoration({}, {}));\n thread.lua.lua_setglobal(thread.address, 'null');\n }\n getValue(thread, index) {\n const refUserData = thread.lua.luaL_testudata(thread.address, index, this.name);\n if (!refUserData) {\n throw new Error(`data does not have the expected metatable: ${this.name}`);\n }\n return null;\n }\n pushValue(thread, decoration) {\n if ((decoration === null || decoration === void 0 ? void 0 : decoration.target) !== null) {\n return false;\n }\n thread.lua.lua_getglobal(thread.address, 'null');\n return true;\n }\n close() {\n this.thread.lua.module.removeFunction(this.gcPointer);\n }\n }\n function createTypeExtension$4(thread) {\n return new NullTypeExtension(thread);\n }\n\n class PromiseTypeExtension extends LuaTypeExtension {\n constructor(thread, injectObject) {\n super(thread, 'js_promise');\n this.gcPointer = thread.lua.module.addFunction((functionStateAddress) => {\n const userDataPointer = thread.lua.luaL_checkudata(functionStateAddress, 1, this.name);\n const referencePointer = thread.lua.module.getValue(userDataPointer, '*');\n thread.lua.unref(referencePointer);\n return exports.LuaReturn.Ok;\n }, 'ii');\n if (thread.lua.luaL_newmetatable(thread.address, this.name)) {\n const metatableIndex = thread.lua.lua_gettop(thread.address);\n thread.lua.lua_pushstring(thread.address, 'protected metatable');\n thread.lua.lua_setfield(thread.address, metatableIndex, '__metatable');\n thread.lua.lua_pushcclosure(thread.address, this.gcPointer, 0);\n thread.lua.lua_setfield(thread.address, metatableIndex, '__gc');\n const checkSelf = (self) => {\n if (Promise.resolve(self) !== self && typeof self.then !== 'function') {\n throw new Error('promise method called without self instance');\n }\n return true;\n };\n thread.pushValue({\n next: (self, ...args) => checkSelf(self) && self.then(...args),\n catch: (self, ...args) => checkSelf(self) && self.catch(...args),\n finally: (self, ...args) => checkSelf(self) && self.finally(...args),\n await: decorateFunction((functionThread, self) => {\n checkSelf(self);\n if (functionThread.address === thread.address) {\n throw new Error('cannot await in the main thread');\n }\n let promiseResult = undefined;\n const awaitPromise = self\n .then((res) => {\n promiseResult = { status: 'fulfilled', value: res };\n })\n .catch((err) => {\n promiseResult = { status: 'rejected', value: err };\n });\n const continuance = this.thread.lua.module.addFunction((continuanceState) => {\n if (!promiseResult) {\n return thread.lua.lua_yieldk(functionThread.address, 0, 0, continuance);\n }\n this.thread.lua.module.removeFunction(continuance);\n const continuanceThread = thread.stateToThread(continuanceState);\n if (promiseResult.status === 'rejected') {\n continuanceThread.pushValue(promiseResult.value || new Error('promise rejected with no error'));\n return this.thread.lua.lua_error(continuanceState);\n }\n if (promiseResult.value instanceof RawResult) {\n return promiseResult.value.count;\n }\n else if (promiseResult.value instanceof MultiReturn) {\n for (const arg of promiseResult.value) {\n continuanceThread.pushValue(arg);\n }\n return promiseResult.value.length;\n }\n else {\n continuanceThread.pushValue(promiseResult.value);\n return 1;\n }\n }, 'iiii');\n functionThread.pushValue(awaitPromise);\n return new RawResult(thread.lua.lua_yieldk(functionThread.address, 1, 0, continuance));\n }, { receiveThread: true }),\n });\n thread.lua.lua_setfield(thread.address, metatableIndex, '__index');\n thread.pushValue((self, other) => self === other);\n thread.lua.lua_setfield(thread.address, metatableIndex, '__eq');\n }\n thread.lua.lua_pop(thread.address, 1);\n if (injectObject) {\n thread.set('Promise', {\n create: (callback) => new Promise(callback),\n all: (promiseArray) => {\n if (!Array.isArray(promiseArray)) {\n throw new Error('argument must be an array of promises');\n }\n return Promise.all(promiseArray.map((potentialPromise) => Promise.resolve(potentialPromise)));\n },\n resolve: (value) => Promise.resolve(value),\n });\n }\n }\n close() {\n this.thread.lua.module.removeFunction(this.gcPointer);\n }\n pushValue(thread, decoration) {\n if (Promise.resolve(decoration.target) !== decoration.target && typeof decoration.target.then !== 'function') {\n return false;\n }\n return super.pushValue(thread, decoration);\n }\n }\n function createTypeExtension$3(thread, injectObject) {\n return new PromiseTypeExtension(thread, injectObject);\n }\n\n function decorateProxy(target, options) {\n return new Decoration(target, options || {});\n }\n class ProxyTypeExtension extends LuaTypeExtension {\n constructor(thread) {\n super(thread, 'js_proxy');\n this.gcPointer = thread.lua.module.addFunction((functionStateAddress) => {\n const userDataPointer = thread.lua.luaL_checkudata(functionStateAddress, 1, this.name);\n const referencePointer = thread.lua.module.getValue(userDataPointer, '*');\n thread.lua.unref(referencePointer);\n return exports.LuaReturn.Ok;\n }, 'ii');\n if (thread.lua.luaL_newmetatable(thread.address, this.name)) {\n const metatableIndex = thread.lua.lua_gettop(thread.address);\n thread.lua.lua_pushstring(thread.address, 'protected metatable');\n thread.lua.lua_setfield(thread.address, metatableIndex, '__metatable');\n thread.lua.lua_pushcclosure(thread.address, this.gcPointer, 0);\n thread.lua.lua_setfield(thread.address, metatableIndex, '__gc');\n thread.pushValue((self, key) => {\n switch (typeof key) {\n case 'number':\n key = key - 1;\n case 'string':\n break;\n default:\n throw new Error('Only strings or numbers can index js objects');\n }\n const value = self[key];\n if (typeof value === 'function') {\n return decorateFunction(value, { self });\n }\n return value;\n });\n thread.lua.lua_setfield(thread.address, metatableIndex, '__index');\n thread.pushValue((self, key, value) => {\n switch (typeof key) {\n case 'number':\n key = key - 1;\n case 'string':\n break;\n default:\n throw new Error('Only strings or numbers can index js objects');\n }\n self[key] = value;\n });\n thread.lua.lua_setfield(thread.address, metatableIndex, '__newindex');\n thread.pushValue((self) => {\n var _a, _b;\n return (_b = (_a = self.toString) === null || _a === void 0 ? void 0 : _a.call(self)) !== null && _b !== void 0 ? _b : typeof self;\n });\n thread.lua.lua_setfield(thread.address, metatableIndex, '__tostring');\n thread.pushValue((self) => {\n return self.length || 0;\n });\n thread.lua.lua_setfield(thread.address, metatableIndex, '__len');\n thread.pushValue((self) => {\n const keys = Object.getOwnPropertyNames(self);\n let i = 0;\n return MultiReturn.of(() => {\n const ret = MultiReturn.of(keys[i], self[keys[i]]);\n i++;\n return ret;\n }, self, null);\n });\n thread.lua.lua_setfield(thread.address, metatableIndex, '__pairs');\n thread.pushValue((self, other) => {\n return self === other;\n });\n thread.lua.lua_setfield(thread.address, metatableIndex, '__eq');\n thread.pushValue((self, ...args) => {\n if (args[0] === self) {\n args.shift();\n }\n return self(...args);\n });\n thread.lua.lua_setfield(thread.address, metatableIndex, '__call');\n }\n thread.lua.lua_pop(thread.address, 1);\n }\n isType(_thread, _index, type, name) {\n return type === exports.LuaType.Userdata && name === this.name;\n }\n getValue(thread, index) {\n const refUserdata = thread.lua.lua_touserdata(thread.address, index);\n const referencePointer = thread.lua.module.getValue(refUserdata, '*');\n return thread.lua.getRef(referencePointer);\n }\n pushValue(thread, decoratedValue) {\n var _a;\n const { target, options } = decoratedValue;\n if (options.proxy === undefined) {\n if (target === null || target === undefined) {\n return false;\n }\n if (typeof target !== 'object') {\n const isClass = typeof target === 'function' && ((_a = target.prototype) === null || _a === void 0 ? void 0 : _a.constructor) === target && target.toString().startsWith('class ');\n if (!isClass) {\n return false;\n }\n }\n if (Promise.resolve(target) === target || typeof target.then === 'function') {\n return false;\n }\n }\n else if (options.proxy === false) {\n return false;\n }\n if (options.metatable && !(options.metatable instanceof Decoration)) {\n decoratedValue.options.metatable = decorateProxy(options.metatable, { proxy: false });\n return false;\n }\n return super.pushValue(thread, decoratedValue);\n }\n close() {\n this.thread.lua.module.removeFunction(this.gcPointer);\n }\n }\n function createTypeExtension$2(thread) {\n return new ProxyTypeExtension(thread);\n }\n\n class TableTypeExtension extends LuaTypeExtension {\n constructor(thread) {\n super(thread, 'js_table');\n }\n close() {\n }\n isType(_thread, _index, type) {\n return type === exports.LuaType.Table;\n }\n getValue(thread, index, userdata) {\n const seenMap = userdata || new Map();\n const pointer = thread.lua.lua_topointer(thread.address, index);\n let table = seenMap.get(pointer);\n if (!table) {\n const keys = this.readTableKeys(thread, index);\n const isSequential = keys.length > 0 && keys.every((key, index) => key === String(index + 1));\n table = isSequential ? [] : {};\n seenMap.set(pointer, table);\n this.readTableValues(thread, index, seenMap, table);\n }\n return table;\n }\n pushValue(thread, { target }, userdata) {\n if (typeof target !== 'object' || target === null) {\n return false;\n }\n const seenMap = userdata || new Map();\n const existingReference = seenMap.get(target);\n if (existingReference !== undefined) {\n thread.lua.lua_rawgeti(thread.address, LUA_REGISTRYINDEX, BigInt(existingReference));\n return true;\n }\n try {\n const tableIndex = thread.getTop() + 1;\n const createTable = (arrayCount, keyCount) => {\n thread.lua.lua_createtable(thread.address, arrayCount, keyCount);\n const ref = thread.lua.luaL_ref(thread.address, LUA_REGISTRYINDEX);\n seenMap.set(target, ref);\n thread.lua.lua_rawgeti(thread.address, LUA_REGISTRYINDEX, BigInt(ref));\n };\n if (Array.isArray(target)) {\n createTable(target.length, 0);\n for (let i = 0; i < target.length; i++) {\n thread.pushValue(i + 1, seenMap);\n thread.pushValue(target[i], seenMap);\n thread.lua.lua_settable(thread.address, tableIndex);\n }\n }\n else {\n createTable(0, Object.getOwnPropertyNames(target).length);\n for (const key in target) {\n thread.pushValue(key, seenMap);\n thread.pushValue(target[key], seenMap);\n thread.lua.lua_settable(thread.address, tableIndex);\n }\n }\n }\n finally {\n if (userdata === undefined) {\n for (const reference of seenMap.values()) {\n thread.lua.luaL_unref(thread.address, LUA_REGISTRYINDEX, reference);\n }\n }\n }\n return true;\n }\n readTableKeys(thread, index) {\n const keys = [];\n thread.lua.lua_pushnil(thread.address);\n while (thread.lua.lua_next(thread.address, index)) {\n const key = thread.indexToString(-2);\n keys.push(key);\n thread.pop();\n }\n return keys;\n }\n readTableValues(thread, index, seenMap, table) {\n const isArray = Array.isArray(table);\n thread.lua.lua_pushnil(thread.address);\n while (thread.lua.lua_next(thread.address, index)) {\n const key = thread.indexToString(-2);\n const value = thread.getValue(-1, undefined, seenMap);\n if (isArray) {\n table.push(value);\n }\n else {\n table[key] = value;\n }\n thread.pop();\n }\n }\n }\n function createTypeExtension$1(thread) {\n return new TableTypeExtension(thread);\n }\n\n function decorateUserdata(target) {\n return new Decoration(target, { reference: true });\n }\n class UserdataTypeExtension extends LuaTypeExtension {\n constructor(thread) {\n super(thread, 'js_userdata');\n this.gcPointer = thread.lua.module.addFunction((functionStateAddress) => {\n const userDataPointer = thread.lua.luaL_checkudata(functionStateAddress, 1, this.name);\n const referencePointer = thread.lua.module.getValue(userDataPointer, '*');\n thread.lua.unref(referencePointer);\n return exports.LuaReturn.Ok;\n }, 'ii');\n if (thread.lua.luaL_newmetatable(thread.address, this.name)) {\n const metatableIndex = thread.lua.lua_gettop(thread.address);\n thread.lua.lua_pushstring(thread.address, 'protected metatable');\n thread.lua.lua_setfield(thread.address, metatableIndex, '__metatable');\n thread.lua.lua_pushcclosure(thread.address, this.gcPointer, 0);\n thread.lua.lua_setfield(thread.address, metatableIndex, '__gc');\n }\n thread.lua.lua_pop(thread.address, 1);\n }\n isType(_thread, _index, type, name) {\n return type === exports.LuaType.Userdata && name === this.name;\n }\n getValue(thread, index) {\n const refUserdata = thread.lua.lua_touserdata(thread.address, index);\n const referencePointer = thread.lua.module.getValue(refUserdata, '*');\n return thread.lua.getRef(referencePointer);\n }\n pushValue(thread, decoratedValue) {\n if (!decoratedValue.options.reference) {\n return false;\n }\n return super.pushValue(thread, decoratedValue);\n }\n close() {\n this.thread.lua.module.removeFunction(this.gcPointer);\n }\n }\n function createTypeExtension(thread) {\n return new UserdataTypeExtension(thread);\n }\n\n class LuaEngine {\n constructor(cmodule, { openStandardLibs = true, injectObjects = false, enableProxy = true, traceAllocations = false, functionTimeout = undefined, } = {}) {\n this.cmodule = cmodule;\n this.global = new Global(this.cmodule, traceAllocations);\n this.global.registerTypeExtension(0, createTypeExtension$1(this.global));\n this.global.registerTypeExtension(0, createTypeExtension$5(this.global, { functionTimeout }));\n this.global.registerTypeExtension(1, createTypeExtension$3(this.global, injectObjects));\n if (injectObjects) {\n this.global.registerTypeExtension(5, createTypeExtension$4(this.global));\n }\n if (enableProxy) {\n this.global.registerTypeExtension(3, createTypeExtension$2(this.global));\n }\n else {\n this.global.registerTypeExtension(1, createTypeExtension$6(this.global, injectObjects));\n }\n this.global.registerTypeExtension(4, createTypeExtension(this.global));\n if (openStandardLibs) {\n this.cmodule.luaL_openlibs(this.global.address);\n }\n }\n doString(script) {\n return this.callByteCode((thread) => thread.loadString(script));\n }\n doFile(filename) {\n return this.callByteCode((thread) => thread.loadFile(filename));\n }\n doStringSync(script) {\n this.global.loadString(script);\n const result = this.global.runSync();\n return result[0];\n }\n doFileSync(filename) {\n this.global.loadFile(filename);\n const result = this.global.runSync();\n return result[0];\n }\n async callByteCode(loader) {\n const thread = this.global.newThread();\n const threadIndex = this.global.getTop();\n try {\n loader(thread);\n const result = await thread.run(0);\n if (result.length > 0) {\n this.cmodule.lua_xmove(thread.address, this.global.address, result.length);\n return this.global.getValue(this.global.getTop() - result.length + 1);\n }\n return undefined;\n }\n finally {\n this.global.remove(threadIndex);\n }\n }\n }\n\n var initWasmModule = (() => {\n var _scriptDir = (typeof document === 'undefined' && typeof location === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : typeof document === 'undefined' ? location.href : (_documentCurrentScript && _documentCurrentScript.src || new URL('index.js', document.baseURI).href));\n \n return (\n async function(moduleArg = {}) {\n\n var e=moduleArg,aa,ba;e.ready=new Promise((a,b)=>{aa=a;ba=b;});\n \"_malloc _free _realloc _luaL_checkversion_ _luaL_getmetafield _luaL_callmeta _luaL_tolstring _luaL_argerror _luaL_typeerror _luaL_checklstring _luaL_optlstring _luaL_checknumber _luaL_optnumber _luaL_checkinteger _luaL_optinteger _luaL_checkstack _luaL_checktype _luaL_checkany _luaL_newmetatable _luaL_setmetatable _luaL_testudata _luaL_checkudata _luaL_where _luaL_fileresult _luaL_execresult _luaL_ref _luaL_unref _luaL_loadfilex _luaL_loadbufferx _luaL_loadstring _luaL_newstate _luaL_len _luaL_addgsub _luaL_gsub _luaL_setfuncs _luaL_getsubtable _luaL_traceback _luaL_requiref _luaL_buffinit _luaL_prepbuffsize _luaL_addlstring _luaL_addstring _luaL_addvalue _luaL_pushresult _luaL_pushresultsize _luaL_buffinitsize _lua_newstate _lua_close _lua_newthread _lua_resetthread _lua_atpanic _lua_version _lua_absindex _lua_gettop _lua_settop _lua_pushvalue _lua_rotate _lua_copy _lua_checkstack _lua_xmove _lua_isnumber _lua_isstring _lua_iscfunction _lua_isinteger _lua_isuserdata _lua_type _lua_typename _lua_tonumberx _lua_tointegerx _lua_toboolean _lua_tolstring _lua_rawlen _lua_tocfunction _lua_touserdata _lua_tothread _lua_topointer _lua_arith _lua_rawequal _lua_compare _lua_pushnil _lua_pushnumber _lua_pushinteger _lua_pushlstring _lua_pushstring _lua_pushcclosure _lua_pushboolean _lua_pushlightuserdata _lua_pushthread _lua_getglobal _lua_gettable _lua_getfield _lua_geti _lua_rawget _lua_rawgeti _lua_rawgetp _lua_createtable _lua_newuserdatauv _lua_getmetatable _lua_getiuservalue _lua_setglobal _lua_settable _lua_setfield _lua_seti _lua_rawset _lua_rawseti _lua_rawsetp _lua_setmetatable _lua_setiuservalue _lua_callk _lua_pcallk _lua_load _lua_dump _lua_yieldk _lua_resume _lua_status _lua_isyieldable _lua_setwarnf _lua_warning _lua_error _lua_next _lua_concat _lua_len _lua_stringtonumber _lua_getallocf _lua_setallocf _lua_toclose _lua_closeslot _lua_getstack _lua_getinfo _lua_getlocal _lua_setlocal _lua_getupvalue _lua_setupvalue _lua_upvalueid _lua_upvaluejoin _lua_sethook _lua_gethook _lua_gethookmask _lua_gethookcount _lua_setcstacklimit _luaopen_base _luaopen_coroutine _luaopen_table _luaopen_io _luaopen_os _luaopen_string _luaopen_utf8 _luaopen_math _luaopen_debug _luaopen_package _luaL_openlibs _memory ___indirect_function_table _fflush onRuntimeInitialized\".split(\" \").forEach(a=>{Object.getOwnPropertyDescriptor(e.ready,\n a)||Object.defineProperty(e.ready,a,{get:()=>g(\"You are getting \"+a+\" on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\"),set:()=>g(\"You are setting \"+a+\" on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js\")});});\n var ca=Object.assign({},e),da=\"./this.program\",ea=(a,b)=>{throw b;},fa=\"object\"==typeof window,k=\"function\"==typeof importScripts,n=\"object\"==typeof process&&\"object\"==typeof process.versions&&\"string\"==typeof process.versions.node,ha=!fa&&!n&&!k;if(e.ENVIRONMENT)throw Error(\"Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)\");var r=\"\",ia,ja,ka;\n if(n){if(\"undefined\"==typeof process||!process.release||\"node\"!==process.release.name)throw Error(\"not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)\");var la=process.versions.node,ma=la.split(\".\").slice(0,3);ma=1E4*ma[0]+100*ma[1]+1*ma[2].split(\"-\")[0];if(16E4>ma)throw Error(\"This emscripten-generated code requires node v16.0.0 (detected v\"+la+\")\");const {createRequire:a}=\n await import('module');var require$1=a((typeof document === 'undefined' && typeof location === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : typeof document === 'undefined' ? location.href : (_documentCurrentScript && _documentCurrentScript.src || new URL('index.js', document.baseURI).href))),fs=require$1(\"fs\"),na=require$1(\"path\");k?r=na.dirname(r)+\"/\":r=require$1(\"url\").fileURLToPath(new URL(\"./\",(typeof document === 'undefined' && typeof location === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : typeof document === 'undefined' ? location.href : (_documentCurrentScript && _documentCurrentScript.src || new URL('index.js', document.baseURI).href))));ia=(b,c)=>{b=oa(b)?new URL(b):na.normalize(b);return fs.readFileSync(b,c?void 0:\"utf8\")};ka=b=>{b=ia(b,!0);b.buffer||(b=new Uint8Array(b));u(b.buffer);return b};ja=(b,c,d,f=!0)=>{b=oa(b)?new URL(b):na.normalize(b);fs.readFile(b,f?void 0:\"utf8\",(h,m)=>{h?d(h):c(f?m.buffer:m);});};!e.thisProgram&&\n 1<process.argv.length&&(da=process.argv[1].replace(/\\\\/g,\"/\"));process.argv.slice(2);ea=(b,c)=>{process.exitCode=b;throw c;};e.inspect=()=>\"[Emscripten Module object]\";}else if(ha){if(\"object\"==typeof process&&\"function\"===typeof require$1||\"object\"==typeof window||\"function\"==typeof importScripts)throw Error(\"not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)\");\"undefined\"!=\n typeof read&&(ia=read);ka=a=>{if(\"function\"==typeof readbuffer)return new Uint8Array(readbuffer(a));a=read(a,\"binary\");u(\"object\"==typeof a);return a};ja=(a,b)=>{setTimeout(()=>b(ka(a)));};\"undefined\"==typeof clearTimeout&&(globalThis.clearTimeout=()=>{});\"undefined\"==typeof setTimeout&&(globalThis.setTimeout=a=>\"function\"==typeof a?a():g());\"function\"==typeof quit&&(ea=(a,b)=>{setTimeout(()=>{if(!(b instanceof pa)){let c=b;b&&\"object\"==typeof b&&b.stack&&(c=[b,b.stack]);z(`exiting due to exception: ${c}`);}quit(a);});\n throw b;});\"undefined\"!=typeof print&&(\"undefined\"==typeof console&&(console={}),console.log=print,console.warn=console.error=\"undefined\"!=typeof printErr?printErr:print);}else if(fa||k){k?r=self.location.href:\"undefined\"!=typeof document&&document.currentScript&&(r=document.currentScript.src);_scriptDir&&(r=_scriptDir);0!==r.indexOf(\"blob:\")?r=r.substr(0,r.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):r=\"\";if(\"object\"!=typeof window&&\"function\"!=typeof importScripts)throw Error(\"not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)\");\n ia=a=>{var b=new XMLHttpRequest;b.open(\"GET\",a,!1);b.send(null);return b.responseText};k&&(ka=a=>{var b=new XMLHttpRequest;b.open(\"GET\",a,!1);b.responseType=\"arraybuffer\";b.send(null);return new Uint8Array(b.response)});ja=(a,b,c)=>{var d=new XMLHttpRequest;d.open(\"GET\",a,!0);d.responseType=\"arraybuffer\";d.onload=()=>{200==d.status||0==d.status&&d.response?b(d.response):c();};d.onerror=c;d.send(null);};}else throw Error(\"environment detection error\");var qa=console.log.bind(console),z=console.error.bind(console);\n Object.assign(e,ca);ca=null;C(\"ENVIRONMENT\");C(\"GL_MAX_TEXTURE_IMAGE_UNITS\");C(\"SDL_canPlayWithWebAudio\");C(\"SDL_numSimultaneouslyQueuedBuffers\");C(\"INITIAL_MEMORY\");C(\"wasmMemory\");C(\"arguments\");C(\"buffer\");C(\"canvas\");C(\"doNotCaptureKeyboard\");C(\"dynamicLibraries\");C(\"elementPointerLock\");C(\"extraStackTrace\");C(\"forcedAspectRatio\");C(\"instantiateWasm\");C(\"keyboardListeningElement\");C(\"freePreloadedMediaOnUse\");C(\"loadSplitModule\");C(\"logReadFiles\");C(\"mainScriptUrlOrBlob\");C(\"mem\");C(\"monitorRunDependencies\");\n C(\"noExitRuntime\");C(\"noInitialRun\");C(\"onAbort\");C(\"onCustomMessage\");C(\"onExit\");C(\"onFree\");C(\"onFullScreen\");C(\"onMalloc\");C(\"onRealloc\");C(\"onRuntimeInitialized\");C(\"postMainLoop\");C(\"postRun\");C(\"preInit\");C(\"preMainLoop\");C(\"preinitializedWebGLContext\");C(\"memoryInitializerRequest\");C(\"preloadPlugins\");C(\"print\");C(\"printErr\");C(\"quit\");C(\"setStatus\");C(\"statusMessage\");C(\"stderr\");C(\"stdin\");C(\"stdout\");C(\"thisProgram\");C(\"wasm\");C(\"wasmBinary\");C(\"websocket\");C(\"fetchSettings\");\n D(\"arguments\",\"arguments_\");D(\"thisProgram\",\"thisProgram\");D(\"quit\",\"quit_\");u(\"undefined\"==typeof e.memoryInitializerPrefixURL,\"Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead\");u(\"undefined\"==typeof e.pthreadMainPrefixURL,\"Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead\");u(\"undefined\"==typeof e.cdInitializerPrefixURL,\"Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead\");\n u(\"undefined\"==typeof e.filePackagePrefixURL,\"Module.filePackagePrefixURL option was removed, use Module.locateFile instead\");u(\"undefined\"==typeof e.read,\"Module.read option was removed (modify read_ in JS)\");u(\"undefined\"==typeof e.readAsync,\"Module.readAsync option was removed (modify readAsync in JS)\");u(\"undefined\"==typeof e.readBinary,\"Module.readBinary option was removed (modify readBinary in JS)\");u(\"undefined\"==typeof e.setWindowTitle,\"Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)\");\n u(\"undefined\"==typeof e.TOTAL_MEMORY,\"Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY\");D(\"asm\",\"wasmExports\");D(\"read\",\"read_\");D(\"readAsync\",\"readAsync\");D(\"readBinary\",\"readBinary\");D(\"setWindowTitle\",\"setWindowTitle\");u(!ha,\"shell environment detected but not enabled at build time. Add 'shell' to `-sENVIRONMENT` to enable.\");D(\"wasmBinary\",\"wasmBinary\");\"object\"!=typeof WebAssembly&&g(\"no native wasm support detected\");var ra,sa=!1;\n function u(a,b){a||g(\"Assertion failed\"+(b?\": \"+b:\"\"));}var E,ta,ua,F,G,va,wa,xa;function ya(){var a=ra.buffer;e.HEAP8=E=new Int8Array(a);e.HEAP16=ua=new Int16Array(a);e.HEAPU8=ta=new Uint8Array(a);e.HEAPU16=new Uint16Array(a);e.HEAP32=F=new Int32Array(a);e.HEAPU32=G=new Uint32Array(a);e.HEAPF32=va=new Float32Array(a);e.HEAPF64=xa=new Float64Array(a);e.HEAP64=wa=new BigInt64Array(a);e.HEAPU64=new BigUint64Array(a);}u(!e.STACK_SIZE,\"STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time\");\n u(\"undefined\"!=typeof Int32Array&&\"undefined\"!==typeof Float64Array&&void 0!=Int32Array.prototype.subarray&&void 0!=Int32Array.prototype.set,\"JS engine does not provide full typed array support\");u(!e.wasmMemory,\"Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally\");u(!e.INITIAL_MEMORY,\"Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically\");\n function za(){if(!sa){var a=Aa();0==a&&(a+=4);var b=G[a>>2],c=G[a+4>>2];34821223==b&&2310721022==c||g(`Stack overflow! Stack cookie has been overwritten at ${Ba(a)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${Ba(c)} ${Ba(b)}`);1668509029!=G[0]&&g(\"Runtime error: The application has corrupted its heap memory area (address zero)!\");}}var Ca=new Int16Array(1),Da=new Int8Array(Ca.buffer);Ca[0]=25459;\n if(115!==Da[0]||99!==Da[1])throw \"Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)\";var Ea=[],Fa=[],Ga=[],Ha=!1;u(Math.imul,\"This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill\");u(Math.fround,\"This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill\");u(Math.clz32,\"This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill\");\n u(Math.trunc,\"This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill\");var Ia=0,I=null,Ja=null,Ka={};function La(a){for(var b=a;;){if(!Ka[a])return a;a=b+Math.random();}}\n function Ma(a){Ia++;a?(u(!Ka[a]),Ka[a]=1,null===I&&\"undefined\"!=typeof setInterval&&(I=setInterval(()=>{if(sa)clearInterval(I),I=null;else {var b=!1,c;for(c in Ka)b||(b=!0,z(\"still waiting on run dependencies:\")),z(`dependency: ${c}`);b&&z(\"(end of list)\");}},1E4))):z(\"warning: run dependency added without ID\");}function Na(a){Ia--;a?(u(Ka[a]),delete Ka[a]):z(\"warning: run dependency removed without ID\");0==Ia&&(null!==I&&(clearInterval(I),I=null),Ja&&(a=Ja,Ja=null,a()));}\n function g(a){a=\"Aborted(\"+a+\")\";z(a);sa=!0;a=new WebAssembly.RuntimeError(a);ba(a);throw a;}var Oa=a=>a.startsWith(\"data:application/octet-stream;base64,\"),oa=a=>a.startsWith(\"file://\");function J(a){return function(){u(Ha,`native function \\`${a}\\` called before runtime initialization`);var b=L[a];u(b,`exported native function \\`${a}\\` not found`);return b.apply(null,arguments)}}var M;\n if(e.locateFile){if(M=\"glue.wasm\",!Oa(M)){var Pa=M;M=e.locateFile?e.locateFile(Pa,r):r+Pa;}}else M=(new URL(\"glue.wasm\",(typeof document === 'undefined' && typeof location === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : typeof document === 'undefined' ? location.href : (_documentCurrentScript && _documentCurrentScript.src || new URL('index.js', document.baseURI).href)))).href;function Qa(a){if(ka)return ka(a);throw \"both async and sync fetching of the wasm failed\";}\n function Ra(a){if(fa||k){if(\"function\"==typeof fetch&&!oa(a))return fetch(a,{credentials:\"same-origin\"}).then(b=>{if(!b.ok)throw \"failed to load wasm binary file at '\"+a+\"'\";return b.arrayBuffer()}).catch(()=>Qa(a));if(ja)return new Promise((b,c)=>{ja(a,d=>b(new Uint8Array(d)),c);})}return Promise.resolve().then(()=>Qa(a))}\n function Sa(a,b,c){return Ra(a).then(d=>WebAssembly.instantiate(d,b)).then(d=>d).then(c,d=>{z(`failed to asynchronously prepare wasm: ${d}`);oa(M)&&z(`warning: Loading from a file URI (${M}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`);g(d);})}\n function Ta(a,b){var c=M;return \"function\"!=typeof WebAssembly.instantiateStreaming||Oa(c)||oa(c)||n||\"function\"!=typeof fetch?Sa(c,a,b):fetch(c,{credentials:\"same-origin\"}).then(d=>WebAssembly.instantiateStreaming(d,a).then(b,function(f){z(`wasm streaming compile failed: ${f}`);z(\"falling back to ArrayBuffer instantiation\");return Sa(c,a,b)}))}\n function D(a,b){Object.getOwnPropertyDescriptor(e,a)||Object.defineProperty(e,a,{configurable:!0,get(){g(`\\`Module.${a}\\` has been replaced by \\`${b}\\``+\" (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)\");}});}function C(a){Object.getOwnPropertyDescriptor(e,a)&&g(`\\`Module.${a}\\` was supplied but \\`${a}\\` not included in INCOMING_MODULE_JS_API`);}\n function Ua(a){return \"FS_createPath\"===a||\"FS_createDataFile\"===a||\"FS_createPreloadedFile\"===a||\"FS_unlink\"===a||\"addRunDependency\"===a||\"FS_createLazyFile\"===a||\"FS_createDevice\"===a||\"removeRunDependency\"===a}function Va(a,b){\"undefined\"!==typeof globalThis&&Object.defineProperty(globalThis,a,{configurable:!0,get(){Wa(`\\`${a}\\` is not longer defined by emscripten. ${b}`);}});}Va(\"buffer\",\"Please use HEAP8.buffer or wasmMemory.buffer\");Va(\"asm\",\"Please use wasmExports instead\");\n function Xa(a){Object.getOwnPropertyDescriptor(e,a)||Object.defineProperty(e,a,{configurable:!0,get(){var b=`'${a}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;Ua(a)&&(b+=\". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you\");g(b);}});}function pa(a){this.name=\"ExitStatus\";this.message=`Program terminated with exit(${a})`;this.status=a;}\n var Ba=a=>{u(\"number\"===typeof a);return \"0x\"+(a>>>0).toString(16).padStart(8,\"0\")},Wa=a=>{Ya||={};Ya[a]||(Ya[a]=1,n&&(a=\"warning: \"+a),z(a));},Ya,Za=(a,b)=>{for(var c=0,d=a.length-1;0<=d;d--){var f=a[d];\".\"===f?a.splice(d,1):\"..\"===f?(a.splice(d,1),c++):c&&(a.splice(d,1),c--);}if(b)for(;c;c--)a.unshift(\"..\");return a},P=a=>{var b=\"/\"===a.charAt(0),c=\"/\"===a.substr(-1);(a=Za(a.split(\"/\").filter(d=>!!d),!b).join(\"/\"))||b||(a=\".\");a&&c&&(a+=\"/\");return (b?\"/\":\"\")+a},$a=a=>{var b=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/.exec(a).slice(1);\n a=b[0];b=b[1];if(!a&&!b)return \".\";b&&=b.substr(0,b.length-1);return a+b},Q=a=>{if(\"/\"===a)return \"/\";a=P(a);a=a.replace(/\\/$/,\"\");var b=a.lastIndexOf(\"/\");return -1===b?a:a.substr(b+1)},ab=(a,b)=>P(a+\"/\"+b),bb=()=>{if(\"object\"==typeof crypto&&\"function\"==typeof crypto.getRandomValues)return c=>crypto.getRandomValues(c);if(n)try{var a=require$1(\"crypto\");if(a.randomFillSync)return c=>a.randomFillSync(c);var b=a.randomBytes;return c=>(c.set(b(c.byteLength)),c)}catch(c){}g(\"no cryptographic support found for randomDevice. consider polyfilling it if you want to use something insecure like Math.random(), e.g. put this in a --pre-js: var crypto = { getRandomValues: (array) => { for (var i = 0; i < array.length; i++) array[i] = (Math.random()*256)|0 } };\");},\n cb=a=>(cb=bb())(a);function db(){for(var a=\"\",b=!1,c=arguments.length-1;-1<=c&&!b;c--){b=0<=c?arguments[c]:R.cwd();if(\"string\"!=typeof b)throw new TypeError(\"Arguments to path.resolve must be strings\");if(!b)return \"\";a=b+\"/\"+a;b=\"/\"===b.charAt(0);}a=Za(a.split(\"/\").filter(d=>!!d),!b).join(\"/\");return (b?\"/\":\"\")+a||\".\"}\n var eb=(a,b)=>{function c(m){for(var p=0;p<m.length&&\"\"===m[p];p++);for(var y=m.length-1;0<=y&&\"\"===m[y];y--);return p>y?[]:m.slice(p,y-p+1)}a=db(a).substr(1);b=db(b).substr(1);a=c(a.split(\"/\"));b=c(b.split(\"/\"));for(var d=Math.min(a.length,b.length),f=d,h=0;h<d;h++)if(a[h]!==b[h]){f=h;break}d=[];for(h=f;h<a.length;h++)d.push(\"..\");d=d.concat(b.slice(f));return d.join(\"/\")},gb=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf8\"):void 0,hb=(a,b)=>{for(var c=b+NaN,d=b;a[d]&&!(d>=c);)++d;if(16<d-\n b&&a.buffer&&gb)return gb.decode(a.subarray(b,d));for(c=\"\";b<d;){var f=a[b++];if(f&128){var h=a[b++]&63;if(192==(f&224))c+=String.fromCharCode((f&31)<<6|h);else {var m=a[b++]&63;224==(f&240)?f=(f&15)<<12|h<<6|m:(240!=(f&248)&&Wa(\"Invalid UTF-8 leading byte \"+Ba(f)+\" encountered when deserializing a UTF-8 string in wasm memory to a JS string!\"),f=(f&7)<<18|h<<12|m<<6|a[b++]&63);65536>f?c+=String.fromCharCode(f):(f-=65536,c+=String.fromCharCode(55296|f>>10,56320|f&1023));}}else c+=String.fromCharCode(f);}return c},\n ib=[],jb=a=>{for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);127>=d?b++:2047>=d?b+=2:55296<=d&&57343>=d?(b+=4,++c):b+=3;}return b},kb=(a,b,c,d)=>{u(\"string\"===typeof a,`stringToUTF8Array expects a string (got ${typeof a})`);if(!(0<d))return 0;var f=c;d=c+d-1;for(var h=0;h<a.length;++h){var m=a.charCodeAt(h);if(55296<=m&&57343>=m){var p=a.charCodeAt(++h);m=65536+((m&1023)<<10)|p&1023;}if(127>=m){if(c>=d)break;b[c++]=m;}else {if(2047>=m){if(c+1>=d)break;b[c++]=192|m>>6;}else {if(65535>=m){if(c+2>=d)break;\n b[c++]=224|m>>12;}else {if(c+3>=d)break;1114111<m&&Wa(\"Invalid Unicode code point \"+Ba(m)+\" encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).\");b[c++]=240|m>>18;b[c++]=128|m>>12&63;}b[c++]=128|m>>6&63;}b[c++]=128|m&63;}}b[c]=0;return c-f};function lb(a,b){var c=Array(jb(a)+1);a=kb(a,c,0,c.length);b&&(c.length=a);return c}var mb=[];function nb(a,b){mb[a]={input:[],output:[],K:b};ob(a,pb);}\n var pb={open(a){var b=mb[a.node.rdev];if(!b)throw new R.g(43);a.tty=b;a.seekable=!1;},close(a){a.tty.K.fsync(a.tty);},fsync(a){a.tty.K.fsync(a.tty);},read(a,b,c,d){if(!a.tty||!a.tty.K.ra)throw new R.g(60);for(var f=0,h=0;h<d;h++){try{var m=a.tty.K.ra(a.tty);}catch(p){throw new R.g(29);}if(void 0===m&&0===f)throw new R.g(6);if(null===m||void 0===m)break;f++;b[c+h]=m;}f&&(a.node.timestamp=Date.now());return f},write(a,b,c,d){if(!a.tty||!a.tty.K.ia)throw new R.g(60);try{for(var f=0;f<d;f++)a.tty.K.ia(a.tty,\n b[c+f]);}catch(h){throw new R.g(29);}d&&(a.node.timestamp=Date.now());return f}},qb={ra(){a:{if(!ib.length){var a=null;if(n){var b=Buffer.alloc(256),c=0,d=process.stdin.fd;try{c=fs.readSync(d,b);}catch(f){if(f.toString().includes(\"EOF\"))c=0;else throw f;}0<c?a=b.slice(0,c).toString(\"utf-8\"):a=null;}else \"undefined\"!=typeof window&&\"function\"==typeof window.prompt?(a=window.prompt(\"Input: \"),null!==a&&(a+=\"\\n\")):\"function\"==typeof readline&&(a=readline(),null!==a&&(a+=\"\\n\"));if(!a){a=null;break a}ib=lb(a,\n !0);}a=ib.shift();}return a},ia(a,b){null===b||10===b?(qa(hb(a.output,0)),a.output=[]):0!=b&&a.output.push(b);},fsync(a){a.output&&0<a.output.length&&(qa(hb(a.output,0)),a.output=[]);},Ia(){return {ab:25856,cb:5,$a:191,bb:35387,Za:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},Ja(){return 0},Ka(){return [24,80]}},rb={ia(a,b){null===b||10===b?(z(hb(a.output,0)),a.output=[]):0!=b&&a.output.push(b);},fsync(a){a.output&&0<a.output.length&&(z(hb(a.output,0)),a.output=[]);}},sb=\n ()=>{g(\"internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported\");};function tb(a,b){var c=a.m?a.m.length:0;c>=b||(b=Math.max(b,c*(1048576>c?2:1.125)>>>0),0!=c&&(b=Math.max(b,256)),c=a.m,a.m=new Uint8Array(b),0<a.o&&a.m.set(c.subarray(0,a.o),0));}\n var S={G:null,s(){return S.createNode(null,\"/\",16895,0)},createNode(a,b,c,d){if(24576===(c&61440)||R.isFIFO(c))throw new R.g(63);S.G||(S.G={dir:{node:{C:S.h.C,v:S.h.v,lookup:S.h.lookup,J:S.h.J,rename:S.h.rename,unlink:S.h.unlink,rmdir:S.h.rmdir,readdir:S.h.readdir,symlink:S.h.symlink},stream:{D:S.l.D}},file:{node:{C:S.h.C,v:S.h.v},stream:{D:S.l.D,read:S.l.read,write:S.l.write,T:S.l.T,S:S.l.S,V:S.l.V}},link:{node:{C:S.h.C,v:S.h.v,readlink:S.h.readlink},stream:{}},na:{node:{C:S.h.C,v:S.h.v},stream:R.Da}});\n c=R.createNode(a,b,c,d);T(c.mode)?(c.h=S.G.dir.node,c.l=S.G.dir.stream,c.m={}):R.isFile(c.mode)?(c.h=S.G.file.node,c.l=S.G.file.stream,c.o=0,c.m=null):40960===(c.mode&61440)?(c.h=S.G.link.node,c.l=S.G.link.stream):8192===(c.mode&61440)&&(c.h=S.G.na.node,c.l=S.G.na.stream);c.timestamp=Date.now();a&&(a.m[b]=c,a.timestamp=c.timestamp);return c},lb(a){return a.m?a.m.subarray?a.m.subarray(0,a.o):new Uint8Array(a.m):new Uint8Array(0)},h:{C(a){var b={};b.dev=8192===(a.mode&61440)?a.id:1;b.ino=a.id;b.mode=\n a.mode;b.nlink=1;b.uid=0;b.gid=0;b.rdev=a.rdev;T(a.mode)?b.size=4096:R.isFile(a.mode)?b.size=a.o:40960===(a.mode&61440)?b.size=a.link.length:b.size=0;b.atime=new Date(a.timestamp);b.mtime=new Date(a.timestamp);b.ctime=new Date(a.timestamp);b.Ba=4096;b.blocks=Math.ceil(b.size/b.Ba);return b},v(a,b){void 0!==b.mode&&(a.mode=b.mode);void 0!==b.timestamp&&(a.timestamp=b.timestamp);if(void 0!==b.size&&(b=b.size,a.o!=b))if(0==b)a.m=null,a.o=0;else {var c=a.m;a.m=new Uint8Array(b);c&&a.m.set(c.subarray(0,\n Math.min(b,a.o)));a.o=b;}},lookup(){throw R.da[44];},J(a,b,c,d){return S.createNode(a,b,c,d)},rename(a,b,c){if(T(a.mode)){try{var d=U(b,c);}catch(h){}if(d)for(var f in d.m)throw new R.g(55);}delete a.parent.m[a.name];a.parent.timestamp=Date.now();a.name=c;b.m[c]=a;b.timestamp=a.parent.timestamp;a.parent=b;},unlink(a,b){delete a.m[b];a.timestamp=Date.now();},rmdir(a,b){var c=U(a,b),d;for(d in c.m)throw new R.g(55);delete a.m[b];a.timestamp=Date.now();},readdir(a){var b=[\".\",\"..\"],c;for(c in a.m)a.m.hasOwnProperty(c)&&\n b.push(c);return b},symlink(a,b,c){a=S.createNode(a,b,41471,0);a.link=c;return a},readlink(a){if(40960!==(a.mode&61440))throw new R.g(28);return a.link}},l:{read(a,b,c,d,f){var h=a.node.m;if(f>=a.node.o)return 0;a=Math.min(a.node.o-f,d);u(0<=a);if(8<a&&h.subarray)b.set(h.subarray(f,f+a),c);else for(d=0;d<a;d++)b[c+d]=h[f+d];return a},write(a,b,c,d,f,h){u(!(b instanceof ArrayBuffer));b.buffer===E.buffer&&(h=!1);if(!d)return 0;a=a.node;a.timestamp=Date.now();if(b.subarray&&(!a.m||a.m.subarray)){if(h)return u(0===\n f,\"canOwn must imply no weird position inside the file\"),a.m=b.subarray(c,c+d),a.o=d;if(0===a.o&&0===f)return a.m=b.slice(c,c+d),a.o=d;if(f+d<=a.o)return a.m.set(b.subarray(c,c+d),f),d}tb(a,f+d);if(a.m.subarray&&b.subarray)a.m.set(b.subarray(c,c+d),f);else for(h=0;h<d;h++)a.m[f+h]=b[c+h];a.o=Math.max(a.o,f+d);return d},D(a,b,c){1===c?b+=a.position:2===c&&R.isFile(a.node.mode)&&(b+=a.node.o);if(0>b)throw new R.g(28);return b},T(a,b,c){tb(a.node,b+c);a.node.o=Math.max(a.node.o,b+c);},S(a,b,c,d,f){if(!R.isFile(a.node.mode))throw new R.g(43);\n a=a.node.m;if(f&2||a.buffer!==E.buffer){if(0<c||c+b<a.length)a.subarray?a=a.subarray(c,c+b):a=Array.prototype.slice.call(a,c,c+b);c=!0;b=sb();if(!b)throw new R.g(48);E.set(a,b);}else c=!1,b=a.byteOffset;return {Ra:b,Aa:c}},V(a,b,c,d){S.l.write(a,b,0,d,c,!1);return 0}}},ub=(a,b,c)=>{var d=La(`al ${a}`);ja(a,f=>{u(f,`Loading data file \"${a}\" failed (no arrayBuffer).`);b(new Uint8Array(f));d&&Na(d);},()=>{if(c)c();else throw `Loading data file \"${a}\" failed.`;});d&&Ma(d);},vb=[],wb=(a,b,c,d)=>{\"undefined\"!=\n typeof Browser&&Browser.R();var f=!1;vb.forEach(h=>{!f&&h.canHandle(b)&&(h.handle(a,b,c,d),f=!0);});return f},xb=(a,b)=>{var c=0;a&&(c|=365);b&&(c|=146);return c},yb={0:\"Success\",1:\"Arg list too long\",2:\"Permission denied\",3:\"Address already in use\",4:\"Address not available\",5:\"Address family not supported by protocol family\",6:\"No more processes\",7:\"Socket already connected\",8:\"Bad file number\",9:\"Trying to read unreadable message\",10:\"Mount device busy\",11:\"Operation canceled\",12:\"No children\",13:\"Connection aborted\",\n 14:\"Connection refused\",15:\"Connection reset by peer\",16:\"File locking deadlock error\",17:\"Destination address required\",18:\"Math arg out of domain of func\",19:\"Quota exceeded\",20:\"File exists\",21:\"Bad address\",22:\"File too large\",23:\"Host is unreachable\",24:\"Identifier removed\",25:\"Illegal byte sequence\",26:\"Connection already in progress\",27:\"Interrupted system call\",28:\"Invalid argument\",29:\"I/O error\",30:\"Socket is already connected\",31:\"Is a directory\",32:\"Too many symbolic links\",33:\"Too many open files\",\n 34:\"Too many links\",35:\"Message too long\",36:\"Multihop attempted\",37:\"File or path name too long\",38:\"Network interface is not configured\",39:\"Connection reset by network\",40:\"Network is unreachable\",41:\"Too many open files in system\",42:\"No buffer space available\",43:\"No such device\",44:\"No such file or directory\",45:\"Exec format error\",46:\"No record locks available\",47:\"The link has been severed\",48:\"Not enough core\",49:\"No message of desired type\",50:\"Protocol not available\",51:\"No space left on device\",\n 52:\"Function not implemented\",53:\"Socket is not connected\",54:\"Not a directory\",55:\"Directory not empty\",56:\"State not recoverable\",57:\"Socket operation on non-socket\",59:\"Not a typewriter\",60:\"No such device or address\",61:\"Value too large for defined data type\",62:\"Previous owner died\",63:\"Not super-user\",64:\"Broken pipe\",65:\"Protocol error\",66:\"Unknown protocol\",67:\"Protocol wrong type for socket\",68:\"Math result not representable\",69:\"Read only file system\",70:\"Illegal seek\",71:\"No such process\",\n 72:\"Stale file handle\",73:\"Connection timed out\",74:\"Text file busy\",75:\"Cross-device link\",100:\"Device not a stream\",101:\"Bad font file fmt\",102:\"Invalid slot\",103:\"Invalid request code\",104:\"No anode\",105:\"Block device required\",106:\"Channel number out of range\",107:\"Level 3 halted\",108:\"Level 3 reset\",109:\"Link number out of range\",110:\"Protocol driver not attached\",111:\"No CSI structure available\",112:\"Level 2 halted\",113:\"Invalid exchange\",114:\"Invalid request descriptor\",115:\"Exchange full\",\n 116:\"No data (for no delay io)\",117:\"Timer expired\",118:\"Out of streams resources\",119:\"Machine is not on the network\",120:\"Package not installed\",121:\"The object is remote\",122:\"Advertise error\",123:\"Srmount error\",124:\"Communication error on send\",125:\"Cross mount point (not really error)\",126:\"Given log. name not unique\",127:\"f.d. invalid for this operation\",128:\"Remote address changed\",129:\"Can access a needed shared lib\",130:\"Accessing a corrupted shared lib\",131:\".lib section in a.out corrupted\",\n 132:\"Attempting to link in too many libs\",133:\"Attempting to exec a shared library\",135:\"Streams pipe error\",136:\"Too many users\",137:\"Socket type not supported\",138:\"Not supported\",139:\"Protocol family not supported\",140:\"Can't send after socket shutdown\",141:\"Too many references\",142:\"Host is down\",148:\"No medium (in tape drive)\",156:\"Level 2 not synchronized\"},zb={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,\n EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,\n ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,\n EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},Ab=a=>a.replace(/\\b_Z[\\w\\d_]+/g,function(b){Wa(\"warning: build with -sDEMANGLE_SUPPORT to link in libcxxabi demangling\");return b===b?b:b+\" [\"+b+\"]\"});function ob(a,b){R.pa[a]={l:b};}function T(a){return 16384===(a&61440)}\n function U(a,b){var c;if(c=(c=Bb(a,\"x\"))?c:a.h.lookup?0:2)throw new R.g(c,a);for(c=R.F[Cb(a.id,b)];c;c=c.N){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return R.lookup(a,b)}\n function V(a,b={}){a=db(a);if(!a)return {path:\"\",node:null};b=Object.assign({ba:!0,ka:0},b);if(8<b.ka)throw new R.g(32);a=a.split(\"/\").filter(m=>!!m);for(var c=R.root,d=\"/\",f=0;f<a.length;f++){var h=f===a.length-1;if(h&&b.parent)break;c=U(c,a[f]);d=P(d+\"/\"+a[f]);c.A&&(!h||h&&b.ba)&&(c=c.A.root);if(!h||b.B)for(h=0;40960===(c.mode&61440);)if(c=R.readlink(d),d=db($a(d),c),c=V(d,{ka:b.ka+1}).node,40<h++)throw new R.g(32);}return {path:d,node:c}}\n function Db(a){for(var b;;){if(R.Z(a))return a=a.s.ua,b?\"/\"!==a[a.length-1]?`${a}/${b}`:a+b:a;b=b?`${a.name}/${b}`:a.name;a=a.parent;}}function Cb(a,b){for(var c=0,d=0;d<b.length;d++)c=(c<<5)-c+b.charCodeAt(d)|0;return (a+c>>>0)%R.F.length}function Eb(a){var b=Cb(a.parent.id,a.name);a.N=R.F[b];R.F[b]=a;}function Fb(a){var b=Cb(a.parent.id,a.name);if(R.F[b]===a)R.F[b]=a.N;else for(b=R.F[b];b;){if(b.N===a){b.N=a.N;break}b=b.N;}}function Gb(a){var b=[\"r\",\"w\",\"rw\"][a&3];a&512&&(b+=\"w\");return b}\n function Bb(a,b){if(R.ta)return 0;if(!b.includes(\"r\")||a.mode&292){if(b.includes(\"w\")&&!(a.mode&146)||b.includes(\"x\")&&!(a.mode&73))return 2}else return 2;return 0}function Hb(a,b){try{return U(a,b),20}catch(c){}return Bb(a,\"wx\")}function Ib(a,b,c){try{var d=U(a,b);}catch(f){return f.u}if(a=Bb(a,\"wx\"))return a;if(c){if(!T(d.mode))return 54;if(R.Z(d)||Db(d)===R.cwd())return 10}else if(T(d.mode))return 31;return 0}function Jb(){for(var a=0;a<=R.xa;a++)if(!R.streams[a])return a;throw new R.g(33);}\n function W(a){a=R.qa(a);if(!a)throw new R.g(8);return a}function Kb(a,b=-1){R.X||(R.X=function(){this.I={};},R.X.prototype={},Object.defineProperties(R.X.prototype,{object:{get(){return this.node},set(c){this.node=c;}},flags:{get(){return this.I.flags},set(c){this.I.flags=c;}},position:{get(){return this.I.position},set(c){this.I.position=c;}}}));a=Object.assign(new R.X,a);-1==b&&(b=Jb());a.fd=b;return R.streams[b]=a}\n function Lb(a){var b=[];for(a=[a];a.length;){var c=a.pop();b.push(c);a.push.apply(a,c.U);}return b}function Mb(a,b,c){\"undefined\"==typeof c&&(c=b,b=438);return R.J(a,b|8192,c)}\n function Nb(){R.g||(R.g=function(a,b){this.name=\"ErrnoError\";this.node=b;this.Sa=function(c){this.u=c;for(var d in zb)if(zb[d]===c){this.code=d;break}};this.Sa(a);this.message=yb[a];this.stack&&(Object.defineProperty(this,\"stack\",{value:Error().stack,writable:!0}),this.stack=Ab(this.stack));},R.g.prototype=Error(),R.g.prototype.constructor=R.g,[44].forEach(a=>{R.da[a]=new R.g(a);R.da[a].stack=\"<generic error, no stack>\";}));}\n function Ob(a,b){try{var c=V(a,{B:!b});a=c.path;}catch(f){}var d={Z:!1,exists:!1,error:0,name:null,path:null,object:null,Oa:!1,Qa:null,Pa:null};try{c=V(a,{parent:!0}),d.Oa=!0,d.Qa=c.path,d.Pa=c.node,d.name=Q(a),c=V(a,{B:!b}),d.exists=!0,d.path=c.path,d.object=c.node,d.name=c.node.name,d.Z=\"/\"===c.path;}catch(f){d.error=f.u;}return d}function Pb(a,b,c,d){a=\"string\"==typeof a?a:Db(a);b=P(a+\"/\"+b);return R.create(b,xb(c,d))}\n function Qb(a){if(!(a.La||a.Ma||a.link||a.m)){if(\"undefined\"!=typeof XMLHttpRequest)throw Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\");if(ia)try{a.m=lb(ia(a.url),!0),a.o=a.m.length;}catch(b){throw new R.g(29);}else throw Error(\"Cannot load without read() or XMLHttpRequest.\");}}\n var R={root:null,U:[],pa:{},streams:[],Na:1,F:null,oa:\"/\",Y:!1,ta:!0,g:null,da:{},Fa:null,W:0,createNode(a,b,c,d){u(\"object\"==typeof a);a=new R.wa(a,b,c,d);Eb(a);return a},Z(a){return a===a.parent},isFile(a){return 32768===(a&61440)},isFIFO(a){return 4096===(a&61440)},isSocket(a){return 49152===(a&49152)},xa:4096,qa:a=>R.streams[a],Da:{open(a){a.l=R.Ga(a.node.rdev).l;a.l.open&&a.l.open(a);},D(){throw new R.g(70);}},ha:a=>a>>8,nb:a=>a&255,M:(a,b)=>a<<8|b,Ga:a=>R.pa[a],va(a,b){function c(m){u(0<R.W);\n R.W--;return b(m)}function d(m){if(m){if(!d.Ea)return d.Ea=!0,c(m)}else ++h>=f.length&&c(null);}\"function\"==typeof a&&(b=a,a=!1);R.W++;1<R.W&&z(`warning: ${R.W} FS.syncfs operations in flight at once, probably just doing extra work`);var f=Lb(R.root.s),h=0;f.forEach(m=>{if(!m.type.va)return d(null);m.type.va(m,a,d);});},s(a,b,c){if(\"string\"==typeof a)throw a;var d=\"/\"===c,f=!c;if(d&&R.root)throw new R.g(10);if(!d&&!f){var h=V(c,{ba:!1});c=h.path;h=h.node;if(h.A)throw new R.g(10);if(!T(h.mode))throw new R.g(54);\n }b={type:a,rb:b,ua:c,U:[]};a=a.s(b);a.s=b;b.root=a;d?R.root=a:h&&(h.A=b,h.s&&h.s.U.push(b));return a},xb(a){a=V(a,{ba:!1});if(!a.node.A)throw new R.g(28);a=a.node;var b=a.A,c=Lb(b);Object.keys(R.F).forEach(d=>{for(d=R.F[d];d;){var f=d.N;c.includes(d.s)&&Fb(d);d=f;}});a.A=null;b=a.s.U.indexOf(b);u(-1!==b);a.s.U.splice(b,1);},lookup(a,b){return a.h.lookup(a,b)},J(a,b,c){var d=V(a,{parent:!0}).node;a=Q(a);if(!a||\".\"===a||\"..\"===a)throw new R.g(28);var f=Hb(d,a);if(f)throw new R.g(f);if(!d.h.J)throw new R.g(63);\n return d.h.J(d,a,b,c)},create(a,b){return R.J(a,(void 0!==b?b:438)&4095|32768,0)},mkdir(a,b){return R.J(a,(void 0!==b?b:511)&1023|16384,0)},ob(a,b){a=a.split(\"/\");for(var c=\"\",d=0;d<a.length;++d)if(a[d]){c+=\"/\"+a[d];try{R.mkdir(c,b);}catch(f){if(20!=f.u)throw f;}}},symlink(a,b){if(!db(a))throw new R.g(44);var c=V(b,{parent:!0}).node;if(!c)throw new R.g(44);b=Q(b);var d=Hb(c,b);if(d)throw new R.g(d);if(!c.h.symlink)throw new R.g(63);return c.h.symlink(c,b,a)},rename(a,b){var c=$a(a),d=$a(b),f=Q(a),\n h=Q(b);var m=V(a,{parent:!0});var p=m.node;m=V(b,{parent:!0});m=m.node;if(!p||!m)throw new R.g(44);if(p.s!==m.s)throw new R.g(75);var y=U(p,f);a=eb(a,d);if(\".\"!==a.charAt(0))throw new R.g(28);a=eb(b,c);if(\".\"!==a.charAt(0))throw new R.g(55);try{var q=U(m,h);}catch(x){}if(y!==q){b=T(y.mode);if(f=Ib(p,f,b))throw new R.g(f);if(f=q?Ib(m,h,b):Hb(m,h))throw new R.g(f);if(!p.h.rename)throw new R.g(63);if(y.A||q&&q.A)throw new R.g(10);if(m!==p&&(f=Bb(p,\"w\")))throw new R.g(f);Fb(y);try{p.h.rename(y,m,h);}catch(x){throw x;\n }finally{Eb(y);}}},rmdir(a){var b=V(a,{parent:!0}).node;a=Q(a);var c=U(b,a),d=Ib(b,a,!0);if(d)throw new R.g(d);if(!b.h.rmdir)throw new R.g(63);if(c.A)throw new R.g(10);b.h.rmdir(b,a);Fb(c);},readdir(a){a=V(a,{B:!0}).node;if(!a.h.readdir)throw new R.g(54);return a.h.readdir(a)},unlink(a){var b=V(a,{parent:!0}).node;if(!b)throw new R.g(44);a=Q(a);var c=U(b,a),d=Ib(b,a,!1);if(d)throw new R.g(d);if(!b.h.unlink)throw new R.g(63);if(c.A)throw new R.g(10);b.h.unlink(b,a);Fb(c);},readlink(a){a=V(a).node;if(!a)throw new R.g(44);\n if(!a.h.readlink)throw new R.g(28);return db(Db(a.parent),a.h.readlink(a))},stat(a,b){a=V(a,{B:!b}).node;if(!a)throw new R.g(44);if(!a.h.C)throw new R.g(63);return a.h.C(a)},lstat(a){return R.stat(a,!0)},chmod(a,b,c){a=\"string\"==typeof a?V(a,{B:!c}).node:a;if(!a.h.v)throw new R.g(63);a.h.v(a,{mode:b&4095|a.mode&-4096,timestamp:Date.now()});},lchmod(a,b){R.chmod(a,b,!0);},fchmod(a,b){a=W(a);R.chmod(a.node,b);},chown(a,b,c,d){a=\"string\"==typeof a?V(a,{B:!d}).node:a;if(!a.h.v)throw new R.g(63);a.h.v(a,\n {timestamp:Date.now()});},lchown(a,b,c){R.chown(a,b,c,!0);},fchown(a,b,c){a=W(a);R.chown(a.node,b,c);},truncate(a,b){if(0>b)throw new R.g(28);a=\"string\"==typeof a?V(a,{B:!0}).node:a;if(!a.h.v)throw new R.g(63);if(T(a.mode))throw new R.g(31);if(!R.isFile(a.mode))throw new R.g(28);var c=Bb(a,\"w\");if(c)throw new R.g(c);a.h.v(a,{size:b,timestamp:Date.now()});},kb(a,b){a=W(a);if(0===(a.flags&2097155))throw new R.g(28);R.truncate(a.node,b);},yb(a,b,c){a=V(a,{B:!0}).node;a.h.v(a,{timestamp:Math.max(b,c)});},open(a,\n b,c){if(\"\"===a)throw new R.g(44);if(\"string\"==typeof b){var d={r:0,\"r+\":2,w:577,\"w+\":578,a:1089,\"a+\":1090}[b];if(\"undefined\"==typeof d)throw Error(`Unknown file open mode: ${b}`);b=d;}c=b&64?(\"undefined\"==typeof c?438:c)&4095|32768:0;if(\"object\"==typeof a)var f=a;else {a=P(a);try{f=V(a,{B:!(b&131072)}).node;}catch(h){}}d=!1;if(b&64)if(f){if(b&128)throw new R.g(20);}else f=R.J(a,c,0),d=!0;if(!f)throw new R.g(44);8192===(f.mode&61440)&&(b&=-513);if(b&65536&&!T(f.mode))throw new R.g(54);if(!d&&(c=f?40960===\n (f.mode&61440)?32:T(f.mode)&&(\"r\"!==Gb(b)||b&512)?31:Bb(f,Gb(b)):44))throw new R.g(c);b&512&&!d&&R.truncate(f,0);b&=-131713;f=Kb({node:f,path:Db(f),flags:b,seekable:!0,position:0,l:f.l,Xa:[],error:!1});f.l.open&&f.l.open(f);!e.logReadFiles||b&1||(R.ja||(R.ja={}),a in R.ja||(R.ja[a]=1));return f},close(a){if(null===a.fd)throw new R.g(8);a.ea&&(a.ea=null);try{a.l.close&&a.l.close(a);}catch(b){throw b;}finally{R.streams[a.fd]=null;}a.fd=null;},D(a,b,c){if(null===a.fd)throw new R.g(8);if(!a.seekable||!a.l.D)throw new R.g(70);\n if(0!=c&&1!=c&&2!=c)throw new R.g(28);a.position=a.l.D(a,b,c);a.Xa=[];return a.position},read(a,b,c,d,f){u(0<=c);if(0>d||0>f)throw new R.g(28);if(null===a.fd)throw new R.g(8);if(1===(a.flags&2097155))throw new R.g(8);if(T(a.node.mode))throw new R.g(31);if(!a.l.read)throw new R.g(28);var h=\"undefined\"!=typeof f;if(!h)f=a.position;else if(!a.seekable)throw new R.g(70);b=a.l.read(a,b,c,d,f);h||(a.position+=b);return b},write(a,b,c,d,f,h){u(0<=c);if(0>d||0>f)throw new R.g(28);if(null===a.fd)throw new R.g(8);\n if(0===(a.flags&2097155))throw new R.g(8);if(T(a.node.mode))throw new R.g(31);if(!a.l.write)throw new R.g(28);a.seekable&&a.flags&1024&&R.D(a,0,2);var m=\"undefined\"!=typeof f;if(!m)f=a.position;else if(!a.seekable)throw new R.g(70);b=a.l.write(a,b,c,d,f,h);m||(a.position+=b);return b},T(a,b,c){if(null===a.fd)throw new R.g(8);if(0>b||0>=c)throw new R.g(28);if(0===(a.flags&2097155))throw new R.g(8);if(!R.isFile(a.node.mode)&&!T(a.node.mode))throw new R.g(43);if(!a.l.T)throw new R.g(138);a.l.T(a,b,c);},\n S(a,b,c,d,f){if(0!==(d&2)&&0===(f&2)&&2!==(a.flags&2097155))throw new R.g(2);if(1===(a.flags&2097155))throw new R.g(2);if(!a.l.S)throw new R.g(43);return a.l.S(a,b,c,d,f)},V(a,b,c,d,f){u(0<=c);return a.l.V?a.l.V(a,b,c,d,f):0},qb:()=>0,fa(a,b,c){if(!a.l.fa)throw new R.g(59);return a.l.fa(a,b,c)},readFile(a,b={}){b.flags=b.flags||0;b.encoding=b.encoding||\"binary\";if(\"utf8\"!==b.encoding&&\"binary\"!==b.encoding)throw Error(`Invalid encoding type \"${b.encoding}\"`);var c,d=R.open(a,b.flags);a=R.stat(a).size;\n var f=new Uint8Array(a);R.read(d,f,0,a,0);\"utf8\"===b.encoding?c=hb(f,0):\"binary\"===b.encoding&&(c=f);R.close(d);return c},writeFile(a,b,c={}){c.flags=c.flags||577;a=R.open(a,c.flags,c.mode);if(\"string\"==typeof b){var d=new Uint8Array(jb(b)+1);b=kb(b,d,0,d.length);R.write(a,d,0,b,void 0,c.Ca);}else if(ArrayBuffer.isView(b))R.write(a,b,0,b.byteLength,void 0,c.Ca);else throw Error(\"Unsupported data type\");R.close(a);},cwd:()=>R.oa,chdir(a){a=V(a,{B:!0});if(null===a.node)throw new R.g(44);if(!T(a.node.mode))throw new R.g(54);\n var b=Bb(a.node,\"x\");if(b)throw new R.g(b);R.oa=a.path;},R(a,b,c){u(!R.R.Y,\"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)\");R.R.Y=!0;Nb();e.stdin=a||e.stdin;e.stdout=b||e.stdout;e.stderr=c||e.stderr;e.stdin?R.L(\"/dev\",\"stdin\",e.stdin):R.symlink(\"/dev/tty\",\"/dev/stdin\");e.stdout?R.L(\"/dev\",\"stdout\",null,e.stdout):R.symlink(\"/dev/tty\",\"/dev/stdout\");e.stderr?R.L(\"/dev\",\"stderr\",\n null,e.stderr):R.symlink(\"/dev/tty1\",\"/dev/stderr\");a=R.open(\"/dev/stdin\",0);b=R.open(\"/dev/stdout\",1);c=R.open(\"/dev/stderr\",1);u(0===a.fd,`invalid handle for stdin (${a.fd})`);u(1===b.fd,`invalid handle for stdout (${b.fd})`);u(2===c.fd,`invalid handle for stderr (${c.fd})`);},sb(){R.R.Y=!1;Rb(0);for(var a=0;a<R.streams.length;a++){var b=R.streams[a];b&&R.close(b);}},jb(a,b){a=Ob(a,b);return a.exists?a.object:null},hb(a,b){a=\"string\"==typeof a?a:Db(a);for(b=b.split(\"/\").reverse();b.length;){var c=\n b.pop();if(c){var d=P(a+\"/\"+c);try{R.mkdir(d);}catch(f){}a=d;}}return d},L(a,b,c,d){a=ab(\"string\"==typeof a?a:Db(a),b);b=xb(!!c,!!d);R.L.ha||(R.L.ha=64);var f=R.M(R.L.ha++,0);ob(f,{open(h){h.seekable=!1;},close(){d&&d.buffer&&d.buffer.length&&d(10);},read(h,m,p,y){for(var q=0,x=0;x<y;x++){try{var t=c();}catch(B){throw new R.g(29);}if(void 0===t&&0===q)throw new R.g(6);if(null===t||void 0===t)break;q++;m[p+x]=t;}q&&(h.node.timestamp=Date.now());return q},write(h,m,p,y){for(var q=0;q<y;q++)try{d(m[p+q]);}catch(x){throw new R.g(29);\n }y&&(h.node.timestamp=Date.now());return q}});return Mb(a,b,f)},fb(a,b,c,d,f){function h(){this.ga=!1;this.I=[];}function m(t,B,l,w,v){t=t.node.m;if(v>=t.length)return 0;w=Math.min(t.length-v,w);u(0<=w);if(t.slice)for(var A=0;A<w;A++)B[l+A]=t[v+A];else for(A=0;A<w;A++)B[l+A]=t.get(v+A);return w}h.prototype.get=function(t){if(!(t>this.length-1||0>t)){var B=t%this.chunkSize;return this.sa(t/this.chunkSize|0)[B]}};h.prototype.Ha=function(t){this.sa=t;};h.prototype.ma=function(){var t=new XMLHttpRequest;\n t.open(\"HEAD\",c,!1);t.send(null);if(!(200<=t.status&&300>t.status||304===t.status))throw Error(\"Couldn't load \"+c+\". Status: \"+t.status);var B=Number(t.getResponseHeader(\"Content-length\")),l,w=(l=t.getResponseHeader(\"Accept-Ranges\"))&&\"bytes\"===l;t=(l=t.getResponseHeader(\"Content-Encoding\"))&&\"gzip\"===l;var v=1048576;w||(v=B);var A=this;A.Ha(H=>{var N=H*v,O=(H+1)*v-1;O=Math.min(O,B-1);if(\"undefined\"==typeof A.I[H]){var fb=A.I;if(N>O)throw Error(\"invalid range (\"+N+\", \"+O+\") or no bytes requested!\");\n if(O>B-1)throw Error(\"only \"+B+\" bytes available! programmer error!\");var K=new XMLHttpRequest;K.open(\"GET\",c,!1);B!==v&&K.setRequestHeader(\"Range\",\"bytes=\"+N+\"-\"+O);K.responseType=\"arraybuffer\";K.overrideMimeType&&K.overrideMimeType(\"text/plain; charset=x-user-defined\");K.send(null);if(!(200<=K.status&&300>K.status||304===K.status))throw Error(\"Couldn't load \"+c+\". Status: \"+K.status);N=void 0!==K.response?new Uint8Array(K.response||[]):lb(K.responseText||\"\",!0);fb[H]=N;}if(\"undefined\"==typeof A.I[H])throw Error(\"doXHR failed!\");\n return A.I[H]});if(t||!B)v=B=1,v=B=this.sa(0).length,qa(\"LazyFiles on gzip forces download of the whole file when length is accessed\");this.za=B;this.ya=v;this.ga=!0;};if(\"undefined\"!=typeof XMLHttpRequest){if(!k)throw \"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var p=new h;Object.defineProperties(p,{length:{get:function(){this.ga||this.ma();return this.za}},chunkSize:{get:function(){this.ga||this.ma();return this.ya}}});var y=\n void 0;}else y=c,p=void 0;var q=Pb(a,b,d,f);p?q.m=p:y&&(q.m=null,q.url=y);Object.defineProperties(q,{o:{get:function(){return this.m.length}}});var x={};Object.keys(q.l).forEach(t=>{var B=q.l[t];x[t]=function(){Qb(q);return B.apply(null,arguments)};});x.read=(t,B,l,w,v)=>{Qb(q);return m(t,B,l,w,v)};x.S=(t,B,l)=>{Qb(q);var w=sb();if(!w)throw new R.g(48);m(t,E,w,B,l);return {Ra:w,Aa:!0}};q.l=x;return q},Ya(){g(\"FS.absolutePath has been removed; use PATH_FS.resolve instead\");},eb(){g(\"FS.createFolder has been removed; use FS.mkdir instead\");},\n gb(){g(\"FS.createLink has been removed; use FS.symlink instead\");},mb(){g(\"FS.joinPath has been removed; use PATH.join instead\");},pb(){g(\"FS.mmapAlloc has been replaced by the top level function mmapAlloc\");},vb(){g(\"FS.standardizePath has been removed; use PATH.normalize instead\");}},X=a=>{u(\"number\"==typeof a,`UTF8ToString expects a number (got ${typeof a})`);return a?hb(ta,a):\"\"};\n function Sb(a,b){if(\"/\"===b.charAt(0))return b;a=-100===a?R.cwd():W(a).path;if(0==b.length)throw new R.g(44);return P(a+\"/\"+b)}var Tb=void 0;function Y(){u(void 0!=Tb);var a=F[+Tb>>2];Tb+=4;return a}\n var Ub=(a,b,c)=>{u(\"number\"==typeof c,\"stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!\");return kb(a,ta,b,c)},Vb=a=>0===a%4&&(0!==a%100||0===a%400),Wb=[0,31,60,91,121,152,182,213,244,274,305,335],Xb=[0,31,59,90,120,151,181,212,243,273,304,334],Zb=a=>{var b=jb(a)+1,c=Yb(b);c&&Ub(a,c,b);return c},$b={},bc=()=>{if(!ac){var a={USER:\"web_user\",LOGNAME:\"web_user\",PATH:\"/\",PWD:\"/\",HOME:\"/home/web_user\",LANG:(\"object\"==typeof navigator&&\n navigator.languages&&navigator.languages[0]||\"C\").replace(\"-\",\"_\")+\".UTF-8\",_:da||\"./this.program\"},b;for(b in $b)void 0===$b[b]?delete a[b]:a[b]=$b[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);ac=c;}return ac},ac,cc=[31,29,31,30,31,30,31,31,30,31,30,31],dc=[31,28,31,30,31,30,31,31,30,31,30,31],ec=(a,b)=>{u(0<=a.length,\"writeArrayToMemory array must have a length (should be an array or typed array)\");E.set(a,b);},fc=[],Z,gc=a=>{var b=fc[a];b||(a>=fc.length&&(fc.length=a+1),fc[a]=b=Z.get(a));u(Z.get(a)==\n b,\"JavaScript-side Wasm function table mirror is out of date!\");return b},hc=a=>{var b=e[\"_\"+a];u(b,\"Cannot call unknown function \"+a+\", make sure it is exported\");return b},ic,jc=[];function kc(a,b,c,d){a||=this;this.parent=a;this.s=a.s;this.A=null;this.id=R.Na++;this.name=b;this.mode=c;this.h={};this.l={};this.rdev=d;}\n Object.defineProperties(kc.prototype,{read:{get:function(){return 365===(this.mode&365)},set:function(a){a?this.mode|=365:this.mode&=-366;}},write:{get:function(){return 146===(this.mode&146)},set:function(a){a?this.mode|=146:this.mode&=-147;}},Ma:{get:function(){return T(this.mode)}},La:{get:function(){return 8192===(this.mode&61440)}}});R.wa=kc;\n R.ib=(a,b,c,d,f,h,m,p,y,q)=>{function x(l){function w(v){q&&q();if(!p){var A=a,H=b;A&&(A=\"string\"==typeof A?A:Db(A),H=b?P(A+\"/\"+b):A);A=xb(d,f);H=R.create(H,A);if(v){if(\"string\"==typeof v){for(var N=Array(v.length),O=0,fb=v.length;O<fb;++O)N[O]=v.charCodeAt(O);v=N;}R.chmod(H,A|146);N=R.open(H,577);R.write(N,v,0,v.length,0,y);R.close(N);R.chmod(H,A);}}h&&h();Na(B);}wb(l,t,w,()=>{m&&m();Na(B);})||w(l);}var t=b?db(P(a+\"/\"+b)):a,B=La(`cp ${t}`);Ma(B);\"string\"==typeof c?ub(c,l=>x(l),m):x(c);};Nb();R.F=Array(4096);\n R.s(S,{},\"/\");R.mkdir(\"/tmp\");R.mkdir(\"/home\");R.mkdir(\"/home/web_user\");(function(){R.mkdir(\"/dev\");ob(R.M(1,3),{read:()=>0,write:(d,f,h,m)=>m});Mb(\"/dev/null\",R.M(1,3));nb(R.M(5,0),qb);nb(R.M(6,0),rb);Mb(\"/dev/tty\",R.M(5,0));Mb(\"/dev/tty1\",R.M(6,0));var a=new Uint8Array(1024),b=0,c=()=>{0===b&&(b=cb(a).byteLength);return a[--b]};R.L(\"/dev\",\"random\",c);R.L(\"/dev\",\"urandom\",c);R.mkdir(\"/dev/shm\");R.mkdir(\"/dev/shm/tmp\");})();\n (function(){R.mkdir(\"/proc\");var a=R.mkdir(\"/proc/self\");R.mkdir(\"/proc/self/fd\");R.s({s(){var b=R.createNode(a,\"fd\",16895,73);b.h={lookup(c,d){var f=W(+d);c={parent:null,s:{ua:\"fake\"},h:{readlink:()=>f.path}};return c.parent=c}};return b}},{},\"/proc/self/fd\");})();R.Fa={MEMFS:S};\n var oc={__syscall_dup3:function(a,b,c){try{var d=W(a);u(!c);if(d.fd===b)return -28;var f=R.qa(b);f&&R.close(f);return Kb(d,b).fd}catch(h){if(\"undefined\"==typeof R||\"ErrnoError\"!==h.name)throw h;return -h.u}},__syscall_fcntl64:function(a,b,c){Tb=c;try{var d=W(a);switch(b){case 0:var f=Y();if(0>f)return -28;for(;R.streams[f];)f++;return Kb(d,f).fd;case 1:case 2:return 0;case 3:return d.flags;case 4:return f=Y(),d.flags|=f,0;case 5:return f=Y(),ua[f+0>>1]=2,0;case 6:case 7:return 0;case 16:case 8:return -28;\n case 9:return F[lc()>>2]=28,-1;default:return -28}}catch(h){if(\"undefined\"==typeof R||\"ErrnoError\"!==h.name)throw h;return -h.u}},__syscall_ioctl:function(a,b,c){Tb=c;try{var d=W(a);switch(b){case 21509:return d.tty?0:-59;case 21505:if(!d.tty)return -59;if(d.tty.K.Ia){a=[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];var f=Y();F[f>>2]=25856;F[f+4>>2]=5;F[f+8>>2]=191;F[f+12>>2]=35387;for(var h=0;32>h;h++)E[f+h+17>>0]=a[h]||0;}return 0;case 21510:case 21511:case 21512:return d.tty?\n 0:-59;case 21506:case 21507:case 21508:if(!d.tty)return -59;if(d.tty.K.Ja)for(f=Y(),a=[],h=0;32>h;h++)a.push(E[f+h+17>>0]);return 0;case 21519:if(!d.tty)return -59;f=Y();return F[f>>2]=0;case 21520:return d.tty?-28:-59;case 21531:return f=Y(),R.fa(d,b,f);case 21523:if(!d.tty)return -59;d.tty.K.Ka&&(h=[24,80],f=Y(),ua[f>>1]=h[0],ua[f+2>>1]=h[1]);return 0;case 21524:return d.tty?0:-59;case 21515:return d.tty?0:-59;default:return -28}}catch(m){if(\"undefined\"==typeof R||\"ErrnoError\"!==m.name)throw m;return -m.u}},\n __syscall_openat:function(a,b,c,d){Tb=d;try{b=X(b);b=Sb(a,b);var f=d?Y():0;return R.open(b,c,f).fd}catch(h){if(\"undefined\"==typeof R||\"ErrnoError\"!==h.name)throw h;return -h.u}},__syscall_readlinkat:function(a,b,c,d){try{b=X(b);b=Sb(a,b);if(0>=d)return -28;var f=R.readlink(b),h=Math.min(d,jb(f)),m=E[c+h];Ub(f,c,d+1);E[c+h]=m;return h}catch(p){if(\"undefined\"==typeof R||\"ErrnoError\"!==p.name)throw p;return -p.u}},__syscall_renameat:function(a,b,c,d){try{return b=X(b),d=X(d),b=Sb(a,b),d=Sb(c,d),R.rename(b,\n d),0}catch(f){if(\"undefined\"==typeof R||\"ErrnoError\"!==f.name)throw f;return -f.u}},__syscall_rmdir:function(a){try{return a=X(a),R.rmdir(a),0}catch(b){if(\"undefined\"==typeof R||\"ErrnoError\"!==b.name)throw b;return -b.u}},__syscall_unlinkat:function(a,b,c){try{return b=X(b),b=Sb(a,b),0===c?R.unlink(b):512===c?R.rmdir(b):g(\"Invalid flags passed to unlinkat\"),0}catch(d){if(\"undefined\"==typeof R||\"ErrnoError\"!==d.name)throw d;return -d.u}},_emscripten_get_now_is_monotonic:()=>1,_emscripten_throw_longjmp:()=>\n {throw Infinity;},_gmtime_js:function(a,b){a=-9007199254740992>a||9007199254740992<a?NaN:Number(a);a=new Date(1E3*a);F[b>>2]=a.getUTCSeconds();F[b+4>>2]=a.getUTCMinutes();F[b+8>>2]=a.getUTCHours();F[b+12>>2]=a.getUTCDate();F[b+16>>2]=a.getUTCMonth();F[b+20>>2]=a.getUTCFullYear()-1900;F[b+24>>2]=a.getUTCDay();F[b+28>>2]=(a.getTime()-Date.UTC(a.getUTCFullYear(),0,1,0,0,0,0))/864E5|0;},_localtime_js:function(a,b){a=-9007199254740992>a||9007199254740992<a?NaN:Number(a);a=new Date(1E3*a);F[b>>2]=a.getSeconds();\n F[b+4>>2]=a.getMinutes();F[b+8>>2]=a.getHours();F[b+12>>2]=a.getDate();F[b+16>>2]=a.getMonth();F[b+20>>2]=a.getFullYear()-1900;F[b+24>>2]=a.getDay();F[b+28>>2]=(Vb(a.getFullYear())?Wb:Xb)[a.getMonth()]+a.getDate()-1|0;F[b+36>>2]=-(60*a.getTimezoneOffset());var c=(new Date(a.getFullYear(),6,1)).getTimezoneOffset(),d=(new Date(a.getFullYear(),0,1)).getTimezoneOffset();F[b+32>>2]=(c!=d&&a.getTimezoneOffset()==Math.min(d,c))|0;},_mktime_js:function(a){var b=new Date(F[a+20>>2]+1900,F[a+16>>2],F[a+12>>\n 2],F[a+8>>2],F[a+4>>2],F[a>>2],0),c=F[a+32>>2],d=b.getTimezoneOffset(),f=(new Date(b.getFullYear(),6,1)).getTimezoneOffset(),h=(new Date(b.getFullYear(),0,1)).getTimezoneOffset(),m=Math.min(h,f);0>c?F[a+32>>2]=Number(f!=h&&m==d):0<c!=(m==d)&&(f=Math.max(h,f),b.setTime(b.getTime()+6E4*((0<c?m:f)-d)));F[a+24>>2]=b.getDay();F[a+28>>2]=(Vb(b.getFullYear())?Wb:Xb)[b.getMonth()]+b.getDate()-1|0;F[a>>2]=b.getSeconds();F[a+4>>2]=b.getMinutes();F[a+8>>2]=b.getHours();F[a+12>>2]=b.getDate();F[a+16>>2]=b.getMonth();\n F[a+20>>2]=b.getYear();a=b.getTime();isNaN(a)?(F[lc()>>2]=61,a=-1):a/=1E3;return BigInt(a)},_tzset_js:(a,b,c)=>{function d(y){return (y=y.toTimeString().match(/\\(([A-Za-z ]+)\\)$/))?y[1]:\"GMT\"}var f=(new Date).getFullYear(),h=new Date(f,0,1),m=new Date(f,6,1);f=h.getTimezoneOffset();var p=m.getTimezoneOffset();G[a>>2]=60*Math.max(f,p);F[b>>2]=Number(f!=p);a=d(h);b=d(m);a=Zb(a);b=Zb(b);p<f?(G[c>>2]=a,G[c+4>>2]=b):(G[c>>2]=b,G[c+4>>2]=a);},abort:()=>{g(\"native code called abort()\");},emscripten_date_now:()=>\n Date.now(),emscripten_get_now:()=>performance.now(),emscripten_resize_heap:a=>{var b=ta.length;a>>>=0;u(a>b);if(2147483648<a)return z(`Cannot enlarge memory, requested ${a} bytes, but the limit is ${2147483648} bytes!`),!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);var f=Math;d=Math.max(a,d);f=f.min.call(f,2147483648,d+(65536-d%65536)%65536);a:{d=f;var h=ra.buffer,m=(d-h.byteLength+65535)/65536;try{ra.grow(m);ya();var p=1;break a}catch(y){z(`growMemory: Attempted to grow heap from ${h.byteLength} bytes to ${d} bytes, but got error: ${y}`);}p=\n void 0;}if(p)return !0}z(`Failed to grow the heap from ${b} bytes to ${f} bytes, not enough memory!`);return !1},environ_get:(a,b)=>{var c=0;bc().forEach((d,f)=>{var h=b+c;f=G[a+4*f>>2]=h;for(h=0;h<d.length;++h)u(d.charCodeAt(h)===(d.charCodeAt(h)&255)),E[f++>>0]=d.charCodeAt(h);E[f>>0]=0;c+=d.length+1;});return 0},environ_sizes_get:(a,b)=>{var c=bc();G[a>>2]=c.length;var d=0;c.forEach(f=>d+=f.length+1);G[b>>2]=d;return 0},exit:a=>{mc();sa=!0;ea(a,new pa(a));},fd_close:function(a){try{var b=W(a);R.close(b);\n return 0}catch(c){if(\"undefined\"==typeof R||\"ErrnoError\"!==c.name)throw c;return c.u}},fd_read:function(a,b,c,d){try{a:{var f=W(a);a=b;for(var h,m=b=0;m<c;m++){var p=G[a>>2],y=G[a+4>>2];a+=8;var q=R.read(f,E,p,y,h);if(0>q){var x=-1;break a}b+=q;if(q<y)break;\"undefined\"!==typeof h&&(h+=q);}x=b;}G[d>>2]=x;return 0}catch(t){if(\"undefined\"==typeof R||\"ErrnoError\"!==t.name)throw t;return t.u}},fd_seek:function(a,b,c,d){b=-9007199254740992>b||9007199254740992<b?NaN:Number(b);try{if(isNaN(b))return 61;var f=\n W(a);R.D(f,b,c);wa[d>>3]=BigInt(f.position);f.ea&&0===b&&0===c&&(f.ea=null);return 0}catch(h){if(\"undefined\"==typeof R||\"ErrnoError\"!==h.name)throw h;return h.u}},fd_write:function(a,b,c,d){try{a:{var f=W(a);a=b;for(var h,m=b=0;m<c;m++){var p=G[a>>2],y=G[a+4>>2];a+=8;var q=R.write(f,E,p,y,h);if(0>q){var x=-1;break a}b+=q;\"undefined\"!==typeof h&&(h+=q);}x=b;}G[d>>2]=x;return 0}catch(t){if(\"undefined\"==typeof R||\"ErrnoError\"!==t.name)throw t;return t.u}},invoke_vii:nc,strftime:(a,b,c,d)=>{function f(l,\n w,v){for(l=\"number\"==typeof l?l.toString():l||\"\";l.length<w;)l=v[0]+l;return l}function h(l,w){return f(l,w,\"0\")}function m(l,w){function v(H){return 0>H?-1:0<H?1:0}var A;0===(A=v(l.getFullYear()-w.getFullYear()))&&0===(A=v(l.getMonth()-w.getMonth()))&&(A=v(l.getDate()-w.getDate()));return A}function p(l){switch(l.getDay()){case 0:return new Date(l.getFullYear()-1,11,29);case 1:return l;case 2:return new Date(l.getFullYear(),0,3);case 3:return new Date(l.getFullYear(),0,2);case 4:return new Date(l.getFullYear(),\n 0,1);case 5:return new Date(l.getFullYear()-1,11,31);case 6:return new Date(l.getFullYear()-1,11,30)}}function y(l){var w=l.O;for(l=new Date((new Date(l.P+1900,0,1)).getTime());0<w;){var v=l.getMonth(),A=(Vb(l.getFullYear())?cc:dc)[v];if(w>A-l.getDate())w-=A-l.getDate()+1,l.setDate(1),11>v?l.setMonth(v+1):(l.setMonth(0),l.setFullYear(l.getFullYear()+1));else {l.setDate(l.getDate()+w);break}}v=new Date(l.getFullYear()+1,0,4);w=p(new Date(l.getFullYear(),0,4));v=p(v);return 0>=m(w,l)?0>=m(v,l)?l.getFullYear()+\n 1:l.getFullYear():l.getFullYear()-1}var q=G[d+40>>2];d={Va:F[d>>2],Ua:F[d+4>>2],$:F[d+8>>2],la:F[d+12>>2],aa:F[d+16>>2],P:F[d+20>>2],H:F[d+24>>2],O:F[d+28>>2],wb:F[d+32>>2],Ta:F[d+36>>2],Wa:q?X(q):\"\"};c=X(c);q={\"%c\":\"%a %b %d %H:%M:%S %Y\",\"%D\":\"%m/%d/%y\",\"%F\":\"%Y-%m-%d\",\"%h\":\"%b\",\"%r\":\"%I:%M:%S %p\",\"%R\":\"%H:%M\",\"%T\":\"%H:%M:%S\",\"%x\":\"%m/%d/%y\",\"%X\":\"%H:%M:%S\",\"%Ec\":\"%c\",\"%EC\":\"%C\",\"%Ex\":\"%m/%d/%y\",\"%EX\":\"%H:%M:%S\",\"%Ey\":\"%y\",\"%EY\":\"%Y\",\"%Od\":\"%d\",\"%Oe\":\"%e\",\"%OH\":\"%H\",\"%OI\":\"%I\",\"%Om\":\"%m\",\"%OM\":\"%M\",\n \"%OS\":\"%S\",\"%Ou\":\"%u\",\"%OU\":\"%U\",\"%OV\":\"%V\",\"%Ow\":\"%w\",\"%OW\":\"%W\",\"%Oy\":\"%y\"};for(var x in q)c=c.replace(new RegExp(x,\"g\"),q[x]);var t=\"Sunday Monday Tuesday Wednesday Thursday Friday Saturday\".split(\" \"),B=\"January February March April May June July August September October November December\".split(\" \");q={\"%a\":l=>t[l.H].substring(0,3),\"%A\":l=>t[l.H],\"%b\":l=>B[l.aa].substring(0,3),\"%B\":l=>B[l.aa],\"%C\":l=>h((l.P+1900)/100|0,2),\"%d\":l=>h(l.la,2),\"%e\":l=>f(l.la,2,\" \"),\"%g\":l=>y(l).toString().substring(2),\n \"%G\":l=>y(l),\"%H\":l=>h(l.$,2),\"%I\":l=>{l=l.$;0==l?l=12:12<l&&(l-=12);return h(l,2)},\"%j\":l=>{for(var w=0,v=0;v<=l.aa-1;w+=(Vb(l.P+1900)?cc:dc)[v++]);return h(l.la+w,3)},\"%m\":l=>h(l.aa+1,2),\"%M\":l=>h(l.Ua,2),\"%n\":()=>\"\\n\",\"%p\":l=>0<=l.$&&12>l.$?\"AM\":\"PM\",\"%S\":l=>h(l.Va,2),\"%t\":()=>\"\\t\",\"%u\":l=>l.H||7,\"%U\":l=>h(Math.floor((l.O+7-l.H)/7),2),\"%V\":l=>{var w=Math.floor((l.O+7-(l.H+6)%7)/7);2>=(l.H+371-l.O-2)%7&&w++;if(w)53==w&&(v=(l.H+371-l.O)%7,4==v||3==v&&Vb(l.P)||(w=1));else {w=52;var v=(l.H+7-l.O-1)%\n 7;(4==v||5==v&&Vb(l.P%400-1))&&w++;}return h(w,2)},\"%w\":l=>l.H,\"%W\":l=>h(Math.floor((l.O+7-(l.H+6)%7)/7),2),\"%y\":l=>(l.P+1900).toString().substring(2),\"%Y\":l=>l.P+1900,\"%z\":l=>{l=l.Ta;var w=0<=l;l=Math.abs(l)/60;return (w?\"+\":\"-\")+String(\"0000\"+(l/60*100+l%60)).slice(-4)},\"%Z\":l=>l.Wa,\"%%\":()=>\"%\"};c=c.replace(/%%/g,\"\\x00\\x00\");for(x in q)c.includes(x)&&(c=c.replace(new RegExp(x,\"g\"),q[x](d)));c=c.replace(/\\0\\0/g,\"%\");x=lb(c,!1);if(x.length>b)return 0;ec(x,a);return x.length-1},system:a=>{if(n){if(!a)return 1;\n a=X(a);if(!a.length)return 0;a=require$1(\"child_process\").ub(a,[],{tb:!0,stdio:\"inherit\"});var b=(c,d)=>c<<8|d;return null===a.status?b(0,(c=>{switch(c){case \"SIGHUP\":return 1;case \"SIGQUIT\":return 3;case \"SIGFPE\":return 8;case \"SIGKILL\":return 9;case \"SIGALRM\":return 14;case \"SIGTERM\":return 15}return 2})(a.signal)):a.status<<8|0}if(!a)return 0;F[lc()>>2]=52;return -1}},L=function(){var a={env:oc,wasi_snapshot_preview1:oc};Ma(\"wasm-instantiate\");var b=e;Ta(a,function(c){u(e===b,\"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?\");\n b=null;L=c.instance.exports;ra=L.memory;u(ra,\"memory not found in wasm exports\");ya();Z=L.__indirect_function_table;u(Z,\"table not found in wasm exports\");Fa.unshift(L.__wasm_call_ctors);Na(\"wasm-instantiate\");}).catch(ba);return {}}();e._lua_checkstack=J(\"lua_checkstack\");e._lua_xmove=J(\"lua_xmove\");e._lua_atpanic=J(\"lua_atpanic\");e._lua_version=J(\"lua_version\");e._lua_absindex=J(\"lua_absindex\");e._lua_gettop=J(\"lua_gettop\");e._lua_settop=J(\"lua_settop\");e._lua_closeslot=J(\"lua_closeslot\");\n e._lua_rotate=J(\"lua_rotate\");e._lua_copy=J(\"lua_copy\");e._lua_pushvalue=J(\"lua_pushvalue\");e._lua_type=J(\"lua_type\");e._lua_typename=J(\"lua_typename\");e._lua_iscfunction=J(\"lua_iscfunction\");e._lua_isinteger=J(\"lua_isinteger\");e._lua_isnumber=J(\"lua_isnumber\");e._lua_isstring=J(\"lua_isstring\");e._lua_isuserdata=J(\"lua_isuserdata\");e._lua_rawequal=J(\"lua_rawequal\");e._lua_arith=J(\"lua_arith\");e._lua_compare=J(\"lua_compare\");e._lua_stringtonumber=J(\"lua_stringtonumber\");e._lua_tonumberx=J(\"lua_tonumberx\");\n e._lua_tointegerx=J(\"lua_tointegerx\");e._lua_toboolean=J(\"lua_toboolean\");e._lua_tolstring=J(\"lua_tolstring\");e._lua_rawlen=J(\"lua_rawlen\");e._lua_tocfunction=J(\"lua_tocfunction\");e._lua_touserdata=J(\"lua_touserdata\");e._lua_tothread=J(\"lua_tothread\");e._lua_topointer=J(\"lua_topointer\");e._lua_pushnil=J(\"lua_pushnil\");e._lua_pushnumber=J(\"lua_pushnumber\");e._lua_pushinteger=J(\"lua_pushinteger\");e._lua_pushlstring=J(\"lua_pushlstring\");e._lua_pushstring=J(\"lua_pushstring\");e._lua_pushcclosure=J(\"lua_pushcclosure\");\n e._lua_pushboolean=J(\"lua_pushboolean\");e._lua_pushlightuserdata=J(\"lua_pushlightuserdata\");e._lua_pushthread=J(\"lua_pushthread\");e._lua_getglobal=J(\"lua_getglobal\");e._lua_gettable=J(\"lua_gettable\");e._lua_getfield=J(\"lua_getfield\");e._lua_geti=J(\"lua_geti\");e._lua_rawget=J(\"lua_rawget\");e._lua_rawgeti=J(\"lua_rawgeti\");e._lua_rawgetp=J(\"lua_rawgetp\");e._lua_createtable=J(\"lua_createtable\");e._lua_getmetatable=J(\"lua_getmetatable\");e._lua_getiuservalue=J(\"lua_getiuservalue\");e._lua_setglobal=J(\"lua_setglobal\");\n e._lua_settable=J(\"lua_settable\");e._lua_setfield=J(\"lua_setfield\");e._lua_seti=J(\"lua_seti\");e._lua_rawset=J(\"lua_rawset\");e._lua_rawsetp=J(\"lua_rawsetp\");e._lua_rawseti=J(\"lua_rawseti\");e._lua_setmetatable=J(\"lua_setmetatable\");e._lua_setiuservalue=J(\"lua_setiuservalue\");e._lua_callk=J(\"lua_callk\");e._lua_pcallk=J(\"lua_pcallk\");e._lua_load=J(\"lua_load\");e._lua_dump=J(\"lua_dump\");e._lua_status=J(\"lua_status\");e._lua_error=J(\"lua_error\");e._lua_next=J(\"lua_next\");e._lua_toclose=J(\"lua_toclose\");\n e._lua_concat=J(\"lua_concat\");e._lua_len=J(\"lua_len\");e._lua_getallocf=J(\"lua_getallocf\");e._lua_setallocf=J(\"lua_setallocf\");e._lua_setwarnf=J(\"lua_setwarnf\");e._lua_warning=J(\"lua_warning\");e._lua_newuserdatauv=J(\"lua_newuserdatauv\");e._lua_getupvalue=J(\"lua_getupvalue\");e._lua_setupvalue=J(\"lua_setupvalue\");e._lua_upvalueid=J(\"lua_upvalueid\");e._lua_upvaluejoin=J(\"lua_upvaluejoin\");e._luaL_traceback=J(\"luaL_traceback\");e._lua_getstack=J(\"lua_getstack\");e._lua_getinfo=J(\"lua_getinfo\");\n e._luaL_buffinit=J(\"luaL_buffinit\");e._luaL_addstring=J(\"luaL_addstring\");e._luaL_prepbuffsize=J(\"luaL_prepbuffsize\");e._luaL_addvalue=J(\"luaL_addvalue\");e._luaL_pushresult=J(\"luaL_pushresult\");e._luaL_argerror=J(\"luaL_argerror\");e._luaL_typeerror=J(\"luaL_typeerror\");e._luaL_getmetafield=J(\"luaL_getmetafield\");e._luaL_where=J(\"luaL_where\");e._luaL_fileresult=J(\"luaL_fileresult\");var lc=J(\"__errno_location\");e._luaL_execresult=J(\"luaL_execresult\");e._luaL_newmetatable=J(\"luaL_newmetatable\");\n e._luaL_setmetatable=J(\"luaL_setmetatable\");e._luaL_testudata=J(\"luaL_testudata\");e._luaL_checkudata=J(\"luaL_checkudata\");e._luaL_optlstring=J(\"luaL_optlstring\");e._luaL_checklstring=J(\"luaL_checklstring\");e._luaL_checkstack=J(\"luaL_checkstack\");e._luaL_checktype=J(\"luaL_checktype\");e._luaL_checkany=J(\"luaL_checkany\");e._luaL_checknumber=J(\"luaL_checknumber\");e._luaL_optnumber=J(\"luaL_optnumber\");e._luaL_checkinteger=J(\"luaL_checkinteger\");e._luaL_optinteger=J(\"luaL_optinteger\");\n e._luaL_setfuncs=J(\"luaL_setfuncs\");e._luaL_addlstring=J(\"luaL_addlstring\");e._luaL_pushresultsize=J(\"luaL_pushresultsize\");e._luaL_buffinitsize=J(\"luaL_buffinitsize\");e._luaL_ref=J(\"luaL_ref\");e._luaL_unref=J(\"luaL_unref\");e._luaL_loadfilex=J(\"luaL_loadfilex\");e._luaL_loadbufferx=J(\"luaL_loadbufferx\");e._luaL_loadstring=J(\"luaL_loadstring\");e._luaL_callmeta=J(\"luaL_callmeta\");e._luaL_len=J(\"luaL_len\");e._luaL_tolstring=J(\"luaL_tolstring\");e._luaL_getsubtable=J(\"luaL_getsubtable\");\n e._luaL_requiref=J(\"luaL_requiref\");e._luaL_addgsub=J(\"luaL_addgsub\");e._luaL_gsub=J(\"luaL_gsub\");e._luaL_newstate=J(\"luaL_newstate\");e._lua_newstate=J(\"lua_newstate\");e._free=J(\"free\");e._realloc=J(\"realloc\");var Rb=e._fflush=J(\"fflush\");e._luaL_checkversion_=J(\"luaL_checkversion_\");e._luaopen_base=J(\"luaopen_base\");e._luaopen_coroutine=J(\"luaopen_coroutine\");e._lua_newthread=J(\"lua_newthread\");e._lua_yieldk=J(\"lua_yieldk\");e._lua_isyieldable=J(\"lua_isyieldable\");e._lua_resetthread=J(\"lua_resetthread\");\n e._lua_resume=J(\"lua_resume\");e._luaopen_debug=J(\"luaopen_debug\");e._lua_gethookmask=J(\"lua_gethookmask\");e._lua_gethook=J(\"lua_gethook\");e._lua_gethookcount=J(\"lua_gethookcount\");e._lua_getlocal=J(\"lua_getlocal\");e._lua_sethook=J(\"lua_sethook\");e._lua_setlocal=J(\"lua_setlocal\");e._lua_setcstacklimit=J(\"lua_setcstacklimit\");var Yb=e._malloc=J(\"malloc\");e._luaL_openlibs=J(\"luaL_openlibs\");e._luaopen_package=J(\"luaopen_package\");e._luaopen_table=J(\"luaopen_table\");e._luaopen_io=J(\"luaopen_io\");\n e._luaopen_os=J(\"luaopen_os\");e._luaopen_string=J(\"luaopen_string\");e._luaopen_math=J(\"luaopen_math\");e._luaopen_utf8=J(\"luaopen_utf8\");e._lua_close=J(\"lua_close\");var pc=J(\"setThrew\"),qc=()=>(qc=L.emscripten_stack_init)(),Aa=()=>(Aa=L.emscripten_stack_get_end)(),rc=J(\"stackSave\"),sc=J(\"stackRestore\"),tc=J(\"stackAlloc\");function nc(a,b,c){var d=rc();try{gc(a)(b,c);}catch(f){sc(d);if(f!==f+0)throw f;pc(1,0);}}e.ENV=$b;\n e.ccall=(a,b,c,d)=>{var f={string:q=>{var x=0;if(null!==q&&void 0!==q&&0!==q){x=jb(q)+1;var t=tc(x);Ub(q,t,x);x=t;}return x},array:q=>{var x=tc(q.length);ec(q,x);return x}};a=hc(a);var h=[],m=0;u(\"array\"!==b,'Return type should not be \"array\".');if(d)for(var p=0;p<d.length;p++){var y=f[c[p]];y?(0===m&&(m=rc()),h[p]=y(d[p])):h[p]=d[p];}c=a.apply(null,h);return c=function(q){0!==m&&sc(m);return \"string\"===b?X(q):\"boolean\"===b?!!q:q}(c)};\n e.addFunction=(a,b)=>{u(\"undefined\"!=typeof a);if(!ic){ic=new WeakMap;var c=Z.length;if(ic)for(var d=0;d<0+c;d++){var f=gc(d);f&&ic.set(f,d);}}if(c=ic.get(a)||0)return c;if(jc.length)c=jc.pop();else {try{Z.grow(1);}catch(p){if(!(p instanceof RangeError))throw p;throw \"Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.\";}c=Z.length-1;}try{d=c,Z.set(d,a),fc[d]=Z.get(d);}catch(p){if(!(p instanceof TypeError))throw p;u(\"undefined\"!=typeof b,\"Missing signature argument to addFunction: \"+a);if(\"function\"==typeof WebAssembly.Function){d=\n WebAssembly.Function;f={i:\"i32\",j:\"i64\",f:\"f32\",d:\"f64\",e:\"externref\",p:\"i32\"};for(var h={parameters:[],results:\"v\"==b[0]?[]:[f[b[0]]]},m=1;m<b.length;++m)u(b[m]in f,\"invalid signature char: \"+b[m]),h.parameters.push(f[b[m]]);b=new d(h,a);}else {d=[1];f=b.slice(0,1);b=b.slice(1);h={i:127,p:127,j:126,f:125,d:124,e:111};d.push(96);m=b.length;u(16384>m);128>m?d.push(m):d.push(m%128|128,m>>7);for(m=0;m<b.length;++m)u(b[m]in h,\"invalid signature char: \"+b[m]),d.push(h[b[m]]);\"v\"==f?d.push(0):d.push(1,h[f]);\n b=[0,97,115,109,1,0,0,0,1];f=d.length;u(16384>f);128>f?b.push(f):b.push(f%128|128,f>>7);b.push.apply(b,d);b.push(2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0);b=new WebAssembly.Module(new Uint8Array(b));b=(new WebAssembly.Instance(b,{e:{f:a}})).exports.f;}d=c;Z.set(d,b);fc[d]=Z.get(d);}ic.set(a,c);return c};e.removeFunction=a=>{ic.delete(gc(a));Z.set(a,null);fc[a]=Z.get(a);jc.push(a);};\n e.setValue=function(a,b,c=\"i8\"){c.endsWith(\"*\")&&(c=\"*\");switch(c){case \"i1\":E[a>>0]=b;break;case \"i8\":E[a>>0]=b;break;case \"i16\":ua[a>>1]=b;break;case \"i32\":F[a>>2]=b;break;case \"i64\":wa[a>>3]=BigInt(b);break;case \"float\":va[a>>2]=b;break;case \"double\":xa[a>>3]=b;break;case \"*\":G[a>>2]=b;break;default:g(`invalid type for setValue: ${c}`);}};\n e.getValue=function(a,b=\"i8\"){b.endsWith(\"*\")&&(b=\"*\");switch(b){case \"i1\":return E[a>>0];case \"i8\":return E[a>>0];case \"i16\":return ua[a>>1];case \"i32\":return F[a>>2];case \"i64\":return wa[a>>3];case \"float\":return va[a>>2];case \"double\":return xa[a>>3];case \"*\":return G[a>>2];default:g(`invalid type for getValue: ${b}`);}};e.stringToUTF8=Ub;e.lengthBytesUTF8=jb;e.stringToNewUTF8=Zb;e.FS=R;\n \"writeI53ToI64 writeI53ToI64Clamped writeI53ToI64Signaling writeI53ToU64Clamped writeI53ToU64Signaling readI53FromI64 readI53FromU64 convertI32PairToI53 convertI32PairToI53Checked convertU32PairToI53 inetPton4 inetNtop4 inetPton6 inetNtop6 readSockaddr writeSockaddr getHostByName getCallstack emscriptenLog convertPCtoSourceLocation readEmAsmArgs jstoi_q jstoi_s listenOnce autoResumeAudioContext getDynCaller dynCall handleException runtimeKeepalivePush runtimeKeepalivePop callUserCallback maybeExit asmjsMangle handleAllocatorInit HandleAllocator getNativeTypeSize STACK_SIZE STACK_ALIGN POINTER_SIZE ASSERTIONS cwrap reallyNegative unSign strLen reSign formatString intArrayToString AsciiToString UTF16ToString stringToUTF16 lengthBytesUTF16 UTF32ToString stringToUTF32 lengthBytesUTF32 registerKeyEventCallback maybeCStringToJsString findEventTarget findCanvasEventTarget getBoundingClientRect fillMouseEventData registerMouseEventCallback registerWheelEventCallback registerUiEventCallback registerFocusEventCallback fillDeviceOrientationEventData registerDeviceOrientationEventCallback fillDeviceMotionEventData registerDeviceMotionEventCallback screenOrientation fillOrientationChangeEventData registerOrientationChangeEventCallback fillFullscreenChangeEventData registerFullscreenChangeEventCallback JSEvents_requestFullscreen JSEvents_resizeCanvasForFullscreen registerRestoreOldStyle hideEverythingExceptGivenElement restoreHiddenElements setLetterbox softFullscreenResizeWebGLRenderTarget doRequestFullscreen fillPointerlockChangeEventData registerPointerlockChangeEventCallback registerPointerlockErrorEventCallback requestPointerLock fillVisibilityChangeEventData registerVisibilityChangeEventCallback registerTouchEventCallback fillGamepadEventData registerGamepadEventCallback registerBeforeUnloadEventCallback fillBatteryEventData battery registerBatteryEventCallback setCanvasElementSize getCanvasElementSize jsStackTrace stackTrace checkWasiClock wasiRightsToMuslOFlags wasiOFlagsToMuslOFlags createDyncallWrapper safeSetTimeout setImmediateWrapped clearImmediateWrapped polyfillSetImmediate getPromise makePromise idsToPromises makePromiseCallback setMainLoop getSocketFromFD getSocketAddress FS_unlink FS_mkdirTree _setNetworkCallback\".split(\" \").forEach(function(a){\"undefined\"===typeof globalThis||\n Object.getOwnPropertyDescriptor(globalThis,a)||Object.defineProperty(globalThis,a,{configurable:!0,get(){var b=`\\`${a}\\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`,c=a;c.startsWith(\"_\")||(c=\"$\"+a);b+=` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${c}')`;Ua(a)&&(b+=\". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you\");Wa(b);}});Xa(a);});\"run addOnPreRun addOnInit addOnPreMain addOnExit addOnPostRun addRunDependency removeRunDependency FS_createFolder FS_createPath FS_createLazyFile FS_createLink FS_createDevice FS_readFile out err callMain abort wasmMemory wasmExports stackAlloc stackSave stackRestore getTempRet0 setTempRet0 writeStackCookie checkStackCookie MAX_INT53 MIN_INT53 bigintToI53Checked ptrToString zeroMemory exitJS getHeapMax growMemory MONTH_DAYS_REGULAR MONTH_DAYS_LEAP MONTH_DAYS_REGULAR_CUMULATIVE MONTH_DAYS_LEAP_CUMULATIVE isLeapYear ydayFromDate arraySum addDays ERRNO_CODES ERRNO_MESSAGES setErrNo DNS Protocols Sockets initRandomFill randomFill timers warnOnce UNWIND_CACHE readEmAsmArgsArray getExecutableName keepRuntimeAlive asyncLoad alignMemory mmapAlloc wasmTable noExitRuntime getCFunc uleb128Encode sigToWasmTypes generateFuncType convertJsFunctionToWasm freeTableIndexes functionsInTableMap getEmptyTableSlot updateTableMap getFunctionAddress PATH PATH_FS UTF8Decoder UTF8ArrayToString UTF8ToString stringToUTF8Array intArrayFromString stringToAscii UTF16Decoder stringToUTF8OnStack writeArrayToMemory JSEvents specialHTMLTargets currentFullscreenStrategy restoreOldWindowedStyle demangle demangleAll ExitStatus getEnvStrings doReadv doWritev promiseMap Browser wget SYSCALLS preloadPlugins FS_createPreloadedFile FS_modeStringToFlags FS_getMode FS_stdin_getChar_buffer FS_stdin_getChar FS_createDataFile MEMFS TTY PIPEFS SOCKFS\".split(\" \").forEach(Xa);\n var uc;Ja=function vc(){uc||wc();uc||(Ja=vc);};\n function wc(){if(!(0<Ia)){qc();var a=Aa();u(0==(a&3));0==a&&(a+=4);G[a>>2]=34821223;G[a+4>>2]=2310721022;G[0]=1668509029;if(e.preRun)for(\"function\"==typeof e.preRun&&(e.preRun=[e.preRun]);e.preRun.length;)a=e.preRun.shift(),Ea.unshift(a);for(;0<Ea.length;)Ea.shift()(e);if(!(0<Ia)){if(!uc&&(uc=!0,e.calledRun=!0,!sa)){u(!Ha);Ha=!0;za();e.noFSInit||R.R.Y||R.R();for(R.ta=!1;0<Fa.length;)Fa.shift()(e);aa(e);u(!e._main,'compiled without a main, but one is present. if you added it from JS, use Module[\"onRuntimeInitialized\"]');for(za();0<\n Ga.length;)Ga.shift()(e);}za();}}}function mc(){var a=qa,b=z,c=!1;qa=z=()=>{c=!0;};try{Rb(0),[\"stdout\",\"stderr\"].forEach(function(d){(d=Ob(\"/dev/\"+d))&&(d=mb[d.object.rdev])&&d.output&&d.output.length&&(c=!0);});}catch(d){}qa=a;z=b;c&&Wa(\"stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.\");}wc();\n\n\n return moduleArg.ready\n }\n );\n })();\n\n class LuaWasm {\n static async initialize(customWasmFileLocation, environmentVariables) {\n const module = await initWasmModule({\n locateFile: (path, scriptDirectory) => {\n return customWasmFileLocation || scriptDirectory + path;\n },\n preRun: (initializedModule) => {\n if (typeof environmentVariables === 'object') {\n Object.entries(environmentVariables).forEach(([k, v]) => (initializedModule.ENV[k] = v));\n }\n },\n });\n return new LuaWasm(module);\n }\n constructor(module) {\n this.referenceTracker = new WeakMap();\n this.referenceMap = new Map();\n this.availableReferences = [];\n this.module = module;\n this.luaL_checkversion_ = this.cwrap('luaL_checkversion_', null, ['number', 'number', 'number']);\n this.luaL_getmetafield = this.cwrap('luaL_getmetafield', 'number', ['number', 'number', 'string']);\n this.luaL_callmeta = this.cwrap('luaL_callmeta', 'number', ['number', 'number', 'string']);\n this.luaL_tolstring = this.cwrap('luaL_tolstring', 'string', ['number', 'number', 'number']);\n this.luaL_argerror = this.cwrap('luaL_argerror', 'number', ['number', 'number', 'string']);\n this.luaL_typeerror = this.cwrap('luaL_typeerror', 'number', ['number', 'number', 'string']);\n this.luaL_checklstring = this.cwrap('luaL_checklstring', 'string', ['number', 'number', 'number']);\n this.luaL_optlstring = this.cwrap('luaL_optlstring', 'string', ['number', 'number', 'string', 'number']);\n this.luaL_checknumber = this.cwrap('luaL_checknumber', 'number', ['number', 'number']);\n this.luaL_optnumber = this.cwrap('luaL_optnumber', 'number', ['number', 'number', 'number']);\n this.luaL_checkinteger = this.cwrap('luaL_checkinteger', 'number', ['number', 'number']);\n this.luaL_optinteger = this.cwrap('luaL_optinteger', 'number', ['number', 'number', 'number']);\n this.luaL_checkstack = this.cwrap('luaL_checkstack', null, ['number', 'number', 'string']);\n this.luaL_checktype = this.cwrap('luaL_checktype', null, ['number', 'number', 'number']);\n this.luaL_checkany = this.cwrap('luaL_checkany', null, ['number', 'number']);\n this.luaL_newmetatable = this.cwrap('luaL_newmetatable', 'number', ['number', 'string']);\n this.luaL_setmetatable = this.cwrap('luaL_setmetatable', null, ['number', 'string']);\n this.luaL_testudata = this.cwrap('luaL_testudata', 'number', ['number', 'number', 'string']);\n this.luaL_checkudata = this.cwrap('luaL_checkudata', 'number', ['number', 'number', 'string']);\n this.luaL_where = this.cwrap('luaL_where', null, ['number', 'number']);\n this.luaL_fileresult = this.cwrap('luaL_fileresult', 'number', ['number', 'number', 'string']);\n this.luaL_execresult = this.cwrap('luaL_execresult', 'number', ['number', 'number']);\n this.luaL_ref = this.cwrap('luaL_ref', 'number', ['number', 'number']);\n this.luaL_unref = this.cwrap('luaL_unref', null, ['number', 'number', 'number']);\n this.luaL_loadfilex = this.cwrap('luaL_loadfilex', 'number', ['number', 'string', 'string']);\n this.luaL_loadbufferx = this.cwrap('luaL_loadbufferx', 'number', ['number', 'string|number', 'number', 'string|number', 'string']);\n this.luaL_loadstring = this.cwrap('luaL_loadstring', 'number', ['number', 'string']);\n this.luaL_newstate = this.cwrap('luaL_newstate', 'number', []);\n this.luaL_len = this.cwrap('luaL_len', 'number', ['number', 'number']);\n this.luaL_addgsub = this.cwrap('luaL_addgsub', null, ['number', 'string', 'string', 'string']);\n this.luaL_gsub = this.cwrap('luaL_gsub', 'string', ['number', 'string', 'string', 'string']);\n this.luaL_setfuncs = this.cwrap('luaL_setfuncs', null, ['number', 'number', 'number']);\n this.luaL_getsubtable = this.cwrap('luaL_getsubtable', 'number', ['number', 'number', 'string']);\n this.luaL_traceback = this.cwrap('luaL_traceback', null, ['number', 'number', 'string', 'number']);\n this.luaL_requiref = this.cwrap('luaL_requiref', null, ['number', 'string', 'number', 'number']);\n this.luaL_buffinit = this.cwrap('luaL_buffinit', null, ['number', 'number']);\n this.luaL_prepbuffsize = this.cwrap('luaL_prepbuffsize', 'string', ['number', 'number']);\n this.luaL_addlstring = this.cwrap('luaL_addlstring', null, ['number', 'string', 'number']);\n this.luaL_addstring = this.cwrap('luaL_addstring', null, ['number', 'string']);\n this.luaL_addvalue = this.cwrap('luaL_addvalue', null, ['number']);\n this.luaL_pushresult = this.cwrap('luaL_pushresult', null, ['number']);\n this.luaL_pushresultsize = this.cwrap('luaL_pushresultsize', null, ['number', 'number']);\n this.luaL_buffinitsize = this.cwrap('luaL_buffinitsize', 'string', ['number', 'number', 'number']);\n this.lua_newstate = this.cwrap('lua_newstate', 'number', ['number', 'number']);\n this.lua_close = this.cwrap('lua_close', null, ['number']);\n this.lua_newthread = this.cwrap('lua_newthread', 'number', ['number']);\n this.lua_resetthread = this.cwrap('lua_resetthread', 'number', ['number']);\n this.lua_atpanic = this.cwrap('lua_atpanic', 'number', ['number', 'number']);\n this.lua_version = this.cwrap('lua_version', 'number', ['number']);\n this.lua_absindex = this.cwrap('lua_absindex', 'number', ['number', 'number']);\n this.lua_gettop = this.cwrap('lua_gettop', 'number', ['number']);\n this.lua_settop = this.cwrap('lua_settop', null, ['number', 'number']);\n this.lua_pushvalue = this.cwrap('lua_pushvalue', null, ['number', 'number']);\n this.lua_rotate = this.cwrap('lua_rotate', null, ['number', 'number', 'number']);\n this.lua_copy = this.cwrap('lua_copy', null, ['number', 'number', 'number']);\n this.lua_checkstack = this.cwrap('lua_checkstack', 'number', ['number', 'number']);\n this.lua_xmove = this.cwrap('lua_xmove', null, ['number', 'number', 'number']);\n this.lua_isnumber = this.cwrap('lua_isnumber', 'number', ['number', 'number']);\n this.lua_isstring = this.cwrap('lua_isstring', 'number', ['number', 'number']);\n this.lua_iscfunction = this.cwrap('lua_iscfunction', 'number', ['number', 'number']);\n this.lua_isinteger = this.cwrap('lua_isinteger', 'number', ['number', 'number']);\n this.lua_isuserdata = this.cwrap('lua_isuserdata', 'number', ['number', 'number']);\n this.lua_type = this.cwrap('lua_type', 'number', ['number', 'number']);\n this.lua_typename = this.cwrap('lua_typename', 'string', ['number', 'number']);\n this.lua_tonumberx = this.cwrap('lua_tonumberx', 'number', ['number', 'number', 'number']);\n this.lua_tointegerx = this.cwrap('lua_tointegerx', 'number', ['number', 'number', 'number']);\n this.lua_toboolean = this.cwrap('lua_toboolean', 'number', ['number', 'number']);\n this.lua_tolstring = this.cwrap('lua_tolstring', 'string', ['number', 'number', 'number']);\n this.lua_rawlen = this.cwrap('lua_rawlen', 'number', ['number', 'number']);\n this.lua_tocfunction = this.cwrap('lua_tocfunction', 'number', ['number', 'number']);\n this.lua_touserdata = this.cwrap('lua_touserdata', 'number', ['number', 'number']);\n this.lua_tothread = this.cwrap('lua_tothread', 'number', ['number', 'number']);\n this.lua_topointer = this.cwrap('lua_topointer', 'number', ['number', 'number']);\n this.lua_arith = this.cwrap('lua_arith', null, ['number', 'number']);\n this.lua_rawequal = this.cwrap('lua_rawequal', 'number', ['number', 'number', 'number']);\n this.lua_compare = this.cwrap('lua_compare', 'number', ['number', 'number', 'number', 'number']);\n this.lua_pushnil = this.cwrap('lua_pushnil', null, ['number']);\n this.lua_pushnumber = this.cwrap('lua_pushnumber', null, ['number', 'number']);\n this.lua_pushinteger = this.cwrap('lua_pushinteger', null, ['number', 'number']);\n this.lua_pushlstring = this.cwrap('lua_pushlstring', 'string', ['number', 'string|number', 'number']);\n this.lua_pushstring = this.cwrap('lua_pushstring', 'string', ['number', 'string|number']);\n this.lua_pushcclosure = this.cwrap('lua_pushcclosure', null, ['number', 'number', 'number']);\n this.lua_pushboolean = this.cwrap('lua_pushboolean', null, ['number', 'number']);\n this.lua_pushlightuserdata = this.cwrap('lua_pushlightuserdata', null, ['number', 'number']);\n this.lua_pushthread = this.cwrap('lua_pushthread', 'number', ['number']);\n this.lua_getglobal = this.cwrap('lua_getglobal', 'number', ['number', 'string']);\n this.lua_gettable = this.cwrap('lua_gettable', 'number', ['number', 'number']);\n this.lua_getfield = this.cwrap('lua_getfield', 'number', ['number', 'number', 'string']);\n this.lua_geti = this.cwrap('lua_geti', 'number', ['number', 'number', 'number']);\n this.lua_rawget = this.cwrap('lua_rawget', 'number', ['number', 'number']);\n this.lua_rawgeti = this.cwrap('lua_rawgeti', 'number', ['number', 'number', 'number']);\n this.lua_rawgetp = this.cwrap('lua_rawgetp', 'number', ['number', 'number', 'number']);\n this.lua_createtable = this.cwrap('lua_createtable', null, ['number', 'number', 'number']);\n this.lua_newuserdatauv = this.cwrap('lua_newuserdatauv', 'number', ['number', 'number', 'number']);\n this.lua_getmetatable = this.cwrap('lua_getmetatable', 'number', ['number', 'number']);\n this.lua_getiuservalue = this.cwrap('lua_getiuservalue', 'number', ['number', 'number', 'number']);\n this.lua_setglobal = this.cwrap('lua_setglobal', null, ['number', 'string']);\n this.lua_settable = this.cwrap('lua_settable', null, ['number', 'number']);\n this.lua_setfield = this.cwrap('lua_setfield', null, ['number', 'number', 'string']);\n this.lua_seti = this.cwrap('lua_seti', null, ['number', 'number', 'number']);\n this.lua_rawset = this.cwrap('lua_rawset', null, ['number', 'number']);\n this.lua_rawseti = this.cwrap('lua_rawseti', null, ['number', 'number', 'number']);\n this.lua_rawsetp = this.cwrap('lua_rawsetp', null, ['number', 'number', 'number']);\n this.lua_setmetatable = this.cwrap('lua_setmetatable', 'number', ['number', 'number']);\n this.lua_setiuservalue = this.cwrap('lua_setiuservalue', 'number', ['number', 'number', 'number']);\n this.lua_callk = this.cwrap('lua_callk', null, ['number', 'number', 'number', 'number', 'number']);\n this.lua_pcallk = this.cwrap('lua_pcallk', 'number', ['number', 'number', 'number', 'number', 'number', 'number']);\n this.lua_load = this.cwrap('lua_load', 'number', ['number', 'number', 'number', 'string', 'string']);\n this.lua_dump = this.cwrap('lua_dump', 'number', ['number', 'number', 'number', 'number']);\n this.lua_yieldk = this.cwrap('lua_yieldk', 'number', ['number', 'number', 'number', 'number']);\n this.lua_resume = this.cwrap('lua_resume', 'number', ['number', 'number', 'number', 'number']);\n this.lua_status = this.cwrap('lua_status', 'number', ['number']);\n this.lua_isyieldable = this.cwrap('lua_isyieldable', 'number', ['number']);\n this.lua_setwarnf = this.cwrap('lua_setwarnf', null, ['number', 'number', 'number']);\n this.lua_warning = this.cwrap('lua_warning', null, ['number', 'string', 'number']);\n this.lua_error = this.cwrap('lua_error', 'number', ['number']);\n this.lua_next = this.cwrap('lua_next', 'number', ['number', 'number']);\n this.lua_concat = this.cwrap('lua_concat', null, ['number', 'number']);\n this.lua_len = this.cwrap('lua_len', null, ['number', 'number']);\n this.lua_stringtonumber = this.cwrap('lua_stringtonumber', 'number', ['number', 'string']);\n this.lua_getallocf = this.cwrap('lua_getallocf', 'number', ['number', 'number']);\n this.lua_setallocf = this.cwrap('lua_setallocf', null, ['number', 'number', 'number']);\n this.lua_toclose = this.cwrap('lua_toclose', null, ['number', 'number']);\n this.lua_closeslot = this.cwrap('lua_closeslot', null, ['number', 'number']);\n this.lua_getstack = this.cwrap('lua_getstack', 'number', ['number', 'number', 'number']);\n this.lua_getinfo = this.cwrap('lua_getinfo', 'number', ['number', 'string', 'number']);\n this.lua_getlocal = this.cwrap('lua_getlocal', 'string', ['number', 'number', 'number']);\n this.lua_setlocal = this.cwrap('lua_setlocal', 'string', ['number', 'number', 'number']);\n this.lua_getupvalue = this.cwrap('lua_getupvalue', 'string', ['number', 'number', 'number']);\n this.lua_setupvalue = this.cwrap('lua_setupvalue', 'string', ['number', 'number', 'number']);\n this.lua_upvalueid = this.cwrap('lua_upvalueid', 'number', ['number', 'number', 'number']);\n this.lua_upvaluejoin = this.cwrap('lua_upvaluejoin', null, ['number', 'number', 'number', 'number', 'number']);\n this.lua_sethook = this.cwrap('lua_sethook', null, ['number', 'number', 'number', 'number']);\n this.lua_gethook = this.cwrap('lua_gethook', 'number', ['number']);\n this.lua_gethookmask = this.cwrap('lua_gethookmask', 'number', ['number']);\n this.lua_gethookcount = this.cwrap('lua_gethookcount', 'number', ['number']);\n this.lua_setcstacklimit = this.cwrap('lua_setcstacklimit', 'number', ['number', 'number']);\n this.luaopen_base = this.cwrap('luaopen_base', 'number', ['number']);\n this.luaopen_coroutine = this.cwrap('luaopen_coroutine', 'number', ['number']);\n this.luaopen_table = this.cwrap('luaopen_table', 'number', ['number']);\n this.luaopen_io = this.cwrap('luaopen_io', 'number', ['number']);\n this.luaopen_os = this.cwrap('luaopen_os', 'number', ['number']);\n this.luaopen_string = this.cwrap('luaopen_string', 'number', ['number']);\n this.luaopen_utf8 = this.cwrap('luaopen_utf8', 'number', ['number']);\n this.luaopen_math = this.cwrap('luaopen_math', 'number', ['number']);\n this.luaopen_debug = this.cwrap('luaopen_debug', 'number', ['number']);\n this.luaopen_package = this.cwrap('luaopen_package', 'number', ['number']);\n this.luaL_openlibs = this.cwrap('luaL_openlibs', null, ['number']);\n }\n lua_remove(luaState, index) {\n this.lua_rotate(luaState, index, -1);\n this.lua_pop(luaState, 1);\n }\n lua_pop(luaState, count) {\n this.lua_settop(luaState, -count - 1);\n }\n luaL_getmetatable(luaState, name) {\n return this.lua_getfield(luaState, LUA_REGISTRYINDEX, name);\n }\n lua_yield(luaState, count) {\n return this.lua_yieldk(luaState, count, 0, null);\n }\n lua_upvalueindex(index) {\n return LUA_REGISTRYINDEX - index;\n }\n ref(data) {\n const existing = this.referenceTracker.get(data);\n if (existing) {\n existing.refCount++;\n return existing.index;\n }\n const availableIndex = this.availableReferences.pop();\n const index = availableIndex === undefined ? this.referenceMap.size + 1 : availableIndex;\n this.referenceMap.set(index, data);\n this.referenceTracker.set(data, {\n refCount: 1,\n index,\n });\n this.lastRefIndex = index;\n return index;\n }\n unref(index) {\n const ref = this.referenceMap.get(index);\n if (ref === undefined) {\n return;\n }\n const metadata = this.referenceTracker.get(ref);\n if (metadata === undefined) {\n this.referenceTracker.delete(ref);\n this.availableReferences.push(index);\n return;\n }\n metadata.refCount--;\n if (metadata.refCount <= 0) {\n this.referenceTracker.delete(ref);\n this.referenceMap.delete(index);\n this.availableReferences.push(index);\n }\n }\n getRef(index) {\n return this.referenceMap.get(index);\n }\n getLastRefIndex() {\n return this.lastRefIndex;\n }\n printRefs() {\n for (const [key, value] of this.referenceMap.entries()) {\n console.log(key, value);\n }\n }\n cwrap(name, returnType, argTypes) {\n const hasStringOrNumber = argTypes.some((argType) => argType === 'string|number');\n if (!hasStringOrNumber) {\n return (...args) => this.module.ccall(name, returnType, argTypes, args);\n }\n return (...args) => {\n const pointersToBeFreed = [];\n const resolvedArgTypes = argTypes.map((argType, i) => {\n var _a;\n if (argType === 'string|number') {\n if (typeof args[i] === 'number') {\n return 'number';\n }\n else {\n if (((_a = args[i]) === null || _a === void 0 ? void 0 : _a.length) > 1024) {\n const bufferPointer = this.module.stringToNewUTF8(args[i]);\n args[i] = bufferPointer;\n pointersToBeFreed.push(bufferPointer);\n return 'number';\n }\n else {\n return 'string';\n }\n }\n }\n return argType;\n });\n try {\n return this.module.ccall(name, returnType, resolvedArgTypes, args);\n }\n finally {\n for (const pointer of pointersToBeFreed) {\n this.module._free(pointer);\n }\n }\n };\n }\n }\n\n var version = '1.16.0';\n\n class LuaFactory {\n constructor(customWasmUri, environmentVariables) {\n var _a;\n if (customWasmUri === undefined) {\n const isBrowser = (typeof window === 'object' && typeof window.document !== 'undefined') ||\n (typeof self === 'object' && ((_a = self === null || self === void 0 ? void 0 : self.constructor) === null || _a === void 0 ? void 0 : _a.name) === 'DedicatedWorkerGlobalScope');\n if (isBrowser) {\n customWasmUri = `https://unpkg.com/wasmoon@${version}/dist/glue.wasm`;\n }\n }\n this.luaWasmPromise = LuaWasm.initialize(customWasmUri, environmentVariables);\n }\n async mountFile(path, content) {\n this.mountFileSync(await this.getLuaModule(), path, content);\n }\n mountFileSync(luaWasm, path, content) {\n const fileSep = path.lastIndexOf('/');\n const file = path.substring(fileSep + 1);\n const body = path.substring(0, path.length - file.length - 1);\n if (body.length > 0) {\n const parts = body.split('/').reverse();\n let parent = '';\n while (parts.length) {\n const part = parts.pop();\n if (!part) {\n continue;\n }\n const current = `${parent}/${part}`;\n try {\n luaWasm.module.FS.mkdir(current);\n }\n catch (err) {\n }\n parent = current;\n }\n }\n luaWasm.module.FS.writeFile(path, content);\n }\n async createEngine(options = {}) {\n return new LuaEngine(await this.getLuaModule(), options);\n }\n async getLuaModule() {\n return this.luaWasmPromise;\n }\n }\n\n exports.Decoration = Decoration;\n exports.LUAI_MAXSTACK = LUAI_MAXSTACK;\n exports.LUA_MULTRET = LUA_MULTRET;\n exports.LUA_REGISTRYINDEX = LUA_REGISTRYINDEX;\n exports.LuaEngine = LuaEngine;\n exports.LuaFactory = LuaFactory;\n exports.LuaGlobal = Global;\n exports.LuaMultiReturn = MultiReturn;\n exports.LuaRawResult = RawResult;\n exports.LuaThread = Thread;\n exports.LuaTimeoutError = LuaTimeoutError;\n exports.LuaTypeExtension = LuaTypeExtension;\n exports.LuaWasm = LuaWasm;\n exports.PointerSize = PointerSize;\n exports.decorate = decorate;\n exports.decorateFunction = decorateFunction;\n exports.decorateProxy = decorateProxy;\n exports.decorateUserdata = decorateUserdata;\n\n}));\n","export * from \"./graphics/assets/asset_loaders/obj.ts\";\r\nexport * from \"./graphics/assets/vaos.ts\";\r\nexport * from \"./graphics/assets/material.ts\";\r\nexport * from \"./graphics/assets/mesh.ts\";\r\nexport * from \"./graphics/assets/model.ts\";\r\nexport * from \"./graphics/assets/texture.ts\";\r\nexport * from \"./graphics/framebuffer.ts\";\r\nexport * from \"./graphics/shader_program.ts\";\r\nexport * from \"./graphics/graphics_manager.ts\";\r\nexport * from \"./node.ts\";\r\nexport * from \"./node/camera3d.ts\";\r\nexport * from \"./node/lights/light.ts\";\r\nexport * from \"./node/lights/point_light.ts\";\r\nexport * from \"./node/lights/directional_light.ts\";\r\nexport * from \"./node/lights/spot_light.ts\";\r\nexport * from \"./node/object3d.ts\";\r\nexport * from \"./node/skybox.ts\";\r\nexport * from \"./node/sprite2d.ts\";\r\nexport * from \"./graphics/utility.ts\";\r\nexport * from \"./input/input_manager.ts\";\r\nexport * from \"./utility.ts\";\r\nexport * from \"./engine.ts\";\r\nexport * from \"./scene.ts\";\r\nexport * from \"./hook_manager.ts\";\r\nimport Engine from './engine.ts';\r\n\r\nexport default Engine;","import { Vec3 } from \"@vicimpa/glm\";\r\nimport { GraphicsManager } from \"../../graphics_manager.ts\";\r\nimport { Texture, TextureType } from \"../texture.ts\";\r\nimport { Model } from \"../model.ts\";\r\nimport { Material } from \"../material.ts\";\r\nimport { Mesh } from \"../mesh.ts\";\r\nimport { Node3D } from \"../../../node.ts\";\r\nimport Engine from \"../../../engine.ts\";\r\nimport { Object3D } from \"../../../node/object3d.ts\";\r\nimport { parse_path, join_path, basename_path, dirname_path } from \"../../utility.ts\";\r\n\r\n\r\nexport namespace AssetFile {\r\n export namespace OBJ {\r\n export interface Data {\r\n temp?: {\r\n // \"temp\" holds the state of the data while it is being created.\r\n // When the data is finalized, the temp attribute is deleted\r\n // or set to undefined.\r\n vertices: number[][];\r\n normals: number[][];\r\n uvs: number[][];\r\n min_x:number;\r\n min_y:number;\r\n min_z:number;\r\n max_x:number;\r\n max_y:number;\r\n max_z:number;\r\n vertex_map:Map<string, number>;\r\n vertices_final: number[];\r\n normals_final: number[];\r\n uvs_final: number[];\r\n indices_final: number[];\r\n },\r\n vertices: Float32Array;\r\n normals: Float32Array;\r\n uvs: Float32Array;\r\n indices: Uint16Array;\r\n dimensions:Vec3;\r\n center:Vec3;\r\n }\r\n\r\n export enum BumpChannel {\r\n RED = \"r\",\r\n GREEN = \"g\",\r\n BLUE = \"b\",\r\n MATTE = \"m\",\r\n LUMINANCE = \"l\",\r\n Z_DEPTH = \"z\"\r\n }\r\n\r\n export enum ReflectionMapType {\r\n SPHERE = \"sphere\",\r\n CUBE_TOP = \"cube_top\",\r\n CUBE_BOTTOM = \"cube_bottom\",\r\n CUBE_FRONT = \"cube_front\",\r\n CUBE_BACK = \"cube_back\",\r\n CUBE_LEFT = \"cube_left\",\r\n CUBE_RIGHT = \"cube_right\"\r\n }\r\n\r\n export interface TextureData {\r\n name:string;\r\n // -blendu\r\n horizontal_blend?:boolean;\r\n // -blendv\r\n vertical_blend?:boolean;\r\n // -boost\r\n mip_map_sharpness_boost?:number;\r\n // -mm\r\n additive_color_offset?:number;\r\n contrast_multiplier?:number;\r\n // -o\r\n offset?:Vec3;\r\n // -s\r\n scale?:Vec3;\r\n // -t\r\n turbulence?:Vec3;\r\n // -texres\r\n generated_texture_resolution?:number;\r\n // -clamp\r\n clamp?:boolean;\r\n // -bm\r\n bump_multiplier?:number;\r\n // -imfchan\r\n bump_channel?:BumpChannel;\r\n // -type\r\n reflection_map_type?:ReflectionMapType;\r\n }\r\n\r\n export enum IlluminationModel {\r\n COLOR_ON_AMBIENT_OFF,\r\n COLOR_ON_AMBIENT_ON,\r\n HIGHLIGHT_ON,\r\n REFLECTION_ON_RAY_TRACE_ON,\r\n TRANSPARENCY_GLASS_ON__REFLECTION_RAY_TRACE_ON,\r\n REFLECTION_FRESNEL_ON_RAY_TRACE_ON,\r\n TRANSPARENCY_REFRACTION_ON__REFLECTION_FRESNEL_OFF_RAY_TRACE_ON,\r\n TRANSPARENCY_REFRACTION_ON__REFLECTION_FRESNEL_ON_RAY_TRACE_ON,\r\n REFLECTION_ON_RAY_TRACE_OFF,\r\n TRANSPARENCY_GLASS_ON__REFLECTION_RAY_TRACE_OFF,\r\n CAST_SHADOWS_ON_INVISIBLE_SURFACES,\r\n }\r\n\r\n export interface MaterialData {\r\n name:string;\r\n ambient_color?:Vec3;\r\n diffuse_color?:Vec3;\r\n specular_color?:Vec3;\r\n specular_exponent?:number;\r\n transparency?:number;\r\n transmission_filter_color?:Vec3;\r\n transmission_filter_xyz?:boolean;\r\n optical_density?:number;\r\n illumination_model?:IlluminationModel;\r\n ambient_texture?:TextureData;\r\n diffuse_texture?:TextureData;\r\n specular_color_texture?:TextureData;\r\n specular_highlight_texture?:TextureData;\r\n alpha_texture?:TextureData;\r\n bump_texture?:TextureData;\r\n displacement_texture?:TextureData;\r\n decal_texture?:TextureData;\r\n reflection_textures?:TextureData[];// This is for if each side of a cube map uses a different refl statement\r\n // PBR\r\n roughness_texture?:TextureData;\r\n metalic_texture?:TextureData;\r\n sheen_texture?:TextureData;\r\n roughness?:number;\r\n metalic?:number;\r\n sheen?:number;\r\n clearcoat_thickness?:number;\r\n clearcoat_roughness?:number;\r\n emissive_texture?:TextureData;\r\n emissive?:number;\r\n anisotropy?:number;\r\n anisotropy_rotation?:number;\r\n normal_texture?:TextureData;\r\n }\r\n\r\n // There will be at least 1 object per file.\r\n // This object will be named the same as the object\r\n // file with the extension removed and be created only \r\n // if there are no specified objects or groups.\r\n export interface Object {\r\n name:string;\r\n data?:Data;\r\n material?:string;\r\n groups:Group[];\r\n }\r\n\r\n // Every object will have at least one group. If a group is unnamed then it is the default group\r\n export interface Group {\r\n name:string;\r\n data:Data;\r\n material?:string;\r\n }\r\n\r\n enum CollectionType {\r\n OBJECT,\r\n GROUP\r\n }\r\n\r\n function create_material(engine:Engine, material_data:MaterialData, image_assets_path:string, image_assets:Map<string, Texture>):Material {\r\n const get_fallback = (...fallbacks:any[]) => {\r\n for (const fallback of fallbacks) {\r\n if (fallback !== undefined)\r\n return fallback;\r\n }\r\n throw new Error(\"A valid defined fallback was not supplied.\")\r\n }\r\n \r\n return new Material(\r\n engine.graphics_manager,\r\n material_data.name,\r\n get_fallback(\r\n material_data.diffuse_texture?.name ?\r\n image_assets.get(material_data.diffuse_texture?.name)\r\n : undefined,\r\n material_data.diffuse_color,\r\n new Vec3(1.0)\r\n ),\r\n get_fallback(\r\n material_data.metalic_texture?.name ?\r\n image_assets.get(material_data.metalic_texture?.name)\r\n : undefined,\r\n material_data.metalic,\r\n 0.0\r\n ),\r\n get_fallback(\r\n material_data.roughness_texture?.name ?\r\n image_assets.get(material_data.roughness_texture?.name)\r\n : undefined,\r\n material_data.roughness,\r\n 0.0\r\n ),\r\n get_fallback(\r\n material_data.ambient_texture?.name ?\r\n image_assets.get(material_data.ambient_texture?.name)\r\n : undefined,\r\n 0.0\r\n ),\r\n get_fallback(\r\n material_data.normal_texture?.name ?\r\n image_assets.get(material_data.normal_texture?.name)\r\n : undefined,\r\n null\r\n ),\r\n engine.graphics_manager.default_3d_shader_program\r\n );\r\n }\r\n\r\n export async function load_obj(engine:Engine, obj_path:string, image_assets_path:string):Promise<Node3D> {\r\n const obj_name = parse_path(obj_path).name;\r\n var image_assets:Map<string, Texture> = new Map();\r\n var material_assets:Map<string, Material> = new Map();\r\n var obj_root_node:Node3D = new Node3D(engine, obj_name + \"_root\")\r\n\r\n // Load File\r\n const res = await fetch(obj_path);\r\n if (res.ok) {\r\n const raw_text = await res.text();\r\n const [objects, materials] = await Parser.parse_obj(engine, obj_path, raw_text, image_assets_path, image_assets);\r\n\r\n // parse materials\r\n for (const material_data of materials) {\r\n const material = create_material(engine, material_data, image_assets_path, image_assets);\r\n material_assets.set(material.name, material);\r\n }\r\n\r\n for (const object_data of objects) {\r\n var object:Node3D\r\n if (object_data.data) {\r\n const data = object_data.data;\r\n const mesh = new Mesh(engine.graphics_manager, data.vertices, data.normals, data.uvs, data.indices, data.dimensions, data.center);\r\n var material:Material|undefined;\r\n if (object_data.material) {\r\n material = material_assets.get(object_data.material);\r\n \r\n if (material === undefined) {\r\n throw new Error(`Failed to find the material named \"${object_data.material}\" associated with the object named \"${object_data.name}\" in the .obj file at \"${obj_path}\" when attempting to load the obj model.`)\r\n }\r\n } else {\r\n material = new Material(engine.graphics_manager, \"default\", new Vec3(0.0), 0.0, 0.0, 0.0, null, engine.graphics_manager.default_3d_shader_program);\r\n }\r\n var model = new Model(engine.graphics_manager, \"default\", mesh, material);\r\n object = new Object3D(engine, object_data.name, model);\r\n } else {\r\n object = new Node3D(engine, object_data.name);\r\n }\r\n // add groups as children of object\r\n for (const group_data of object_data.groups) {\r\n const data = group_data.data;\r\n const mesh = new Mesh(engine.graphics_manager, data.vertices, data.normals, data.uvs, data.indices, data.dimensions, data.center);\r\n var material:Material|undefined;\r\n if (group_data.material) {\r\n material = material_assets.get(group_data.material);\r\n\r\n if (material === undefined) {\r\n throw new Error(`Failed to find the material named \"${group_data.material}\" associated with the group named \"${group_data.name}\" object named \"${object_data.name}\" in the .obj file at \"${obj_path}\" when attempting to load the obj model.`)\r\n }\r\n } else {\r\n material = new Material(engine.graphics_manager, \"default\", new Vec3(0.0), 0.0, 0.0, 0.0, null, engine.graphics_manager.default_3d_shader_program);\r\n }\r\n var model = new Model(engine.graphics_manager, \"default\", mesh, material);\r\n object.push_child(new Object3D(engine, group_data.name, model));\r\n }\r\n // add object to root\r\n obj_root_node.push_child(object);\r\n }\r\n\r\n } else {\r\n throw new Error(`The .obj file at \"${obj_path}\" does not exist.`);\r\n }\r\n\r\n return obj_root_node;\r\n }\r\n \r\n class Parser {\r\n \r\n static create_group(name:string):OBJ.Group {\r\n return {\r\n name,\r\n data: Parser.create_data()\r\n }\r\n }\r\n\r\n static create_object(name:string):OBJ.Object {\r\n return {\r\n name,\r\n groups:[]\r\n }\r\n }\r\n\r\n static create_data():OBJ.Data {\r\n return {\r\n temp: {\r\n min_x:Number.MAX_VALUE,\r\n min_y:Number.MAX_VALUE,\r\n min_z:Number.MAX_VALUE,\r\n max_x:Number.MIN_VALUE,\r\n max_y:Number.MIN_VALUE,\r\n max_z:Number.MIN_VALUE,\r\n vertices:[],\r\n normals:[],\r\n uvs:[],\r\n vertex_map: new Map<string, number>(),\r\n vertices_final:[],\r\n normals_final:[],\r\n uvs_final:[],\r\n indices_final:[]\r\n },\r\n vertices: new Float32Array([]),\r\n normals: new Float32Array([]),\r\n uvs: new Float32Array([]),\r\n indices: new Uint16Array([]),\r\n dimensions:new Vec3(0.0),\r\n center:new Vec3(0.0)\r\n };\r\n }\r\n\r\n static create_material(name:string):OBJ.MaterialData {\r\n return {name};\r\n }\r\n\r\n private static async load_mtl(engine:Engine, file_url:string, image_assets_path:string, image_assets:Map<string, Texture>):Promise<OBJ.MaterialData[]> {\r\n const res = await fetch(file_url);\r\n if (res.ok) {\r\n const raw_text = await res.text();\r\n const mtls = await Parser.parse_mtl(engine, file_url, raw_text, image_assets_path, image_assets);\r\n return mtls;\r\n } else {\r\n throw new Error(`The .mtl file at \"${file_url}\" does not exist.`);\r\n }\r\n }\r\n\r\n private static async parse_mtl(engine:Engine, file_url:string, text:string, image_assets_path:string, image_assets:Map<string, Texture>):Promise<OBJ.MaterialData[]> {\r\n var material_list:OBJ.MaterialData[] = [];\r\n var current_material:OBJ.MaterialData|null = null;\r\n\r\n const lines = text.split(\"\\n\");\r\n for (const line of lines) {\r\n const parts = line.trim().split(/\\s+/);\r\n switch (parts[0].toLowerCase()) {\r\n case \"newmtl\":\r\n current_material = Parser.create_material(parts[1]);\r\n material_list.push(current_material); \r\n break;\r\n\r\n case \"illum\":\r\n if (current_material) {\r\n current_material.illumination_model = Number(parts[1]) as IlluminationModel;\r\n }\r\n break;\r\n\r\n case \"kd\":\r\n if (current_material) {\r\n const [r, g, b] = parts.slice(1).map(Number);\r\n current_material.diffuse_color = new Vec3(r, g, b);\r\n }\r\n break;\r\n\r\n case \"ka\":\r\n if (current_material) {\r\n const [r, g, b] = parts.slice(1).map(Number);\r\n current_material.ambient_color = new Vec3(r, g, b);\r\n }\r\n break;\r\n\r\n case \"ks\":\r\n if (current_material) {\r\n const [r, g, b] = parts.slice(1).map(Number);\r\n current_material.specular_color = new Vec3(r, g, b);\r\n }\r\n break;\r\n\r\n case \"ns\":\r\n if (current_material) {\r\n current_material.specular_exponent = Number(parts[1]);\r\n }\r\n break;\r\n\r\n case \"d\":\r\n if (current_material) {\r\n current_material.transparency = Number(parts[1]);\r\n }\r\n break;\r\n\r\n case \"tr\":\r\n if (current_material) {\r\n current_material.transparency = 1.0 - Number(parts[1]);\r\n }\r\n break;\r\n\r\n case \"ni\":\r\n if (current_material) {\r\n current_material.optical_density = Number(parts[1]);\r\n }\r\n break;\r\n \r\n case \"pr\":\r\n if (current_material) {\r\n current_material.roughness = Number(parts[1]);\r\n }\r\n break;\r\n\r\n case \"pm\":\r\n if (current_material) {\r\n current_material.metalic = Number(parts[1]);\r\n }\r\n break;\r\n\r\n case \"ps\":\r\n if (current_material) {\r\n current_material.sheen = Number(parts[1]);\r\n }\r\n break;\r\n\r\n case \"pc\":\r\n if (current_material) {\r\n current_material.clearcoat_thickness = Number(parts[1]);\r\n }\r\n break;\r\n\r\n case \"pcr\":\r\n if (current_material) {\r\n current_material.clearcoat_roughness = Number(parts[1]);\r\n }\r\n break;\r\n\r\n case \"ke\":\r\n if (current_material) {\r\n current_material.emissive = Number(parts[1]);\r\n }\r\n break;\r\n\r\n case \"aniso\":\r\n if (current_material) {\r\n current_material.anisotropy = Number(parts[1]);\r\n }\r\n break;\r\n\r\n case \"anisor\":\r\n if (current_material) {\r\n current_material.anisotropy_rotation = Number(parts[1]);\r\n }\r\n break;\r\n\r\n case \"tf\":\r\n if (current_material) {\r\n if (parts[1].includes(\"x\", 0)) {\r\n const x = Number(parts[2]);\r\n var y:number|null = null\r\n var z:number|null = null\r\n if (parts.length >= 4)\r\n y = Number(parts[3]);\r\n if (parts.length >= 5)\r\n z = Number(parts[4]);\r\n\r\n current_material.transmission_filter_color = new Vec3(\r\n x,\r\n y !== null ? y : x,\r\n z !== null ? z : x\r\n );\r\n current_material.transmission_filter_xyz\r\n } else {\r\n const [r, g, b] = parts.slice(1).map(Number);\r\n current_material.transmission_filter_color = new Vec3(r, g, b);\r\n }\r\n }\r\n break;\r\n\r\n // TEXTURE MAPS\r\n case \"map_ka\":\r\n if (current_material)\r\n current_material.ambient_texture = await Parser.parse_mtl_map(engine, current_material, [...parts], image_assets_path, image_assets);\r\n break;\r\n case \"map_kd\":\r\n if (current_material)\r\n current_material.diffuse_texture = await Parser.parse_mtl_map(engine, current_material, [...parts], image_assets_path, image_assets);\r\n break;\r\n case \"map_ks\":\r\n if (current_material)\r\n current_material.specular_color_texture = await Parser.parse_mtl_map(engine, current_material, [...parts], image_assets_path, image_assets);\r\n break;\r\n case \"map_ns\":\r\n if (current_material)\r\n current_material.specular_highlight_texture = await Parser.parse_mtl_map(engine, current_material, [...parts], image_assets_path, image_assets);\r\n break;\r\n case \"map_d\":\r\n if (current_material)\r\n current_material.alpha_texture = await Parser.parse_mtl_map(engine, current_material, [...parts], image_assets_path, image_assets);\r\n break;\r\n case \"refl\":\r\n if (current_material)\r\n if (current_material.reflection_textures === undefined)\r\n current_material.reflection_textures = [await Parser.parse_mtl_map(engine, current_material, [...parts], image_assets_path, image_assets)];\r\n else\r\n current_material.reflection_textures.push(await Parser.parse_mtl_map(engine, current_material, [...parts], image_assets_path, image_assets));\r\n break;\r\n case \"map_bump\":\r\n if (current_material)\r\n current_material.bump_texture = await Parser.parse_mtl_map(engine, current_material, [...parts], image_assets_path, image_assets);\r\n break;\r\n case \"bump\":\r\n if (current_material)\r\n current_material.bump_texture = await Parser.parse_mtl_map(engine, current_material, [...parts], image_assets_path, image_assets);\r\n break;\r\n case \"disp\":\r\n if (current_material)\r\n current_material.displacement_texture = await Parser.parse_mtl_map(engine, current_material, [...parts], image_assets_path, image_assets);\r\n break;\r\n case \"decal\":\r\n if (current_material)\r\n current_material.decal_texture = await Parser.parse_mtl_map(engine, current_material, [...parts], image_assets_path, image_assets);\r\n break;\r\n case \"map_pr\":\r\n if (current_material)\r\n current_material.roughness_texture = await Parser.parse_mtl_map(engine, current_material, [...parts], image_assets_path, image_assets);\r\n break;\r\n case \"map_pm\":\r\n if (current_material)\r\n current_material.metalic_texture = await Parser.parse_mtl_map(engine, current_material, [...parts], image_assets_path, image_assets);\r\n break;\r\n case \"map_ps\":\r\n if (current_material)\r\n current_material.sheen_texture = await Parser.parse_mtl_map(engine, current_material, [...parts], image_assets_path, image_assets);\r\n break;\r\n case \"map_ke\":\r\n if (current_material)\r\n current_material.emissive_texture = await Parser.parse_mtl_map(engine, current_material, [...parts], image_assets_path, image_assets);\r\n break;\r\n case \"norm\":\r\n if (current_material)\r\n current_material.normal_texture = await Parser.parse_mtl_map(engine, current_material, [...parts], image_assets_path, image_assets);\r\n break;\r\n\r\n }\r\n }\r\n \r\n return material_list;\r\n }\r\n\r\n static async parse_mtl_map(engine:Engine, current_material:OBJ.MaterialData, parts:string[], image_assets_path:string, image_assets:Map<string, Texture>):Promise<TextureData> {\r\n var texture_name:string;\r\n var current_flag:string|null = null\r\n const texture_file = parts.pop();\r\n const map_type_string = parts.shift()\r\n var current_flag_arguments:string[] = [];\r\n if (texture_file) {\r\n const texture_file_url = join_path(image_assets_path, texture_file);\r\n \r\n const res = await fetch(texture_file_url.trim());\r\n if (res.ok) {\r\n const blob = await res.blob();\r\n if (map_type_string) {\r\n texture_name = current_material.name + \"_\" + map_type_string;\r\n image_assets.set(texture_name, new Texture(engine.graphics_manager, texture_name, await createImageBitmap(blob, { imageOrientation: 'flipY' }), TextureType.COLOR, {}));\r\n } else {\r\n throw Error(`A parsing error has occured that should not be possible while parsing a .mtl file map.`)\r\n }\r\n } else {\r\n throw new Error(`The .obj image asset file at \"${texture_file_url}\" does not exist.`);\r\n }\r\n } else {\r\n throw new Error(`Failed to get get texture map file name for material named \"${current_material.name}\" when parsign .mtl file associated with .obj file.`)\r\n }\r\n\r\n const texture_data:TextureData = {name:texture_name};\r\n\r\n const set_flag = () => {\r\n switch (current_flag) {\r\n case \"-blendu\":\r\n texture_data.horizontal_blend =\r\n current_flag_arguments[0] === \"off\" ?\r\n false : true;\r\n break;\r\n case \"-blendv\":\r\n texture_data.vertical_blend =\r\n current_flag_arguments[0] === \"off\" ?\r\n false : true;\r\n break;\r\n case \"-boost\":\r\n texture_data.mip_map_sharpness_boost = Number(current_flag_arguments[0]);\r\n break;\r\n case \"-mm\":\r\n texture_data.additive_color_offset = Number(current_flag_arguments[0]);\r\n texture_data.contrast_multiplier = Number(current_flag_arguments[1]);\r\n break;\r\n case \"-o\":\r\n var u = Number(current_flag_arguments[0]);\r\n var v = 0;\r\n var w = 0;\r\n if (current_flag_arguments.length >= 2)\r\n v = Number(current_flag_arguments[1]);\r\n if (current_flag_arguments.length >= 3)\r\n w = Number(current_flag_arguments[2]);\r\n texture_data.offset = new Vec3(u, v, w);\r\n break;\r\n case \"-s\":\r\n var u = Number(current_flag_arguments[0]);\r\n var v = 1;\r\n var w = 1;\r\n if (current_flag_arguments.length >= 2)\r\n v = Number(current_flag_arguments[1]);\r\n if (current_flag_arguments.length >= 3)\r\n w = Number(current_flag_arguments[2]);\r\n texture_data.scale = new Vec3(u, v, w);\r\n break;\r\n case \"-t\":\r\n var u = Number(current_flag_arguments[0]);\r\n var v = 0;\r\n var w = 0;\r\n if (current_flag_arguments.length >= 2)\r\n v = Number(current_flag_arguments[1]);\r\n if (current_flag_arguments.length >= 3)\r\n w = Number(current_flag_arguments[2]);\r\n texture_data.turbulence = new Vec3(u, v, w);\r\n break;\r\n case \"-texres\":\r\n texture_data.generated_texture_resolution = Number(current_flag_arguments[0]);\r\n break;\r\n case \"-clamp\":\r\n texture_data.clamp =\r\n current_flag_arguments[0] === \"on\" ?\r\n true : false;\r\n break;\r\n case \"-bm\":\r\n texture_data.bump_multiplier = Number(current_flag_arguments[0]);\r\n break;\r\n case \"-imfchan\":\r\n texture_data.bump_channel = current_flag_arguments[0] as BumpChannel;\r\n break;\r\n case \"-type\":\r\n texture_data.reflection_map_type = current_flag_arguments[0] as ReflectionMapType;\r\n break;\r\n }\r\n current_flag_arguments = []\r\n }\r\n\r\n for (const part of parts) {\r\n switch (part) {\r\n case \"-blendu\":\r\n case \"-blendv\":\r\n case \"-boost\":\r\n case \"-mm\":\r\n case \"-o\":\r\n case \"-s\":\r\n case \"-t\":\r\n case \"-texres\":\r\n case \"-clamp\":\r\n case \"-bm\":\r\n case \"-imfchan\":\r\n case \"-type\":\r\n set_flag();\r\n current_flag = part;\r\n break;\r\n \r\n default:\r\n current_flag_arguments.push(part);\r\n break;\r\n }\r\n }\r\n set_flag();\r\n return texture_data;\r\n }\r\n\r\n static async parse_obj(engine:Engine, file_url:string, text: string, image_assets_path:string, image_assets:Map<string, Texture>): Promise<[OBJ.Object[], OBJ.MaterialData[]]> {\r\n const file_name = basename_path(file_url);\r\n const file_directory = dirname_path(file_url);\r\n const obj_name = file_name.split(\".\")[0];\r\n var object_list:OBJ.Object[] = [];\r\n var material_list:OBJ.MaterialData[] = [];\r\n var current_group:OBJ.Group|null = null;\r\n var current_object:OBJ.Object = Parser.create_object(obj_name);\r\n var current_data:OBJ.Data = Parser.create_data();\r\n\r\n const temp_vertices:[number, number, number][] = []\r\n const temp_normals:[number, number, number][] = []\r\n const temp_uvs:[number, number][] = []\r\n\r\n object_list.push(current_object);\r\n\r\n var collection_type:CollectionType = CollectionType.OBJECT;\r\n\r\n const insert_data = () => {\r\n // Bake the data lists into arrays and delete temp\r\n current_data.indices = new Uint16Array(current_data.temp!.indices_final);\r\n current_data.vertices = new Float32Array(current_data.temp!.vertices_final);\r\n current_data.uvs = new Float32Array(current_data.temp!.uvs_final);\r\n current_data.normals = new Float32Array(current_data.temp!.normals_final);\r\n current_data.dimensions = new Vec3(current_data.temp!.max_x - current_data.temp!.min_x, current_data.temp!.max_y - current_data.temp!.min_y, current_data.temp!.max_z - current_data.temp!.min_z);\r\n current_data.center = new Vec3((current_data.temp!.max_x + current_data.temp!.min_x)/2.0, (current_data.temp!.max_y + current_data.temp!.min_y)/2.0, (current_data.temp!.max_z + current_data.temp!.min_z)/2.0);\r\n \r\n // set the data for the object\r\n if (collection_type === CollectionType.OBJECT) {\r\n current_object.data = current_data;\r\n } else if (current_group) {\r\n current_group.data = current_data;\r\n }\r\n current_data = Parser.create_data();\r\n }\r\n\r\n const get_object = (name:string) => {\r\n for (const object of object_list)\r\n if (object.name === name)\r\n return object;\r\n return null;\r\n }\r\n\r\n const get_group = (name:string) => {\r\n for (const group of current_object.groups)\r\n if (group.name === name)\r\n return group;\r\n return null;\r\n }\r\n \r\n const lines = text.split(\"\\n\");\r\n for (const line of lines) {\r\n const parts = line.trim().split(/\\s+/);\r\n switch (parts[0].toLowerCase()) {\r\n case \"mtllib\": \r\n material_list = material_list.concat(await Parser.load_mtl(engine, join_path(file_directory, parts[1]), image_assets_path, image_assets)); \r\n break;\r\n\r\n case \"usemtl\":\r\n if (collection_type === CollectionType.OBJECT) {\r\n if (current_object.material !== undefined && current_object.material !== parts[1]) {\r\n insert_data();\r\n // Creates an adjacent subobject with the name objectName_materialName\r\n current_object = Parser.create_object(current_object.name.replace(\"_\" + current_object.material, \"\") + \"_\" + parts[1]);\r\n current_object.material = parts[1];\r\n object_list.push(current_object);\r\n collection_type = CollectionType.OBJECT;\r\n } else {\r\n current_object.material = parts[1];\r\n }\r\n } else if (current_group) {\r\n if (current_group.material !== undefined && current_group.material !== parts[1]) {\r\n insert_data();\r\n // Creates an adjacent subobject with the name objectName_materialName\r\n current_group = Parser.create_group(current_group.name.replace(\"_\" + current_group.material, \"\") + \"_\" + parts[1]);\r\n current_group.material = parts[1];\r\n current_object.groups.push(current_group);\r\n collection_type = CollectionType.GROUP;\r\n } else {\r\n current_group.material = parts[1];\r\n }\r\n }\r\n break;\r\n \r\n case \"o\":\r\n // Object\r\n insert_data();\r\n const existing_object = get_object(parts[1])\r\n if (existing_object) {\r\n current_object = existing_object;\r\n } else {\r\n // add current_object to groups and create a new object\r\n current_object = Parser.create_object(parts[1]);\r\n object_list.push(current_object);\r\n collection_type = CollectionType.OBJECT;\r\n }\r\n break;\r\n\r\n case \"g\":\r\n insert_data();\r\n const existing_group = get_group(parts[1])\r\n if (existing_group) {\r\n current_group = existing_group;\r\n } else {\r\n // add current_object to groups and create a new object\r\n current_group = Parser.create_group(parts[1]);\r\n current_object.groups.push(current_group);\r\n collection_type = CollectionType.GROUP;\r\n }\r\n break;\r\n \r\n case \"v\":\r\n var [x, y, z] = parts.slice(1).map(Number);\r\n temp_vertices.push([x, y, z]);\r\n break;\r\n case \"vn\":\r\n var [x, y, z] = parts.slice(1).map(Number);\r\n temp_normals.push([x, y, z]);\r\n break;\r\n case \"vt\":\r\n var [u, v] = parts.slice(1).map(Number);\r\n temp_uvs.push([u, v]);\r\n break;\r\n case \"f\":\r\n // Each face can be triangles or quads\r\n const face_verts = parts.slice(1);\r\n const face_indices: number[] = [];\r\n\r\n for (const fv of face_verts) {\r\n if (!current_data.temp!.vertex_map.has(fv)) {\r\n const [vIdx, vtIdx, vnIdx] = fv.split(\"/\").map(s => parseInt(s));\r\n const [x, y, z] = temp_vertices[vIdx - 1];\r\n \r\n // FIND MINS AND MAXES\r\n current_data.temp!.min_x = x < current_data.temp!.min_x ? x : current_data.temp!.min_x;\r\n current_data.temp!.min_y = y < current_data.temp!.min_y ? y : current_data.temp!.min_y;\r\n current_data.temp!.min_z = z < current_data.temp!.min_z ? z : current_data.temp!.min_z;\r\n\r\n current_data.temp!.max_x = x > current_data.temp!.max_x ? x : current_data.temp!.max_x;\r\n current_data.temp!.max_y = y > current_data.temp!.max_y ? y : current_data.temp!.max_y;\r\n current_data.temp!.max_z = z > current_data.temp!.max_z ? z : current_data.temp!.max_z;\r\n // FIND VERTEX\r\n\r\n current_data.temp!.vertices_final.push(x, y, z);\r\n if (vtIdx && temp_uvs[vtIdx - 1])\r\n current_data.temp!.uvs_final.push(...temp_uvs[vtIdx - 1]);\r\n else\r\n current_data.temp!.uvs_final.push(0, 0);\r\n if (vnIdx && temp_normals[vnIdx - 1])\r\n current_data.temp!.normals_final.push(...temp_normals[vnIdx - 1]);\r\n else\r\n current_data.temp!.normals_final.push(0, 0, 0);\r\n const index = (current_data.temp!.vertices_final.length / 3) - 1;\r\n current_data.temp!.vertex_map.set(fv, index);\r\n face_indices.push(index);\r\n } else {\r\n face_indices.push(current_data.temp!.vertex_map.get(fv)!);\r\n }\r\n }\r\n\r\n // Triangulate quads if necessary\r\n if (face_indices.length === 3) {\r\n current_data.temp!.indices_final.push(...face_indices);\r\n } else if (face_indices.length === 4) {\r\n current_data.temp!.indices_final.push(face_indices[0], face_indices[1], face_indices[2]);\r\n current_data.temp!.indices_final.push(face_indices[0], face_indices[2], face_indices[3]);\r\n }\r\n break;\r\n }\r\n }\r\n insert_data();\r\n return [object_list, material_list];\r\n }\r\n }\r\n\r\n }\r\n}\r\n\r\nasync function parse_obj(text: string): Promise<AssetFile.OBJ.Data> {\r\n const positions: number[] = [];\r\n const normals: number[] = [];\r\n const uvs: number[] = [];\r\n const indices: number[] = [];\r\n\r\n const temp_vertices: number[][] = [];\r\n const temp_normals: number[][] = [];\r\n const temp_uvs: number[][] = [];\r\n\r\n const vertex_map = new Map<string, number>(); // maps \"v/vt/vn\" to index\r\n\r\n var [min_x, min_y, min_z] = [Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE];\r\n var [max_x, max_y, max_z] = [Number.MIN_VALUE, Number.MIN_VALUE, Number.MIN_VALUE];\r\n\r\n const lines = text.split(\"\\n\");\r\n for (const line of lines) {\r\n const parts = line.trim().split(/\\s+/);\r\n if (parts.length === 0) continue;\r\n\r\n switch(parts[0]) {\r\n case \"v\":\r\n const [x, y, z] = parts.slice(1).map(Number);\r\n \r\n min_x = x < min_x ? x : min_x;\r\n min_y = y < min_y ? y : min_y;\r\n min_z = z < min_z ? z : min_z;\r\n\r\n max_x = x > max_x ? x : max_x;\r\n max_y = y > max_y ? y : max_y;\r\n max_z = z > max_z ? z : max_z;\r\n\r\n temp_vertices.push([x, y, z]);\r\n break;\r\n case \"vn\":\r\n temp_normals.push(parts.slice(1).map(Number));\r\n break;\r\n case \"vt\":\r\n temp_uvs.push(parts.slice(1).map(Number));\r\n break;\r\n case \"f\":\r\n // Each face can be triangles or quads\r\n const face_verts = parts.slice(1);\r\n const face_indices: number[] = [];\r\n\r\n for (const fv of face_verts) {\r\n if (!vertex_map.has(fv)) {\r\n const [vIdx, vtIdx, vnIdx] = fv.split(\"/\").map(s => parseInt(s));\r\n const pos = temp_vertices[vIdx - 1];\r\n positions.push(...pos);\r\n if (vtIdx && temp_uvs[vtIdx - 1]) uvs.push(...temp_uvs[vtIdx - 1]);\r\n else uvs.push(0, 0);\r\n if (vnIdx && temp_normals[vnIdx - 1]) normals.push(...temp_normals[vnIdx - 1]);\r\n else normals.push(0, 0, 0);\r\n const index = (positions.length / 3) - 1;\r\n vertex_map.set(fv, index);\r\n face_indices.push(index);\r\n } else {\r\n face_indices.push(vertex_map.get(fv)!);\r\n }\r\n }\r\n\r\n // Triangulate quads if necessary\r\n if (face_indices.length === 3) {\r\n indices.push(...face_indices);\r\n } else if (face_indices.length === 4) {\r\n indices.push(face_indices[0], face_indices[1], face_indices[2]);\r\n indices.push(face_indices[0], face_indices[2], face_indices[3]);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return {\r\n vertices: new Float32Array(positions),\r\n normals: new Float32Array(normals),\r\n uvs: new Float32Array(uvs),\r\n indices: new Uint16Array(indices),\r\n dimensions: new Vec3(max_x - min_x, max_y - min_y, max_z - min_z),\r\n center: new Vec3((max_x + min_x)/2.0, (max_y + min_y)/2.0, (max_z + min_z)/2.0),\r\n };\r\n}\r\n\r\nexport async function load_obj(gm:GraphicsManager, model_path:string, image_asset_paths:string[]):Promise<Model|null> {\r\n var image_assets:Texture[] = [];\r\n\r\n const vertexMap = new Map<string, number>();\r\n\r\n for (const image_asset_path of image_asset_paths) {\r\n const res = await fetch(image_asset_path);\r\n if (res.ok) {\r\n const blob = await res.blob();\r\n image_assets.push(new Texture(gm, image_asset_path, await createImageBitmap(blob, { imageOrientation: 'flipY' }), TextureType.COLOR, {}));\r\n } else {\r\n throw new Error(`The .obj image asset file at \"${image_asset_path}\" does not exist.`);\r\n }\r\n }\r\n\r\n\r\n // Parse the mesh file\r\n const res = await fetch(model_path);\r\n if (res.ok) {\r\n const raw_text = await res.text();\r\n var obj = await parse_obj(raw_text);\r\n } else {\r\n throw new Error(`The .obj file at \"${model_path}\" does not exist.`);\r\n }\r\n\r\n // Build the model\r\n var mesh = new Mesh(gm, obj.vertices, obj.normals, obj.uvs, obj.indices, obj.dimensions, obj.center);\r\n var material = new Material(gm, \"default\", image_assets[0], 0.0, 0.0, 0.0, null, gm.default_3d_shader_program);\r\n var model = new Model(gm, \"default\", mesh, material);\r\n\r\n return model;\r\n}","import { GraphicsManager } from \"../graphics_manager.ts\";\r\n\r\nconst UNSIGNED_BYTE = 5121;\r\n\r\nconst UNSIGNED_INT = 5125;\r\n\r\nexport enum TextureType {\r\n COLOR = \"COLOR\",\r\n DEPTH = \"DEPTH\",\r\n COLOR_ARRAY = \"COLOR_ARRAY\",\r\n DEPTH_ARRAY = \"DEPTH_ARRAY\",\r\n}\r\n\r\nexport class Texture implements Disposable {\r\n gm:GraphicsManager;\r\n name:string;\r\n webgl_texture: WebGLTexture;\r\n texture_type:TextureType = TextureType.COLOR;\r\n\r\n internal_format:number;\r\n format:number;\r\n image_type:number = 0;\r\n width:number;\r\n height:number;\r\n image_array_size:number;\r\n mip_level:number;\r\n texture_parameters:{[parameter_name:number]:number};\r\n\r\n // Blank Texture Constructor\r\n constructor(gm:GraphicsManager, name:string, width:number, height:number, texture_type:TextureType);\r\n constructor(gm:GraphicsManager, name:string, width:number, height:number, texture_type:TextureType, texture_parameters:{[parameter_name:number]:number});\r\n constructor(gm:GraphicsManager, name:string, width:number, height:number, texture_type:TextureType, texture_parameters:{[parameter_name:number]:number}, image_type:number);\r\n \r\n // Texture Array Constructor count\r\n constructor(gm:GraphicsManager, name:string, images:number, width:number, height:number, texture_type:TextureType);\r\n constructor(gm:GraphicsManager, name:string, images:number, width:number, height:number, texture_type:TextureType, texture_parameters:{[parameter_name:number]:number});\r\n constructor(gm:GraphicsManager, name:string, images:number, width:number, height:number, texture_type:TextureType, texture_parameters:{[parameter_name:number]:number}, mip_level:number);\r\n constructor(gm:GraphicsManager, name:string, images:number, width:number, height:number, texture_type:TextureType, texture_parameters:{[parameter_name:number]:number}, mip_level:number, image_type:number);\r\n \r\n // Texture Array Constructor Images\r\n constructor(gm:GraphicsManager, name:string, images:TexImageSource[]|number, texture_type:TextureType, texture_parameters:{[parameter_name:number]:number});\r\n constructor(gm:GraphicsManager, name:string, images:TexImageSource[]|number, texture_type:TextureType, texture_parameters:{[parameter_name:number]:number}, mip_level:number);\r\n constructor(gm:GraphicsManager, name:string, images:TexImageSource[]|number, texture_type:TextureType, texture_parameters:{[parameter_name:number]:number}, mip_level:number, image_type:number);\r\n \r\n // Texture Constructor\r\n constructor(gm:GraphicsManager, name:string, image:TexImageSource, texture_type:TextureType, texture_parameters:{[parameter_name:number]:number});\r\n constructor(gm:GraphicsManager, name:string, image:TexImageSource, texture_type:TextureType, texture_parameters:{[parameter_name:number]:number}, mip_level:number);\r\n constructor(gm:GraphicsManager, name:string, image:TexImageSource, texture_type:TextureType, texture_parameters:{[parameter_name:number]:number}, mip_level:number, image_type:number);\r\n \r\n constructor(gm:GraphicsManager, name:string, arg1:any, arg2:any, arg3?:any|undefined, arg4?:any|undefined, arg5?:any|undefined, arg6?:any|undefined, arg7?:any|undefined) {\r\n this.gm = gm;\r\n this.name = name;\r\n var width = 0, height = 0, mip_level = 0;\r\n var image_array_size = 1;\r\n var texture_parameters:{[parameter_name:number]:number} = {};\r\n this.format = this.gm.gl.DEPTH_COMPONENT; // Random default, this will be set down the call tree\r\n this.internal_format = this.gm.gl.DEPTH_COMPONENT24; // Random default, this will be set down the call tree\r\n\r\n if (typeof arg1 === 'number' && typeof arg2 === 'number' && typeof arg3 === 'string' && Object.values(TextureType).includes(arg3 as TextureType)) {\r\n // Blank Texture Constructor\r\n width = arg1 as number;\r\n height = arg2 as number;\r\n this.texture_type = arg3 ? arg3 as TextureType : TextureType.COLOR;\r\n texture_parameters = arg4 ? arg4 as {[parameter_name:number]:number} : {};\r\n\r\n this.webgl_texture = this.create_texture(null, this.texture_type, texture_parameters, 0, width, height);\r\n } else if (typeof arg1 === 'number') {\r\n // Texture Array Constructor count\r\n if (arg4 !== TextureType.COLOR_ARRAY\r\n && arg4 !== TextureType.DEPTH_ARRAY\r\n && typeof arg1 === \"number\") {\r\n throw new Error(`Arg 2 \"texture_type\" must be TextureType.COLOR_ARRAY or TextureType.DEPTH_ARRAY if the \"images\" argument is an number of images.`)\r\n }\r\n\r\n image_array_size = arg1 as number;\r\n width = arg2 as number;\r\n height = arg3 as number;\r\n this.texture_type = arg4 as TextureType;\r\n texture_parameters = arg5 === undefined ? {} : arg5 as {[parameter_name:number]:number};\r\n mip_level = arg6 === undefined ? 0 : arg6 as number;\r\n this.webgl_texture = this.create_texture(image_array_size, this.texture_type, texture_parameters, mip_level, width, height);\r\n\r\n } else if (arg1 instanceof Array) {\r\n // Texture Array Constructor Images\r\n if (arg2 !== TextureType.COLOR_ARRAY && arg1 instanceof Array) {\r\n throw new Error(`Arg 2 \"texture_type\" must be TextureType.COLOR_ARRAY if the \"images\" argument is an array.`)\r\n }\r\n\r\n if (arg2 !== TextureType.COLOR_ARRAY\r\n && arg2 !== TextureType.DEPTH_ARRAY\r\n && typeof arg1 === \"number\") {\r\n throw new Error(`Arg 2 \"texture_type\" must be TextureType.COLOR_ARRAY or TextureType.DEPTH_ARRAY if the \"images\" argument is an number of images.`)\r\n }\r\n \r\n const images = arg1 as TexImageSource[];\r\n this.texture_type = arg2 as TextureType;\r\n texture_parameters = arg3 === undefined ? {} : arg3 as {[parameter_name:number]:number};\r\n mip_level = arg4 === undefined ? 0 : arg4 as number;\r\n this.webgl_texture = this.create_texture(images, this.texture_type, texture_parameters, mip_level);\r\n } else {\r\n // Texture Constructor\r\n if (arg1 instanceof Array) {\r\n throw new Error(`Arg 2 \"texture_type\" must be TextureType.COLOR_ARRAY if the \"images\" argument is an array.`)\r\n }\r\n\r\n const image = arg1 as TexImageSource;\r\n this.texture_type = arg2 as TextureType;\r\n texture_parameters = arg3 === undefined ? {} : arg3 as {[parameter_name:number]:number};\r\n mip_level = arg4 === undefined ? 0 : arg3 as number;\r\n this.webgl_texture = this.create_texture(image, this.texture_type, texture_parameters, mip_level);\r\n }\r\n \r\n // set parameters\r\n\r\n this.width = width;\r\n this.height = height;\r\n this.texture_parameters = texture_parameters;\r\n this.mip_level = mip_level;\r\n this.image_array_size = image_array_size;\r\n }\r\n\r\n resize_texture_array(new_size:number) { \r\n this.gm.gl.bindTexture(this.gm.gl.TEXTURE_2D_ARRAY, this.webgl_texture);\r\n this.gm.gl.texImage3D(\r\n this.gm.gl.TEXTURE_2D_ARRAY,\r\n 0,\r\n this.internal_format,\r\n this.width,\r\n this.height,\r\n new_size,\r\n 0,\r\n this.format,\r\n this.image_type,\r\n null\r\n );\r\n this.gm.gl.bindTexture(this.gm.gl.TEXTURE_2D_ARRAY, null);\r\n }\r\n\r\n [Symbol.dispose](): void {\r\n this.gm.gl.deleteTexture(this.webgl_texture);\r\n }\r\n\r\n private create_texture(image:TexImageSource[]|TexImageSource|number|null, texture_type:TextureType, texture_parameters:{[parameter_name:number]:number}, mip_level:number, width:number = 0, height:number = 0):WebGLTexture {\r\n switch (texture_type) {\r\n case TextureType.COLOR:\r\n return this.create_color_texture(image as TexImageSource, width, height, mip_level, texture_parameters);\r\n case TextureType.DEPTH:\r\n return this.create_depth_texture(image as TexImageSource, width, height, texture_parameters);\r\n case TextureType.COLOR_ARRAY:\r\n return this.create_color_array_texture(image as TexImageSource[]|number, width, height, mip_level, texture_parameters);\r\n case TextureType.DEPTH_ARRAY:\r\n return this.create_depth_array_texture(Math.max(image as number, 1), width, height, texture_parameters);\r\n\r\n }\r\n }\r\n\r\n private create_depth_array_texture(images:number, width:number = 0, height:number = 0, texture_parameters:{[parameter_name:number]:number}) {\r\n // images is a count of images. \r\n let texture = this.gm.gl.createTexture();\r\n if (!texture) throw new Error(\"Failed to create texture\");\r\n this.gm.gl.bindTexture(this.gm.gl.TEXTURE_2D_ARRAY, texture);\r\n this.internal_format = this.gm.gl.DEPTH_COMPONENT24;\r\n this.format = this.gm.gl.DEPTH_COMPONENT;\r\n this.image_type = this.gm.gl.UNSIGNED_INT;\r\n this.gm.gl.texImage3D(\r\n this.gm.gl.TEXTURE_2D_ARRAY,\r\n 0,\r\n this.internal_format,\r\n width,\r\n height,\r\n images,\r\n 0,\r\n this.format,\r\n this.image_type,\r\n null\r\n );\r\n\r\n this.gm.gl.texParameteri(this.gm.gl.TEXTURE_2D_ARRAY, this.gm.gl.TEXTURE_MIN_FILTER, this.gm.gl.NEAREST);\r\n this.gm.gl.texParameteri(this.gm.gl.TEXTURE_2D_ARRAY, this.gm.gl.TEXTURE_MAG_FILTER, this.gm.gl.NEAREST);\r\n this.gm.gl.texParameteri(this.gm.gl.TEXTURE_2D_ARRAY, this.gm.gl.TEXTURE_WRAP_S, this.gm.gl.CLAMP_TO_EDGE);\r\n this.gm.gl.texParameteri(this.gm.gl.TEXTURE_2D_ARRAY, this.gm.gl.TEXTURE_WRAP_T, this.gm.gl.CLAMP_TO_EDGE);\r\n this.gm.gl.texParameteri(this.gm.gl.TEXTURE_2D_ARRAY, this.gm.gl.TEXTURE_BASE_LEVEL, 0);\r\n this.gm.gl.texParameteri(this.gm.gl.TEXTURE_2D_ARRAY, this.gm.gl.TEXTURE_MAX_LEVEL, 0);\r\n \r\n for (let [parameter_name_string, parameter_value] of Object.entries(texture_parameters)) {\r\n let parameter_name = Number(parameter_name_string);\r\n this.gm.gl.texParameteri(this.gm.gl.TEXTURE_2D_ARRAY, parameter_name, parameter_value);\r\n }\r\n \r\n this.gm.gl.bindTexture(this.gm.gl.TEXTURE_2D_ARRAY, null);\r\n\r\n return texture;\r\n }\r\n\r\n private create_color_array_texture(images:TexImageSource[]|number, width:number = 0, height:number = 0, mip_level:number, texture_parameters:{[parameter_name:number]:number}) {\r\n // images is either a list of images or a count of images to allocate for.\r\n let texture = this.gm.gl.createTexture();\r\n if (!texture) throw new Error(\"Failed to create texture\");\r\n this.gm.gl.bindTexture(this.gm.gl.TEXTURE_2D_ARRAY, texture);\r\n this.internal_format = this.gm.gl.RGBA;\r\n this.format = this.gm.gl.RGBA;\r\n this.image_type = this.gm.gl.UNSIGNED_BYTE;\r\n if (images instanceof Array) {\r\n this.gm.gl.texImage3D(\r\n this.gm.gl.TEXTURE_2D_ARRAY,\r\n mip_level,\r\n this.internal_format,\r\n width,\r\n height,\r\n images.length,\r\n 0,\r\n this.format,\r\n this.image_type,\r\n null\r\n );\r\n\r\n for (var i = 0; i < (images as TexImageSource[]).length; ++i) {\r\n const image = (images as TexImageSource[])[i];\r\n this.gm.gl.texSubImage3D(\r\n this.gm.gl.TEXTURE_2D_ARRAY,\r\n mip_level,\r\n 0, 0, i, // x, y, z offset\r\n width,\r\n height,\r\n 1, // z depth\r\n this.format,\r\n this.image_type,\r\n image\r\n );\r\n }\r\n } else {\r\n this.gm.gl.texImage3D(\r\n this.gm.gl.TEXTURE_2D_ARRAY,\r\n mip_level,\r\n this.internal_format,\r\n width,\r\n height,\r\n Math.max(images, 1),\r\n 0,\r\n this.format,\r\n this.image_type,\r\n null\r\n );\r\n }\r\n \r\n for (let [parameter_name_string, parameter_value] of Object.entries(texture_parameters)) {\r\n let parameter_name = Number(parameter_name_string);\r\n this.gm.gl.texParameteri(this.gm.gl.TEXTURE_2D_ARRAY, parameter_name, parameter_value);\r\n }\r\n\r\n if (images)\r\n this.gm.gl.generateMipmap(this.gm.gl.TEXTURE_2D_ARRAY);\r\n \r\n this.gm.gl.bindTexture(this.gm.gl.TEXTURE_2D_ARRAY, null);\r\n\r\n return texture;\r\n }\r\n \r\n private create_color_texture(image:TexImageSource|null, width:number = 0, height:number = 0, mip_level:number, texture_parameters:{[parameter_name:number]:number}) {\r\n let texture = this.gm.gl.createTexture();\r\n if (!texture) throw new Error(\"Failed to create texture\");\r\n this.gm.gl.bindTexture(this.gm.gl.TEXTURE_2D, texture);\r\n this.internal_format = this.gm.gl.RGBA;\r\n this.format = this.gm.gl.RGBA;\r\n this.image_type = this.gm.gl.UNSIGNED_BYTE;\r\n if (image === null)\r\n this.gm.gl.texImage2D(\r\n this.gm.gl.TEXTURE_2D,\r\n mip_level,\r\n this.internal_format,\r\n width,\r\n height,\r\n 0,\r\n this.format,\r\n this.image_type,\r\n null\r\n );\r\n else\r\n this.gm.gl.texImage2D(\r\n this.gm.gl.TEXTURE_2D,\r\n mip_level,\r\n this.internal_format,\r\n this.format,\r\n this.image_type,\r\n image as TexImageSource\r\n );\r\n\r\n \r\n for (let [parameter_name_string, parameter_value] of Object.entries(texture_parameters)) {\r\n let parameter_name = Number(parameter_name_string);\r\n this.gm.gl.texParameteri(this.gm.gl.TEXTURE_2D, parameter_name, parameter_value);\r\n }\r\n\r\n this.gm.gl.generateMipmap(this.gm.gl.TEXTURE_2D);\r\n \r\n this.gm.gl.bindTexture(this.gm.gl.TEXTURE_2D, null);\r\n\r\n return texture;\r\n }\r\n\r\n private create_depth_texture(image:TexImageSource|null, width:number = 0, height:number = 0, texture_parameters:{[parameter_name:number]:number}) {\r\n let texture = this.gm.gl.createTexture();\r\n if (!texture) throw new Error(\"Failed to create texture\");\r\n this.gm.gl.bindTexture(this.gm.gl.TEXTURE_2D, texture);\r\n this.internal_format = this.gm.gl.DEPTH_COMPONENT24;\r\n this.format = this.gm.gl.DEPTH_COMPONENT;\r\n this.image_type = this.gm.gl.UNSIGNED_INT;\r\n if (image === null)\r\n this.gm.gl.texImage2D(\r\n this.gm.gl.TEXTURE_2D,\r\n 0,\r\n this.internal_format,\r\n width,\r\n height,\r\n 0,\r\n this.format,\r\n this.image_type,\r\n null\r\n );\r\n else\r\n this.gm.gl.texImage2D(\r\n this.gm.gl.TEXTURE_2D,\r\n 0,\r\n this.internal_format,\r\n this.format,\r\n this.image_type,\r\n image as TexImageSource\r\n );\r\n\r\n \r\n for (let [parameter_name_string, parameter_value] of Object.entries(texture_parameters)) {\r\n let parameter_name = Number(parameter_name_string);\r\n this.gm.gl.texParameteri(this.gm.gl.TEXTURE_2D, parameter_name, parameter_value);\r\n }\r\n\r\n this.gm.gl.generateMipmap(this.gm.gl.TEXTURE_2D);\r\n \r\n this.gm.gl.bindTexture(this.gm.gl.TEXTURE_2D, null);\r\n\r\n return texture;\r\n }\r\n}\r\n\r\nexport class CubeMapTexture implements Disposable {\r\n gm:GraphicsManager;\r\n name:string;\r\n webgl_texture: WebGLTexture;\r\n size:number;\r\n\r\n constructor(gm:GraphicsManager,\r\n name:string,\r\n size:number,\r\n texture_type:TextureType\r\n );\r\n\r\n constructor(gm:GraphicsManager,\r\n name:string,\r\n size:number,\r\n texture_type:TextureType,\r\n mip_level:number,\r\n );\r\n\r\n constructor(gm:GraphicsManager,\r\n name:string,\r\n size:number,\r\n texture_type:TextureType,\r\n mip_level:number,\r\n image_type:number,\r\n );\r\n\r\n constructor(gm:GraphicsManager,\r\n name:string,\r\n size:number,\r\n texture_type:TextureType,\r\n mip_level:number,\r\n image_type:number,\r\n texture_parameters:{[parameter_name:number]:number}\r\n );\r\n\r\n constructor(gm:GraphicsManager,\r\n name:string,\r\n size:number,\r\n texture_type:TextureType,\r\n image_top:TexImageSource|Float32Array,\r\n image_bottom:TexImageSource|Float32Array,\r\n image_front:TexImageSource|Float32Array,\r\n image_back:TexImageSource|Float32Array,\r\n image_left:TexImageSource|Float32Array,\r\n image_right:TexImageSource|Float32Array,\r\n texture_parameters:{[parameter_name:number]:number},\r\n mip_level:number,\r\n );\r\n\r\n constructor(gm:GraphicsManager,\r\n name:string,\r\n size:number,\r\n texture_type:TextureType,\r\n image_top:TexImageSource|Float32Array,\r\n image_bottom:TexImageSource|Float32Array,\r\n image_front:TexImageSource|Float32Array,\r\n image_back:TexImageSource|Float32Array,\r\n image_left:TexImageSource|Float32Array,\r\n image_right:TexImageSource|Float32Array,\r\n texture_parameters:{[parameter_name:number]:number},\r\n mip_level:number,\r\n image_type:number\r\n );\r\n\r\n constructor(gm:GraphicsManager,\r\n name:string,\r\n texture_type:TextureType,\r\n image_top:TexImageSource|Float32Array,\r\n image_bottom:TexImageSource|Float32Array,\r\n image_front:TexImageSource|Float32Array,\r\n image_back:TexImageSource|Float32Array,\r\n image_left:TexImageSource|Float32Array,\r\n image_right:TexImageSource|Float32Array,\r\n texture_parameters:{[parameter_name:number]:number},\r\n mip_level:number,\r\n );\r\n\r\n constructor(gm:GraphicsManager,\r\n name:string,\r\n texture_type:TextureType,\r\n image_top:TexImageSource|Float32Array,\r\n image_bottom:TexImageSource|Float32Array,\r\n image_front:TexImageSource|Float32Array,\r\n image_back:TexImageSource|Float32Array,\r\n image_left:TexImageSource|Float32Array,\r\n image_right:TexImageSource|Float32Array,\r\n texture_parameters:{[parameter_name:number]:number},\r\n mip_level:number,\r\n image_type:number\r\n );\r\n\r\n constructor(gm:GraphicsManager, name:string, arg1:any, arg2:any, arg3:any = 0, arg4:any = UNSIGNED_INT, arg5:any = {}, arg6?:any|undefined, arg7?:any|undefined, arg8?:any|undefined, arg9?:any|undefined, arg10?:any|undefined, arg11?:any|undefined) {\r\n this.gm = gm;\r\n this.name = name;\r\n \r\n if (arg6 === undefined) {\r\n const size:number = arg1;\r\n this.size = size;\r\n const texture_type:TextureType = arg2;\r\n const mip_level:number = arg3;\r\n const image_type:number = arg4;\r\n const texture_parameters:{[parameter_name:number]:number} = arg5;\r\n this.webgl_texture = this.create_depth_texture(size, texture_type, texture_parameters, mip_level, image_type);\r\n } else {\r\n var size:number = 0;\r\n var texture_type:TextureType;\r\n var image_top:TexImageSource;\r\n var image_bottom:TexImageSource;\r\n var image_front:TexImageSource;\r\n var image_back:TexImageSource;\r\n var image_left:TexImageSource;\r\n var image_right:TexImageSource;\r\n var texture_parameters:{[parameter_name:number]:number};\r\n var mip_level:number;\r\n var image_type:number;\r\n if (typeof arg1 === \"number\") {\r\n size = arg1;\r\n texture_type = arg2;\r\n image_top = arg3;\r\n image_bottom = arg4;\r\n image_front = arg5;\r\n image_back = arg6;\r\n image_left = arg7;\r\n image_right = arg8;\r\n texture_parameters = arg9;\r\n mip_level = arg10;\r\n image_type = arg11;\r\n } else {\r\n texture_type = arg1;\r\n image_top = arg2;\r\n image_bottom = arg3;\r\n image_front = arg4;\r\n image_back = arg5;\r\n image_left = arg6;\r\n image_right = arg7;\r\n texture_parameters = arg8;\r\n mip_level = arg9;\r\n image_type = arg10 ? arg10 : UNSIGNED_BYTE;\r\n }\r\n\r\n this.size = size;\r\n \r\n this.webgl_texture = this.create_texture(size, [\r\n image_right,\r\n image_left,\r\n image_top,\r\n image_bottom,\r\n image_front,\r\n image_back\r\n ], texture_parameters, mip_level, image_type);\r\n }\r\n \r\n }\r\n\r\n [Symbol.dispose](): void {\r\n this.gm.gl.deleteTexture(this.webgl_texture);\r\n }\r\n\r\n private create_depth_texture(size:number, texture_type:TextureType, texture_parameters:{[parameter_name:number]:number}, mip_level:number, image_type:number) {\r\n let texture = this.gm.gl.createTexture();\r\n if (!texture) throw new Error(\"Failed to create texture\");\r\n this.gm.gl.bindTexture(this.gm.gl.TEXTURE_CUBE_MAP, texture);\r\n \r\n for (let i = 0; i < 6; i++) {\r\n this.gm.gl.texImage2D(\r\n this.gm.gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, \r\n mip_level, // mip level\r\n this.gm.gl.DEPTH_COMPONENT24, // internal format\r\n size, size, // width, height\r\n 0, // border\r\n this.gm.gl.DEPTH_COMPONENT, // format\r\n image_type, // type\r\n null // no data yet\r\n );\r\n }\r\n \r\n this.gm.gl.texParameteri(this.gm.gl.TEXTURE_CUBE_MAP, this.gm.gl.TEXTURE_MAG_FILTER, this.gm.gl.NEAREST);\r\n this.gm.gl.texParameteri(this.gm.gl.TEXTURE_CUBE_MAP, this.gm.gl.TEXTURE_MIN_FILTER, this.gm.gl.NEAREST);\r\n this.gm.gl.texParameteri(this.gm.gl.TEXTURE_CUBE_MAP, this.gm.gl.TEXTURE_WRAP_S, this.gm.gl.CLAMP_TO_EDGE);\r\n this.gm.gl.texParameteri(this.gm.gl.TEXTURE_CUBE_MAP, this.gm.gl.TEXTURE_WRAP_T, this.gm.gl.CLAMP_TO_EDGE);\r\n this.gm.gl.texParameteri(this.gm.gl.TEXTURE_CUBE_MAP, this.gm.gl.TEXTURE_WRAP_R, this.gm.gl.CLAMP_TO_EDGE);\r\n this.gm.gl.texParameteri(this.gm.gl.TEXTURE_CUBE_MAP, this.gm.gl.TEXTURE_COMPARE_MODE, this.gm.gl.COMPARE_REF_TO_TEXTURE);\r\n this.gm.gl.texParameteri(this.gm.gl.TEXTURE_CUBE_MAP, this.gm.gl.TEXTURE_COMPARE_FUNC, this.gm.gl.LEQUAL);\r\n\r\n for (let [parameter_name_string, parameter_value] of Object.entries(texture_parameters)) {\r\n let parameter_name = Number(parameter_name_string);\r\n this.gm.gl.texParameteri(this.gm.gl.TEXTURE_CUBE_MAP, parameter_name, parameter_value);\r\n }\r\n\r\n this.gm.gl.bindTexture(this.gm.gl.TEXTURE_CUBE_MAP, null);\r\n\r\n return texture;\r\n }\r\n\r\n private create_texture(size:number, images:(TexImageSource|Float32Array)[], texture_parameters:{[parameter_name:number]:number}, mip_level:number, image_type:number = this.gm.gl.UNSIGNED_BYTE):WebGLTexture {\r\n let texture = this.gm.gl.createTexture();\r\n if (!texture) throw new Error(\"Failed to create texture\");\r\n this.gm.gl.bindTexture(this.gm.gl.TEXTURE_CUBE_MAP, texture);\r\n\r\n const targets = [\r\n this.gm.gl.TEXTURE_CUBE_MAP_POSITIVE_X, // right\r\n this.gm.gl.TEXTURE_CUBE_MAP_NEGATIVE_X, // left\r\n this.gm.gl.TEXTURE_CUBE_MAP_POSITIVE_Y, // top\r\n this.gm.gl.TEXTURE_CUBE_MAP_NEGATIVE_Y, // bottom\r\n this.gm.gl.TEXTURE_CUBE_MAP_POSITIVE_Z, // front\r\n this.gm.gl.TEXTURE_CUBE_MAP_NEGATIVE_Z, // back\r\n ];\r\n\r\n\r\n targets.forEach((target, i) => {\r\n if (images[i] instanceof Float32Array)\r\n this.gm.gl.texImage2D(target, mip_level, this.gm.gl.RGBA32F, size, size, 0, this.gm.gl.RGBA, image_type, images[i]);\r\n else\r\n this.gm.gl.texImage2D(target, mip_level, this.gm.gl.RGBA, this.gm.gl.RGBA, image_type, images[i]);\r\n });\r\n \r\n this.gm.gl.generateMipmap(this.gm.gl.TEXTURE_CUBE_MAP);\r\n \r\n this.gm.gl.texParameteri(this.gm.gl.TEXTURE_CUBE_MAP, this.gm.gl.TEXTURE_MIN_FILTER, this.gm.gl.LINEAR_MIPMAP_LINEAR);\r\n this.gm.gl.texParameteri(this.gm.gl.TEXTURE_CUBE_MAP, this.gm.gl.TEXTURE_MAG_FILTER, this.gm.gl.LINEAR);\r\n this.gm.gl.texParameteri(this.gm.gl.TEXTURE_CUBE_MAP, this.gm.gl.TEXTURE_WRAP_S, this.gm.gl.CLAMP_TO_EDGE);\r\n this.gm.gl.texParameteri(this.gm.gl.TEXTURE_CUBE_MAP, this.gm.gl.TEXTURE_WRAP_T, this.gm.gl.CLAMP_TO_EDGE);\r\n this.gm.gl.texParameteri(this.gm.gl.TEXTURE_CUBE_MAP, this.gm.gl.TEXTURE_WRAP_R, this.gm.gl.CLAMP_TO_EDGE);\r\n \r\n for (let [parameter_name_string, parameter_value] of Object.entries(texture_parameters)) {\r\n let parameter_name = Number(parameter_name_string);\r\n this.gm.gl.texParameteri(this.gm.gl.TEXTURE_CUBE_MAP, parameter_name, parameter_value);\r\n }\r\n \r\n this.gm.gl.bindTexture(this.gm.gl.TEXTURE_CUBE_MAP, null);\r\n\r\n return texture;\r\n }\r\n}","import { GraphicsManager } from \"../graphics_manager.ts\";\r\nimport { ShaderProgram } from \"../shader_program.ts\";\r\nimport { Material } from \"./material.ts\";\r\nimport { Mesh } from \"./mesh.ts\";\r\n\r\nexport class Model {\r\n gm:GraphicsManager;\r\n name:string;\r\n mesh:Mesh;\r\n material:Material;\r\n\r\n constructor(\r\n gm:GraphicsManager,\r\n name:string,\r\n mesh:Mesh,\r\n material:Material,\r\n ) {\r\n this.gm = gm;\r\n this.name = name;\r\n this.mesh = mesh;\r\n this.material = material;\r\n }\r\n\r\n\r\n draw_start() {\r\n if (!this.gm.engine.main_scene.rendering_depth_map)\r\n this.material.draw_start();\r\n }\r\n\r\n draw_end() {\r\n this.mesh.draw();\r\n if (!this.gm.engine.main_scene.rendering_depth_map)\r\n this.material.draw_end();\r\n }\r\n}","export function degrees_to_radians(degrees:number):number {\r\n return degrees * (Math.PI / 180);\r\n};\r\n\r\nexport function get_uniform_label_index(raw_label:string):number {\r\n const match = raw_label.match(/\\[(\\d+)\\][^\\[]*$/);\r\n return match ? parseInt(match[1], 10) : 0;\r\n}\r\n\r\nexport function normalize_uniform_label(raw_label:string) {\r\n var return_label = \"\";\r\n var start_ignore = false;\r\n var is_array = false;\r\n for (const char of raw_label) {\r\n switch (char) {\r\n case '[':\r\n start_ignore = true;\r\n is_array = true;\r\n break;\r\n\r\n case ']':\r\n start_ignore = false;\r\n is_array = true;\r\n break;\r\n \r\n default:\r\n if (!start_ignore)\r\n return_label += char;\r\n break;\r\n }\r\n }\r\n\r\n if (is_array)\r\n return_label = \"[]\" + return_label;\r\n \r\n return return_label;\r\n}\r\n\r\nexport function parse_path(p: string) {\r\n const parts = p.split(\"/\");\r\n const base = parts.pop() || \"\";\r\n const dir = parts.join(\"/\") || \"\";\r\n const extIndex = base.lastIndexOf(\".\");\r\n\r\n const ext = extIndex !== -1 ? base.slice(extIndex) : \"\";\r\n const name = extIndex !== -1 ? base.slice(0, extIndex) : base;\r\n\r\n return {\r\n root: p.startsWith(\"/\") ? \"/\" : \"\",\r\n dir,\r\n base,\r\n ext,\r\n name\r\n };\r\n}\r\n\r\nexport function join_path(...parts: string[]): string {\r\n return parts\r\n .filter(part => part && typeof part === \"string\")\r\n .join(\"/\")\r\n .replace(/\\/+/g, \"/\") // collapse multiple slashes\r\n .replace(/\\/\\.\\//g, \"/\") // remove \"/./\"\r\n .replace(/(^|\\/)(?!\\.\\.)[^\\/]+\\/\\.\\.\\//g, \"$1\"); // resolve \"../\"\r\n}\r\n\r\nexport function basename_path(path: string, ext?: string): string {\r\n if (!path) return \"\";\r\n\r\n // remove trailing slashes\r\n path = path.replace(/\\/+$/, \"\");\r\n\r\n const idx = path.lastIndexOf(\"/\");\r\n let base = idx === -1 ? path : path.slice(idx + 1);\r\n\r\n if (ext && base.endsWith(ext)) {\r\n base = base.slice(0, -ext.length);\r\n }\r\n\r\n return base;\r\n}\r\n\r\nexport function dirname_path(path: string): string {\r\n if (!path) return \".\";\r\n\r\n const hasRoot = path.startsWith(\"/\");\r\n\r\n // remove trailing slashes\r\n path = path.replace(/\\/+$/, \"\");\r\n\r\n const idx = path.lastIndexOf(\"/\");\r\n\r\n if (idx === -1) return \".\";\r\n if (idx === 0) return \"/\";\r\n\r\n return path.slice(0, idx);\r\n}","import { GraphicsManager } from \"./graphics_manager.ts\";\r\nimport { get_uniform_label_index, normalize_uniform_label } from \"./utility.ts\";\r\n\r\nexport type WebGLShaderType = number;\r\n\r\nexport enum WebGLUniformType {\r\n TEXTURE_2D,\r\n TEXTURE_2D_ARRAY,\r\n TEXTURE_CUBE_MAP,\r\n SHADOW_2D,\r\n SHADOW_2D_ARRAY,\r\n SHADOW_CUBE_MAP,\r\n STRUCT,\r\n F,\r\n I,\r\n B,\r\n F2V,\r\n I2V,\r\n F3V,\r\n I3V,\r\n F4V,\r\n I4V,\r\n F2M,\r\n F3M,\r\n F4M,\r\n}\r\n\r\nexport interface WebGLUniform {\r\n label:string;\r\n type:WebGLUniformType;\r\n is_array:boolean;\r\n texture_unit?:number;\r\n};\r\n\r\ninterface UBOParameter {\r\n label: string;\r\n index: number;\r\n offset: number;\r\n}\r\n\r\ninterface UBOBase {\r\n webgl_buffer: WebGLBuffer;\r\n}\r\n\r\ninterface UBOParameters {\r\n [parameter:string]: UBOParameter;\r\n}\r\n\r\nexport type UBO = UBOBase & UBOParameters;\r\n\r\nexport class ShaderProgram {\r\n gl:WebGLRenderingContext;\r\n gm:GraphicsManager;\r\n name:string;\r\n shaders:Array<WebGLShader> = [];\r\n webgl_shader_program:WebGLProgram|null = null;\r\n uniforms:{[key:string]:WebGLUniform} = {};\r\n uniform_locs:{[key:string]:WebGLUniformLocation|null} = {};\r\n texture_counter:number = 0;\r\n ubo_counter:number = 0;\r\n ubos:{[location:string]:UBO} = {}\r\n\r\n constructor(name:string, gm:GraphicsManager, gl:WebGLRenderingContext) {\r\n this.gm = gm;\r\n this.gl = gl;\r\n this.name = name;\r\n }\r\n\r\n add_shader(type: WebGLShaderType, source: string) {\r\n const shader = this.gl.createShader(type)!;\r\n this.gl.shaderSource(shader, source);\r\n this.gl.compileShader(shader);\r\n if (!this.gl.getShaderParameter(shader, this.gl.COMPILE_STATUS)) {\r\n console.error(this.gl.getShaderInfoLog(shader));\r\n }\r\n this.shaders.push(shader);\r\n }\r\n\r\n add_uniform(label:string, uniform_type:WebGLUniformType) {\r\n const uniform_size = Math.max(1, get_uniform_label_index(label));\r\n let label_normalized = normalize_uniform_label(label);\r\n label = label_normalized.replace(\"[]\", \"\");\r\n this.uniforms[label] = {\r\n label,\r\n type:uniform_type,\r\n is_array:label_normalized.startsWith(\"[]\")\r\n }\r\n \r\n\r\n if ([\r\n WebGLUniformType.TEXTURE_2D,\r\n WebGLUniformType.TEXTURE_2D_ARRAY,\r\n WebGLUniformType.TEXTURE_CUBE_MAP,\r\n WebGLUniformType.SHADOW_2D,\r\n WebGLUniformType.SHADOW_2D_ARRAY,\r\n WebGLUniformType.SHADOW_CUBE_MAP,\r\n ].includes(uniform_type)) {\r\n this.uniforms[label].texture_unit = this.texture_counter;\r\n \r\n this.texture_counter += uniform_size;\r\n }\r\n }\r\n\r\n build() {\r\n this.webgl_shader_program = this.gl.createProgram();\r\n \r\n for (let shader of this.shaders) {\r\n this.gl.attachShader(this.webgl_shader_program, shader);\r\n }\r\n \r\n this.gl.linkProgram(this.webgl_shader_program);\r\n if (!this.gl.getProgramParameter(this.webgl_shader_program, this.gl.LINK_STATUS)) {\r\n console.error(this.gl.getProgramInfoLog(this.webgl_shader_program));\r\n }\r\n\r\n this.use();\r\n // find uniform locs\r\n\r\n for (let [label, uniform] of Object.entries(this.uniforms)) {\r\n \r\n const loc = this.gl.getUniformLocation(this.webgl_shader_program!, label);\r\n if (!loc) {\r\n console.warn(`Uniform \"${label}\" not in use in shader program \"${this.name}\".`)\r\n }\r\n\r\n this.uniform_locs[label] = loc;\r\n }\r\n\r\n this.gm.clear_shader();\r\n }\r\n\r\n use() {\r\n this.gm.use_shader(this.name);\r\n }\r\n}","import { Vec3 } from \"@vicimpa/glm\";\r\nimport { GraphicsManager } from \"../graphics_manager.ts\";\r\nimport { ShaderProgram } from \"../shader_program.ts\";\r\nimport { Texture } from \"./texture.ts\";\r\n\r\nexport interface MaterialOptionsObject {\r\n enable_depth_test?:boolean;\r\n blend_function?: {\r\n sfactor: GLenum, dfactor: GLenum\r\n }\r\n}\r\n\r\nexport class Material {\r\n gm:GraphicsManager;\r\n name:string;\r\n shader_program:ShaderProgram|null;\r\n albedo:Vec3|Texture;\r\n metalic:number|Texture;\r\n roughness:number|Texture;\r\n ao:number|Texture;\r\n normal:Texture|null = null;\r\n\r\n // OPTIONS\r\n enable_depth_test?:boolean = true;\r\n blend_function?:{\r\n sfactor: GLenum, dfactor: GLenum\r\n };\r\n\r\n constructor(\r\n gm:GraphicsManager,\r\n name:string,\r\n albedo:Vec3|Texture,\r\n metalic:number|Texture,\r\n roughness:number|Texture,\r\n ao:number|Texture,\r\n normal:Texture|null = null,\r\n shader_program:string|ShaderProgram|null = null,\r\n options:MaterialOptionsObject = {},\r\n ) {\r\n this.gm = gm;\r\n this.name = name;\r\n this.albedo = albedo;\r\n this.metalic = metalic;\r\n this.roughness = roughness;\r\n this.ao = ao;\r\n this.normal = normal;\r\n\r\n if(shader_program) {\r\n if (shader_program instanceof ShaderProgram) {\r\n this.shader_program = shader_program;\r\n } else {\r\n this.shader_program = gm.shader_programs[shader_program];\r\n }\r\n } else {\r\n this.shader_program = this.gm.create_default_3d_shader_program();\r\n }\r\n\r\n // OPTIONS\r\n if (options.enable_depth_test !== undefined)\r\n this.enable_depth_test = options.enable_depth_test;\r\n this.blend_function = options.blend_function;\r\n }\r\n\r\n set_shader_program(shader_program:string|ShaderProgram) {\r\n if (shader_program instanceof ShaderProgram) {\r\n this.shader_program = shader_program;\r\n } else {\r\n this.shader_program = this.gm.shader_programs[shader_program];\r\n }\r\n }\r\n\r\n set_shader_uniforms(shader_program:ShaderProgram): void {\r\n shader_program.use();\r\n this.set_uniforms();\r\n this.gm.clear_shader();\r\n }\r\n\r\n set_uniforms(): void {\r\n if (this.normal === null) {\r\n this.gm.set_uniform(`material.has_normal_texture`, false);\r\n } else {\r\n this.gm.set_uniform(`material.has_normal_texture`, true);\r\n this.gm.set_uniform(`material_texture_normal`, this.normal);\r\n }\r\n\r\n if (this.albedo instanceof Texture) {\r\n this.gm.set_uniform(`material.has_albedo_texture`, true);\r\n this.gm.set_uniform(`material_texture_albedo`, this.albedo);\r\n } else {\r\n this.gm.set_uniform(`material.has_albedo_texture`, false);\r\n this.gm.set_uniform(`material.albedo`, this.albedo);\r\n }\r\n\r\n if (this.metalic instanceof Texture) {\r\n this.gm.set_uniform(`material.has_metalic_texture`, true);\r\n this.gm.set_uniform(`material_texture_metalic`, this.metalic);\r\n } else {\r\n this.gm.set_uniform(`material.has_metalic_texture`, false);\r\n this.gm.set_uniform(`material.metalic`, this.metalic);\r\n }\r\n\r\n if (this.roughness instanceof Texture) {\r\n this.gm.set_uniform(`material.has_roughness_texture`, true);\r\n this.gm.set_uniform(`material_texture_roughness`, this.roughness);\r\n } else {\r\n this.gm.set_uniform(`material.has_roughness_texture`, false);\r\n this.gm.set_uniform(`material.roughness`, this.roughness);\r\n }\r\n }\r\n\r\n draw_start(set_uniforms:boolean = true) {\r\n if (!this.shader_program)\r\n throw Error(`Shader program not set for model.`);\r\n\r\n if (this.enable_depth_test)\r\n this.gm.gl.enable(this.gm.gl.DEPTH_TEST);\r\n else\r\n this.gm.gl.disable(this.gm.gl.DEPTH_TEST);\r\n\r\n if (this.blend_function) {\r\n this.gm.gl.enable(this.gm.gl.BLEND);\r\n this.gm.gl.blendFunc(this.blend_function.sfactor, this.blend_function.dfactor)\r\n } else {\r\n this.gm.gl.disable(this.gm.gl.BLEND);\r\n }\r\n\r\n this.shader_program.use();\r\n\r\n if (set_uniforms)\r\n this.set_uniforms();\r\n }\r\n\r\n draw_end() {\r\n if (this.enable_depth_test)\r\n this.gm.gl.disable(this.gm.gl.DEPTH_TEST);\r\n\r\n if (this.blend_function) {\r\n this.gm.gl.disable(this.gm.gl.BLEND);\r\n }\r\n\r\n this.gm.clear_shader();\r\n }\r\n}","import { Vec3 } from \"@vicimpa/glm\";\r\nimport { GraphicsManager } from \"../graphics_manager.ts\";\r\n\r\nexport class Mesh {\r\n gm: GraphicsManager;\r\n vao: WebGLVertexArrayObject;\r\n vertexCount: number;\r\n indexCount: number;\r\n dimensions: Vec3;\r\n center: Vec3;\r\n\r\n constructor(\r\n gm: GraphicsManager,\r\n vertices: Float32Array|number[], // xyz\r\n normals: Float32Array|number[], // xyz\r\n uvs: Float32Array|number[], // uv\r\n indices: Uint16Array|number[], // triangle indices\r\n dimensions: Vec3,\r\n center: Vec3,\r\n ) {\r\n this.gm = gm\r\n this.vertexCount = vertices.length / 3;\r\n this.indexCount = indices.length;\r\n this.dimensions = dimensions;\r\n this.center = center;\r\n\r\n // Create buffers\r\n const vboPositions = gm.gl.createBuffer()!;\r\n const vboNormals = gm.gl.createBuffer()!;\r\n const vboUVs = gm.gl.createBuffer()!;\r\n const ibo = gm.gl.createBuffer()!;\r\n\r\n // Create VAO\r\n this.vao = gm.gl.createVertexArray()!;\r\n gm.gl.bindVertexArray(this.vao);\r\n\r\n // Positions\r\n gm.gl.bindBuffer(gm.gl.ARRAY_BUFFER, vboPositions);\r\n gm.gl.bufferData(gm.gl.ARRAY_BUFFER, vertices as Float32Array, gm.gl.STATIC_DRAW);\r\n gm.gl.enableVertexAttribArray(0); // location 0 in shader\r\n gm.gl.vertexAttribPointer(0, 3, gm.gl.FLOAT, false, 0, 0);\r\n\r\n // Normals\r\n gm.gl.bindBuffer(gm.gl.ARRAY_BUFFER, vboNormals);\r\n gm.gl.bufferData(gm.gl.ARRAY_BUFFER, normals as Float32Array, gm.gl.STATIC_DRAW);\r\n gm.gl.enableVertexAttribArray(1); // location 1 in shader\r\n gm.gl.vertexAttribPointer(1, 3, gm.gl.FLOAT, false, 0, 0);\r\n\r\n // UVs\r\n gm.gl.bindBuffer(gm.gl.ARRAY_BUFFER, vboUVs);\r\n gm.gl.bufferData(gm.gl.ARRAY_BUFFER, uvs as Float32Array, gm.gl.STATIC_DRAW);\r\n gm.gl.enableVertexAttribArray(2); // location 2 in shader\r\n gm.gl.vertexAttribPointer(2, 2, gm.gl.FLOAT, false, 0, 0);\r\n\r\n // Indices\r\n gm.gl.bindBuffer(gm.gl.ELEMENT_ARRAY_BUFFER, ibo);\r\n gm.gl.bufferData(gm.gl.ELEMENT_ARRAY_BUFFER, indices as Uint16Array, gm.gl.STATIC_DRAW);\r\n\r\n // Unbind VAO\r\n gm.gl.bindVertexArray(null);\r\n }\r\n\r\n draw() {\r\n this.gm.gl.bindVertexArray(this.vao);\r\n this.gm.gl.drawElements(this.gm.gl.TRIANGLES, this.indexCount, this.gm.gl.UNSIGNED_SHORT, 0);\r\n this.gm.gl.bindVertexArray(null);\r\n }\r\n}","import { Vec3, Vec2, Mat4, Quat, Vec4 } from '@vicimpa/glm';\r\nimport { GraphicsManager } from './graphics/graphics_manager.ts';\r\nimport Engine from './engine.ts';\r\n\r\ntype Constructor<T> = new (...args: any[]) => T;\r\n\r\nexport class Node {\r\n engine:Engine;\r\n name:string;\r\n parent:Node|null = null;\r\n children:Array<Node> = [];\r\n \r\n // CALLBACKS\r\n on_ready_callback:(node:Node, engine:Engine) => void = (node, engine) =>{};\r\n on_removed_callback:(node:Node, engine:Engine, parent:Node) => void = (node, engine, parent) =>{};\r\n on_update_callback:(node:Node, engine:Engine, time:number, delta_time:number) => void = (node, engine:Engine, time:number, delta_time:number) =>{};\r\n on_render_callback:(node:Node, engine:Engine, time:number, delta_time:number) => void = (node, engine:Engine, time:number, delta_time:number) =>{};\r\n private lua_url:string|null = null;\r\n \r\n constructor(engine:Engine, name:string) {\r\n this.engine = engine\r\n this.name = name;\r\n }\r\n\r\n async set_lua_file(url:string) {\r\n this.lua_url = url;\r\n await this.engine.hook_manager.add_on_ready_callback(url);\r\n await this.engine.hook_manager.add_on_removed_callback(url);\r\n await this.engine.hook_manager.add_on_update_callback(url);\r\n await this.engine.hook_manager.add_on_render_callback(url);\r\n }\r\n\r\n protected on_ready(node:this, engine:Engine) {\r\n this.on_ready_callback(node, engine);\r\n if (this.lua_url !== null)\r\n this.engine.hook_manager.call_on_ready_callback(this.lua_url, node, engine);\r\n }\r\n\r\n protected on_removed(node:this, engine:Engine, parent:Node) {\r\n this.on_removed_callback(node, engine, parent);\r\n if (this.lua_url !== null)\r\n this.engine.hook_manager.call_on_removed_callback(this.lua_url, node, engine, parent);\r\n }\r\n\r\n protected on_update(node:this, engine:Engine, time:number, delta_time:number) {\r\n if (this.engine.main_scene.rendering_depth_map)\r\n return;\r\n this.on_update_callback(node, engine, time, delta_time);\r\n if (this.lua_url !== null)\r\n this.engine.hook_manager.call_on_update_callback(this.lua_url, node, engine, time, delta_time);\r\n }\r\n\r\n protected on_render(node:this, engine:Engine, time:number, delta_time:number) {\r\n if (this.engine.main_scene.rendering_depth_map)\r\n return;\r\n this.on_render_callback(node, engine, time, delta_time);\r\n if (this.lua_url !== null)\r\n this.engine.hook_manager.call_on_render_callback(this.lua_url, node, engine, time, delta_time);\r\n }\r\n\r\n protected on_parented() {\r\n }\r\n\r\n has_child(node:Node|string):boolean {\r\n if (node instanceof Node)\r\n return this.children.includes(node);\r\n \r\n // node is string\r\n for (const child of this.children) {\r\n if (child.name === node)\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n has_parent(node:Node|string):boolean {\r\n if (this.parent && (this.parent === node || this.parent.name === node))\r\n return true;\r\n if (this.parent)\r\n return this.parent.has_parent(node);\r\n return false;\r\n }\r\n\r\n get_parent(node_name:string):Node|null {\r\n if (this.parent && this.parent.name === node_name)\r\n return this.parent;\r\n if (this.parent)\r\n return this.parent.get_parent(node_name);\r\n return null;\r\n }\r\n\r\n get_parent_of_type<T>(node_type:Constructor<T>):T|null {\r\n if (this.parent instanceof node_type)\r\n return this.parent;\r\n if (this.parent)\r\n return this.parent.get_parent_of_type<T>(node_type);\r\n return null;\r\n }\r\n\r\n get_child(name:string):Node|null {\r\n \r\n // node is string\r\n for (const child of this.children) {\r\n if (child.name === name)\r\n return child;\r\n else {\r\n const result = child.get_child(name);\r\n if (result)\r\n return result;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n get_children_of_type<T>(node_type:Constructor<T>):T[] {\r\n var target_list:T[] = [];\r\n var parents:Node[] = [this];\r\n for (const child of parents[parents.length-1].children) {\r\n const child_target_list = child.get_children_of_type(node_type);\r\n target_list.concat(child_target_list);\r\n if (child instanceof node_type) {\r\n target_list.push(child);\r\n }\r\n }\r\n return target_list;\r\n }\r\n \r\n push_child(node:Node) {\r\n if (node.parent) {\r\n let parent = node.parent;\r\n node.parent.remove_child(node);\r\n }\r\n\r\n this.children.push(node);\r\n node.parent = this;\r\n node.on_ready(node, this.engine);\r\n node.on_parented();\r\n }\r\n\r\n remove_child(node:Node|string) {\r\n var index;\r\n if (node instanceof Node) {\r\n\r\n index = this.children.indexOf(node as Node);\r\n if (index > -1) {\r\n this.children.splice(index, 1);\r\n }\r\n node.parent = null;\r\n } else {\r\n // node is string\r\n\r\n // remove parent\r\n const node_instance = this.engine.main_scene.get_node(node);\r\n\r\n if (node_instance)\r\n node_instance.parent = null;\r\n\r\n // remove from children of parent.\r\n index = -1;\r\n\r\n for (const child of this.children) {\r\n if (child.name === node) {\r\n node = child;\r\n break;\r\n }\r\n \r\n index++;\r\n }\r\n\r\n if (index > -1) {\r\n this.children.splice(index, 1);\r\n }\r\n }\r\n if (node instanceof Node) {\r\n node.on_removed(node, this.engine, this);\r\n }\r\n }\r\n\r\n update(time:number, delta_time:number) {\r\n this.on_update(this, this.engine, time, delta_time);\r\n for (const child of this.children) {\r\n child.update(time, delta_time);\r\n }\r\n }\r\n \r\n render(view_matrix:Mat4, projection_matrix_3d: Mat4, projection_matrix_2d: Mat4, time:number, delta_time:number) {\r\n this.render_class(view_matrix, projection_matrix_3d, projection_matrix_2d, time, delta_time);\r\n this.render_children(view_matrix, projection_matrix_3d, projection_matrix_2d, time, delta_time);\r\n }\r\n \r\n protected render_children(view_matrix:Mat4, projection_matrix_3d: Mat4, projection_matrix_2d: Mat4, time:number, delta_time:number) {\r\n for (const child of this.children) {\r\n child.render(view_matrix, projection_matrix_3d, projection_matrix_2d, time, delta_time);\r\n }\r\n }\r\n // This is the function where the webgl2 state is set to render.\r\n protected render_class(view_matrix: Mat4, projection_matrix_3d: Mat4, projection_matrix_2d: Mat4, time:number, delta_time:number): void {\r\n this.on_render(this, this.engine, time, delta_time);\r\n }\r\n}\r\n\r\nexport class Node2D extends Node {\r\n private stored_position:Vec2;\r\n private stored_rotation:number; // radians\r\n private stored_scale:Vec2;\r\n\r\n constructor(engine: Engine, name: string) {\r\n super(engine, name);\r\n // Bind the methods to the current instance\r\n this.proxy_on_change_position = this.proxy_on_change_position.bind(this);\r\n this.proxy_on_change_scale = this.proxy_on_change_scale.bind(this);\r\n\r\n // Re-initialize proxies now that methods are bound\r\n this.stored_position = new Proxy(new Vec2(0.0), {set:this.proxy_on_change_position});\r\n this.stored_rotation = 0.0;\r\n this.stored_scale = new Proxy(new Vec2(1.0), {set:this.proxy_on_change_scale});\r\n }\r\n\r\n get position():Vec2 {\r\n return this.stored_position;\r\n }\r\n\r\n set position(value:Vec2) {\r\n this.stored_position = new Proxy(value, {set:this.proxy_on_change_position});\r\n this.on_change_position(value);\r\n }\r\n\r\n get rotation():number {\r\n return this.stored_rotation;\r\n }\r\n\r\n set rotation(value:number) {\r\n this.stored_rotation = value;\r\n this.on_change_rotation(value);\r\n }\r\n\r\n get scale():Vec2 {\r\n return this.stored_scale;\r\n }\r\n\r\n set scale(value:Vec2) {\r\n this.stored_scale = new Proxy(value, {set:this.proxy_on_change_scale});\r\n this.on_change_scale(value);\r\n }\r\n \r\n\r\n private proxy_on_change_position(target:any, property:string, value:any):boolean {\r\n target[property] = value;\r\n this.on_change_position(target);\r\n return true;\r\n }\r\n\r\n private proxy_on_change_scale(target:any, property:string, value:any):boolean {\r\n target[property] = value;\r\n this.on_change_scale(target);\r\n return true;\r\n }\r\n\r\n protected on_change_position(new_value:Vec2) {}// ABSTRACT METHOD\r\n protected on_change_rotation(new_value:number) {}// ABSTRACT METHOD\r\n protected on_change_scale(new_value:Vec2) {}// ABSTRACT METHOD\r\n\r\n get_model_matrix():Mat4 {\r\n let model = (new Mat4()).identity();\r\n\r\n model.translate(new Vec3(this.position.x, this.position.y, 0.0));\r\n\r\n model.rotate(this.rotation, new Vec3(0.0, 0.0, 1.0));\r\n\r\n model.scale(new Vec3(this.scale.x, this.scale.y, 1.0));\r\n\r\n return model;\r\n }\r\n\r\n get_world_matrix():Mat4 {\r\n let model = this.get_model_matrix();\r\n \r\n if (this.parent instanceof Node2D) {\r\n model = this.parent.get_model_matrix().mul(model)\r\n }\r\n\r\n return model;\r\n }\r\n}\r\n\r\nexport class Node3D extends Node {\r\n\r\n private stored_position:Vec3;\r\n private stored_rotation:Quat; // radians\r\n private stored_scale:Vec3;\r\n\r\n constructor(engine: Engine, name: string) {\r\n super(engine, name);\r\n // Bind the methods to the current instance\r\n this.proxy_on_change_position = this.proxy_on_change_position.bind(this);\r\n this.proxy_on_change_rotation = this.proxy_on_change_rotation.bind(this);\r\n this.proxy_on_change_scale = this.proxy_on_change_scale.bind(this);\r\n\r\n // Re-initialize proxies now that methods are bound\r\n this.stored_position = new Proxy(new Vec3(0.0), { set: this.proxy_on_change_position });\r\n this.stored_rotation = new Proxy(new Quat(), { set: this.proxy_on_change_rotation });\r\n this.stored_scale = new Proxy(new Vec3(1.0), { set: this.proxy_on_change_scale });\r\n }\r\n\r\n get position():Vec3 {\r\n return this.stored_position;\r\n }\r\n\r\n set position(value:Vec3) {\r\n this.stored_position = new Proxy(value, {set:this.proxy_on_change_position});\r\n this.on_change_position(value);\r\n }\r\n\r\n get rotation():Quat {\r\n return this.stored_rotation;\r\n }\r\n\r\n set rotation(value:Quat) {\r\n this.stored_rotation = new Proxy(value, {set:this.proxy_on_change_rotation});\r\n this.on_change_rotation(value);\r\n }\r\n\r\n get scale():Vec3 {\r\n return this.stored_scale;\r\n }\r\n\r\n set scale(value:Vec3) {\r\n this.stored_scale = new Proxy(value, {set:this.proxy_on_change_scale});\r\n this.on_change_scale(value);\r\n }\r\n \r\n\r\n private proxy_on_change_position(target:any, property:string, value:any):boolean {\r\n target[property] = value;\r\n this.on_change_position(target);\r\n return true;\r\n }\r\n\r\n private proxy_on_change_rotation(target:any, property:string, value:any):boolean {\r\n target[property] = value;\r\n this.on_change_rotation(target);\r\n return true;\r\n }\r\n\r\n private proxy_on_change_scale(target:any, property:string, value:any):boolean {\r\n target[property] = value;\r\n this.on_change_scale(target);\r\n return true;\r\n }\r\n\r\n protected on_change_position(new_value:Vec3) {}// ABSTRACT METHOD\r\n protected on_change_rotation(new_value:Quat) {}// ABSTRACT METHOD\r\n protected on_change_scale(new_value:Vec3) {}// ABSTRACT METHOD\r\n\r\n get_world_position():Vec3 {\r\n const world_matrix = this.get_world_matrix();\r\n return new Vec3(world_matrix[12], world_matrix[13], world_matrix[14]);\r\n }\r\n\r\n get_parent_world_matrix():Mat4 {\r\n if (this.parent instanceof Node3D) {\r\n return this.parent.get_world_matrix();\r\n } else if (this.parent) {\r\n let parent = this.parent.parent;\r\n while (parent) {\r\n if (parent instanceof Node3D) {\r\n return parent.get_world_matrix();\r\n }\r\n parent = parent.parent;\r\n }\r\n }\r\n return new Mat4().identity();\r\n }\r\n\r\n get_model_matrix():Mat4 {\r\n const model = new Mat4().identity();\r\n\r\n model.translate(this.position);\r\n\r\n const rotation_mat = new Mat4().fromQuat(this.rotation);\r\n model.mul(rotation_mat);\r\n\r\n model.scale(this.scale);\r\n\r\n return model;\r\n }\r\n\r\n get_world_matrix():Mat4 {\r\n return this.get_parent_world_matrix().mul(this.get_model_matrix())\r\n }\r\n}","import { Mat4, Vec2, Vec4 } from \"@vicimpa/glm\";\r\nimport Engine from \"../engine.ts\";\r\nimport { Node3D } from \"../node.ts\";\r\nimport { Skybox } from \"./skybox.ts\";\r\nimport { Model } from \"../graphics/assets/model.ts\";\r\nimport { CubeMapTexture } from \"../graphics/assets/texture.ts\";\r\n\r\nexport class Object3D extends Node3D {\r\n model:Model;\r\n\r\n constructor(engine:Engine, name:string, model:Model) {\r\n super(engine, name);\r\n this.model = model;\r\n }\r\n \r\n render_class(view_matrix: Mat4, projection_matrix_3d: Mat4, projection_matrix_2d: Mat4, time:number, delta_time:number): void { \r\n this.model.draw_start();\r\n \r\n this.on_render(this, this.engine, time, delta_time);\r\n\r\n const gm = this.engine.graphics_manager;\r\n\r\n const skybox = this.get_parent_of_type(Skybox);\r\n if (skybox)\r\n gm.set_uniform(\"environment.ambient_light\", skybox.ambient_light);\r\n\r\n const main_camera_3d = this.engine.main_scene.main_camera_3d\r\n\r\n // CAMERA POS\r\n if (main_camera_3d) {\r\n gm.set_uniform(\"camera_position\", main_camera_3d.position);\r\n } else {\r\n throw Error(`Main scene \"${this.engine.main_scene.name}\" does not have a main_camera_3d set which is required to render Object3Ds such as the node named \"${this.name}\".`);\r\n }\r\n\r\n // PASS IN LIGHTS\r\n const point_lights = gm.point_lights;\r\n const spot_lights = gm.spot_lights;\r\n const directional_lights = gm.directional_lights;\r\n\r\n const point_lights_count = point_lights.length;\r\n const spot_lights_count = spot_lights.length;\r\n const directional_lights_count = directional_lights.length;\r\n\r\n const n = Math.max(\r\n point_lights_count,\r\n spot_lights_count,\r\n directional_lights_count\r\n )\r\n\r\n var mesh_size = this.model.mesh.dimensions.clone().mul(this.scale).length();\r\n\r\n var local_mesh_center = this.model.mesh.center;\r\n var mesh_center = new Vec4(local_mesh_center.x, local_mesh_center.y, local_mesh_center.z, 1.0).applyMat4(this.get_world_matrix())\r\n\r\n for (var i = 0; i < n; ++i) {\r\n if (i < point_lights_count) {\r\n const light = point_lights[i];\r\n if (mesh_center.xyz.distance(light.position) - mesh_size / 2.0 < light.range)\r\n light.set_uniforms(\"point_lights\", i);\r\n }\r\n if (i < spot_lights_count)\r\n spot_lights[i].set_uniforms(\"spot_lights\", i);\r\n if (i < directional_lights_count)\r\n directional_lights[i].set_uniforms(\"directional_lights\", i);\r\n }\r\n\r\n gm.set_uniform(\"point_lights_count\", point_lights_count);\r\n gm.set_uniform(\"spot_lights_count\", spot_lights_count);\r\n gm.set_uniform(\"directional_lights_count\", directional_lights_count);\r\n\r\n //PASS SHADOW MAPS\r\n gm.set_uniform(\"directional_light_shadow_maps\", gm.directional_light_shadow_map_texture)\r\n gm.set_uniform(\"point_light_shadow_maps\", gm.point_light_shadow_map_texture)\r\n gm.set_uniform(\"shadow_map_size\", new Vec2(gm.shadow_resolution))\r\n\r\n // pass the MVP matrix\r\n gm.set_uniform(\"u_model\", this.get_world_matrix());\r\n\r\n gm.set_uniform(\"u_view\", view_matrix);\r\n\r\n gm.set_uniform(\"u_projection\", projection_matrix_3d);\r\n\r\n this.model.draw_end();\r\n }\r\n}","import { Vec3 } from \"@vicimpa/glm\";\r\nimport Engine from \"../../engine.ts\";\r\nimport { GraphicsManager } from \"../graphics_manager.ts\";\r\n\r\nvar skybox_VAO:WebGLVertexArrayObject|null = null\r\nvar skybox_VAO_index_count:number = 0;\r\nvar skybox_VAO_vertex_count:number = 0;\r\n\r\nvar sprite_VAO:WebGLVertexArrayObject|null = null\r\nvar sprite_VAO_index_count:number = 0;\r\nvar sprite_VAO_vertex_count:number = 0;\r\n\r\nexport interface VAOInfo {\r\n vao:WebGLVertexArrayObject;\r\n index_count:number;\r\n vertex_count:number;\r\n}\r\n\r\nexport function get_skybox_vao(gm:GraphicsManager):VAOInfo {\r\n if (skybox_VAO)\r\n return {vao:skybox_VAO, index_count:skybox_VAO_index_count, vertex_count:skybox_VAO_vertex_count};\r\n \r\n const cube_vertices = new Float32Array([\r\n -1, -1, -1, // 0\r\n 1, -1, -1, // 1\r\n 1, 1, -1, // 2\r\n -1, 1, -1, // 3\r\n -1, -1, 1, // 4\r\n 1, -1, 1, // 5\r\n 1, 1, 1, // 6\r\n -1, 1, 1 // 7\r\n ]);\r\n\r\n const cube_indices = new Uint16Array([\r\n 0,1,2, 2,3,0, // -Z\r\n 4,5,6, 6,7,4, // +Z\r\n 0,4,7, 7,3,0, // -X\r\n 1,5,6, 6,2,1, // +X\r\n 3,2,6, 6,7,3, // +Y\r\n 0,1,5, 5,4,0 // -Y\r\n ]);\r\n\r\n skybox_VAO_vertex_count = cube_vertices.length;\r\n\r\n skybox_VAO_index_count = cube_indices.length;\r\n\r\n skybox_VAO = gm.gl.createVertexArray()!;\r\n gm.gl.bindVertexArray(skybox_VAO);\r\n\r\n // Vertex buffer\r\n const vbo = gm.gl.createBuffer()!;\r\n gm.gl.bindBuffer(gm.gl.ARRAY_BUFFER, vbo);\r\n gm.gl.bufferData(gm.gl.ARRAY_BUFFER, cube_vertices, gm.gl.STATIC_DRAW);\r\n\r\n // Position attribute (location 0)\r\n gm.gl.enableVertexAttribArray(0);\r\n gm.gl.vertexAttribPointer(0, 3, gm.gl.FLOAT, false, 0, 0);\r\n\r\n // Index buffer\r\n const ibo = gm.gl.createBuffer()!;\r\n gm.gl.bindBuffer(gm.gl.ELEMENT_ARRAY_BUFFER, ibo);\r\n gm.gl.bufferData(gm.gl.ELEMENT_ARRAY_BUFFER, cube_indices, gm.gl.STATIC_DRAW);\r\n\r\n // Unbind VAO\r\n gm.gl.bindVertexArray(null);\r\n gm.gl.bindBuffer(gm.gl.ARRAY_BUFFER, null);\r\n\r\n return {vao:skybox_VAO, index_count:skybox_VAO_index_count, vertex_count:skybox_VAO_vertex_count};\r\n}\r\n\r\nexport function get_sprite_vao(gm:GraphicsManager):VAOInfo {\r\n if (sprite_VAO)\r\n return {vao:sprite_VAO, index_count:sprite_VAO_index_count, vertex_count:sprite_VAO_vertex_count};\r\n \r\n const quad_vertices = new Float32Array([\r\n -0.5, -0.5, 0.0, 0.0, 0.0, // bottom left\r\n 0.5, -0.5, 0.0, 1.0, 0.0, // bottom right\r\n 0.5, 0.5, 0.0, 1.0, 1.0, // top right\r\n -0.5, 0.5, 0.0, 0.0, 1.0 // top left\r\n ]);\r\n\r\n const quad_indices = new Uint16Array([\r\n 0, 1, 2, // First triangle\r\n 2, 3, 0 // Second triangle\r\n ]);\r\n\r\n sprite_VAO_vertex_count = quad_vertices.length / 5;\r\n\r\n sprite_VAO_index_count = quad_indices.length;\r\n\r\n sprite_VAO = gm.gl.createVertexArray();\r\n gm.gl.bindVertexArray(sprite_VAO);\r\n\r\n // Create and bind VBO\r\n const vbo = gm.gl.createBuffer();\r\n gm.gl.bindBuffer(gm.gl.ARRAY_BUFFER, vbo);\r\n gm.gl.bufferData(gm.gl.ARRAY_BUFFER, quad_vertices, gm.gl.STATIC_DRAW);\r\n\r\n // Setup vertex attributes\r\n const stride = 5 * Float32Array.BYTES_PER_ELEMENT; // 5 floats per vertex\r\n \r\n // Position attribute (location 0)\r\n gm.gl.enableVertexAttribArray(0);\r\n gm.gl.vertexAttribPointer(\r\n 0, // attribute location\r\n 3, // number of components (x, y, z)\r\n gm.gl.FLOAT, // data type\r\n false, // normalize\r\n stride, // stride\r\n 0 // offset\r\n );\r\n\r\n // TexCoord attribute (location 1)\r\n gm.gl.enableVertexAttribArray(1);\r\n gm.gl.vertexAttribPointer(\r\n 1, // attribute location\r\n 2, // number of components (u, v)\r\n gm.gl.FLOAT, // data type\r\n false, // normalize\r\n stride, // stride\r\n 3 * Float32Array.BYTES_PER_ELEMENT // offset (skip x, y, z)\r\n );\r\n\r\n // Create and bind EBO\r\n const ebo = gm.gl.createBuffer();\r\n gm.gl.bindBuffer(gm.gl.ELEMENT_ARRAY_BUFFER, ebo);\r\n gm.gl.bufferData(gm.gl.ELEMENT_ARRAY_BUFFER, quad_indices, gm.gl.STATIC_DRAW);\r\n\r\n // Unbind VAO\r\n gm.gl.bindVertexArray(null);\r\n gm.gl.bindBuffer(gm.gl.ARRAY_BUFFER, null);\r\n\r\n\r\n return {vao:sprite_VAO, index_count:sprite_VAO_index_count, vertex_count:sprite_VAO_vertex_count};\r\n}","import { Mat4, Vec3 } from \"@vicimpa/glm\";\r\nimport Engine from \"../engine.ts\";\r\nimport { Node } from \"../node.ts\";\r\nimport { ShaderProgram } from \"../graphics/shader_program.ts\";\r\nimport { CubeMapTexture } from \"../graphics/assets/texture.ts\";\r\nimport { get_skybox_vao, VAOInfo } from \"../graphics/assets/vaos.ts\";\r\n\r\nexport class Skybox extends Node {\r\n vao:VAOInfo;\r\n shader_program:ShaderProgram;\r\n cubemap_texture:CubeMapTexture;\r\n ambient_light:Vec3;\r\n\r\n constructor(engine:Engine,\r\n name:string,\r\n cubemap_texture:CubeMapTexture,\r\n ambient_light:Vec3,\r\n shader_program:ShaderProgram|null = null,\r\n ) {\r\n super(engine, name);\r\n this.vao = get_skybox_vao(this.engine.graphics_manager);\r\n this.shader_program = shader_program ? shader_program : this.engine.graphics_manager.default_skybox_shader_program;\r\n this.cubemap_texture = cubemap_texture;\r\n this.ambient_light = ambient_light;\r\n }\r\n render_class(view_matrix: Mat4, projection_matrix_3d: Mat4, projection_matrix_2d: Mat4, time:number, delta_time:number): void {\r\n if (this.engine.main_scene.rendering_depth_map)\r\n return;\r\n if (!this.shader_program)\r\n throw Error(`Shader program not set for skybox.`);\r\n\r\n const gm = this.engine.graphics_manager;\r\n\r\n this.shader_program.use();\r\n \r\n gm.gl.depthFunc(gm.gl.LEQUAL);\r\n \r\n this.on_render(this, this.engine, time, delta_time);\r\n \r\n // bind the texture\r\n gm.set_uniform(\"skybox_texture\", this.cubemap_texture);\r\n \r\n // add the VP matrix\r\n gm.set_uniform(\"u_view\", view_matrix);\r\n\r\n gm.set_uniform(\"u_projection\", projection_matrix_3d);\r\n\r\n // render vao\r\n gm.gl.bindVertexArray(this.vao.vao);\r\n gm.gl.drawElements(gm.gl.TRIANGLES, this.vao.index_count, gm.gl.UNSIGNED_SHORT, 0);\r\n gm.gl.bindVertexArray(null);\r\n\r\n gm.gl.depthFunc(gm.gl.LESS);\r\n\r\n gm.clear_shader();\r\n }\r\n}","import { Vec4 } from \"@vicimpa/glm\";\r\nimport { GraphicsManager } from \"./graphics_manager.ts\";\r\nimport { CubeMapTexture, Texture, TextureType } from \"./assets/texture.ts\";\r\n\r\nexport enum AttachmentType {\r\n TEXTURE_COLOR = \"TEXTURE_COLOR\",\r\n TEXTURE_DEPTH = \"TEXTURE_DEPTH\",\r\n TEXTURE_STENCIL = \"TEXTURE_STENCIL\",\r\n TEXTURE_DEPTH_STENCIL = \"TEXTURE_DEPTH_STENCIL\",\r\n TEXTURE_ARRAY_COLOR = \"TEXTURE_ARRAY_COLOR\",\r\n TEXTURE_ARRAY_DEPTH = \"TEXTURE_ARRAY_DEPTH\",\r\n TEXTURE_ARRAY_STENCIL = \"TEXTURE_ARRAY_STENCIL\",\r\n TEXTURE_ARRAY_DEPTH_STENCIL = \"TEXTURE_ARRAY_DEPTH_STENCIL\",\r\n CUBEMAP_TEXTURE_COLOR = \"CUBEMAP_TEXTURE_COLOR\",\r\n CUBEMAP_TEXTURE_DEPTH = \"CUBEMAP_TEXTURE_DEPTH\",\r\n CUBEMAP_TEXTURE_STENCIL = \"CUBEMAP_TEXTURE_STENCIL\",\r\n CUBEMAP_TEXTURE_DEPTH_STENCIL = \"CUBEMAP_TEXTURE_DEPTH_STENCIL\",\r\n}\r\n\r\nexport interface AttachmentInfo {\r\n name:string;\r\n type:AttachmentType;\r\n texture:Texture|CubeMapTexture;\r\n texture_array_index?:number;\r\n mipmap_level?:number;\r\n texture_parameters?:{[key:number]:number};\r\n buffer_source?:boolean;\r\n color_attachment_number?:number;\r\n}\r\n\r\n// These determine what to enable or disable when binding the framebuffer.\r\nexport enum DrawFlag {\r\n DEPTH_TEST = 0,\r\n CULL_FRONT = 1 << 0,\r\n CULL_BACK = 1 << 1,\r\n CULL_FRONT_AND_BACK = 1 << 2,\r\n DEPTH_FUNC_NEVER = 1 << 3,\r\n DEPTH_FUNC_LESS = 1 << 4,\r\n DEPTH_FUNC_EQUAL = 1 << 5,\r\n DEPTH_FUNC_LESS_EQUAL = 1 << 6,\r\n DEPTH_FUNC_GREATER = 1 << 7,\r\n DEPTH_FUNC_NOT_EQUAL = 1 << 8,\r\n DEPTH_FUNC_GREATER_EQUAL = 1 << 9,\r\n DEPTH_FUNC_ALWAYS = 1 << 10,\r\n FORCE_WRITE_DEPTH = 1 << 11,\r\n}\r\n\r\nexport type DrawBitFlags = number;\r\n\r\nexport function has_flag(bit_flag:DrawBitFlags, flag:DrawFlag):boolean {\r\n return (bit_flag & flag) === flag;\r\n}\r\n\r\nexport class Framebuffer implements Disposable {\r\n name:string;\r\n gl:WebGL2RenderingContext;\r\n gm:GraphicsManager;\r\n clear_color:Vec4;\r\n width:number = 0;\r\n height:number = 0;\r\n webgl_frame_buffer:WebGLFramebuffer;\r\n attachment_info_map:{[key:string]:AttachmentInfo} = {};\r\n use_depth_buffer:boolean = false;\r\n use_color_buffer:boolean = false;\r\n color_attachment_count:number = 0;\r\n read_source_color_attachment:number = 0\r\n draw_flags:DrawBitFlags = 0;\r\n\r\n constructor(name:string, gm:GraphicsManager, gl:WebGL2RenderingContext, attachment_infos:AttachmentInfo[], draw_flags:DrawBitFlags, clear_color:Vec4 = new Vec4(0,0,0,1), read_from_back_buffer:boolean = false) {\r\n this.name = name\r\n this.gl = gl;\r\n this.gm = gm;\r\n this.name = name;\r\n this.clear_color = clear_color;\r\n this.webgl_frame_buffer = this.gl.createFramebuffer();\r\n this.draw_flags = draw_flags;\r\n \r\n\r\n let attachment_numbers:number[] = []\r\n\r\n this.gl.bindFramebuffer(gl.FRAMEBUFFER, this.webgl_frame_buffer);\r\n\r\n for (const attachment of attachment_infos) {\r\n this.create_attachment(attachment, attachment_numbers);\r\n this.attachment_info_map[attachment.name] = attachment;\r\n if (attachment.texture instanceof Texture) {\r\n this.width = attachment.texture.width;\r\n this.height = attachment.texture.height;\r\n } else if (attachment.texture instanceof CubeMapTexture) {\r\n this.width = this.height = attachment.texture.size;\r\n }\r\n }\r\n this.gl.drawBuffers(attachment_numbers.length ? attachment_numbers : [gl.NONE]);\r\n if (read_from_back_buffer)\r\n this.gl.readBuffer(this.gl.BACK);\r\n else if (this.read_source_color_attachment === this.gl.NONE)\r\n this.gl.readBuffer(this.gl.NONE);\r\n else\r\n this.gl.readBuffer(this.read_source_color_attachment);\r\n \r\n if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) !== gl.FRAMEBUFFER_COMPLETE) {\r\n throw Error(`Framebuffer incomplete, STATUS = ${gl.checkFramebufferStatus(gl.FRAMEBUFFER)}`);\r\n }\r\n\r\n this.gl.bindFramebuffer(gl.FRAMEBUFFER, null);\r\n }\r\n\r\n [Symbol.dispose](): void {\r\n this.gl.deleteFramebuffer(this.webgl_frame_buffer);\r\n }\r\n\r\n set_attachment_texture_index(attachment_name:string, index:number) { \r\n const not_bound = this.gm.framebuffer !== this;\r\n if (not_bound)\r\n this.use();\r\n const attachment = this.attachment_info_map[attachment_name];\r\n switch (attachment.type) {\r\n case AttachmentType.TEXTURE_ARRAY_COLOR:\r\n if (attachment.color_attachment_number === undefined) {\r\n throw new Error(`The framebuffer \"${this.name}\" has an attachment named \"${attachment.name}\" with an AttachmentType of TEXTURE_ARRAY_COLOR without a 'color_attachment_number' set, this should not be possible, please file a github issue.`)\r\n }\r\n this.gl.framebufferTextureLayer(\r\n this.gl.FRAMEBUFFER,\r\n attachment.color_attachment_number,\r\n attachment.texture.webgl_texture,\r\n attachment.mipmap_level === undefined ? 0 : attachment.mipmap_level,\r\n index\r\n );\r\n break;\r\n\r\n case AttachmentType.TEXTURE_ARRAY_DEPTH:\r\n this.gl.framebufferTextureLayer(\r\n this.gl.FRAMEBUFFER,\r\n this.gl.DEPTH_ATTACHMENT,\r\n attachment.texture.webgl_texture,\r\n 0,\r\n index\r\n );\r\n break;\r\n \r\n default:\r\n throw new Error(`setting the texture array index for the attachment named \"${attachment.name}\" of type AttachmentType.${attachment.type} is not supported.`)\r\n }\r\n\r\n if (not_bound)\r\n this.gm.unuse_framebuffer();\r\n }\r\n\r\n clear() {\r\n const not_bound = this.gm.framebuffer !== this;\r\n if (not_bound)\r\n this.use();\r\n if (this.use_depth_buffer)\r\n this.gl.clearDepth(1.0);\r\n if (this.use_color_buffer) {\r\n const cc = this.clear_color;\r\n this.gl.clearColor(cc.x, cc.y, cc.z, cc.w);\r\n }\r\n if (this.use_depth_buffer || this.use_color_buffer) {\r\n this.gl.clear(\r\n (this.use_color_buffer ? this.gl.COLOR_BUFFER_BIT : 0) |\r\n (this.use_depth_buffer ? this.gl.DEPTH_BUFFER_BIT : 0)\r\n );\r\n }\r\n\r\n if (not_bound)\r\n this.gm.unuse_framebuffer();\r\n }\r\n\r\n set_attachment_cube_map_texture_face(attachment_name:string, face:number) {\r\n const not_bound = this.gm.framebuffer !== this;\r\n if (not_bound)\r\n this.use();\r\n const attachment = this.attachment_info_map[attachment_name];\r\n switch (attachment.type) {\r\n case AttachmentType.CUBEMAP_TEXTURE_COLOR:\r\n if (attachment.color_attachment_number === undefined) {\r\n throw new Error(`The framebuffer \"${this.name}\" has an attachment named \"${attachment.name}\" with an AttachmentType of CUBEMAP_TEXTURE_COLOR without a 'color_attachment_number' set, this should not be possible, please file a github issue.`)\r\n }\r\n this.gl.framebufferTexture2D(\r\n this.gl.FRAMEBUFFER,\r\n this.gl.COLOR_ATTACHMENT0 + attachment.color_attachment_number,\r\n face,\r\n attachment.texture.webgl_texture,\r\n 0\r\n );\r\n break;\r\n\r\n case AttachmentType.CUBEMAP_TEXTURE_DEPTH:\r\n this.gl.framebufferTexture2D(\r\n this.gl.FRAMEBUFFER,\r\n this.gl.DEPTH_ATTACHMENT,\r\n face,\r\n attachment.texture.webgl_texture,\r\n 0\r\n );\r\n break;\r\n \r\n default:\r\n throw new Error(`setting the texture array index for the attachment named \"${attachment.name}\" of type AttachmentType.${attachment.type} is not supported.`)\r\n }\r\n\r\n if (not_bound)\r\n this.gm.unuse_framebuffer();\r\n }\r\n\r\n private create_attachment(attachment:AttachmentInfo, attachment_numbers:number[]) {\r\n const is_depth_textures_attachment = attachment.type === AttachmentType.TEXTURE_DEPTH || \r\n attachment.type === AttachmentType.TEXTURE_DEPTH_STENCIL;\r\n switch (attachment.type) {\r\n case AttachmentType.TEXTURE_DEPTH_STENCIL:\r\n case AttachmentType.TEXTURE_DEPTH:\r\n this.create_attachment_depth_texture(attachment);\r\n break;\r\n \r\n case AttachmentType.TEXTURE_COLOR:\r\n this.create_attachment_color_texture(attachment, attachment_numbers);\r\n break;\r\n\r\n case AttachmentType.TEXTURE_ARRAY_COLOR:\r\n this.create_attachment_color_array_texture(attachment, attachment_numbers);\r\n break;\r\n\r\n case AttachmentType.TEXTURE_ARRAY_DEPTH:\r\n this.create_attachment_depth_array_texture(attachment);\r\n break;\r\n\r\n case AttachmentType.CUBEMAP_TEXTURE_COLOR:\r\n this.create_attachment_color_cubemap_texture(attachment, attachment_numbers);\r\n break;\r\n\r\n case AttachmentType.CUBEMAP_TEXTURE_DEPTH:\r\n this.create_attachment_depth_cubemap_texture(attachment);\r\n break;\r\n\r\n default:\r\n throw new Error(`AttachmentType.${attachment.type} is not yet supported. See framebuffer named \"${this.name}\".`);\r\n }\r\n }\r\n\r\n private create_attachment_depth_array_texture(attachment:AttachmentInfo) {\r\n if (attachment.texture_array_index === undefined) {\r\n throw new Error(`The framebuffer \"${this.name}\" has an attachment named \"${attachment.name}\" with an AttachmentType of TEXTURE_ARRAY_COLOR without a 'texture_array_index' set, texture_array_index must be set for all array types.`)\r\n }\r\n var tex_parameters:{[key:number]:number} = \r\n attachment.texture_parameters === undefined ? {} : attachment.texture_parameters;\r\n tex_parameters[this.gl.TEXTURE_MIN_FILTER] = this.gl.NEAREST;\r\n tex_parameters[this.gl.TEXTURE_MAG_FILTER] = this.gl.NEAREST;\r\n tex_parameters[this.gl.TEXTURE_WRAP_S] = this.gl.CLAMP_TO_EDGE;\r\n tex_parameters[this.gl.TEXTURE_WRAP_T] = this.gl.CLAMP_TO_EDGE;\r\n \r\n this.use_depth_buffer = true;\r\n\r\n this.gl.framebufferTextureLayer(\r\n this.gl.FRAMEBUFFER,\r\n this.gl.DEPTH_ATTACHMENT,\r\n attachment.texture.webgl_texture,\r\n 0,\r\n attachment.texture_array_index\r\n );\r\n }\r\n\r\n private create_attachment_color_array_texture(attachment:AttachmentInfo, attachment_numbers:number[]) {\r\n if (attachment.texture_array_index === undefined) {\r\n throw new Error(`The framebuffer \"${this.name}\" has an attachment named \"${attachment.name}\" with an AttachmentType of TEXTURE_ARRAY_COLOR without a 'texture_array_index' set, texture_array_index must be set for all array types.`)\r\n }\r\n var tex_parameters:{[key:number]:number} = \r\n attachment.texture_parameters === undefined ? {} : attachment.texture_parameters;\r\n tex_parameters[this.gl.TEXTURE_MIN_FILTER] = this.gl.LINEAR;\r\n tex_parameters[this.gl.TEXTURE_MAG_FILTER] = this.gl.LINEAR;\r\n tex_parameters[this.gl.TEXTURE_WRAP_S] = this.gl.CLAMP_TO_EDGE;\r\n tex_parameters[this.gl.TEXTURE_WRAP_T] = this.gl.CLAMP_TO_EDGE;\r\n \r\n const attachment_num = this.gl.COLOR_ATTACHMENT0 + this.color_attachment_count;\r\n \r\n this.use_color_buffer = true;\r\n\r\n this.gl.framebufferTextureLayer(\r\n this.gl.FRAMEBUFFER,\r\n attachment_num,\r\n attachment.texture.webgl_texture,\r\n attachment.mipmap_level === undefined ? 0 : attachment.mipmap_level,\r\n attachment.texture_array_index\r\n );\r\n\r\n if (attachment.buffer_source)\r\n this.read_source_color_attachment = attachment_num;\r\n\r\n attachment.color_attachment_number = attachment_num;\r\n attachment_numbers.push(attachment_num);\r\n this.color_attachment_count++;\r\n }\r\n\r\n private create_attachment_color_texture(attachment:AttachmentInfo, attachment_numbers:number[]) {\r\n var tex_parameters:{[key:number]:number} = \r\n attachment.texture_parameters === undefined ? {} : attachment.texture_parameters;\r\n tex_parameters[this.gl.TEXTURE_MIN_FILTER] = this.gl.LINEAR;\r\n tex_parameters[this.gl.TEXTURE_MAG_FILTER] = this.gl.LINEAR;\r\n tex_parameters[this.gl.TEXTURE_WRAP_S] = this.gl.CLAMP_TO_EDGE;\r\n tex_parameters[this.gl.TEXTURE_WRAP_T] = this.gl.CLAMP_TO_EDGE;\r\n \r\n const attachment_num = this.gl.COLOR_ATTACHMENT0 + this.color_attachment_count;\r\n\r\n this.use_color_buffer = true;\r\n \r\n this.gl.framebufferTexture2D(\r\n this.gl.FRAMEBUFFER,\r\n attachment_num,\r\n this.gl.TEXTURE_2D,\r\n attachment.texture.webgl_texture,\r\n attachment.mipmap_level === undefined ? 0 : attachment.mipmap_level\r\n );\r\n\r\n if (attachment.buffer_source)\r\n this.read_source_color_attachment = attachment_num;\r\n\r\n attachment.color_attachment_number = attachment_num;\r\n attachment_numbers.push(attachment_num);\r\n this.color_attachment_count++;\r\n }\r\n\r\n private create_attachment_depth_texture(attachment:AttachmentInfo) {\r\n var tex_parameters:{[key:number]:number} = \r\n attachment.texture_parameters === undefined ? {} : attachment.texture_parameters;\r\n tex_parameters[this.gl.TEXTURE_MIN_FILTER] = this.gl.NEAREST;\r\n tex_parameters[this.gl.TEXTURE_MAG_FILTER] = this.gl.NEAREST;\r\n tex_parameters[this.gl.TEXTURE_WRAP_S] = this.gl.CLAMP_TO_EDGE;\r\n tex_parameters[this.gl.TEXTURE_WRAP_T] = this.gl.CLAMP_TO_EDGE;\r\n \r\n this.use_depth_buffer = true;\r\n\r\n this.gl.framebufferTexture2D(\r\n this.gl.FRAMEBUFFER,\r\n this.gl.DEPTH_ATTACHMENT,\r\n this.gl.TEXTURE_2D,\r\n attachment.texture.webgl_texture,\r\n attachment.mipmap_level === undefined ? 0 : attachment.mipmap_level\r\n );\r\n }\r\n\r\n private create_attachment_color_cubemap_texture(attachment:AttachmentInfo, attachment_numbers:number[]) {\r\n var tex_parameters:{[key:number]:number} = \r\n attachment.texture_parameters === undefined ? {} : attachment.texture_parameters;\r\n tex_parameters[this.gl.TEXTURE_MIN_FILTER] = this.gl.NEAREST;\r\n tex_parameters[this.gl.TEXTURE_MAG_FILTER] = this.gl.NEAREST;\r\n tex_parameters[this.gl.TEXTURE_WRAP_S] = this.gl.CLAMP_TO_EDGE;\r\n tex_parameters[this.gl.TEXTURE_WRAP_T] = this.gl.CLAMP_TO_EDGE;\r\n \r\n const attachment_num = this.gl.COLOR_ATTACHMENT0 + this.color_attachment_count;\r\n\r\n this.use_color_buffer = true;\r\n\r\n const faces = [\r\n this.gl.TEXTURE_CUBE_MAP_POSITIVE_X, this.gl.TEXTURE_CUBE_MAP_NEGATIVE_X,\r\n this.gl.TEXTURE_CUBE_MAP_POSITIVE_Y, this.gl.TEXTURE_CUBE_MAP_NEGATIVE_Y,\r\n this.gl.TEXTURE_CUBE_MAP_POSITIVE_Z, this.gl.TEXTURE_CUBE_MAP_NEGATIVE_Z\r\n ];\r\n faces.forEach((face) => {\r\n this.gl.framebufferTexture2D(\r\n this.gl.FRAMEBUFFER,\r\n attachment_num,\r\n face,\r\n attachment.texture.webgl_texture,\r\n attachment.mipmap_level === undefined ? 0 : attachment.mipmap_level\r\n );\r\n });\r\n\r\n if (attachment.buffer_source)\r\n this.read_source_color_attachment = attachment_num;\r\n\r\n attachment.color_attachment_number = attachment_num;\r\n attachment_numbers.push(attachment_num);\r\n this.color_attachment_count++;\r\n }\r\n\r\n private create_attachment_depth_cubemap_texture(attachment:AttachmentInfo) {\r\n var tex_parameters:{[key:number]:number} = \r\n attachment.texture_parameters === undefined ? {} : attachment.texture_parameters;\r\n tex_parameters[this.gl.TEXTURE_MIN_FILTER] = this.gl.NEAREST;\r\n tex_parameters[this.gl.TEXTURE_MAG_FILTER] = this.gl.NEAREST;\r\n tex_parameters[this.gl.TEXTURE_WRAP_S] = this.gl.CLAMP_TO_EDGE;\r\n tex_parameters[this.gl.TEXTURE_WRAP_T] = this.gl.CLAMP_TO_EDGE;\r\n \r\n this.use_depth_buffer = true;\r\n\r\n const faces = [\r\n this.gl.TEXTURE_CUBE_MAP_POSITIVE_X, this.gl.TEXTURE_CUBE_MAP_NEGATIVE_X,\r\n this.gl.TEXTURE_CUBE_MAP_POSITIVE_Y, this.gl.TEXTURE_CUBE_MAP_NEGATIVE_Y,\r\n this.gl.TEXTURE_CUBE_MAP_POSITIVE_Z, this.gl.TEXTURE_CUBE_MAP_NEGATIVE_Z\r\n ];\r\n faces.forEach((face) => {\r\n this.gl.framebufferTexture2D(\r\n this.gl.FRAMEBUFFER,\r\n this.gl.DEPTH_ATTACHMENT,\r\n face,\r\n attachment.texture.webgl_texture,\r\n attachment.mipmap_level === undefined ? 0 : attachment.mipmap_level\r\n );\r\n });\r\n }\r\n\r\n use() {\r\n this.gm.use_framebuffer(this.name);\r\n }\r\n}\r\n","import { Vec3, Vec2, Mat4, Quat, Vec4, Mat2, Mat3 } from '@vicimpa/glm';\r\nimport { Node3D, Node } from '../node.ts';\r\nimport Engine from '../engine.ts';\r\nimport { get_uniform_label_index, normalize_uniform_label } from './utility.ts';\r\nimport { ShaderProgram, WebGLUniformType } from './shader_program.ts';\r\nimport { AttachmentInfo, AttachmentType, DrawBitFlags, DrawFlag, Framebuffer, has_flag } from './framebuffer.ts';\r\nimport { CubeMapTexture, Texture, TextureType } from './assets/texture.ts';\r\n\r\nimport DEFAULT_2D_VERTEX_SHADER from '../shaders/default_2d.vs.ts';\r\nimport DEFAULT_2D_FRAGMENT_SHADER from '../shaders/default_2d.fs.ts';\r\n\r\nimport DEFAULT_3D_VERTEX_SHADER from '../shaders/default_3d.vs.ts';\r\nimport DEFAULT_3D_FRAGMENT_SHADER from '../shaders/default_3d.fs.ts';\r\n\r\nimport DEFAULT_SKYBOX_VERTEX_SHADER from '../shaders/default_skybox.vs.ts';\r\nimport DEFAULT_SKYBOX_FRAGMENT_SHADER from '../shaders/default_skybox.fs.ts';\r\n\r\nimport DEFAULT_DIRECTIONAL_SHADOW_VERTEX_SHADER from \"../shaders/default_directional_shadow.vs.ts\";\r\nimport DEFAULT_DIRECTIONAL_SHADOW_FRAGMENT_SHADER from \"../shaders/default_directional_shadow.fs.ts\";\r\n\r\nimport DEFAULT_POINT_SHADOW_VERTEX_SHADER from \"../shaders/default_point_shadow.vs.ts\";\r\nimport DEFAULT_POINT_SHADOW_FRAGMENT_SHADER from \"../shaders/default_point_shadow.fs.ts\";\r\nimport { PointLight } from '../node/lights/point_light.ts';\r\nimport { DirectionalLight } from '../node/lights/directional_light.ts';\r\nimport { SpotLight } from '../node/lights/spot_light.ts';\r\n\r\nexport type WebGLType = number;\r\n\r\nexport interface WebGLVertexAttribute {\r\n label:string;\r\n attribute_type:WebGLType;\r\n size:number;\r\n normalized:boolean;\r\n dynamic:boolean;\r\n vertex_buffer:WebGLBuffer;\r\n};\r\n\r\nexport class GraphicsManager {\r\n engine:Engine;\r\n canvas:HTMLCanvasElement;\r\n gl:WebGL2RenderingContext;\r\n shader_programs:{[key:string]:ShaderProgram} = {};\r\n shader_program:ShaderProgram|null = null;\r\n framebuffers:{[key:string]:Framebuffer} = {};\r\n framebuffer:Framebuffer|null = null;\r\n vertex_attributes:{[key:string]:WebGLVertexAttribute} = {};\r\n vertex_count:number = 0;\r\n \r\n private last_frame_time: number | null = null;\r\n \r\n // DEFAULT SHADERS\r\n default_2d_shader_program:ShaderProgram;\r\n default_3d_shader_program:ShaderProgram;\r\n default_skybox_shader_program:ShaderProgram;\r\n\r\n // LIGHTS\r\n point_lights:PointLight[] = [];\r\n directional_lights:DirectionalLight[] = [];\r\n spot_lights:SpotLight[] = [];\r\n\r\n // SHADOWS\r\n directional_light_shadow_map_texture:Texture;\r\n point_light_shadow_map_texture:Texture;\r\n point_shadow_depth_buffer:Framebuffer;\r\n directional_shadow_depth_buffer:Framebuffer;\r\n shadow_resolution:number = 1024 * 6;\r\n \r\n constructor(engine:Engine, canvas:HTMLCanvasElement) {\r\n this.canvas = canvas;\r\n this.gl = canvas.getContext(\"webgl2\", {\r\n colorSpace: 'srgb',\r\n antialias: true\r\n })! as WebGL2RenderingContext;\r\n this.engine = engine;\r\n\r\n this.default_2d_shader_program = this.create_default_2d_shader_program();\r\n this.default_3d_shader_program = this.create_default_3d_shader_program();\r\n this.default_skybox_shader_program = this.create_default_skybox_shader_program();\r\n\r\n this.directional_light_shadow_map_texture = new Texture(\r\n this,\r\n \"directional_light_shadow_map_texture\",\r\n Math.max(1, this.directional_lights.length),\r\n this.shadow_resolution,\r\n this.shadow_resolution,\r\n TextureType.DEPTH_ARRAY,\r\n {\r\n [this.gl.TEXTURE_COMPARE_MODE]: this.gl.COMPARE_REF_TO_TEXTURE,\r\n [this.gl.TEXTURE_COMPARE_FUNC]: this.gl.LEQUAL,\r\n [this.gl.TEXTURE_MIN_FILTER]: this.gl.LINEAR,\r\n [this.gl.TEXTURE_MAG_FILTER]: this.gl.LINEAR,\r\n [this.gl.TEXTURE_WRAP_S]: this.gl.CLAMP_TO_EDGE,\r\n [this.gl.TEXTURE_WRAP_T]: this.gl.CLAMP_TO_EDGE,\r\n [this.gl.TEXTURE_BASE_LEVEL]: 0,\r\n [this.gl.TEXTURE_MAX_LEVEL]: 0,\r\n }\r\n );\r\n\r\n this.point_light_shadow_map_texture = new Texture(\r\n this,\r\n \"point_light_shadow_map_texture\",\r\n Math.max(1, this.point_lights.length) * 6,\r\n this.shadow_resolution/6,\r\n this.shadow_resolution/6,\r\n TextureType.DEPTH_ARRAY,\r\n {\r\n [this.gl.TEXTURE_COMPARE_MODE]: this.gl.COMPARE_REF_TO_TEXTURE,\r\n [this.gl.TEXTURE_COMPARE_FUNC]: this.gl.LEQUAL,\r\n [this.gl.TEXTURE_MIN_FILTER]: this.gl.LINEAR,\r\n [this.gl.TEXTURE_MAG_FILTER]: this.gl.LINEAR,\r\n [this.gl.TEXTURE_WRAP_S]: this.gl.CLAMP_TO_EDGE,\r\n [this.gl.TEXTURE_WRAP_T]: this.gl.CLAMP_TO_EDGE,\r\n [this.gl.TEXTURE_BASE_LEVEL]: 0,\r\n [this.gl.TEXTURE_MAX_LEVEL]: 0,\r\n }\r\n );\r\n\r\n this.point_shadow_depth_buffer = this.create_framebuffer(\r\n `point_shadow_depth_buffer`,\r\n [\r\n {\r\n name:\"depth\",\r\n type:AttachmentType.TEXTURE_ARRAY_DEPTH,\r\n texture:this.point_light_shadow_map_texture,\r\n texture_array_index:this.point_lights.length * 6\r\n }\r\n ],\r\n DrawFlag.DEPTH_TEST\r\n | DrawFlag.DEPTH_FUNC_LESS\r\n | DrawFlag.CULL_FRONT\r\n | DrawFlag.FORCE_WRITE_DEPTH\r\n );\r\n\r\n this.directional_shadow_depth_buffer = this.create_framebuffer(\r\n `directional_shadow_depth_buffer`,\r\n [\r\n {\r\n name:\"depth\",\r\n type:AttachmentType.TEXTURE_ARRAY_DEPTH,\r\n texture:this.directional_light_shadow_map_texture,\r\n texture_array_index:this.directional_lights.length\r\n }\r\n ],\r\n DrawFlag.DEPTH_TEST\r\n | DrawFlag.DEPTH_FUNC_LESS\r\n | DrawFlag.CULL_FRONT\r\n );\r\n }\r\n\r\n webgl_enabled():boolean {\r\n return this.gl !== null;\r\n }\r\n\r\n add_vertex_attribute(label:string, attribute_type:WebGLType, size:number, initial_data:Float32Array, normalized:boolean = false, dynamic:boolean = false) {\r\n if (!this.shader_program) {\r\n console.warn(`Tried to add ${label} vertex attribute without a shader bound while loading mesh.`)\r\n return\r\n }\r\n let vertexBuffer = this.gl.createBuffer();\r\n this.gl.bindBuffer(this.gl.ARRAY_BUFFER, vertexBuffer);\r\n this.gl.bufferData(this.gl.ARRAY_BUFFER, initial_data, dynamic ? this.gl.DYNAMIC_DRAW : this.gl.STATIC_DRAW);\r\n const texcoordLoc = this.gl.getAttribLocation(this.shader_program!, label);\r\n this.gl.enableVertexAttribArray(texcoordLoc);\r\n this.gl.vertexAttribPointer(texcoordLoc, size, attribute_type, normalized, 0, 0);\r\n\r\n this.vertex_attributes[label] = {\r\n label,\r\n attribute_type,\r\n size,\r\n normalized,\r\n dynamic,\r\n vertex_buffer:vertexBuffer\r\n };\r\n this.vertex_count = initial_data.length / this.vertex_attributes[label].size;\r\n }\r\n\r\n remove_vertex_attribute(label:string) {\r\n this.gl.deleteBuffer(this.vertex_attributes[label].vertex_buffer);\r\n }\r\n\r\n set_vertex_attribute_data(label:string, data:Float32Array, offset:number = 0) {\r\n this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.vertex_attributes[label].vertex_buffer);\r\n this.gl.bufferSubData(this.gl.ARRAY_BUFFER, offset, data);\r\n this.vertex_count = data.length / this.vertex_attributes[label].size;\r\n }\r\n\r\n create_shader_program(name:string) {\r\n const prog = new ShaderProgram(name, this, this.gl);\r\n this.shader_programs[name] = prog;\r\n return prog;\r\n }\r\n\r\n use_shader(name:string) { \r\n if (this.shader_program)\r\n this.clear_shader();\r\n this.shader_program = this.shader_programs[name];\r\n this.gl.useProgram(this.shader_program.webgl_shader_program);\r\n // console.log(`USING SHADER ${this.shader_program.name}`);\r\n \r\n }\r\n\r\n clear_shader() {\r\n this.gl.useProgram(null);\r\n this.shader_program = null;\r\n }\r\n\r\n create_framebuffer(name:string, attachment_info:AttachmentInfo[], draw_flags:DrawBitFlags) {\r\n const framebuffer = new Framebuffer(name, this, this.gl, attachment_info, draw_flags);\r\n this.framebuffers[name] = framebuffer;\r\n return framebuffer;\r\n }\r\n\r\n use_framebuffer(name:string) {\r\n const framebuffer = this.framebuffers[name];\r\n if (this.framebuffer === framebuffer)\r\n return;\r\n \r\n this.framebuffer = framebuffer;\r\n const draw_flags = framebuffer.draw_flags;\r\n const gl = this.gl;\r\n \r\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer.webgl_frame_buffer);\r\n gl.viewport(0, 0, framebuffer.width, framebuffer.height);\r\n if (has_flag(draw_flags, DrawFlag.DEPTH_TEST)) {\r\n gl.enable(gl.DEPTH_TEST); \r\n }\r\n \r\n if (has_flag(draw_flags, DrawFlag.CULL_FRONT)) {\r\n gl.cullFace(gl.FRONT);\r\n } else if (has_flag(draw_flags, DrawFlag.CULL_BACK)) {\r\n gl.cullFace(gl.FRONT);\r\n } else if (has_flag(draw_flags, DrawFlag.CULL_FRONT_AND_BACK)) {\r\n gl.cullFace(gl.FRONT_AND_BACK);\r\n }\r\n\r\n if (has_flag(draw_flags, DrawFlag.DEPTH_FUNC_LESS)) {\r\n gl.depthFunc(gl.LESS);\r\n } else if (has_flag(draw_flags, DrawFlag.DEPTH_FUNC_NEVER)) {\r\n gl.depthFunc(gl.NEVER);\r\n } else if (has_flag(draw_flags, DrawFlag.DEPTH_FUNC_EQUAL)) {\r\n gl.depthFunc(gl.EQUAL);\r\n } else if (has_flag(draw_flags, DrawFlag.DEPTH_FUNC_LESS_EQUAL)) {\r\n gl.depthFunc(gl.LEQUAL);\r\n } else if (has_flag(draw_flags, DrawFlag.DEPTH_FUNC_GREATER)) {\r\n gl.depthFunc(gl.GREATER);\r\n } else if (has_flag(draw_flags, DrawFlag.DEPTH_FUNC_NOT_EQUAL)) {\r\n gl.depthFunc(gl.NOTEQUAL);\r\n } else if (has_flag(draw_flags, DrawFlag.DEPTH_FUNC_GREATER_EQUAL)) {\r\n gl.depthFunc(gl.GEQUAL);\r\n } else if (has_flag(draw_flags, DrawFlag.DEPTH_FUNC_ALWAYS)) {\r\n gl.depthFunc(gl.ALWAYS);\r\n }\r\n \r\n if (framebuffer.use_depth_buffer || has_flag(draw_flags, DrawFlag.FORCE_WRITE_DEPTH)) {\r\n gl.clearDepth(1.0);\r\n gl.depthMask(true);\r\n }\r\n }\r\n\r\n unuse_framebuffer() {\r\n if (!this.framebuffer)\r\n return;\r\n\r\n const framebuffer = this.framebuffer;\r\n const draw_flags = framebuffer.draw_flags;\r\n const gl = this.gl;\r\n\r\n if (draw_flags & DrawFlag.DEPTH_TEST) {\r\n gl.disable(gl.DEPTH_TEST);\r\n }\r\n if (has_flag(draw_flags, DrawFlag.DEPTH_FUNC_NEVER)\r\n || has_flag(draw_flags, DrawFlag.DEPTH_FUNC_EQUAL)\r\n || has_flag(draw_flags, DrawFlag.DEPTH_FUNC_LESS_EQUAL)\r\n || has_flag(draw_flags, DrawFlag.DEPTH_FUNC_GREATER)\r\n || has_flag(draw_flags, DrawFlag.DEPTH_FUNC_NOT_EQUAL)\r\n || has_flag(draw_flags, DrawFlag.DEPTH_FUNC_GREATER_EQUAL)\r\n || has_flag(draw_flags, DrawFlag.DEPTH_FUNC_ALWAYS)) {\r\n gl.depthFunc(gl.LESS);\r\n }\r\n if (\r\n has_flag(draw_flags, DrawFlag.CULL_FRONT)\r\n || has_flag(draw_flags, DrawFlag.CULL_BACK)\r\n || has_flag(draw_flags, DrawFlag.CULL_FRONT_AND_BACK)\r\n ) {\r\n gl.cullFace(gl.BACK);\r\n }\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\r\n this.framebuffer = null;\r\n gl.viewport(0, 0, this.canvas.width, this.canvas.height);\r\n }\r\n\r\n set_uniform(label:string, value:any, transpose:boolean = false, warn:boolean = false) {\r\n \r\n \r\n if (this.shader_program === null) {\r\n if (warn)\r\n console.warn(`Attempted to set ${label} uniform value to ${value} before a shader program was selected.`)\r\n return;\r\n }\r\n \r\n const label_index = get_uniform_label_index(label);\r\n \r\n \r\n const normalized_label = normalize_uniform_label(label).replace(\"[]\", \"\");\r\n \r\n let uniform = this.shader_program.uniforms[normalized_label];\r\n if (uniform === undefined) {\r\n if (warn)\r\n console.warn(`The uniform \"${label}\" has not been registered for the shader program \"${this.shader_program.name}\".`)\r\n return;\r\n }\r\n \r\n if (!(label in this.shader_program.uniform_locs)) {\r\n const loc = this.gl.getUniformLocation(this.shader_program.webgl_shader_program!, label);\r\n if (!loc) {\r\n if (warn)\r\n console.warn(`Uniform \"${label}\" not in use in shader program \"${this.shader_program.name}\".`)\r\n }\r\n this.shader_program.uniform_locs[label] = loc;\r\n }\r\n\r\n // if (uniform.texture_unit !== undefined)\r\n // console.log(\"UNIFORM \", normalized_label, \" \", uniform.texture_unit! + label_index, \"SHADER : \", this.shader_program.name);\r\n var is_sending_array = false;\r\n if (value instanceof Array) {\r\n if (uniform.is_array) {\r\n is_sending_array = true\r\n } else {\r\n throw Error(`Uniform \"${label}\" in shader program \"${this.shader_program.name}\" does not accept array values even though one was supplied.`)\r\n }\r\n }\r\n\r\n // console.log(label);\r\n \r\n\r\n if (is_sending_array) {\r\n value = GraphicsManager.flatten_uniform_array_value(value);\r\n }\r\n\r\n switch (uniform.type) {\r\n case WebGLUniformType.TEXTURE_2D:\r\n case WebGLUniformType.SHADOW_2D:\r\n this.gl.activeTexture(this.gl.TEXTURE0 + uniform.texture_unit! + label_index);\r\n this.gl.bindTexture(this.gl.TEXTURE_2D, (value as Texture).webgl_texture);\r\n this.gl.uniform1i(this.shader_program.uniform_locs[label], uniform.texture_unit! + label_index);\r\n break;\r\n case WebGLUniformType.TEXTURE_2D_ARRAY:\r\n case WebGLUniformType.SHADOW_2D_ARRAY: \r\n this.gl.activeTexture(this.gl.TEXTURE0 + uniform.texture_unit! + label_index);\r\n this.gl.bindTexture(this.gl.TEXTURE_2D_ARRAY, (value as Texture).webgl_texture);\r\n this.gl.uniform1i(this.shader_program.uniform_locs[label], uniform.texture_unit! + label_index);\r\n break;\r\n\r\n case WebGLUniformType.SHADOW_CUBE_MAP:\r\n case WebGLUniformType.TEXTURE_CUBE_MAP:\r\n this.gl.activeTexture(this.gl.TEXTURE0 + uniform.texture_unit! + label_index);\r\n this.gl.bindTexture(this.gl.TEXTURE_CUBE_MAP, (value as CubeMapTexture).webgl_texture);\r\n this.gl.uniform1i(this.shader_program.uniform_locs[label], uniform.texture_unit! + label_index);\r\n break;\r\n\r\n case WebGLUniformType.F:\r\n if (is_sending_array)\r\n this.gl.uniform1fv(this.shader_program.uniform_locs[label], value);\r\n else\r\n this.gl.uniform1f(this.shader_program.uniform_locs[label], value);\r\n break;\r\n\r\n case WebGLUniformType.I:\r\n if (is_sending_array)\r\n this.gl.uniform1iv(this.shader_program.uniform_locs[label], value);\r\n else\r\n this.gl.uniform1i(this.shader_program.uniform_locs[label], value);\r\n break;\r\n\r\n case WebGLUniformType.B:\r\n if (is_sending_array)\r\n this.gl.uniform1iv(this.shader_program.uniform_locs[label], value);\r\n else\r\n this.gl.uniform1i(this.shader_program.uniform_locs[label], value);\r\n break;\r\n\r\n case WebGLUniformType.F2V:\r\n this.gl.uniform2fv(this.shader_program.uniform_locs[label], value);\r\n break;\r\n\r\n case WebGLUniformType.I2V:\r\n this.gl.uniform2iv(this.shader_program.uniform_locs[label], value);\r\n break;\r\n\r\n case WebGLUniformType.F3V:\r\n this.gl.uniform3fv(this.shader_program.uniform_locs[label], value);\r\n break;\r\n\r\n case WebGLUniformType.I3V:\r\n this.gl.uniform3iv(this.shader_program.uniform_locs[label], value);\r\n break;\r\n\r\n case WebGLUniformType.F2M:\r\n this.gl.uniformMatrix2fv(this.shader_program.uniform_locs[label], transpose, value);\r\n break;\r\n\r\n case WebGLUniformType.F3M:\r\n this.gl.uniformMatrix3fv(this.shader_program.uniform_locs[label], transpose, value);\r\n break;\r\n \r\n case WebGLUniformType.F4M:\r\n this.gl.uniformMatrix4fv(this.shader_program.uniform_locs[label], transpose, value);\r\n break;\r\n }\r\n }\r\n\r\n static flatten_uniform_array_value(array_value:(Vec2|Vec3|Vec4|Mat2|Mat3|Mat4|number)[]):Float32Array {\r\n var first_value = array_value[0];\r\n if (typeof first_value === \"number\")\r\n return new Float32Array(array_value as number[]);\r\n\r\n const type_size = first_value.toArray().length;\r\n let data = new Float32Array(array_value.length * type_size);\r\n let offset = 0;\r\n\r\n for (const v of array_value) {\r\n if (typeof v !== \"number\") {\r\n const v_array = v.toArray();\r\n data.set(v_array, offset);\r\n offset += v_array.length;\r\n } else {\r\n data[offset] = v;\r\n offset += 1;\r\n }\r\n }\r\n \r\n\r\n return data;\r\n }\r\n\r\n resize_directional_shadow_map() {\r\n this.directional_light_shadow_map_texture.resize_texture_array(this.directional_lights.length);\r\n\r\n for (var i = 0; i < this.directional_lights.length; ++i) {\r\n const directional_light = this.directional_lights[i];\r\n directional_light.shadow_index = i;\r\n }\r\n\r\n }\r\n\r\n resize_point_shadow_map() {\r\n this.point_light_shadow_map_texture.resize_texture_array(this.point_lights.length * 6);\r\n\r\n for (var i = 0; i < this.point_lights.length; ++i) {\r\n const point_light = this.point_lights[i];\r\n point_light.shadow_index_offset = i * 6;\r\n }\r\n\r\n }\r\n\r\n private resize_canvas() {\r\n const dpr = window.devicePixelRatio || 1;\r\n\r\n const displayWidth = Math.floor(this.canvas.clientWidth * dpr);\r\n const displayHeight = Math.floor(this.canvas.clientHeight * dpr);\r\n\r\n if (this.canvas.width !== displayWidth || this.canvas.height !== displayHeight) {\r\n this.canvas.width = displayWidth;\r\n this.canvas.height = displayHeight;\r\n }\r\n }\r\n\r\n\r\n\r\n render() {\r\n // start the recursive render frame loop.\r\n this.render_frame();\r\n }\r\n\r\n private render_frame(current_time: number = 0):number { \r\n \r\n // first frame, initialize and skip large delta\r\n if (this.last_frame_time === null) {\r\n this.last_frame_time = current_time;\r\n this.engine.input_manager.update();\r\n return requestAnimationFrame((newTime) => this.render_frame(newTime));\r\n }\r\n\r\n // calculate delta in seconds\r\n let delta_time = (current_time - this.last_frame_time) / 1000; // already ms → seconds\r\n\r\n delta_time = delta_time;\r\n\r\n this.last_frame_time = current_time;\r\n \r\n \r\n this.resize_canvas();\r\n \r\n this.gl.viewport(0, 0, this.canvas.width, this.canvas.height);\r\n this.gl.clearColor(0, 0, 0, 0);\r\n this.gl.clear(this.gl.COLOR_BUFFER_BIT);\r\n \r\n this.engine.on_global_update_callback(this.engine, current_time, delta_time);\r\n this.engine.main_scene.update(current_time, delta_time);\r\n this.engine.input_manager.update();\r\n \r\n // Render node heirarchy.\r\n const ortho_projection = new Mat4().orthoZO(0, this.canvas.width, 0, this.canvas.height, -1, 1);\r\n if (this.engine.main_scene.main_camera_3d) {\r\n \r\n const view_matrix = this.engine.main_scene.main_camera_3d.get_view_matrix();\r\n const projection_matrix = this.engine.main_scene.main_camera_3d.get_projection_matrix(this.canvas);\r\n \r\n // RENDER SHADOWS\r\n for (const light of this.point_lights) {\r\n light.draw_shadow_map(\r\n view_matrix,\r\n projection_matrix,\r\n ortho_projection,\r\n current_time, delta_time\r\n );\r\n }\r\n \r\n for (const light of this.directional_lights) { \r\n light.draw_shadow_map(\r\n view_matrix,\r\n projection_matrix,\r\n ortho_projection,\r\n current_time, delta_time\r\n );\r\n }\r\n \r\n this.engine.main_scene.render(\r\n view_matrix,\r\n projection_matrix,\r\n ortho_projection,\r\n current_time, delta_time\r\n );\r\n \r\n } else {\r\n console.warn(`The main scene \"${this.engine.main_scene.name}\" does not have a main camera 3D`);\r\n }\r\n \r\n \r\n return requestAnimationFrame((new_time) => this.render_frame(new_time));\r\n }\r\n\r\n create_default_2d_shader_program():ShaderProgram {\r\n const shader_prog_2d = this.create_shader_program(\"2D\");\r\n\r\n shader_prog_2d.add_shader(this.gl.VERTEX_SHADER, DEFAULT_2D_VERTEX_SHADER);\r\n shader_prog_2d.add_shader(this.gl.FRAGMENT_SHADER, DEFAULT_2D_FRAGMENT_SHADER);\r\n\r\n shader_prog_2d.add_uniform(\"u_model\", WebGLUniformType.F4M);\r\n shader_prog_2d.add_uniform(\"u_projection\", WebGLUniformType.F4M);\r\n\r\n shader_prog_2d.add_uniform(\"sprite_texture\", WebGLUniformType.TEXTURE_2D);\r\n\r\n shader_prog_2d.build();\r\n\r\n return shader_prog_2d;\r\n }\r\n\r\n create_default_3d_shader_program():ShaderProgram {\r\n\r\n const shader_prog_3d = this.create_shader_program(\"3D\");\r\n\r\n shader_prog_3d.add_shader(this.gl.VERTEX_SHADER, DEFAULT_3D_VERTEX_SHADER);\r\n shader_prog_3d.add_shader(this.gl.FRAGMENT_SHADER, DEFAULT_3D_FRAGMENT_SHADER);\r\n\r\n // utility\r\n shader_prog_3d.add_uniform(\"time\", WebGLUniformType.F);\r\n\r\n // SHADOWS\r\n shader_prog_3d.add_uniform(\"depth_cubemap\", WebGLUniformType.TEXTURE_CUBE_MAP);\r\n\r\n // MVP\r\n shader_prog_3d.add_uniform(\"u_model\", WebGLUniformType.F4M);\r\n shader_prog_3d.add_uniform(\"u_view\", WebGLUniformType.F4M);\r\n shader_prog_3d.add_uniform(\"u_projection\", WebGLUniformType.F4M);\r\n\r\n // environment\r\n shader_prog_3d.add_uniform(\"environment.ambient_light\", WebGLUniformType.F3V);\r\n\r\n // camera\r\n shader_prog_3d.add_uniform(\"camera_position\", WebGLUniformType.F3V);\r\n\r\n // lights\r\n shader_prog_3d.add_uniform(\"point_lights_count\", WebGLUniformType.I);\r\n shader_prog_3d.add_uniform(\"spot_lights_count\", WebGLUniformType.I);\r\n shader_prog_3d.add_uniform(\"directional_lights_count\", WebGLUniformType.I);\r\n\r\n /// point lights\r\n shader_prog_3d.add_uniform(\"point_lights[].position\", WebGLUniformType.F3V);\r\n shader_prog_3d.add_uniform(\"point_lights[].color\", WebGLUniformType.F3V);\r\n shader_prog_3d.add_uniform(\"point_lights[].range\", WebGLUniformType.F);\r\n shader_prog_3d.add_uniform(\"point_lights[].energy\", WebGLUniformType.F);\r\n shader_prog_3d.add_uniform(\"point_lights[].ambient\", WebGLUniformType.F);\r\n shader_prog_3d.add_uniform(\"point_lights[].diffuse\", WebGLUniformType.F);\r\n shader_prog_3d.add_uniform(\"point_lights[].specular\", WebGLUniformType.F);\r\n\r\n /// spot lights\r\n shader_prog_3d.add_uniform(\"spot_lights[].position\", WebGLUniformType.F3V);\r\n shader_prog_3d.add_uniform(\"spot_lights[].color\", WebGLUniformType.F3V);\r\n shader_prog_3d.add_uniform(\"spot_lights[].rotation\", WebGLUniformType.F4M);\r\n shader_prog_3d.add_uniform(\"spot_lights[].range\", WebGLUniformType.F);\r\n shader_prog_3d.add_uniform(\"spot_lights[].energy\", WebGLUniformType.F);\r\n shader_prog_3d.add_uniform(\"spot_lights[].cookie_radius\", WebGLUniformType.F);\r\n shader_prog_3d.add_uniform(\"spot_lights[].ambient\", WebGLUniformType.F);\r\n shader_prog_3d.add_uniform(\"spot_lights[].diffuse\", WebGLUniformType.F);\r\n shader_prog_3d.add_uniform(\"spot_lights[].specular\", WebGLUniformType.F);\r\n\r\n /// directional lights\r\n shader_prog_3d.add_uniform(\"directional_lights[].rotation\", WebGLUniformType.F4M);\r\n shader_prog_3d.add_uniform(\"directional_lights[].color\", WebGLUniformType.F3V);\r\n shader_prog_3d.add_uniform(\"directional_lights[].energy\", WebGLUniformType.F);\r\n shader_prog_3d.add_uniform(\"directional_lights[].ambient\", WebGLUniformType.F);\r\n shader_prog_3d.add_uniform(\"directional_lights[].diffuse\", WebGLUniformType.F);\r\n shader_prog_3d.add_uniform(\"directional_lights[].specular\", WebGLUniformType.F);\r\n\r\n // material\r\n shader_prog_3d.add_uniform(\"material.has_normal_texture\", WebGLUniformType.B);\r\n shader_prog_3d.add_uniform(\"material.has_albedo_texture\", WebGLUniformType.B);\r\n shader_prog_3d.add_uniform(\"material.albedo\", WebGLUniformType.F3V);\r\n shader_prog_3d.add_uniform(\"material.has_metalic_texture\", WebGLUniformType.B);\r\n shader_prog_3d.add_uniform(\"material.metalic\", WebGLUniformType.F);\r\n shader_prog_3d.add_uniform(\"material.has_roughness_texture\", WebGLUniformType.B);\r\n shader_prog_3d.add_uniform(\"material.roughness\", WebGLUniformType.F);\r\n shader_prog_3d.add_uniform(\"material.has_ao_texture\", WebGLUniformType.B);\r\n shader_prog_3d.add_uniform(\"material.ao\", WebGLUniformType.F);\r\n\r\n shader_prog_3d.add_uniform(\"material_texture_albedo\", WebGLUniformType.TEXTURE_2D);\r\n shader_prog_3d.add_uniform(\"material_texture_normal\", WebGLUniformType.TEXTURE_2D);\r\n shader_prog_3d.add_uniform(\"material_texture_metalic\", WebGLUniformType.TEXTURE_2D);\r\n shader_prog_3d.add_uniform(\"material_texture_roughness\", WebGLUniformType.TEXTURE_2D);\r\n shader_prog_3d.add_uniform(\"material_texture_ao\", WebGLUniformType.TEXTURE_2D);\r\n \r\n // shadows\r\n shader_prog_3d.add_uniform(\"u_directional_light_space_matrix[]\", WebGLUniformType.F4M);\r\n shader_prog_3d.add_uniform(\"u_point_light_space_matrix[]\", WebGLUniformType.F4M);\r\n shader_prog_3d.add_uniform(\"directional_light_shadow_maps\", WebGLUniformType.SHADOW_2D_ARRAY);\r\n shader_prog_3d.add_uniform(\"point_light_shadow_maps\", WebGLUniformType.SHADOW_2D_ARRAY);\r\n shader_prog_3d.add_uniform(\"shadow_map_size\", WebGLUniformType.F2V);\r\n\r\n shader_prog_3d.build();\r\n\r\n return shader_prog_3d;\r\n }\r\n\r\n create_default_skybox_shader_program() {\r\n const shader_prog_skybox = this.create_shader_program(\"SKYBOX\");\r\n\r\n shader_prog_skybox.add_shader(this.gl.VERTEX_SHADER, DEFAULT_SKYBOX_VERTEX_SHADER);\r\n shader_prog_skybox.add_shader(this.gl.FRAGMENT_SHADER, DEFAULT_SKYBOX_FRAGMENT_SHADER);\r\n\r\n shader_prog_skybox.add_uniform(\"u_view\", WebGLUniformType.F4M);\r\n shader_prog_skybox.add_uniform(\"u_projection\", WebGLUniformType.F4M);\r\n\r\n shader_prog_skybox.add_uniform(\"skybox_texture\", WebGLUniformType.TEXTURE_CUBE_MAP);\r\n\r\n shader_prog_skybox.build();\r\n\r\n return shader_prog_skybox;\r\n }\r\n\r\n create_default_directional_shadow_shader_program():ShaderProgram {\r\n const sp = this.create_shader_program(\"default_directional_shadow_shader_program\");\r\n\r\n sp.add_shader(this.gl.VERTEX_SHADER, DEFAULT_DIRECTIONAL_SHADOW_VERTEX_SHADER);\r\n sp.add_shader(this.gl.FRAGMENT_SHADER, DEFAULT_DIRECTIONAL_SHADOW_FRAGMENT_SHADER);\r\n\r\n sp.add_uniform(\"u_light_space_matrix\", WebGLUniformType.F4M);\r\n sp.add_uniform(\"u_model\", WebGLUniformType.F4M);\r\n\r\n sp.build()\r\n\r\n return sp;\r\n }\r\n\r\n create_default_point_shadow_shader_program():ShaderProgram {\r\n const sp = this.create_shader_program(\"default_point_shadow_shader_program\");\r\n\r\n sp.add_shader(this.gl.VERTEX_SHADER, DEFAULT_POINT_SHADOW_VERTEX_SHADER);\r\n sp.add_shader(this.gl.FRAGMENT_SHADER, DEFAULT_POINT_SHADOW_FRAGMENT_SHADER);\r\n\r\n sp.add_uniform(\"u_light_space_matrix\", WebGLUniformType.F4M);\r\n sp.add_uniform(\"u_model\", WebGLUniformType.F4M);\r\n sp.add_uniform(\"origin\", WebGLUniformType.F3V);\r\n sp.add_uniform(\"range\", WebGLUniformType.F);\r\n\r\n sp.build()\r\n\r\n return sp;\r\n }\r\n}\r\n","export default `#version 300 es\r\n\r\nlayout(location = 0) in vec3 a_position;\r\nlayout(location = 1) in vec2 a_uv;\r\n\r\n\r\nuniform mat4 u_model;\r\nuniform mat4 u_projection;\r\n\r\nout vec2 v_uv;\r\n\r\nvoid main() {\r\n gl_Position = u_projection * u_model * vec4(a_position, 1.0);\r\n v_uv = a_uv;\r\n}`;","export default `#version 300 es\r\nprecision lowp float;\r\n\r\nin vec2 v_uv;\r\n\r\nout vec4 frag_color;\r\n\r\nuniform sampler2D sprite_texture;\r\n\r\nvoid main() {\r\n frag_color = texture(sprite_texture, vec2(v_uv.x, v_uv.y));\r\n}\r\n`;","export default `#version 300 es\r\nprecision lowp float;\r\nprecision lowp sampler2DArrayShadow;\r\n\r\nuniform mediump int directional_lights_count;\r\nuniform mediump int point_lights_count;\r\nuniform mediump int spot_lights_count;\r\n\r\n#define N_DIRECTIONAL_LIGHTS 10\r\n#define N_POINT_LIGHTS 10\r\n#define N_SPOT_LIGHTS 10\r\n\r\n// Vertex position attribute\r\nlayout(location = 0) in vec3 a_position;\r\nlayout(location = 1) in vec3 a_normal;\r\nlayout(location = 2) in vec2 a_uv;\r\n\r\nout vec3 v_normal;\r\nout vec2 v_uv;\r\nout vec4 v_frag_pos;\r\n\r\n\r\n// Uniform MVP matrix\r\nuniform mat4 u_model;\r\nuniform mat4 u_view;\r\nuniform mat4 u_projection;\r\n\r\nvoid main() {\r\n\r\n v_frag_pos = u_model * vec4(a_position, 1.0);\r\n v_normal = normalize(mat3(transpose(inverse(u_model))) * a_normal);\r\n v_uv = a_uv;\r\n\r\n gl_Position = u_projection * u_view * v_frag_pos;\r\n}`;","export default `#version 300 es\r\nprecision lowp float;\r\nprecision lowp sampler2DArrayShadow;\r\n\r\nuniform mediump int directional_lights_count;\r\nuniform mediump int point_lights_count;\r\nuniform mediump int spot_lights_count;\r\n\r\n#define N_DIRECTIONAL_LIGHTS 10\r\n#define N_POINT_LIGHTS 10\r\n#define N_SPOT_LIGHTS 10\r\n#define PI 3.14159265358979323846264338327950288419716939937510\r\n\r\nin vec3 v_normal;\r\nin vec2 v_uv;\r\nin vec4 v_frag_pos;\r\n\r\nout vec4 frag_color;\r\n\r\n\r\nstruct Environment {\r\n vec3 ambient_light;\r\n};\r\n\r\n// fallback values\r\nstruct Material {\r\n bool has_normal_texture;\r\n bool has_albedo_texture;\r\n vec3 albedo;\r\n\r\n bool has_metalic_texture;\r\n float metalic;\r\n bool has_roughness_texture;\r\n float roughness;\r\n bool has_ao_texture;\r\n float ao;\r\n};\r\n\r\n// PBR\r\nuniform sampler2D material_texture_albedo;\r\nuniform sampler2D material_texture_normal;\r\nuniform sampler2D material_texture_metalic;\r\nuniform sampler2D material_texture_roughness;\r\nuniform sampler2D material_texture_ao;\r\n\r\nstruct PointLight {\r\n vec3 position;\r\n vec3 color;\r\n float range;\r\n float energy;\r\n\r\n float ambient;\r\n float diffuse;\r\n float specular;\r\n};\r\n\r\nstruct SpotLight {\r\n vec3 position;\r\n vec3 color;\r\n mat4 rotation;\r\n float energy;\r\n float range;\r\n float cookie_radius;\r\n\r\n float ambient;\r\n float diffuse;\r\n float specular;\r\n};\r\n\r\nstruct DirectionalLight {\r\n mat4 rotation;\r\n vec3 color;\r\n float energy;\r\n\r\n float ambient;\r\n float diffuse;\r\n float specular;\r\n};\r\n\r\nuniform PointLight point_lights[N_POINT_LIGHTS];\r\n\r\nuniform SpotLight spot_lights[N_SPOT_LIGHTS];\r\n\r\nuniform DirectionalLight directional_lights[N_DIRECTIONAL_LIGHTS];\r\n\r\nuniform Material material;\r\n\r\nuniform Environment environment;\r\n\r\nuniform vec3 camera_position;\r\n\r\nuniform sampler2DArrayShadow directional_light_shadow_maps;\r\nuniform sampler2DArrayShadow point_light_shadow_maps;\r\n\r\nuniform vec2 shadow_map_size;\r\n\r\nuniform mat4 u_directional_light_space_matrix[N_DIRECTIONAL_LIGHTS];\r\nuniform mat4 u_point_light_space_matrix[N_POINT_LIGHTS * 6];\r\n\r\nfloat L(PointLight light);\r\nfloat L(DirectionalLight light);\r\n\r\nfloat distribution_GGX(vec3 N, vec3 H, float a);\r\nfloat geometry_schlick_GGX(float NdotV, float k);\r\nfloat geometry_smith(vec3 N, vec3 V, vec3 L, float k);\r\nvec3 fresnel_schlick(float cosTheta, vec3 F0);\r\n\r\nvec3 Fr(vec3 light_dir, vec4 albedo_color, bool image_lighting);\r\n\r\nvec3 calculate_point_lighting(vec4 base_color);\r\n\r\nvec3 calculate_directional_lighting(vec4 base_color);\r\n\r\nvec3 calculate_lighting(vec4 base_color);\r\n\r\nfloat calculate_point_shadow(int index, PointLight light);\r\n\r\nfloat calculate_directional_shadow(int index, vec3 light_dir);\r\n\r\nvoid main() {\r\n \r\n vec4 base_color;\r\n if (material.has_albedo_texture)\r\n base_color = texture(material_texture_albedo, v_uv);\r\n else\r\n base_color = vec4(material.albedo, 1.0);\r\n\r\n vec3 lighting = calculate_lighting(base_color);\r\n\r\n base_color.rgb = environment.ambient_light * base_color.rgb + lighting;\r\n\r\n frag_color = base_color;\r\n}\r\n\r\nint get_point_shadow_face_index(int origin, vec3 dir) {\r\n vec3 abs_dir = abs(dir);\r\n \r\n int index = 0;\r\n \r\n // Directly compare the absolute values\r\n if (abs_dir.x >= abs_dir.y && abs_dir.x >= abs_dir.z) {\r\n // X is dominant\r\n index = (dir.x > 0.0) ? 0 : 1;\r\n } else if (abs_dir.y >= abs_dir.z) {\r\n // Y is dominant\r\n index = (dir.y > 0.0) ? 2 : 3;\r\n } else {\r\n // Z is dominant\r\n index = (dir.z > 0.0) ? 4 : 5;\r\n }\r\n \r\n return origin + index;\r\n}\r\n\r\nfloat calculate_point_shadow(int index, PointLight light) {\r\n vec3 light_to_frag = v_frag_pos.xyz - light.position;\r\n float light_distance = length(light_to_frag);\r\n vec3 dir = normalize(light_to_frag);\r\n\r\n float bias = max(0.015 * (1.0 - dot(v_normal, -dir)), 0.003);\r\n\r\n int face_index = get_point_shadow_face_index(index * 6, dir);\r\n\r\n vec4 frag_light = u_point_light_space_matrix[face_index] * v_frag_pos;\r\n vec3 proj = frag_light.xyz / frag_light.w;\r\n proj = proj * 0.5 + 0.5;\r\n\r\n float current_depth = light_distance / light.range;\r\n\r\n float shadow = 0.0;\r\n\r\n shadow += texture(\r\n point_light_shadow_maps,\r\n vec4(\r\n proj.xy,\r\n float(face_index),\r\n current_depth - bias\r\n )\r\n );\r\n\r\n return shadow;\r\n}\r\n\r\nvec3 calculate_point_lighting(vec4 base_color) {\r\n vec3 cumulative_radiance = vec3(0.0,0.0,0.0);\r\n\r\n for (int i = 0; i < point_lights_count; i++) {\r\n PointLight light = point_lights[i];\r\n vec3 light_dir = normalize(light.position - v_frag_pos.xyz);\r\n float n_dot_l = max(dot(v_normal, light_dir), 0.0);\r\n vec3 product = Fr(light_dir, base_color, false) * L(light) * n_dot_l;\r\n float shadow = calculate_point_shadow(i, light);\r\n cumulative_radiance += product * light.color * shadow;\r\n }\r\n\r\n return cumulative_radiance;\r\n}\r\n\r\nfloat calculate_directional_shadow(int index, vec3 light_dir) {\r\n vec4 frag_pos_light_space = u_directional_light_space_matrix[index] * v_frag_pos;\r\n vec3 proj_coords = frag_pos_light_space.xyz / frag_pos_light_space.w;\r\n proj_coords = proj_coords * 0.5 + 0.5;\r\n\r\n float bias = max(0.05 * (1.0 - dot(v_normal, light_dir)), 0.005);\r\n\r\n float current_depth = proj_coords.z - bias;\r\n\r\n // apply blur to shadow edges\r\n float shadow = 0.0;\r\n\r\n shadow += texture(directional_light_shadow_maps, vec4(\r\n proj_coords.xy, \r\n float(index), \r\n current_depth\r\n ));\r\n\r\n return shadow;\r\n}\r\n\r\nvec3 calculate_lighting(vec4 base_color) {\r\n vec3 cumulative_radiance = vec3(0.0,0.0,0.0);\r\n\r\n cumulative_radiance += calculate_point_lighting(base_color);\r\n\r\n cumulative_radiance += calculate_directional_lighting(base_color);\r\n\r\n return cumulative_radiance;\r\n}\r\n\r\nvec3 calculate_directional_lighting(vec4 base_color) {\r\n vec3 cumulative_radiance = vec3(0.0,0.0,0.0);\r\n\r\n for (int i = 0; i < directional_lights_count; i++) {\r\n DirectionalLight light = directional_lights[i];\r\n vec3 light_dir = (light.rotation * vec4(1.0,0.0,0.0, 0.0)).xyz;\r\n float n_dot_l = max(dot(v_normal, light_dir), 0.0);\r\n vec3 product = Fr(light_dir, base_color, false) * L(light) * n_dot_l;\r\n float shadow = calculate_directional_shadow(i, light_dir);\r\n cumulative_radiance += product * light.color * shadow;\r\n }\r\n\r\n return cumulative_radiance;\r\n}\r\n\r\nvec3 Fr(vec3 light_dir, vec4 albedo_color, bool image_lighting) {\r\n\r\n // COOK TORRANCE\r\n vec3 view_vector = normalize(camera_position - v_frag_pos.xyz);\r\n vec3 halfway_vector = (light_dir + view_vector) / length(light_dir + view_vector);\r\n\r\n float roughness = max(material.roughness, 0.04);\r\n\r\n float k;\r\n if (image_lighting)\r\n k = pow(roughness, 2.0) / 2.0;\r\n else\r\n k = pow(roughness + 1.0, 2.0) / 8.0;\r\n\r\n /// DGF\r\n float D = distribution_GGX(v_normal, halfway_vector, roughness);\r\n float G = geometry_smith(v_normal, view_vector, light_dir, k);\r\n vec3 F0 = vec3(0.04); \r\n F0 = mix(F0, albedo_color.rgb, material.metalic);\r\n vec3 F = fresnel_schlick(max(dot(halfway_vector, view_vector), 0.0), F0);\r\n \r\n vec3 numerator = D * G * F;\r\n float denominator = 4.0 * max(dot(v_normal, view_vector), 0.0) * max(dot(v_normal, light_dir), 0.0) + 0.0001;\r\n vec3 specular = numerator / denominator; \r\n\r\n vec3 ks = F;\r\n vec3 kd = vec3(1.0) - ks;\r\n kd *= 1.0 - material.metalic;\r\n\r\n vec3 f_lambert = albedo_color.rgb / PI;\r\n\r\n\r\n return kd * f_lambert + specular;\r\n}\r\n\r\nfloat L(PointLight light) {\r\n float light_distance = distance(v_frag_pos.xyz, light.position);\r\n // Standard ranged attenuation\r\n float attenuation = clamp(1.0 - light_distance / light.range, 0.0, 1.0);\r\n return light.energy * attenuation * attenuation;\r\n}\r\n\r\nfloat L(DirectionalLight light) {\r\n return light.energy;\r\n}\r\n\r\nfloat distribution_GGX(vec3 N, vec3 H, float a)\r\n{\r\n float a2 = a*a;\r\n float NdotH = max(dot(N, H), 0.0);\r\n float NdotH2 = NdotH*NdotH;\r\n\t\r\n float nom = a2;\r\n float denom = (NdotH2 * (a2 - 1.0) + 1.0);\r\n denom = PI * denom * denom;\r\n\t\r\n return nom / denom;\r\n}\r\n\r\n\r\nfloat geometry_schlick_GGX(float NdotV, float k)\r\n{\r\n float nom = NdotV;\r\n float denom = NdotV * (1.0 - k) + k;\r\n\t\r\n return nom / denom;\r\n}\r\n \r\nfloat geometry_smith(vec3 N, vec3 V, vec3 L, float k)\r\n{\r\n float NdotV = max(dot(N, V), 0.0);\r\n float NdotL = max(dot(N, L), 0.0);\r\n float ggx1 = geometry_schlick_GGX(NdotV, k);\r\n float ggx2 = geometry_schlick_GGX(NdotL, k);\r\n\t\r\n return ggx1 * ggx2;\r\n}\r\n\r\nvec3 fresnel_schlick(float cosTheta, vec3 F0)\r\n{\r\n return F0 + (1.0 - F0) * pow(clamp(1.0 - cosTheta, 0.0, 1.0), 5.0);\r\n}`;","export default `#version 300 es\r\nprecision lowp float;\r\n\r\nlayout(location = 0) in vec3 a_position;\r\n\r\nout vec3 v_texCoord;\r\n\r\nuniform mat4 u_view;\r\nuniform mat4 u_projection;\r\n\r\nvoid main() {\r\n // Remove translation from view matrix\r\n mat4 rotView = mat4(mat3(u_view));\r\n\r\n v_texCoord = a_position;\r\n\r\n gl_Position = u_projection * rotView * vec4(a_position, 1.0);\r\n\r\n // Make sure depth is at far plane\r\n gl_Position = gl_Position.xyww;\r\n}\r\n`;","export default `#version 300 es\r\nprecision lowp float;\r\n\r\nin vec3 v_texCoord;\r\n\r\nout vec4 fragColor;\r\n\r\nuniform samplerCube skybox_texture;\r\n\r\nvoid main() {\r\n fragColor = texture(skybox_texture, v_texCoord);\r\n}\r\n`;","export default `#version 300 es\r\nlayout (location = 0) in vec3 aPos;\r\n\r\nuniform mat4 u_light_space_matrix;\r\nuniform mat4 u_model;\r\n\r\nvoid main()\r\n{\r\n gl_Position = u_light_space_matrix * u_model * vec4(aPos, 1.0);\r\n}`;","export default `#version 300 es\r\n\r\n\r\nvoid main() {\r\n}`;","export default `#version 300 es\r\nlayout (location = 0) in vec3 a_position;\r\n\r\nout vec4 v_frag_pos;\r\n\r\nuniform mat4 u_model;\r\nuniform mat4 u_light_space_matrix;\r\n\r\nvoid main()\r\n{\r\n v_frag_pos = u_model * vec4(a_position, 1.0);\r\n gl_Position = u_light_space_matrix * v_frag_pos;\r\n}`;","export default `#version 300 es\r\nprecision lowp float;\r\n\r\nin vec4 v_frag_pos;\r\nout vec4 frag_color;\r\n\r\n\r\nuniform vec3 origin;\r\nuniform float range;\r\n\r\n\r\nvoid main()\r\n{\r\n float dist = length(v_frag_pos.xyz - origin);\r\n gl_FragDepth = dist / range;\r\n}\r\n`;","import { Mat4 } from \"@vicimpa/glm\";\r\nimport { Node3D } from \"../node.ts\";\r\nimport { degrees_to_radians } from \"../graphics/utility.ts\";\r\n\r\n\r\nexport class Camera3D extends Node3D {\r\n fov:number = degrees_to_radians(60);\r\n near_plane:number = 0.1;\r\n far_plane:number = 1000.0;\r\n\r\n get_projection_matrix(canvas:HTMLCanvasElement): Mat4 {\r\n const aspect = canvas.width / canvas.height;\r\n\r\n return new Mat4().perspectiveNO(\r\n this.fov,\r\n aspect,\r\n this.near_plane,\r\n this.far_plane\r\n );\r\n }\r\n\r\n get_view_matrix(): Mat4 {\r\n const view = new Mat4().identity();\r\n\r\n // Inverse rotation\r\n const invRot = this.rotation.clone().invert();\r\n view.mul(new Mat4().fromQuat(invRot));\r\n\r\n // Inverse translation\r\n view.translate(this.position.clone().negate());\r\n\r\n return view;\r\n }\r\n}","import { Mat3, Mat4, Quat, Vec3, Vec4 } from \"@vicimpa/glm\";\r\nimport Engine from \"../../engine.ts\";\r\nimport { Node, Node3D } from \"../../node.ts\";\r\nimport { ShaderProgram } from \"../../graphics/shader_program.ts\";\r\nimport { AttachmentType, Framebuffer } from \"../../graphics/framebuffer.ts\";\r\nimport { Texture, TextureType } from \"../../graphics/assets/texture.ts\";\r\n\r\n\r\n\r\nexport class Light extends Node3D {\r\n color:Vec3;\r\n ambient:number;\r\n diffuse:number;\r\n specular:number;\r\n energy:number;// radiant flux\r\n\r\n constructor(\r\n engine:Engine,\r\n name:string,\r\n color:Vec3,\r\n ambient:number,\r\n diffuse:number,\r\n specular:number,\r\n energy:number,\r\n ) {\r\n super(engine, name);\r\n this.color = color;\r\n this.ambient = ambient;\r\n this.diffuse = diffuse;\r\n this.specular = specular;\r\n this.energy = energy;\r\n }\r\n\r\n\r\n\r\n set_shader_uniforms(shader_program:ShaderProgram, array_name:string, index:number): void {\r\n shader_program.use();\r\n this.set_uniforms(array_name, index);\r\n this.engine.graphics_manager.clear_shader();\r\n }\r\n\r\n set_uniforms(array_name:string, index:number): void {\r\n this.engine.graphics_manager.set_uniform(`${array_name}[${index}].color`, this.color);\r\n this.engine.graphics_manager.set_uniform(`${array_name}[${index}].ambient`, this.ambient);\r\n this.engine.graphics_manager.set_uniform(`${array_name}[${index}].diffuse`, this.diffuse);\r\n this.engine.graphics_manager.set_uniform(`${array_name}[${index}].specular`, this.specular);\r\n this.engine.graphics_manager.set_uniform(`${array_name}[${index}].energy`, this.energy);\r\n }\r\n}\r\n","import { Mat4, Vec3, Vec4 } from \"@vicimpa/glm\";\r\nimport Engine from \"../../engine.ts\";\r\nimport { Node, Node3D } from \"../../node.ts\";\r\nimport { Light } from \"./light.ts\";\r\nimport { ShaderProgram } from \"../../graphics/shader_program.ts\";\r\nimport { AttachmentType, Framebuffer } from \"../../graphics/framebuffer.ts\";\r\nimport { CubeMapTexture, TextureType } from \"../../graphics/assets/texture.ts\";\r\nimport { GraphicsManager } from \"../../graphics/graphics_manager.ts\";\r\n\r\n// TODO: FIX SHADOWS NEGATED BY OBJECTS UNDERNEATH OBJECTS ONTOP OF THE OBJECTS\r\n\r\nconst point_light_shadow_lookat_values = [\r\n [new Vec3(1.0, 0.0, 0.0), new Vec3(0.0, 1.0, 0.0)], // +X: Up is -Y\r\n [new Vec3(-1.0, 0.0, 0.0), new Vec3(0.0, 1.0, 0.0)], // -X: Up is -Y\r\n [new Vec3(0.0, 1.0, 0.0), new Vec3(0.0, 0.0, 1.0)], // +Y: Up is +Z\r\n [new Vec3(0.0, -1.0, 0.0), new Vec3(0.0, 0.0, -1.0)], // -Y: Up is -Z\r\n [new Vec3(0.0, 0.0, 1.0), new Vec3(0.0, 1.0, 0.0)], // +Z: Up is -Y\r\n [new Vec3(0.0, 0.0, -1.0), new Vec3(0.0, 1.0, 0.0)], // -Z: Up is -Y\r\n];\r\n\r\nexport class PointLight extends Light {\r\n private stored_range:number;\r\n shadow_index_offset:number;\r\n\r\n shader_program:ShaderProgram;\r\n framebuffer:Framebuffer;\r\n\r\n shadow_projection:Mat4 = new Mat4();\r\n\r\n parent_world_matrix:Mat4 = new Mat4();\r\n\r\n point_light_space_matrices:Mat4[] = [\r\n new Mat4(),\r\n new Mat4(),\r\n new Mat4(),\r\n new Mat4(),\r\n new Mat4(),\r\n new Mat4(),\r\n ];\r\n \r\n constructor(\r\n engine:Engine,\r\n name:string,\r\n color:Vec3,\r\n ambient:number,\r\n diffuse:number,\r\n specular:number,\r\n energy:number,\r\n range:number,\r\n shader_program:ShaderProgram|null = null,\r\n ) {\r\n super(engine, name, color, ambient, diffuse, specular, energy);\r\n this.ambient = ambient;\r\n this.diffuse = diffuse;\r\n this.specular = specular;\r\n this.stored_range = range;\r\n this.range = range;\r\n this.shadow_index_offset = this.engine.graphics_manager.point_lights.length * 6;\r\n this.framebuffer = this.engine.graphics_manager.point_shadow_depth_buffer;\r\n this.shader_program = shader_program ? shader_program : this.engine.graphics_manager.create_default_point_shadow_shader_program();\r\n }\r\n\r\n get range():number {\r\n return this.stored_range;\r\n }\r\n\r\n set range(value:number) {\r\n this.stored_range = value;\r\n this.on_change_range(value);\r\n }\r\n\r\n private update_lsms() {\r\n const get_world_position = this.get_world_position();\r\n for (let i = 0; i < 6; ++i) {\r\n const [center_offset, up] = point_light_shadow_lookat_values[i];\r\n const offset_position = get_world_position.clone().add(center_offset);\r\n const view = new Mat4().lookAt(\r\n get_world_position,\r\n offset_position,\r\n up\r\n );\r\n this.point_light_space_matrices[i] = this.shadow_projection.clone().mul(view);\r\n }\r\n }\r\n\r\n protected on_change_range(value:number) { \r\n this.shadow_projection = new Mat4().perspectiveZO(90.0 * Math.PI/180, 1, 0.1, value);\r\n this.update_lsms();\r\n }\r\n\r\n protected on_change_position(new_value: Vec3): void { \r\n this.update_lsms();\r\n }\r\n\r\n draw_shadow_map(view_matrix: Mat4, projection_matrix_3d: Mat4, projection_matrix_2d: Mat4, time: number, delta_time: number): void {\r\n if (this.engine.main_scene.main_camera_3d) {\r\n this.engine.main_scene.rendering_depth_map = true\r\n \r\n if (this.parent instanceof Node3D) {\r\n const parent_world_matrix = this.parent.get_world_matrix();\r\n \r\n if (!this.parent_world_matrix.equals(parent_world_matrix)) {\r\n this.parent_world_matrix = parent_world_matrix;\r\n this.update_lsms()\r\n }\r\n }\r\n\r\n\r\n this.shader_program.use();\r\n \r\n this.framebuffer.use();\r\n \r\n this.engine.graphics_manager.set_uniform(`origin`, this.get_world_position());\r\n this.engine.graphics_manager.set_uniform(`range`, this.range);\r\n \r\n for (var i = 0; i < 6; ++i) {\r\n \r\n this.framebuffer.set_attachment_texture_index(\"depth\", this.shadow_index_offset + i);\r\n \r\n this.framebuffer.clear();\r\n\r\n // Set uniforms\r\n this.engine.graphics_manager.set_uniform(`u_light_space_matrix`, this.point_light_space_matrices[i]);\r\n\r\n // Render shadows to map\r\n this.engine.main_scene.render(\r\n view_matrix,\r\n projection_matrix_3d,\r\n projection_matrix_2d,\r\n time, delta_time\r\n );\r\n \r\n }\r\n \r\n this.engine.graphics_manager.unuse_framebuffer();\r\n \r\n this.engine.graphics_manager.clear_shader();\r\n \r\n this.engine.main_scene.rendering_depth_map = false;\r\n } else {\r\n throw Error(`The main scene named \"${this.engine.main_scene.name}\" does not have a main_camera_3d which is required to render a shadow map.`)\r\n }\r\n }\r\n\r\n set_uniforms(array_name: string, index: number): void {\r\n this.engine.graphics_manager.set_uniform(`${array_name}[${index}].position`, this.get_world_position());\r\n this.engine.graphics_manager.set_uniform(`${array_name}[${index}].range`, this.range);\r\n\r\n // Set shadow map uniforms \r\n this.engine.graphics_manager.set_uniform(`point_light_shadow_maps`, this.framebuffer.attachment_info_map[\"depth\"].texture);\r\n this.engine.graphics_manager.set_uniform(`u_point_light_space_matrix[${index * 6}]`, this.point_light_space_matrices);\r\n\r\n super.set_uniforms(array_name, index);\r\n }\r\n\r\n protected on_parented(): void {\r\n this.engine.graphics_manager.point_lights.push(this);\r\n this.engine.graphics_manager.resize_point_shadow_map();\r\n }\r\n\r\n protected on_removed(node:this, engine:Engine, parent:Node): void {\r\n super.on_removed(node, engine, parent)\r\n let light_index = this.engine.graphics_manager.point_lights.indexOf(this);\r\n if (light_index > -1) {\r\n this.engine.graphics_manager.point_lights.splice(light_index, 1);\r\n }\r\n this.engine.graphics_manager.resize_point_shadow_map();\r\n }\r\n}","import { Mat3, Mat4, Quat, Vec3, Vec4 } from \"@vicimpa/glm\";\r\nimport Engine from \"../../engine.ts\";\r\nimport { AttachmentType, Framebuffer } from \"../../graphics/framebuffer.ts\";\r\nimport { ShaderProgram } from \"../../graphics/shader_program.ts\";\r\nimport { Node } from \"../../node.ts\";\r\nimport { Light } from \"./light.ts\";\r\n\r\nexport class DirectionalLight extends Light {\r\n\r\n shader_program:ShaderProgram;\r\n shadow_index:number;\r\n framebuffer:Framebuffer;\r\n\r\n directional_light_space_matrix:Mat4 = new Mat4();\r\n\r\n constructor(\r\n engine:Engine,\r\n name:string,\r\n color:Vec3,\r\n ambient:number,\r\n diffuse:number,\r\n specular:number,\r\n energy:number,\r\n shader_program:ShaderProgram|null = null,\r\n ) {\r\n super(engine, name, color, ambient, diffuse, specular, energy);\r\n this.ambient = ambient;\r\n this.diffuse = diffuse;\r\n this.specular = specular;\r\n this.shadow_index = this.engine.graphics_manager.directional_lights.length;\r\n this.framebuffer = this.engine.graphics_manager.directional_shadow_depth_buffer;\r\n this.shader_program = shader_program ? shader_program : this.engine.graphics_manager.create_default_directional_shadow_shader_program();\r\n }\r\n\r\n draw_shadow_map(view_matrix: Mat4, projection_matrix_3d: Mat4, projection_matrix_2d: Mat4, time: number, delta_time: number): void {\r\n if (this.engine.main_scene.main_camera_3d) { \r\n \r\n this.engine.main_scene.rendering_depth_map = true\r\n \r\n this.shader_program.use();\r\n\r\n this.framebuffer.use();\r\n\r\n \r\n this.framebuffer.set_attachment_texture_index(\"depth\", this.shadow_index);\r\n \r\n this.framebuffer.clear();\r\n\r\n const corners = this.get_frustum_corners_world_space(\r\n this.engine.main_scene.main_camera_3d.get_projection_matrix(this.engine.canvas),\r\n this.engine.main_scene.main_camera_3d.get_view_matrix()\r\n );\r\n\r\n const light_dir = new Vec4(1, 0, 0, 1).applyQuat(this.rotation).xyz;\r\n\r\n this.directional_light_space_matrix = this.get_light_space_matrix(\r\n light_dir,\r\n corners\r\n );\r\n\r\n this.engine.graphics_manager.set_uniform(\"u_light_space_matrix\", this.directional_light_space_matrix);\r\n\r\n this.engine.main_scene.render(\r\n view_matrix,\r\n projection_matrix_3d,\r\n projection_matrix_2d,\r\n time, delta_time\r\n );\r\n\r\n\r\n this.engine.graphics_manager.unuse_framebuffer();\r\n\r\n this.engine.graphics_manager.clear_shader();\r\n this.engine.main_scene.rendering_depth_map = false;\r\n } else {\r\n throw Error(`The main scene named \"${this.engine.main_scene.name}\" does not have a main_camera_3d which is required to render a shadow map.`)\r\n }\r\n }\r\n\r\n set_uniforms(array_name: string, index: number): void {\r\n if (this.engine.main_scene.main_camera_3d) {\r\n const world_matrix = this.get_world_matrix();\r\n const world_mat3 = new Mat3().fromMat4(world_matrix); \r\n const world_rotation = new Quat().fromMat3(world_mat3).normalize();\r\n const world_rotation_matrix = new Mat4().fromQuat(world_rotation);\r\n\r\n this.engine.graphics_manager.set_uniform(`${array_name}[${index}].rotation`, world_rotation_matrix);\r\n this.engine.graphics_manager.set_uniform(`u_directional_light_space_matrix[${index}]`, this.directional_light_space_matrix);\r\n super.set_uniforms(array_name, index);\r\n } else {\r\n throw Error(`The main scene named \"${this.engine.main_scene.name}\" does not have a main_camera_3d which is required to render a shadow map.`)\r\n }\r\n }\r\n\r\n protected on_parented(): void {\r\n this.engine.graphics_manager.directional_lights.push(this);\r\n this.engine.graphics_manager.resize_directional_shadow_map();\r\n }\r\n\r\n protected on_removed(node:this, engine:Engine, parent:Node): void {\r\n let light_index = this.engine.graphics_manager.directional_lights.indexOf(this);\r\n if (light_index > -1) {\r\n this.engine.graphics_manager.directional_lights.splice(light_index, 1);\r\n }\r\n this.engine.graphics_manager.resize_directional_shadow_map();\r\n }\r\n\r\n get_frustum_corners_world_space(projection_matrix:Mat4, view_matrix:Mat4):Vec4[] {\r\n const inv:Mat4 = projection_matrix.clone().mul(view_matrix).invert();\r\n var frustum_corners:Vec4[] = [];\r\n for (var x = 0; x < 2; ++x) {\r\n for (var y = 0; y < 2; ++y) {\r\n for (var z = 0; z < 2; ++z) {\r\n const pt = new Vec4(\r\n 2.0 * x - 1.0, \r\n 2.0 * y - 1.0, \r\n 2.0 * z - 1.0, \r\n 1.0\r\n ).applyMat4(inv);\r\n frustum_corners.push(pt.div(pt.w)); // Perspective divide\r\n }\r\n }\r\n }\r\n return frustum_corners;\r\n }\r\n\r\n get_light_space_matrix(light_dir: Vec3, corners:Vec4[]):Mat4 {\r\n const center = new Vec3(0, 0, 0);\r\n for (const v of corners) center.add(v.xyz);\r\n center.div(corners.length);\r\n\r\n let radius = 0;\r\n for (const v of corners) {\r\n radius = Math.max(radius, v.xyz.clone().sub(center).length());\r\n }\r\n\r\n if (this.engine.main_scene.main_camera_3d)\r\n radius /= this.engine.main_scene.main_camera_3d.far_plane \r\n\r\n const world_up = new Vec3(0, 1, 0);\r\n const normalized_dir = light_dir.clone().normalize();\r\n \r\n let up = world_up;\r\n if (Math.abs(normalized_dir.dot(world_up)) > 0.99) {\r\n up = new Vec3(0, 0, 1);\r\n }\r\n\r\n const light_view = new Mat4().lookAt(\r\n center.clone().sub(normalized_dir.clone().mul(radius)),\r\n center,\r\n up\r\n );\r\n\r\n var min_x = Number.MAX_VALUE;\r\n var max_x = Number.MIN_VALUE;\r\n var min_y = Number.MAX_VALUE;\r\n var max_y = Number.MIN_VALUE;\r\n var min_z = Number.MAX_VALUE;\r\n var max_z = Number.MIN_VALUE;\r\n\r\n for (const v of corners) {\r\n const trf = v.clone().applyMat4(light_view);\r\n min_x = Math.min(min_x, trf.x);\r\n max_x = Math.max(max_x, trf.x);\r\n min_y = Math.min(min_y, trf.y);\r\n max_y = Math.max(max_y, trf.y);\r\n min_z = Math.min(min_z, trf.z);\r\n max_z = Math.max(max_z, trf.z);\r\n }\r\n\r\n const z_margin = 10.0; \r\n min_z -= z_margin;\r\n max_z += z_margin;\r\n\r\n return new Mat4().orthoZO(min_x, max_x, min_y, max_y, max_z, min_z).mul(light_view);\r\n }\r\n}","import { Mat3, Mat4, Quat, Vec3, Vec4 } from \"@vicimpa/glm\";\r\nimport Engine from \"../../engine.ts\";\r\nimport { Light } from \"./light.ts\";\r\nimport { Node } from \"../../node.ts\";\r\n\r\nexport class SpotLight extends Light {\r\n range:number;\r\n cookie_radius:number;\r\n \r\n constructor(\r\n engine:Engine,\r\n name:string,\r\n color:Vec3,\r\n ambient:number,\r\n diffuse:number,\r\n specular:number,\r\n energy:number,\r\n range:number,\r\n cookie_radius:number,\r\n ) {\r\n super(engine, name, color, ambient, diffuse, specular, energy);\r\n this.ambient = ambient;\r\n this.diffuse = diffuse;\r\n this.specular = specular;\r\n this.range = range;\r\n this.cookie_radius = cookie_radius;\r\n }\r\n\r\n set_uniforms(array_name: string, index: number): void {\r\n const world_matrix = this.get_world_matrix();\r\n \r\n const transformed_position = new Vec4(this.position.x, this.position.y, this.position.z, 1.0)\r\n .applyMat4(world_matrix);\r\n\r\n const world_mat3 = new Mat3().fromMat4(world_matrix); \r\n\r\n const world_rotation = new Quat().fromMat3(world_mat3).normalize();\r\n\r\n const world_rotation_matrix = new Mat4().fromQuat(world_rotation);\r\n \r\n this.engine.graphics_manager.set_uniform(`${array_name}[${index}].position`, new Vec3(world_matrix[12], world_matrix[13], world_matrix[14]));\r\n this.engine.graphics_manager.set_uniform(`${array_name}[${index}].rotation`, world_rotation_matrix);\r\n this.engine.graphics_manager.set_uniform(`${array_name}[${index}].range`, this.range);\r\n this.engine.graphics_manager.set_uniform(`${array_name}[${index}].cookie_radius`, this.cookie_radius);\r\n super.set_uniforms(array_name, index);\r\n }\r\n\r\n protected on_parented(): void {\r\n this.engine.graphics_manager.spot_lights.push(this);\r\n }\r\n\r\n protected on_removed(node:this, engine:Engine, parent:Node): void {\r\n let light_index = this.engine.graphics_manager.spot_lights.indexOf(this);\r\n if (light_index > -1) {\r\n this.engine.graphics_manager.spot_lights.splice(light_index, 1);\r\n }\r\n }\r\n}","import { Mat4 } from \"@vicimpa/glm\";\r\nimport Engine from \"../engine.ts\";\r\nimport { Node2D } from \"../node.ts\";\r\nimport { ShaderProgram } from \"../graphics/shader_program.ts\";\r\nimport { get_sprite_vao, VAOInfo } from \"../graphics/assets/vaos.ts\";\r\nimport { Texture } from \"../graphics/assets/texture.ts\";\r\n\r\nexport class Sprite2D extends Node2D {\r\n shader_program:ShaderProgram;\r\n vao:VAOInfo;\r\n sprite_texture:Texture;\r\n\r\n constructor(\r\n engine:Engine,\r\n name:string,\r\n sprite_texture:Texture,\r\n shader_program:ShaderProgram|null = null\r\n ) {\r\n super(engine, name);\r\n this.vao = get_sprite_vao(this.engine.graphics_manager);\r\n this.shader_program = shader_program ? shader_program : this.engine.graphics_manager.default_2d_shader_program;\r\n this.sprite_texture = sprite_texture;\r\n }\r\n\r\n render_class(view_matrix: Mat4, projection_matrix_3d: Mat4, projection_matrix_2d: Mat4, time:number, delta_time:number): void {\r\n if (this.engine.main_scene.rendering_depth_map)\r\n return;\r\n if (!this.shader_program)\r\n throw Error(`Shader program not set for skybox.`);\r\n\r\n const gm = this.engine.graphics_manager;\r\n\r\n gm.gl.enable(gm.gl.BLEND);\r\n gm.gl.blendFunc(gm.gl.SRC_ALPHA, gm.gl.ONE_MINUS_SRC_ALPHA);\r\n\r\n this.shader_program.use();\r\n\r\n this.on_render(this, this.engine, time, delta_time);\r\n\r\n // bind the texture\r\n gm.set_uniform(\"sprite_texture\", this.sprite_texture);\r\n\r\n // add the MVP matrix\r\n gm.set_uniform(\"u_model\", this.get_world_matrix());\r\n\r\n\r\n gm.set_uniform(\"u_projection\", projection_matrix_2d);\r\n\r\n // render vao\r\n gm.gl.bindVertexArray(this.vao.vao);\r\n gm.gl.drawElements(gm.gl.TRIANGLES, this.vao.index_count, gm.gl.UNSIGNED_SHORT, 0);\r\n gm.gl.bindVertexArray(null); \r\n\r\n gm.clear_shader()\r\n gm.gl.disable(gm.gl.BLEND);\r\n }\r\n}","import Engine from \"../engine.ts\";\r\n\r\nexport enum MouseButton {\r\n Left = 0,\r\n Middle = 1,\r\n Right = 2,\r\n}\r\n\r\nexport class InputManager {\r\n engine:Engine;\r\n \r\n private keysDown = new Set<string>();\r\n private keysPressed = new Set<string>();\r\n private keysReleased = new Set<string>();\r\n \r\n private mouseDown = new Set<number>();\r\n private mousePressed = new Set<number>();\r\n private mouseReleased = new Set<number>();\r\n \r\n public mouseX = 0;\r\n public mouseY = 0;\r\n public mouse_delta_x = 0;\r\n public mouse_delta_y = 0;\r\n \r\n public wheelDelta = 0;\r\n \r\n constructor(engine:Engine, private target: HTMLElement = window.document.body) {\r\n this.engine = engine;\r\n this.attach();\r\n }\r\n \r\n destroy() {\r\n this.detach();\r\n }\r\n \r\n update() {\r\n this.keysPressed.clear();\r\n this.keysReleased.clear();\r\n this.mousePressed.clear();\r\n this.mouseReleased.clear();\r\n \r\n this.mouse_delta_x = 0;\r\n this.mouse_delta_y = 0;\r\n this.wheelDelta = 0;\r\n }\r\n \r\n is_key_down(code: string): boolean {\r\n return this.keysDown.has(code);\r\n }\r\n \r\n was_key_pressed(code: string): boolean { \r\n return this.keysPressed.has(code);\r\n }\r\n \r\n was_key_released(code: string): boolean {\r\n return this.keysReleased.has(code);\r\n }\r\n \r\n is_mouse_down(button: MouseButton): boolean {\r\n return this.mouseDown.has(button);\r\n }\r\n \r\n was_mouse_pressed(button: MouseButton): boolean {\r\n return this.mousePressed.has(button);\r\n }\r\n \r\n was_mouse_released(button: MouseButton): boolean {\r\n return this.mouseReleased.has(button);\r\n }\r\n\r\n lock_mouse() {\r\n this.engine.canvas.requestPointerLock();\r\n }\r\n\r\n unlock_mouse() {\r\n document.exitPointerLock();\r\n }\r\n \r\n private attach() {\r\n window.addEventListener(\"keydown\", this.onKeyDown);\r\n window.addEventListener(\"keyup\", this.onKeyUp);\r\n \r\n this.target.addEventListener(\"mousedown\", this.onMouseDown);\r\n window.addEventListener(\"mouseup\", this.onMouseUp);\r\n \r\n this.target.addEventListener(\"mousemove\", this.onMouseMove);\r\n this.target.addEventListener(\"wheel\", this.onWheel, { passive: true });\r\n \r\n // Prevent context menu\r\n this.target.addEventListener(\"contextmenu\", e => e.preventDefault());\r\n }\r\n \r\n private detach() {\r\n window.removeEventListener(\"keydown\", this.onKeyDown);\r\n window.removeEventListener(\"keyup\", this.onKeyUp);\r\n \r\n this.target.removeEventListener(\"mousedown\", this.onMouseDown);\r\n window.removeEventListener(\"mouseup\", this.onMouseUp);\r\n \r\n this.target.removeEventListener(\"mousemove\", this.onMouseMove);\r\n this.target.removeEventListener(\"wheel\", this.onWheel);\r\n }\r\n \r\n private onKeyDown = (e: KeyboardEvent) => {\r\n if (!this.keysDown.has(e.code)) {\r\n this.keysDown.add(e.code);\r\n this.keysPressed.add(e.code);\r\n }\r\n };\r\n \r\n private onKeyUp = (e: KeyboardEvent) => {\r\n if (this.keysDown.delete(e.code)) {\r\n this.keysReleased.add(e.code);\r\n }\r\n };\r\n \r\n private onMouseDown = (e: MouseEvent) => {\r\n if (!this.mouseDown.has(e.button)) {\r\n this.mouseDown.add(e.button);\r\n this.mousePressed.add(e.button);\r\n \r\n }\r\n };\r\n \r\n private onMouseUp = (e: MouseEvent) => {\r\n if (this.mouseDown.delete(e.button)) {\r\n this.mouseReleased.add(e.button);\r\n }\r\n };\r\n \r\n private onMouseMove = (e: MouseEvent) => {\r\n if (document.pointerLockElement === this.engine.canvas) {\r\n // Pointer lock mode → use raw movement\r\n this.mouse_delta_x = e.movementX;\r\n this.mouse_delta_y = e.movementY;\r\n } else {\r\n // Normal mouse mode\r\n const rect = this.target.getBoundingClientRect();\r\n \r\n const x = e.clientX - rect.left;\r\n const y = e.clientY - rect.top;\r\n \r\n this.mouse_delta_x += x - this.mouseX;\r\n this.mouse_delta_y += y - this.mouseY;\r\n \r\n this.mouseX = x;\r\n this.mouseY = y;\r\n }\r\n };\r\n \r\n private onWheel = (e: WheelEvent) => {\r\n this.wheelDelta += e.deltaY;\r\n };\r\n}\r\n","export default class Utility {\r\n static async load_text_file(url: string): Promise<string> {\r\n const response = await fetch(url);\r\n if (!response.ok) throw new Error(`Failed to load ${url}`);\r\n return await response.text();\r\n }\r\n\r\n static async load_image(image_asset_path:string, options?: ImageBitmapOptions):Promise<ImageBitmap> {\r\n const res = await fetch(image_asset_path);\r\n if (res.ok) {\r\n const blob = await res.blob();\r\n return await createImageBitmap(blob, options);\r\n } else {\r\n throw new Error(`The .obj image asset file at \"${image_asset_path}\" does not exist.`);\r\n }\r\n }\r\n}","import { LuaEngine, LuaFactory } from \"wasmoon\";\r\nimport Engine from \"./engine.ts\";\r\nimport { Node, Node2D, Node3D } from \"./node.ts\";\r\n\r\nimport { Vec2, Vec3, Vec4, Mat2, Mat3, Mat4, Quat } from \"@vicimpa/glm\"\r\nimport { Object3D } from \"./node/object3d.ts\";\r\nimport { Sprite2D } from \"./node/sprite2d.ts\";\r\n\r\n// This class handles all of the lua hooks into different nodes.\r\n// It uses a single lua engine since webgl2 cant be multithreaded.\r\n// maybe in the future we will use webgpu and use multiple engines.\r\nexport class HookManager {\r\n engine:Engine;\r\n lua_factory:LuaFactory;\r\n lua_engine_promise:Promise<LuaEngine>;\r\n lua:LuaEngine|null = null;\r\n\r\n on_ready_callbacks:{[key:string]:(node:Node, engine:Engine) => void} = {};\r\n on_removed_callbacks:{[key:string]:(node:Node, engine:Engine, parent:Node) => void} = {};\r\n on_update_callbacks:{[key:string]:(node:Node, engine:Engine, time:number, delta_time:number) => void} = {};\r\n on_render_callbacks:{[key:string]:(node:Node, engine:Engine, time:number, delta_time:number) => void} = {};\r\n \r\n constructor(engine:Engine) {\r\n this.engine = engine;\r\n this.lua_factory = new LuaFactory();\r\n this.lua_engine_promise = this.lua_factory.createEngine();\r\n this.lua_engine_promise\r\n .then(async (engine) => {\r\n this.lua = engine;\r\n await this.set_globals();\r\n })\r\n .catch((reason) => {throw new Error(reason);});\r\n }\r\n \r\n call_on_ready_callback(url:string, node:Node, engine:Engine) {\r\n this.on_ready_callbacks[url](node, engine);\r\n }\r\n \r\n call_on_removed_callback(url:string, node:Node, engine:Engine, parent:Node) {\r\n this.on_removed_callbacks[url](node, engine, parent);\r\n }\r\n \r\n call_on_update_callback(url:string, node:Node, engine:Engine, time:number, delta_time:number) {\r\n this.on_update_callbacks[url](node, engine, time, delta_time);\r\n }\r\n\r\n call_on_render_callback(url:string, node:Node, engine:Engine, time:number, delta_time:number) {\r\n this.on_render_callbacks[url](node, engine, time, delta_time);\r\n }\r\n \r\n private async do_lua_file_url(url: string) {\r\n await this.lua_engine_promise;\r\n \r\n if (!this.lua)\r\n return;\r\n \r\n const res = await fetch(url);\r\n if (!res.ok) throw new Error(\"Failed to load Lua file\");\r\n const code = await res.text();\r\n \r\n return this.lua.doString(code);\r\n }\r\n \r\n async add_on_ready_callback(url:string) {\r\n await this.lua_engine_promise;\r\n \r\n if (!this.lua)\r\n return;\r\n \r\n await this.do_lua_file_url(url);\r\n \r\n const callback = this.lua.global.get(\"on_ready\");\r\n \r\n this.on_ready_callbacks[url] = callback;\r\n }\r\n \r\n async add_on_removed_callback(url:string) {\r\n await this.lua_engine_promise;\r\n \r\n if (!this.lua)\r\n return;\r\n \r\n await this.do_lua_file_url(url);\r\n \r\n const callback = this.lua.global.get(\"on_removed\");\r\n \r\n this.on_removed_callbacks[url] = callback;\r\n }\r\n \r\n async add_on_update_callback(url:string) {\r\n await this.lua_engine_promise;\r\n \r\n if (!this.lua)\r\n return;\r\n \r\n await this.do_lua_file_url(url);\r\n \r\n const callback = this.lua.global.get(\"on_update\");\r\n \r\n this.on_update_callbacks[url] = callback;\r\n }\r\n\r\n async add_on_render_callback(url:string) {\r\n await this.lua_engine_promise;\r\n \r\n if (!this.lua)\r\n return;\r\n \r\n await this.do_lua_file_url(url);\r\n \r\n const callback = this.lua.global.get(\"on_render\");\r\n \r\n this.on_render_callbacks[url] = callback;\r\n }\r\n\r\n async set_globals() {\r\n await this.lua_engine_promise;\r\n \r\n if (!this.lua)\r\n return;\r\n \r\n this.lua.global.set(\"Vec2\", create_lua_constructor(Vec2));\r\n this.lua.global.set(\"Vec3\", create_lua_constructor(Vec3));\r\n this.lua.global.set(\"Vec4\", create_lua_constructor(Vec4));\r\n this.lua.global.set(\"Mat2\", create_lua_constructor(Mat2));\r\n this.lua.global.set(\"Mat3\", create_lua_constructor(Mat3));\r\n this.lua.global.set(\"Mat4\", create_lua_constructor(Mat4));\r\n this.lua.global.set(\"Quat\", create_lua_constructor(Quat));\r\n this.lua.global.set(\"Node\", create_lua_constructor(Node));\r\n this.lua.global.set(\"Node3D\", create_lua_constructor(Node3D));\r\n this.lua.global.set(\"Node2D\", create_lua_constructor(Node2D));\r\n this.lua.global.set(\"Object3D\", create_lua_constructor(Object3D));\r\n this.lua.global.set(\"Sprite2D\", create_lua_constructor(Sprite2D));\r\n }\r\n};\r\n\r\nfunction create_lua_constructor<T extends new (...args: any[]) => any>(cls: T) {\r\n return (...args: ConstructorParameters<T>) => new cls(...args);\r\n}","import { Mat4 } from \"@vicimpa/glm\";\r\nimport Engine from \"./engine\";\r\nimport { Node } from \"./node\";\r\nimport { Camera3D } from \"./node/camera3d\";\r\n\r\n\r\nexport class Scene {\r\n name:string;\r\n engine:Engine;\r\n\r\n \r\n on_scene_start_callback:(engine:Engine, scene:Scene) => Promise<void> = async(engine, scene) => {};\r\n on_scene_update_callback:(engine:Engine, scene:Scene, time:number, delta_time:number) => void = (engine, time, delta_time) => {};\r\n \r\n root_node:Node|null = null;\r\n main_camera_3d:Camera3D|null = null;\r\n\r\n rendering_depth_map:boolean = false;\r\n\r\n constructor(engine:Engine, name:string, root_node:Node|null = null, main_camera:Camera3D|null = null) {\r\n this.engine = engine;\r\n this.name = name;\r\n this.root_node = root_node;\r\n this.main_camera_3d = main_camera;\r\n }\r\n \r\n get_node(name:string):Node|null {\r\n // traverse scene tree until we find the node.\r\n if (this.root_node)\r\n return this.get_node_search(name, this.root_node)\r\n else\r\n return null;\r\n }\r\n\r\n private get_node_search(name:string, node:Node):Node|null {\r\n if (!node)\r\n return null;\r\n if (node.name == name)\r\n return node;\r\n\r\n for (const child_node of node.children) {\r\n const search_result = this.get_node_search(name, child_node);\r\n if (search_result)\r\n return search_result;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n update(time: number, delta_time: number) {\r\n if (this.root_node) {\r\n this.root_node.update(time, delta_time);\r\n } else {\r\n console.warn(`A root node was not set for scene \"${this.name}\".`);\r\n }\r\n }\r\n\r\n render(view_matrix: Mat4, projection_matrix_3d: Mat4, projection_matrix_2d: Mat4, time: number, delta_time: number) {\r\n if (this.root_node) {\r\n this.root_node.render(view_matrix, projection_matrix_3d, projection_matrix_2d, time, delta_time);\r\n } else {\r\n console.warn(`A root node was not set for scene \"${this.name}\".`);\r\n }\r\n }\r\n};","import { GraphicsManager } from \"./graphics/graphics_manager.ts\";\r\nimport { Camera3D } from \"./node/camera3d.ts\";\r\nimport { Node } from \"./node.ts\";\r\nimport { InputManager } from \"./input/input_manager.ts\";\r\nimport Utility from \"./utility.ts\";\r\nimport { HookManager } from \"./hook_manager.ts\";\r\nimport { Scene } from \"./scene.ts\";\r\n\r\n\r\nexport default class Engine {\r\n canvas:HTMLCanvasElement;\r\n graphics_manager:GraphicsManager;\r\n input_manager:InputManager;\r\n hook_manager:HookManager;\r\n\r\n main_scene:Scene;\r\n \r\n // EVENT CALLBACKS\r\n on_global_start_callback:(engine:Engine) => Promise<void>;\r\n on_global_update_callback:(engine:Engine, time:number, delta_time:number) => void;\r\n\r\n UTIL = Utility;\r\n\r\n constructor(\r\n canvas:HTMLCanvasElement,\r\n main_scene:Scene | null = null,\r\n on_global_start_callback:(engine:Engine) => Promise<void> = async(engine) => {},\r\n on_global_update_callback:(engine:Engine, time:number, delta_time:number) => void = (engine, time, delta_time) => {},\r\n ) {\r\n this.canvas = canvas;\r\n this.input_manager = new InputManager(this);\r\n this.hook_manager = new HookManager(this);\r\n this.on_global_start_callback = on_global_start_callback;\r\n this.on_global_update_callback = on_global_update_callback;\r\n this.graphics_manager = new GraphicsManager(this, this.canvas);\r\n this.main_scene = main_scene ? main_scene : new Scene(this, \"main_scene\");\r\n }\r\n\r\n async start() {\r\n await this.on_global_start_callback(this);\r\n this.graphics_manager.render();\r\n }\r\n};"],"mappings":"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f,IAAO,wBAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAf,IAAO,wBAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAf,IAAO,4BAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAf,IAAO,4BAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAf,IAAO,wCAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAf,IAAO,wCAAQ;AAAA;AAAA;AAAA;AAAA;;;ACAf,IAAO,kCAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAf,IAAO,kCAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AVqCR,IAAM,kBAAN,MAAM,iBAAgB;AAAA,EA8BzB,YAAY,QAAe,QAA0B;AA1BrD,2BAA+C,CAAC;AAChD,0BAAoC;AACpC,wBAA0C,CAAC;AAC3C,uBAA+B;AAC/B,6BAAwD,CAAC;AACzD,wBAAsB;AAEtB,SAAQ,kBAAiC;AAQzC;AAAA,wBAA4B,CAAC;AAC7B,8BAAwC,CAAC;AACzC,uBAA0B,CAAC;AAO3B,6BAA2B,OAAO;AAG9B,SAAK,SAAS;AACd,SAAK,KAAK,OAAO,WAAW,UAAU;AAAA,MAClC,YAAY;AAAA,MACZ,WAAW;AAAA,IACf,CAAC;AACD,SAAK,SAAS;AAEd,SAAK,4BAA4B,KAAK,iCAAiC;AACvE,SAAK,4BAA4B,KAAK,iCAAiC;AACvE,SAAK,gCAAgC,KAAK,qCAAqC;AAE/E,SAAK,uCAAuC,IAAI;AAAA,MAC5C;AAAA,MACA;AAAA,MACA,KAAK,IAAI,GAAG,KAAK,mBAAmB,MAAM;AAAA,MAC1C,KAAK;AAAA,MACL,KAAK;AAAA;AAAA,MAEL;AAAA,QACI,CAAC,KAAK,GAAG,oBAAoB,GAAG,KAAK,GAAG;AAAA,QACxC,CAAC,KAAK,GAAG,oBAAoB,GAAG,KAAK,GAAG;AAAA,QACxC,CAAC,KAAK,GAAG,kBAAkB,GAAG,KAAK,GAAG;AAAA,QACtC,CAAC,KAAK,GAAG,kBAAkB,GAAG,KAAK,GAAG;AAAA,QACtC,CAAC,KAAK,GAAG,cAAc,GAAG,KAAK,GAAG;AAAA,QAClC,CAAC,KAAK,GAAG,cAAc,GAAG,KAAK,GAAG;AAAA,QAClC,CAAC,KAAK,GAAG,kBAAkB,GAAG;AAAA,QAC9B,CAAC,KAAK,GAAG,iBAAiB,GAAG;AAAA,MACjC;AAAA,IACJ;AAEA,SAAK,iCAAiC,IAAI;AAAA,MACtC;AAAA,MACA;AAAA,MACA,KAAK,IAAI,GAAG,KAAK,aAAa,MAAM,IAAI;AAAA,MACxC,KAAK,oBAAkB;AAAA,MACvB,KAAK,oBAAkB;AAAA;AAAA,MAEvB;AAAA,QACI,CAAC,KAAK,GAAG,oBAAoB,GAAG,KAAK,GAAG;AAAA,QACxC,CAAC,KAAK,GAAG,oBAAoB,GAAG,KAAK,GAAG;AAAA,QACxC,CAAC,KAAK,GAAG,kBAAkB,GAAG,KAAK,GAAG;AAAA,QACtC,CAAC,KAAK,GAAG,kBAAkB,GAAG,KAAK,GAAG;AAAA,QACtC,CAAC,KAAK,GAAG,cAAc,GAAG,KAAK,GAAG;AAAA,QAClC,CAAC,KAAK,GAAG,cAAc,GAAG,KAAK,GAAG;AAAA,QAClC,CAAC,KAAK,GAAG,kBAAkB,GAAG;AAAA,QAC9B,CAAC,KAAK,GAAG,iBAAiB,GAAG;AAAA,MACjC;AAAA,IACJ;AAEA,SAAK,4BAA4B,KAAK;AAAA,MAClC;AAAA,MACA;AAAA,QACI;AAAA,UACI,MAAK;AAAA,UACL;AAAA,UACA,SAAQ,KAAK;AAAA,UACb,qBAAoB,KAAK,aAAa,SAAS;AAAA,QACnD;AAAA,MACJ;AAAA;AAAA,IAKJ;AAEA,SAAK,kCAAkC,KAAK;AAAA,MACxC;AAAA,MACA;AAAA,QACI;AAAA,UACI,MAAK;AAAA,UACL;AAAA,UACA,SAAQ,KAAK;AAAA,UACb,qBAAoB,KAAK,mBAAmB;AAAA,QAChD;AAAA,MACJ;AAAA;AAAA,IAIJ;AAAA,EACJ;AAAA,EAEA,gBAAwB;AACpB,WAAO,KAAK,OAAO;AAAA,EACvB;AAAA,EAEA,qBAAqB,OAAc,gBAA0B,MAAa,cAA2B,aAAqB,OAAO,UAAkB,OAAO;AACtJ,QAAI,CAAC,KAAK,gBAAgB;AACtB,cAAQ,KAAK,gBAAgB,KAAK,8DAA8D;AAChG;AAAA,IACJ;AACA,QAAI,eAAe,KAAK,GAAG,aAAa;AACxC,SAAK,GAAG,WAAW,KAAK,GAAG,cAAc,YAAY;AACrD,SAAK,GAAG,WAAW,KAAK,GAAG,cAAc,cAAc,UAAU,KAAK,GAAG,eAAe,KAAK,GAAG,WAAW;AAC3G,UAAM,cAAc,KAAK,GAAG,kBAAkB,KAAK,gBAAiB,KAAK;AACzE,SAAK,GAAG,wBAAwB,WAAW;AAC3C,SAAK,GAAG,oBAAoB,aAAa,MAAM,gBAAgB,YAAY,GAAG,CAAC;AAE/E,SAAK,kBAAkB,KAAK,IAAI;AAAA,MAC5B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,eAAc;AAAA,IAClB;AACA,SAAK,eAAe,aAAa,SAAS,KAAK,kBAAkB,KAAK,EAAE;AAAA,EAC5E;AAAA,EAEA,wBAAwB,OAAc;AAClC,SAAK,GAAG,aAAa,KAAK,kBAAkB,KAAK,EAAE,aAAa;AAAA,EACpE;AAAA,EAEA,0BAA0B,OAAc,MAAmB,SAAgB,GAAG;AAC1E,SAAK,GAAG,WAAW,KAAK,GAAG,cAAc,KAAK,kBAAkB,KAAK,EAAE,aAAa;AACpF,SAAK,GAAG,cAAc,KAAK,GAAG,cAAc,QAAQ,IAAI;AACxD,SAAK,eAAe,KAAK,SAAS,KAAK,kBAAkB,KAAK,EAAE;AAAA,EACpE;AAAA,EAEA,sBAAsB,MAAa;AAC/B,UAAM,OAAO,IAAI,cAAc,MAAM,MAAM,KAAK,EAAE;AAClD,SAAK,gBAAgB,IAAI,IAAI;AAC7B,WAAO;AAAA,EACX;AAAA,EAEA,WAAW,MAAa;AACpB,QAAI,KAAK;AACL,WAAK,aAAa;AACtB,SAAK,iBAAiB,KAAK,gBAAgB,IAAI;AAC/C,SAAK,GAAG,WAAW,KAAK,eAAe,oBAAoB;AAAA,EAG/D;AAAA,EAEA,eAAe;AACX,SAAK,GAAG,WAAW,IAAI;AACvB,SAAK,iBAAiB;AAAA,EAC1B;AAAA,EAEA,mBAAmB,MAAa,iBAAkC,YAAyB;AACvF,UAAM,cAAc,IAAI,YAAY,MAAM,MAAM,KAAK,IAAI,iBAAiB,UAAU;AACpF,SAAK,aAAa,IAAI,IAAI;AAC1B,WAAO;AAAA,EACX;AAAA,EAEA,gBAAgB,MAAa;AACzB,UAAM,cAAc,KAAK,aAAa,IAAI;AAC1C,QAAI,KAAK,gBAAgB;AACrB;AAEJ,SAAK,cAAc;AACnB,UAAM,aAAa,YAAY;AAC/B,UAAM,KAAK,KAAK;AAEhB,OAAG,gBAAgB,GAAG,aAAa,YAAY,kBAAkB;AACjE,OAAG,SAAS,GAAG,GAAG,YAAY,OAAO,YAAY,MAAM;AACvD,QAAI,SAAS,8BAA+B,GAAG;AAC3C,SAAG,OAAO,GAAG,UAAU;AAAA,IAC3B;AAEA,QAAI,SAAS,8BAA+B,GAAG;AAC3C,SAAG,SAAS,GAAG,KAAK;AAAA,IACxB,WAAW,SAAS,6BAA8B,GAAG;AACjD,SAAG,SAAS,GAAG,KAAK;AAAA,IACxB,WAAW,SAAS,uCAAwC,GAAG;AAC3D,SAAG,SAAS,GAAG,cAAc;AAAA,IACjC;AAEA,QAAI,SAAS,oCAAoC,GAAG;AAChD,SAAG,UAAU,GAAG,IAAI;AAAA,IACxB,WAAW,SAAS,oCAAqC,GAAG;AACxD,SAAG,UAAU,GAAG,KAAK;AAAA,IACzB,WAAW,SAAS,qCAAqC,GAAG;AACxD,SAAG,UAAU,GAAG,KAAK;AAAA,IACzB,WAAW,SAAS,0CAA0C,GAAG;AAC7D,SAAG,UAAU,GAAG,MAAM;AAAA,IAC1B,WAAW,SAAS,wCAAuC,GAAG;AAC1D,SAAG,UAAU,GAAG,OAAO;AAAA,IAC3B,WAAW,SAAS,0CAAyC,GAAG;AAC5D,SAAG,UAAU,GAAG,QAAQ;AAAA,IAC5B,WAAW,SAAS,8CAA6C,GAAG;AAChE,SAAG,UAAU,GAAG,MAAM;AAAA,IAC1B,WAAW,SAAS,wCAAsC,GAAG;AACzD,SAAG,UAAU,GAAG,MAAM;AAAA,IAC1B;AAEA,QAAI,YAAY,oBAAoB,SAAS,wCAAsC,GAAG;AAClF,SAAG,WAAW,CAAG;AACjB,SAAG,UAAU,IAAI;AAAA,IACrB;AAAA,EACJ;AAAA,EAEA,oBAAoB;AAChB,QAAI,CAAC,KAAK;AACN;AAEJ,UAAM,cAAc,KAAK;AACzB,UAAM,aAAa,YAAY;AAC/B,UAAM,KAAK,KAAK;AAEhB,QAAI,iCAAkC;AAClC,SAAG,QAAQ,GAAG,UAAU;AAAA,IAC5B;AACA,QAAI,SAAS,oCAAqC,KAC9C,SAAS,qCAAqC,KAC9C,SAAS,0CAA0C,KACnD,SAAS,wCAAuC,KAChD,SAAS,0CAAyC,KAClD,SAAS,8CAA6C,KACtD,SAAS,wCAAsC,GAAG;AAClD,SAAG,UAAU,GAAG,IAAI;AAAA,IACxB;AACA,QACI,SAAS,8BAA+B,KACxC,SAAS,6BAA8B,KACvC,SAAS,uCAAwC,GACnD;AACE,SAAG,SAAS,GAAG,IAAI;AAAA,IACvB;AACA,OAAG,gBAAgB,GAAG,aAAa,IAAI;AACvC,SAAK,cAAc;AACnB,OAAG,SAAS,GAAG,GAAG,KAAK,OAAO,OAAO,KAAK,OAAO,MAAM;AAAA,EAC3D;AAAA,EAEA,YAAY,OAAc,OAAW,YAAoB,OAAO,OAAe,OAAO;AAGlF,QAAI,KAAK,mBAAmB,MAAM;AAC9B,UAAI;AACA,gBAAQ,KAAK,oBAAoB,KAAK,qBAAqB,KAAK,wCAAwC;AAC5G;AAAA,IACJ;AAEA,UAAM,cAAc,wBAAwB,KAAK;AAGjD,UAAM,mBAAmB,wBAAwB,KAAK,EAAE,QAAQ,MAAM,EAAE;AAExE,QAAI,UAAU,KAAK,eAAe,SAAS,gBAAgB;AAC3D,QAAI,YAAY,QAAW;AACvB,UAAI;AACA,gBAAQ,KAAK,gBAAgB,KAAK,qDAAqD,KAAK,eAAe,IAAI,IAAI;AACvH;AAAA,IACJ;AAEA,QAAI,EAAE,SAAS,KAAK,eAAe,eAAe;AAC9C,YAAM,MAAM,KAAK,GAAG,mBAAmB,KAAK,eAAe,sBAAuB,KAAK;AACvF,UAAI,CAAC,KAAK;AACN,YAAI;AACA,kBAAQ,KAAK,YAAY,KAAK,mCAAmC,KAAK,eAAe,IAAI,IAAI;AAAA,MACrG;AACA,WAAK,eAAe,aAAa,KAAK,IAAI;AAAA,IAC9C;AAIA,QAAI,mBAAmB;AACvB,QAAI,iBAAiB,OAAO;AACxB,UAAI,QAAQ,UAAU;AAClB,2BAAmB;AAAA,MACvB,OAAO;AACH,cAAM,MAAM,YAAY,KAAK,wBAAwB,KAAK,eAAe,IAAI,8DAA8D;AAAA,MAC/I;AAAA,IACJ;AAKA,QAAI,kBAAkB;AAClB,cAAQ,iBAAgB,4BAA4B,KAAK;AAAA,IAC7D;AAEA,YAAQ,QAAQ,MAAM;AAAA,MAClB;AAAA,MACA;AACI,aAAK,GAAG,cAAc,KAAK,GAAG,WAAW,QAAQ,eAAgB,WAAW;AAC5E,aAAK,GAAG,YAAY,KAAK,GAAG,YAAa,MAAkB,aAAa;AACxE,aAAK,GAAG,UAAU,KAAK,eAAe,aAAa,KAAK,GAAG,QAAQ,eAAgB,WAAW;AAC9F;AAAA,MACJ;AAAA,MACA;AACI,aAAK,GAAG,cAAc,KAAK,GAAG,WAAW,QAAQ,eAAgB,WAAW;AAC5E,aAAK,GAAG,YAAY,KAAK,GAAG,kBAAmB,MAAkB,aAAa;AAC9E,aAAK,GAAG,UAAU,KAAK,eAAe,aAAa,KAAK,GAAG,QAAQ,eAAgB,WAAW;AAC9F;AAAA,MAEJ;AAAA,MACA;AACI,aAAK,GAAG,cAAc,KAAK,GAAG,WAAW,QAAQ,eAAgB,WAAW;AAC5E,aAAK,GAAG,YAAY,KAAK,GAAG,kBAAmB,MAAyB,aAAa;AACrF,aAAK,GAAG,UAAU,KAAK,eAAe,aAAa,KAAK,GAAG,QAAQ,eAAgB,WAAW;AAC9F;AAAA,MAEJ;AACI,YAAI;AACA,eAAK,GAAG,WAAW,KAAK,eAAe,aAAa,KAAK,GAAG,KAAK;AAAA;AAEjE,eAAK,GAAG,UAAU,KAAK,eAAe,aAAa,KAAK,GAAG,KAAK;AACpE;AAAA,MAEJ;AACI,YAAI;AACA,eAAK,GAAG,WAAW,KAAK,eAAe,aAAa,KAAK,GAAG,KAAK;AAAA;AAEjE,eAAK,GAAG,UAAU,KAAK,eAAe,aAAa,KAAK,GAAG,KAAK;AACpE;AAAA,MAEJ;AACI,YAAI;AACA,eAAK,GAAG,WAAW,KAAK,eAAe,aAAa,KAAK,GAAG,KAAK;AAAA;AAEjE,eAAK,GAAG,UAAU,KAAK,eAAe,aAAa,KAAK,GAAG,KAAK;AACpE;AAAA,MAEJ;AACI,aAAK,GAAG,WAAW,KAAK,eAAe,aAAa,KAAK,GAAG,KAAK;AACjE;AAAA,MAEJ;AACI,aAAK,GAAG,WAAW,KAAK,eAAe,aAAa,KAAK,GAAG,KAAK;AACjE;AAAA,MAEJ;AACI,aAAK,GAAG,WAAW,KAAK,eAAe,aAAa,KAAK,GAAG,KAAK;AACjE;AAAA,MAEJ;AACI,aAAK,GAAG,WAAW,KAAK,eAAe,aAAa,KAAK,GAAG,KAAK;AACjE;AAAA,MAEJ;AACI,aAAK,GAAG,iBAAiB,KAAK,eAAe,aAAa,KAAK,GAAG,WAAW,KAAK;AAClF;AAAA,MAEJ;AACI,aAAK,GAAG,iBAAiB,KAAK,eAAe,aAAa,KAAK,GAAG,WAAW,KAAK;AAClF;AAAA,MAEJ;AACI,aAAK,GAAG,iBAAiB,KAAK,eAAe,aAAa,KAAK,GAAG,WAAW,KAAK;AAClF;AAAA,IACR;AAAA,EACJ;AAAA,EAEA,OAAO,4BAA4B,aAAmE;AAClG,QAAI,cAAc,YAAY,CAAC;AAC/B,QAAI,OAAO,gBAAgB;AACvB,aAAO,IAAI,aAAa,WAAuB;AAEnD,UAAM,YAAY,YAAY,QAAQ,EAAE;AACxC,QAAI,OAAO,IAAI,aAAa,YAAY,SAAS,SAAS;AAC1D,QAAI,SAAS;AAEb,eAAW,KAAK,aAAa;AACzB,UAAI,OAAO,MAAM,UAAU;AACvB,cAAM,UAAU,EAAE,QAAQ;AAC1B,aAAK,IAAI,SAAS,MAAM;AACxB,kBAAU,QAAQ;AAAA,MACtB,OAAO;AACH,aAAK,MAAM,IAAI;AACf,kBAAU;AAAA,MACd;AAAA,IACJ;AAGA,WAAO;AAAA,EACX;AAAA,EAEA,gCAAgC;AAC5B,SAAK,qCAAqC,qBAAqB,KAAK,mBAAmB,MAAM;AAE7F,aAAS,IAAI,GAAG,IAAI,KAAK,mBAAmB,QAAQ,EAAE,GAAG;AACrD,YAAM,oBAAoB,KAAK,mBAAmB,CAAC;AACnD,wBAAkB,eAAe;AAAA,IACrC;AAAA,EAEJ;AAAA,EAEA,0BAA0B;AACtB,SAAK,+BAA+B,qBAAqB,KAAK,aAAa,SAAS,CAAC;AAErF,aAAS,IAAI,GAAG,IAAI,KAAK,aAAa,QAAQ,EAAE,GAAG;AAC/C,YAAM,cAAc,KAAK,aAAa,CAAC;AACvC,kBAAY,sBAAsB,IAAI;AAAA,IAC1C;AAAA,EAEJ;AAAA,EAEQ,gBAAgB;AACpB,UAAM,MAAM,OAAO,oBAAoB;AAEvC,UAAM,eAAgB,KAAK,MAAM,KAAK,OAAO,cAAe,GAAG;AAC/D,UAAM,gBAAgB,KAAK,MAAM,KAAK,OAAO,eAAe,GAAG;AAE/D,QAAI,KAAK,OAAO,UAAU,gBAAgB,KAAK,OAAO,WAAW,eAAe;AAC5E,WAAK,OAAO,QAAS;AACrB,WAAK,OAAO,SAAS;AAAA,IACzB;AAAA,EACJ;AAAA,EAIA,SAAS;AAEL,SAAK,aAAa;AAAA,EACtB;AAAA,EAEQ,aAAa,eAAuB,GAAU;AAGlD,QAAI,KAAK,oBAAoB,MAAM;AAC/B,WAAK,kBAAkB;AACvB,WAAK,OAAO,cAAc,OAAO;AACjC,aAAO,sBAAsB,CAAC,YAAY,KAAK,aAAa,OAAO,CAAC;AAAA,IACxE;AAGA,QAAI,cAAc,eAAe,KAAK,mBAAmB;AAEzD,iBAAa;AAEb,SAAK,kBAAkB;AAGvB,SAAK,cAAc;AAEnB,SAAK,GAAG,SAAS,GAAG,GAAG,KAAK,OAAO,OAAO,KAAK,OAAO,MAAM;AAC5D,SAAK,GAAG,WAAW,GAAG,GAAG,GAAG,CAAC;AAC7B,SAAK,GAAG,MAAM,KAAK,GAAG,gBAAgB;AAEtC,SAAK,OAAO,0BAA0B,KAAK,QAAQ,cAAc,UAAU;AAC3E,SAAK,OAAO,WAAW,OAAO,cAAc,UAAU;AACtD,SAAK,OAAO,cAAc,OAAO;AAGjC,UAAM,mBAAmB,IAAI,iBAAK,EAAE,QAAQ,GAAG,KAAK,OAAO,OAAO,GAAG,KAAK,OAAO,QAAQ,IAAI,CAAC;AAC9F,QAAI,KAAK,OAAO,WAAW,gBAAgB;AAEvC,YAAM,cAAc,KAAK,OAAO,WAAW,eAAe,gBAAgB;AAC1E,YAAM,oBAAoB,KAAK,OAAO,WAAW,eAAe,sBAAsB,KAAK,MAAM;AAGjG,iBAAW,SAAS,KAAK,cAAc;AACnC,cAAM;AAAA,UACF;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UAAc;AAAA,QAClB;AAAA,MACJ;AAEA,iBAAW,SAAS,KAAK,oBAAoB;AACzC,cAAM;AAAA,UACF;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UAAc;AAAA,QAClB;AAAA,MACJ;AAEA,WAAK,OAAO,WAAW;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QAAc;AAAA,MAClB;AAAA,IAEJ,OAAO;AACH,cAAQ,KAAK,mBAAmB,KAAK,OAAO,WAAW,IAAI,kCAAkC;AAAA,IACjG;AAGA,WAAO,sBAAsB,CAAC,aAAa,KAAK,aAAa,QAAQ,CAAC;AAAA,EAC1E;AAAA,EAEA,mCAAiD;AAC7C,UAAM,iBAAiB,KAAK,sBAAsB,IAAI;AAEtD,mBAAe,WAAW,KAAK,GAAG,eAAe,qBAAwB;AACzE,mBAAe,WAAW,KAAK,GAAG,iBAAiB,qBAA0B;AAE7E,mBAAe,YAAY,uBAA+B;AAC1D,mBAAe,YAAY,4BAAoC;AAE/D,mBAAe,YAAY,oCAA6C;AAExE,mBAAe,MAAM;AAErB,WAAO;AAAA,EACX;AAAA,EAEA,mCAAiD;AAE7C,UAAM,iBAAiB,KAAK,sBAAsB,IAAI;AAEtD,mBAAe,WAAW,KAAK,GAAG,eAAe,qBAAwB;AACzE,mBAAe,WAAW,KAAK,GAAG,iBAAiB,qBAA0B;AAG7E,mBAAe,YAAY,iBAA0B;AAGrD,mBAAe,YAAY,yCAAkD;AAG7E,mBAAe,YAAY,uBAA+B;AAC1D,mBAAe,YAAY,sBAA8B;AACzD,mBAAe,YAAY,4BAAoC;AAG/D,mBAAe,YAAY,yCAAiD;AAG5E,mBAAe,YAAY,+BAAuC;AAGlE,mBAAe,YAAY,+BAAwC;AACnE,mBAAe,YAAY,8BAAuC;AAClE,mBAAe,YAAY,qCAA8C;AAGzE,mBAAe,YAAY,uCAA+C;AAC1E,mBAAe,YAAY,oCAA4C;AACvE,mBAAe,YAAY,iCAA0C;AACrE,mBAAe,YAAY,kCAA2C;AACtE,mBAAe,YAAY,mCAA4C;AACvE,mBAAe,YAAY,mCAA4C;AACvE,mBAAe,YAAY,oCAA6C;AAGxE,mBAAe,YAAY,sCAA8C;AACzE,mBAAe,YAAY,mCAA2C;AACtE,mBAAe,YAAY,sCAA8C;AACzE,mBAAe,YAAY,gCAAyC;AACpE,mBAAe,YAAY,iCAA0C;AACrE,mBAAe,YAAY,wCAAiD;AAC5E,mBAAe,YAAY,kCAA2C;AACtE,mBAAe,YAAY,kCAA2C;AACtE,mBAAe,YAAY,mCAA4C;AAGvE,mBAAe,YAAY,6CAAqD;AAChF,mBAAe,YAAY,0CAAkD;AAC7E,mBAAe,YAAY,wCAAiD;AAC5E,mBAAe,YAAY,yCAAkD;AAC7E,mBAAe,YAAY,yCAAkD;AAC7E,mBAAe,YAAY,0CAAmD;AAG9E,mBAAe,YAAY,wCAAiD;AAC5E,mBAAe,YAAY,wCAAiD;AAC5E,mBAAe,YAAY,+BAAuC;AAClE,mBAAe,YAAY,yCAAkD;AAC7E,mBAAe,YAAY,6BAAsC;AACjE,mBAAe,YAAY,2CAAoD;AAC/E,mBAAe,YAAY,+BAAwC;AACnE,mBAAe,YAAY,oCAA6C;AACxE,mBAAe,YAAY,wBAAiC;AAE5D,mBAAe,YAAY,6CAAsD;AACjF,mBAAe,YAAY,6CAAsD;AACjF,mBAAe,YAAY,8CAAuD;AAClF,mBAAe,YAAY,gDAAyD;AACpF,mBAAe,YAAY,yCAAkD;AAG7E,mBAAe,YAAY,kDAA0D;AACrF,mBAAe,YAAY,4CAAoD;AAC/E,mBAAe,YAAY,wDAAiE;AAC5F,mBAAe,YAAY,kDAA2D;AACtF,mBAAe,YAAY,+BAAuC;AAElE,mBAAe,MAAM;AAErB,WAAO;AAAA,EACX;AAAA,EAEA,uCAAuC;AACnC,UAAM,qBAAqB,KAAK,sBAAsB,QAAQ;AAE9D,uBAAmB,WAAW,KAAK,GAAG,eAAe,yBAA4B;AACjF,uBAAmB,WAAW,KAAK,GAAG,iBAAiB,yBAA8B;AAErF,uBAAmB,YAAY,sBAA8B;AAC7D,uBAAmB,YAAY,4BAAoC;AAEnE,uBAAmB,YAAY,0CAAmD;AAElF,uBAAmB,MAAM;AAEzB,WAAO;AAAA,EACX;AAAA,EAEA,mDAAiE;AAC7D,UAAM,KAAK,KAAK,sBAAsB,2CAA2C;AAEjF,OAAG,WAAW,KAAK,GAAG,eAAe,qCAAwC;AAC7E,OAAG,WAAW,KAAK,GAAG,iBAAiB,qCAA0C;AAEjF,OAAG,YAAY,oCAA4C;AAC3D,OAAG,YAAY,uBAA+B;AAE9C,OAAG,MAAM;AAET,WAAO;AAAA,EACX;AAAA,EAEA,6CAA2D;AACvD,UAAM,KAAK,KAAK,sBAAsB,qCAAqC;AAE3E,OAAG,WAAW,KAAK,GAAG,eAAe,+BAAkC;AACvE,OAAG,WAAW,KAAK,GAAG,iBAAiB,+BAAoC;AAE3E,OAAG,YAAY,oCAA4C;AAC3D,OAAG,YAAY,uBAA+B;AAC9C,OAAG,YAAY,sBAA8B;AAC7C,OAAG,YAAY,kBAA2B;AAE1C,OAAG,MAAM;AAET,WAAO;AAAA,EACX;AACJ;;;AWjrBA,IAAAC,cAAqB;AAKd,IAAM,WAAN,cAAuB,OAAO;AAAA,EAA9B;AAAA;AACH,eAAa,mBAAmB,EAAE;AAClC,sBAAoB;AACpB,qBAAmB;AAAA;AAAA,EAEnB,sBAAsB,QAAgC;AAClD,UAAM,SAAS,OAAO,QAAQ,OAAO;AAErC,WAAO,IAAI,iBAAK,EAAE;AAAA,MACd,KAAK;AAAA,MACL;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,IACT;AAAA,EACJ;AAAA,EAEA,kBAAwB;AACpB,UAAM,OAAO,IAAI,iBAAK,EAAE,SAAS;AAGjC,UAAM,SAAS,KAAK,SAAS,MAAM,EAAE,OAAO;AAC5C,SAAK,IAAI,IAAI,iBAAK,EAAE,SAAS,MAAM,CAAC;AAGpC,SAAK,UAAU,KAAK,SAAS,MAAM,EAAE,OAAO,CAAC;AAE7C,WAAO;AAAA,EACX;AACJ;;;ACxBO,IAAM,QAAN,cAAoB,OAAO;AAAA;AAAA,EAO9B,YACI,QACA,MACA,OACA,SACA,SACA,UACA,QACF;AACE,UAAM,QAAQ,IAAI;AAClB,SAAK,QAAQ;AACb,SAAK,UAAU;AACf,SAAK,UAAU;AACf,SAAK,WAAW;AAChB,SAAK,SAAS;AAAA,EAClB;AAAA,EAIA,oBAAoB,gBAA8B,YAAmB,OAAoB;AACrF,mBAAe,IAAI;AACnB,SAAK,aAAa,YAAY,KAAK;AACnC,SAAK,OAAO,iBAAiB,aAAa;AAAA,EAC9C;AAAA,EAEA,aAAa,YAAmB,OAAoB;AAChD,SAAK,OAAO,iBAAiB,YAAY,GAAG,UAAU,IAAI,KAAK,WAAW,KAAK,KAAK;AACpF,SAAK,OAAO,iBAAiB,YAAY,GAAG,UAAU,IAAI,KAAK,aAAa,KAAK,OAAO;AACxF,SAAK,OAAO,iBAAiB,YAAY,GAAG,UAAU,IAAI,KAAK,aAAa,KAAK,OAAO;AACxF,SAAK,OAAO,iBAAiB,YAAY,GAAG,UAAU,IAAI,KAAK,cAAc,KAAK,QAAQ;AAC1F,SAAK,OAAO,iBAAiB,YAAY,GAAG,UAAU,IAAI,KAAK,YAAY,KAAK,MAAM;AAAA,EAC1F;AACJ;;;AChDA,IAAAC,cAAiC;AAWjC,IAAM,mCAAmC;AAAA,EACrC,CAAC,IAAI,iBAAK,GAAK,GAAK,CAAG,GAAI,IAAI,iBAAK,GAAK,GAAK,CAAG,CAAC;AAAA;AAAA,EAClD,CAAC,IAAI,iBAAK,IAAM,GAAK,CAAG,GAAG,IAAI,iBAAK,GAAK,GAAK,CAAG,CAAC;AAAA;AAAA,EAClD,CAAC,IAAI,iBAAK,GAAK,GAAK,CAAG,GAAI,IAAI,iBAAK,GAAK,GAAK,CAAG,CAAC;AAAA;AAAA,EAClD,CAAC,IAAI,iBAAK,GAAK,IAAM,CAAG,GAAG,IAAI,iBAAK,GAAK,GAAK,EAAI,CAAC;AAAA;AAAA,EACnD,CAAC,IAAI,iBAAK,GAAK,GAAK,CAAG,GAAI,IAAI,iBAAK,GAAK,GAAK,CAAG,CAAC;AAAA;AAAA,EAClD,CAAC,IAAI,iBAAK,GAAK,GAAK,EAAI,GAAG,IAAI,iBAAK,GAAK,GAAK,CAAG,CAAC;AAAA;AACtD;AAEO,IAAM,aAAN,cAAyB,MAAM;AAAA,EAoBlC,YACI,QACA,MACA,OACA,SACA,SACA,UACA,QACA,OACA,iBAAoC,MACtC;AACE,UAAM,QAAQ,MAAM,OAAO,SAAS,SAAS,UAAU,MAAM;AAxBjE,6BAAyB,IAAI,iBAAK;AAElC,+BAA2B,IAAI,iBAAK;AAEpC,sCAAoC;AAAA,MAChC,IAAI,iBAAK;AAAA,MACT,IAAI,iBAAK;AAAA,MACT,IAAI,iBAAK;AAAA,MACT,IAAI,iBAAK;AAAA,MACT,IAAI,iBAAK;AAAA,MACT,IAAI,iBAAK;AAAA,IACb;AAcI,SAAK,UAAU;AACf,SAAK,UAAU;AACf,SAAK,WAAW;AAChB,SAAK,eAAe;AACpB,SAAK,QAAQ;AACb,SAAK,sBAAsB,KAAK,OAAO,iBAAiB,aAAa,SAAS;AAC9E,SAAK,cAAc,KAAK,OAAO,iBAAiB;AAChD,SAAK,iBAAiB,iBAAiB,iBAAiB,KAAK,OAAO,iBAAiB,2CAA2C;AAAA,EACpI;AAAA,EAEA,IAAI,QAAe;AACf,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,MAAM,OAAc;AACpB,SAAK,eAAe;AACpB,SAAK,gBAAgB,KAAK;AAAA,EAC9B;AAAA,EAEQ,cAAc;AAClB,UAAM,qBAAqB,KAAK,mBAAmB;AACnD,aAAS,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AACxB,YAAM,CAAC,eAAe,EAAE,IAAI,iCAAiC,CAAC;AAC9D,YAAM,kBAAkB,mBAAmB,MAAM,EAAE,IAAI,aAAa;AACpE,YAAM,OAAO,IAAI,iBAAK,EAAE;AAAA,QACpB;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AACA,WAAK,2BAA2B,CAAC,IAAI,KAAK,kBAAkB,MAAM,EAAE,IAAI,IAAI;AAAA,IAChF;AAAA,EACJ;AAAA,EAEU,gBAAgB,OAAc;AACpC,SAAK,oBAAoB,IAAI,iBAAK,EAAE,cAAc,KAAO,KAAK,KAAG,KAAK,GAAG,KAAK,KAAK;AACnF,SAAK,YAAY;AAAA,EACrB;AAAA,EAEU,mBAAmB,WAAuB;AAChD,SAAK,YAAY;AAAA,EACrB;AAAA,EAEA,gBAAgB,aAAmB,sBAA4B,sBAA4B,MAAc,YAA0B;AAC/H,QAAI,KAAK,OAAO,WAAW,gBAAgB;AACvC,WAAK,OAAO,WAAW,sBAAsB;AAE7C,UAAI,KAAK,kBAAkB,QAAQ;AAC/B,cAAM,sBAAsB,KAAK,OAAO,iBAAiB;AAEzD,YAAI,CAAC,KAAK,oBAAoB,OAAO,mBAAmB,GAAG;AACvD,eAAK,sBAAsB;AAC3B,eAAK,YAAY;AAAA,QACrB;AAAA,MACJ;AAGA,WAAK,eAAe,IAAI;AAExB,WAAK,YAAY,IAAI;AAErB,WAAK,OAAO,iBAAiB,YAAY,UAAU,KAAK,mBAAmB,CAAC;AAC5E,WAAK,OAAO,iBAAiB,YAAY,SAAS,KAAK,KAAK;AAE5D,eAAS,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AAExB,aAAK,YAAY,6BAA6B,SAAS,KAAK,sBAAsB,CAAC;AAEnF,aAAK,YAAY,MAAM;AAGvB,aAAK,OAAO,iBAAiB,YAAY,wBAAwB,KAAK,2BAA2B,CAAC,CAAC;AAGnG,aAAK,OAAO,WAAW;AAAA,UACnB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UAAM;AAAA,QACV;AAAA,MAEJ;AAEA,WAAK,OAAO,iBAAiB,kBAAkB;AAE/C,WAAK,OAAO,iBAAiB,aAAa;AAE1C,WAAK,OAAO,WAAW,sBAAsB;AAAA,IACjD,OAAO;AACH,YAAM,MAAM,yBAAyB,KAAK,OAAO,WAAW,IAAI,4EAA4E;AAAA,IAChJ;AAAA,EACJ;AAAA,EAEA,aAAa,YAAoB,OAAqB;AAClD,SAAK,OAAO,iBAAiB,YAAY,GAAG,UAAU,IAAI,KAAK,cAAc,KAAK,mBAAmB,CAAC;AACtG,SAAK,OAAO,iBAAiB,YAAY,GAAG,UAAU,IAAI,KAAK,WAAW,KAAK,KAAK;AAGpF,SAAK,OAAO,iBAAiB,YAAY,2BAA2B,KAAK,YAAY,oBAAoB,OAAO,EAAE,OAAO;AACzH,SAAK,OAAO,iBAAiB,YAAY,8BAA8B,QAAQ,CAAC,KAAK,KAAK,0BAA0B;AAEpH,UAAM,aAAa,YAAY,KAAK;AAAA,EACxC;AAAA,EAEU,cAAoB;AAC1B,SAAK,OAAO,iBAAiB,aAAa,KAAK,IAAI;AACnD,SAAK,OAAO,iBAAiB,wBAAwB;AAAA,EACzD;AAAA,EAEU,WAAW,MAAW,QAAe,QAAmB;AAC9D,UAAM,WAAW,MAAM,QAAQ,MAAM;AACrC,QAAI,cAAc,KAAK,OAAO,iBAAiB,aAAa,QAAQ,IAAI;AACxE,QAAI,cAAc,IAAI;AAClB,WAAK,OAAO,iBAAiB,aAAa,OAAO,aAAa,CAAC;AAAA,IACnE;AACA,SAAK,OAAO,iBAAiB,wBAAwB;AAAA,EACzD;AACJ;;;ACxKA,IAAAC,cAA6C;AAOtC,IAAM,mBAAN,cAA+B,MAAM;AAAA,EAQxC,YACI,QACA,MACA,OACA,SACA,SACA,UACA,QACA,iBAAoC,MACtC;AACE,UAAM,QAAQ,MAAM,OAAO,SAAS,SAAS,UAAU,MAAM;AAZjE,0CAAsC,IAAI,iBAAK;AAa3C,SAAK,UAAU;AACf,SAAK,UAAU;AACf,SAAK,WAAW;AAChB,SAAK,eAAe,KAAK,OAAO,iBAAiB,mBAAmB;AACpE,SAAK,cAAc,KAAK,OAAO,iBAAiB;AAChD,SAAK,iBAAiB,iBAAiB,iBAAiB,KAAK,OAAO,iBAAiB,iDAAiD;AAAA,EAC1I;AAAA,EAEA,gBAAgB,aAAmB,sBAA4B,sBAA4B,MAAc,YAA0B;AAC/H,QAAI,KAAK,OAAO,WAAW,gBAAgB;AAEvC,WAAK,OAAO,WAAW,sBAAsB;AAE7C,WAAK,eAAe,IAAI;AAExB,WAAK,YAAY,IAAI;AAGrB,WAAK,YAAY,6BAA6B,SAAS,KAAK,YAAY;AAExE,WAAK,YAAY,MAAM;AAEvB,YAAM,UAAU,KAAK;AAAA,QACjB,KAAK,OAAO,WAAW,eAAe,sBAAsB,KAAK,OAAO,MAAM;AAAA,QAC9E,KAAK,OAAO,WAAW,eAAe,gBAAgB;AAAA,MAC1D;AAEA,YAAM,YAAY,IAAI,iBAAK,GAAG,GAAG,GAAG,CAAC,EAAE,UAAU,KAAK,QAAQ,EAAE;AAEhE,WAAK,iCAAiC,KAAK;AAAA,QACvC;AAAA,QACA;AAAA,MACJ;AAEA,WAAK,OAAO,iBAAiB,YAAY,wBAAwB,KAAK,8BAA8B;AAEpG,WAAK,OAAO,WAAW;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QAAM;AAAA,MACV;AAGA,WAAK,OAAO,iBAAiB,kBAAkB;AAE/C,WAAK,OAAO,iBAAiB,aAAa;AAC1C,WAAK,OAAO,WAAW,sBAAsB;AAAA,IACjD,OAAO;AACH,YAAM,MAAM,yBAAyB,KAAK,OAAO,WAAW,IAAI,4EAA4E;AAAA,IAChJ;AAAA,EACJ;AAAA,EAEA,aAAa,YAAoB,OAAqB;AAClD,QAAI,KAAK,OAAO,WAAW,gBAAgB;AACvC,YAAM,eAAe,KAAK,iBAAiB;AAC3C,YAAM,aAAa,IAAI,iBAAK,EAAE,SAAS,YAAY;AACnD,YAAM,iBAAiB,IAAI,iBAAK,EAAE,SAAS,UAAU,EAAE,UAAU;AACjE,YAAM,wBAAwB,IAAI,iBAAK,EAAE,SAAS,cAAc;AAEhE,WAAK,OAAO,iBAAiB,YAAY,GAAG,UAAU,IAAI,KAAK,cAAc,qBAAqB;AAClG,WAAK,OAAO,iBAAiB,YAAY,oCAAoC,KAAK,KAAK,KAAK,8BAA8B;AAC1H,YAAM,aAAa,YAAY,KAAK;AAAA,IACxC,OAAO;AACH,YAAM,MAAM,yBAAyB,KAAK,OAAO,WAAW,IAAI,4EAA4E;AAAA,IAChJ;AAAA,EACJ;AAAA,EAEU,cAAoB;AAC1B,SAAK,OAAO,iBAAiB,mBAAmB,KAAK,IAAI;AACzD,SAAK,OAAO,iBAAiB,8BAA8B;AAAA,EAC/D;AAAA,EAEU,WAAW,MAAW,QAAe,QAAmB;AAC9D,QAAI,cAAc,KAAK,OAAO,iBAAiB,mBAAmB,QAAQ,IAAI;AAC9E,QAAI,cAAc,IAAI;AAClB,WAAK,OAAO,iBAAiB,mBAAmB,OAAO,aAAa,CAAC;AAAA,IACzE;AACA,SAAK,OAAO,iBAAiB,8BAA8B;AAAA,EAC/D;AAAA,EAEA,gCAAgC,mBAAwB,aAAyB;AAC7E,UAAM,MAAW,kBAAkB,MAAM,EAAE,IAAI,WAAW,EAAE,OAAO;AACnE,QAAI,kBAAyB,CAAC;AAC9B,aAAS,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AACxB,eAAS,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AACxB,iBAAS,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AACxB,gBAAM,KAAK,IAAI;AAAA,YACX,IAAM,IAAI;AAAA,YACV,IAAM,IAAI;AAAA,YACV,IAAM,IAAI;AAAA,YACV;AAAA,UACJ,EAAE,UAAU,GAAG;AACf,0BAAgB,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC;AAAA,QACrC;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EAEA,uBAAuB,WAAiB,SAAqB;AACzD,UAAM,SAAS,IAAI,iBAAK,GAAG,GAAG,CAAC;AAC/B,eAAW,KAAK,QAAS,QAAO,IAAI,EAAE,GAAG;AACzC,WAAO,IAAI,QAAQ,MAAM;AAEzB,QAAI,SAAS;AACb,eAAW,KAAK,SAAS;AACrB,eAAS,KAAK,IAAI,QAAQ,EAAE,IAAI,MAAM,EAAE,IAAI,MAAM,EAAE,OAAO,CAAC;AAAA,IAChE;AAEA,QAAI,KAAK,OAAO,WAAW;AACvB,gBAAU,KAAK,OAAO,WAAW,eAAe;AAEpD,UAAM,WAAW,IAAI,iBAAK,GAAG,GAAG,CAAC;AACjC,UAAM,iBAAiB,UAAU,MAAM,EAAE,UAAU;AAEnD,QAAI,KAAK;AACT,QAAI,KAAK,IAAI,eAAe,IAAI,QAAQ,CAAC,IAAI,MAAM;AAC/C,WAAK,IAAI,iBAAK,GAAG,GAAG,CAAC;AAAA,IACzB;AAEA,UAAM,aAAa,IAAI,iBAAK,EAAE;AAAA,MAC1B,OAAO,MAAM,EAAE,IAAI,eAAe,MAAM,EAAE,IAAI,MAAM,CAAC;AAAA,MACrD;AAAA,MACA;AAAA,IACJ;AAEA,QAAI,QAAQ,OAAO;AACnB,QAAI,QAAQ,OAAO;AACnB,QAAI,QAAQ,OAAO;AACnB,QAAI,QAAQ,OAAO;AACnB,QAAI,QAAQ,OAAO;AACnB,QAAI,QAAQ,OAAO;AAEnB,eAAW,KAAK,SAAS;AACrB,YAAM,MAAM,EAAE,MAAM,EAAE,UAAU,UAAU;AAC1C,cAAQ,KAAK,IAAI,OAAO,IAAI,CAAC;AAC7B,cAAQ,KAAK,IAAI,OAAO,IAAI,CAAC;AAC7B,cAAQ,KAAK,IAAI,OAAO,IAAI,CAAC;AAC7B,cAAQ,KAAK,IAAI,OAAO,IAAI,CAAC;AAC7B,cAAQ,KAAK,IAAI,OAAO,IAAI,CAAC;AAC7B,cAAQ,KAAK,IAAI,OAAO,IAAI,CAAC;AAAA,IACjC;AAEA,UAAM,WAAW;AACjB,aAAS;AACT,aAAS;AAET,WAAO,IAAI,iBAAK,EAAE,QAAQ,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK,EAAE,IAAI,UAAU;AAAA,EACtF;AACJ;;;AChLA,IAAAC,cAA6C;AAKtC,IAAM,YAAN,cAAwB,MAAM;AAAA,EAIjC,YACI,QACA,MACA,OACA,SACA,SACA,UACA,QACA,OACA,eACF;AACE,UAAM,QAAQ,MAAM,OAAO,SAAS,SAAS,UAAU,MAAM;AAC7D,SAAK,UAAU;AACf,SAAK,UAAU;AACf,SAAK,WAAW;AAChB,SAAK,QAAQ;AACb,SAAK,gBAAgB;AAAA,EACzB;AAAA,EAEA,aAAa,YAAoB,OAAqB;AAClD,UAAM,eAAe,KAAK,iBAAiB;AAE3C,UAAM,uBAAuB,IAAI,iBAAK,KAAK,SAAS,GAAG,KAAK,SAAS,GAAG,KAAK,SAAS,GAAG,CAAG,EACvF,UAAU,YAAY;AAE3B,UAAM,aAAa,IAAI,iBAAK,EAAE,SAAS,YAAY;AAEnD,UAAM,iBAAiB,IAAI,iBAAK,EAAE,SAAS,UAAU,EAAE,UAAU;AAEjE,UAAM,wBAAwB,IAAI,iBAAK,EAAE,SAAS,cAAc;AAEhE,SAAK,OAAO,iBAAiB,YAAY,GAAG,UAAU,IAAI,KAAK,cAAc,IAAI,iBAAK,aAAa,EAAE,GAAG,aAAa,EAAE,GAAG,aAAa,EAAE,CAAC,CAAC;AAC3I,SAAK,OAAO,iBAAiB,YAAY,GAAG,UAAU,IAAI,KAAK,cAAc,qBAAqB;AAClG,SAAK,OAAO,iBAAiB,YAAY,GAAG,UAAU,IAAI,KAAK,WAAW,KAAK,KAAK;AACpF,SAAK,OAAO,iBAAiB,YAAY,GAAG,UAAU,IAAI,KAAK,mBAAmB,KAAK,aAAa;AACpG,UAAM,aAAa,YAAY,KAAK;AAAA,EACxC;AAAA,EAEU,cAAoB;AAC1B,SAAK,OAAO,iBAAiB,YAAY,KAAK,IAAI;AAAA,EACtD;AAAA,EAEU,WAAW,MAAW,QAAe,QAAmB;AAC9D,QAAI,cAAc,KAAK,OAAO,iBAAiB,YAAY,QAAQ,IAAI;AACvE,QAAI,cAAc,IAAI;AAClB,WAAK,OAAO,iBAAiB,YAAY,OAAO,aAAa,CAAC;AAAA,IAClE;AAAA,EACJ;AACJ;;;AClDO,IAAM,WAAN,cAAuB,OAAO;AAAA,EAKjC,YACI,QACA,MACA,gBACA,iBAAoC,MACtC;AACE,UAAM,QAAQ,IAAI;AAClB,SAAK,MAAM,eAAe,KAAK,OAAO,gBAAgB;AACtD,SAAK,iBAAiB,iBAAiB,iBAAiB,KAAK,OAAO,iBAAiB;AACrF,SAAK,iBAAiB;AAAA,EAC1B;AAAA,EAEA,aAAa,aAAmB,sBAA4B,sBAA4B,MAAa,YAAyB;AAC1H,QAAI,KAAK,OAAO,WAAW;AACvB;AACJ,QAAI,CAAC,KAAK;AACN,YAAM,MAAM,oCAAoC;AAEpD,UAAM,KAAK,KAAK,OAAO;AAEvB,OAAG,GAAG,OAAO,GAAG,GAAG,KAAK;AACxB,OAAG,GAAG,UAAU,GAAG,GAAG,WAAW,GAAG,GAAG,mBAAmB;AAE1D,SAAK,eAAe,IAAI;AAExB,SAAK,UAAU,MAAM,KAAK,QAAQ,MAAM,UAAU;AAGlD,OAAG,YAAY,kBAAkB,KAAK,cAAc;AAGpD,OAAG,YAAY,WAAW,KAAK,iBAAiB,CAAC;AAGjD,OAAG,YAAY,gBAAgB,oBAAoB;AAGnD,OAAG,GAAG,gBAAgB,KAAK,IAAI,GAAG;AAClC,OAAG,GAAG,aAAa,GAAG,GAAG,WAAW,KAAK,IAAI,aAAa,GAAG,GAAG,gBAAgB,CAAC;AACjF,OAAG,GAAG,gBAAgB,IAAI;AAE1B,OAAG,aAAa;AAChB,OAAG,GAAG,QAAQ,GAAG,GAAG,KAAK;AAAA,EAC7B;AACJ;;;ACtDO,IAAK,cAAL,kBAAKC,iBAAL;AACH,EAAAA,0BAAA,UAAO,KAAP;AACA,EAAAA,0BAAA,YAAS,KAAT;AACA,EAAAA,0BAAA,WAAQ,KAAR;AAHQ,SAAAA;AAAA,GAAA;AAML,IAAM,eAAN,MAAmB;AAAA,EAkBtB,YAAY,QAAuB,SAAsB,OAAO,SAAS,MAAM;AAA5C;AAfnC,SAAQ,WAAW,oBAAI,IAAY;AACnC,SAAQ,cAAc,oBAAI,IAAY;AACtC,SAAQ,eAAe,oBAAI,IAAY;AAEvC,SAAQ,YAAY,oBAAI,IAAY;AACpC,SAAQ,eAAe,oBAAI,IAAY;AACvC,SAAQ,gBAAgB,oBAAI,IAAY;AAExC,SAAO,SAAS;AAChB,SAAO,SAAS;AAChB,SAAO,gBAAgB;AACvB,SAAO,gBAAgB;AAEvB,SAAO,aAAa;AA+EpB,SAAQ,YAAY,CAAC,MAAqB;AACtC,UAAI,CAAC,KAAK,SAAS,IAAI,EAAE,IAAI,GAAG;AAC5B,aAAK,SAAS,IAAI,EAAE,IAAI;AACxB,aAAK,YAAY,IAAI,EAAE,IAAI;AAAA,MAC/B;AAAA,IACJ;AAEA,SAAQ,UAAU,CAAC,MAAqB;AACpC,UAAI,KAAK,SAAS,OAAO,EAAE,IAAI,GAAG;AAC9B,aAAK,aAAa,IAAI,EAAE,IAAI;AAAA,MAChC;AAAA,IACJ;AAEA,SAAQ,cAAc,CAAC,MAAkB;AACrC,UAAI,CAAC,KAAK,UAAU,IAAI,EAAE,MAAM,GAAG;AAC/B,aAAK,UAAU,IAAI,EAAE,MAAM;AAC3B,aAAK,aAAa,IAAI,EAAE,MAAM;AAAA,MAElC;AAAA,IACJ;AAEA,SAAQ,YAAY,CAAC,MAAkB;AACnC,UAAI,KAAK,UAAU,OAAO,EAAE,MAAM,GAAG;AACjC,aAAK,cAAc,IAAI,EAAE,MAAM;AAAA,MACnC;AAAA,IACJ;AAEA,SAAQ,cAAc,CAAC,MAAkB;AACrC,UAAI,SAAS,uBAAuB,KAAK,OAAO,QAAQ;AAEpD,aAAK,gBAAgB,EAAE;AACvB,aAAK,gBAAgB,EAAE;AAAA,MAC3B,OAAO;AAEH,cAAM,OAAO,KAAK,OAAO,sBAAsB;AAE/C,cAAM,IAAI,EAAE,UAAU,KAAK;AAC3B,cAAM,IAAI,EAAE,UAAU,KAAK;AAE3B,aAAK,iBAAiB,IAAI,KAAK;AAC/B,aAAK,iBAAiB,IAAI,KAAK;AAE/B,aAAK,SAAS;AACd,aAAK,SAAS;AAAA,MAClB;AAAA,IACJ;AAEA,SAAQ,UAAU,CAAC,MAAkB;AACjC,WAAK,cAAc,EAAE;AAAA,IACzB;AA7HI,SAAK,SAAS;AACd,SAAK,OAAO;AAAA,EAChB;AAAA,EAEA,UAAU;AACN,SAAK,OAAO;AAAA,EAChB;AAAA,EAEA,SAAS;AACL,SAAK,YAAY,MAAM;AACvB,SAAK,aAAa,MAAM;AACxB,SAAK,aAAa,MAAM;AACxB,SAAK,cAAc,MAAM;AAEzB,SAAK,gBAAgB;AACrB,SAAK,gBAAgB;AACrB,SAAK,aAAa;AAAA,EACtB;AAAA,EAEA,YAAY,MAAuB;AAC/B,WAAO,KAAK,SAAS,IAAI,IAAI;AAAA,EACjC;AAAA,EAEA,gBAAgB,MAAuB;AACnC,WAAO,KAAK,YAAY,IAAI,IAAI;AAAA,EACpC;AAAA,EAEA,iBAAiB,MAAuB;AACpC,WAAO,KAAK,aAAa,IAAI,IAAI;AAAA,EACrC;AAAA,EAEA,cAAc,QAA8B;AACxC,WAAO,KAAK,UAAU,IAAI,MAAM;AAAA,EACpC;AAAA,EAEA,kBAAkB,QAA8B;AAC5C,WAAO,KAAK,aAAa,IAAI,MAAM;AAAA,EACvC;AAAA,EAEA,mBAAmB,QAA8B;AAC7C,WAAO,KAAK,cAAc,IAAI,MAAM;AAAA,EACxC;AAAA,EAEA,aAAa;AACT,SAAK,OAAO,OAAO,mBAAmB;AAAA,EAC1C;AAAA,EAEA,eAAe;AACX,aAAS,gBAAgB;AAAA,EAC7B;AAAA,EAEQ,SAAS;AACb,WAAO,iBAAiB,WAAW,KAAK,SAAS;AACjD,WAAO,iBAAiB,SAAS,KAAK,OAAO;AAE7C,SAAK,OAAO,iBAAiB,aAAa,KAAK,WAAW;AAC1D,WAAO,iBAAiB,WAAW,KAAK,SAAS;AAEjD,SAAK,OAAO,iBAAiB,aAAa,KAAK,WAAW;AAC1D,SAAK,OAAO,iBAAiB,SAAS,KAAK,SAAS,EAAE,SAAS,KAAK,CAAC;AAGrE,SAAK,OAAO,iBAAiB,eAAe,OAAK,EAAE,eAAe,CAAC;AAAA,EACvE;AAAA,EAEQ,SAAS;AACb,WAAO,oBAAoB,WAAW,KAAK,SAAS;AACpD,WAAO,oBAAoB,SAAS,KAAK,OAAO;AAEhD,SAAK,OAAO,oBAAoB,aAAa,KAAK,WAAW;AAC7D,WAAO,oBAAoB,WAAW,KAAK,SAAS;AAEpD,SAAK,OAAO,oBAAoB,aAAa,KAAK,WAAW;AAC7D,SAAK,OAAO,oBAAoB,SAAS,KAAK,OAAO;AAAA,EACzD;AAoDJ;;;ACzJA,IAAqB,UAArB,MAA6B;AAAA,EACzB,aAAa,eAAe,KAA8B;AACtD,UAAM,WAAW,MAAM,MAAM,GAAG;AAChC,QAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,kBAAkB,GAAG,EAAE;AACzD,WAAO,MAAM,SAAS,KAAK;AAAA,EAC/B;AAAA,EAEA,aAAa,WAAW,kBAAyB,SAAmD;AAChG,UAAM,MAAM,MAAM,MAAM,gBAAgB;AACxC,QAAI,IAAI,IAAI;AACR,YAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,aAAO,MAAM,kBAAkB,MAAM,OAAO;AAAA,IAChD,OAAO;AACH,YAAM,IAAI,MAAM,iCAAiC,gBAAgB,mBAAmB;AAAA,IACxF;AAAA,EACJ;AACJ;;;AChBA,qBAAsC;AAItC,IAAAC,eAAyD;AAOlD,IAAM,cAAN,MAAkB;AAAA,EAWrB,YAAY,QAAe;AAP3B,eAAqB;AAErB,8BAAuE,CAAC;AACxE,gCAAsF,CAAC;AACvF,+BAAwG,CAAC;AACzG,+BAAwG,CAAC;AAGrG,SAAK,SAAS;AACd,SAAK,cAAc,IAAI,0BAAW;AAClC,SAAK,qBAAqB,KAAK,YAAY,aAAa;AACxD,SAAK,mBACA,KAAK,OAAOC,YAAW;AACpB,WAAK,MAAMA;AACX,YAAM,KAAK,YAAY;AAAA,IAC3B,CAAC,EACA,MAAM,CAAC,WAAW;AAAC,YAAM,IAAI,MAAM,MAAM;AAAA,IAAE,CAAC;AAAA,EACrD;AAAA,EAEA,uBAAuB,KAAY,MAAW,QAAe;AACzD,SAAK,mBAAmB,GAAG,EAAE,MAAM,MAAM;AAAA,EAC7C;AAAA,EAEA,yBAAyB,KAAY,MAAW,QAAe,QAAa;AACxE,SAAK,qBAAqB,GAAG,EAAE,MAAM,QAAQ,MAAM;AAAA,EACvD;AAAA,EAEA,wBAAwB,KAAY,MAAW,QAAe,MAAa,YAAmB;AAC1F,SAAK,oBAAoB,GAAG,EAAE,MAAM,QAAQ,MAAM,UAAU;AAAA,EAChE;AAAA,EAEA,wBAAwB,KAAY,MAAW,QAAe,MAAa,YAAmB;AAC1F,SAAK,oBAAoB,GAAG,EAAE,MAAM,QAAQ,MAAM,UAAU;AAAA,EAChE;AAAA,EAEA,MAAc,gBAAgB,KAAa;AACvC,UAAM,KAAK;AAEX,QAAI,CAAC,KAAK;AACN;AAEJ,UAAM,MAAM,MAAM,MAAM,GAAG;AAC3B,QAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,yBAAyB;AACtD,UAAM,OAAO,MAAM,IAAI,KAAK;AAE5B,WAAO,KAAK,IAAI,SAAS,IAAI;AAAA,EACjC;AAAA,EAEA,MAAM,sBAAsB,KAAY;AACpC,UAAM,KAAK;AAEX,QAAI,CAAC,KAAK;AACN;AAEJ,UAAM,KAAK,gBAAgB,GAAG;AAE9B,UAAM,WAAW,KAAK,IAAI,OAAO,IAAI,UAAU;AAE/C,SAAK,mBAAmB,GAAG,IAAI;AAAA,EACnC;AAAA,EAEA,MAAM,wBAAwB,KAAY;AACtC,UAAM,KAAK;AAEX,QAAI,CAAC,KAAK;AACN;AAEJ,UAAM,KAAK,gBAAgB,GAAG;AAE9B,UAAM,WAAW,KAAK,IAAI,OAAO,IAAI,YAAY;AAEjD,SAAK,qBAAqB,GAAG,IAAI;AAAA,EACrC;AAAA,EAEA,MAAM,uBAAuB,KAAY;AACrC,UAAM,KAAK;AAEX,QAAI,CAAC,KAAK;AACN;AAEJ,UAAM,KAAK,gBAAgB,GAAG;AAE9B,UAAM,WAAW,KAAK,IAAI,OAAO,IAAI,WAAW;AAEhD,SAAK,oBAAoB,GAAG,IAAI;AAAA,EACpC;AAAA,EAEA,MAAM,uBAAuB,KAAY;AACrC,UAAM,KAAK;AAEX,QAAI,CAAC,KAAK;AACN;AAEJ,UAAM,KAAK,gBAAgB,GAAG;AAE9B,UAAM,WAAW,KAAK,IAAI,OAAO,IAAI,WAAW;AAEhD,SAAK,oBAAoB,GAAG,IAAI;AAAA,EACpC;AAAA,EAEA,MAAM,cAAc;AAChB,UAAM,KAAK;AAEX,QAAI,CAAC,KAAK;AACN;AAEJ,SAAK,IAAI,OAAO,IAAI,QAAQ,uBAAuB,iBAAI,CAAC;AACxD,SAAK,IAAI,OAAO,IAAI,QAAQ,uBAAuB,iBAAI,CAAC;AACxD,SAAK,IAAI,OAAO,IAAI,QAAQ,uBAAuB,iBAAI,CAAC;AACxD,SAAK,IAAI,OAAO,IAAI,QAAQ,uBAAuB,iBAAI,CAAC;AACxD,SAAK,IAAI,OAAO,IAAI,QAAQ,uBAAuB,iBAAI,CAAC;AACxD,SAAK,IAAI,OAAO,IAAI,QAAQ,uBAAuB,iBAAI,CAAC;AACxD,SAAK,IAAI,OAAO,IAAI,QAAQ,uBAAuB,iBAAI,CAAC;AACxD,SAAK,IAAI,OAAO,IAAI,QAAQ,uBAAuB,IAAI,CAAC;AACxD,SAAK,IAAI,OAAO,IAAI,UAAU,uBAAuB,MAAM,CAAC;AAC5D,SAAK,IAAI,OAAO,IAAI,UAAU,uBAAuB,MAAM,CAAC;AAC5D,SAAK,IAAI,OAAO,IAAI,YAAY,uBAAuB,QAAQ,CAAC;AAChE,SAAK,IAAI,OAAO,IAAI,YAAY,uBAAuB,QAAQ,CAAC;AAAA,EACpE;AACJ;AAEA,SAAS,uBAA8D,KAAQ;AAC7E,SAAO,IAAI,SAAmC,IAAI,IAAI,GAAG,IAAI;AAC/D;;;ACpIO,IAAM,QAAN,MAAY;AAAA,EAaf,YAAY,QAAe,MAAa,YAAsB,MAAM,cAA4B,MAAM;AARtG,mCAAwE,OAAM,QAAQ,UAAU;AAAA,IAAC;AACjG,oCAAgG,CAAC,QAAQ,MAAM,eAAe;AAAA,IAAC;AAE/H,qBAAsB;AACtB,0BAA+B;AAE/B,+BAA8B;AAG1B,SAAK,SAAS;AACd,SAAK,OAAO;AACZ,SAAK,YAAY;AACjB,SAAK,iBAAiB;AAAA,EAC1B;AAAA,EAEA,SAAS,MAAuB;AAE5B,QAAI,KAAK;AACL,aAAO,KAAK,gBAAgB,MAAM,KAAK,SAAS;AAAA;AAEhD,aAAO;AAAA,EACf;AAAA,EAEQ,gBAAgB,MAAa,MAAqB;AACtD,QAAI,CAAC;AACD,aAAO;AACX,QAAI,KAAK,QAAQ;AACb,aAAO;AAEX,eAAW,cAAc,KAAK,UAAU;AACpC,YAAM,gBAAgB,KAAK,gBAAgB,MAAM,UAAU;AAC3D,UAAI;AACA,eAAO;AAAA,IACf;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,OAAO,MAAc,YAAoB;AACrC,QAAI,KAAK,WAAW;AAChB,WAAK,UAAU,OAAO,MAAM,UAAU;AAAA,IAC1C,OAAO;AACH,cAAQ,KAAK,sCAAsC,KAAK,IAAI,IAAI;AAAA,IACpE;AAAA,EACJ;AAAA,EAEA,OAAO,aAAmB,sBAA4B,sBAA4B,MAAc,YAAoB;AAChH,QAAI,KAAK,WAAW;AAChB,WAAK,UAAU,OAAO,aAAa,sBAAsB,sBAAsB,MAAM,UAAU;AAAA,IACnG,OAAO;AACH,cAAQ,KAAK,sCAAsC,KAAK,IAAI,IAAI;AAAA,IACpE;AAAA,EACJ;AACJ;;;ACvDA,IAAqB,SAArB,MAA4B;AAAA,EAcxB,YACI,QACA,aAA0B,MAC1B,2BAA4D,OAAM,WAAW;AAAA,EAAC,GAC9E,4BAAoF,CAAC,QAAQ,MAAM,eAAe;AAAA,EAAC,GACrH;AAPF,gBAAO;AAQH,SAAK,SAAS;AACd,SAAK,gBAAgB,IAAI,aAAa,IAAI;AAC1C,SAAK,eAAe,IAAI,YAAY,IAAI;AACxC,SAAK,2BAA2B;AAChC,SAAK,4BAA4B;AACjC,SAAK,mBAAmB,IAAI,gBAAgB,MAAM,KAAK,MAAM;AAC7D,SAAK,aAAa,aAAa,aAAa,IAAI,MAAM,MAAM,YAAY;AAAA,EAC5E;AAAA,EAEA,MAAM,QAAQ;AACV,UAAM,KAAK,yBAAyB,IAAI;AACxC,SAAK,iBAAiB,OAAO;AAAA,EACjC;AACJ;;;AlChBA,IAAO,gBAAQ;","names":["module","exports","options","_a","self","index","LuaEngine","LuaFactory","import_glm","TextureType","size","texture_type","mip_level","image_type","texture_parameters","WebGLUniformType","import_glm","AssetFile","OBJ","BumpChannel","ReflectionMapType","IlluminationModel","CollectionType","load_obj","material","x","y","z","res","import_glm","AttachmentType","DrawFlag","import_glm","import_glm","import_glm","import_glm","import_glm","MouseButton","import_glm","engine"]}