mirror of
https://github.com/Leanny/splat3seedchecker.git
synced 2026-03-21 17:25:13 -05:00
660 lines
22 KiB
JavaScript
660 lines
22 KiB
JavaScript
var Module = typeof createModule != "undefined" ? createModule : {}
|
|
Module["locateFile"] = (path, scriptDirectory_unused) => {
|
|
return path
|
|
}
|
|
var moduleOverrides = Object.assign({}, Module)
|
|
var arguments_ = []
|
|
var thisProgram = "./this.program"
|
|
var quit_ = (status, toThrow) => {
|
|
throw toThrow
|
|
}
|
|
var ENVIRONMENT_IS_WEB = true
|
|
var ENVIRONMENT_IS_WORKER = false
|
|
var scriptDirectory = ""
|
|
function locateFile(path) {
|
|
if (Module["locateFile"]) {
|
|
return Module["locateFile"](path, scriptDirectory)
|
|
}
|
|
return scriptDirectory + path
|
|
}
|
|
var read_, readAsync, readBinary, setWindowTitle
|
|
if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
|
|
if (ENVIRONMENT_IS_WORKER) {
|
|
scriptDirectory = self.location.href
|
|
} else if (typeof document != "undefined" && document.currentScript) {
|
|
scriptDirectory = document.currentScript.src
|
|
}
|
|
if (scriptDirectory.indexOf("blob:") !== 0) {
|
|
scriptDirectory = scriptDirectory.substr(0, scriptDirectory.replace(/[?#].*/, "").lastIndexOf("/") + 1)
|
|
} else {
|
|
scriptDirectory = ""
|
|
}
|
|
{
|
|
read_ = url => {
|
|
var xhr = new XMLHttpRequest()
|
|
xhr.open("GET", url, false)
|
|
xhr.send(null)
|
|
return xhr.responseText
|
|
}
|
|
if (ENVIRONMENT_IS_WORKER) {
|
|
readBinary = url => {
|
|
var xhr = new XMLHttpRequest()
|
|
xhr.open("GET", url, false)
|
|
xhr.responseType = "arraybuffer"
|
|
xhr.send(null)
|
|
return new Uint8Array(xhr.response)
|
|
}
|
|
}
|
|
readAsync = (url, onload, onerror) => {
|
|
var xhr = new XMLHttpRequest()
|
|
xhr.open("GET", url, true)
|
|
xhr.responseType = "arraybuffer"
|
|
xhr.onload = () => {
|
|
if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) {
|
|
onload(xhr.response)
|
|
return
|
|
}
|
|
onerror()
|
|
}
|
|
xhr.onerror = onerror
|
|
xhr.send(null)
|
|
}
|
|
}
|
|
setWindowTitle = title => (document.title = title)
|
|
} else {
|
|
}
|
|
var out = Module["print"] || console.log.bind(console)
|
|
var err = Module["printErr"] || console.warn.bind(console)
|
|
Object.assign(Module, moduleOverrides)
|
|
moduleOverrides = null
|
|
if (Module["arguments"]) arguments_ = Module["arguments"]
|
|
if (Module["thisProgram"]) thisProgram = Module["thisProgram"]
|
|
if (Module["quit"]) quit_ = Module["quit"]
|
|
var wasmBinary
|
|
if (Module["wasmBinary"]) wasmBinary = Module["wasmBinary"]
|
|
var noExitRuntime = Module["noExitRuntime"] || true
|
|
if (typeof WebAssembly != "object") {
|
|
abort("no native wasm support detected")
|
|
}
|
|
var wasmMemory
|
|
var ABORT = false
|
|
var EXITSTATUS
|
|
var UTF8Decoder = typeof TextDecoder != "undefined" ? new TextDecoder("utf8") : undefined
|
|
function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead) {
|
|
var endIdx = idx + maxBytesToRead
|
|
var endPtr = idx
|
|
while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr
|
|
if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {
|
|
return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr))
|
|
}
|
|
var str = ""
|
|
while (idx < endPtr) {
|
|
var u0 = heapOrArray[idx++]
|
|
if (!(u0 & 128)) {
|
|
str += String.fromCharCode(u0)
|
|
continue
|
|
}
|
|
var u1 = heapOrArray[idx++] & 63
|
|
if ((u0 & 224) == 192) {
|
|
str += String.fromCharCode(((u0 & 31) << 6) | u1)
|
|
continue
|
|
}
|
|
var u2 = heapOrArray[idx++] & 63
|
|
if ((u0 & 240) == 224) {
|
|
u0 = ((u0 & 15) << 12) | (u1 << 6) | u2
|
|
} else {
|
|
u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63)
|
|
}
|
|
if (u0 < 65536) {
|
|
str += String.fromCharCode(u0)
|
|
} else {
|
|
var ch = u0 - 65536
|
|
str += String.fromCharCode(55296 | (ch >> 10), 56320 | (ch & 1023))
|
|
}
|
|
}
|
|
return str
|
|
}
|
|
function UTF8ToString(ptr, maxBytesToRead) {
|
|
return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ""
|
|
}
|
|
function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) {
|
|
if (!(maxBytesToWrite > 0)) return 0
|
|
var startIdx = outIdx
|
|
var endIdx = outIdx + maxBytesToWrite - 1
|
|
for (var i = 0; i < str.length; ++i) {
|
|
var u = str.charCodeAt(i)
|
|
if (u >= 55296 && u <= 57343) {
|
|
var u1 = str.charCodeAt(++i)
|
|
u = (65536 + ((u & 1023) << 10)) | (u1 & 1023)
|
|
}
|
|
if (u <= 127) {
|
|
if (outIdx >= endIdx) break
|
|
heap[outIdx++] = u
|
|
} else if (u <= 2047) {
|
|
if (outIdx + 1 >= endIdx) break
|
|
heap[outIdx++] = 192 | (u >> 6)
|
|
heap[outIdx++] = 128 | (u & 63)
|
|
} else if (u <= 65535) {
|
|
if (outIdx + 2 >= endIdx) break
|
|
heap[outIdx++] = 224 | (u >> 12)
|
|
heap[outIdx++] = 128 | ((u >> 6) & 63)
|
|
heap[outIdx++] = 128 | (u & 63)
|
|
} else {
|
|
if (outIdx + 3 >= endIdx) break
|
|
heap[outIdx++] = 240 | (u >> 18)
|
|
heap[outIdx++] = 128 | ((u >> 12) & 63)
|
|
heap[outIdx++] = 128 | ((u >> 6) & 63)
|
|
heap[outIdx++] = 128 | (u & 63)
|
|
}
|
|
}
|
|
heap[outIdx] = 0
|
|
return outIdx - startIdx
|
|
}
|
|
function stringToUTF8(str, outPtr, maxBytesToWrite) {
|
|
return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite)
|
|
}
|
|
var buffer, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64
|
|
function updateGlobalBufferAndViews(buf) {
|
|
buffer = buf
|
|
Module["HEAP8"] = HEAP8 = new Int8Array(buf)
|
|
Module["HEAP16"] = HEAP16 = new Int16Array(buf)
|
|
Module["HEAP32"] = HEAP32 = new Int32Array(buf)
|
|
Module["HEAPU8"] = HEAPU8 = new Uint8Array(buf)
|
|
Module["HEAPU16"] = HEAPU16 = new Uint16Array(buf)
|
|
Module["HEAPU32"] = HEAPU32 = new Uint32Array(buf)
|
|
Module["HEAPF32"] = HEAPF32 = new Float32Array(buf)
|
|
Module["HEAPF64"] = HEAPF64 = new Float64Array(buf)
|
|
}
|
|
var INITIAL_MEMORY = Module["INITIAL_MEMORY"] || 16777216
|
|
var wasmTable
|
|
var __ATPRERUN__ = []
|
|
var __ATINIT__ = []
|
|
var __ATPOSTRUN__ = []
|
|
var runtimeInitialized = false
|
|
function preRun() {
|
|
if (Module["preRun"]) {
|
|
if (typeof Module["preRun"] == "function") Module["preRun"] = [Module["preRun"]]
|
|
while (Module["preRun"].length) {
|
|
addOnPreRun(Module["preRun"].shift())
|
|
}
|
|
}
|
|
callRuntimeCallbacks(__ATPRERUN__)
|
|
}
|
|
function initRuntime() {
|
|
runtimeInitialized = true
|
|
callRuntimeCallbacks(__ATINIT__)
|
|
}
|
|
function postRun() {
|
|
if (Module["postRun"]) {
|
|
if (typeof Module["postRun"] == "function") Module["postRun"] = [Module["postRun"]]
|
|
while (Module["postRun"].length) {
|
|
addOnPostRun(Module["postRun"].shift())
|
|
}
|
|
}
|
|
callRuntimeCallbacks(__ATPOSTRUN__)
|
|
}
|
|
function addOnPreRun(cb) {
|
|
__ATPRERUN__.unshift(cb)
|
|
}
|
|
function addOnInit(cb) {
|
|
__ATINIT__.unshift(cb)
|
|
}
|
|
function addOnPostRun(cb) {
|
|
__ATPOSTRUN__.unshift(cb)
|
|
}
|
|
var runDependencies = 0
|
|
var runDependencyWatcher = null
|
|
var dependenciesFulfilled = null
|
|
function addRunDependency(id) {
|
|
runDependencies++
|
|
if (Module["monitorRunDependencies"]) {
|
|
Module["monitorRunDependencies"](runDependencies)
|
|
}
|
|
}
|
|
function removeRunDependency(id) {
|
|
runDependencies--
|
|
if (Module["monitorRunDependencies"]) {
|
|
Module["monitorRunDependencies"](runDependencies)
|
|
}
|
|
if (runDependencies == 0) {
|
|
if (runDependencyWatcher !== null) {
|
|
clearInterval(runDependencyWatcher)
|
|
runDependencyWatcher = null
|
|
}
|
|
if (dependenciesFulfilled) {
|
|
var callback = dependenciesFulfilled
|
|
dependenciesFulfilled = null
|
|
callback()
|
|
}
|
|
}
|
|
}
|
|
function abort(what) {
|
|
{
|
|
if (Module["onAbort"]) {
|
|
Module["onAbort"](what)
|
|
}
|
|
}
|
|
what = "Aborted(" + what + ")"
|
|
err(what)
|
|
ABORT = true
|
|
EXITSTATUS = 1
|
|
what += ". Build with -sASSERTIONS for more info."
|
|
var e = new WebAssembly.RuntimeError(what)
|
|
throw e
|
|
}
|
|
var dataURIPrefix = "data:application/octet-stream;base64,"
|
|
function isDataURI(filename) {
|
|
return filename.startsWith(dataURIPrefix)
|
|
}
|
|
var wasmBinaryFile
|
|
wasmBinaryFile = "gearSeed.wasm"
|
|
if (!isDataURI(wasmBinaryFile)) {
|
|
wasmBinaryFile = locateFile(wasmBinaryFile)
|
|
}
|
|
function getBinary(file) {
|
|
try {
|
|
if (file == wasmBinaryFile && wasmBinary) {
|
|
return new Uint8Array(wasmBinary)
|
|
}
|
|
if (readBinary) {
|
|
return readBinary(file)
|
|
}
|
|
throw "both async and sync fetching of the wasm failed"
|
|
} catch (err) {
|
|
abort(err)
|
|
}
|
|
}
|
|
function getBinaryPromise() {
|
|
if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) {
|
|
if (typeof fetch == "function") {
|
|
return fetch(wasmBinaryFile, { credentials: "same-origin" })
|
|
.then(function (response) {
|
|
if (!response["ok"]) {
|
|
throw "failed to load wasm binary file at '" + wasmBinaryFile + "'"
|
|
}
|
|
return response["arrayBuffer"]()
|
|
})
|
|
.catch(function () {
|
|
return getBinary(wasmBinaryFile)
|
|
})
|
|
}
|
|
}
|
|
return Promise.resolve().then(function () {
|
|
return getBinary(wasmBinaryFile)
|
|
})
|
|
}
|
|
function createWasm() {
|
|
var info = { a: asmLibraryArg }
|
|
function receiveInstance(instance, module) {
|
|
var exports = instance.exports
|
|
Module["asm"] = exports
|
|
wasmMemory = Module["asm"]["b"]
|
|
updateGlobalBufferAndViews(wasmMemory.buffer)
|
|
wasmTable = Module["asm"]["g"]
|
|
addOnInit(Module["asm"]["c"])
|
|
removeRunDependency("wasm-instantiate")
|
|
}
|
|
addRunDependency("wasm-instantiate")
|
|
function receiveInstantiationResult(result) {
|
|
receiveInstance(result["instance"])
|
|
}
|
|
function instantiateArrayBuffer(receiver) {
|
|
return getBinaryPromise()
|
|
.then(function (binary) {
|
|
return WebAssembly.instantiate(binary, info)
|
|
})
|
|
.then(function (instance) {
|
|
return instance
|
|
})
|
|
.then(receiver, function (reason) {
|
|
err("failed to asynchronously prepare wasm: " + reason)
|
|
abort(reason)
|
|
})
|
|
}
|
|
function instantiateAsync() {
|
|
if (
|
|
!wasmBinary &&
|
|
typeof WebAssembly.instantiateStreaming == "function" &&
|
|
!isDataURI(wasmBinaryFile) &&
|
|
typeof fetch == "function"
|
|
) {
|
|
return fetch(wasmBinaryFile, { credentials: "same-origin" }).then(function (response) {
|
|
var result = WebAssembly.instantiateStreaming(response, info)
|
|
return result.then(receiveInstantiationResult, function (reason) {
|
|
err("wasm streaming compile failed: " + reason)
|
|
err("falling back to ArrayBuffer instantiation")
|
|
return instantiateArrayBuffer(receiveInstantiationResult)
|
|
})
|
|
})
|
|
} else {
|
|
return instantiateArrayBuffer(receiveInstantiationResult)
|
|
}
|
|
}
|
|
if (Module["instantiateWasm"]) {
|
|
try {
|
|
var exports = Module["instantiateWasm"](info, receiveInstance)
|
|
return exports
|
|
} catch (e) {
|
|
err("Module.instantiateWasm callback failed with error: " + e)
|
|
return false
|
|
}
|
|
}
|
|
instantiateAsync()
|
|
return {}
|
|
}
|
|
function callRuntimeCallbacks(callbacks) {
|
|
while (callbacks.length > 0) {
|
|
callbacks.shift()(Module)
|
|
}
|
|
}
|
|
function writeArrayToMemory(array, buffer) {
|
|
HEAP8.set(array, buffer)
|
|
}
|
|
function getHeapMax() {
|
|
return 2147483648
|
|
}
|
|
function emscripten_realloc_buffer(size) {
|
|
try {
|
|
wasmMemory.grow((size - buffer.byteLength + 65535) >>> 16)
|
|
updateGlobalBufferAndViews(wasmMemory.buffer)
|
|
return 1
|
|
} catch (e) {}
|
|
}
|
|
function _emscripten_resize_heap(requestedSize) {
|
|
var oldSize = HEAPU8.length
|
|
requestedSize = requestedSize >>> 0
|
|
var maxHeapSize = getHeapMax()
|
|
if (requestedSize > maxHeapSize) {
|
|
return false
|
|
}
|
|
let alignUp = (x, multiple) => x + ((multiple - (x % multiple)) % multiple)
|
|
for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {
|
|
var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown)
|
|
overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296)
|
|
var newSize = Math.min(maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536))
|
|
var replacement = emscripten_realloc_buffer(newSize)
|
|
if (replacement) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
function getCFunc(ident) {
|
|
var func = Module["_" + ident]
|
|
return func
|
|
}
|
|
function ccall(ident, returnType, argTypes, args, opts) {
|
|
var toC = {
|
|
string: str => {
|
|
var ret = 0
|
|
if (str !== null && str !== undefined && str !== 0) {
|
|
var len = (str.length << 2) + 1
|
|
ret = stackAlloc(len)
|
|
stringToUTF8(str, ret, len)
|
|
}
|
|
return ret
|
|
},
|
|
array: arr => {
|
|
var ret = stackAlloc(arr.length)
|
|
writeArrayToMemory(arr, ret)
|
|
return ret
|
|
},
|
|
}
|
|
function convertReturnValue(ret) {
|
|
if (returnType === "string") {
|
|
return UTF8ToString(ret)
|
|
}
|
|
if (returnType === "boolean") return Boolean(ret)
|
|
return ret
|
|
}
|
|
var func = getCFunc(ident)
|
|
var cArgs = []
|
|
var stack = 0
|
|
if (args) {
|
|
for (var i = 0; i < args.length; i++) {
|
|
var converter = toC[argTypes[i]]
|
|
if (converter) {
|
|
if (stack === 0) stack = stackSave()
|
|
cArgs[i] = converter(args[i])
|
|
} else {
|
|
cArgs[i] = args[i]
|
|
}
|
|
}
|
|
}
|
|
var ret = func.apply(null, cArgs)
|
|
function onDone(ret) {
|
|
if (stack !== 0) stackRestore(stack)
|
|
return convertReturnValue(ret)
|
|
}
|
|
ret = onDone(ret)
|
|
return ret
|
|
}
|
|
function cwrap(ident, returnType, argTypes, opts) {
|
|
argTypes = argTypes || []
|
|
var numericArgs = argTypes.every(type => type === "number" || type === "boolean")
|
|
var numericRet = returnType !== "string"
|
|
if (numericRet && numericArgs && !opts) {
|
|
return getCFunc(ident)
|
|
}
|
|
return function () {
|
|
return ccall(ident, returnType, argTypes, arguments, opts)
|
|
}
|
|
}
|
|
var asmLibraryArg = { a: _emscripten_resize_heap }
|
|
var asm = createWasm()
|
|
var ___wasm_call_ctors = (Module["___wasm_call_ctors"] = function () {
|
|
return (___wasm_call_ctors = Module["___wasm_call_ctors"] = Module["asm"]["c"]).apply(null, arguments)
|
|
})
|
|
var _get_seed_after_roll = (Module["_get_seed_after_roll"] = function () {
|
|
return (_get_seed_after_roll = Module["_get_seed_after_roll"] = Module["asm"]["d"]).apply(null, arguments)
|
|
})
|
|
var _get_seed = (Module["_get_seed"] = function () {
|
|
return (_get_seed = Module["_get_seed"] = Module["asm"]["e"]).apply(null, arguments)
|
|
})
|
|
var _refine_seed = (Module["_refine_seed"] = function () {
|
|
return (_refine_seed = Module["_refine_seed"] = Module["asm"]["f"]).apply(null, arguments)
|
|
})
|
|
var _malloc = (Module["_malloc"] = function () {
|
|
return (_malloc = Module["_malloc"] = Module["asm"]["h"]).apply(null, arguments)
|
|
})
|
|
var _free = (Module["_free"] = function () {
|
|
return (_free = Module["_free"] = Module["asm"]["i"]).apply(null, arguments)
|
|
})
|
|
var stackSave = (Module["stackSave"] = function () {
|
|
return (stackSave = Module["stackSave"] = Module["asm"]["j"]).apply(null, arguments)
|
|
})
|
|
var stackRestore = (Module["stackRestore"] = function () {
|
|
return (stackRestore = Module["stackRestore"] = Module["asm"]["k"]).apply(null, arguments)
|
|
})
|
|
var stackAlloc = (Module["stackAlloc"] = function () {
|
|
return (stackAlloc = Module["stackAlloc"] = Module["asm"]["l"]).apply(null, arguments)
|
|
})
|
|
Module["ccall"] = ccall
|
|
Module["cwrap"] = cwrap
|
|
var calledRun
|
|
dependenciesFulfilled = function runCaller() {
|
|
if (!calledRun) run()
|
|
if (!calledRun) dependenciesFulfilled = runCaller
|
|
}
|
|
function run(args) {
|
|
args = args || arguments_
|
|
if (runDependencies > 0) {
|
|
return
|
|
}
|
|
preRun()
|
|
if (runDependencies > 0) {
|
|
return
|
|
}
|
|
function doRun() {
|
|
if (calledRun) return
|
|
calledRun = true
|
|
Module["calledRun"] = true
|
|
if (ABORT) return
|
|
initRuntime()
|
|
if (Module["onRuntimeInitialized"]) Module["onRuntimeInitialized"]()
|
|
postRun()
|
|
}
|
|
if (Module["setStatus"]) {
|
|
Module["setStatus"]("Running...")
|
|
setTimeout(function () {
|
|
setTimeout(function () {
|
|
Module["setStatus"]("")
|
|
}, 1)
|
|
doRun()
|
|
}, 1)
|
|
} else {
|
|
doRun()
|
|
}
|
|
}
|
|
if (Module["preInit"]) {
|
|
if (typeof Module["preInit"] == "function") Module["preInit"] = [Module["preInit"]]
|
|
while (Module["preInit"].length > 0) {
|
|
Module["preInit"].pop()()
|
|
}
|
|
}
|
|
run()
|
|
|
|
function wrapSeedAfterRoll(Module) {
|
|
// JS-friendly wrapper around the WASM call
|
|
return function (seed, sequence, drinks, brand) {
|
|
const length_sequence = sequence.length
|
|
const length_drinks = drinks.length
|
|
|
|
const b1 = new Uint32Array(sequence)
|
|
const b2 = new Uint32Array(drinks)
|
|
|
|
// set up input arrays with the input data
|
|
const buffer1 = Module._malloc(b1.length * b1.BYTES_PER_ELEMENT)
|
|
const buffer2 = Module._malloc(b2.length * b2.BYTES_PER_ELEMENT)
|
|
Module.HEAPU32.set(b1, buffer1 >> 2)
|
|
Module.HEAPU32.set(b2, buffer2 >> 2)
|
|
|
|
// make the call
|
|
const result = Module.ccall(
|
|
"get_seed_after_roll",
|
|
"number",
|
|
["number", "number", "number", "number", "number", "number"],
|
|
[seed, buffer1, length_sequence, buffer2, length_drinks, brand]
|
|
)
|
|
|
|
Module._free(buffer)
|
|
return result
|
|
}
|
|
}
|
|
|
|
function wrapSeed(Module) {
|
|
// JS-friendly wrapper around the WASM call
|
|
return function (sequence, drinks, brand, max_results) {
|
|
const length_sequence = sequence.length
|
|
const length_drinks = drinks.length
|
|
|
|
const b1 = new Uint32Array(sequence)
|
|
const b2 = new Uint32Array(drinks)
|
|
|
|
// set up input arrays with the input data
|
|
const buffer1 = Module._malloc(b1.length * b1.BYTES_PER_ELEMENT)
|
|
const buffer2 = Module._malloc(b2.length * b2.BYTES_PER_ELEMENT)
|
|
Module.HEAPU32.set(b1, buffer1 >> 2)
|
|
Module.HEAPU32.set(b2, buffer2 >> 2)
|
|
|
|
// allocate memory for the result array
|
|
const resultBuffer = Module._malloc(max_results * b1.BYTES_PER_ELEMENT)
|
|
// make the call
|
|
const resultPointer = Module.ccall(
|
|
"get_seed",
|
|
"number",
|
|
["number", "number", "number", "number", "number", "number", "number"],
|
|
[buffer1, length_sequence, buffer2, length_drinks, resultBuffer, max_results, brand]
|
|
)
|
|
// get the data from the returned pointer into an flat array
|
|
const resultFlatArray = []
|
|
for (let i = 0; i < max_results; i++) {
|
|
const r = Module.HEAPU32[resultPointer / Uint32Array.BYTES_PER_ELEMENT + i]
|
|
if (r === 0) {
|
|
break
|
|
} else {
|
|
resultFlatArray.push(r)
|
|
}
|
|
}
|
|
Module._free(buffer1)
|
|
Module._free(buffer2)
|
|
Module._free(resultBuffer)
|
|
return resultFlatArray
|
|
}
|
|
}
|
|
|
|
function wrapSeedRefine(Module) {
|
|
// JS-friendly wrapper around the WASM call
|
|
return function (sequence, seed_refine_list, drinks, brand) {
|
|
const length_sequence = sequence.length
|
|
const length_drinks = drinks.length
|
|
const length_refine = seed_refine_list.length
|
|
const max_results = length_refine
|
|
|
|
const b1 = new Uint32Array(sequence)
|
|
const b2 = new Uint32Array(drinks)
|
|
const b3 = new Uint32Array(seed_refine_list)
|
|
|
|
// set up input arrays with the input data
|
|
const buffer1 = Module._malloc(b1.length * b1.BYTES_PER_ELEMENT)
|
|
const buffer2 = Module._malloc(b2.length * b2.BYTES_PER_ELEMENT)
|
|
const buffer3 = Module._malloc(b3.length * b3.BYTES_PER_ELEMENT)
|
|
Module.HEAPU32.set(b1, buffer1 >> 2)
|
|
Module.HEAPU32.set(b2, buffer2 >> 2)
|
|
Module.HEAPU32.set(b3, buffer3 >> 2)
|
|
|
|
// allocate memory for the result array
|
|
const resultBuffer = Module._malloc(max_results * b1.BYTES_PER_ELEMENT)
|
|
// make the call
|
|
const resultPointer = Module.ccall(
|
|
"refine_seed",
|
|
"number",
|
|
["number", "number", "number", "number", "number", "number", "number", "number", "number"],
|
|
[buffer1, length_sequence, buffer2, length_drinks, resultBuffer, max_results, buffer3, length_refine, brand]
|
|
)
|
|
// get the data from the returned pointer into an flat array
|
|
const resultFlatArray = []
|
|
for (let i = 0; i < max_results; i++) {
|
|
const r = Module.HEAPU32[resultPointer / Uint32Array.BYTES_PER_ELEMENT + i]
|
|
if (r === 0) {
|
|
break
|
|
} else {
|
|
resultFlatArray.push(r)
|
|
}
|
|
}
|
|
Module._free(buffer1)
|
|
Module._free(buffer2)
|
|
Module._free(buffer3)
|
|
Module._free(resultBuffer)
|
|
return resultFlatArray
|
|
}
|
|
}
|
|
|
|
onmessage = e => {
|
|
const sequence = e.data.sequence
|
|
const drinks = e.data.drinks
|
|
const brand = e.data.brand
|
|
const refine_max = e.data.refine_max
|
|
const get_seed_after_roll = wrapSeedAfterRoll(Module)
|
|
const gear_seed = wrapSeed(Module)
|
|
const seed_refine = wrapSeedRefine(Module)
|
|
let res
|
|
if (e.data.displaySequence === undefined) {
|
|
res = gear_seed(sequence, drinks, brand, refine_max).map(elem => {
|
|
return { Start: elem, Seed: `0x${(get_seed_after_roll(elem, sequence, drinks, brand) >>> 0).toString(16)}` }
|
|
})
|
|
} else {
|
|
res = seed_refine(
|
|
sequence,
|
|
e.data.displaySequence.map(elem => elem.Start),
|
|
drinks,
|
|
brand
|
|
).map(elem => {
|
|
return { Start: elem, Seed: `0x${(get_seed_after_roll(elem, sequence, drinks, brand) >>> 0).toString(16)}` }
|
|
})
|
|
}
|
|
postMessage({
|
|
res,
|
|
})
|
|
}
|