babylon-box3d 0.8.0 → 0.9.0
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.
- package/README.md +25 -6
- package/lib/esm/box3d.d.ts +6 -0
- package/lib/esm/box3d.js +2 -2
- package/lib/esm/box3d.wasm +0 -0
- package/lib/esm-f64/box3d.d.ts +6 -0
- package/lib/esm-f64/box3d.js +2 -2
- package/lib/esm-f64/box3d.wasm +0 -0
- package/lib/esm-f64-threads/box3d.d.ts +6 -0
- package/lib/esm-f64-threads/box3d.js +2 -2
- package/lib/esm-f64-threads/box3d.wasm +0 -0
- package/lib/esm-threads/box3d.d.ts +6 -0
- package/lib/esm-threads/box3d.js +2 -2
- package/lib/esm-threads/box3d.wasm +0 -0
- package/lib/node/box3d.d.ts +6 -0
- package/lib/node/box3d.mjs +2 -2
- package/lib/node/box3d.wasm +0 -0
- package/lib/node-f64/box3d.d.ts +6 -0
- package/lib/node-f64/box3d.mjs +2 -2
- package/lib/node-f64/box3d.wasm +0 -0
- package/lib/node-f64-threads/box3d.d.ts +6 -0
- package/lib/node-f64-threads/box3d.mjs +2 -2
- package/lib/node-f64-threads/box3d.wasm +0 -0
- package/lib/node-threads/box3d.d.ts +6 -0
- package/lib/node-threads/box3d.mjs +2 -2
- package/lib/node-threads/box3d.wasm +0 -0
- package/lib/umd/box3d.umd.js +2 -2
- package/lib/umd/box3d.umd.wasm +0 -0
- package/package.json +1 -1
- package/umd/babylon.box3d.js +1 -1
- package/umd/babylon.box3d.min.js +1 -1
- package/wasm/box3d_shim.c +39 -0
|
@@ -57,6 +57,9 @@ export interface Box3DExports {
|
|
|
57
57
|
_bx_World_GetMaximumLinearSpeed(world: number): number;
|
|
58
58
|
_bx_World_EnableSleeping(world: number, flag: number): void;
|
|
59
59
|
_bx_World_EnableContinuous(world: number, flag: number): void;
|
|
60
|
+
/** Box3D's clock while this world steps (wasm/patches/0007), on by default: off, a step reads no clock and the stats' timings are 0. */
|
|
61
|
+
_bx_World_EnableTimer(world: number, flag: number): void;
|
|
62
|
+
_bx_World_IsTimerEnabled(world: number): number;
|
|
60
63
|
_bx_World_SetContactTuning(world: number, hertz: number, dampingRatio: number, contactSpeed: number): void;
|
|
61
64
|
_bx_World_Explode(world: number, px: number, py: number, pz: number, radius: number, falloff: number, impulsePerArea: number): void;
|
|
62
65
|
_bx_World_GetAwakeBodyCount(world: number): number;
|
|
@@ -109,6 +112,9 @@ export interface Box3DExports {
|
|
|
109
112
|
/** Continuous collision for this body alone, on by default; the world's switch still applies. */
|
|
110
113
|
_bx_Body_EnableContinuous(body: number, flag: number): void;
|
|
111
114
|
_bx_Body_IsContinuousEnabled(body: number): number;
|
|
115
|
+
/** The fat AABB margin of the body's shapes, m (wasm/patches/0008): 0, the default, leaves each shape its own. */
|
|
116
|
+
_bx_Body_SetAabbMargin(body: number, margin: number): void;
|
|
117
|
+
_bx_Body_GetAabbMargin(body: number): number;
|
|
112
118
|
/**
|
|
113
119
|
* Crushable contacts for the body's shape `index`: each of its contacts pushes with at most `maxForce` newtons,
|
|
114
120
|
* and a plastic one (1) keeps its overlap instead of pushing out. A `maxForce` of zero or less makes it rigid.
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
async function Box3D(moduleArg={}){var Module=moduleArg;var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=!!globalThis.WorkerGlobalScope;var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";var ENVIRONMENT_IS_PTHREAD=ENVIRONMENT_IS_WORKER&&globalThis.name=="em-pthread";if(ENVIRONMENT_IS_NODE){const{createRequire}=await import("node:module");var require=createRequire(import.meta.url);var worker_threads=require("node:worker_threads");globalThis.Worker=worker_threads.Worker;ENVIRONMENT_IS_WORKER=!worker_threads.isMainThread;ENVIRONMENT_IS_PTHREAD=ENVIRONMENT_IS_WORKER&&worker_threads.workerData=="em-pthread"}var programArgs=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=import.meta.url;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("node:fs");if(_scriptName.startsWith("file:")){scriptDirectory=require("node:path").dirname(require("node:url").fileURLToPath(_scriptName))+"/"}readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}programArgs=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}if(!ENVIRONMENT_IS_NODE){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=async url=>{var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var defaultPrint=console.log.bind(console);var defaultPrintErr=console.error.bind(console);if(ENVIRONMENT_IS_NODE){var utils=require("node:util");var stringify=a=>typeof a=="object"?utils.inspect(a):a;defaultPrint=(...args)=>fs.writeSync(1,args.map(stringify).join(" ")+"\n");defaultPrintErr=(...args)=>fs.writeSync(2,args.map(stringify).join(" ")+"\n")}var out=defaultPrint;var err=defaultPrintErr;var wasmBinary;var wasmModule;var ABORT=false;var EXITSTATUS;var isFileURI=filename=>filename.startsWith("file://");class EmscriptenEH{}class EmscriptenSjLj extends EmscriptenEH{}function growMemViews(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}}if(ENVIRONMENT_IS_NODE&&ENVIRONMENT_IS_PTHREAD){globalThis.self=globalThis;var parentPort=worker_threads.parentPort;if(!globalThis.postMessage){parentPort.on("message",msg=>globalThis.onmessage?.({data:msg}));globalThis.postMessage=msg=>parentPort.postMessage(msg)}process.on("uncaughtException",err=>{postMessage({cmd:8,error:err});process.exit(1)})}var startWorker;if(ENVIRONMENT_IS_PTHREAD){var initializedJS=false;self.onunhandledrejection=e=>{throw e.reason||e};function handleMessage(e){try{var msgData=e.data;var cmd=msgData.cmd;if(cmd==1){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);startWorker=()=>{postMessage({cmd:3});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};for(const handler of msgData.handlers){if(!Module[handler]||Module[handler].proxy){Module[handler]=(...args)=>{postMessage({cmd:9,handler,args})};if(handler=="print")out=Module[handler];if(handler=="printErr")err=Module[handler]}}wasmMemory=msgData.wasmMemory;updateMemoryViews();wasmModule=msgData.wasmModule;createWasm();run();startWorker()}else if(cmd==2){establishStackSpace(msgData.pthread_ptr);__emscripten_thread_init(msgData.pthread_ptr,0,0,1,0,0);PThread.threadInitTLS();__emscripten_thread_mailbox_await(msgData.pthread_ptr);if(!initializedJS){initializedJS=true}try{invokeEntryPoint(msgData.start_routine,msgData.arg)}catch(ex){if(ex!="unwind"){throw ex}}}else if(cmd==4){if(initializedJS){checkMailbox()}}else if(cmd){err(`worker: received unknown command ${cmd}`);err(msgData)}}catch(ex){if(runtimeInitialized)__emscripten_thread_crashed();throw ex}}self.onmessage=handleMessage}var runtimeInitialized=false;function getMemoryBuffer(){return wasmMemory.buffer}function updateMemoryViews(){if(HEAP8?.buffer?.growable)return;var b=getMemoryBuffer();HEAP8=new Int8Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b)}function initMemory(){if(ENVIRONMENT_IS_PTHREAD){return}{var INITIAL_MEMORY=33554432;wasmMemory=new WebAssembly.Memory({initial:INITIAL_MEMORY/65536,maximum:32768,shared:true})}updateMemoryViews()}function preRun(){var preRun=Module["preRun"];if(preRun){if(typeof preRun=="function")preRun=[preRun];onPreRuns.push(...preRun)}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;if(ENVIRONMENT_IS_PTHREAD)return;wasmExports["__wasm_call_ctors"]()}function postRun(){var postRun=Module["postRun"];if(postRun){if(typeof postRun=="function")postRun=[postRun];onPostRuns.push(...postRun)}callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what=`Aborted(${what})`;err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var wasmBinaryFile;function findWasmBinary(){if(Module["locateFile"]){return locateFile("box3d.wasm")}return new URL("box3d.wasm",import.meta.url).href}function getBinarySync(file){if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){assignWasmImports();var imports={env:wasmImports,wasi_snapshot_preview1:wasmImports};return imports}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;registerTLSInit(wasmExports["_emscripten_tls_init"]);assignWasmExports(wasmExports);wasmModule=module;return wasmExports}function receiveInstantiationResult(result){return receiveInstance(result["instance"],result["module"])}var info=getWasmImports();var instantiateWasm=Module["instantiateWasm"];if(instantiateWasm){return new Promise(resolve=>{instantiateWasm(info,(inst,mod)=>resolve(receiveInstance(inst,mod)))})}if(ENVIRONMENT_IS_PTHREAD){var instance=new WebAssembly.Instance(wasmModule,getWasmImports());return receiveInstance(instance,wasmModule)}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var HEAP8;var terminateWorker=worker=>{worker.terminate();worker.onmessage=e=>{}};var cleanupThread=pthread_ptr=>{var worker=PThread.pthreads[pthread_ptr];PThread.returnWorkerToPool(worker)};var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var dependenciesPromise=null;var resolveRunDependencies=async()=>dependenciesPromise;var runDependencies=0;var dependenciesPromiseResolve=null;var removeRunDependency=id=>{runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(!runDependencies){dependenciesPromiseResolve()}};var addRunDependency=id=>{if(!runDependencies){dependenciesPromise=new Promise(resolve=>dependenciesPromiseResolve=resolve)}runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)};var spawnThread=threadParams=>{var worker=PThread.getNewWorker();if(!worker){return 6}PThread.pthreads[threadParams.pthread_ptr]=worker;worker.pthread_ptr=threadParams.pthread_ptr;var msg={cmd:2,start_routine:threadParams.startRoutine,arg:threadParams.arg,pthread_ptr:threadParams.pthread_ptr};worker.postMessage(msg,threadParams.transferList);return 0};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var stackSave=()=>_emscripten_stack_get_current();var stackRestore=val=>__emscripten_stack_restore(val);var stackAlloc=sz=>__emscripten_stack_alloc(sz);var HEAPF64;var HEAP64;var proxyToMainThread=(funcIndex,emAsmAddr,proxyMode,...callArgs)=>{var bufSize=8*callArgs.length*2;var sp=stackSave();var args=stackAlloc(bufSize);var b=args>>3;for(var arg of callArgs){if(typeof arg=="bigint"){(growMemViews(),HEAP64)[b++]=1n;(growMemViews(),HEAP64)[b++]=arg}else{(growMemViews(),HEAP64)[b++]=0n;(growMemViews(),HEAPF64)[b++]=arg}}var rtn=__emscripten_run_js_on_main_thread(funcIndex,emAsmAddr,bufSize,args,proxyMode);stackRestore(sp);return rtn};function _proc_exit(code){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(0,0,1,code);EXITSTATUS=code;if(!keepRuntimeAlive()){PThread.terminateAllThreads();Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))}function exitOnMainThread(returnCode){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(1,0,0,returnCode);_exit(returnCode)}var exitJS=(status,implicit)=>{EXITSTATUS=status;if(ENVIRONMENT_IS_PTHREAD){exitOnMainThread(status);throw"unwind"}_proc_exit(status)};var _exit=exitJS;var waitAsyncPolyfilled=!Atomics.waitAsync||globalThis.navigator?.userAgent&&Number((navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./)||[])[2])<91;var HEAP32;var PThread={unusedWorkers:[],tlsInitFunctions:[],pthreads:{},init(){if(!ENVIRONMENT_IS_PTHREAD){PThread.initMainThread()}},initMainThread(){var pthreadPoolSize=8;while(pthreadPoolSize--){PThread.allocateUnusedWorker()}addOnPreRun(async()=>{var pthreadPoolReady=PThread.loadWasmModuleToAllWorkers();addRunDependency("loading-workers");await pthreadPoolReady;removeRunDependency("loading-workers")})},terminateAllThreads:()=>{for(var worker of Object.values(PThread.pthreads)){terminateWorker(worker)}for(var worker of PThread.unusedWorkers){terminateWorker(worker)}PThread.unusedWorkers=[];PThread.pthreads={}},clearMailboxAwait:pthread_ptr=>{if(!waitAsyncPolyfilled){Atomics.notify((growMemViews(),HEAP32),pthread_ptr>>2)}},terminateRuntime:()=>{PThread.terminateAllThreads();var pthread_ptr=_pthread_self();___set_thread_state(0,0,0,1);PThread.clearMailboxAwait(pthread_ptr)},returnWorkerToPool:worker=>{var pthread_ptr=worker.pthread_ptr;delete PThread.pthreads[pthread_ptr];PThread.unusedWorkers.push(worker);worker.pthread_ptr=0;PThread.clearMailboxAwait(pthread_ptr);__emscripten_thread_free_data(pthread_ptr)},threadInitTLS(){PThread.tlsInitFunctions.forEach(f=>f())},loadWasmModuleToWorker:worker=>new Promise(onFinishedLoading=>{worker.onmessage=e=>{var d=e.data;var cmd=d.cmd;if(d.targetThread&&d.targetThread!=_pthread_self()){var targetWorker=PThread.pthreads[d.targetThread];targetWorker?.postMessage(d);return}if(d==="setimmediate"||d==="_si"){worker.postMessage(d);return}switch(cmd){case 4:checkMailbox();break;case 5:spawnThread(d);break;case 6:callUserCallback(()=>cleanupThread(d.thread));break;case 3:if(ENVIRONMENT_IS_NODE&&!worker.strongref){worker.unref()}onFinishedLoading(worker);break;case 8:worker.onerror(d.error);break;case 9:Module[d.handler](...d.args);break;default:if(cmd)err(`worker sent an unknown command ${cmd}`)}};worker.onerror=e=>{var message="worker sent an error!";err(`${message} ${e.filename}:${e.lineno}: ${e.message}`);throw e};if(ENVIRONMENT_IS_NODE){worker.on("message",data=>worker.onmessage({data}));worker.on("error",e=>worker.onerror(e))}var handlers=[];var knownHandlers=["onExit","onAbort","print","printErr"];for(var handler of knownHandlers){if(Module.propertyIsEnumerable(handler)){handlers.push(handler)}}worker.postMessage({cmd:1,handlers,wasmMemory,wasmModule})}),async loadWasmModuleToAllWorkers(){if(ENVIRONMENT_IS_PTHREAD){return}let pthreadPoolReady=Promise.all(PThread.unusedWorkers.map(PThread.loadWasmModuleToWorker));return pthreadPoolReady},allocateUnusedWorker(){var worker;worker=new Worker(new URL("box3d.mjs",import.meta.url),{type:"module",workerData:"em-pthread",name:"em-pthread"});PThread.unusedWorkers.push(worker);return worker},getNewWorker(){if(PThread.unusedWorkers.length==0){var newWorker=PThread.allocateUnusedWorker();PThread.loadWasmModuleToWorker(newWorker)}return PThread.unusedWorkers.pop()}};var onPostRuns=[];var HEAPU32;function establishStackSpace(pthread_ptr){var stackHigh=(growMemViews(),HEAPU32)[pthread_ptr+48>>2];var stackSize=(growMemViews(),HEAPU32)[pthread_ptr+52>>2];var stackLow=stackHigh-stackSize;_emscripten_stack_set_limits(stackHigh,stackLow);stackRestore(stackHigh)}var wasmTableMirror=[];var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var invokeEntryPoint=(ptr,arg)=>{runtimeKeepaliveCounter=0;noExitRuntime=0;var result=getWasmTableEntry(ptr)(arg);function finish(result){if(keepRuntimeAlive()){EXITSTATUS=result;return}__emscripten_thread_exit(result)}finish(result)};var noExitRuntime=true;var registerTLSInit=tlsInitFunc=>PThread.tlsInitFunctions.push(tlsInitFunc);var wasmMemory;function pthreadCreateProxied(pthread_ptr,attr,startRoutine,arg){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(2,0,1,pthread_ptr,attr,startRoutine,arg);return ___pthread_create_js(pthread_ptr,attr,startRoutine,arg)}var _emscripten_has_threading_support=()=>!!globalThis.SharedArrayBuffer;var ___pthread_create_js=(pthread_ptr,attr,startRoutine,arg)=>{if(!_emscripten_has_threading_support()){return 6}var transferList=[];var error=0;if(ENVIRONMENT_IS_PTHREAD&&(!transferList.length||error)){return pthreadCreateProxied(pthread_ptr,attr,startRoutine,arg)}if(error)return error;var threadParams={startRoutine,pthread_ptr,arg,transferList};if(ENVIRONMENT_IS_PTHREAD){threadParams.cmd=5;postMessage(threadParams,transferList);return 0}return spawnThread(threadParams)};var __emscripten_init_main_thread_js=tb=>{var can_block=!ENVIRONMENT_IS_WEB;__emscripten_thread_init(tb,!ENVIRONMENT_IS_WORKER,1,can_block,1048576,false);PThread.threadInitTLS()};var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};var maybeExit=()=>{if(!keepRuntimeAlive()){try{if(ENVIRONMENT_IS_PTHREAD){if(_pthread_self())__emscripten_thread_exit(EXITSTATUS);return}_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){return}try{return func()}catch(e){handleException(e)}finally{maybeExit()}};var __emscripten_thread_mailbox_await=pthread_ptr=>{if(!waitAsyncPolyfilled){var wait=Atomics.waitAsync((growMemViews(),HEAP32),pthread_ptr>>2,pthread_ptr);wait.value.then(checkMailbox);var waitingAsync=pthread_ptr+112;Atomics.store((growMemViews(),HEAP32),waitingAsync>>2,1)}};var checkMailbox=()=>{var pthread_ptr=_pthread_self();if(!pthread_ptr)return;callUserCallback(()=>{__emscripten_thread_mailbox_await(pthread_ptr);__emscripten_check_mailbox()})};var __emscripten_notify_mailbox_postmessage=(targetThread,currThreadId)=>{if(targetThread==currThreadId){setTimeout(checkMailbox)}else if(ENVIRONMENT_IS_PTHREAD){postMessage({targetThread,cmd:4})}else{var worker=PThread.pthreads[targetThread];if(!worker){return}worker.postMessage({cmd:4})}};var proxiedJSCallArgs=[];var __emscripten_receive_on_main_thread_js=(funcIndex,emAsmAddr,callingThread,bufSize,args,ctx,ctxArgs)=>{proxiedJSCallArgs.length=0;var b=args>>3;var end=args+bufSize>>3;while(b<end){var arg;if((growMemViews(),HEAP64)[b++]){arg=(growMemViews(),HEAP64)[b++]}else{arg=(growMemViews(),HEAPF64)[b++]}proxiedJSCallArgs.push(arg)}var func=proxiedFunctionTable[funcIndex];PThread.currentProxiedOperationCallerThread=callingThread;var rtn=func(...proxiedJSCallArgs);PThread.currentProxiedOperationCallerThread=0;if(ctx){rtn.then(rtn=>__emscripten_run_js_on_main_thread_done(ctx,ctxArgs,rtn));return}return rtn};var __emscripten_thread_cleanup=thread=>{if(!ENVIRONMENT_IS_PTHREAD)cleanupThread(thread);else postMessage({cmd:6,thread})};var __emscripten_thread_set_strongref=thread=>{if(ENVIRONMENT_IS_NODE){var worker=PThread.pthreads[thread];worker.ref();worker.strongref=1}};var _emscripten_get_now=()=>performance.timeOrigin+performance.now();var _emscripten_date_now=()=>Date.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>num<INT53_MIN||num>INT53_MAX?NaN:Number(num);function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);(growMemViews(),HEAP64)[ptime>>3]=BigInt(nsec);return 0}var _emscripten_check_blocking_allowed=()=>{};var runtimeKeepalivePush=()=>{runtimeKeepaliveCounter+=1};var _emscripten_exit_with_live_runtime=()=>{runtimeKeepalivePush();throw"unwind"};var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var HEAPU8;var _emscripten_resize_heap=requestedSize=>{var oldSize=(growMemViews(),HEAPU8).length;requestedSize>>>=0;if(requestedSize<=oldSize){return false}var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};var printCharBuffers=[null,[],[]];var UTF8Decoder=globalThis.TextDecoder&&new TextDecoder;var findStringEnd=(heapOrArray,idx,maxBytesToRead,ignoreNul)=>{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.buffer instanceof ArrayBuffer?heapOrArray.subarray(idx,endPtr):heapOrArray.slice(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};var printChar=(stream,curr)=>{var buffer=printCharBuffers[stream];if(!curr||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer));buffer.length=0}else{buffer.push(curr)}};function _fd_write(fd,iov,iovcnt,pnum){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(3,0,1,fd,iov,iovcnt,pnum);var num=0;for(var i=0;i<iovcnt;i++){var ptr=(growMemViews(),HEAPU32)[iov>>2];var len=(growMemViews(),HEAPU32)[iov+4>>2];iov+=8;for(var j=0;j<len;j++){printChar(fd,(growMemViews(),HEAPU8)[ptr+j])}num+=len}(growMemViews(),HEAPU32)[pnum>>2]=num;return 0}var HEAPF32;PThread.init();{initMemory();if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["arguments"])programArgs=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];var preInit=Module["preInit"];if(preInit){if(typeof preInit=="function")Module["preInit"]=preInit=[preInit];while(preInit.length>0){preInit.shift()()}}}var proxiedFunctionTable=[_proc_exit,exitOnMainThread,pthreadCreateProxied,_fd_write];var _free,_bx_Scratch,_bx_Alloc,_malloc,_bx_Free,_bx_GetVersion,_bx_ScratchF64,_bx_IsDoublePrecision,_bx_GetRejectedSlotCount,_bx_Body_SetClipPlane,_bx_Body_GetClipPlane,_bx_GetMaxWorkers,_bx_CreateWorld,_bx_World_GetWorkerCount,_bx_DestroyWorld,_bx_ShapeDesc_Destroy,_bx_World_Step,_bx_World_SetGravity,_bx_World_SetMaximumLinearSpeed,_bx_World_GetMaximumLinearSpeed,_bx_World_EnableSleeping,_bx_World_EnableContinuous,_bx_World_SetContactTuning,_bx_World_Explode,_bx_World_GetAwakeBodyCount,_bx_World_GetJointEventCount,_bx_World_GetStackUsed,_bx_World_GetStats,_bx_MoveEventsPtr,_bx_ContactEventsPtr,_bx_SensorEventsPtr,_bx_World_GetMoveEvents,_bx_World_GetContactEvents,_bx_World_GetSensorEvents,_bx_CreateBody,_bx_DestroyBody,_bx_Body_SetType,_bx_Body_GetType,_bx_Body_SetTransform,_bx_Body_GetTransform,_bx_Body_SetTargetTransform,_bx_Body_SetLinearVelocity,_bx_Body_GetLinearVelocity,_bx_Body_SetAngularVelocity,_bx_Body_GetAngularVelocity,_bx_Body_SetLinearDamping,_bx_Body_GetLinearDamping,_bx_Body_SetAngularDamping,_bx_Body_GetAngularDamping,_bx_Body_SetGravityScale,_bx_Body_GetGravityScale,_bx_Body_ApplyForce,_bx_Body_ApplyForceToCenter,_bx_Body_ApplyTorque,_bx_Body_ApplyLinearImpulse,_bx_Body_ApplyLinearImpulseToCenter,_bx_Body_ApplyAngularImpulse,_bx_Body_SetAwake,_bx_Body_IsAwake,_bx_Body_EnableSleep,_bx_Body_SetBullet,_bx_Body_EnableContinuous,_bx_Body_IsContinuousEnabled,_bx_Body_SetShapeCrush,_bx_Body_GetShapeCrush,_bx_BodyContactsPtr,_bx_BodyContactPointsF64Ptr,_bx_Body_GetContacts,_bx_Body_AllowFastRotation,_bx_Body_SetMotionLocks,_bx_Body_GetAABB,_bx_Body_ComputeShapeMassData,_bx_Body_GetMassData,_bx_Body_SetMassDataFull,_bx_Body_SetMassData,_bx_Body_GetMotionLocks,_bx_Body_ApplyMassFromShapes,_bx_Body_GetShapeCount,_bx_Body_SetFeatureKey,_bx_Body_GetFeatureKey,_bx_Body_GetShapeFeatureKey,_bx_Body_SetEventFlags,_bx_Body_GetEventFlags,_bx_Body_EnableContactEvents,_bx_ShapeDesc_CreateSphere,_bx_ShapeDesc_CreateCapsule,_bx_ShapeDesc_CreateBox,_bx_ShapeDesc_CreateCylinder,_bx_ShapeDesc_CreateHull,_bx_ShapeDesc_CreateMesh,_bx_ShapeDesc_CreateHeightField,_bx_ShapeDesc_GetGeometryBytes,_bx_ShapeDesc_GetGeometryByteCount,_bx_ShapeDesc_CreateMeshFromBytes,_bx_ShapeDesc_CreateHeightFieldFromBytes,_bx_ShapeDesc_CreateContainer,_bx_ShapeDesc_AddChild,_bx_ShapeDesc_RemoveChild,_bx_ShapeDesc_GetChildCount,_bx_ShapeDesc_GetKind,_bx_ShapeDesc_SetMaterial,_bx_ShapeDesc_GetFriction,_bx_ShapeDesc_GetRestitution,_bx_ShapeDesc_SetDensity,_bx_ShapeDesc_GetDensity,_bx_ShapeDesc_SetFilter,_bx_ShapeDesc_GetCategoryBits,_bx_ShapeDesc_GetMaskBits,_bx_ShapeDesc_SetGroup,_bx_ShapeDesc_SetRollingResistance,_bx_ShapeDesc_SetSensor,_bx_ShapeDesc_IsSensor,_bx_ShapeDesc_SetInvokeContactCreation,_bx_ShapeDesc_GetInvokeContactCreation,_bx_ShapeDesc_GetAABB,_bx_GetShapeBuildCount,_bx_GetShapeDescCount,_bx_Body_SetShape,_bx_Body_SetShapeHull,_bx_Body_TranslateShape,_bx_Body_SetShapeFilter,_bx_Body_RemoveShape,_bx_Body_HasShape,_bx_Body_GetShapeInfo,_bx_Body_SyncShapeDesc,_bx_Body_GetShapeDesc,_bx_ShapeDesc_BuildDebugGeometry,_bx_DebugPositionsPtr,_bx_DebugIndicesPtr,_bx_DebugIndexCount,_bx_CreateJoint,_bx_DestroyJoint,_bx_Joint_IsValid,_bx_Joint_SetCollideConnected,_bx_Joint_SetConstraintTuning,_bx_Joint_WakeBodies,_bx_Joint_EnableLimit,_bx_Joint_SetLimits,_bx_Joint_SetTwistLimits,_bx_Joint_EnableMotor,_bx_Joint_UpdateMotorFrame,_bx_Joint_SetSphericalMotor,_bx_Joint_SetSphericalTarget,_bx_Joint_SetMotorSpeed,_bx_Joint_SetMaxMotorForce,_bx_Joint_EnableSpring,_bx_Joint_SetSpring,_bx_Joint_SetTarget,_bx_Joint_GetPosition,_bx_ComputeAlignedFrameB,_bx_WheelJoint_SetSpinMotorSpeed,_bx_WheelJoint_SetMaxSpinTorque,_bx_WheelJoint_EnableSpinMotor,_bx_WheelJoint_SetTargetSteeringAngle,_bx_WheelJoint_SetSuspension,_bx_RayHitsPtr,_bx_RayHitPointsF64Ptr,_bx_World_CastRay,_bx_World_CastShape,_bx_OverlapsPtr,_bx_World_OverlapShape,_bx_GeometryPtr,_bx_Body_GetShapeGeometry,__emscripten_tls_init,_pthread_self,__emscripten_thread_init,___set_thread_state,__emscripten_thread_crashed,__emscripten_run_js_on_main_thread_done,__emscripten_run_js_on_main_thread,__emscripten_thread_free_data,__emscripten_thread_exit,__emscripten_check_mailbox,_emscripten_stack_set_limits,__emscripten_stack_restore,__emscripten_stack_alloc,_emscripten_stack_get_current,__indirect_function_table,wasmTable;function assignWasmExports(wasmExports){_free=Module["_free"]=wasmExports["free"];_bx_Scratch=Module["_bx_Scratch"]=wasmExports["bx_Scratch"];_bx_Alloc=Module["_bx_Alloc"]=wasmExports["bx_Alloc"];_malloc=Module["_malloc"]=wasmExports["malloc"];_bx_Free=Module["_bx_Free"]=wasmExports["bx_Free"];_bx_GetVersion=Module["_bx_GetVersion"]=wasmExports["bx_GetVersion"];_bx_ScratchF64=Module["_bx_ScratchF64"]=wasmExports["bx_ScratchF64"];_bx_IsDoublePrecision=Module["_bx_IsDoublePrecision"]=wasmExports["bx_IsDoublePrecision"];_bx_GetRejectedSlotCount=Module["_bx_GetRejectedSlotCount"]=wasmExports["bx_GetRejectedSlotCount"];_bx_Body_SetClipPlane=Module["_bx_Body_SetClipPlane"]=wasmExports["bx_Body_SetClipPlane"];_bx_Body_GetClipPlane=Module["_bx_Body_GetClipPlane"]=wasmExports["bx_Body_GetClipPlane"];_bx_GetMaxWorkers=Module["_bx_GetMaxWorkers"]=wasmExports["bx_GetMaxWorkers"];_bx_CreateWorld=Module["_bx_CreateWorld"]=wasmExports["bx_CreateWorld"];_bx_World_GetWorkerCount=Module["_bx_World_GetWorkerCount"]=wasmExports["bx_World_GetWorkerCount"];_bx_DestroyWorld=Module["_bx_DestroyWorld"]=wasmExports["bx_DestroyWorld"];_bx_ShapeDesc_Destroy=Module["_bx_ShapeDesc_Destroy"]=wasmExports["bx_ShapeDesc_Destroy"];_bx_World_Step=Module["_bx_World_Step"]=wasmExports["bx_World_Step"];_bx_World_SetGravity=Module["_bx_World_SetGravity"]=wasmExports["bx_World_SetGravity"];_bx_World_SetMaximumLinearSpeed=Module["_bx_World_SetMaximumLinearSpeed"]=wasmExports["bx_World_SetMaximumLinearSpeed"];_bx_World_GetMaximumLinearSpeed=Module["_bx_World_GetMaximumLinearSpeed"]=wasmExports["bx_World_GetMaximumLinearSpeed"];_bx_World_EnableSleeping=Module["_bx_World_EnableSleeping"]=wasmExports["bx_World_EnableSleeping"];_bx_World_EnableContinuous=Module["_bx_World_EnableContinuous"]=wasmExports["bx_World_EnableContinuous"];_bx_World_SetContactTuning=Module["_bx_World_SetContactTuning"]=wasmExports["bx_World_SetContactTuning"];_bx_World_Explode=Module["_bx_World_Explode"]=wasmExports["bx_World_Explode"];_bx_World_GetAwakeBodyCount=Module["_bx_World_GetAwakeBodyCount"]=wasmExports["bx_World_GetAwakeBodyCount"];_bx_World_GetJointEventCount=Module["_bx_World_GetJointEventCount"]=wasmExports["bx_World_GetJointEventCount"];_bx_World_GetStackUsed=Module["_bx_World_GetStackUsed"]=wasmExports["bx_World_GetStackUsed"];_bx_World_GetStats=Module["_bx_World_GetStats"]=wasmExports["bx_World_GetStats"];_bx_MoveEventsPtr=Module["_bx_MoveEventsPtr"]=wasmExports["bx_MoveEventsPtr"];_bx_ContactEventsPtr=Module["_bx_ContactEventsPtr"]=wasmExports["bx_ContactEventsPtr"];_bx_SensorEventsPtr=Module["_bx_SensorEventsPtr"]=wasmExports["bx_SensorEventsPtr"];_bx_World_GetMoveEvents=Module["_bx_World_GetMoveEvents"]=wasmExports["bx_World_GetMoveEvents"];_bx_World_GetContactEvents=Module["_bx_World_GetContactEvents"]=wasmExports["bx_World_GetContactEvents"];_bx_World_GetSensorEvents=Module["_bx_World_GetSensorEvents"]=wasmExports["bx_World_GetSensorEvents"];_bx_CreateBody=Module["_bx_CreateBody"]=wasmExports["bx_CreateBody"];_bx_DestroyBody=Module["_bx_DestroyBody"]=wasmExports["bx_DestroyBody"];_bx_Body_SetType=Module["_bx_Body_SetType"]=wasmExports["bx_Body_SetType"];_bx_Body_GetType=Module["_bx_Body_GetType"]=wasmExports["bx_Body_GetType"];_bx_Body_SetTransform=Module["_bx_Body_SetTransform"]=wasmExports["bx_Body_SetTransform"];_bx_Body_GetTransform=Module["_bx_Body_GetTransform"]=wasmExports["bx_Body_GetTransform"];_bx_Body_SetTargetTransform=Module["_bx_Body_SetTargetTransform"]=wasmExports["bx_Body_SetTargetTransform"];_bx_Body_SetLinearVelocity=Module["_bx_Body_SetLinearVelocity"]=wasmExports["bx_Body_SetLinearVelocity"];_bx_Body_GetLinearVelocity=Module["_bx_Body_GetLinearVelocity"]=wasmExports["bx_Body_GetLinearVelocity"];_bx_Body_SetAngularVelocity=Module["_bx_Body_SetAngularVelocity"]=wasmExports["bx_Body_SetAngularVelocity"];_bx_Body_GetAngularVelocity=Module["_bx_Body_GetAngularVelocity"]=wasmExports["bx_Body_GetAngularVelocity"];_bx_Body_SetLinearDamping=Module["_bx_Body_SetLinearDamping"]=wasmExports["bx_Body_SetLinearDamping"];_bx_Body_GetLinearDamping=Module["_bx_Body_GetLinearDamping"]=wasmExports["bx_Body_GetLinearDamping"];_bx_Body_SetAngularDamping=Module["_bx_Body_SetAngularDamping"]=wasmExports["bx_Body_SetAngularDamping"];_bx_Body_GetAngularDamping=Module["_bx_Body_GetAngularDamping"]=wasmExports["bx_Body_GetAngularDamping"];_bx_Body_SetGravityScale=Module["_bx_Body_SetGravityScale"]=wasmExports["bx_Body_SetGravityScale"];_bx_Body_GetGravityScale=Module["_bx_Body_GetGravityScale"]=wasmExports["bx_Body_GetGravityScale"];_bx_Body_ApplyForce=Module["_bx_Body_ApplyForce"]=wasmExports["bx_Body_ApplyForce"];_bx_Body_ApplyForceToCenter=Module["_bx_Body_ApplyForceToCenter"]=wasmExports["bx_Body_ApplyForceToCenter"];_bx_Body_ApplyTorque=Module["_bx_Body_ApplyTorque"]=wasmExports["bx_Body_ApplyTorque"];_bx_Body_ApplyLinearImpulse=Module["_bx_Body_ApplyLinearImpulse"]=wasmExports["bx_Body_ApplyLinearImpulse"];_bx_Body_ApplyLinearImpulseToCenter=Module["_bx_Body_ApplyLinearImpulseToCenter"]=wasmExports["bx_Body_ApplyLinearImpulseToCenter"];_bx_Body_ApplyAngularImpulse=Module["_bx_Body_ApplyAngularImpulse"]=wasmExports["bx_Body_ApplyAngularImpulse"];_bx_Body_SetAwake=Module["_bx_Body_SetAwake"]=wasmExports["bx_Body_SetAwake"];_bx_Body_IsAwake=Module["_bx_Body_IsAwake"]=wasmExports["bx_Body_IsAwake"];_bx_Body_EnableSleep=Module["_bx_Body_EnableSleep"]=wasmExports["bx_Body_EnableSleep"];_bx_Body_SetBullet=Module["_bx_Body_SetBullet"]=wasmExports["bx_Body_SetBullet"];_bx_Body_EnableContinuous=Module["_bx_Body_EnableContinuous"]=wasmExports["bx_Body_EnableContinuous"];_bx_Body_IsContinuousEnabled=Module["_bx_Body_IsContinuousEnabled"]=wasmExports["bx_Body_IsContinuousEnabled"];_bx_Body_SetShapeCrush=Module["_bx_Body_SetShapeCrush"]=wasmExports["bx_Body_SetShapeCrush"];_bx_Body_GetShapeCrush=Module["_bx_Body_GetShapeCrush"]=wasmExports["bx_Body_GetShapeCrush"];_bx_BodyContactsPtr=Module["_bx_BodyContactsPtr"]=wasmExports["bx_BodyContactsPtr"];_bx_BodyContactPointsF64Ptr=Module["_bx_BodyContactPointsF64Ptr"]=wasmExports["bx_BodyContactPointsF64Ptr"];_bx_Body_GetContacts=Module["_bx_Body_GetContacts"]=wasmExports["bx_Body_GetContacts"];_bx_Body_AllowFastRotation=Module["_bx_Body_AllowFastRotation"]=wasmExports["bx_Body_AllowFastRotation"];_bx_Body_SetMotionLocks=Module["_bx_Body_SetMotionLocks"]=wasmExports["bx_Body_SetMotionLocks"];_bx_Body_GetAABB=Module["_bx_Body_GetAABB"]=wasmExports["bx_Body_GetAABB"];_bx_Body_ComputeShapeMassData=Module["_bx_Body_ComputeShapeMassData"]=wasmExports["bx_Body_ComputeShapeMassData"];_bx_Body_GetMassData=Module["_bx_Body_GetMassData"]=wasmExports["bx_Body_GetMassData"];_bx_Body_SetMassDataFull=Module["_bx_Body_SetMassDataFull"]=wasmExports["bx_Body_SetMassDataFull"];_bx_Body_SetMassData=Module["_bx_Body_SetMassData"]=wasmExports["bx_Body_SetMassData"];_bx_Body_GetMotionLocks=Module["_bx_Body_GetMotionLocks"]=wasmExports["bx_Body_GetMotionLocks"];_bx_Body_ApplyMassFromShapes=Module["_bx_Body_ApplyMassFromShapes"]=wasmExports["bx_Body_ApplyMassFromShapes"];_bx_Body_GetShapeCount=Module["_bx_Body_GetShapeCount"]=wasmExports["bx_Body_GetShapeCount"];_bx_Body_SetFeatureKey=Module["_bx_Body_SetFeatureKey"]=wasmExports["bx_Body_SetFeatureKey"];_bx_Body_GetFeatureKey=Module["_bx_Body_GetFeatureKey"]=wasmExports["bx_Body_GetFeatureKey"];_bx_Body_GetShapeFeatureKey=Module["_bx_Body_GetShapeFeatureKey"]=wasmExports["bx_Body_GetShapeFeatureKey"];_bx_Body_SetEventFlags=Module["_bx_Body_SetEventFlags"]=wasmExports["bx_Body_SetEventFlags"];_bx_Body_GetEventFlags=Module["_bx_Body_GetEventFlags"]=wasmExports["bx_Body_GetEventFlags"];_bx_Body_EnableContactEvents=Module["_bx_Body_EnableContactEvents"]=wasmExports["bx_Body_EnableContactEvents"];_bx_ShapeDesc_CreateSphere=Module["_bx_ShapeDesc_CreateSphere"]=wasmExports["bx_ShapeDesc_CreateSphere"];_bx_ShapeDesc_CreateCapsule=Module["_bx_ShapeDesc_CreateCapsule"]=wasmExports["bx_ShapeDesc_CreateCapsule"];_bx_ShapeDesc_CreateBox=Module["_bx_ShapeDesc_CreateBox"]=wasmExports["bx_ShapeDesc_CreateBox"];_bx_ShapeDesc_CreateCylinder=Module["_bx_ShapeDesc_CreateCylinder"]=wasmExports["bx_ShapeDesc_CreateCylinder"];_bx_ShapeDesc_CreateHull=Module["_bx_ShapeDesc_CreateHull"]=wasmExports["bx_ShapeDesc_CreateHull"];_bx_ShapeDesc_CreateMesh=Module["_bx_ShapeDesc_CreateMesh"]=wasmExports["bx_ShapeDesc_CreateMesh"];_bx_ShapeDesc_CreateHeightField=Module["_bx_ShapeDesc_CreateHeightField"]=wasmExports["bx_ShapeDesc_CreateHeightField"];_bx_ShapeDesc_GetGeometryBytes=Module["_bx_ShapeDesc_GetGeometryBytes"]=wasmExports["bx_ShapeDesc_GetGeometryBytes"];_bx_ShapeDesc_GetGeometryByteCount=Module["_bx_ShapeDesc_GetGeometryByteCount"]=wasmExports["bx_ShapeDesc_GetGeometryByteCount"];_bx_ShapeDesc_CreateMeshFromBytes=Module["_bx_ShapeDesc_CreateMeshFromBytes"]=wasmExports["bx_ShapeDesc_CreateMeshFromBytes"];_bx_ShapeDesc_CreateHeightFieldFromBytes=Module["_bx_ShapeDesc_CreateHeightFieldFromBytes"]=wasmExports["bx_ShapeDesc_CreateHeightFieldFromBytes"];_bx_ShapeDesc_CreateContainer=Module["_bx_ShapeDesc_CreateContainer"]=wasmExports["bx_ShapeDesc_CreateContainer"];_bx_ShapeDesc_AddChild=Module["_bx_ShapeDesc_AddChild"]=wasmExports["bx_ShapeDesc_AddChild"];_bx_ShapeDesc_RemoveChild=Module["_bx_ShapeDesc_RemoveChild"]=wasmExports["bx_ShapeDesc_RemoveChild"];_bx_ShapeDesc_GetChildCount=Module["_bx_ShapeDesc_GetChildCount"]=wasmExports["bx_ShapeDesc_GetChildCount"];_bx_ShapeDesc_GetKind=Module["_bx_ShapeDesc_GetKind"]=wasmExports["bx_ShapeDesc_GetKind"];_bx_ShapeDesc_SetMaterial=Module["_bx_ShapeDesc_SetMaterial"]=wasmExports["bx_ShapeDesc_SetMaterial"];_bx_ShapeDesc_GetFriction=Module["_bx_ShapeDesc_GetFriction"]=wasmExports["bx_ShapeDesc_GetFriction"];_bx_ShapeDesc_GetRestitution=Module["_bx_ShapeDesc_GetRestitution"]=wasmExports["bx_ShapeDesc_GetRestitution"];_bx_ShapeDesc_SetDensity=Module["_bx_ShapeDesc_SetDensity"]=wasmExports["bx_ShapeDesc_SetDensity"];_bx_ShapeDesc_GetDensity=Module["_bx_ShapeDesc_GetDensity"]=wasmExports["bx_ShapeDesc_GetDensity"];_bx_ShapeDesc_SetFilter=Module["_bx_ShapeDesc_SetFilter"]=wasmExports["bx_ShapeDesc_SetFilter"];_bx_ShapeDesc_GetCategoryBits=Module["_bx_ShapeDesc_GetCategoryBits"]=wasmExports["bx_ShapeDesc_GetCategoryBits"];_bx_ShapeDesc_GetMaskBits=Module["_bx_ShapeDesc_GetMaskBits"]=wasmExports["bx_ShapeDesc_GetMaskBits"];_bx_ShapeDesc_SetGroup=Module["_bx_ShapeDesc_SetGroup"]=wasmExports["bx_ShapeDesc_SetGroup"];_bx_ShapeDesc_SetRollingResistance=Module["_bx_ShapeDesc_SetRollingResistance"]=wasmExports["bx_ShapeDesc_SetRollingResistance"];_bx_ShapeDesc_SetSensor=Module["_bx_ShapeDesc_SetSensor"]=wasmExports["bx_ShapeDesc_SetSensor"];_bx_ShapeDesc_IsSensor=Module["_bx_ShapeDesc_IsSensor"]=wasmExports["bx_ShapeDesc_IsSensor"];_bx_ShapeDesc_SetInvokeContactCreation=Module["_bx_ShapeDesc_SetInvokeContactCreation"]=wasmExports["bx_ShapeDesc_SetInvokeContactCreation"];_bx_ShapeDesc_GetInvokeContactCreation=Module["_bx_ShapeDesc_GetInvokeContactCreation"]=wasmExports["bx_ShapeDesc_GetInvokeContactCreation"];_bx_ShapeDesc_GetAABB=Module["_bx_ShapeDesc_GetAABB"]=wasmExports["bx_ShapeDesc_GetAABB"];_bx_GetShapeBuildCount=Module["_bx_GetShapeBuildCount"]=wasmExports["bx_GetShapeBuildCount"];_bx_GetShapeDescCount=Module["_bx_GetShapeDescCount"]=wasmExports["bx_GetShapeDescCount"];_bx_Body_SetShape=Module["_bx_Body_SetShape"]=wasmExports["bx_Body_SetShape"];_bx_Body_SetShapeHull=Module["_bx_Body_SetShapeHull"]=wasmExports["bx_Body_SetShapeHull"];_bx_Body_TranslateShape=Module["_bx_Body_TranslateShape"]=wasmExports["bx_Body_TranslateShape"];_bx_Body_SetShapeFilter=Module["_bx_Body_SetShapeFilter"]=wasmExports["bx_Body_SetShapeFilter"];_bx_Body_RemoveShape=Module["_bx_Body_RemoveShape"]=wasmExports["bx_Body_RemoveShape"];_bx_Body_HasShape=Module["_bx_Body_HasShape"]=wasmExports["bx_Body_HasShape"];_bx_Body_GetShapeInfo=Module["_bx_Body_GetShapeInfo"]=wasmExports["bx_Body_GetShapeInfo"];_bx_Body_SyncShapeDesc=Module["_bx_Body_SyncShapeDesc"]=wasmExports["bx_Body_SyncShapeDesc"];_bx_Body_GetShapeDesc=Module["_bx_Body_GetShapeDesc"]=wasmExports["bx_Body_GetShapeDesc"];_bx_ShapeDesc_BuildDebugGeometry=Module["_bx_ShapeDesc_BuildDebugGeometry"]=wasmExports["bx_ShapeDesc_BuildDebugGeometry"];_bx_DebugPositionsPtr=Module["_bx_DebugPositionsPtr"]=wasmExports["bx_DebugPositionsPtr"];_bx_DebugIndicesPtr=Module["_bx_DebugIndicesPtr"]=wasmExports["bx_DebugIndicesPtr"];_bx_DebugIndexCount=Module["_bx_DebugIndexCount"]=wasmExports["bx_DebugIndexCount"];_bx_CreateJoint=Module["_bx_CreateJoint"]=wasmExports["bx_CreateJoint"];_bx_DestroyJoint=Module["_bx_DestroyJoint"]=wasmExports["bx_DestroyJoint"];_bx_Joint_IsValid=Module["_bx_Joint_IsValid"]=wasmExports["bx_Joint_IsValid"];_bx_Joint_SetCollideConnected=Module["_bx_Joint_SetCollideConnected"]=wasmExports["bx_Joint_SetCollideConnected"];_bx_Joint_SetConstraintTuning=Module["_bx_Joint_SetConstraintTuning"]=wasmExports["bx_Joint_SetConstraintTuning"];_bx_Joint_WakeBodies=Module["_bx_Joint_WakeBodies"]=wasmExports["bx_Joint_WakeBodies"];_bx_Joint_EnableLimit=Module["_bx_Joint_EnableLimit"]=wasmExports["bx_Joint_EnableLimit"];_bx_Joint_SetLimits=Module["_bx_Joint_SetLimits"]=wasmExports["bx_Joint_SetLimits"];_bx_Joint_SetTwistLimits=Module["_bx_Joint_SetTwistLimits"]=wasmExports["bx_Joint_SetTwistLimits"];_bx_Joint_EnableMotor=Module["_bx_Joint_EnableMotor"]=wasmExports["bx_Joint_EnableMotor"];_bx_Joint_UpdateMotorFrame=Module["_bx_Joint_UpdateMotorFrame"]=wasmExports["bx_Joint_UpdateMotorFrame"];_bx_Joint_SetSphericalMotor=Module["_bx_Joint_SetSphericalMotor"]=wasmExports["bx_Joint_SetSphericalMotor"];_bx_Joint_SetSphericalTarget=Module["_bx_Joint_SetSphericalTarget"]=wasmExports["bx_Joint_SetSphericalTarget"];_bx_Joint_SetMotorSpeed=Module["_bx_Joint_SetMotorSpeed"]=wasmExports["bx_Joint_SetMotorSpeed"];_bx_Joint_SetMaxMotorForce=Module["_bx_Joint_SetMaxMotorForce"]=wasmExports["bx_Joint_SetMaxMotorForce"];_bx_Joint_EnableSpring=Module["_bx_Joint_EnableSpring"]=wasmExports["bx_Joint_EnableSpring"];_bx_Joint_SetSpring=Module["_bx_Joint_SetSpring"]=wasmExports["bx_Joint_SetSpring"];_bx_Joint_SetTarget=Module["_bx_Joint_SetTarget"]=wasmExports["bx_Joint_SetTarget"];_bx_Joint_GetPosition=Module["_bx_Joint_GetPosition"]=wasmExports["bx_Joint_GetPosition"];_bx_ComputeAlignedFrameB=Module["_bx_ComputeAlignedFrameB"]=wasmExports["bx_ComputeAlignedFrameB"];_bx_WheelJoint_SetSpinMotorSpeed=Module["_bx_WheelJoint_SetSpinMotorSpeed"]=wasmExports["bx_WheelJoint_SetSpinMotorSpeed"];_bx_WheelJoint_SetMaxSpinTorque=Module["_bx_WheelJoint_SetMaxSpinTorque"]=wasmExports["bx_WheelJoint_SetMaxSpinTorque"];_bx_WheelJoint_EnableSpinMotor=Module["_bx_WheelJoint_EnableSpinMotor"]=wasmExports["bx_WheelJoint_EnableSpinMotor"];_bx_WheelJoint_SetTargetSteeringAngle=Module["_bx_WheelJoint_SetTargetSteeringAngle"]=wasmExports["bx_WheelJoint_SetTargetSteeringAngle"];_bx_WheelJoint_SetSuspension=Module["_bx_WheelJoint_SetSuspension"]=wasmExports["bx_WheelJoint_SetSuspension"];_bx_RayHitsPtr=Module["_bx_RayHitsPtr"]=wasmExports["bx_RayHitsPtr"];_bx_RayHitPointsF64Ptr=Module["_bx_RayHitPointsF64Ptr"]=wasmExports["bx_RayHitPointsF64Ptr"];_bx_World_CastRay=Module["_bx_World_CastRay"]=wasmExports["bx_World_CastRay"];_bx_World_CastShape=Module["_bx_World_CastShape"]=wasmExports["bx_World_CastShape"];_bx_OverlapsPtr=Module["_bx_OverlapsPtr"]=wasmExports["bx_OverlapsPtr"];_bx_World_OverlapShape=Module["_bx_World_OverlapShape"]=wasmExports["bx_World_OverlapShape"];_bx_GeometryPtr=Module["_bx_GeometryPtr"]=wasmExports["bx_GeometryPtr"];_bx_Body_GetShapeGeometry=Module["_bx_Body_GetShapeGeometry"]=wasmExports["bx_Body_GetShapeGeometry"];__emscripten_tls_init=wasmExports["_emscripten_tls_init"];_pthread_self=wasmExports["pthread_self"];__emscripten_thread_init=wasmExports["_emscripten_thread_init"];___set_thread_state=wasmExports["__set_thread_state"];__emscripten_thread_crashed=wasmExports["_emscripten_thread_crashed"];__emscripten_run_js_on_main_thread_done=wasmExports["_emscripten_run_js_on_main_thread_done"];__emscripten_run_js_on_main_thread=wasmExports["_emscripten_run_js_on_main_thread"];__emscripten_thread_free_data=wasmExports["_emscripten_thread_free_data"];__emscripten_thread_exit=wasmExports["_emscripten_thread_exit"];__emscripten_check_mailbox=wasmExports["_emscripten_check_mailbox"];_emscripten_stack_set_limits=wasmExports["emscripten_stack_set_limits"];__emscripten_stack_restore=wasmExports["_emscripten_stack_restore"];__emscripten_stack_alloc=wasmExports["_emscripten_stack_alloc"];_emscripten_stack_get_current=wasmExports["emscripten_stack_get_current"];__indirect_function_table=wasmTable=wasmExports["__indirect_function_table"]}var wasmImports;function assignWasmImports(){wasmImports={__pthread_create_js:___pthread_create_js,_emscripten_init_main_thread_js:__emscripten_init_main_thread_js,_emscripten_notify_mailbox_postmessage:__emscripten_notify_mailbox_postmessage,_emscripten_receive_on_main_thread_js:__emscripten_receive_on_main_thread_js,_emscripten_thread_cleanup:__emscripten_thread_cleanup,_emscripten_thread_mailbox_await:__emscripten_thread_mailbox_await,_emscripten_thread_set_strongref:__emscripten_thread_set_strongref,clock_time_get:_clock_time_get,emscripten_check_blocking_allowed:_emscripten_check_blocking_allowed,emscripten_exit_with_live_runtime:_emscripten_exit_with_live_runtime,emscripten_get_now:_emscripten_get_now,emscripten_resize_heap:_emscripten_resize_heap,exit:_exit,fd_write:_fd_write,memory:wasmMemory}}async function run(){if(ENVIRONMENT_IS_PTHREAD){initRuntime();return}preRun();if(runDependencies){await resolveRunDependencies()}var setStatus=Module["setStatus"];if(setStatus){setStatus("Running...");await new Promise(resolve=>setTimeout(resolve,1));setTimeout(setStatus,1,"")}if(ABORT)return;initRuntime();Module["onRuntimeInitialized"]?.();postRun()}var wasmExports;if(!ENVIRONMENT_IS_PTHREAD){wasmExports=await createWasm();await run()}
|
|
2
|
-
;return Module}export default Box3D;var isPthread=globalThis.name=="em-pthread";var isNode=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";if(isNode)isPthread=(await import("node:worker_threads")).workerData==="em-pthread";isPthread&&Box3D();
|
|
1
|
+
async function Box3D(moduleArg={}){var Module=moduleArg;var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=!!globalThis.WorkerGlobalScope;var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";var ENVIRONMENT_IS_PTHREAD=ENVIRONMENT_IS_WORKER&&globalThis.name=="em-pthread";if(ENVIRONMENT_IS_NODE){const{createRequire}=await import("node:module");var require=createRequire(import.meta.url);var worker_threads=require("node:worker_threads");globalThis.Worker=worker_threads.Worker;ENVIRONMENT_IS_WORKER=!worker_threads.isMainThread;ENVIRONMENT_IS_PTHREAD=ENVIRONMENT_IS_WORKER&&worker_threads.workerData=="em-pthread"}var programArgs=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=import.meta.url;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("node:fs");if(_scriptName.startsWith("file:")){scriptDirectory=require("node:path").dirname(require("node:url").fileURLToPath(_scriptName))+"/"}readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}programArgs=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}if(!ENVIRONMENT_IS_NODE){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=async url=>{var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var defaultPrint=console.log.bind(console);var defaultPrintErr=console.error.bind(console);if(ENVIRONMENT_IS_NODE){var utils=require("node:util");var stringify=a=>typeof a=="object"?utils.inspect(a):a;defaultPrint=(...args)=>fs.writeSync(1,args.map(stringify).join(" ")+"\n");defaultPrintErr=(...args)=>fs.writeSync(2,args.map(stringify).join(" ")+"\n")}var out=defaultPrint;var err=defaultPrintErr;var wasmBinary;var wasmModule;var ABORT=false;var EXITSTATUS;var isFileURI=filename=>filename.startsWith("file://");class EmscriptenEH{}class EmscriptenSjLj extends EmscriptenEH{}function growMemViews(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}}if(ENVIRONMENT_IS_NODE&&ENVIRONMENT_IS_PTHREAD){globalThis.self=globalThis;var parentPort=worker_threads.parentPort;if(!globalThis.postMessage){parentPort.on("message",msg=>globalThis.onmessage?.({data:msg}));globalThis.postMessage=msg=>parentPort.postMessage(msg)}process.on("uncaughtException",err=>{postMessage({cmd:8,error:err});process.exit(1)})}var startWorker;if(ENVIRONMENT_IS_PTHREAD){var initializedJS=false;self.onunhandledrejection=e=>{throw e.reason||e};function handleMessage(e){try{var msgData=e.data;var cmd=msgData.cmd;if(cmd==1){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);startWorker=()=>{postMessage({cmd:3});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};for(const handler of msgData.handlers){if(!Module[handler]||Module[handler].proxy){Module[handler]=(...args)=>{postMessage({cmd:9,handler,args})};if(handler=="print")out=Module[handler];if(handler=="printErr")err=Module[handler]}}wasmMemory=msgData.wasmMemory;updateMemoryViews();wasmModule=msgData.wasmModule;createWasm();run();startWorker()}else if(cmd==2){establishStackSpace(msgData.pthread_ptr);__emscripten_thread_init(msgData.pthread_ptr,0,0,1,0,0);PThread.threadInitTLS();__emscripten_thread_mailbox_await(msgData.pthread_ptr);if(!initializedJS){initializedJS=true}try{invokeEntryPoint(msgData.start_routine,msgData.arg)}catch(ex){if(ex!="unwind"){throw ex}}}else if(cmd==4){if(initializedJS){checkMailbox()}}else if(cmd){err(`worker: received unknown command ${cmd}`);err(msgData)}}catch(ex){if(runtimeInitialized)__emscripten_thread_crashed();throw ex}}self.onmessage=handleMessage}var runtimeInitialized=false;function getMemoryBuffer(){return wasmMemory.buffer}function updateMemoryViews(){if(HEAP8?.buffer?.growable)return;var b=getMemoryBuffer();HEAP8=new Int8Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b)}function initMemory(){if(ENVIRONMENT_IS_PTHREAD){return}{var INITIAL_MEMORY=33554432;wasmMemory=new WebAssembly.Memory({initial:INITIAL_MEMORY/65536,maximum:32768,shared:true})}updateMemoryViews()}function preRun(){var preRun=Module["preRun"];if(preRun){if(typeof preRun=="function")preRun=[preRun];onPreRuns.push(...preRun)}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;if(ENVIRONMENT_IS_PTHREAD)return;wasmExports["__wasm_call_ctors"]()}function postRun(){var postRun=Module["postRun"];if(postRun){if(typeof postRun=="function")postRun=[postRun];onPostRuns.push(...postRun)}callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what=`Aborted(${what})`;err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var wasmBinaryFile;function findWasmBinary(){if(Module["locateFile"]){return locateFile("box3d.wasm")}return new URL("box3d.wasm",import.meta.url).href}function getBinarySync(file){if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){assignWasmImports();var imports={env:wasmImports,wasi_snapshot_preview1:wasmImports};return imports}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;registerTLSInit(wasmExports["_emscripten_tls_init"]);assignWasmExports(wasmExports);wasmModule=module;return wasmExports}function receiveInstantiationResult(result){return receiveInstance(result["instance"],result["module"])}var info=getWasmImports();var instantiateWasm=Module["instantiateWasm"];if(instantiateWasm){return new Promise(resolve=>{instantiateWasm(info,(inst,mod)=>resolve(receiveInstance(inst,mod)))})}if(ENVIRONMENT_IS_PTHREAD){var instance=new WebAssembly.Instance(wasmModule,getWasmImports());return receiveInstance(instance,wasmModule)}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var HEAP8;var terminateWorker=worker=>{worker.terminate();worker.onmessage=e=>{}};var cleanupThread=pthread_ptr=>{var worker=PThread.pthreads[pthread_ptr];PThread.returnWorkerToPool(worker)};var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var dependenciesPromise=null;var resolveRunDependencies=async()=>dependenciesPromise;var runDependencies=0;var dependenciesPromiseResolve=null;var removeRunDependency=id=>{runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(!runDependencies){dependenciesPromiseResolve()}};var addRunDependency=id=>{if(!runDependencies){dependenciesPromise=new Promise(resolve=>dependenciesPromiseResolve=resolve)}runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)};var spawnThread=threadParams=>{var worker=PThread.getNewWorker();if(!worker){return 6}PThread.pthreads[threadParams.pthread_ptr]=worker;worker.pthread_ptr=threadParams.pthread_ptr;var msg={cmd:2,start_routine:threadParams.startRoutine,arg:threadParams.arg,pthread_ptr:threadParams.pthread_ptr};worker.postMessage(msg,threadParams.transferList);return 0};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var stackSave=()=>_emscripten_stack_get_current();var stackRestore=val=>__emscripten_stack_restore(val);var stackAlloc=sz=>__emscripten_stack_alloc(sz);var HEAPF64;var HEAP64;var proxyToMainThread=(funcIndex,emAsmAddr,proxyMode,...callArgs)=>{var bufSize=8*callArgs.length*2;var sp=stackSave();var args=stackAlloc(bufSize);var b=args>>3;for(var arg of callArgs){if(typeof arg=="bigint"){(growMemViews(),HEAP64)[b++]=1n;(growMemViews(),HEAP64)[b++]=arg}else{(growMemViews(),HEAP64)[b++]=0n;(growMemViews(),HEAPF64)[b++]=arg}}var rtn=__emscripten_run_js_on_main_thread(funcIndex,emAsmAddr,bufSize,args,proxyMode);stackRestore(sp);return rtn};function _proc_exit(code){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(0,0,1,code);EXITSTATUS=code;if(!keepRuntimeAlive()){PThread.terminateAllThreads();Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))}function exitOnMainThread(returnCode){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(1,0,0,returnCode);_exit(returnCode)}var exitJS=(status,implicit)=>{EXITSTATUS=status;if(ENVIRONMENT_IS_PTHREAD){exitOnMainThread(status);throw"unwind"}_proc_exit(status)};var _exit=exitJS;var waitAsyncPolyfilled=!Atomics.waitAsync||globalThis.navigator?.userAgent&&Number((navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./)||[])[2])<91;var HEAP32;var PThread={unusedWorkers:[],tlsInitFunctions:[],pthreads:{},init(){if(!ENVIRONMENT_IS_PTHREAD){PThread.initMainThread()}},initMainThread(){var pthreadPoolSize=8;while(pthreadPoolSize--){PThread.allocateUnusedWorker()}addOnPreRun(async()=>{var pthreadPoolReady=PThread.loadWasmModuleToAllWorkers();addRunDependency("loading-workers");await pthreadPoolReady;removeRunDependency("loading-workers")})},terminateAllThreads:()=>{for(var worker of Object.values(PThread.pthreads)){terminateWorker(worker)}for(var worker of PThread.unusedWorkers){terminateWorker(worker)}PThread.unusedWorkers=[];PThread.pthreads={}},clearMailboxAwait:pthread_ptr=>{if(!waitAsyncPolyfilled){Atomics.notify((growMemViews(),HEAP32),pthread_ptr>>2)}},terminateRuntime:()=>{PThread.terminateAllThreads();var pthread_ptr=_pthread_self();___set_thread_state(0,0,0,1);PThread.clearMailboxAwait(pthread_ptr)},returnWorkerToPool:worker=>{var pthread_ptr=worker.pthread_ptr;delete PThread.pthreads[pthread_ptr];PThread.unusedWorkers.push(worker);worker.pthread_ptr=0;PThread.clearMailboxAwait(pthread_ptr);__emscripten_thread_free_data(pthread_ptr)},threadInitTLS(){PThread.tlsInitFunctions.forEach(f=>f())},loadWasmModuleToWorker:worker=>new Promise(onFinishedLoading=>{worker.onmessage=e=>{var d=e.data;var cmd=d.cmd;if(d.targetThread&&d.targetThread!=_pthread_self()){var targetWorker=PThread.pthreads[d.targetThread];targetWorker?.postMessage(d);return}if(d==="setimmediate"||d==="_si"){worker.postMessage(d);return}switch(cmd){case 4:checkMailbox();break;case 5:spawnThread(d);break;case 6:callUserCallback(()=>cleanupThread(d.thread));break;case 3:if(ENVIRONMENT_IS_NODE&&!worker.strongref){worker.unref()}onFinishedLoading(worker);break;case 8:worker.onerror(d.error);break;case 9:Module[d.handler](...d.args);break;default:if(cmd)err(`worker sent an unknown command ${cmd}`)}};worker.onerror=e=>{var message="worker sent an error!";err(`${message} ${e.filename}:${e.lineno}: ${e.message}`);throw e};if(ENVIRONMENT_IS_NODE){worker.on("message",data=>worker.onmessage({data}));worker.on("error",e=>worker.onerror(e))}var handlers=[];var knownHandlers=["onExit","onAbort","print","printErr"];for(var handler of knownHandlers){if(Module.propertyIsEnumerable(handler)){handlers.push(handler)}}worker.postMessage({cmd:1,handlers,wasmMemory,wasmModule})}),async loadWasmModuleToAllWorkers(){if(ENVIRONMENT_IS_PTHREAD){return}let pthreadPoolReady=Promise.all(PThread.unusedWorkers.map(PThread.loadWasmModuleToWorker));return pthreadPoolReady},allocateUnusedWorker(){var worker;worker=new Worker(new URL("box3d.mjs",import.meta.url),{type:"module",workerData:"em-pthread",name:"em-pthread"});PThread.unusedWorkers.push(worker);return worker},getNewWorker(){if(PThread.unusedWorkers.length==0){var newWorker=PThread.allocateUnusedWorker();PThread.loadWasmModuleToWorker(newWorker)}return PThread.unusedWorkers.pop()}};var onPostRuns=[];var HEAPU32;function establishStackSpace(pthread_ptr){var stackHigh=(growMemViews(),HEAPU32)[pthread_ptr+48>>2];var stackSize=(growMemViews(),HEAPU32)[pthread_ptr+52>>2];var stackLow=stackHigh-stackSize;_emscripten_stack_set_limits(stackHigh,stackLow);stackRestore(stackHigh)}var wasmTableMirror=[];var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var invokeEntryPoint=(ptr,arg)=>{runtimeKeepaliveCounter=0;noExitRuntime=0;var result=getWasmTableEntry(ptr)(arg);function finish(result){if(keepRuntimeAlive()){EXITSTATUS=result;return}__emscripten_thread_exit(result)}finish(result)};var noExitRuntime=true;var registerTLSInit=tlsInitFunc=>PThread.tlsInitFunctions.push(tlsInitFunc);var wasmMemory;function pthreadCreateProxied(pthread_ptr,attr,startRoutine,arg){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(2,0,1,pthread_ptr,attr,startRoutine,arg);return ___pthread_create_js(pthread_ptr,attr,startRoutine,arg)}var _emscripten_has_threading_support=()=>!!globalThis.SharedArrayBuffer;var ___pthread_create_js=(pthread_ptr,attr,startRoutine,arg)=>{if(!_emscripten_has_threading_support()){return 6}var transferList=[];var error=0;if(ENVIRONMENT_IS_PTHREAD&&(!transferList.length||error)){return pthreadCreateProxied(pthread_ptr,attr,startRoutine,arg)}if(error)return error;var threadParams={startRoutine,pthread_ptr,arg,transferList};if(ENVIRONMENT_IS_PTHREAD){threadParams.cmd=5;postMessage(threadParams,transferList);return 0}return spawnThread(threadParams)};var __emscripten_init_main_thread_js=tb=>{var can_block=!ENVIRONMENT_IS_WEB;__emscripten_thread_init(tb,!ENVIRONMENT_IS_WORKER,1,can_block,1048576,false);PThread.threadInitTLS()};var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};var maybeExit=()=>{if(!keepRuntimeAlive()){try{if(ENVIRONMENT_IS_PTHREAD){if(_pthread_self())__emscripten_thread_exit(EXITSTATUS);return}_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){return}try{return func()}catch(e){handleException(e)}finally{maybeExit()}};var __emscripten_thread_mailbox_await=pthread_ptr=>{if(!waitAsyncPolyfilled){var wait=Atomics.waitAsync((growMemViews(),HEAP32),pthread_ptr>>2,pthread_ptr);wait.value.then(checkMailbox);var waitingAsync=pthread_ptr+112;Atomics.store((growMemViews(),HEAP32),waitingAsync>>2,1)}};var checkMailbox=()=>{var pthread_ptr=_pthread_self();if(!pthread_ptr)return;callUserCallback(()=>{__emscripten_thread_mailbox_await(pthread_ptr);__emscripten_check_mailbox()})};var __emscripten_notify_mailbox_postmessage=(targetThread,currThreadId)=>{if(targetThread==currThreadId){setTimeout(checkMailbox)}else if(ENVIRONMENT_IS_PTHREAD){postMessage({targetThread,cmd:4})}else{var worker=PThread.pthreads[targetThread];if(!worker){return}worker.postMessage({cmd:4})}};var proxiedJSCallArgs=[];var __emscripten_receive_on_main_thread_js=(funcIndex,emAsmAddr,callingThread,bufSize,args,ctx,ctxArgs)=>{proxiedJSCallArgs.length=0;var b=args>>3;var end=args+bufSize>>3;while(b<end){var arg;if((growMemViews(),HEAP64)[b++]){arg=(growMemViews(),HEAP64)[b++]}else{arg=(growMemViews(),HEAPF64)[b++]}proxiedJSCallArgs.push(arg)}var func=proxiedFunctionTable[funcIndex];PThread.currentProxiedOperationCallerThread=callingThread;var rtn=func(...proxiedJSCallArgs);PThread.currentProxiedOperationCallerThread=0;if(ctx){rtn.then(rtn=>__emscripten_run_js_on_main_thread_done(ctx,ctxArgs,rtn));return}return rtn};var __emscripten_thread_cleanup=thread=>{if(!ENVIRONMENT_IS_PTHREAD)cleanupThread(thread);else postMessage({cmd:6,thread})};var __emscripten_thread_set_strongref=thread=>{if(ENVIRONMENT_IS_NODE){var worker=PThread.pthreads[thread];worker.ref();worker.strongref=1}};var _emscripten_get_now=()=>performance.timeOrigin+performance.now();var _emscripten_date_now=()=>Date.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>num<INT53_MIN||num>INT53_MAX?NaN:Number(num);function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);(growMemViews(),HEAP64)[ptime>>3]=BigInt(nsec);return 0}var _emscripten_check_blocking_allowed=()=>{};var runtimeKeepalivePush=()=>{runtimeKeepaliveCounter+=1};var _emscripten_exit_with_live_runtime=()=>{runtimeKeepalivePush();throw"unwind"};var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var HEAPU8;var _emscripten_resize_heap=requestedSize=>{var oldSize=(growMemViews(),HEAPU8).length;requestedSize>>>=0;if(requestedSize<=oldSize){return false}var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};var printCharBuffers=[null,[],[]];var UTF8Decoder=globalThis.TextDecoder&&new TextDecoder;var findStringEnd=(heapOrArray,idx,maxBytesToRead,ignoreNul)=>{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.buffer instanceof ArrayBuffer?heapOrArray.subarray(idx,endPtr):heapOrArray.slice(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};var printChar=(stream,curr)=>{var buffer=printCharBuffers[stream];if(!curr||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer));buffer.length=0}else{buffer.push(curr)}};function _fd_write(fd,iov,iovcnt,pnum){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(3,0,1,fd,iov,iovcnt,pnum);var num=0;for(var i=0;i<iovcnt;i++){var ptr=(growMemViews(),HEAPU32)[iov>>2];var len=(growMemViews(),HEAPU32)[iov+4>>2];iov+=8;for(var j=0;j<len;j++){printChar(fd,(growMemViews(),HEAPU8)[ptr+j])}num+=len}(growMemViews(),HEAPU32)[pnum>>2]=num;return 0}var HEAPF32;PThread.init();{initMemory();if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["arguments"])programArgs=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];var preInit=Module["preInit"];if(preInit){if(typeof preInit=="function")Module["preInit"]=preInit=[preInit];while(preInit.length>0){preInit.shift()()}}}var proxiedFunctionTable=[_proc_exit,exitOnMainThread,pthreadCreateProxied,_fd_write];var _free,_bx_Scratch,_bx_Alloc,_malloc,_bx_Free,_bx_GetVersion,_bx_ScratchF64,_bx_IsDoublePrecision,_bx_GetRejectedSlotCount,_bx_Body_SetClipPlane,_bx_Body_GetClipPlane,_bx_GetMaxWorkers,_bx_CreateWorld,_bx_World_GetWorkerCount,_bx_DestroyWorld,_bx_ShapeDesc_Destroy,_bx_World_Step,_bx_World_EnableTimer,_bx_World_IsTimerEnabled,_bx_World_SetGravity,_bx_World_SetMaximumLinearSpeed,_bx_World_GetMaximumLinearSpeed,_bx_World_EnableSleeping,_bx_World_EnableContinuous,_bx_World_SetContactTuning,_bx_World_Explode,_bx_World_GetAwakeBodyCount,_bx_World_GetJointEventCount,_bx_World_GetStackUsed,_bx_World_GetStats,_bx_MoveEventsPtr,_bx_ContactEventsPtr,_bx_SensorEventsPtr,_bx_World_GetMoveEvents,_bx_World_GetContactEvents,_bx_World_GetSensorEvents,_bx_CreateBody,_bx_DestroyBody,_bx_Body_SetType,_bx_Body_GetType,_bx_Body_SetTransform,_bx_Body_GetTransform,_bx_Body_SetTargetTransform,_bx_Body_SetLinearVelocity,_bx_Body_GetLinearVelocity,_bx_Body_SetAngularVelocity,_bx_Body_GetAngularVelocity,_bx_Body_SetLinearDamping,_bx_Body_GetLinearDamping,_bx_Body_SetAngularDamping,_bx_Body_GetAngularDamping,_bx_Body_SetGravityScale,_bx_Body_GetGravityScale,_bx_Body_ApplyForce,_bx_Body_ApplyForceToCenter,_bx_Body_ApplyTorque,_bx_Body_ApplyLinearImpulse,_bx_Body_ApplyLinearImpulseToCenter,_bx_Body_ApplyAngularImpulse,_bx_Body_SetAwake,_bx_Body_IsAwake,_bx_Body_EnableSleep,_bx_Body_SetBullet,_bx_Body_EnableContinuous,_bx_Body_IsContinuousEnabled,_bx_Body_SetAabbMargin,_bx_Body_GetAabbMargin,_bx_Body_SetShapeCrush,_bx_Body_GetShapeCrush,_bx_BodyContactsPtr,_bx_BodyContactPointsF64Ptr,_bx_Body_GetContacts,_bx_Body_AllowFastRotation,_bx_Body_SetMotionLocks,_bx_Body_GetAABB,_bx_Body_ComputeShapeMassData,_bx_Body_GetMassData,_bx_Body_SetMassDataFull,_bx_Body_SetMassData,_bx_Body_GetMotionLocks,_bx_Body_ApplyMassFromShapes,_bx_Body_GetShapeCount,_bx_Body_SetFeatureKey,_bx_Body_GetFeatureKey,_bx_Body_GetShapeFeatureKey,_bx_Body_SetEventFlags,_bx_Body_GetEventFlags,_bx_Body_EnableContactEvents,_bx_ShapeDesc_CreateSphere,_bx_ShapeDesc_CreateCapsule,_bx_ShapeDesc_CreateBox,_bx_ShapeDesc_CreateCylinder,_bx_ShapeDesc_CreateHull,_bx_ShapeDesc_CreateMesh,_bx_ShapeDesc_CreateHeightField,_bx_ShapeDesc_GetGeometryBytes,_bx_ShapeDesc_GetGeometryByteCount,_bx_ShapeDesc_CreateMeshFromBytes,_bx_ShapeDesc_CreateHeightFieldFromBytes,_bx_ShapeDesc_CreateContainer,_bx_ShapeDesc_AddChild,_bx_ShapeDesc_RemoveChild,_bx_ShapeDesc_GetChildCount,_bx_ShapeDesc_GetKind,_bx_ShapeDesc_SetMaterial,_bx_ShapeDesc_GetFriction,_bx_ShapeDesc_GetRestitution,_bx_ShapeDesc_SetDensity,_bx_ShapeDesc_GetDensity,_bx_ShapeDesc_SetFilter,_bx_ShapeDesc_GetCategoryBits,_bx_ShapeDesc_GetMaskBits,_bx_ShapeDesc_SetGroup,_bx_ShapeDesc_SetRollingResistance,_bx_ShapeDesc_SetSensor,_bx_ShapeDesc_IsSensor,_bx_ShapeDesc_SetInvokeContactCreation,_bx_ShapeDesc_GetInvokeContactCreation,_bx_ShapeDesc_GetAABB,_bx_GetShapeBuildCount,_bx_GetShapeDescCount,_bx_Body_SetShape,_bx_Body_SetShapeHull,_bx_Body_TranslateShape,_bx_Body_SetShapeFilter,_bx_Body_RemoveShape,_bx_Body_HasShape,_bx_Body_GetShapeInfo,_bx_Body_SyncShapeDesc,_bx_Body_GetShapeDesc,_bx_ShapeDesc_BuildDebugGeometry,_bx_DebugPositionsPtr,_bx_DebugIndicesPtr,_bx_DebugIndexCount,_bx_CreateJoint,_bx_DestroyJoint,_bx_Joint_IsValid,_bx_Joint_SetCollideConnected,_bx_Joint_SetConstraintTuning,_bx_Joint_WakeBodies,_bx_Joint_EnableLimit,_bx_Joint_SetLimits,_bx_Joint_SetTwistLimits,_bx_Joint_EnableMotor,_bx_Joint_UpdateMotorFrame,_bx_Joint_SetSphericalMotor,_bx_Joint_SetSphericalTarget,_bx_Joint_SetMotorSpeed,_bx_Joint_SetMaxMotorForce,_bx_Joint_EnableSpring,_bx_Joint_SetSpring,_bx_Joint_SetTarget,_bx_Joint_GetPosition,_bx_ComputeAlignedFrameB,_bx_WheelJoint_SetSpinMotorSpeed,_bx_WheelJoint_SetMaxSpinTorque,_bx_WheelJoint_EnableSpinMotor,_bx_WheelJoint_SetTargetSteeringAngle,_bx_WheelJoint_SetSuspension,_bx_RayHitsPtr,_bx_RayHitPointsF64Ptr,_bx_World_CastRay,_bx_World_CastShape,_bx_OverlapsPtr,_bx_World_OverlapShape,_bx_GeometryPtr,_bx_Body_GetShapeGeometry,__emscripten_tls_init,_pthread_self,__emscripten_thread_init,___set_thread_state,__emscripten_thread_crashed,__emscripten_run_js_on_main_thread_done,__emscripten_run_js_on_main_thread,__emscripten_thread_free_data,__emscripten_thread_exit,__emscripten_check_mailbox,_emscripten_stack_set_limits,__emscripten_stack_restore,__emscripten_stack_alloc,_emscripten_stack_get_current,__indirect_function_table,wasmTable;function assignWasmExports(wasmExports){_free=Module["_free"]=wasmExports["free"];_bx_Scratch=Module["_bx_Scratch"]=wasmExports["bx_Scratch"];_bx_Alloc=Module["_bx_Alloc"]=wasmExports["bx_Alloc"];_malloc=Module["_malloc"]=wasmExports["malloc"];_bx_Free=Module["_bx_Free"]=wasmExports["bx_Free"];_bx_GetVersion=Module["_bx_GetVersion"]=wasmExports["bx_GetVersion"];_bx_ScratchF64=Module["_bx_ScratchF64"]=wasmExports["bx_ScratchF64"];_bx_IsDoublePrecision=Module["_bx_IsDoublePrecision"]=wasmExports["bx_IsDoublePrecision"];_bx_GetRejectedSlotCount=Module["_bx_GetRejectedSlotCount"]=wasmExports["bx_GetRejectedSlotCount"];_bx_Body_SetClipPlane=Module["_bx_Body_SetClipPlane"]=wasmExports["bx_Body_SetClipPlane"];_bx_Body_GetClipPlane=Module["_bx_Body_GetClipPlane"]=wasmExports["bx_Body_GetClipPlane"];_bx_GetMaxWorkers=Module["_bx_GetMaxWorkers"]=wasmExports["bx_GetMaxWorkers"];_bx_CreateWorld=Module["_bx_CreateWorld"]=wasmExports["bx_CreateWorld"];_bx_World_GetWorkerCount=Module["_bx_World_GetWorkerCount"]=wasmExports["bx_World_GetWorkerCount"];_bx_DestroyWorld=Module["_bx_DestroyWorld"]=wasmExports["bx_DestroyWorld"];_bx_ShapeDesc_Destroy=Module["_bx_ShapeDesc_Destroy"]=wasmExports["bx_ShapeDesc_Destroy"];_bx_World_Step=Module["_bx_World_Step"]=wasmExports["bx_World_Step"];_bx_World_EnableTimer=Module["_bx_World_EnableTimer"]=wasmExports["bx_World_EnableTimer"];_bx_World_IsTimerEnabled=Module["_bx_World_IsTimerEnabled"]=wasmExports["bx_World_IsTimerEnabled"];_bx_World_SetGravity=Module["_bx_World_SetGravity"]=wasmExports["bx_World_SetGravity"];_bx_World_SetMaximumLinearSpeed=Module["_bx_World_SetMaximumLinearSpeed"]=wasmExports["bx_World_SetMaximumLinearSpeed"];_bx_World_GetMaximumLinearSpeed=Module["_bx_World_GetMaximumLinearSpeed"]=wasmExports["bx_World_GetMaximumLinearSpeed"];_bx_World_EnableSleeping=Module["_bx_World_EnableSleeping"]=wasmExports["bx_World_EnableSleeping"];_bx_World_EnableContinuous=Module["_bx_World_EnableContinuous"]=wasmExports["bx_World_EnableContinuous"];_bx_World_SetContactTuning=Module["_bx_World_SetContactTuning"]=wasmExports["bx_World_SetContactTuning"];_bx_World_Explode=Module["_bx_World_Explode"]=wasmExports["bx_World_Explode"];_bx_World_GetAwakeBodyCount=Module["_bx_World_GetAwakeBodyCount"]=wasmExports["bx_World_GetAwakeBodyCount"];_bx_World_GetJointEventCount=Module["_bx_World_GetJointEventCount"]=wasmExports["bx_World_GetJointEventCount"];_bx_World_GetStackUsed=Module["_bx_World_GetStackUsed"]=wasmExports["bx_World_GetStackUsed"];_bx_World_GetStats=Module["_bx_World_GetStats"]=wasmExports["bx_World_GetStats"];_bx_MoveEventsPtr=Module["_bx_MoveEventsPtr"]=wasmExports["bx_MoveEventsPtr"];_bx_ContactEventsPtr=Module["_bx_ContactEventsPtr"]=wasmExports["bx_ContactEventsPtr"];_bx_SensorEventsPtr=Module["_bx_SensorEventsPtr"]=wasmExports["bx_SensorEventsPtr"];_bx_World_GetMoveEvents=Module["_bx_World_GetMoveEvents"]=wasmExports["bx_World_GetMoveEvents"];_bx_World_GetContactEvents=Module["_bx_World_GetContactEvents"]=wasmExports["bx_World_GetContactEvents"];_bx_World_GetSensorEvents=Module["_bx_World_GetSensorEvents"]=wasmExports["bx_World_GetSensorEvents"];_bx_CreateBody=Module["_bx_CreateBody"]=wasmExports["bx_CreateBody"];_bx_DestroyBody=Module["_bx_DestroyBody"]=wasmExports["bx_DestroyBody"];_bx_Body_SetType=Module["_bx_Body_SetType"]=wasmExports["bx_Body_SetType"];_bx_Body_GetType=Module["_bx_Body_GetType"]=wasmExports["bx_Body_GetType"];_bx_Body_SetTransform=Module["_bx_Body_SetTransform"]=wasmExports["bx_Body_SetTransform"];_bx_Body_GetTransform=Module["_bx_Body_GetTransform"]=wasmExports["bx_Body_GetTransform"];_bx_Body_SetTargetTransform=Module["_bx_Body_SetTargetTransform"]=wasmExports["bx_Body_SetTargetTransform"];_bx_Body_SetLinearVelocity=Module["_bx_Body_SetLinearVelocity"]=wasmExports["bx_Body_SetLinearVelocity"];_bx_Body_GetLinearVelocity=Module["_bx_Body_GetLinearVelocity"]=wasmExports["bx_Body_GetLinearVelocity"];_bx_Body_SetAngularVelocity=Module["_bx_Body_SetAngularVelocity"]=wasmExports["bx_Body_SetAngularVelocity"];_bx_Body_GetAngularVelocity=Module["_bx_Body_GetAngularVelocity"]=wasmExports["bx_Body_GetAngularVelocity"];_bx_Body_SetLinearDamping=Module["_bx_Body_SetLinearDamping"]=wasmExports["bx_Body_SetLinearDamping"];_bx_Body_GetLinearDamping=Module["_bx_Body_GetLinearDamping"]=wasmExports["bx_Body_GetLinearDamping"];_bx_Body_SetAngularDamping=Module["_bx_Body_SetAngularDamping"]=wasmExports["bx_Body_SetAngularDamping"];_bx_Body_GetAngularDamping=Module["_bx_Body_GetAngularDamping"]=wasmExports["bx_Body_GetAngularDamping"];_bx_Body_SetGravityScale=Module["_bx_Body_SetGravityScale"]=wasmExports["bx_Body_SetGravityScale"];_bx_Body_GetGravityScale=Module["_bx_Body_GetGravityScale"]=wasmExports["bx_Body_GetGravityScale"];_bx_Body_ApplyForce=Module["_bx_Body_ApplyForce"]=wasmExports["bx_Body_ApplyForce"];_bx_Body_ApplyForceToCenter=Module["_bx_Body_ApplyForceToCenter"]=wasmExports["bx_Body_ApplyForceToCenter"];_bx_Body_ApplyTorque=Module["_bx_Body_ApplyTorque"]=wasmExports["bx_Body_ApplyTorque"];_bx_Body_ApplyLinearImpulse=Module["_bx_Body_ApplyLinearImpulse"]=wasmExports["bx_Body_ApplyLinearImpulse"];_bx_Body_ApplyLinearImpulseToCenter=Module["_bx_Body_ApplyLinearImpulseToCenter"]=wasmExports["bx_Body_ApplyLinearImpulseToCenter"];_bx_Body_ApplyAngularImpulse=Module["_bx_Body_ApplyAngularImpulse"]=wasmExports["bx_Body_ApplyAngularImpulse"];_bx_Body_SetAwake=Module["_bx_Body_SetAwake"]=wasmExports["bx_Body_SetAwake"];_bx_Body_IsAwake=Module["_bx_Body_IsAwake"]=wasmExports["bx_Body_IsAwake"];_bx_Body_EnableSleep=Module["_bx_Body_EnableSleep"]=wasmExports["bx_Body_EnableSleep"];_bx_Body_SetBullet=Module["_bx_Body_SetBullet"]=wasmExports["bx_Body_SetBullet"];_bx_Body_EnableContinuous=Module["_bx_Body_EnableContinuous"]=wasmExports["bx_Body_EnableContinuous"];_bx_Body_IsContinuousEnabled=Module["_bx_Body_IsContinuousEnabled"]=wasmExports["bx_Body_IsContinuousEnabled"];_bx_Body_SetAabbMargin=Module["_bx_Body_SetAabbMargin"]=wasmExports["bx_Body_SetAabbMargin"];_bx_Body_GetAabbMargin=Module["_bx_Body_GetAabbMargin"]=wasmExports["bx_Body_GetAabbMargin"];_bx_Body_SetShapeCrush=Module["_bx_Body_SetShapeCrush"]=wasmExports["bx_Body_SetShapeCrush"];_bx_Body_GetShapeCrush=Module["_bx_Body_GetShapeCrush"]=wasmExports["bx_Body_GetShapeCrush"];_bx_BodyContactsPtr=Module["_bx_BodyContactsPtr"]=wasmExports["bx_BodyContactsPtr"];_bx_BodyContactPointsF64Ptr=Module["_bx_BodyContactPointsF64Ptr"]=wasmExports["bx_BodyContactPointsF64Ptr"];_bx_Body_GetContacts=Module["_bx_Body_GetContacts"]=wasmExports["bx_Body_GetContacts"];_bx_Body_AllowFastRotation=Module["_bx_Body_AllowFastRotation"]=wasmExports["bx_Body_AllowFastRotation"];_bx_Body_SetMotionLocks=Module["_bx_Body_SetMotionLocks"]=wasmExports["bx_Body_SetMotionLocks"];_bx_Body_GetAABB=Module["_bx_Body_GetAABB"]=wasmExports["bx_Body_GetAABB"];_bx_Body_ComputeShapeMassData=Module["_bx_Body_ComputeShapeMassData"]=wasmExports["bx_Body_ComputeShapeMassData"];_bx_Body_GetMassData=Module["_bx_Body_GetMassData"]=wasmExports["bx_Body_GetMassData"];_bx_Body_SetMassDataFull=Module["_bx_Body_SetMassDataFull"]=wasmExports["bx_Body_SetMassDataFull"];_bx_Body_SetMassData=Module["_bx_Body_SetMassData"]=wasmExports["bx_Body_SetMassData"];_bx_Body_GetMotionLocks=Module["_bx_Body_GetMotionLocks"]=wasmExports["bx_Body_GetMotionLocks"];_bx_Body_ApplyMassFromShapes=Module["_bx_Body_ApplyMassFromShapes"]=wasmExports["bx_Body_ApplyMassFromShapes"];_bx_Body_GetShapeCount=Module["_bx_Body_GetShapeCount"]=wasmExports["bx_Body_GetShapeCount"];_bx_Body_SetFeatureKey=Module["_bx_Body_SetFeatureKey"]=wasmExports["bx_Body_SetFeatureKey"];_bx_Body_GetFeatureKey=Module["_bx_Body_GetFeatureKey"]=wasmExports["bx_Body_GetFeatureKey"];_bx_Body_GetShapeFeatureKey=Module["_bx_Body_GetShapeFeatureKey"]=wasmExports["bx_Body_GetShapeFeatureKey"];_bx_Body_SetEventFlags=Module["_bx_Body_SetEventFlags"]=wasmExports["bx_Body_SetEventFlags"];_bx_Body_GetEventFlags=Module["_bx_Body_GetEventFlags"]=wasmExports["bx_Body_GetEventFlags"];_bx_Body_EnableContactEvents=Module["_bx_Body_EnableContactEvents"]=wasmExports["bx_Body_EnableContactEvents"];_bx_ShapeDesc_CreateSphere=Module["_bx_ShapeDesc_CreateSphere"]=wasmExports["bx_ShapeDesc_CreateSphere"];_bx_ShapeDesc_CreateCapsule=Module["_bx_ShapeDesc_CreateCapsule"]=wasmExports["bx_ShapeDesc_CreateCapsule"];_bx_ShapeDesc_CreateBox=Module["_bx_ShapeDesc_CreateBox"]=wasmExports["bx_ShapeDesc_CreateBox"];_bx_ShapeDesc_CreateCylinder=Module["_bx_ShapeDesc_CreateCylinder"]=wasmExports["bx_ShapeDesc_CreateCylinder"];_bx_ShapeDesc_CreateHull=Module["_bx_ShapeDesc_CreateHull"]=wasmExports["bx_ShapeDesc_CreateHull"];_bx_ShapeDesc_CreateMesh=Module["_bx_ShapeDesc_CreateMesh"]=wasmExports["bx_ShapeDesc_CreateMesh"];_bx_ShapeDesc_CreateHeightField=Module["_bx_ShapeDesc_CreateHeightField"]=wasmExports["bx_ShapeDesc_CreateHeightField"];_bx_ShapeDesc_GetGeometryBytes=Module["_bx_ShapeDesc_GetGeometryBytes"]=wasmExports["bx_ShapeDesc_GetGeometryBytes"];_bx_ShapeDesc_GetGeometryByteCount=Module["_bx_ShapeDesc_GetGeometryByteCount"]=wasmExports["bx_ShapeDesc_GetGeometryByteCount"];_bx_ShapeDesc_CreateMeshFromBytes=Module["_bx_ShapeDesc_CreateMeshFromBytes"]=wasmExports["bx_ShapeDesc_CreateMeshFromBytes"];_bx_ShapeDesc_CreateHeightFieldFromBytes=Module["_bx_ShapeDesc_CreateHeightFieldFromBytes"]=wasmExports["bx_ShapeDesc_CreateHeightFieldFromBytes"];_bx_ShapeDesc_CreateContainer=Module["_bx_ShapeDesc_CreateContainer"]=wasmExports["bx_ShapeDesc_CreateContainer"];_bx_ShapeDesc_AddChild=Module["_bx_ShapeDesc_AddChild"]=wasmExports["bx_ShapeDesc_AddChild"];_bx_ShapeDesc_RemoveChild=Module["_bx_ShapeDesc_RemoveChild"]=wasmExports["bx_ShapeDesc_RemoveChild"];_bx_ShapeDesc_GetChildCount=Module["_bx_ShapeDesc_GetChildCount"]=wasmExports["bx_ShapeDesc_GetChildCount"];_bx_ShapeDesc_GetKind=Module["_bx_ShapeDesc_GetKind"]=wasmExports["bx_ShapeDesc_GetKind"];_bx_ShapeDesc_SetMaterial=Module["_bx_ShapeDesc_SetMaterial"]=wasmExports["bx_ShapeDesc_SetMaterial"];_bx_ShapeDesc_GetFriction=Module["_bx_ShapeDesc_GetFriction"]=wasmExports["bx_ShapeDesc_GetFriction"];_bx_ShapeDesc_GetRestitution=Module["_bx_ShapeDesc_GetRestitution"]=wasmExports["bx_ShapeDesc_GetRestitution"];_bx_ShapeDesc_SetDensity=Module["_bx_ShapeDesc_SetDensity"]=wasmExports["bx_ShapeDesc_SetDensity"];_bx_ShapeDesc_GetDensity=Module["_bx_ShapeDesc_GetDensity"]=wasmExports["bx_ShapeDesc_GetDensity"];_bx_ShapeDesc_SetFilter=Module["_bx_ShapeDesc_SetFilter"]=wasmExports["bx_ShapeDesc_SetFilter"];_bx_ShapeDesc_GetCategoryBits=Module["_bx_ShapeDesc_GetCategoryBits"]=wasmExports["bx_ShapeDesc_GetCategoryBits"];_bx_ShapeDesc_GetMaskBits=Module["_bx_ShapeDesc_GetMaskBits"]=wasmExports["bx_ShapeDesc_GetMaskBits"];_bx_ShapeDesc_SetGroup=Module["_bx_ShapeDesc_SetGroup"]=wasmExports["bx_ShapeDesc_SetGroup"];_bx_ShapeDesc_SetRollingResistance=Module["_bx_ShapeDesc_SetRollingResistance"]=wasmExports["bx_ShapeDesc_SetRollingResistance"];_bx_ShapeDesc_SetSensor=Module["_bx_ShapeDesc_SetSensor"]=wasmExports["bx_ShapeDesc_SetSensor"];_bx_ShapeDesc_IsSensor=Module["_bx_ShapeDesc_IsSensor"]=wasmExports["bx_ShapeDesc_IsSensor"];_bx_ShapeDesc_SetInvokeContactCreation=Module["_bx_ShapeDesc_SetInvokeContactCreation"]=wasmExports["bx_ShapeDesc_SetInvokeContactCreation"];_bx_ShapeDesc_GetInvokeContactCreation=Module["_bx_ShapeDesc_GetInvokeContactCreation"]=wasmExports["bx_ShapeDesc_GetInvokeContactCreation"];_bx_ShapeDesc_GetAABB=Module["_bx_ShapeDesc_GetAABB"]=wasmExports["bx_ShapeDesc_GetAABB"];_bx_GetShapeBuildCount=Module["_bx_GetShapeBuildCount"]=wasmExports["bx_GetShapeBuildCount"];_bx_GetShapeDescCount=Module["_bx_GetShapeDescCount"]=wasmExports["bx_GetShapeDescCount"];_bx_Body_SetShape=Module["_bx_Body_SetShape"]=wasmExports["bx_Body_SetShape"];_bx_Body_SetShapeHull=Module["_bx_Body_SetShapeHull"]=wasmExports["bx_Body_SetShapeHull"];_bx_Body_TranslateShape=Module["_bx_Body_TranslateShape"]=wasmExports["bx_Body_TranslateShape"];_bx_Body_SetShapeFilter=Module["_bx_Body_SetShapeFilter"]=wasmExports["bx_Body_SetShapeFilter"];_bx_Body_RemoveShape=Module["_bx_Body_RemoveShape"]=wasmExports["bx_Body_RemoveShape"];_bx_Body_HasShape=Module["_bx_Body_HasShape"]=wasmExports["bx_Body_HasShape"];_bx_Body_GetShapeInfo=Module["_bx_Body_GetShapeInfo"]=wasmExports["bx_Body_GetShapeInfo"];_bx_Body_SyncShapeDesc=Module["_bx_Body_SyncShapeDesc"]=wasmExports["bx_Body_SyncShapeDesc"];_bx_Body_GetShapeDesc=Module["_bx_Body_GetShapeDesc"]=wasmExports["bx_Body_GetShapeDesc"];_bx_ShapeDesc_BuildDebugGeometry=Module["_bx_ShapeDesc_BuildDebugGeometry"]=wasmExports["bx_ShapeDesc_BuildDebugGeometry"];_bx_DebugPositionsPtr=Module["_bx_DebugPositionsPtr"]=wasmExports["bx_DebugPositionsPtr"];_bx_DebugIndicesPtr=Module["_bx_DebugIndicesPtr"]=wasmExports["bx_DebugIndicesPtr"];_bx_DebugIndexCount=Module["_bx_DebugIndexCount"]=wasmExports["bx_DebugIndexCount"];_bx_CreateJoint=Module["_bx_CreateJoint"]=wasmExports["bx_CreateJoint"];_bx_DestroyJoint=Module["_bx_DestroyJoint"]=wasmExports["bx_DestroyJoint"];_bx_Joint_IsValid=Module["_bx_Joint_IsValid"]=wasmExports["bx_Joint_IsValid"];_bx_Joint_SetCollideConnected=Module["_bx_Joint_SetCollideConnected"]=wasmExports["bx_Joint_SetCollideConnected"];_bx_Joint_SetConstraintTuning=Module["_bx_Joint_SetConstraintTuning"]=wasmExports["bx_Joint_SetConstraintTuning"];_bx_Joint_WakeBodies=Module["_bx_Joint_WakeBodies"]=wasmExports["bx_Joint_WakeBodies"];_bx_Joint_EnableLimit=Module["_bx_Joint_EnableLimit"]=wasmExports["bx_Joint_EnableLimit"];_bx_Joint_SetLimits=Module["_bx_Joint_SetLimits"]=wasmExports["bx_Joint_SetLimits"];_bx_Joint_SetTwistLimits=Module["_bx_Joint_SetTwistLimits"]=wasmExports["bx_Joint_SetTwistLimits"];_bx_Joint_EnableMotor=Module["_bx_Joint_EnableMotor"]=wasmExports["bx_Joint_EnableMotor"];_bx_Joint_UpdateMotorFrame=Module["_bx_Joint_UpdateMotorFrame"]=wasmExports["bx_Joint_UpdateMotorFrame"];_bx_Joint_SetSphericalMotor=Module["_bx_Joint_SetSphericalMotor"]=wasmExports["bx_Joint_SetSphericalMotor"];_bx_Joint_SetSphericalTarget=Module["_bx_Joint_SetSphericalTarget"]=wasmExports["bx_Joint_SetSphericalTarget"];_bx_Joint_SetMotorSpeed=Module["_bx_Joint_SetMotorSpeed"]=wasmExports["bx_Joint_SetMotorSpeed"];_bx_Joint_SetMaxMotorForce=Module["_bx_Joint_SetMaxMotorForce"]=wasmExports["bx_Joint_SetMaxMotorForce"];_bx_Joint_EnableSpring=Module["_bx_Joint_EnableSpring"]=wasmExports["bx_Joint_EnableSpring"];_bx_Joint_SetSpring=Module["_bx_Joint_SetSpring"]=wasmExports["bx_Joint_SetSpring"];_bx_Joint_SetTarget=Module["_bx_Joint_SetTarget"]=wasmExports["bx_Joint_SetTarget"];_bx_Joint_GetPosition=Module["_bx_Joint_GetPosition"]=wasmExports["bx_Joint_GetPosition"];_bx_ComputeAlignedFrameB=Module["_bx_ComputeAlignedFrameB"]=wasmExports["bx_ComputeAlignedFrameB"];_bx_WheelJoint_SetSpinMotorSpeed=Module["_bx_WheelJoint_SetSpinMotorSpeed"]=wasmExports["bx_WheelJoint_SetSpinMotorSpeed"];_bx_WheelJoint_SetMaxSpinTorque=Module["_bx_WheelJoint_SetMaxSpinTorque"]=wasmExports["bx_WheelJoint_SetMaxSpinTorque"];_bx_WheelJoint_EnableSpinMotor=Module["_bx_WheelJoint_EnableSpinMotor"]=wasmExports["bx_WheelJoint_EnableSpinMotor"];_bx_WheelJoint_SetTargetSteeringAngle=Module["_bx_WheelJoint_SetTargetSteeringAngle"]=wasmExports["bx_WheelJoint_SetTargetSteeringAngle"];_bx_WheelJoint_SetSuspension=Module["_bx_WheelJoint_SetSuspension"]=wasmExports["bx_WheelJoint_SetSuspension"];_bx_RayHitsPtr=Module["_bx_RayHitsPtr"]=wasmExports["bx_RayHitsPtr"];_bx_RayHitPointsF64Ptr=Module["_bx_RayHitPointsF64Ptr"]=wasmExports["bx_RayHitPointsF64Ptr"];_bx_World_CastRay=Module["_bx_World_CastRay"]=wasmExports["bx_World_CastRay"];_bx_World_CastShape=Module["_bx_World_CastShape"]=wasmExports["bx_World_CastShape"];_bx_OverlapsPtr=Module["_bx_OverlapsPtr"]=wasmExports["bx_OverlapsPtr"];_bx_World_OverlapShape=Module["_bx_World_OverlapShape"]=wasmExports["bx_World_OverlapShape"];_bx_GeometryPtr=Module["_bx_GeometryPtr"]=wasmExports["bx_GeometryPtr"];_bx_Body_GetShapeGeometry=Module["_bx_Body_GetShapeGeometry"]=wasmExports["bx_Body_GetShapeGeometry"];__emscripten_tls_init=wasmExports["_emscripten_tls_init"];_pthread_self=wasmExports["pthread_self"];__emscripten_thread_init=wasmExports["_emscripten_thread_init"];___set_thread_state=wasmExports["__set_thread_state"];__emscripten_thread_crashed=wasmExports["_emscripten_thread_crashed"];__emscripten_run_js_on_main_thread_done=wasmExports["_emscripten_run_js_on_main_thread_done"];__emscripten_run_js_on_main_thread=wasmExports["_emscripten_run_js_on_main_thread"];__emscripten_thread_free_data=wasmExports["_emscripten_thread_free_data"];__emscripten_thread_exit=wasmExports["_emscripten_thread_exit"];__emscripten_check_mailbox=wasmExports["_emscripten_check_mailbox"];_emscripten_stack_set_limits=wasmExports["emscripten_stack_set_limits"];__emscripten_stack_restore=wasmExports["_emscripten_stack_restore"];__emscripten_stack_alloc=wasmExports["_emscripten_stack_alloc"];_emscripten_stack_get_current=wasmExports["emscripten_stack_get_current"];__indirect_function_table=wasmTable=wasmExports["__indirect_function_table"]}var wasmImports;function assignWasmImports(){wasmImports={__pthread_create_js:___pthread_create_js,_emscripten_init_main_thread_js:__emscripten_init_main_thread_js,_emscripten_notify_mailbox_postmessage:__emscripten_notify_mailbox_postmessage,_emscripten_receive_on_main_thread_js:__emscripten_receive_on_main_thread_js,_emscripten_thread_cleanup:__emscripten_thread_cleanup,_emscripten_thread_mailbox_await:__emscripten_thread_mailbox_await,_emscripten_thread_set_strongref:__emscripten_thread_set_strongref,clock_time_get:_clock_time_get,emscripten_check_blocking_allowed:_emscripten_check_blocking_allowed,emscripten_exit_with_live_runtime:_emscripten_exit_with_live_runtime,emscripten_get_now:_emscripten_get_now,emscripten_resize_heap:_emscripten_resize_heap,exit:_exit,fd_write:_fd_write,memory:wasmMemory}}async function run(){if(ENVIRONMENT_IS_PTHREAD){initRuntime();return}preRun();if(runDependencies){await resolveRunDependencies()}var setStatus=Module["setStatus"];if(setStatus){setStatus("Running...");await new Promise(resolve=>setTimeout(resolve,1));setTimeout(setStatus,1,"")}if(ABORT)return;initRuntime();Module["onRuntimeInitialized"]?.();postRun()}var wasmExports;if(!ENVIRONMENT_IS_PTHREAD){wasmExports=await createWasm();await run()}
|
|
2
|
+
;return Module}export default Box3D;var isPthread=globalThis.name=="em-pthread";var isNode=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";if(isNode)isPthread=(await import("node:worker_threads")).workerData==="em-pthread";isPthread&&Box3D();
|
|
Binary file
|
package/lib/umd/box3d.umd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var Box3D=(()=>{var _scriptName=globalThis.document?.currentScript?.src;return async function(moduleArg={}){var Module=moduleArg;var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=!!globalThis.WorkerGlobalScope;var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";var programArgs=[];var thisProgram="./this.program";if(ENVIRONMENT_IS_WORKER){_scriptName=self.location.href}var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}{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=async url=>{var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);var wasmBinary;var ABORT=false;class EmscriptenEH{}class EmscriptenSjLj extends EmscriptenEH{}var runtimeInitialized=false;function getMemoryBuffer(){return wasmMemory.buffer}function updateMemoryViews(){if(HEAP8?.buffer?.resizable)return;var b=getMemoryBuffer();HEAP8=new Int8Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b)}function preRun(){var preRun=Module["preRun"];if(preRun){if(typeof preRun=="function")preRun=[preRun];onPreRuns.push(...preRun)}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;wasmExports["__wasm_call_ctors"]()}function postRun(){var postRun=Module["postRun"];if(postRun){if(typeof postRun=="function")postRun=[postRun];onPostRuns.push(...postRun)}callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what=`Aborted(${what})`;err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var wasmBinaryFile;function findWasmBinary(){return locateFile("box3d.umd.wasm")}function getBinarySync(file){if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){var imports={env:wasmImports,wasi_snapshot_preview1:wasmImports};return imports}async function createWasm(){function receiveInstance(instance){wasmExports=instance.exports;assignWasmExports(wasmExports);updateMemoryViews();return wasmExports}function receiveInstantiationResult(result){return receiveInstance(result["instance"])}var info=getWasmImports();var instantiateWasm=Module["instantiateWasm"];if(instantiateWasm){return new Promise(resolve=>{instantiateWasm(info,inst=>resolve(receiveInstance(inst)))})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var HEAP8;var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var onPreRuns=[];var noExitRuntime=true;var _emscripten_get_now=()=>performance.now();var _emscripten_date_now=()=>Date.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>num<INT53_MIN||num>INT53_MAX?NaN:Number(num);var HEAP64;function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);HEAP64[ptime>>3]=BigInt(nsec);return 0}var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var HEAPU8;var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};var printCharBuffers=[null,[],[]];var UTF8Decoder=globalThis.TextDecoder&&new TextDecoder;var findStringEnd=(heapOrArray,idx,maxBytesToRead,ignoreNul)=>{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);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};var printChar=(stream,curr)=>{var buffer=printCharBuffers[stream];if(!curr||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer));buffer.length=0}else{buffer.push(curr)}};var HEAPU32;var _fd_write=(fd,iov,iovcnt,pnum)=>{var num=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j<len;j++){printChar(fd,HEAPU8[ptr+j])}num+=len}HEAPU32[pnum>>2]=num;return 0};var HEAPF32;var HEAPF64;var HEAP32;{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["arguments"])programArgs=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];var preInit=Module["preInit"];if(preInit){if(typeof preInit=="function")Module["preInit"]=preInit=[preInit];while(preInit.length>0){preInit.shift()()}}}var _free,_bx_Scratch,_bx_Alloc,_malloc,_bx_Free,_bx_GetVersion,_bx_ScratchF64,_bx_IsDoublePrecision,_bx_GetRejectedSlotCount,_bx_Body_SetClipPlane,_bx_Body_GetClipPlane,_bx_GetMaxWorkers,_bx_CreateWorld,_bx_World_GetWorkerCount,_bx_DestroyWorld,_bx_ShapeDesc_Destroy,_bx_World_Step,_bx_World_SetGravity,_bx_World_SetMaximumLinearSpeed,_bx_World_GetMaximumLinearSpeed,_bx_World_EnableSleeping,_bx_World_EnableContinuous,_bx_World_SetContactTuning,_bx_World_Explode,_bx_World_GetAwakeBodyCount,_bx_World_GetJointEventCount,_bx_World_GetStackUsed,_bx_World_GetStats,_bx_MoveEventsPtr,_bx_ContactEventsPtr,_bx_SensorEventsPtr,_bx_World_GetMoveEvents,_bx_World_GetContactEvents,_bx_World_GetSensorEvents,_bx_CreateBody,_bx_DestroyBody,_bx_Body_SetType,_bx_Body_GetType,_bx_Body_SetTransform,_bx_Body_GetTransform,_bx_Body_SetTargetTransform,_bx_Body_SetLinearVelocity,_bx_Body_GetLinearVelocity,_bx_Body_SetAngularVelocity,_bx_Body_GetAngularVelocity,_bx_Body_SetLinearDamping,_bx_Body_GetLinearDamping,_bx_Body_SetAngularDamping,_bx_Body_GetAngularDamping,_bx_Body_SetGravityScale,_bx_Body_GetGravityScale,_bx_Body_ApplyForce,_bx_Body_ApplyForceToCenter,_bx_Body_ApplyTorque,_bx_Body_ApplyLinearImpulse,_bx_Body_ApplyLinearImpulseToCenter,_bx_Body_ApplyAngularImpulse,_bx_Body_SetAwake,_bx_Body_IsAwake,_bx_Body_EnableSleep,_bx_Body_SetBullet,_bx_Body_EnableContinuous,_bx_Body_IsContinuousEnabled,_bx_Body_SetShapeCrush,_bx_Body_GetShapeCrush,_bx_BodyContactsPtr,_bx_BodyContactPointsF64Ptr,_bx_Body_GetContacts,_bx_Body_AllowFastRotation,_bx_Body_SetMotionLocks,_bx_Body_GetAABB,_bx_Body_ComputeShapeMassData,_bx_Body_GetMassData,_bx_Body_SetMassDataFull,_bx_Body_SetMassData,_bx_Body_GetMotionLocks,_bx_Body_ApplyMassFromShapes,_bx_Body_GetShapeCount,_bx_Body_SetFeatureKey,_bx_Body_GetFeatureKey,_bx_Body_GetShapeFeatureKey,_bx_Body_SetEventFlags,_bx_Body_GetEventFlags,_bx_Body_EnableContactEvents,_bx_ShapeDesc_CreateSphere,_bx_ShapeDesc_CreateCapsule,_bx_ShapeDesc_CreateBox,_bx_ShapeDesc_CreateCylinder,_bx_ShapeDesc_CreateHull,_bx_ShapeDesc_CreateMesh,_bx_ShapeDesc_CreateHeightField,_bx_ShapeDesc_GetGeometryBytes,_bx_ShapeDesc_GetGeometryByteCount,_bx_ShapeDesc_CreateMeshFromBytes,_bx_ShapeDesc_CreateHeightFieldFromBytes,_bx_ShapeDesc_CreateContainer,_bx_ShapeDesc_AddChild,_bx_ShapeDesc_RemoveChild,_bx_ShapeDesc_GetChildCount,_bx_ShapeDesc_GetKind,_bx_ShapeDesc_SetMaterial,_bx_ShapeDesc_GetFriction,_bx_ShapeDesc_GetRestitution,_bx_ShapeDesc_SetDensity,_bx_ShapeDesc_GetDensity,_bx_ShapeDesc_SetFilter,_bx_ShapeDesc_GetCategoryBits,_bx_ShapeDesc_GetMaskBits,_bx_ShapeDesc_SetGroup,_bx_ShapeDesc_SetRollingResistance,_bx_ShapeDesc_SetSensor,_bx_ShapeDesc_IsSensor,_bx_ShapeDesc_SetInvokeContactCreation,_bx_ShapeDesc_GetInvokeContactCreation,_bx_ShapeDesc_GetAABB,_bx_GetShapeBuildCount,_bx_GetShapeDescCount,_bx_Body_SetShape,_bx_Body_SetShapeHull,_bx_Body_TranslateShape,_bx_Body_SetShapeFilter,_bx_Body_RemoveShape,_bx_Body_HasShape,_bx_Body_GetShapeInfo,_bx_Body_SyncShapeDesc,_bx_Body_GetShapeDesc,_bx_ShapeDesc_BuildDebugGeometry,_bx_DebugPositionsPtr,_bx_DebugIndicesPtr,_bx_DebugIndexCount,_bx_CreateJoint,_bx_DestroyJoint,_bx_Joint_IsValid,_bx_Joint_SetCollideConnected,_bx_Joint_SetConstraintTuning,_bx_Joint_WakeBodies,_bx_Joint_EnableLimit,_bx_Joint_SetLimits,_bx_Joint_SetTwistLimits,_bx_Joint_EnableMotor,_bx_Joint_UpdateMotorFrame,_bx_Joint_SetSphericalMotor,_bx_Joint_SetSphericalTarget,_bx_Joint_SetMotorSpeed,_bx_Joint_SetMaxMotorForce,_bx_Joint_EnableSpring,_bx_Joint_SetSpring,_bx_Joint_SetTarget,_bx_Joint_GetPosition,_bx_ComputeAlignedFrameB,_bx_WheelJoint_SetSpinMotorSpeed,_bx_WheelJoint_SetMaxSpinTorque,_bx_WheelJoint_EnableSpinMotor,_bx_WheelJoint_SetTargetSteeringAngle,_bx_WheelJoint_SetSuspension,_bx_RayHitsPtr,_bx_RayHitPointsF64Ptr,_bx_World_CastRay,_bx_World_CastShape,_bx_OverlapsPtr,_bx_World_OverlapShape,_bx_GeometryPtr,_bx_Body_GetShapeGeometry,memory,__indirect_function_table,wasmMemory;function assignWasmExports(wasmExports){_free=Module["_free"]=wasmExports["free"];_bx_Scratch=Module["_bx_Scratch"]=wasmExports["bx_Scratch"];_bx_Alloc=Module["_bx_Alloc"]=wasmExports["bx_Alloc"];_malloc=Module["_malloc"]=wasmExports["malloc"];_bx_Free=Module["_bx_Free"]=wasmExports["bx_Free"];_bx_GetVersion=Module["_bx_GetVersion"]=wasmExports["bx_GetVersion"];_bx_ScratchF64=Module["_bx_ScratchF64"]=wasmExports["bx_ScratchF64"];_bx_IsDoublePrecision=Module["_bx_IsDoublePrecision"]=wasmExports["bx_IsDoublePrecision"];_bx_GetRejectedSlotCount=Module["_bx_GetRejectedSlotCount"]=wasmExports["bx_GetRejectedSlotCount"];_bx_Body_SetClipPlane=Module["_bx_Body_SetClipPlane"]=wasmExports["bx_Body_SetClipPlane"];_bx_Body_GetClipPlane=Module["_bx_Body_GetClipPlane"]=wasmExports["bx_Body_GetClipPlane"];_bx_GetMaxWorkers=Module["_bx_GetMaxWorkers"]=wasmExports["bx_GetMaxWorkers"];_bx_CreateWorld=Module["_bx_CreateWorld"]=wasmExports["bx_CreateWorld"];_bx_World_GetWorkerCount=Module["_bx_World_GetWorkerCount"]=wasmExports["bx_World_GetWorkerCount"];_bx_DestroyWorld=Module["_bx_DestroyWorld"]=wasmExports["bx_DestroyWorld"];_bx_ShapeDesc_Destroy=Module["_bx_ShapeDesc_Destroy"]=wasmExports["bx_ShapeDesc_Destroy"];_bx_World_Step=Module["_bx_World_Step"]=wasmExports["bx_World_Step"];_bx_World_SetGravity=Module["_bx_World_SetGravity"]=wasmExports["bx_World_SetGravity"];_bx_World_SetMaximumLinearSpeed=Module["_bx_World_SetMaximumLinearSpeed"]=wasmExports["bx_World_SetMaximumLinearSpeed"];_bx_World_GetMaximumLinearSpeed=Module["_bx_World_GetMaximumLinearSpeed"]=wasmExports["bx_World_GetMaximumLinearSpeed"];_bx_World_EnableSleeping=Module["_bx_World_EnableSleeping"]=wasmExports["bx_World_EnableSleeping"];_bx_World_EnableContinuous=Module["_bx_World_EnableContinuous"]=wasmExports["bx_World_EnableContinuous"];_bx_World_SetContactTuning=Module["_bx_World_SetContactTuning"]=wasmExports["bx_World_SetContactTuning"];_bx_World_Explode=Module["_bx_World_Explode"]=wasmExports["bx_World_Explode"];_bx_World_GetAwakeBodyCount=Module["_bx_World_GetAwakeBodyCount"]=wasmExports["bx_World_GetAwakeBodyCount"];_bx_World_GetJointEventCount=Module["_bx_World_GetJointEventCount"]=wasmExports["bx_World_GetJointEventCount"];_bx_World_GetStackUsed=Module["_bx_World_GetStackUsed"]=wasmExports["bx_World_GetStackUsed"];_bx_World_GetStats=Module["_bx_World_GetStats"]=wasmExports["bx_World_GetStats"];_bx_MoveEventsPtr=Module["_bx_MoveEventsPtr"]=wasmExports["bx_MoveEventsPtr"];_bx_ContactEventsPtr=Module["_bx_ContactEventsPtr"]=wasmExports["bx_ContactEventsPtr"];_bx_SensorEventsPtr=Module["_bx_SensorEventsPtr"]=wasmExports["bx_SensorEventsPtr"];_bx_World_GetMoveEvents=Module["_bx_World_GetMoveEvents"]=wasmExports["bx_World_GetMoveEvents"];_bx_World_GetContactEvents=Module["_bx_World_GetContactEvents"]=wasmExports["bx_World_GetContactEvents"];_bx_World_GetSensorEvents=Module["_bx_World_GetSensorEvents"]=wasmExports["bx_World_GetSensorEvents"];_bx_CreateBody=Module["_bx_CreateBody"]=wasmExports["bx_CreateBody"];_bx_DestroyBody=Module["_bx_DestroyBody"]=wasmExports["bx_DestroyBody"];_bx_Body_SetType=Module["_bx_Body_SetType"]=wasmExports["bx_Body_SetType"];_bx_Body_GetType=Module["_bx_Body_GetType"]=wasmExports["bx_Body_GetType"];_bx_Body_SetTransform=Module["_bx_Body_SetTransform"]=wasmExports["bx_Body_SetTransform"];_bx_Body_GetTransform=Module["_bx_Body_GetTransform"]=wasmExports["bx_Body_GetTransform"];_bx_Body_SetTargetTransform=Module["_bx_Body_SetTargetTransform"]=wasmExports["bx_Body_SetTargetTransform"];_bx_Body_SetLinearVelocity=Module["_bx_Body_SetLinearVelocity"]=wasmExports["bx_Body_SetLinearVelocity"];_bx_Body_GetLinearVelocity=Module["_bx_Body_GetLinearVelocity"]=wasmExports["bx_Body_GetLinearVelocity"];_bx_Body_SetAngularVelocity=Module["_bx_Body_SetAngularVelocity"]=wasmExports["bx_Body_SetAngularVelocity"];_bx_Body_GetAngularVelocity=Module["_bx_Body_GetAngularVelocity"]=wasmExports["bx_Body_GetAngularVelocity"];_bx_Body_SetLinearDamping=Module["_bx_Body_SetLinearDamping"]=wasmExports["bx_Body_SetLinearDamping"];_bx_Body_GetLinearDamping=Module["_bx_Body_GetLinearDamping"]=wasmExports["bx_Body_GetLinearDamping"];_bx_Body_SetAngularDamping=Module["_bx_Body_SetAngularDamping"]=wasmExports["bx_Body_SetAngularDamping"];_bx_Body_GetAngularDamping=Module["_bx_Body_GetAngularDamping"]=wasmExports["bx_Body_GetAngularDamping"];_bx_Body_SetGravityScale=Module["_bx_Body_SetGravityScale"]=wasmExports["bx_Body_SetGravityScale"];_bx_Body_GetGravityScale=Module["_bx_Body_GetGravityScale"]=wasmExports["bx_Body_GetGravityScale"];_bx_Body_ApplyForce=Module["_bx_Body_ApplyForce"]=wasmExports["bx_Body_ApplyForce"];_bx_Body_ApplyForceToCenter=Module["_bx_Body_ApplyForceToCenter"]=wasmExports["bx_Body_ApplyForceToCenter"];_bx_Body_ApplyTorque=Module["_bx_Body_ApplyTorque"]=wasmExports["bx_Body_ApplyTorque"];_bx_Body_ApplyLinearImpulse=Module["_bx_Body_ApplyLinearImpulse"]=wasmExports["bx_Body_ApplyLinearImpulse"];_bx_Body_ApplyLinearImpulseToCenter=Module["_bx_Body_ApplyLinearImpulseToCenter"]=wasmExports["bx_Body_ApplyLinearImpulseToCenter"];_bx_Body_ApplyAngularImpulse=Module["_bx_Body_ApplyAngularImpulse"]=wasmExports["bx_Body_ApplyAngularImpulse"];_bx_Body_SetAwake=Module["_bx_Body_SetAwake"]=wasmExports["bx_Body_SetAwake"];_bx_Body_IsAwake=Module["_bx_Body_IsAwake"]=wasmExports["bx_Body_IsAwake"];_bx_Body_EnableSleep=Module["_bx_Body_EnableSleep"]=wasmExports["bx_Body_EnableSleep"];_bx_Body_SetBullet=Module["_bx_Body_SetBullet"]=wasmExports["bx_Body_SetBullet"];_bx_Body_EnableContinuous=Module["_bx_Body_EnableContinuous"]=wasmExports["bx_Body_EnableContinuous"];_bx_Body_IsContinuousEnabled=Module["_bx_Body_IsContinuousEnabled"]=wasmExports["bx_Body_IsContinuousEnabled"];_bx_Body_SetShapeCrush=Module["_bx_Body_SetShapeCrush"]=wasmExports["bx_Body_SetShapeCrush"];_bx_Body_GetShapeCrush=Module["_bx_Body_GetShapeCrush"]=wasmExports["bx_Body_GetShapeCrush"];_bx_BodyContactsPtr=Module["_bx_BodyContactsPtr"]=wasmExports["bx_BodyContactsPtr"];_bx_BodyContactPointsF64Ptr=Module["_bx_BodyContactPointsF64Ptr"]=wasmExports["bx_BodyContactPointsF64Ptr"];_bx_Body_GetContacts=Module["_bx_Body_GetContacts"]=wasmExports["bx_Body_GetContacts"];_bx_Body_AllowFastRotation=Module["_bx_Body_AllowFastRotation"]=wasmExports["bx_Body_AllowFastRotation"];_bx_Body_SetMotionLocks=Module["_bx_Body_SetMotionLocks"]=wasmExports["bx_Body_SetMotionLocks"];_bx_Body_GetAABB=Module["_bx_Body_GetAABB"]=wasmExports["bx_Body_GetAABB"];_bx_Body_ComputeShapeMassData=Module["_bx_Body_ComputeShapeMassData"]=wasmExports["bx_Body_ComputeShapeMassData"];_bx_Body_GetMassData=Module["_bx_Body_GetMassData"]=wasmExports["bx_Body_GetMassData"];_bx_Body_SetMassDataFull=Module["_bx_Body_SetMassDataFull"]=wasmExports["bx_Body_SetMassDataFull"];_bx_Body_SetMassData=Module["_bx_Body_SetMassData"]=wasmExports["bx_Body_SetMassData"];_bx_Body_GetMotionLocks=Module["_bx_Body_GetMotionLocks"]=wasmExports["bx_Body_GetMotionLocks"];_bx_Body_ApplyMassFromShapes=Module["_bx_Body_ApplyMassFromShapes"]=wasmExports["bx_Body_ApplyMassFromShapes"];_bx_Body_GetShapeCount=Module["_bx_Body_GetShapeCount"]=wasmExports["bx_Body_GetShapeCount"];_bx_Body_SetFeatureKey=Module["_bx_Body_SetFeatureKey"]=wasmExports["bx_Body_SetFeatureKey"];_bx_Body_GetFeatureKey=Module["_bx_Body_GetFeatureKey"]=wasmExports["bx_Body_GetFeatureKey"];_bx_Body_GetShapeFeatureKey=Module["_bx_Body_GetShapeFeatureKey"]=wasmExports["bx_Body_GetShapeFeatureKey"];_bx_Body_SetEventFlags=Module["_bx_Body_SetEventFlags"]=wasmExports["bx_Body_SetEventFlags"];_bx_Body_GetEventFlags=Module["_bx_Body_GetEventFlags"]=wasmExports["bx_Body_GetEventFlags"];_bx_Body_EnableContactEvents=Module["_bx_Body_EnableContactEvents"]=wasmExports["bx_Body_EnableContactEvents"];_bx_ShapeDesc_CreateSphere=Module["_bx_ShapeDesc_CreateSphere"]=wasmExports["bx_ShapeDesc_CreateSphere"];_bx_ShapeDesc_CreateCapsule=Module["_bx_ShapeDesc_CreateCapsule"]=wasmExports["bx_ShapeDesc_CreateCapsule"];_bx_ShapeDesc_CreateBox=Module["_bx_ShapeDesc_CreateBox"]=wasmExports["bx_ShapeDesc_CreateBox"];_bx_ShapeDesc_CreateCylinder=Module["_bx_ShapeDesc_CreateCylinder"]=wasmExports["bx_ShapeDesc_CreateCylinder"];_bx_ShapeDesc_CreateHull=Module["_bx_ShapeDesc_CreateHull"]=wasmExports["bx_ShapeDesc_CreateHull"];_bx_ShapeDesc_CreateMesh=Module["_bx_ShapeDesc_CreateMesh"]=wasmExports["bx_ShapeDesc_CreateMesh"];_bx_ShapeDesc_CreateHeightField=Module["_bx_ShapeDesc_CreateHeightField"]=wasmExports["bx_ShapeDesc_CreateHeightField"];_bx_ShapeDesc_GetGeometryBytes=Module["_bx_ShapeDesc_GetGeometryBytes"]=wasmExports["bx_ShapeDesc_GetGeometryBytes"];_bx_ShapeDesc_GetGeometryByteCount=Module["_bx_ShapeDesc_GetGeometryByteCount"]=wasmExports["bx_ShapeDesc_GetGeometryByteCount"];_bx_ShapeDesc_CreateMeshFromBytes=Module["_bx_ShapeDesc_CreateMeshFromBytes"]=wasmExports["bx_ShapeDesc_CreateMeshFromBytes"];_bx_ShapeDesc_CreateHeightFieldFromBytes=Module["_bx_ShapeDesc_CreateHeightFieldFromBytes"]=wasmExports["bx_ShapeDesc_CreateHeightFieldFromBytes"];_bx_ShapeDesc_CreateContainer=Module["_bx_ShapeDesc_CreateContainer"]=wasmExports["bx_ShapeDesc_CreateContainer"];_bx_ShapeDesc_AddChild=Module["_bx_ShapeDesc_AddChild"]=wasmExports["bx_ShapeDesc_AddChild"];_bx_ShapeDesc_RemoveChild=Module["_bx_ShapeDesc_RemoveChild"]=wasmExports["bx_ShapeDesc_RemoveChild"];_bx_ShapeDesc_GetChildCount=Module["_bx_ShapeDesc_GetChildCount"]=wasmExports["bx_ShapeDesc_GetChildCount"];_bx_ShapeDesc_GetKind=Module["_bx_ShapeDesc_GetKind"]=wasmExports["bx_ShapeDesc_GetKind"];_bx_ShapeDesc_SetMaterial=Module["_bx_ShapeDesc_SetMaterial"]=wasmExports["bx_ShapeDesc_SetMaterial"];_bx_ShapeDesc_GetFriction=Module["_bx_ShapeDesc_GetFriction"]=wasmExports["bx_ShapeDesc_GetFriction"];_bx_ShapeDesc_GetRestitution=Module["_bx_ShapeDesc_GetRestitution"]=wasmExports["bx_ShapeDesc_GetRestitution"];_bx_ShapeDesc_SetDensity=Module["_bx_ShapeDesc_SetDensity"]=wasmExports["bx_ShapeDesc_SetDensity"];_bx_ShapeDesc_GetDensity=Module["_bx_ShapeDesc_GetDensity"]=wasmExports["bx_ShapeDesc_GetDensity"];_bx_ShapeDesc_SetFilter=Module["_bx_ShapeDesc_SetFilter"]=wasmExports["bx_ShapeDesc_SetFilter"];_bx_ShapeDesc_GetCategoryBits=Module["_bx_ShapeDesc_GetCategoryBits"]=wasmExports["bx_ShapeDesc_GetCategoryBits"];_bx_ShapeDesc_GetMaskBits=Module["_bx_ShapeDesc_GetMaskBits"]=wasmExports["bx_ShapeDesc_GetMaskBits"];_bx_ShapeDesc_SetGroup=Module["_bx_ShapeDesc_SetGroup"]=wasmExports["bx_ShapeDesc_SetGroup"];_bx_ShapeDesc_SetRollingResistance=Module["_bx_ShapeDesc_SetRollingResistance"]=wasmExports["bx_ShapeDesc_SetRollingResistance"];_bx_ShapeDesc_SetSensor=Module["_bx_ShapeDesc_SetSensor"]=wasmExports["bx_ShapeDesc_SetSensor"];_bx_ShapeDesc_IsSensor=Module["_bx_ShapeDesc_IsSensor"]=wasmExports["bx_ShapeDesc_IsSensor"];_bx_ShapeDesc_SetInvokeContactCreation=Module["_bx_ShapeDesc_SetInvokeContactCreation"]=wasmExports["bx_ShapeDesc_SetInvokeContactCreation"];_bx_ShapeDesc_GetInvokeContactCreation=Module["_bx_ShapeDesc_GetInvokeContactCreation"]=wasmExports["bx_ShapeDesc_GetInvokeContactCreation"];_bx_ShapeDesc_GetAABB=Module["_bx_ShapeDesc_GetAABB"]=wasmExports["bx_ShapeDesc_GetAABB"];_bx_GetShapeBuildCount=Module["_bx_GetShapeBuildCount"]=wasmExports["bx_GetShapeBuildCount"];_bx_GetShapeDescCount=Module["_bx_GetShapeDescCount"]=wasmExports["bx_GetShapeDescCount"];_bx_Body_SetShape=Module["_bx_Body_SetShape"]=wasmExports["bx_Body_SetShape"];_bx_Body_SetShapeHull=Module["_bx_Body_SetShapeHull"]=wasmExports["bx_Body_SetShapeHull"];_bx_Body_TranslateShape=Module["_bx_Body_TranslateShape"]=wasmExports["bx_Body_TranslateShape"];_bx_Body_SetShapeFilter=Module["_bx_Body_SetShapeFilter"]=wasmExports["bx_Body_SetShapeFilter"];_bx_Body_RemoveShape=Module["_bx_Body_RemoveShape"]=wasmExports["bx_Body_RemoveShape"];_bx_Body_HasShape=Module["_bx_Body_HasShape"]=wasmExports["bx_Body_HasShape"];_bx_Body_GetShapeInfo=Module["_bx_Body_GetShapeInfo"]=wasmExports["bx_Body_GetShapeInfo"];_bx_Body_SyncShapeDesc=Module["_bx_Body_SyncShapeDesc"]=wasmExports["bx_Body_SyncShapeDesc"];_bx_Body_GetShapeDesc=Module["_bx_Body_GetShapeDesc"]=wasmExports["bx_Body_GetShapeDesc"];_bx_ShapeDesc_BuildDebugGeometry=Module["_bx_ShapeDesc_BuildDebugGeometry"]=wasmExports["bx_ShapeDesc_BuildDebugGeometry"];_bx_DebugPositionsPtr=Module["_bx_DebugPositionsPtr"]=wasmExports["bx_DebugPositionsPtr"];_bx_DebugIndicesPtr=Module["_bx_DebugIndicesPtr"]=wasmExports["bx_DebugIndicesPtr"];_bx_DebugIndexCount=Module["_bx_DebugIndexCount"]=wasmExports["bx_DebugIndexCount"];_bx_CreateJoint=Module["_bx_CreateJoint"]=wasmExports["bx_CreateJoint"];_bx_DestroyJoint=Module["_bx_DestroyJoint"]=wasmExports["bx_DestroyJoint"];_bx_Joint_IsValid=Module["_bx_Joint_IsValid"]=wasmExports["bx_Joint_IsValid"];_bx_Joint_SetCollideConnected=Module["_bx_Joint_SetCollideConnected"]=wasmExports["bx_Joint_SetCollideConnected"];_bx_Joint_SetConstraintTuning=Module["_bx_Joint_SetConstraintTuning"]=wasmExports["bx_Joint_SetConstraintTuning"];_bx_Joint_WakeBodies=Module["_bx_Joint_WakeBodies"]=wasmExports["bx_Joint_WakeBodies"];_bx_Joint_EnableLimit=Module["_bx_Joint_EnableLimit"]=wasmExports["bx_Joint_EnableLimit"];_bx_Joint_SetLimits=Module["_bx_Joint_SetLimits"]=wasmExports["bx_Joint_SetLimits"];_bx_Joint_SetTwistLimits=Module["_bx_Joint_SetTwistLimits"]=wasmExports["bx_Joint_SetTwistLimits"];_bx_Joint_EnableMotor=Module["_bx_Joint_EnableMotor"]=wasmExports["bx_Joint_EnableMotor"];_bx_Joint_UpdateMotorFrame=Module["_bx_Joint_UpdateMotorFrame"]=wasmExports["bx_Joint_UpdateMotorFrame"];_bx_Joint_SetSphericalMotor=Module["_bx_Joint_SetSphericalMotor"]=wasmExports["bx_Joint_SetSphericalMotor"];_bx_Joint_SetSphericalTarget=Module["_bx_Joint_SetSphericalTarget"]=wasmExports["bx_Joint_SetSphericalTarget"];_bx_Joint_SetMotorSpeed=Module["_bx_Joint_SetMotorSpeed"]=wasmExports["bx_Joint_SetMotorSpeed"];_bx_Joint_SetMaxMotorForce=Module["_bx_Joint_SetMaxMotorForce"]=wasmExports["bx_Joint_SetMaxMotorForce"];_bx_Joint_EnableSpring=Module["_bx_Joint_EnableSpring"]=wasmExports["bx_Joint_EnableSpring"];_bx_Joint_SetSpring=Module["_bx_Joint_SetSpring"]=wasmExports["bx_Joint_SetSpring"];_bx_Joint_SetTarget=Module["_bx_Joint_SetTarget"]=wasmExports["bx_Joint_SetTarget"];_bx_Joint_GetPosition=Module["_bx_Joint_GetPosition"]=wasmExports["bx_Joint_GetPosition"];_bx_ComputeAlignedFrameB=Module["_bx_ComputeAlignedFrameB"]=wasmExports["bx_ComputeAlignedFrameB"];_bx_WheelJoint_SetSpinMotorSpeed=Module["_bx_WheelJoint_SetSpinMotorSpeed"]=wasmExports["bx_WheelJoint_SetSpinMotorSpeed"];_bx_WheelJoint_SetMaxSpinTorque=Module["_bx_WheelJoint_SetMaxSpinTorque"]=wasmExports["bx_WheelJoint_SetMaxSpinTorque"];_bx_WheelJoint_EnableSpinMotor=Module["_bx_WheelJoint_EnableSpinMotor"]=wasmExports["bx_WheelJoint_EnableSpinMotor"];_bx_WheelJoint_SetTargetSteeringAngle=Module["_bx_WheelJoint_SetTargetSteeringAngle"]=wasmExports["bx_WheelJoint_SetTargetSteeringAngle"];_bx_WheelJoint_SetSuspension=Module["_bx_WheelJoint_SetSuspension"]=wasmExports["bx_WheelJoint_SetSuspension"];_bx_RayHitsPtr=Module["_bx_RayHitsPtr"]=wasmExports["bx_RayHitsPtr"];_bx_RayHitPointsF64Ptr=Module["_bx_RayHitPointsF64Ptr"]=wasmExports["bx_RayHitPointsF64Ptr"];_bx_World_CastRay=Module["_bx_World_CastRay"]=wasmExports["bx_World_CastRay"];_bx_World_CastShape=Module["_bx_World_CastShape"]=wasmExports["bx_World_CastShape"];_bx_OverlapsPtr=Module["_bx_OverlapsPtr"]=wasmExports["bx_OverlapsPtr"];_bx_World_OverlapShape=Module["_bx_World_OverlapShape"]=wasmExports["bx_World_OverlapShape"];_bx_GeometryPtr=Module["_bx_GeometryPtr"]=wasmExports["bx_GeometryPtr"];_bx_Body_GetShapeGeometry=Module["_bx_Body_GetShapeGeometry"]=wasmExports["bx_Body_GetShapeGeometry"];memory=wasmMemory=wasmExports["memory"];__indirect_function_table=wasmExports["__indirect_function_table"]}var wasmImports={clock_time_get:_clock_time_get,emscripten_get_now:_emscripten_get_now,emscripten_resize_heap:_emscripten_resize_heap,fd_write:_fd_write};async function run(){preRun();var setStatus=Module["setStatus"];if(setStatus){setStatus("Running...");await new Promise(resolve=>setTimeout(resolve,1));setTimeout(setStatus,1,"")}if(ABORT)return;initRuntime();Module["onRuntimeInitialized"]?.();postRun()}var wasmExports;wasmExports=await createWasm();await run();
|
|
2
|
-
;return Module}})();if(typeof exports==="object"&&typeof module==="object"){module.exports=Box3D;module.exports.default=Box3D}else if(typeof define==="function"&&define["amd"])define([],()=>Box3D);
|
|
1
|
+
var Box3D=(()=>{var _scriptName=globalThis.document?.currentScript?.src;return async function(moduleArg={}){var Module=moduleArg;var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=!!globalThis.WorkerGlobalScope;var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";var programArgs=[];var thisProgram="./this.program";if(ENVIRONMENT_IS_WORKER){_scriptName=self.location.href}var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}{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=async url=>{var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);var wasmBinary;var ABORT=false;class EmscriptenEH{}class EmscriptenSjLj extends EmscriptenEH{}var runtimeInitialized=false;function getMemoryBuffer(){return wasmMemory.buffer}function updateMemoryViews(){if(HEAP8?.buffer?.resizable)return;var b=getMemoryBuffer();HEAP8=new Int8Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b)}function preRun(){var preRun=Module["preRun"];if(preRun){if(typeof preRun=="function")preRun=[preRun];onPreRuns.push(...preRun)}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;wasmExports["__wasm_call_ctors"]()}function postRun(){var postRun=Module["postRun"];if(postRun){if(typeof postRun=="function")postRun=[postRun];onPostRuns.push(...postRun)}callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what=`Aborted(${what})`;err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var wasmBinaryFile;function findWasmBinary(){return locateFile("box3d.umd.wasm")}function getBinarySync(file){if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){var imports={env:wasmImports,wasi_snapshot_preview1:wasmImports};return imports}async function createWasm(){function receiveInstance(instance){wasmExports=instance.exports;assignWasmExports(wasmExports);updateMemoryViews();return wasmExports}function receiveInstantiationResult(result){return receiveInstance(result["instance"])}var info=getWasmImports();var instantiateWasm=Module["instantiateWasm"];if(instantiateWasm){return new Promise(resolve=>{instantiateWasm(info,inst=>resolve(receiveInstance(inst)))})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var HEAP8;var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var onPreRuns=[];var noExitRuntime=true;var _emscripten_get_now=()=>performance.now();var _emscripten_date_now=()=>Date.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>num<INT53_MIN||num>INT53_MAX?NaN:Number(num);var HEAP64;function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);HEAP64[ptime>>3]=BigInt(nsec);return 0}var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var HEAPU8;var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};var printCharBuffers=[null,[],[]];var UTF8Decoder=globalThis.TextDecoder&&new TextDecoder;var findStringEnd=(heapOrArray,idx,maxBytesToRead,ignoreNul)=>{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);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};var printChar=(stream,curr)=>{var buffer=printCharBuffers[stream];if(!curr||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer));buffer.length=0}else{buffer.push(curr)}};var HEAPU32;var _fd_write=(fd,iov,iovcnt,pnum)=>{var num=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j<len;j++){printChar(fd,HEAPU8[ptr+j])}num+=len}HEAPU32[pnum>>2]=num;return 0};var HEAPF32;var HEAPF64;var HEAP32;{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["arguments"])programArgs=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];var preInit=Module["preInit"];if(preInit){if(typeof preInit=="function")Module["preInit"]=preInit=[preInit];while(preInit.length>0){preInit.shift()()}}}var _free,_bx_Scratch,_bx_Alloc,_malloc,_bx_Free,_bx_GetVersion,_bx_ScratchF64,_bx_IsDoublePrecision,_bx_GetRejectedSlotCount,_bx_Body_SetClipPlane,_bx_Body_GetClipPlane,_bx_GetMaxWorkers,_bx_CreateWorld,_bx_World_GetWorkerCount,_bx_DestroyWorld,_bx_ShapeDesc_Destroy,_bx_World_Step,_bx_World_EnableTimer,_bx_World_IsTimerEnabled,_bx_World_SetGravity,_bx_World_SetMaximumLinearSpeed,_bx_World_GetMaximumLinearSpeed,_bx_World_EnableSleeping,_bx_World_EnableContinuous,_bx_World_SetContactTuning,_bx_World_Explode,_bx_World_GetAwakeBodyCount,_bx_World_GetJointEventCount,_bx_World_GetStackUsed,_bx_World_GetStats,_bx_MoveEventsPtr,_bx_ContactEventsPtr,_bx_SensorEventsPtr,_bx_World_GetMoveEvents,_bx_World_GetContactEvents,_bx_World_GetSensorEvents,_bx_CreateBody,_bx_DestroyBody,_bx_Body_SetType,_bx_Body_GetType,_bx_Body_SetTransform,_bx_Body_GetTransform,_bx_Body_SetTargetTransform,_bx_Body_SetLinearVelocity,_bx_Body_GetLinearVelocity,_bx_Body_SetAngularVelocity,_bx_Body_GetAngularVelocity,_bx_Body_SetLinearDamping,_bx_Body_GetLinearDamping,_bx_Body_SetAngularDamping,_bx_Body_GetAngularDamping,_bx_Body_SetGravityScale,_bx_Body_GetGravityScale,_bx_Body_ApplyForce,_bx_Body_ApplyForceToCenter,_bx_Body_ApplyTorque,_bx_Body_ApplyLinearImpulse,_bx_Body_ApplyLinearImpulseToCenter,_bx_Body_ApplyAngularImpulse,_bx_Body_SetAwake,_bx_Body_IsAwake,_bx_Body_EnableSleep,_bx_Body_SetBullet,_bx_Body_EnableContinuous,_bx_Body_IsContinuousEnabled,_bx_Body_SetAabbMargin,_bx_Body_GetAabbMargin,_bx_Body_SetShapeCrush,_bx_Body_GetShapeCrush,_bx_BodyContactsPtr,_bx_BodyContactPointsF64Ptr,_bx_Body_GetContacts,_bx_Body_AllowFastRotation,_bx_Body_SetMotionLocks,_bx_Body_GetAABB,_bx_Body_ComputeShapeMassData,_bx_Body_GetMassData,_bx_Body_SetMassDataFull,_bx_Body_SetMassData,_bx_Body_GetMotionLocks,_bx_Body_ApplyMassFromShapes,_bx_Body_GetShapeCount,_bx_Body_SetFeatureKey,_bx_Body_GetFeatureKey,_bx_Body_GetShapeFeatureKey,_bx_Body_SetEventFlags,_bx_Body_GetEventFlags,_bx_Body_EnableContactEvents,_bx_ShapeDesc_CreateSphere,_bx_ShapeDesc_CreateCapsule,_bx_ShapeDesc_CreateBox,_bx_ShapeDesc_CreateCylinder,_bx_ShapeDesc_CreateHull,_bx_ShapeDesc_CreateMesh,_bx_ShapeDesc_CreateHeightField,_bx_ShapeDesc_GetGeometryBytes,_bx_ShapeDesc_GetGeometryByteCount,_bx_ShapeDesc_CreateMeshFromBytes,_bx_ShapeDesc_CreateHeightFieldFromBytes,_bx_ShapeDesc_CreateContainer,_bx_ShapeDesc_AddChild,_bx_ShapeDesc_RemoveChild,_bx_ShapeDesc_GetChildCount,_bx_ShapeDesc_GetKind,_bx_ShapeDesc_SetMaterial,_bx_ShapeDesc_GetFriction,_bx_ShapeDesc_GetRestitution,_bx_ShapeDesc_SetDensity,_bx_ShapeDesc_GetDensity,_bx_ShapeDesc_SetFilter,_bx_ShapeDesc_GetCategoryBits,_bx_ShapeDesc_GetMaskBits,_bx_ShapeDesc_SetGroup,_bx_ShapeDesc_SetRollingResistance,_bx_ShapeDesc_SetSensor,_bx_ShapeDesc_IsSensor,_bx_ShapeDesc_SetInvokeContactCreation,_bx_ShapeDesc_GetInvokeContactCreation,_bx_ShapeDesc_GetAABB,_bx_GetShapeBuildCount,_bx_GetShapeDescCount,_bx_Body_SetShape,_bx_Body_SetShapeHull,_bx_Body_TranslateShape,_bx_Body_SetShapeFilter,_bx_Body_RemoveShape,_bx_Body_HasShape,_bx_Body_GetShapeInfo,_bx_Body_SyncShapeDesc,_bx_Body_GetShapeDesc,_bx_ShapeDesc_BuildDebugGeometry,_bx_DebugPositionsPtr,_bx_DebugIndicesPtr,_bx_DebugIndexCount,_bx_CreateJoint,_bx_DestroyJoint,_bx_Joint_IsValid,_bx_Joint_SetCollideConnected,_bx_Joint_SetConstraintTuning,_bx_Joint_WakeBodies,_bx_Joint_EnableLimit,_bx_Joint_SetLimits,_bx_Joint_SetTwistLimits,_bx_Joint_EnableMotor,_bx_Joint_UpdateMotorFrame,_bx_Joint_SetSphericalMotor,_bx_Joint_SetSphericalTarget,_bx_Joint_SetMotorSpeed,_bx_Joint_SetMaxMotorForce,_bx_Joint_EnableSpring,_bx_Joint_SetSpring,_bx_Joint_SetTarget,_bx_Joint_GetPosition,_bx_ComputeAlignedFrameB,_bx_WheelJoint_SetSpinMotorSpeed,_bx_WheelJoint_SetMaxSpinTorque,_bx_WheelJoint_EnableSpinMotor,_bx_WheelJoint_SetTargetSteeringAngle,_bx_WheelJoint_SetSuspension,_bx_RayHitsPtr,_bx_RayHitPointsF64Ptr,_bx_World_CastRay,_bx_World_CastShape,_bx_OverlapsPtr,_bx_World_OverlapShape,_bx_GeometryPtr,_bx_Body_GetShapeGeometry,memory,__indirect_function_table,wasmMemory;function assignWasmExports(wasmExports){_free=Module["_free"]=wasmExports["free"];_bx_Scratch=Module["_bx_Scratch"]=wasmExports["bx_Scratch"];_bx_Alloc=Module["_bx_Alloc"]=wasmExports["bx_Alloc"];_malloc=Module["_malloc"]=wasmExports["malloc"];_bx_Free=Module["_bx_Free"]=wasmExports["bx_Free"];_bx_GetVersion=Module["_bx_GetVersion"]=wasmExports["bx_GetVersion"];_bx_ScratchF64=Module["_bx_ScratchF64"]=wasmExports["bx_ScratchF64"];_bx_IsDoublePrecision=Module["_bx_IsDoublePrecision"]=wasmExports["bx_IsDoublePrecision"];_bx_GetRejectedSlotCount=Module["_bx_GetRejectedSlotCount"]=wasmExports["bx_GetRejectedSlotCount"];_bx_Body_SetClipPlane=Module["_bx_Body_SetClipPlane"]=wasmExports["bx_Body_SetClipPlane"];_bx_Body_GetClipPlane=Module["_bx_Body_GetClipPlane"]=wasmExports["bx_Body_GetClipPlane"];_bx_GetMaxWorkers=Module["_bx_GetMaxWorkers"]=wasmExports["bx_GetMaxWorkers"];_bx_CreateWorld=Module["_bx_CreateWorld"]=wasmExports["bx_CreateWorld"];_bx_World_GetWorkerCount=Module["_bx_World_GetWorkerCount"]=wasmExports["bx_World_GetWorkerCount"];_bx_DestroyWorld=Module["_bx_DestroyWorld"]=wasmExports["bx_DestroyWorld"];_bx_ShapeDesc_Destroy=Module["_bx_ShapeDesc_Destroy"]=wasmExports["bx_ShapeDesc_Destroy"];_bx_World_Step=Module["_bx_World_Step"]=wasmExports["bx_World_Step"];_bx_World_EnableTimer=Module["_bx_World_EnableTimer"]=wasmExports["bx_World_EnableTimer"];_bx_World_IsTimerEnabled=Module["_bx_World_IsTimerEnabled"]=wasmExports["bx_World_IsTimerEnabled"];_bx_World_SetGravity=Module["_bx_World_SetGravity"]=wasmExports["bx_World_SetGravity"];_bx_World_SetMaximumLinearSpeed=Module["_bx_World_SetMaximumLinearSpeed"]=wasmExports["bx_World_SetMaximumLinearSpeed"];_bx_World_GetMaximumLinearSpeed=Module["_bx_World_GetMaximumLinearSpeed"]=wasmExports["bx_World_GetMaximumLinearSpeed"];_bx_World_EnableSleeping=Module["_bx_World_EnableSleeping"]=wasmExports["bx_World_EnableSleeping"];_bx_World_EnableContinuous=Module["_bx_World_EnableContinuous"]=wasmExports["bx_World_EnableContinuous"];_bx_World_SetContactTuning=Module["_bx_World_SetContactTuning"]=wasmExports["bx_World_SetContactTuning"];_bx_World_Explode=Module["_bx_World_Explode"]=wasmExports["bx_World_Explode"];_bx_World_GetAwakeBodyCount=Module["_bx_World_GetAwakeBodyCount"]=wasmExports["bx_World_GetAwakeBodyCount"];_bx_World_GetJointEventCount=Module["_bx_World_GetJointEventCount"]=wasmExports["bx_World_GetJointEventCount"];_bx_World_GetStackUsed=Module["_bx_World_GetStackUsed"]=wasmExports["bx_World_GetStackUsed"];_bx_World_GetStats=Module["_bx_World_GetStats"]=wasmExports["bx_World_GetStats"];_bx_MoveEventsPtr=Module["_bx_MoveEventsPtr"]=wasmExports["bx_MoveEventsPtr"];_bx_ContactEventsPtr=Module["_bx_ContactEventsPtr"]=wasmExports["bx_ContactEventsPtr"];_bx_SensorEventsPtr=Module["_bx_SensorEventsPtr"]=wasmExports["bx_SensorEventsPtr"];_bx_World_GetMoveEvents=Module["_bx_World_GetMoveEvents"]=wasmExports["bx_World_GetMoveEvents"];_bx_World_GetContactEvents=Module["_bx_World_GetContactEvents"]=wasmExports["bx_World_GetContactEvents"];_bx_World_GetSensorEvents=Module["_bx_World_GetSensorEvents"]=wasmExports["bx_World_GetSensorEvents"];_bx_CreateBody=Module["_bx_CreateBody"]=wasmExports["bx_CreateBody"];_bx_DestroyBody=Module["_bx_DestroyBody"]=wasmExports["bx_DestroyBody"];_bx_Body_SetType=Module["_bx_Body_SetType"]=wasmExports["bx_Body_SetType"];_bx_Body_GetType=Module["_bx_Body_GetType"]=wasmExports["bx_Body_GetType"];_bx_Body_SetTransform=Module["_bx_Body_SetTransform"]=wasmExports["bx_Body_SetTransform"];_bx_Body_GetTransform=Module["_bx_Body_GetTransform"]=wasmExports["bx_Body_GetTransform"];_bx_Body_SetTargetTransform=Module["_bx_Body_SetTargetTransform"]=wasmExports["bx_Body_SetTargetTransform"];_bx_Body_SetLinearVelocity=Module["_bx_Body_SetLinearVelocity"]=wasmExports["bx_Body_SetLinearVelocity"];_bx_Body_GetLinearVelocity=Module["_bx_Body_GetLinearVelocity"]=wasmExports["bx_Body_GetLinearVelocity"];_bx_Body_SetAngularVelocity=Module["_bx_Body_SetAngularVelocity"]=wasmExports["bx_Body_SetAngularVelocity"];_bx_Body_GetAngularVelocity=Module["_bx_Body_GetAngularVelocity"]=wasmExports["bx_Body_GetAngularVelocity"];_bx_Body_SetLinearDamping=Module["_bx_Body_SetLinearDamping"]=wasmExports["bx_Body_SetLinearDamping"];_bx_Body_GetLinearDamping=Module["_bx_Body_GetLinearDamping"]=wasmExports["bx_Body_GetLinearDamping"];_bx_Body_SetAngularDamping=Module["_bx_Body_SetAngularDamping"]=wasmExports["bx_Body_SetAngularDamping"];_bx_Body_GetAngularDamping=Module["_bx_Body_GetAngularDamping"]=wasmExports["bx_Body_GetAngularDamping"];_bx_Body_SetGravityScale=Module["_bx_Body_SetGravityScale"]=wasmExports["bx_Body_SetGravityScale"];_bx_Body_GetGravityScale=Module["_bx_Body_GetGravityScale"]=wasmExports["bx_Body_GetGravityScale"];_bx_Body_ApplyForce=Module["_bx_Body_ApplyForce"]=wasmExports["bx_Body_ApplyForce"];_bx_Body_ApplyForceToCenter=Module["_bx_Body_ApplyForceToCenter"]=wasmExports["bx_Body_ApplyForceToCenter"];_bx_Body_ApplyTorque=Module["_bx_Body_ApplyTorque"]=wasmExports["bx_Body_ApplyTorque"];_bx_Body_ApplyLinearImpulse=Module["_bx_Body_ApplyLinearImpulse"]=wasmExports["bx_Body_ApplyLinearImpulse"];_bx_Body_ApplyLinearImpulseToCenter=Module["_bx_Body_ApplyLinearImpulseToCenter"]=wasmExports["bx_Body_ApplyLinearImpulseToCenter"];_bx_Body_ApplyAngularImpulse=Module["_bx_Body_ApplyAngularImpulse"]=wasmExports["bx_Body_ApplyAngularImpulse"];_bx_Body_SetAwake=Module["_bx_Body_SetAwake"]=wasmExports["bx_Body_SetAwake"];_bx_Body_IsAwake=Module["_bx_Body_IsAwake"]=wasmExports["bx_Body_IsAwake"];_bx_Body_EnableSleep=Module["_bx_Body_EnableSleep"]=wasmExports["bx_Body_EnableSleep"];_bx_Body_SetBullet=Module["_bx_Body_SetBullet"]=wasmExports["bx_Body_SetBullet"];_bx_Body_EnableContinuous=Module["_bx_Body_EnableContinuous"]=wasmExports["bx_Body_EnableContinuous"];_bx_Body_IsContinuousEnabled=Module["_bx_Body_IsContinuousEnabled"]=wasmExports["bx_Body_IsContinuousEnabled"];_bx_Body_SetAabbMargin=Module["_bx_Body_SetAabbMargin"]=wasmExports["bx_Body_SetAabbMargin"];_bx_Body_GetAabbMargin=Module["_bx_Body_GetAabbMargin"]=wasmExports["bx_Body_GetAabbMargin"];_bx_Body_SetShapeCrush=Module["_bx_Body_SetShapeCrush"]=wasmExports["bx_Body_SetShapeCrush"];_bx_Body_GetShapeCrush=Module["_bx_Body_GetShapeCrush"]=wasmExports["bx_Body_GetShapeCrush"];_bx_BodyContactsPtr=Module["_bx_BodyContactsPtr"]=wasmExports["bx_BodyContactsPtr"];_bx_BodyContactPointsF64Ptr=Module["_bx_BodyContactPointsF64Ptr"]=wasmExports["bx_BodyContactPointsF64Ptr"];_bx_Body_GetContacts=Module["_bx_Body_GetContacts"]=wasmExports["bx_Body_GetContacts"];_bx_Body_AllowFastRotation=Module["_bx_Body_AllowFastRotation"]=wasmExports["bx_Body_AllowFastRotation"];_bx_Body_SetMotionLocks=Module["_bx_Body_SetMotionLocks"]=wasmExports["bx_Body_SetMotionLocks"];_bx_Body_GetAABB=Module["_bx_Body_GetAABB"]=wasmExports["bx_Body_GetAABB"];_bx_Body_ComputeShapeMassData=Module["_bx_Body_ComputeShapeMassData"]=wasmExports["bx_Body_ComputeShapeMassData"];_bx_Body_GetMassData=Module["_bx_Body_GetMassData"]=wasmExports["bx_Body_GetMassData"];_bx_Body_SetMassDataFull=Module["_bx_Body_SetMassDataFull"]=wasmExports["bx_Body_SetMassDataFull"];_bx_Body_SetMassData=Module["_bx_Body_SetMassData"]=wasmExports["bx_Body_SetMassData"];_bx_Body_GetMotionLocks=Module["_bx_Body_GetMotionLocks"]=wasmExports["bx_Body_GetMotionLocks"];_bx_Body_ApplyMassFromShapes=Module["_bx_Body_ApplyMassFromShapes"]=wasmExports["bx_Body_ApplyMassFromShapes"];_bx_Body_GetShapeCount=Module["_bx_Body_GetShapeCount"]=wasmExports["bx_Body_GetShapeCount"];_bx_Body_SetFeatureKey=Module["_bx_Body_SetFeatureKey"]=wasmExports["bx_Body_SetFeatureKey"];_bx_Body_GetFeatureKey=Module["_bx_Body_GetFeatureKey"]=wasmExports["bx_Body_GetFeatureKey"];_bx_Body_GetShapeFeatureKey=Module["_bx_Body_GetShapeFeatureKey"]=wasmExports["bx_Body_GetShapeFeatureKey"];_bx_Body_SetEventFlags=Module["_bx_Body_SetEventFlags"]=wasmExports["bx_Body_SetEventFlags"];_bx_Body_GetEventFlags=Module["_bx_Body_GetEventFlags"]=wasmExports["bx_Body_GetEventFlags"];_bx_Body_EnableContactEvents=Module["_bx_Body_EnableContactEvents"]=wasmExports["bx_Body_EnableContactEvents"];_bx_ShapeDesc_CreateSphere=Module["_bx_ShapeDesc_CreateSphere"]=wasmExports["bx_ShapeDesc_CreateSphere"];_bx_ShapeDesc_CreateCapsule=Module["_bx_ShapeDesc_CreateCapsule"]=wasmExports["bx_ShapeDesc_CreateCapsule"];_bx_ShapeDesc_CreateBox=Module["_bx_ShapeDesc_CreateBox"]=wasmExports["bx_ShapeDesc_CreateBox"];_bx_ShapeDesc_CreateCylinder=Module["_bx_ShapeDesc_CreateCylinder"]=wasmExports["bx_ShapeDesc_CreateCylinder"];_bx_ShapeDesc_CreateHull=Module["_bx_ShapeDesc_CreateHull"]=wasmExports["bx_ShapeDesc_CreateHull"];_bx_ShapeDesc_CreateMesh=Module["_bx_ShapeDesc_CreateMesh"]=wasmExports["bx_ShapeDesc_CreateMesh"];_bx_ShapeDesc_CreateHeightField=Module["_bx_ShapeDesc_CreateHeightField"]=wasmExports["bx_ShapeDesc_CreateHeightField"];_bx_ShapeDesc_GetGeometryBytes=Module["_bx_ShapeDesc_GetGeometryBytes"]=wasmExports["bx_ShapeDesc_GetGeometryBytes"];_bx_ShapeDesc_GetGeometryByteCount=Module["_bx_ShapeDesc_GetGeometryByteCount"]=wasmExports["bx_ShapeDesc_GetGeometryByteCount"];_bx_ShapeDesc_CreateMeshFromBytes=Module["_bx_ShapeDesc_CreateMeshFromBytes"]=wasmExports["bx_ShapeDesc_CreateMeshFromBytes"];_bx_ShapeDesc_CreateHeightFieldFromBytes=Module["_bx_ShapeDesc_CreateHeightFieldFromBytes"]=wasmExports["bx_ShapeDesc_CreateHeightFieldFromBytes"];_bx_ShapeDesc_CreateContainer=Module["_bx_ShapeDesc_CreateContainer"]=wasmExports["bx_ShapeDesc_CreateContainer"];_bx_ShapeDesc_AddChild=Module["_bx_ShapeDesc_AddChild"]=wasmExports["bx_ShapeDesc_AddChild"];_bx_ShapeDesc_RemoveChild=Module["_bx_ShapeDesc_RemoveChild"]=wasmExports["bx_ShapeDesc_RemoveChild"];_bx_ShapeDesc_GetChildCount=Module["_bx_ShapeDesc_GetChildCount"]=wasmExports["bx_ShapeDesc_GetChildCount"];_bx_ShapeDesc_GetKind=Module["_bx_ShapeDesc_GetKind"]=wasmExports["bx_ShapeDesc_GetKind"];_bx_ShapeDesc_SetMaterial=Module["_bx_ShapeDesc_SetMaterial"]=wasmExports["bx_ShapeDesc_SetMaterial"];_bx_ShapeDesc_GetFriction=Module["_bx_ShapeDesc_GetFriction"]=wasmExports["bx_ShapeDesc_GetFriction"];_bx_ShapeDesc_GetRestitution=Module["_bx_ShapeDesc_GetRestitution"]=wasmExports["bx_ShapeDesc_GetRestitution"];_bx_ShapeDesc_SetDensity=Module["_bx_ShapeDesc_SetDensity"]=wasmExports["bx_ShapeDesc_SetDensity"];_bx_ShapeDesc_GetDensity=Module["_bx_ShapeDesc_GetDensity"]=wasmExports["bx_ShapeDesc_GetDensity"];_bx_ShapeDesc_SetFilter=Module["_bx_ShapeDesc_SetFilter"]=wasmExports["bx_ShapeDesc_SetFilter"];_bx_ShapeDesc_GetCategoryBits=Module["_bx_ShapeDesc_GetCategoryBits"]=wasmExports["bx_ShapeDesc_GetCategoryBits"];_bx_ShapeDesc_GetMaskBits=Module["_bx_ShapeDesc_GetMaskBits"]=wasmExports["bx_ShapeDesc_GetMaskBits"];_bx_ShapeDesc_SetGroup=Module["_bx_ShapeDesc_SetGroup"]=wasmExports["bx_ShapeDesc_SetGroup"];_bx_ShapeDesc_SetRollingResistance=Module["_bx_ShapeDesc_SetRollingResistance"]=wasmExports["bx_ShapeDesc_SetRollingResistance"];_bx_ShapeDesc_SetSensor=Module["_bx_ShapeDesc_SetSensor"]=wasmExports["bx_ShapeDesc_SetSensor"];_bx_ShapeDesc_IsSensor=Module["_bx_ShapeDesc_IsSensor"]=wasmExports["bx_ShapeDesc_IsSensor"];_bx_ShapeDesc_SetInvokeContactCreation=Module["_bx_ShapeDesc_SetInvokeContactCreation"]=wasmExports["bx_ShapeDesc_SetInvokeContactCreation"];_bx_ShapeDesc_GetInvokeContactCreation=Module["_bx_ShapeDesc_GetInvokeContactCreation"]=wasmExports["bx_ShapeDesc_GetInvokeContactCreation"];_bx_ShapeDesc_GetAABB=Module["_bx_ShapeDesc_GetAABB"]=wasmExports["bx_ShapeDesc_GetAABB"];_bx_GetShapeBuildCount=Module["_bx_GetShapeBuildCount"]=wasmExports["bx_GetShapeBuildCount"];_bx_GetShapeDescCount=Module["_bx_GetShapeDescCount"]=wasmExports["bx_GetShapeDescCount"];_bx_Body_SetShape=Module["_bx_Body_SetShape"]=wasmExports["bx_Body_SetShape"];_bx_Body_SetShapeHull=Module["_bx_Body_SetShapeHull"]=wasmExports["bx_Body_SetShapeHull"];_bx_Body_TranslateShape=Module["_bx_Body_TranslateShape"]=wasmExports["bx_Body_TranslateShape"];_bx_Body_SetShapeFilter=Module["_bx_Body_SetShapeFilter"]=wasmExports["bx_Body_SetShapeFilter"];_bx_Body_RemoveShape=Module["_bx_Body_RemoveShape"]=wasmExports["bx_Body_RemoveShape"];_bx_Body_HasShape=Module["_bx_Body_HasShape"]=wasmExports["bx_Body_HasShape"];_bx_Body_GetShapeInfo=Module["_bx_Body_GetShapeInfo"]=wasmExports["bx_Body_GetShapeInfo"];_bx_Body_SyncShapeDesc=Module["_bx_Body_SyncShapeDesc"]=wasmExports["bx_Body_SyncShapeDesc"];_bx_Body_GetShapeDesc=Module["_bx_Body_GetShapeDesc"]=wasmExports["bx_Body_GetShapeDesc"];_bx_ShapeDesc_BuildDebugGeometry=Module["_bx_ShapeDesc_BuildDebugGeometry"]=wasmExports["bx_ShapeDesc_BuildDebugGeometry"];_bx_DebugPositionsPtr=Module["_bx_DebugPositionsPtr"]=wasmExports["bx_DebugPositionsPtr"];_bx_DebugIndicesPtr=Module["_bx_DebugIndicesPtr"]=wasmExports["bx_DebugIndicesPtr"];_bx_DebugIndexCount=Module["_bx_DebugIndexCount"]=wasmExports["bx_DebugIndexCount"];_bx_CreateJoint=Module["_bx_CreateJoint"]=wasmExports["bx_CreateJoint"];_bx_DestroyJoint=Module["_bx_DestroyJoint"]=wasmExports["bx_DestroyJoint"];_bx_Joint_IsValid=Module["_bx_Joint_IsValid"]=wasmExports["bx_Joint_IsValid"];_bx_Joint_SetCollideConnected=Module["_bx_Joint_SetCollideConnected"]=wasmExports["bx_Joint_SetCollideConnected"];_bx_Joint_SetConstraintTuning=Module["_bx_Joint_SetConstraintTuning"]=wasmExports["bx_Joint_SetConstraintTuning"];_bx_Joint_WakeBodies=Module["_bx_Joint_WakeBodies"]=wasmExports["bx_Joint_WakeBodies"];_bx_Joint_EnableLimit=Module["_bx_Joint_EnableLimit"]=wasmExports["bx_Joint_EnableLimit"];_bx_Joint_SetLimits=Module["_bx_Joint_SetLimits"]=wasmExports["bx_Joint_SetLimits"];_bx_Joint_SetTwistLimits=Module["_bx_Joint_SetTwistLimits"]=wasmExports["bx_Joint_SetTwistLimits"];_bx_Joint_EnableMotor=Module["_bx_Joint_EnableMotor"]=wasmExports["bx_Joint_EnableMotor"];_bx_Joint_UpdateMotorFrame=Module["_bx_Joint_UpdateMotorFrame"]=wasmExports["bx_Joint_UpdateMotorFrame"];_bx_Joint_SetSphericalMotor=Module["_bx_Joint_SetSphericalMotor"]=wasmExports["bx_Joint_SetSphericalMotor"];_bx_Joint_SetSphericalTarget=Module["_bx_Joint_SetSphericalTarget"]=wasmExports["bx_Joint_SetSphericalTarget"];_bx_Joint_SetMotorSpeed=Module["_bx_Joint_SetMotorSpeed"]=wasmExports["bx_Joint_SetMotorSpeed"];_bx_Joint_SetMaxMotorForce=Module["_bx_Joint_SetMaxMotorForce"]=wasmExports["bx_Joint_SetMaxMotorForce"];_bx_Joint_EnableSpring=Module["_bx_Joint_EnableSpring"]=wasmExports["bx_Joint_EnableSpring"];_bx_Joint_SetSpring=Module["_bx_Joint_SetSpring"]=wasmExports["bx_Joint_SetSpring"];_bx_Joint_SetTarget=Module["_bx_Joint_SetTarget"]=wasmExports["bx_Joint_SetTarget"];_bx_Joint_GetPosition=Module["_bx_Joint_GetPosition"]=wasmExports["bx_Joint_GetPosition"];_bx_ComputeAlignedFrameB=Module["_bx_ComputeAlignedFrameB"]=wasmExports["bx_ComputeAlignedFrameB"];_bx_WheelJoint_SetSpinMotorSpeed=Module["_bx_WheelJoint_SetSpinMotorSpeed"]=wasmExports["bx_WheelJoint_SetSpinMotorSpeed"];_bx_WheelJoint_SetMaxSpinTorque=Module["_bx_WheelJoint_SetMaxSpinTorque"]=wasmExports["bx_WheelJoint_SetMaxSpinTorque"];_bx_WheelJoint_EnableSpinMotor=Module["_bx_WheelJoint_EnableSpinMotor"]=wasmExports["bx_WheelJoint_EnableSpinMotor"];_bx_WheelJoint_SetTargetSteeringAngle=Module["_bx_WheelJoint_SetTargetSteeringAngle"]=wasmExports["bx_WheelJoint_SetTargetSteeringAngle"];_bx_WheelJoint_SetSuspension=Module["_bx_WheelJoint_SetSuspension"]=wasmExports["bx_WheelJoint_SetSuspension"];_bx_RayHitsPtr=Module["_bx_RayHitsPtr"]=wasmExports["bx_RayHitsPtr"];_bx_RayHitPointsF64Ptr=Module["_bx_RayHitPointsF64Ptr"]=wasmExports["bx_RayHitPointsF64Ptr"];_bx_World_CastRay=Module["_bx_World_CastRay"]=wasmExports["bx_World_CastRay"];_bx_World_CastShape=Module["_bx_World_CastShape"]=wasmExports["bx_World_CastShape"];_bx_OverlapsPtr=Module["_bx_OverlapsPtr"]=wasmExports["bx_OverlapsPtr"];_bx_World_OverlapShape=Module["_bx_World_OverlapShape"]=wasmExports["bx_World_OverlapShape"];_bx_GeometryPtr=Module["_bx_GeometryPtr"]=wasmExports["bx_GeometryPtr"];_bx_Body_GetShapeGeometry=Module["_bx_Body_GetShapeGeometry"]=wasmExports["bx_Body_GetShapeGeometry"];memory=wasmMemory=wasmExports["memory"];__indirect_function_table=wasmExports["__indirect_function_table"]}var wasmImports={clock_time_get:_clock_time_get,emscripten_get_now:_emscripten_get_now,emscripten_resize_heap:_emscripten_resize_heap,fd_write:_fd_write};async function run(){preRun();var setStatus=Module["setStatus"];if(setStatus){setStatus("Running...");await new Promise(resolve=>setTimeout(resolve,1));setTimeout(setStatus,1,"")}if(ABORT)return;initRuntime();Module["onRuntimeInitialized"]?.();postRun()}var wasmExports;wasmExports=await createWasm();await run();
|
|
2
|
+
;return Module}})();if(typeof exports==="object"&&typeof module==="object"){module.exports=Box3D;module.exports.default=Box3D}else if(typeof define==="function"&&define["amd"])define([],()=>Box3D);
|
package/lib/umd/box3d.umd.wasm
CHANGED
|
Binary file
|
package/package.json
CHANGED
package/umd/babylon.box3d.js
CHANGED
package/umd/babylon.box3d.min.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
/* babylon-box3d 0.
|
|
1
|
+
/* babylon-box3d 0.9.0 | MIT | https://github.com/Pryme8/babylon-box3d */
|
|
2
2
|
"use strict";var BABYLONBOX3D=(()=>{var Ve=Object.create;var G=Object.defineProperty;var We=Object.getOwnPropertyDescriptor;var Ue=Object.getOwnPropertyNames;var He=Object.getPrototypeOf,je=Object.prototype.hasOwnProperty;var J=(x,e)=>()=>(x&&(e=x(x=0)),e);var B=(x,e)=>()=>(e||x((e={exports:{}}).exports,e),e.exports),w=(x,e)=>{for(var t in e)G(x,t,{get:e[t],enumerable:!0})},oe=(x,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ue(e))!je.call(x,i)&&i!==t&&G(x,i,{get:()=>e[i],enumerable:!(s=We(e,i))||s.enumerable});return x};var A=(x,e,t)=>(t=x!=null?Ve(He(x)):{},oe(e||!x||!x.__esModule?G(t,"default",{value:x,enumerable:!0}):t,x)),Ye=x=>oe(G({},"__esModule",{value:!0}),x);var ae=B((it,ne)=>{if(typeof BABYLON>"u")throw new Error("babylon.box3d.js needs babylon.js loaded first");ne.exports=BABYLON});var le=B((ot,re)=>{if(typeof BABYLON>"u")throw new Error("babylon.box3d.js needs babylon.js loaded first");re.exports=BABYLON});var _e=B((nt,ce)=>{if(typeof BABYLON>"u")throw new Error("babylon.box3d.js needs babylon.js loaded first");ce.exports=BABYLON});var pe=B((at,he)=>{if(typeof BABYLON>"u")throw new Error("babylon.box3d.js needs babylon.js loaded first");he.exports=BABYLON});var be=B((rt,de)=>{if(typeof BABYLON>"u")throw new Error("babylon.box3d.js needs babylon.js loaded first");de.exports=BABYLON});var ye=B((lt,ue)=>{if(typeof BABYLON>"u")throw new Error("babylon.box3d.js needs babylon.js loaded first");ue.exports=BABYLON});var me=B((ct,xe)=>{if(typeof BABYLON>"u")throw new Error("babylon.box3d.js needs babylon.js loaded first");xe.exports=BABYLON});var ge=B((_t,fe)=>{if(typeof BABYLON>"u")throw new Error("babylon.box3d.js needs babylon.js loaded first");fe.exports=BABYLON});var Se=B((ht,De)=>{if(typeof BABYLON>"u")throw new Error("babylon.box3d.js needs babylon.js loaded first");De.exports=BABYLON});var Ae=B((pt,Be)=>{if(typeof BABYLON>"u")throw new Error("babylon.box3d.js needs babylon.js loaded first");Be.exports=BABYLON});var Me={};w(Me,{default:()=>ee});var ee,te=J(()=>{if(typeof Box3D>"u")throw new Error("babylon.box3d.js needs lib/umd/box3d.umd.js loaded first");ee=Box3D});var Ee={};w(Ee,{default:()=>$e});function $e(){throw new Error("babylon.box3d.js is the script tag build and has no double precision module. Install the package and import it.")}var we=J(()=>{});var Le={};w(Le,{default:()=>Ke});function Ke(){throw new Error('babylon.box3d.js is the script tag build and has no threaded module. Install the package and import it, or use LoadBox3D({ threads: "auto" }).')}var Oe=J(()=>{});var Re={};w(Re,{default:()=>et});function et(){throw new Error("babylon.box3d.js is the script tag build and has no double precision module. Install the package and import it.")}var Ne=J(()=>{});var tt={};w(tt,{BOX3D_HEIGHT_FIELD_HOLE:()=>Ie,Box3D:()=>ee,Box3DPlugin:()=>W,Box3DWheelJoint:()=>L,CanUseBox3DThreads:()=>U,LoadBox3D:()=>Fe});var p=A(ae(),1),_=A(le(),1),ve=A(_e(),1),I=A(pe(),1),j=A(be(),1),Y=A(ye(),1),Q=A(me(),1),K=A(ge(),1),Te=A(Se(),1),M=A(Ae(),1),Ie=255,X=class{constructor(e){this.slot=e;this.userMassProps={};this.angularLocks=0;this.eventMask=0;this.motionType=_.PhysicsMotionType.STATIC;this.activation=_.PhysicsActivationControl.SIMULATION_CONTROLLED}},q=class{constructor(e,t){this.slot=e;this.type=t;this.material={};this.users=new Set;this.children=[];this.parents=new Set}},Z=class{constructor(){this.joints=[];this.pairs=[];this.type=_.PhysicsConstraintType.LOCK;this.jointType=0;this.enabled=!0;this.collisions=!1;this.frames=new Float32Array(14);this.length=0;this.axes=new Map;this.plan=null}};var L=class{constructor(e,t){this._plugin=e;this._slot=t}setSpinSpeed(e){this._plugin._wheelCall("_bx_WheelJoint_SetSpinMotorSpeed",this._slot,e)}setMaxSpinTorque(e){this._plugin._wheelCall("_bx_WheelJoint_SetMaxSpinTorque",this._slot,e)}enableSpinMotor(e){this._plugin._wheelCall("_bx_WheelJoint_EnableSpinMotor",this._slot,e?1:0)}setSteeringAngle(e){this._plugin._wheelCall("_bx_WheelJoint_SetTargetSteeringAngle",this._slot,e)}setSuspension(e,t){this._plugin._wheelCall("_bx_WheelJoint_SetSuspension",this._slot,e,t)}dispose(){this._plugin._destroyExtraJoint(this._slot),this._slot=0}};var Qe=1e5;function Xe(x,e,t){let s=[[x[0],x[3],x[4]],[x[3],x[1],x[5]],[x[4],x[5],x[2]]];t.set(0,0,0,1),e.set(x[0],x[1],x[2]);let i=[0,0,0,1];for(let n=0;n<24;n++){let[a,o,r,l]=i,h=[[1-2*(o*o+r*r),2*(a*o-r*l),2*(a*r+o*l)],[2*(a*o+r*l),1-2*(a*a+r*r),2*(o*r-a*l)],[2*(a*r-o*l),2*(o*r+a*l),1-2*(a*a+o*o)]],c=[0,1,2].map(E=>[0,1,2].map(ze=>[0,1,2].reduce((Ge,se)=>Ge+h[se][E]*[0,1,2].reduce((Je,ie)=>Je+s[se][ie]*h[ie][ze],0),0)));e.set(c[0][0],c[1][1],c[2][2]),t.set(i[0],i[1],i[2],i[3]);let u=[Math.abs(c[1][2]),Math.abs(c[0][2]),Math.abs(c[0][1])],m=u.indexOf(Math.max(...u)),b=(m+1)%3,d=(m+2)%3,D=c[b][d],g=Math.abs(c[0][0])+Math.abs(c[1][1])+Math.abs(c[2][2])+1e-30;if(Math.abs(D)<=1e-9*g)return;let y=(c[d][d]-c[b][b])/(2*D),f=y>0?1:-1;y*=f;let S=f/(y+(y<1e6?Math.sqrt(y*y+1):y)),C=1/Math.sqrt(S*S+1);if(C===1)return;let P=[0,0,0,0];P[m]=-f*Math.sqrt((1-C)/2),P[3]=Math.sqrt(1-P[m]*P[m]);let[v,T,O,R]=i,[N,F,k,z]=P;i[0]=R*N+v*z+T*k-O*F,i[1]=R*F-v*k+T*z+O*N,i[2]=R*k+v*F-T*N+O*z,i[3]=R*z-v*N-T*F-O*k;let ke=Math.hypot(i[0],i[1],i[2],i[3])||1;for(let E=0;E<4;E++)i[E]/=ke}}function qe(x,e){let{x:t,y:s,z:i,w:n}=e,a=[[1-2*(s*s+i*i),2*(t*s-i*n),2*(t*i+s*n)],[2*(t*s+i*n),1-2*(t*t+i*i),2*(s*i-t*n)],[2*(t*i-s*n),2*(s*i+t*n),1-2*(t*t+s*s)]],o=(r,l)=>a[r][0]*x[0]*a[l][0]+a[r][1]*x[1]*a[l][1]+a[r][2]*x[2]*a[l][2];return[o(0,0),o(1,1),o(2,2),o(0,1),o(0,2),o(1,2)]}var H=9,Ce=14,Pe=5,V=11,$=class{constructor(e,t){this._collectIndices=e;this._flipWinding=t;this._vertices=[];this._indices=[]}addNodeMeshes(e,t){e.computeWorldMatrix(!0);let s=p.TmpVectors.Matrix[0];if(p.Matrix.ScalingToRef(e.absoluteScaling.x,e.absoluteScaling.y,e.absoluteScaling.z,s),e instanceof Y.Mesh?this._addMesh(e,s):e instanceof Q.InstancedMesh&&this._addMesh(e.sourceMesh,s),t){let i=p.TmpVectors.Matrix[1];e.computeWorldMatrix().invertToRef(i);let n=p.TmpVectors.Matrix[2];i.multiplyToRef(s,n);let a=e.getChildMeshes(!1).filter(o=>!o.physicsBody);for(let o of a){let r=o.computeWorldMatrix(),l=p.TmpVectors.Matrix[3];r.multiplyToRef(n,l),o instanceof Y.Mesh?this._addMesh(o,l):o instanceof Q.InstancedMesh&&this._addMesh(o.sourceMesh,l)}}}_addMesh(e,t){let s=e.getVerticesData(K.VertexBuffer.PositionKind)||[],i=s.length/3,n=this._vertices.length/3,a=p.TmpVectors.Vector3[0];for(let o=0;o<i;o++)a.set(s[o*3+0],s[o*3+1],s[o*3+2]),p.Vector3.TransformCoordinatesToRef(a,t,a),this._vertices.push(a.x,a.y,a.z);if(this._collectIndices){let o=e.getIndices();if(o)for(let r=0;r<o.length;r+=3)this._flipWinding?this._indices.push(o[r+2]+n,o[r+1]+n,o[r+0]+n):this._indices.push(o[r+0]+n,o[r+1]+n,o[r+2]+n)}}get vertexCount(){return this._vertices.length/3}get triangleCount(){return this._indices.length/3}get vertices(){return this._vertices}get indices(){return this._indices}},Ze=["_bx_Body_AllowFastRotation","_bx_Body_ApplyAngularImpulse","_bx_Body_ApplyForce","_bx_Body_ApplyLinearImpulse","_bx_Body_ApplyMassFromShapes","_bx_Body_ApplyTorque","_bx_Body_ComputeShapeMassData","_bx_Body_EnableSleep","_bx_Body_GetAABB","_bx_Body_GetAngularDamping","_bx_Body_GetAngularVelocity","_bx_Body_GetGravityScale","_bx_Body_GetLinearDamping","_bx_Body_GetLinearVelocity","_bx_Body_GetMassData","_bx_Body_GetTransform","_bx_Body_SetAngularDamping","_bx_Body_SetAngularVelocity","_bx_Body_SetAwake","_bx_Body_SetEventFlags","_bx_Body_SetGravityScale","_bx_Body_SetLinearDamping","_bx_Body_SetLinearVelocity","_bx_Body_GetClipPlane","_bx_Body_SetClipPlane","_bx_Body_SetMassDataFull","_bx_Body_SetMotionLocks","_bx_Body_SetShape","_bx_Body_SetTargetTransform","_bx_Body_SetTransform","_bx_Body_SetType","_bx_Body_SyncShapeDesc","_bx_ComputeAlignedFrameB","_bx_ContactEventsPtr","_bx_CreateBody","_bx_CreateJoint","_bx_CreateWorld","_bx_DebugIndexCount","_bx_DebugIndicesPtr","_bx_DebugPositionsPtr","_bx_DestroyBody","_bx_DestroyJoint","_bx_DestroyWorld","_bx_GetMaxWorkers","_bx_GetRejectedSlotCount","_bx_Joint_EnableLimit","_bx_Joint_EnableMotor","_bx_Joint_EnableSpring","_bx_Joint_IsValid","_bx_Joint_SetCollideConnected","_bx_Joint_SetConstraintTuning","_bx_Joint_SetLimits","_bx_Joint_SetMaxMotorForce","_bx_Joint_SetMotorSpeed","_bx_Joint_SetSphericalMotor","_bx_Joint_SetSphericalTarget","_bx_Joint_SetSpring","_bx_Joint_SetTarget","_bx_Joint_SetTwistLimits","_bx_Joint_UpdateMotorFrame","_bx_Joint_WakeBodies","_bx_MoveEventsPtr","_bx_RayHitsPtr","_bx_Scratch","_bx_ScratchF64","_bx_SensorEventsPtr","_bx_ShapeDesc_AddChild","_bx_ShapeDesc_BuildDebugGeometry","_bx_ShapeDesc_CreateBox","_bx_ShapeDesc_CreateCapsule","_bx_ShapeDesc_CreateContainer","_bx_ShapeDesc_CreateCylinder","_bx_ShapeDesc_CreateHeightField","_bx_ShapeDesc_CreateHull","_bx_ShapeDesc_CreateMesh","_bx_ShapeDesc_CreateSphere","_bx_ShapeDesc_Destroy","_bx_ShapeDesc_GetAABB","_bx_ShapeDesc_GetCategoryBits","_bx_ShapeDesc_GetChildCount","_bx_ShapeDesc_GetDensity","_bx_ShapeDesc_GetFriction","_bx_ShapeDesc_GetMaskBits","_bx_ShapeDesc_GetRestitution","_bx_ShapeDesc_RemoveChild","_bx_ShapeDesc_SetDensity","_bx_ShapeDesc_SetFilter","_bx_ShapeDesc_SetGroup","_bx_ShapeDesc_SetMaterial","_bx_ShapeDesc_SetRollingResistance","_bx_ShapeDesc_SetSensor","_bx_World_CastRay","_bx_World_EnableContinuous","_bx_World_EnableSleeping","_bx_World_Explode","_bx_World_GetContactEvents","_bx_World_GetMaximumLinearSpeed","_bx_World_GetMoveEvents","_bx_World_GetSensorEvents","_bx_World_GetStats","_bx_World_GetWorkerCount","_bx_World_SetGravity","_bx_World_SetMaximumLinearSpeed","_bx_World_Step"],W=class{constructor(e=!0,t,s){this._useDeltaForWorldStep=e;this.name="Box3DPlugin";this.subStepCount=4;this.workerCount=1;this.lastStepTimeMs=0;this._worldSlot=0;this._fixedTimeStep=1/60;this._timeStep=1/60;this._maxAngularVelocity=4*Math.PI*10;this._bodies=[];this._shapes=[];this._bodyCollisionObservable=new Map;this._bodyCollisionEndedObservable=new Map;this._touchedInstanceMeshes=new Set;this._motorJoints=new Set;this._tmpVec3=[new p.Vector3,new p.Vector3,new p.Vector3,new p.Vector3];this._tmpQuat=[new p.Quaternion,new p.Quaternion,new p.Quaternion];this._warned=new Set;this._rejectedSlots=0;this.onCollisionObservable=new M.Observable;this.onCollisionEndedObservable=new M.Observable;this.onTriggerCollisionObservable=new M.Observable;if(!t)throw new Error("Box3D module is required: pass the awaited result of the Box3D module factory.");let i=Ze.filter(n=>typeof t[n]!="function");if(i.length>0)throw new Error(`Box3DPlugin: the Box3D module is missing ${i.length} entry point${i.length===1?"":"s"} this build needs (${i.slice(0,3).join(", ")}${i.length>3?", ...":""}). box3d.js and box3d.wasm have to come from the same build of this package: check what locateFile points at and clear any copied or cached box3d.wasm.`);if(this._b3=t,this.world=t,s?.subStepCount!==void 0&&(this.subStepCount=Math.max(1,Math.round(s.subStepCount))),this._worldSlot=this._b3._bx_CreateWorld(0,-9.81,0,this._resolveWorkerCount(s?.workerCount)),!this._worldSlot)throw new Error("Box3D: could not create a world (max worlds reached?)");this.workerCount=Math.max(1,this._b3._bx_World_GetWorkerCount(this._worldSlot))}_resolveWorkerCount(e){let t=Math.max(1,this._b3._bx_GetMaxWorkers());if(e===void 0)return 1;let s;if(e==="auto"){let i=typeof navigator<"u"&&navigator.hardwareConcurrency||4;s=Math.max(1,Math.floor(i/2))}else s=Math.max(1,Math.round(e));return s>1&&t===1&&this._warnOnce("single-threaded-module",`${s} workers were requested, but this Box3D module was built without threads, so the step stays on the calling thread. Load the threaded build (LoadBox3D({ threads: true }), or babylon-box3d/wasm/threads) from a cross origin isolated page: it needs SharedArrayBuffer, which browsers only allow with the COOP and COEP headers set.`),Math.min(s,t)}_scratch(){return new Float32Array(this._b3.HEAPF32.buffer,this._b3._bx_Scratch(),64)}_warnOnce(e,t){this._warned.has(e)||(this._warned.add(e),I.Logger.Warn(`Box3DPlugin: ${t}`))}_getPluginReference(e,t){return e._pluginDataInstances?.length?e._pluginDataInstances[t??0]:e._pluginData}_applyToBodyOrInstances(e,t,s){if(e._pluginDataInstances?.length>0&&s===void 0)for(let i of e._pluginDataInstances)t(i);else t(this._getPluginReference(e,s))}_motionTypeToNative(e){switch(e){case _.PhysicsMotionType.STATIC:return 0;case _.PhysicsMotionType.ANIMATED:return 1;default:return 2}}_nodeTransformToRef(e,t,s){if(e.parent){e.computeWorldMatrix(!0),t.copyFrom(e.absolutePosition),s.copyFrom(e.absoluteRotationQuaternion);return}t.copyFrom(e.position),e.rotationQuaternion?s.copyFrom(e.rotationQuaternion):p.Quaternion.FromEulerAnglesToRef(e.rotation.x,e.rotation.y,e.rotation.z,s)}setGravity(e){this._b3._bx_World_SetGravity(this._worldSlot,e.x,e.y,e.z)}setTimeStep(e){this._fixedTimeStep=e}getTimeStep(){return this._fixedTimeStep}executeStep(e,t){for(let o of t)o.disablePreStep||this.setPhysicsBodyTransformation(o,o.transformNode);for(let o of this._motorJoints)this._b3._bx_Joint_IsValid(o)?this._b3._bx_Joint_UpdateMotorFrame(o):this._motorJoints.delete(o);let s=this._useDeltaForWorldStep?e:this._fixedTimeStep;this._timeStep=s;let i=performance.now();this._b3._bx_World_Step(this._worldSlot,s,this.subStepCount);let n=this._b3._bx_World_GetMoveEvents(this._worldSlot);if(n>0){let o=this._b3._bx_MoveEventsPtr(),r=new Float32Array(this._b3.HEAPF32.buffer,o,n*H);for(let l=0;l<n;l++){r.buffer!==this._b3.HEAPF32.buffer&&(r=new Float32Array(this._b3.HEAPF32.buffer,o,n*H));let h=l*H,c=this._bodies[r[h]];!c||c.body.disableSync||this._syncBodyFromBuffer(c.body,c.index,r,h+1)}for(let l of this._touchedInstanceMeshes)l.thinInstanceBufferUpdated("matrix");this._touchedInstanceMeshes.clear()}this._notifyCollisions(),this._notifyTriggers(),this.lastStepTimeMs=performance.now()-i;let a=this._b3._bx_GetRejectedSlotCount();a>this._rejectedSlots&&(this._rejectedSlots=a,this._warnOnce("rejected-slots",`the native module did not recognize ${a} of the handles it was given, and those calls did nothing. Something is using a body, shape or joint after it was destroyed, or box3d.js and box3d.wasm are from different builds.`))}getPluginVersion(){return 2}setVelocityLimits(e,t){this._b3._bx_World_SetMaximumLinearSpeed(this._worldSlot,e),this._maxAngularVelocity=t}getMaxLinearVelocity(){return this._b3._bx_World_GetMaximumLinearSpeed(this._worldSlot)}getMaxAngularVelocity(){return this._maxAngularVelocity}getStats(){this._b3._bx_World_GetStats(this._worldSlot);let e=this._scratch();return{bodies:e[0],shapes:e[1],contacts:e[2],joints:e[3],islands:e[4],stepMs:e[5],collideMs:e[6],solveMs:e[7]}}setSleepingEnabled(e){this._b3._bx_World_EnableSleeping(this._worldSlot,e?1:0)}setContinuousEnabled(e){this._b3._bx_World_EnableContinuous(this._worldSlot,e?1:0)}_createNativeBody(e,t,s,i){let n=this._b3._bx_CreateBody(this._worldSlot,this._motionTypeToNative(e),t.x,t.y,t.z,s.x,s.y,s.z,s.w,i?0:1),a=new X(n);return a.motionType=e,a}initBody(e,t,s,i){let n=this._createNativeBody(t,s,i,e.startAsleep);e._pluginData=n,this._bodies[n.slot]={body:e,index:0,data:n}}initBodyInstances(e,t,s){let i=s._thinInstanceDataStorage?.instancesCount??0,n=s._thinInstanceDataStorage?.matrixData;if(!n)return;let a=e.shape?._pluginData;i>8&&a&&this._bakesMeshCopies(a)&&this._warnOnce("instanced-mesh-child","a mesh inside a container has no local transform in Box3D, so every instance gets its own baked copy of the mesh data; put the mesh on the body directly, or bake the offset into the mesh, to share it."),this._createOrUpdateBodyInstances(e,t,n,0,i,!1)}_createOrUpdateBodyInstances(e,t,s,i,n,a){let o=p.TmpVectors.Quaternion[0],r=p.TmpVectors.Matrix[0],l=p.TmpVectors.Vector3[0];for(let h=i;h<n;h++)if(l.set(s[h*16+12],s[h*16+13],s[h*16+14]),p.Matrix.FromArrayToRef(s,h*16,r),r.decompose(void 0,o,void 0),a){let c=e._pluginDataInstances[h];this._b3._bx_Body_SetTransform(c.slot,l.x,l.y,l.z,o.x,o.y,o.z,o.w)}else{let c=this._createNativeBody(t,l,o,e.startAsleep),u=e._pluginDataInstances[0];u&&(c.userMassProps=u.userMassProps,c.eventMask=u.eventMask,this._applyEventFlags(c),u.activation!==_.PhysicsActivationControl.SIMULATION_CONTROLLED&&(c.activation=u.activation,this._applyNativeMotionType(c),this._b3._bx_Body_EnableSleep(c.slot,u.activation===_.PhysicsActivationControl.ALWAYS_ACTIVE?0:1))),e._pluginDataInstances.push(c),this._bodies[c.slot]={body:e,index:h,data:c}}}updateBodyInstances(e,t){let s=t._thinInstanceDataStorage?.instancesCount??0,i=t._thinInstanceDataStorage?.matrixData;if(!i)return;let n=e._pluginDataInstances.length,a=this.getMotionType(e);if(s>n){this._createOrUpdateBodyInstances(e,a,i,n,s,!1);let o=e.shape;if(o&&o._pluginData)for(let r=n;r<s;r++)this._setBodyShape(e._pluginDataInstances[r],o._pluginData)}else if(s<n){let o=n-s;for(let r=0;r<o;r++){let l=e._pluginDataInstances.pop();this._destroyBodyData(l)}this._createOrUpdateBodyInstances(e,a,i,0,s,!0)}}_destroyBodyData(e){if(e){for(let t of this._shapes)t?.users.delete(e);this._bodyCollisionObservable.delete(e.slot),this._bodyCollisionEndedObservable.delete(e.slot),this._bodies[e.slot]=void 0,this._b3._bx_DestroyBody(e.slot),e.slot=0}}removeBody(e){if(e._pluginDataInstances?.length)for(let t of e._pluginDataInstances)this._destroyBodyData(t);e._pluginData&&this._destroyBodyData(e._pluginData)}sync(e){this.syncTransform(e,e.transformNode)}_syncBodyFromBuffer(e,t,s,i){let n=e.transformNode;if(e._pluginDataInstances.length){let a=n,o=a._thinInstanceDataStorage?.matrixData;if(!o)return;let r=this._tmpVec3[0],l=t*16;r.set(Math.hypot(o[l],o[l+1],o[l+2]),Math.hypot(o[l+4],o[l+5],o[l+6]),Math.hypot(o[l+8],o[l+9],o[l+10]));let h=this._tmpQuat[0];h.set(s[i+3],s[i+4],s[i+5],s[i+6]);let c=this._tmpVec3[1];c.set(s[i],s[i+1],s[i+2]);let u=p.TmpVectors.Matrix[0];p.Matrix.ComposeToRef(r,h,c,u),u.copyToArray(o,l),this._touchedInstanceMeshes.add(a);return}this._applyTransformToNode(n,s[i],s[i+1],s[i+2],s[i+3],s[i+4],s[i+5],s[i+6])}_applyTransformToNode(e,t,s,i,n,a,o,r){let l=this._tmpQuat[0];l.set(n,a,o,r);let h=e.parent;if(h&&!h.getWorldMatrix().isIdentity()){h.computeWorldMatrix(!0);let c=this._tmpVec3[2];c.copyFrom(e.scaling);let u=p.TmpVectors.Matrix[0],m=this._tmpVec3[3];m.set(t,s,i),p.Matrix.ComposeToRef(e.absoluteScaling,l,m,u);let b=p.TmpVectors.Matrix[1];h.getWorldMatrix().invertToRef(b);let d=p.TmpVectors.Matrix[2];u.multiplyToRef(b,d),d.decomposeToTransformNode(e),e.rotationQuaternion?.normalize(),e.scaling.copyFrom(c)}else e.position.set(t,s,i),e.rotationQuaternion?e.rotationQuaternion.copyFrom(l):l.toEulerAnglesToRef(e.rotation)}syncTransform(e,t){if(e._pluginDataInstances.length){let n=t;if(!n._thinInstanceDataStorage?.matrixData)return;for(let o=0;o<e._pluginDataInstances.length;o++){let r=e._pluginDataInstances[o];this._b3._bx_Body_GetTransform(r.slot),this._syncBodyFromBuffer(e,o,this._scratch(),0)}n.thinInstanceBufferUpdated("matrix"),this._touchedInstanceMeshes.delete(n);return}let s=e._pluginData;if(!s||!s.slot)return;this._b3._bx_Body_GetTransform(s.slot);let i=this._scratch();this._applyTransformToNode(t,i[0],i[1],i[2],i[3],i[4],i[5],i[6])}setPhysicsBodyTransformation(e,t){let s=e.getPrestepType();if(s==_.PhysicsPrestepType.TELEPORT){if(e._pluginDataInstances.length>0){let r=t._thinInstanceDataStorage?.matrixData;if(!r)return;this._createOrUpdateBodyInstances(e,e.getMotionType(),r,0,e._pluginDataInstances.length,!0);return}let i=e._pluginData,n=this._tmpVec3[0],a=this._tmpQuat[0];this._nodeTransformToRef(t,n,a),this._b3._bx_Body_SetTransform(i.slot,n.x,n.y,n.z,a.x,a.y,a.z,a.w)}else s==_.PhysicsPrestepType.ACTION?this.setTargetTransform(e,t.absolutePosition,t.absoluteRotationQuaternion):s==_.PhysicsPrestepType.DISABLED&&I.Logger.Warn("Prestep type is set to DISABLED. Unable to set physics body transformation.")}setTargetTransform(e,t,s,i){this._applyToBodyOrInstances(e,n=>{this._b3._bx_Body_SetTargetTransform(n.slot,t.x,t.y,t.z,s.x,s.y,s.z,s.w,this._timeStep)},i)}_bakesMeshCopies(e,t=new Set){return t.has(e)?!1:(t.add(e),e.children.some(s=>s.type===_.PhysicsShapeType.MESH||this._bakesMeshCopies(s,t)))}_setBodyShape(e,t){for(let s of this._shapes)s?.users.delete(e);this._b3._bx_Body_SetShape(e.slot,t?t.slot:0),t&&t.users.add(e),this._applyEventFlags(e),this._internalUpdateMassProperties(e)}setShape(e,t){let s=t&&t._pluginData?t._pluginData:null;this._applyToBodyOrInstances(e,i=>this._setBodyShape(i,s))}getShape(e){return e.shape??null}getShapeType(e){return e.type??e._pluginData?.type??_.PhysicsShapeType.CONTAINER}_applyEventFlags(e){let t=e.eventMask&5?1:0,s=e.eventMask&2?1:0;this._b3._bx_Body_SetEventFlags(e.slot,t,s)}setEventMask(e,t,s){this._applyToBodyOrInstances(e,i=>{i.eventMask=t,this._applyEventFlags(i)},s)}getEventMask(e,t){return this._getPluginReference(e,t).eventMask}setMotionType(e,t,s){this._applyToBodyOrInstances(e,i=>{i.motionType=t,this._applyNativeMotionType(i),this._internalUpdateMassProperties(i)},s)}_applyNativeMotionType(e){let t=e.activation===_.PhysicsActivationControl.ALWAYS_INACTIVE?0:this._motionTypeToNative(e.motionType);this._b3._bx_Body_SetType(e.slot,t)}setActivationControl(e,t,s){this._applyToBodyOrInstances(e,i=>{if(i.activation===t)return;let n=i.activation===_.PhysicsActivationControl.ALWAYS_INACTIVE;if(i.activation=t,t===_.PhysicsActivationControl.ALWAYS_INACTIVE){this._b3._bx_Body_SetLinearVelocity(i.slot,0,0,0),this._b3._bx_Body_SetAngularVelocity(i.slot,0,0,0),this._applyNativeMotionType(i);return}this._applyNativeMotionType(i),this._internalUpdateMassProperties(i),this._b3._bx_Body_EnableSleep(i.slot,t===_.PhysicsActivationControl.ALWAYS_ACTIVE?0:1),n&&t===_.PhysicsActivationControl.SIMULATION_CONTROLLED&&this._b3._bx_Body_SetAwake(i.slot,0)},s)}getMotionType(e,t){return this._getPluginReference(e,t).motionType}_readMassData(e){e.motionType===_.PhysicsMotionType.DYNAMIC&&e.activation!==_.PhysicsActivationControl.ALWAYS_INACTIVE?this._b3._bx_Body_GetMassData(e.slot):this._b3._bx_Body_ComputeShapeMassData(e.slot);let t=this._scratch(),s=t[0],i=new p.Vector3,n=new p.Quaternion;return Xe([t[4],t[5],t[6],t[7],t[8],t[9]],i,n),s>0&&i.scaleInPlace(1/s),{mass:s,centerOfMass:new p.Vector3(t[1],t[2],t[3]),inertia:i,inertiaOrientation:n}}_resolveMassProperties(e){let t=this._readMassData(e),s=e.userMassProps??{};return{mass:s.mass!==void 0&&s.mass>0?s.mass:t.mass,centerOfMass:s.centerOfMass??t.centerOfMass,inertia:s.inertia??t.inertia,inertiaOrientation:s.inertiaOrientation??(s.inertia?p.Quaternion.Identity():t.inertiaOrientation)}}_internalUpdateMassProperties(e){if(e.motionType!==_.PhysicsMotionType.DYNAMIC||e.activation===_.PhysicsActivationControl.ALWAYS_INACTIVE){this._applyMotionLocks(e,!1,!1,!1);return}this._b3._bx_Body_ApplyMassFromShapes(e.slot);let t=e.userMassProps;if(!(!!t&&(t.mass!==void 0||!!t.centerOfMass||!!t.inertia||!!t.inertiaOrientation))){this._applyMotionLocks(e,!1,!1,!1);return}let i=this._resolveMassProperties(e),n=i.mass>0?i.mass:1,a=i.inertia,o=i.inertiaOrientation,r=[a.x<=0,a.y<=0,a.z<=0],l=Math.max(a.x,a.y,a.z,1e-4)*Qe,h=[r[0]?l:a.x,r[1]?l:a.y,r[2]?l:a.z].map(u=>u*n),c=qe(h,o);this._b3._bx_Body_SetMassDataFull(e.slot,n,i.centerOfMass.x,i.centerOfMass.y,i.centerOfMass.z,c[0],c[1],c[2],c[3],c[4],c[5]),this._applyLockedAxes(e,r,o)}_applyLockedAxes(e,t,s){let i=t.filter(Boolean).length;if(i===3){this._applyMotionLocks(e,!0,!0,!0);return}if(i!==2){this._applyMotionLocks(e,!1,!1,!1);return}this._b3._bx_Body_GetTransform(e.slot);let n=this._scratch(),a=this._tmpQuat[0].set(n[3],n[4],n[5],n[6]),o=t.indexOf(!1),r=this._tmpVec3[0].set(o===0?1:0,o===1?1:0,o===2?1:0);r.applyRotationQuaternionInPlace(s).applyRotationQuaternionInPlace(a);let l=[Math.abs(r.x),Math.abs(r.y),Math.abs(r.z)],h=l.indexOf(Math.max(...l));l[h]>.9999?this._applyMotionLocks(e,h!==0,h!==1,h!==2):this._applyMotionLocks(e,!1,!1,!1)}_applyMotionLocks(e,t,s,i){let n=(t?1:0)|(s?2:0)|(i?4:0);n!==e.angularLocks&&(e.angularLocks=n,this._b3._bx_Body_SetMotionLocks(e.slot,0,0,0,t?1:0,s?1:0,i?1:0))}computeMassProperties(e,t){let s=this._getPluginReference(e,t);this._b3._bx_Body_ApplyMassFromShapes(s.slot);let i=this._readMassData(s);return this._internalUpdateMassProperties(s),i}setMassProperties(e,t,s){this._applyToBodyOrInstances(e,i=>{i.userMassProps=t,this._internalUpdateMassProperties(i)},s)}getMassProperties(e,t){return this._resolveMassProperties(this._getPluginReference(e,t))}setLinearDamping(e,t,s){this._applyToBodyOrInstances(e,i=>this._b3._bx_Body_SetLinearDamping(i.slot,t),s)}getLinearDamping(e,t){return this._b3._bx_Body_GetLinearDamping(this._getPluginReference(e,t).slot)}setAngularDamping(e,t,s){this._applyToBodyOrInstances(e,i=>this._b3._bx_Body_SetAngularDamping(i.slot,t),s)}getAngularDamping(e,t){return this._b3._bx_Body_GetAngularDamping(this._getPluginReference(e,t).slot)}setLinearVelocity(e,t,s){this._applyToBodyOrInstances(e,i=>this._b3._bx_Body_SetLinearVelocity(i.slot,t.x,t.y,t.z),s)}getLinearVelocityToRef(e,t,s){this._b3._bx_Body_GetLinearVelocity(this._getPluginReference(e,s).slot);let i=this._scratch();t.set(i[0],i[1],i[2])}applyImpulse(e,t,s,i){this._applyToBodyOrInstances(e,n=>this._b3._bx_Body_ApplyLinearImpulse(n.slot,t.x,t.y,t.z,s.x,s.y,s.z),i)}applyAngularImpulse(e,t,s){this._applyToBodyOrInstances(e,i=>this._b3._bx_Body_ApplyAngularImpulse(i.slot,t.x,t.y,t.z),s)}applyForce(e,t,s,i){this._applyToBodyOrInstances(e,n=>this._b3._bx_Body_ApplyForce(n.slot,t.x,t.y,t.z,s.x,s.y,s.z),i)}applyTorque(e,t,s){this._applyToBodyOrInstances(e,i=>this._b3._bx_Body_ApplyTorque(i.slot,t.x,t.y,t.z),s)}setAngularVelocity(e,t,s){this._applyToBodyOrInstances(e,i=>this._b3._bx_Body_SetAngularVelocity(i.slot,t.x,t.y,t.z),s)}getAngularVelocityToRef(e,t,s){this._b3._bx_Body_GetAngularVelocity(this._getPluginReference(e,s).slot);let i=this._scratch();t.set(i[0],i[1],i[2])}getBodyGeometry(e){let t=e.shape?._pluginData;if(!t)return{positions:[],indices:[]};let s=this._b3._bx_ShapeDesc_BuildDebugGeometry(t.slot),i=this._b3._bx_DebugIndexCount();if(!s||!i)return{positions:[],indices:[]};let n=new Float32Array(this._b3.HEAPF32.buffer,this._b3._bx_DebugPositionsPtr(),s*3).slice(),a=new Uint32Array(this._b3.HEAPU32.buffer,this._b3._bx_DebugIndicesPtr(),i).slice();return{positions:n,indices:a}}disposeBody(e){this.removeBody(e),e._pluginData=void 0,e._pluginDataInstances.length=0}setCollisionCallbackEnabled(e,t,s){this.setEventMask(e,t?7:0,s)}setCollisionEndedCallbackEnabled(e,t,s){this._applyToBodyOrInstances(e,i=>{i.eventMask=t?i.eventMask|4:i.eventMask&-5,this._applyEventFlags(i)},s)}getCollisionObservable(e,t){let s=this._getPluginReference(e,t).slot,i=this._bodyCollisionObservable.get(s);return i||(i=new M.Observable,this._bodyCollisionObservable.set(s,i)),i}getCollisionEndedObservable(e,t){let s=this._getPluginReference(e,t).slot,i=this._bodyCollisionEndedObservable.get(s);return i||(i=new M.Observable,this._bodyCollisionEndedObservable.set(s,i)),i}setGravityFactor(e,t,s){this._applyToBodyOrInstances(e,i=>this._b3._bx_Body_SetGravityScale(i.slot,t),s)}getGravityFactor(e,t){return this._b3._bx_Body_GetGravityScale(this._getPluginReference(e,t).slot)}setBodyClipPlane(e,t,s=4294967295,i){this._applyToBodyOrInstances(e,n=>t?this._b3._bx_Body_SetClipPlane(n.slot,1,t.normal.x,t.normal.y,t.normal.z,t.d,s>>>0):this._b3._bx_Body_SetClipPlane(n.slot,0,0,0,0,0,0),i)}getBodyClipPlane(e,t){this._b3._bx_Body_GetClipPlane(this._getPluginReference(e,t).slot);let s=this._b3._bx_ScratchF64()>>3,i=this._b3.HEAPF64;return i[s]?{plane:new Te.Plane(i[s+1],i[s+2],i[s+3],i[s+4]),collideMask:i[s+5]>>>0}:null}_registerShape(e,t,s){if(!t)throw new Error("Box3DPlugin: shape creation failed (degenerate geometry?)");let i=new q(t,s);return e._pluginData=i,this._shapes[t]=i,i}_withFloatBuffer(e,t){let s=this._b3._malloc(e.length*4);new Float32Array(this._b3.HEAPF32.buffer,s,e.length).set(e);try{return t(s)}finally{this._b3._free(s)}}_withByteBuffer(e,t){if(!e||e.length===0)return t(0);let s=this._b3._malloc(e.length);new Uint8Array(this._b3.HEAPU8.buffer,s,e.length).set(e);try{return t(s)}finally{this._b3._free(s)}}_withIntBuffer(e,t){let s=this._b3._malloc(e.length*4);new Int32Array(this._b3.HEAP32.buffer,s,e.length).set(e);try{return t(s)}finally{this._b3._free(s)}}_createOptionsFromGroundMesh(e){let t=e.groundMesh;if(!t)return;let s=t.getVerticesData(K.VertexBuffer.PositionKind),i=t.computeWorldMatrix(!0),n=[],a=p.TmpVectors.Vector3[0];for(let d=0;d<s.length;d+=3)p.Vector3.FromArrayToRef(s,d,a),p.Vector3.TransformCoordinatesToRef(a,i,a),a.toArray(n,d);let o=~~(Math.sqrt(n.length/3)-1),r=t.getBoundingInfo(),l=Math.min(r.boundingBox.extendSizeWorld.x,r.boundingBox.extendSizeWorld.z),h=r.boundingBox.minimumWorld.x,c=r.boundingBox.minimumWorld.y,u=r.boundingBox.minimumWorld.z,m=new Float32Array((o+1)*(o+1)),b=l*2/o;m.fill(c);for(let d=0;d<n.length;d+=3){let D=Math.round((n[d+0]-h)/b),g=o-Math.round((n[d+2]-u)/b);m[g*(o+1)+D]=n[d+1]-c}e.numHeightFieldSamplesX=o+1,e.numHeightFieldSamplesZ=o+1,e.heightFieldSizeX=r.boundingBox.extendSizeWorld.x*2,e.heightFieldSizeZ=r.boundingBox.extendSizeWorld.z*2,e.heightFieldData=m}initShape(e,t,s){let i=this._b3,n=s.center??p.Vector3.ZeroReadOnly,a=s.rotation??p.Quaternion.Identity();switch(t){case _.PhysicsShapeType.SPHERE:{let o=s.radius??1;this._registerShape(e,i._bx_ShapeDesc_CreateSphere(n.x,n.y,n.z,o),t);break}case _.PhysicsShapeType.CAPSULE:{let o=s.pointA??p.Vector3.ZeroReadOnly,r=s.pointB??p.Vector3.UpReadOnly;this._registerShape(e,i._bx_ShapeDesc_CreateCapsule(o.x,o.y,o.z,r.x,r.y,r.z,s.radius??0),t);break}case _.PhysicsShapeType.BOX:{let o=s.extents??p.Vector3.OneReadOnly;this._registerShape(e,i._bx_ShapeDesc_CreateBox(o.x*.5,o.y*.5,o.z*.5,n.x,n.y,n.z,a.x,a.y,a.z,a.w),t);break}case _.PhysicsShapeType.CYLINDER:{let o=s.pointA??p.Vector3.ZeroReadOnly,l=(s.pointB??p.Vector3.UpReadOnly).subtract(o),h=l.length(),c=this._tmpQuat[0];h>1e-6?(l.scaleInPlace(1/h),p.Quaternion.FromUnitVectorsToRef(p.Vector3.UpReadOnly,l,c)):c.set(0,0,0,1),this._registerShape(e,i._bx_ShapeDesc_CreateCylinder(h,s.radius??0,16,o.x,o.y,o.z,c.x,c.y,c.z,c.w),t);break}case _.PhysicsShapeType.CONVEX_HULL:case _.PhysicsShapeType.MESH:{if(!s.mesh&&s.positions){this._initShapeFromPositions(e,t,s.positions,s.positionIndices);break}let o=s.mesh;if(!o)throw new Error("No mesh provided to create physics shape.");let r=t===_.PhysicsShapeType.MESH,l=!o.getScene().useRightHandedSystem,h=new $(r,l);if(h.addNodeMeshes(o,!!s.includeChildMeshes),t===_.PhysicsShapeType.CONVEX_HULL){let c=this._withFloatBuffer(h.vertices,u=>i._bx_ShapeDesc_CreateHull(u,h.vertexCount));this._registerShape(e,c,t)}else{let c=this._withFloatBuffer(h.vertices,u=>this._withIntBuffer(h.indices,m=>i._bx_ShapeDesc_CreateMesh(u,h.vertexCount,m,h.triangleCount,1,1,1,0,0)));this._registerShape(e,c,t)}break}case _.PhysicsShapeType.HEIGHTFIELD:{s.groundMesh&&this._createOptionsFromGroundMesh(s);let o=s.numHeightFieldSamplesX,r=s.numHeightFieldSamplesZ;if(!o||!r||!s.heightFieldSizeX||!s.heightFieldSizeZ||!s.heightFieldData)throw new Error("Missing required heightfield parameters");let l=new Float32Array(o*r);for(let g=0;g<o;g++)for(let y=0;y<r;y++)l[y*o+g]=s.heightFieldData[(r-1-y)*o+g];let h=s.heightFieldSizeX/(o-1),c=s.heightFieldSizeZ/(r-1),u=o-1,m=r-1,b=s.heightFieldMaterials;if(b&&b.length!==u*m)throw new Error(`heightFieldMaterials needs ${u*m} cells (${u} \xD7 ${m}), got ${b.length}`);let d=b?new Uint8Array(u*m):null;if(b&&d)for(let g=0;g<u;g++)for(let y=0;y<m;y++)d[y*u+g]=b[(m-1-y)*u+g];let D=this._withFloatBuffer(l,g=>this._withByteBuffer(d,y=>i._bx_ShapeDesc_CreateHeightField(g,y,o,r,h,1,c,0,-s.heightFieldSizeX*.5,0,-s.heightFieldSizeZ*.5)));this._registerShape(e,D,t);break}case _.PhysicsShapeType.CONTAINER:{this._registerShape(e,i._bx_ShapeDesc_CreateContainer(),t);break}default:throw new Error("Unsupported Shape Type.")}}_initShapeFromPositions(e,t,s,i){let n=this._b3;if(s.length%3!==0)throw new Error(`positions needs x, y, z triplets, got ${s.length} numbers`);let a=s.length/3;if(t===_.PhysicsShapeType.CONVEX_HULL){this._registerShape(e,this._withFloatBuffer(s,o=>n._bx_ShapeDesc_CreateHull(o,a)),t);return}if(!i||i.length%3!==0)throw new Error("a MESH shape from positions needs positionIndices, three per triangle");for(let o=0;o<i.length;o++)if(i[o]<0||i[o]>=a||!Number.isInteger(i[o]))throw new Error(`positionIndices[${o}] is ${i[o]}, but there are ${a} points`);this._registerShape(e,this._withFloatBuffer(s,o=>this._withIntBuffer(i,r=>n._bx_ShapeDesc_CreateMesh(o,a,r,i.length/3,1,1,1,0,0))),t)}_refreshShapeUsers(e,t=new Set){if(!t.has(e)){t.add(e);for(let s of e.users)this._b3._bx_Body_SetShape(s.slot,e.slot),this._applyEventFlags(s),this._internalUpdateMassProperties(s);for(let s of e.parents)this._refreshShapeUsers(s,t)}}_syncShapeUsers(e,t,s=new Set,i=e){if(!s.has(e)){s.add(e);for(let n of e.users)this._b3._bx_Body_SyncShapeDesc(n.slot,i.slot,t),t&4&&this._internalUpdateMassProperties(n);for(let n of e.parents)this._syncShapeUsers(n,t,s,i)}}setShapeFilterMembershipMask(e,t){let s=e._pluginData,i=this._b3._bx_ShapeDesc_GetMaskBits(s.slot);this._b3._bx_ShapeDesc_SetFilter(s.slot,t>>>0,i>>>0),this._syncShapeUsers(s,1)}getShapeFilterMembershipMask(e){return this._b3._bx_ShapeDesc_GetCategoryBits(e._pluginData.slot)}setShapeFilterCollideMask(e,t){let s=e._pluginData,i=this._b3._bx_ShapeDesc_GetCategoryBits(s.slot);this._b3._bx_ShapeDesc_SetFilter(s.slot,i>>>0,t>>>0),this._syncShapeUsers(s,1)}getShapeFilterCollideMask(e){return this._b3._bx_ShapeDesc_GetMaskBits(e._pluginData.slot)}setMaterial(e,t){let s=e._pluginData;s.material=t,this._b3._bx_ShapeDesc_SetMaterial(s.slot,t.friction??.5,t.restitution??0),this._syncShapeUsers(s,2)}getMaterial(e){let t=e._pluginData;return{friction:this._b3._bx_ShapeDesc_GetFriction(t.slot),staticFriction:t.material.staticFriction,restitution:this._b3._bx_ShapeDesc_GetRestitution(t.slot),frictionCombine:t.material.frictionCombine,restitutionCombine:t.material.restitutionCombine}}setDensity(e,t){let s=e._pluginData;this._b3._bx_ShapeDesc_SetDensity(s.slot,t),this._syncShapeUsers(s,4)}getDensity(e){return this._b3._bx_ShapeDesc_GetDensity(e._pluginData.slot)}addChild(e,t,s,i,n){let a=e._pluginData,o=t._pluginData,r=s??p.Vector3.ZeroReadOnly,l=i??p.Quaternion.Identity(),h=n??p.Vector3.OneReadOnly;this._b3._bx_ShapeDesc_AddChild(a.slot,o.slot,r.x,r.y,r.z,l.x,l.y,l.z,l.w,h.x,h.y,h.z),a.children.push(o),o.parents.add(a),this._refreshShapeUsers(a)}removeChild(e,t){let s=e._pluginData;this._b3._bx_ShapeDesc_RemoveChild(s.slot,t);let[i]=s.children.splice(t,1);i&&!s.children.includes(i)&&i.parents.delete(s),this._refreshShapeUsers(s)}getNumChildren(e){return this._b3._bx_ShapeDesc_GetChildCount(e._pluginData.slot)}getBoundingBox(e){this._b3._bx_ShapeDesc_GetAABB(e._pluginData.slot);let t=this._scratch();return p.TmpVectors.Vector3[0].set(t[0],t[1],t[2]),p.TmpVectors.Vector3[1].set(t[3],t[4],t[5]),new j.BoundingBox(p.TmpVectors.Vector3[0],p.TmpVectors.Vector3[1],p.Matrix.IdentityReadOnly)}getBodyBoundingBox(e){let t=this._getPluginReference(e);this._b3._bx_Body_GetAABB(t.slot);let s=this._scratch();return p.TmpVectors.Vector3[0].set(s[0],s[1],s[2]),p.TmpVectors.Vector3[1].set(s[3],s[4],s[5]),new j.BoundingBox(p.TmpVectors.Vector3[0],p.TmpVectors.Vector3[1],p.Matrix.IdentityReadOnly)}disposeShape(e){let t=e._pluginData;if(t){for(let s of t.parents){let i=s.children.indexOf(t);i>=0&&(s.children.splice(i,1),this._b3._bx_ShapeDesc_RemoveChild(s.slot,i))}for(let s of t.children)s.parents.delete(t);this._shapes[t.slot]=void 0,this._b3._bx_ShapeDesc_Destroy(t.slot),e._pluginData=void 0}}setTrigger(e,t){let s=e._pluginData;this._b3._bx_ShapeDesc_SetSensor(s.slot,t?1:0),this._refreshShapeUsers(s)}_frameToBuffer(e,t,s,i,n,a){let o=p.TmpVectors.Matrix[0];p.Matrix.FromValuesToRef(i.x,i.y,i.z,0,n.x,n.y,n.z,0,a.x,a.y,a.z,0,0,0,0,1,o);let r=this._tmpQuat[2];p.Quaternion.FromRotationMatrixToRef(o,r),r.normalize(),e[t]=s.x,e[t+1]=s.y,e[t+2]=s.z,e[t+3]=r.x,e[t+4]=r.y,e[t+5]=r.z,e[t+6]=r.w}_buildFrames(e,t,s,i){let n=t.options,a=n.pivotA??p.Vector3.ZeroReadOnly,o=n.pivotB??p.Vector3.ZeroReadOnly,r=(n.axisA??p.Vector3.RightReadOnly).normalizeToNew(),l=(n.axisB??p.Vector3.RightReadOnly).normalizeToNew(),h=n.perpAxisA?n.perpAxisA.normalizeToNew():r.getNormalToRef(new p.Vector3),c=n.perpAxisB?n.perpAxisB.normalizeToNew():l.getNormalToRef(new p.Vector3);h.subtractInPlace(r.scale(p.Vector3.Dot(r,h))).normalize(),c.subtractInPlace(l.scale(p.Vector3.Dot(l,c))).normalize();let u=p.Vector3.Cross(r,h),m=p.Vector3.Cross(l,c);t._initOptions||(t._initOptions={axisA:r.clone(),axisB:l.clone(),perpAxisA:h.clone(),perpAxisB:c.clone(),pivotA:a.clone(),pivotB:o.clone()});let b=e.frames;if(e.plan){let d=e.plan.basis;if(d){let D=[r,h,u],g=[l,c,m];this._frameToBuffer(b,0,a,D[d[0]],D[d[1]],D[d[2]]),this._frameToBuffer(b,7,o,g[d[0]],g[d[1]],g[d[2]])}else b.set([a.x,a.y,a.z,0,0,0,1,o.x,o.y,o.z,0,0,0,1]);return}switch(e.type){case _.PhysicsConstraintType.HINGE:case _.PhysicsConstraintType.BALL_AND_SOCKET:this._frameToBuffer(b,0,a,h,p.Vector3.Cross(r,h),r),this._frameToBuffer(b,7,o,c,p.Vector3.Cross(l,c),l);break;case _.PhysicsConstraintType.PRISMATIC:case _.PhysicsConstraintType.SLIDER:this._frameToBuffer(b,0,a,r,h,u),this._frameToBuffer(b,7,o,l,c,m);break;case _.PhysicsConstraintType.LOCK:{this._b3._bx_Body_GetTransform(s.slot);let d=this._scratch(),D=this._tmpQuat[0];D.set(d[3],d[4],d[5],d[6]),this._b3._bx_Body_GetTransform(i.slot),d=this._scratch();let g=this._tmpQuat[1];g.set(d[3],d[4],d[5],d[6]);let y=g.invert().multiply(D).normalize();b.set([a.x,a.y,a.z,0,0,0,1,o.x,o.y,o.z,y.x,y.y,y.z,y.w]);break}default:b.set([a.x,a.y,a.z,0,0,0,1,o.x,o.y,o.z,0,0,0,1]);break}}_createJoint(e,t,s){this._scratch().set(e.frames);let i=this._b3._bx_CreateJoint(this._worldSlot,e.jointType,t.slot,s.slot,e.collisions?1:0,e.length);return i?(this._applyAxisState(e,i,t,s),i):(I.Logger.Warn("Box3DPlugin: joint creation failed."),0)}_readSixDofLimits(e,t){for(let s of t??[]){let i=this._axisState(e,s.axis);s.minLimit===0&&s.maxLimit===0?(i.mode=_.PhysicsConstraintAxisLimitMode.LOCKED,i.min=0,i.max=0):(s.minLimit!==void 0||s.maxLimit!==void 0)&&(i.mode=_.PhysicsConstraintAxisLimitMode.LIMITED,i.min=s.minLimit??-1/0,i.max=s.maxLimit??1/0),i.stiffness=s.stiffness??0,i.damping=s.damping??0}}_planSixDof(e){let t=_.PhysicsConstraintAxis,s=_.PhysicsConstraintAxisLimitMode,i=y=>e.axes.get(y)?.mode??s.FREE,n=y=>{let f=e.axes.get(y);return f.mode===s.LOCKED?[0,0]:[Math.min(f.min,f.max),Math.max(f.min,f.max)]},a=(y,f)=>Math.max(-f,Math.min(f,y)),o=.99*Math.PI,r=1e5,l={jointType:0,basis:[0,1,2],primaryAxis:null,coneAngle:-1,twist:null,limit:null,spring:!1,stiffness:0,damping:0,angularStiffness:!1};for(let[y,f]of e.axes)(f.stiffness>0||f.damping>0)&&f.stiffness>=l.stiffness&&(l.stiffness=f.stiffness,l.damping=f.damping,l.angularStiffness=y===t.ANGULAR_X||y===t.ANGULAR_Y||y===t.ANGULAR_Z);let h=[t.LINEAR_X,t.LINEAR_Y,t.LINEAR_Z],c=[t.ANGULAR_X,t.ANGULAR_Y,t.ANGULAR_Z],u=h.filter(y=>i(y)===s.LOCKED).length,m=h.filter(y=>i(y)===s.FREE).length,b=c.filter(y=>i(y)!==s.LOCKED),d=c.filter(y=>i(y)===s.FREE).length;if(i(t.LINEAR_DISTANCE)!==s.FREE){if(m===3&&d===3){let[y,f]=n(t.LINEAR_DISTANCE);return l.jointType=4,l.basis=null,l.primaryAxis=t.LINEAR_DISTANCE,l.limit=[Math.min(Math.max(0,y),r),Math.min(Math.max(0,f),r)],l.spring=l.stiffness>0&&Math.abs(f-y)<1e-6&&isFinite(y),l}this._warnOnce("sixdof-distance","SIX_DOF: LINEAR_DISTANCE combined with other constrained axes is not supported with Box3D, the distance limit is ignored.")}let g=u===3;if(!g&&u!==2&&m===0&&(this._warnOnce("sixdof-linear-limited","SIX_DOF: two or more limited linear axes are treated as locked with Box3D."),g=!0),g){if(b.length===0)return l;if(b.length===1){let f=b[0];if(l.jointType=2,l.basis=[[1,2,0],[2,0,1],[0,1,2]][c.indexOf(f)],l.primaryAxis=f,i(f)===s.LIMITED){let[S,C]=n(f);l.limit=[a(S,o),a(C,o)]}return l}if(l.jointType=1,l.basis=[1,2,0],i(t.ANGULAR_X)!==s.FREE){let[f,S]=n(t.ANGULAR_X);l.twist=[a(f,o),a(S,o)]}let y=[i(t.ANGULAR_Y),i(t.ANGULAR_Z)];if(y.some(f=>f!==s.FREE)){let f=[],S=!1;for(let P of[t.ANGULAR_Y,t.ANGULAR_Z]){if(i(P)===s.FREE)continue;let[v,T]=n(P);f.push(Math.max(Math.abs(v),Math.abs(T))),S||(S=Math.abs(v+T)>1e-4)}let C=Math.max(...f);isFinite(C)&&((y.includes(s.FREE)||Math.abs(f[0]-f[1])>1e-4||S)&&this._warnOnce("sixdof-cone","SIX_DOF: Box3D has one symmetric swing cone, ANGULAR_Y and ANGULAR_Z use the larger of their ranges."),C>Math.PI/2&&this._warnOnce("sixdof-cone-90","SIX_DOF: Box3D cone limits are at most 90 degrees, larger swing ranges are clamped."),l.coneAngle=Math.min(C,Math.PI/2))}return l}if(u===2){let y=h.find(f=>i(f)!==s.LOCKED);if(l.jointType=3,l.basis=[[0,1,2],[1,2,0],[2,0,1]][h.indexOf(y)],l.primaryAxis=y,i(y)===s.LIMITED){let[f,S]=n(y);l.limit=[a(f,r),a(S,r)]}return b.length&&this._warnOnce("sixdof-prismatic","SIX_DOF: a sliding axis with rotation is not supported with Box3D, rotation is locked."),l}return l.jointType=5,l.basis=null,(m!==3||d!==3)&&this._warnOnce("sixdof-unsupported","SIX_DOF: this combination of free and limited axes is not supported with Box3D, the bodies are left unconstrained."),l}_springToHertz(e,t,s,i,n){let a=h=>{if(h.motionType!==_.PhysicsMotionType.DYNAMIC)return 0;this._b3._bx_Body_GetMassData(h.slot);let c=this._scratch(),u=s?(c[4]+c[5]+c[6])/3:c[0];return u>0?1/u:0},o=a(i)+a(n),r=o>0?1/o:1,l=Math.max(e,0);return{hertz:Math.sqrt(l/r)/(2*Math.PI),dampingRatio:l>0?t/(2*Math.sqrt(l*r)):1}}initConstraint(e,t,s,i,n){let a=e.type,o=e.options;if(!a||!o){I.Logger.Warn("No constraint type or options. Constraint is invalid.");return}if(t._pluginDataInstances.length>0&&i===void 0||s._pluginDataInstances.length>0&&n===void 0){I.Logger.Warn("Body is instanced but no instance index was specified. Constraint will not be applied.");return}let r=!e._pluginData,l=e._pluginData??new Z;switch(e._pluginData=l,l.type=a,r&&(l.collisions=!!o.collision),a){case _.PhysicsConstraintType.BALL_AND_SOCKET:l.jointType=1;break;case _.PhysicsConstraintType.HINGE:l.jointType=2;break;case _.PhysicsConstraintType.PRISMATIC:case _.PhysicsConstraintType.SLIDER:l.jointType=3;break;case _.PhysicsConstraintType.LOCK:l.jointType=0;break;case _.PhysicsConstraintType.DISTANCE:l.jointType=4;break;case _.PhysicsConstraintType.SIX_DOF:r&&this._readSixDofLimits(l,e.limits),l.plan=this._planSixDof(l),l.jointType=l.plan.jointType;break;default:I.Logger.Warn("Box3DPlugin: unknown constraint type "+a);return}let h=this._getPluginReference(t,i),c=this._getPluginReference(s,n);this._buildFrames(l,e,h,c),this._updateJointLength(l,o.maxDistance,h,c);let u=l.enabled?this._createJoint(l,h,c):0;l.joints.push(u),l.pairs.push({parent:t,parentIndex:i??0,child:s,childIndex:n??0,parentData:h,childData:c})}_updateJointLength(e,t,s,i){if(e.type===_.PhysicsConstraintType.DISTANCE)e.length=t??0;else if(e.plan?.jointType===4&&e.plan.limit)e.length=e.plan.limit[0];else return;e.length<=0&&(e.length=Math.max(.01,this._currentPivotDistance(e,s,i)))}_currentPivotDistance(e,t,s){let i=e.frames,n=this._tmpVec3[0],a=this._tmpVec3[1];this._b3._bx_Body_GetTransform(t.slot);let o=this._scratch();return this._tmpQuat[0].set(o[3],o[4],o[5],o[6]),n.set(i[0],i[1],i[2]).applyRotationQuaternionInPlace(this._tmpQuat[0]).addInPlaceFromFloats(o[0],o[1],o[2]),this._b3._bx_Body_GetTransform(s.slot),o=this._scratch(),this._tmpQuat[0].set(o[3],o[4],o[5],o[6]),a.set(i[7],i[8],i[9]).applyRotationQuaternionInPlace(this._tmpQuat[0]).addInPlaceFromFloats(o[0],o[1],o[2]),p.Vector3.Distance(n,a)}setEnabled(e,t){let s=e._pluginData;!s||s.enabled===t||(s.enabled=t,this._recreateJoints(s))}_destroyJoint(e){this._motorJoints.delete(e),this._b3._bx_DestroyJoint(e)}_recreateJoints(e){for(let t=0;t<e.pairs.length;t++){e.joints[t]&&this._destroyJoint(e.joints[t]);let s=e.pairs[t];e.joints[t]=e.enabled&&s.parentData.slot&&s.childData.slot?this._createJoint(e,s.parentData,s.childData):0}}getEnabled(e){return e._pluginData?.enabled??!1}setCollisionsEnabled(e,t){let s=e._pluginData;s.collisions=t;for(let i of s.joints)i&&this._b3._bx_Joint_SetCollideConnected(i,t?1:0)}getCollisionsEnabled(e){return e._pluginData?.collisions??!1}_primaryAxis(e){switch(e.type){case _.PhysicsConstraintType.HINGE:return _.PhysicsConstraintAxis.ANGULAR_X;case _.PhysicsConstraintType.PRISMATIC:case _.PhysicsConstraintType.SLIDER:return _.PhysicsConstraintAxis.LINEAR_X;case _.PhysicsConstraintType.DISTANCE:return _.PhysicsConstraintAxis.LINEAR_DISTANCE;case _.PhysicsConstraintType.BALL_AND_SOCKET:return _.PhysicsConstraintAxis.ANGULAR_Y;case _.PhysicsConstraintType.SIX_DOF:return e.plan?.primaryAxis??null;default:return null}}_isAngularAxis(e){return e===_.PhysicsConstraintAxis.ANGULAR_X||e===_.PhysicsConstraintAxis.ANGULAR_Y||e===_.PhysicsConstraintAxis.ANGULAR_Z}_isPrimaryAxis(e,t){return e.type===_.PhysicsConstraintType.BALL_AND_SOCKET||e.plan?.jointType===1?this._isAngularAxis(t):t===this._primaryAxis(e)}_axisState(e,t){let s=e.axes.get(t);return s||(s={mode:_.PhysicsConstraintAxisLimitMode.FREE,min:0,max:0,motor:_.PhysicsConstraintMotorType.NONE,target:0,maxForce:0,friction:0,stiffness:0,damping:0},e.axes.set(t,s)),s}_applyAxisState(e,t,s,i){let n=this._b3;if(e.plan){this._applySixDofPlan(e,t,s,i),n._bx_Joint_WakeBodies(t);return}if(this._primaryAxis(e)!==null){for(let[o,r]of e.axes){if(!this._isPrimaryAxis(e,o))continue;if(e.type===_.PhysicsConstraintType.BALL_AND_SOCKET&&o===_.PhysicsConstraintAxis.ANGULAR_X){n._bx_Joint_SetTwistLimits(t,r.mode===_.PhysicsConstraintAxisLimitMode.FREE?0:1,r.min,r.max);continue}let l=r.mode!==_.PhysicsConstraintAxisLimitMode.FREE;if(l){let h=r.mode===_.PhysicsConstraintAxisLimitMode.LOCKED?0:r.min,c=r.mode===_.PhysicsConstraintAxisLimitMode.LOCKED?0:r.max;n._bx_Joint_SetLimits(t,h,c)}n._bx_Joint_EnableLimit(t,l?1:0),e.type!==_.PhysicsConstraintType.BALL_AND_SOCKET&&this._applyMotor(t,r)}e.type===_.PhysicsConstraintType.BALL_AND_SOCKET&&this._applySphericalMotor(e,t),n._bx_Joint_WakeBodies(t)}}_applySphericalMotor(e,t){let s=this._b3,i=e.axes.get(_.PhysicsConstraintAxis.ANGULAR_X),n=e.axes.get(_.PhysicsConstraintAxis.ANGULAR_Y),a=e.axes.get(_.PhysicsConstraintAxis.ANGULAR_Z),o=[i,n,a],r=m=>m?.motor===_.PhysicsConstraintMotorType.VELOCITY?m.target:0,l=o.some(m=>m?.motor===_.PhysicsConstraintMotorType.VELOCITY),h=o.some(m=>m?.motor===_.PhysicsConstraintMotorType.POSITION),c=Math.max(...o.map(m=>m?.motor===_.PhysicsConstraintMotorType.VELOCITY?m.maxForce:0));s._bx_Joint_SetSphericalMotor(t,l?1:0,r(n),r(a),r(i),c);let u=r(n)!==0||r(a)!==0||r(i)!==0;if(l&&u?this._motorJoints.add(t):this._motorJoints.delete(t),s._bx_Joint_EnableSpring(t,h?1:0),h){let m=D=>D?.motor===_.PhysicsConstraintMotorType.POSITION?D.target:0,b=this._tmpQuat[0];p.Quaternion.RotationYawPitchRollToRef(0,0,m(i),b);let d=this._tmpQuat[1];p.Quaternion.RotationYawPitchRollToRef(m(a),m(n),0,d),b.multiplyInPlace(d),s._bx_Joint_SetSpring(t,5,1),s._bx_Joint_SetSphericalTarget(t,b.x,b.y,b.z,b.w)}}_applyMotor(e,t){let s=this._b3;switch(t.motor){case _.PhysicsConstraintMotorType.VELOCITY:s._bx_Joint_EnableSpring(e,0),s._bx_Joint_EnableMotor(e,1),s._bx_Joint_SetMotorSpeed(e,t.target),s._bx_Joint_SetMaxMotorForce(e,t.maxForce);break;case _.PhysicsConstraintMotorType.POSITION:s._bx_Joint_EnableMotor(e,0),s._bx_Joint_EnableSpring(e,1),s._bx_Joint_SetSpring(e,5,1),s._bx_Joint_SetTarget(e,t.target);break;default:s._bx_Joint_EnableMotor(e,0),s._bx_Joint_EnableSpring(e,0);break}}_applySixDofPlan(e,t,s,i){let n=this._b3,a=e.plan;switch(a.jointType){case 1:a.coneAngle>=0&&n._bx_Joint_SetLimits(t,-a.coneAngle,a.coneAngle),n._bx_Joint_EnableLimit(t,a.coneAngle>=0?1:0),n._bx_Joint_SetTwistLimits(t,a.twist?1:0,a.twist?a.twist[0]:0,a.twist?a.twist[1]:0);break;case 2:case 3:a.limit&&n._bx_Joint_SetLimits(t,a.limit[0],a.limit[1]),n._bx_Joint_EnableLimit(t,a.limit?1:0);break;case 4:if(a.spring){let o=this._springToHertz(a.stiffness,a.damping,!1,s,i);n._bx_Joint_EnableLimit(t,0),n._bx_Joint_EnableSpring(t,1),n._bx_Joint_SetSpring(t,o.hertz,o.dampingRatio),n._bx_Joint_SetTarget(t,e.length)}else n._bx_Joint_SetLimits(t,a.limit[0],a.limit[1]),n._bx_Joint_EnableLimit(t,1),n._bx_Joint_EnableSpring(t,1),n._bx_Joint_SetSpring(t,0,0);break;default:break}if(a.stiffness>0&&!a.spring){this._warnOnce("sixdof-softness","SIX_DOF: limit stiffness and damping are approximated with Box3D's per joint constraint softness, which applies to every axis of the joint.");let o=this._springToHertz(a.stiffness,a.damping,a.angularStiffness,s,i);n._bx_Joint_SetConstraintTuning(t,o.hertz,o.dampingRatio)}if(a.jointType===1)this._applySphericalMotor(e,t);else if(a.primaryAxis!==null&&a.jointType!==4){let o=e.axes.get(a.primaryAxis);o&&this._applyMotor(t,o)}}_setAxis(e,t,s){let i=e._pluginData;if(!i)return;let n=this._axisState(i,t),a={motor:n.motor,target:n.target,maxForce:n.maxForce};if(s(n),i.plan){let o=this._planSixDof(i),r=o.jointType!==i.plan.jointType||String(o.basis)!==String(i.plan.basis);i.plan=o,i.jointType=o.jointType,(a.motor!==n.motor||a.target!==n.target||a.maxForce!==n.maxForce)&&n.motor!==_.PhysicsConstraintMotorType.NONE&&!this._isPrimaryAxis(i,t)&&this._warnOnce(`axis-motor-${t}`,`SIX_DOF: a motor on axis ${t} has no effect with the Box3D joint this constraint maps to.`);let h=i.pairs[0];if(h&&this._updateJointLength(i,e.options.maxDistance,h.parentData,h.childData),r){h&&this._buildFrames(i,e,h.parentData,h.childData),this._recreateJoints(i);return}}else if(!this._isPrimaryAxis(i,t)){this._warnOnce(`axis-${i.type}-${t}`,`axis ${t} is not configurable on constraint type ${i.type} with Box3D; the value is stored but has no effect.`);return}for(let o=0;o<i.joints.length;o++)i.joints[o]&&this._applyAxisState(i,i.joints[o],i.pairs[o].parentData,i.pairs[o].childData)}setAxisFriction(e,t,s){let i=e._pluginData;i&&(this._axisState(i,t).friction=s)}getAxisFriction(e,t){return e._pluginData?.axes.get(t)?.friction??null}setAxisMode(e,t,s){this._setAxis(e,t,i=>i.mode=s)}getAxisMode(e,t){return e._pluginData?.axes.get(t)?.mode??null}setAxisMinLimit(e,t,s){this._setAxis(e,t,i=>{i.min=s,i.mode===_.PhysicsConstraintAxisLimitMode.FREE&&(i.mode=_.PhysicsConstraintAxisLimitMode.LIMITED)})}getAxisMinLimit(e,t){return e._pluginData?.axes.get(t)?.min??null}setAxisMaxLimit(e,t,s){this._setAxis(e,t,i=>{i.max=s,i.mode===_.PhysicsConstraintAxisLimitMode.FREE&&(i.mode=_.PhysicsConstraintAxisLimitMode.LIMITED)})}getAxisMaxLimit(e,t){return e._pluginData?.axes.get(t)?.max??null}setAxisMotorType(e,t,s){this._setAxis(e,t,i=>i.motor=s)}getAxisMotorType(e,t){return e._pluginData?.axes.get(t)?.motor??null}setAxisMotorTarget(e,t,s){this._setAxis(e,t,i=>i.target=s)}getAxisMotorTarget(e,t){return e._pluginData?.axes.get(t)?.target??null}setAxisMotorMaxForce(e,t,s){this._setAxis(e,t,i=>i.maxForce=s)}getAxisMotorMaxForce(e,t){return e._pluginData?.axes.get(t)?.maxForce??null}disposeConstraint(e){let t=e._pluginData;if(t){for(let s of t.joints)s&&this._destroyJoint(s);t.joints.length=0,t.pairs.length=0}}getBodiesUsingConstraint(e){let t=e._pluginData;return t?t.pairs.map(s=>({parentBody:s.parent,parentBodyIndex:s.parentIndex,childBody:s.child,childBodyIndex:s.childIndex})):[]}addConstraint(e,t,s,i,n){this.initConstraint(s,e,t,i,n)}explode(e,t,s,i=0){this._b3._bx_World_Explode(this._worldSlot,e.x,e.y,e.z,t,i,s)}setShapeFilterGroup(e,t){let s=e._pluginData;this._b3._bx_ShapeDesc_SetGroup(s.slot,t|0),this._syncShapeUsers(s,1)}setShapeRollingResistance(e,t){let s=e._pluginData;this._b3._bx_ShapeDesc_SetRollingResistance(s.slot,t),this._syncShapeUsers(s,2)}setAllowFastRotation(e,t,s){this._applyToBodyOrInstances(e,i=>this._b3._bx_Body_AllowFastRotation(i.slot,t?1:0),s)}createWheelJoint(e,t,s){let i=this._scratch(),n=(s.axisA??p.Vector3.UpReadOnly).normalizeToNew(),a=(s.axleA??p.Vector3.Forward()).normalizeToNew();a.subtractInPlace(n.scale(p.Vector3.Dot(n,a))).normalize(),this._frameToBuffer(i,0,s.pivotA,n,p.Vector3.Cross(a,n),a);let o=s.pivotB??p.Vector3.ZeroReadOnly;i[7]=o.x,i[8]=o.y,i[9]=o.z;let r=this._getPluginReference(e),l=this._getPluginReference(t);this._b3._bx_ComputeAlignedFrameB(r.slot,l.slot);let h=s.suspensionLimits??[-.2,.2],c=s.steeringLimits??[-Math.PI/4,Math.PI/4];i.set([1,s.suspensionHertz??4,s.suspensionDampingRatio??.7,1,h[0],h[1],s.enableSpinMotor?1:0,s.maxSpinTorque??5,0,s.enableSteering?1:0,s.steeringHertz??10,s.steeringDampingRatio??.7,0,s.maxSteeringTorque??5,1,c[0],c[1]],14);let u=this._b3._bx_CreateJoint(this._worldSlot,6,r.slot,l.slot,0,0);if(!u)throw new Error("Box3DPlugin: wheel joint creation failed");return new L(this,u)}createParallelJoint(e,t,s,i,n=1,a=1,o=34e37){let r=this._scratch(),l=s.normalizeToNew(),h=l.getNormalToRef(new p.Vector3);this._frameToBuffer(r,0,p.Vector3.ZeroReadOnly,h,p.Vector3.Cross(l,h),l);let c=i.normalizeToNew(),u=c.getNormalToRef(new p.Vector3);return this._frameToBuffer(r,7,p.Vector3.ZeroReadOnly,u,p.Vector3.Cross(c,u),c),r.set([n,a,o],14),this._b3._bx_CreateJoint(this._worldSlot,7,this._getPluginReference(e).slot,this._getPluginReference(t).slot,1,0)}disposeExtraJoint(e){this._destroyExtraJoint(e)}_destroyExtraJoint(e){e&&this._destroyJoint(e)}_wheelCall(e,t,...s){t&&this._b3[e](t,...s)}raycast(e,t,s,i){let n=Array.isArray(s)?s:[s];for(let b of n)b.reset(e,t);let a=(i?.membership??-1)>>>0,o=(i?.collideWith??-1)>>>0,r=i?.ignoreBody?i.ignoreBody._pluginData?.slot??0:0,l=n.length===1,h=this._b3._bx_World_CastRay(this._worldSlot,e.x,e.y,e.z,t.x-e.x,t.y-e.y,t.z-e.z,a,o,r,i?.shouldHitTriggers?1:0,l?1:0);if(h<=0)return;let c=new Float32Array(this._b3.HEAPF32.buffer,this._b3._bx_RayHitsPtr(),h*V),u=[];for(let b=0;b<h;b++)u.push(b);if(u.sort((b,d)=>c[b*V+6]-c[d*V+6]),!n.length)for(let b=0;b<h;b++){let d=new ve.PhysicsRaycastResult;d.reset(e,t),n.push(d)}let m=Math.min(h,n.length);for(let b=0;b<m;b++){let d=u[b]*V,D=n[b],g=this._bodies[c[d+7]];D.body=g?.body,D.bodyIndex=g?.index,D.shape=g?.body.shape??void 0,D.setHitData({x:c[d+3],y:c[d+4],z:c[d+5]},{x:c[d],y:c[d+1],z:c[d+2]},c[d+9]),D.calculateHitDistance()}}_readEvents(e,t,s,i){let n=new Float32Array(this._b3.HEAPF32.buffer,e,t*s).slice(),a=new Array(t*2);for(let o=0;o<t;o++)a[o*2]=this._bodies[n[o*s+i]],a[o*2+1]=this._bodies[n[o*s+i+1]];return{records:n,refs:a}}_notifyCollisions(){let e=this._b3._bx_World_GetContactEvents(this._worldSlot);if(!e)return;let{records:t,refs:s}=this._readEvents(this._b3._bx_ContactEventsPtr(),e,Ce,3);for(let i=0;i<e;i++){let n=i*Ce,a=t[n],o=s[i*2],r=s[i*2+1];if(!o||!r||!o.data.slot||!r.data.slot)continue;let l=a===0?1:a===1?4:2;if(((o.data.eventMask|r.data.eventMask)&l)===0)continue;if(a===1){let b={collider:o.body,colliderIndex:o.index,collidedAgainst:r.body,collidedAgainstIndex:r.index,type:_.PhysicsEventType.COLLISION_FINISHED};this.onCollisionEndedObservable.notifyObservers(b),this._bodyCollisionEndedObservable.get(o.data.slot)?.notifyObservers(b);let d=this._bodyCollisionEndedObservable.get(r.data.slot);d&&d.notifyObservers({...b,collider:r.body,colliderIndex:r.index,collidedAgainst:o.body,collidedAgainstIndex:o.index});continue}let h=a===0?_.PhysicsEventType.COLLISION_STARTED:_.PhysicsEventType.COLLISION_CONTINUED,c=new p.Vector3(t[n+5],t[n+6],t[n+7]),u=new p.Vector3(t[n+8],t[n+9],t[n+10]),m={collider:o.body,colliderIndex:o.index,collidedAgainst:r.body,collidedAgainstIndex:r.index,type:h,point:c,normal:u,distance:0,impulse:t[n+11]};if(this.onCollisionObservable.notifyObservers(m),this._bodyCollisionObservable.size){this._bodyCollisionObservable.get(o.data.slot)?.notifyObservers(m);let b=this._bodyCollisionObservable.get(r.data.slot);b&&b.notifyObservers({...m,collider:r.body,colliderIndex:r.index,collidedAgainst:o.body,collidedAgainstIndex:o.index,normal:u?u.negate():null})}}}_notifyTriggers(){let e=this._b3._bx_World_GetSensorEvents(this._worldSlot);if(!e||!this.onTriggerCollisionObservable.hasObservers())return;let{records:t,refs:s}=this._readEvents(this._b3._bx_SensorEventsPtr(),e,Pe,3);for(let i=0;i<e;i++){let n=i*Pe,a=s[i*2],o=s[i*2+1];!a||!o||!a.data.slot||!o.data.slot||this.onTriggerCollisionObservable.notifyObservers({collider:a.body,colliderIndex:a.index,collidedAgainst:o.body,collidedAgainstIndex:o.index,type:t[n]===0?_.PhysicsEventType.TRIGGER_ENTERED:_.PhysicsEventType.TRIGGER_EXITED})}}dispose(){this._motorJoints.clear(),this.onCollisionObservable.clear(),this.onCollisionEndedObservable.clear(),this.onTriggerCollisionObservable.clear(),this._bodyCollisionObservable.clear(),this._bodyCollisionEndedObservable.clear();for(let e of this._shapes)e&&this._b3._bx_ShapeDesc_Destroy(e.slot);this._shapes.length=0,this._bodies.length=0,this._worldSlot&&(this._b3._bx_DestroyWorld(this._worldSlot),this._worldSlot=0)}};te();function U(){if(typeof SharedArrayBuffer>"u")return!1;let x=globalThis.crossOriginIsolated;return x===void 0||x}async function Fe(x={}){let{threads:e=!1,doublePrecision:t=!1,...s}=x;if(e==="auto"?U():e){if(e===!0&&!U())throw new Error('babylon-box3d: the threaded build needs SharedArrayBuffer, which this page does not have. Serve it with the Cross-Origin-Opener-Policy: same-origin and Cross-Origin-Embedder-Policy: require-corp headers, or use LoadBox3D({ threads: "auto" }) to fall back to the single threaded build.');return(t?await Promise.resolve().then(()=>(we(),Ee)):await Promise.resolve().then(()=>(Oe(),Le))).default(s)}return(t?await Promise.resolve().then(()=>(Ne(),Re)):await Promise.resolve().then(()=>(te(),Me))).default(s)}return Ye(tt);})();
|
|
3
3
|
//# sourceMappingURL=babylon.box3d.min.js.map
|