diff --git a/src/packager/packager.js b/src/packager/packager.js
index d184648..81fe4b9 100644
--- a/src/packager/packager.js
+++ b/src/packager/packager.js
@@ -572,135 +572,146 @@ cd "$(dirname "$0")"
const errorScreen = document.getElementById('error');
const errorScreenInfo = document.getElementById('error-info');
- const scaffolding = new Scaffolding.Scaffolding();
- scaffolding.width = ${this.options.stageWidth};
- scaffolding.height = ${this.options.stageHeight};
- scaffolding.setup();
- scaffolding.appendTo(appElement);
-
- if (typeof ScaffoldingAddons !== "undefined") ScaffoldingAddons.run(scaffolding);
-
- // Expose values expected by third-party plugins
- window.scaffolding = scaffolding;
- window.vm = scaffolding.vm;
-
- const {storage, vm} = scaffolding;
- storage.addWebStore(
- [storage.AssetType.ImageVector, storage.AssetType.ImageBitmap, storage.AssetType.Sound],
- (asset) => new URL("./assets/" + asset.assetId + "." + asset.dataFormat, location).href
- );
+ const handleError = (error) => {
+ console.error(error);
+ if (!errorScreen.hidden) return;
+ errorScreen.hidden = false;
+ errorScreenInfo.textContent = '' + error;
+ };
const setProgress = (progress) => {
loadingInner.style.width = progress * 100 + "%";
- }
- storage.onprogress = (total, loaded) => {
- setProgress(${PROGRESS_LOADED_JSON_BUT_NEED_ASSETS} + (loaded / total) * ${1 - PROGRESS_LOADED_JSON_BUT_NEED_ASSETS});
- };
- setProgress(${PROGRESS_LOADED_SCRIPTS});
-
- scaffolding.setUsername(${JSON.stringify(this.options.username)}.replace(/#/g, () => Math.floor(Math.random() * 10)));
- scaffolding.setAccentColor(${JSON.stringify(this.options.appearance.accent)});
-
- ${this.options.cloudVariables.mode === 'ws' ?
- `scaffolding.addCloudProvider(${this.makeWebSocketProvider()})` :
- this.options.cloudVariables.mode === 'local' ?
- `scaffolding.addCloudProvider(${this.makeLocalStorageProvider()})` :
- this.options.cloudVariables.mode === 'custom' ?
- this.makeCustomProvider() :
- '/* no-op */'
};
- if (${this.options.controls.greenFlag.enabled}) {
- const greenFlagButton = document.createElement("img");
- greenFlagButton.src = 'data:image/svg+xml,' + encodeURIComponent('');
- greenFlagButton.className = 'control-button';
- greenFlagButton.addEventListener('click', () => {
- scaffolding.greenFlag();
- });
- scaffolding.addEventListener('PROJECT_RUN_START', () => {
- greenFlagButton.classList.add('active');
- });
- scaffolding.addEventListener('PROJECT_RUN_STOP', () => {
- greenFlagButton.classList.remove('active');
- });
- scaffolding.addControlButton({
- element: greenFlagButton,
- where: 'top-left'
- });
- }
-
- if (${this.options.controls.stopAll.enabled}) {
- const stopAllButton = document.createElement("img");
- stopAllButton.src = 'data:image/svg+xml,' + encodeURIComponent('');
- stopAllButton.className = 'control-button';
- stopAllButton.addEventListener('click', () => {
- scaffolding.stopAll();
- });
- scaffolding.addControlButton({
- element: stopAllButton,
- where: 'top-left'
- });
- }
-
- if (${this.options.controls.fullscreen.enabled} && (document.fullscreenEnabled || document.webkitFullscreenEnabled)) {
- let isFullScreen = !!(document.fullscreenElement || document.webkitFullscreenElement);
- const fullscreenButton = document.createElement('img');
- fullscreenButton.className = 'control-button fullscreen-button';
- fullscreenButton.addEventListener('click', () => {
- if (isFullScreen) {
- if (document.exitFullscreen) {
- document.exitFullscreen();
- } else if (document.webkitExitFullscreen) {
- document.webkitExitFullscreen();
- }
- } else {
- if (document.body.requestFullscreen) {
- document.body.requestFullscreen()
- } else if (document.body.webkitRequestFullscreen) {
- document.body.webkitRequestFullscreen();
- }
- }
- });
- const otherControlsExist = ${this.options.controls.greenFlag.enabled || this.options.controls.stopAll.enabled};
- const fillColor = otherControlsExist ? '#575E75' : '${this.options.appearance.foreground}';
- const updateFullScreen = () => {
- isFullScreen = !!(document.fullscreenElement || document.webkitFullscreenElement);
- if (isFullScreen) {
- fullscreenButton.src = 'data:image/svg+xml,' + encodeURIComponent('');
- } else {
- fullscreenButton.src = 'data:image/svg+xml,' + encodeURIComponent('');
- }
+ try {
+ const scaffolding = new Scaffolding.Scaffolding();
+ scaffolding.width = ${this.options.stageWidth};
+ scaffolding.height = ${this.options.stageHeight};
+ scaffolding.setup();
+ scaffolding.appendTo(appElement);
+
+ if (typeof ScaffoldingAddons !== "undefined") ScaffoldingAddons.run(scaffolding);
+
+ // Expose values expected by third-party plugins
+ window.scaffolding = scaffolding;
+ window.vm = scaffolding.vm;
+
+ const {storage, vm} = scaffolding;
+ storage.addWebStore(
+ [storage.AssetType.ImageVector, storage.AssetType.ImageBitmap, storage.AssetType.Sound],
+ (asset) => new URL("./assets/" + asset.assetId + "." + asset.dataFormat, location).href
+ );
+ storage.onprogress = (total, loaded) => {
+ setProgress(${PROGRESS_LOADED_JSON_BUT_NEED_ASSETS} + (loaded / total) * ${1 - PROGRESS_LOADED_JSON_BUT_NEED_ASSETS});
};
- updateFullScreen();
- document.addEventListener('fullscreenchange', updateFullScreen);
- document.addEventListener('webkitfullscreenchange', updateFullScreen);
- if (otherControlsExist) {
- fullscreenButton.className = 'control-button fullscreen-button';
+ setProgress(${PROGRESS_LOADED_SCRIPTS});
+
+ scaffolding.setUsername(${JSON.stringify(this.options.username)}.replace(/#/g, () => Math.floor(Math.random() * 10)));
+ scaffolding.setAccentColor(${JSON.stringify(this.options.appearance.accent)});
+
+ ${this.options.cloudVariables.mode === 'ws' ?
+ `scaffolding.addCloudProvider(${this.makeWebSocketProvider()})` :
+ this.options.cloudVariables.mode === 'local' ?
+ `scaffolding.addCloudProvider(${this.makeLocalStorageProvider()})` :
+ this.options.cloudVariables.mode === 'custom' ?
+ this.makeCustomProvider() :
+ '/* no-op */'
+ };
+
+ if (${this.options.controls.greenFlag.enabled}) {
+ const greenFlagButton = document.createElement("img");
+ greenFlagButton.src = 'data:image/svg+xml,' + encodeURIComponent('');
+ greenFlagButton.className = 'control-button';
+ greenFlagButton.addEventListener('click', () => {
+ scaffolding.greenFlag();
+ });
+ scaffolding.addEventListener('PROJECT_RUN_START', () => {
+ greenFlagButton.classList.add('active');
+ });
+ scaffolding.addEventListener('PROJECT_RUN_STOP', () => {
+ greenFlagButton.classList.remove('active');
+ });
scaffolding.addControlButton({
- element: fullscreenButton,
- where: 'top-right'
+ element: greenFlagButton,
+ where: 'top-left'
});
- } else {
- fullscreenButton.className = 'standalone-fullscreen-button';
- document.body.appendChild(fullscreenButton);
}
- }
-
- vm.setTurboMode(${this.options.turbo});
- vm.setInterpolation(${this.options.interpolation});
- vm.setFramerate(${this.options.framerate});
- vm.renderer.setUseHighQualityRender(${this.options.highQualityPen});
- vm.setRuntimeOptions({
- fencing: ${this.options.fencing},
- miscLimits: ${this.options.miscLimits},
- maxClones: ${this.options.maxClones},
- });
- vm.setCompilerOptions({
- enabled: ${this.options.compiler.enabled},
- warpTimer: ${this.options.compiler.warpTimer}
- });
-
- for (const extension of ${JSON.stringify(this.options.extensions.map(i => i.url))}) {
- vm.extensionManager.loadExtensionURL(extension);
+
+ if (${this.options.controls.stopAll.enabled}) {
+ const stopAllButton = document.createElement("img");
+ stopAllButton.src = 'data:image/svg+xml,' + encodeURIComponent('');
+ stopAllButton.className = 'control-button';
+ stopAllButton.addEventListener('click', () => {
+ scaffolding.stopAll();
+ });
+ scaffolding.addControlButton({
+ element: stopAllButton,
+ where: 'top-left'
+ });
+ }
+
+ if (${this.options.controls.fullscreen.enabled} && (document.fullscreenEnabled || document.webkitFullscreenEnabled)) {
+ let isFullScreen = !!(document.fullscreenElement || document.webkitFullscreenElement);
+ const fullscreenButton = document.createElement('img');
+ fullscreenButton.className = 'control-button fullscreen-button';
+ fullscreenButton.addEventListener('click', () => {
+ if (isFullScreen) {
+ if (document.exitFullscreen) {
+ document.exitFullscreen();
+ } else if (document.webkitExitFullscreen) {
+ document.webkitExitFullscreen();
+ }
+ } else {
+ if (document.body.requestFullscreen) {
+ document.body.requestFullscreen()
+ } else if (document.body.webkitRequestFullscreen) {
+ document.body.webkitRequestFullscreen();
+ }
+ }
+ });
+ const otherControlsExist = ${this.options.controls.greenFlag.enabled || this.options.controls.stopAll.enabled};
+ const fillColor = otherControlsExist ? '#575E75' : '${this.options.appearance.foreground}';
+ const updateFullScreen = () => {
+ isFullScreen = !!(document.fullscreenElement || document.webkitFullscreenElement);
+ if (isFullScreen) {
+ fullscreenButton.src = 'data:image/svg+xml,' + encodeURIComponent('');
+ } else {
+ fullscreenButton.src = 'data:image/svg+xml,' + encodeURIComponent('');
+ }
+ };
+ updateFullScreen();
+ document.addEventListener('fullscreenchange', updateFullScreen);
+ document.addEventListener('webkitfullscreenchange', updateFullScreen);
+ if (otherControlsExist) {
+ fullscreenButton.className = 'control-button fullscreen-button';
+ scaffolding.addControlButton({
+ element: fullscreenButton,
+ where: 'top-right'
+ });
+ } else {
+ fullscreenButton.className = 'standalone-fullscreen-button';
+ document.body.appendChild(fullscreenButton);
+ }
+ }
+
+ vm.setTurboMode(${this.options.turbo});
+ vm.setInterpolation(${this.options.interpolation});
+ vm.setFramerate(${this.options.framerate});
+ vm.renderer.setUseHighQualityRender(${this.options.highQualityPen});
+ vm.setRuntimeOptions({
+ fencing: ${this.options.fencing},
+ miscLimits: ${this.options.miscLimits},
+ maxClones: ${this.options.maxClones},
+ });
+ vm.setCompilerOptions({
+ enabled: ${this.options.compiler.enabled},
+ warpTimer: ${this.options.compiler.warpTimer}
+ });
+
+ for (const extension of ${JSON.stringify(this.options.extensions.map(i => i.url))}) {
+ vm.extensionManager.loadExtensionURL(extension);
+ }
+ } catch (e) {
+ handleError(e);
}
// NW.js hook
@@ -740,13 +751,6 @@ cd "$(dirname "$0")"
launchScreen.focus();
}
};
-
- const handleError = (error) => {
- console.error(error);
- errorScreen.hidden = false;
- errorScreenInfo.textContent = '' + error;
- };
-
run().catch(handleError);