2020-11-09 16:41:55 -05:00
|
|
|
/* global VirtualMachine, ScratchStorage, ScratchSVGRenderer */
|
2020-03-08 08:12:40 -04:00
|
|
|
/* eslint-env browser */
|
|
|
|
|
|
|
|
// Wait for all SVG skins to be loaded.
|
|
|
|
// TODO: this is extremely janky and should be removed once vm.loadProject waits for SVG skins to load
|
2020-05-07 16:08:28 -04:00
|
|
|
// https://github.com/LLK/scratch-render/issues/563
|
2020-03-08 08:12:40 -04:00
|
|
|
window.waitForSVGSkinLoad = renderer => new Promise(resolve => {
|
|
|
|
// eslint-disable-next-line prefer-const
|
|
|
|
let interval;
|
|
|
|
|
|
|
|
const waitInner = () => {
|
|
|
|
let numSVGSkins = 0;
|
|
|
|
let numLoadedSVGSkins = 0;
|
|
|
|
for (const skin of renderer._allSkins) {
|
|
|
|
if (skin.constructor.name !== 'SVGSkin') continue;
|
|
|
|
numSVGSkins++;
|
2021-01-07 20:48:13 -05:00
|
|
|
if (skin._svgImage.complete) numLoadedSVGSkins++;
|
2020-03-08 08:12:40 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
if (numSVGSkins === numLoadedSVGSkins) {
|
|
|
|
clearInterval(interval);
|
|
|
|
resolve();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
interval = setInterval(waitInner, 1);
|
|
|
|
});
|
|
|
|
|
|
|
|
window.loadFileInputIntoVM = (fileInput, vm, render) => {
|
|
|
|
const reader = new FileReader();
|
|
|
|
return new Promise(resolve => {
|
|
|
|
reader.onload = () => {
|
|
|
|
vm.start();
|
|
|
|
vm.loadProject(reader.result)
|
|
|
|
.then(() => window.waitForSVGSkinLoad(render))
|
|
|
|
.then(() => {
|
|
|
|
resolve();
|
|
|
|
});
|
|
|
|
};
|
|
|
|
reader.readAsArrayBuffer(fileInput.files[0]);
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
window.initVM = render => {
|
|
|
|
const vm = new VirtualMachine();
|
2024-12-20 10:29:22 -08:00
|
|
|
const storage = new ScratchStorage.ScratchStorage();
|
2020-03-08 08:12:40 -04:00
|
|
|
|
|
|
|
vm.attachStorage(storage);
|
|
|
|
vm.attachRenderer(render);
|
2021-01-07 20:48:13 -05:00
|
|
|
vm.attachV2SVGAdapter(ScratchSVGRenderer.V2SVGAdapter);
|
2020-03-08 08:12:40 -04:00
|
|
|
vm.attachV2BitmapAdapter(new ScratchSVGRenderer.BitmapAdapter());
|
|
|
|
|
|
|
|
return vm;
|
|
|
|
};
|