eaglercraft-1.8/sources/wasm-gc-teavm/js/eagruntime_entrypoint.js

100 lines
4.1 KiB
JavaScript

/*
* Copyright (c) 2024 lax1dude. All Rights Reserved.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*/
async function entryPoint() {
try {
eaglercraftXOpts = self.__eaglercraftXLoaderContext.getEaglercraftXOpts();
eagRuntimeJSURL = self.__eaglercraftXLoaderContext.getEagRuntimeJSURL();
const classesWASM = self.__eaglercraftXLoaderContext.getClassesWASMURL();
const classesDeobfWASM = self.__eaglercraftXLoaderContext.getClassesDeobfWASMURL();
const classesTEADBGURL = self.__eaglercraftXLoaderContext.getClassesTEADBGURL();
epkFileList = self.__eaglercraftXLoaderContext.getEPKFiles();
rootElement = self.__eaglercraftXLoaderContext.getRootElement();
splashURL = self.__eaglercraftXLoaderContext.getImageURL(0);
pressAnyKeyURL = self.__eaglercraftXLoaderContext.getImageURL(1);
crashURL = self.__eaglercraftXLoaderContext.getImageURL(2);
faviconURL = self.__eaglercraftXLoaderContext.getImageURL(3);
const args = self.__eaglercraftXLoaderContext.getMainArgs();
delete self.__eaglercraftXLoaderContext;
const isWorker = args[0] === "_worker_process_";
if(!isWorker) {
if(!await initializeContext()) {
return;
}
}else {
setLoggerContextName("worker");
await initializeContextWorker();
}
eagInfo("Loading EaglercraftX WASM GC binary...");
const teavm = await wasmGC.load(classesWASM, {
stackDeobfuscator: {
enabled: true,
path: classesDeobfWASM,
infoLocation: "external",
externalInfoPath: classesTEADBGURL
},
installImports: function(/** {Object} */ importObj) {
importObj[WASMGCBufferAllocatorName] = eagruntimeImpl.WASMGCBufferAllocator;
importObj[platfApplicationName] = eagruntimeImpl.platformApplication;
importObj[platfAssetsName] = eagruntimeImpl.platformAssets;
importObj[platfAudioName] = eagruntimeImpl.platformAudio;
importObj[platfFilesystemName] = eagruntimeImpl.platformFilesystem;
importObj[platfInputName] = eagruntimeImpl.platformInput;
importObj[platfNetworkingName] = eagruntimeImpl.platformNetworking;
importObj[platfOpenGLName] = eagruntimeImpl.platformOpenGL;
importObj[platfRuntimeName] = eagruntimeImpl.platformRuntime;
importObj[platfScreenRecordName] = eagruntimeImpl.platformScreenRecord;
importObj[platfVoiceClientName] = eagruntimeImpl.platformVoiceClient;
importObj[platfWebRTCName] = eagruntimeImpl.platformWebRTC;
importObj[platfWebViewName] = eagruntimeImpl.platformWebView;
importObj[clientPlatfSPName] = eagruntimeImpl.clientPlatformSingleplayer;
importObj[serverPlatfSPName] = eagruntimeImpl.serverPlatformSingleplayer;
importObj["teavm"]["notifyHeapResized"] = function() {
handleMemoryResized(teavm.exports.memory);
};
}
});
classesWASMModule = teavm.modules.classes;
classesDeobfWASMModule = teavm.modules.deobfuscator;
classesTEADBG = teavm.exports.debugInfo;
handleMemoryResized(teavm.exports.memory);
deobfuscatorFunc = /** @type {function(Array<number>):Array<Object>|null} */ (teavm.exports["deobfuscator"]);
eagInfo("Calling entry point with args: {}", JSON.stringify(args));
try {
await WebAssembly.promising(teavm.exports["main"]["__impl"])(args);
}catch(ex) {
teavm.exports["main"]["__rethrow"](ex);
}finally {
eagWarn("Main function has returned!");
}
}catch(ex) {
displayUncaughtCrashReport(ex);
}
}
if(typeof self.__eaglercraftXLoaderContext === "object") {
self.__eaglercraftXLoaderContext.runMain(entryPoint);
}else {
console.error("???");
}