86 lines
2.4 KiB
JavaScript
86 lines
2.4 KiB
JavaScript
|
|
import { RomPatcher } from './RomPatcher.js';
|
||
|
|
|
||
|
|
window.PlayOnline = function( initialPatches = {}, emulatorJsConfig = {} ){
|
||
|
|
|
||
|
|
const parent = RomPatcher( initialPatches );
|
||
|
|
|
||
|
|
return {
|
||
|
|
|
||
|
|
...parent,
|
||
|
|
|
||
|
|
currentBlobUrl: null,
|
||
|
|
emuConfig: emulatorJsConfig,
|
||
|
|
launchGame: false,
|
||
|
|
|
||
|
|
init(){
|
||
|
|
parent.init({
|
||
|
|
language: 'en',
|
||
|
|
requireValidation: false,
|
||
|
|
onpatch: this.handlePatchedRomFile.bind(this),
|
||
|
|
});
|
||
|
|
},
|
||
|
|
|
||
|
|
cleanEmulatorJsVars() {
|
||
|
|
['EJS_player','EJS_core','EJS_gameUrl','EJS_pathtodata',
|
||
|
|
'EJS_startOnLoaded','EJS_threads']
|
||
|
|
.forEach(k => delete window[k]);
|
||
|
|
},
|
||
|
|
|
||
|
|
prepareEmulatorJs(){
|
||
|
|
window.EJS_player = '#game';
|
||
|
|
window.EJS_core = this.emuConfig.core;
|
||
|
|
window.EJS_gameUrl = this.currentBlobUrl;
|
||
|
|
window.EJS_pathtodata = "https://cdn.emulatorjs.org/stable/data/";
|
||
|
|
window.EJS_startOnLoaded = true;
|
||
|
|
window.EJS_threads = this.emuConfig.threads ?? false;
|
||
|
|
},
|
||
|
|
|
||
|
|
launchEmulatorJs(){
|
||
|
|
if(!this.currentBlobUrl){
|
||
|
|
console.error("EmulatorJS: Empty Blob field");
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
console.log(this.currentBlobUrl);
|
||
|
|
|
||
|
|
this.cleanEmulatorJsVars();
|
||
|
|
this.prepareEmulatorJs();
|
||
|
|
|
||
|
|
const script = document.createElement('script');
|
||
|
|
script.id = 'ejs-loader';
|
||
|
|
script.src = 'https://cdn.emulatorjs.org/stable/data/loader.js';
|
||
|
|
document.body.appendChild(script);
|
||
|
|
|
||
|
|
this.launchGame = true;
|
||
|
|
|
||
|
|
},
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @param {BinFile} patchedRomFile
|
||
|
|
*/
|
||
|
|
handlePatchedRomFile( patchedRomFile ){
|
||
|
|
|
||
|
|
patchedRomFile.save = function(){
|
||
|
|
// Remove save.
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
const u8 = patchedRomFile._u8array;
|
||
|
|
if( !u8 || u8.byteLength === 0 ){
|
||
|
|
console.error("Patch error: Empty ROM file");
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if(this.currentBlobUrl){
|
||
|
|
URL.revokeObjectURL(this.currentBlobUrl);
|
||
|
|
}
|
||
|
|
|
||
|
|
const blob = new Blob([u8], { type: 'application/octet-stream' });
|
||
|
|
this.currentBlobUrl = URL.createObjectURL(blob);
|
||
|
|
|
||
|
|
this.launchEmulatorJs()
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|