Remove forkphorus support (#17)
This commit is contained in:
2 files changed
+43
-429
No files matched your search
+42
-129
@@ -119,6 +119,7 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
<section class="card">
|
||||
<h1>TurboWarp Packager</h1>
|
||||
<p>Note - This is in a very early stage of development. Use with care.</p>
|
||||
<p>This packager no longer supports forkphorus. If you'd like to package forkphorus, use the <a href="https://forkphorus.github.io/packager/">forkphorus packager</a>.</p>
|
||||
</section>
|
||||
|
||||
<section class="show-loading card center">
|
||||
@@ -156,121 +157,46 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
</section>
|
||||
|
||||
<section class="hide-loading card">
|
||||
<h2>Runtime</h2>
|
||||
<h2>TurboWarp options</h2>
|
||||
|
||||
<div>
|
||||
<label>
|
||||
Runtime
|
||||
<select name="runtime.name">
|
||||
<option value="turbowarp">TurboWarp</option>
|
||||
<option value="forkphorus">forkphorus</option>
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div if="O.runtime.name === 'turbowarp'" class="fold">
|
||||
<h2>TurboWarp options</h2>
|
||||
|
||||
<div>
|
||||
<div>
|
||||
<label>
|
||||
Turbo Mode
|
||||
<input name="turbowarp.turbo" type="checkbox">
|
||||
</label>
|
||||
</div>
|
||||
<label>
|
||||
Enable compiler
|
||||
<input name="turbowarp.compilerOptions.enabled" type="checkbox" checked>
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<label>
|
||||
Warp timer
|
||||
<input name="turbowarp.compilerOptions.warpTimer" type="checkbox">
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<label>
|
||||
Framerate
|
||||
<input name="turbowarp.framerate" type="number" value="30">
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<label>
|
||||
High quality pen
|
||||
<input name="turbowarp.highQualityPen" type="checkbox">
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<label>
|
||||
Username (will randomly generate if empty)
|
||||
<input name="turbowarp.username" type="text" value="">
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
TurboWarp will automatically connect to its cloud variable server if packaging a project from an ID.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div if="O.runtime.name === 'forkphorus'" class="fold">
|
||||
<h2>forkphorus options</h2>
|
||||
|
||||
<div>
|
||||
<label>
|
||||
Turbo Mode
|
||||
<input name="forkphorus.playerOptions.turbo" type="checkbox">
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<label>
|
||||
Show Controls
|
||||
<input name="forkphorus.showControls" type="checkbox">
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<label>
|
||||
Username
|
||||
<input name="forkphorus.playerOptions.username" type="text">
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<label>
|
||||
Autoplay
|
||||
<select name="forkphorus.playerOptions.autoplayPolicy">
|
||||
<option value="always" selected>Always</option>
|
||||
<option value="never">Never</option>
|
||||
<option value="if-audio-playable">If audio can be played</option>
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<label>
|
||||
Framerate
|
||||
<input name="forkphorus.playerOptions.framerate" value="30" type="number">
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<label>
|
||||
Loading Screen Text
|
||||
<input name="forkphorus.loadingScreenText" value="forkphorus">
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<label>
|
||||
Cloud Variables
|
||||
<select name="forkphorus.playerOptions.cloudVariables">
|
||||
<option value="off">Off</option>
|
||||
<option value="ws" disabled>Connect to forkphorus clouddata server</option>
|
||||
<option value="localStorage" selected>Store locally</option>
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<label>
|
||||
Sprite Fencing
|
||||
<input name="forkphorus.playerOptions.spriteFencing" type="checkbox">
|
||||
<input name="turbowarp.turbo" type="checkbox">
|
||||
</label>
|
||||
</div>
|
||||
<label>
|
||||
Enable compiler
|
||||
<input name="turbowarp.compilerOptions.enabled" type="checkbox" checked>
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<label>
|
||||
Warp timer
|
||||
<input name="turbowarp.compilerOptions.warpTimer" type="checkbox">
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<label>
|
||||
Framerate
|
||||
<input name="turbowarp.framerate" type="number" value="30">
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<label>
|
||||
High quality pen
|
||||
<input name="turbowarp.highQualityPen" type="checkbox">
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<label>
|
||||
Username (will randomly generate if empty)
|
||||
<input name="turbowarp.username" type="text" value="">
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
TurboWarp will automatically connect to its cloud variable server if packaging a project from an ID.
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -426,27 +352,14 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
};
|
||||
|
||||
const getRuntime = async (projectType) => {
|
||||
switch (O.runtime.name) {
|
||||
case 'turbowarp': return new Packager.runtimes.TurboWarp({
|
||||
projectId: getProjectId(),
|
||||
compilerOptions: O.turbowarp.compilerOptions,
|
||||
framerate: O.turbowarp.framerate,
|
||||
highQualityPen: O.turbowarp.highQualityPen,
|
||||
turbo: O.turbowarp.turbo,
|
||||
username: O.turbowarp.username,
|
||||
});
|
||||
case 'forkphorus': return new Packager.runtimes.Forkphorus({
|
||||
playerOptions: {
|
||||
...O.forkphorus.playerOptions,
|
||||
fullscreenMode: 'window',
|
||||
fullscreenPadding: 0,
|
||||
},
|
||||
controlsOptions: O.forkphorus.showControls ? { enableFullscreen: false } : null,
|
||||
loadingScreenText: O.forkphorus.loadingScreenText,
|
||||
projectType: projectType,
|
||||
});
|
||||
}
|
||||
throw new Error('unknown environment');
|
||||
return new Packager.runtimes.TurboWarp({
|
||||
projectId: getProjectId(),
|
||||
compilerOptions: O.turbowarp.compilerOptions,
|
||||
framerate: O.turbowarp.framerate,
|
||||
highQualityPen: O.turbowarp.highQualityPen,
|
||||
turbo: O.turbowarp.turbo,
|
||||
username: O.turbowarp.username,
|
||||
});
|
||||
};
|
||||
|
||||
const getDefaultIcon = () => fetch('default-icon.png')
|
||||
|
||||
+1
-300
@@ -292,304 +292,6 @@ window.Packager = (function() {
|
||||
{ src: 'packager.92652c889f5cabfad27d.js' }
|
||||
], 'https://packagerdata.turbowarp.org/');
|
||||
|
||||
class Forkphorus extends Runtime {
|
||||
constructor(options) {
|
||||
super();
|
||||
this.playerOptions = options.playerOptions;
|
||||
this.controlsOptions = options.controlsOptions;
|
||||
this.loadingScreenText = options.loadingScreenText;
|
||||
}
|
||||
async package(projectReference) {
|
||||
const [ scripts, styles, assets ] = await Promise.all([
|
||||
Forkphorus.scriptLoader.load(),
|
||||
Forkphorus.styleLoader.load(),
|
||||
Forkphorus.assetLoader.load(),
|
||||
]);
|
||||
return `<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="Content-Security-Policy" content="default-src 'unsafe-inline' 'unsafe-eval' data: blob:">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||||
<style>
|
||||
/* Forkphorus styles... */
|
||||
${styles}
|
||||
|
||||
/* Player styles... */
|
||||
body {
|
||||
background: #000;
|
||||
margin: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
.player {
|
||||
position: absolute;
|
||||
}
|
||||
.splash, .error {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: #000;
|
||||
display: table;
|
||||
color: #fff;
|
||||
cursor: default;
|
||||
}
|
||||
.error {
|
||||
display: none;
|
||||
}
|
||||
.splash > div,
|
||||
.error > div {
|
||||
display: table-cell;
|
||||
height: 100%;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.progress {
|
||||
width: 80%;
|
||||
height: 16px;
|
||||
border: 1px solid #fff;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.progress-bar {
|
||||
background: #fff;
|
||||
width: 10%;
|
||||
height: 100%;
|
||||
}
|
||||
h1 {
|
||||
font: 300 72px Helvetica Neue, Helvetica, Arial, sans-serif;
|
||||
margin: 0 0 16px;
|
||||
}
|
||||
p {
|
||||
font: 300 24px/1.5 Helvetica Neue, Helvetica, Arial, sans-serif;
|
||||
margin: 0;
|
||||
color: rgba(255, 255, 255, .6);
|
||||
}
|
||||
.error a {
|
||||
color: #fff;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="player"></div>
|
||||
<div class="splash">
|
||||
<div>
|
||||
${this.loadingScreenText ? `<h1>${this.loadingScreenText}</h1>` : ''}
|
||||
<div class="progress">
|
||||
<div class="progress-bar"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="error">
|
||||
<div>
|
||||
<h1>Internal Error</h1>
|
||||
<p class="error-report"></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// Forkphorus scripts...
|
||||
${scripts}
|
||||
|
||||
// NW.js hook...
|
||||
(function() {
|
||||
if (typeof nw !== 'undefined') {
|
||||
// open links in the browser
|
||||
var win = nw.Window.get();
|
||||
win.on('new-win-policy', (frame, url, policy) => {
|
||||
policy.ignore();
|
||||
nw.Shell.openExternal(url);
|
||||
});
|
||||
// fix the size of the window made by NW.js
|
||||
var package = nw.require('package.json');
|
||||
if (package.window && package.window.height && package.window.width) {
|
||||
win.resizeBy(package.window.width - window.innerWidth, package.window.height - window.innerHeight);
|
||||
}
|
||||
}
|
||||
})();
|
||||
|
||||
// Player scripts...
|
||||
(function () {
|
||||
'use strict';
|
||||
|
||||
var splash = document.querySelector('.splash');
|
||||
var error = document.querySelector('.error');
|
||||
var progressBar = document.querySelector('.progress');
|
||||
var progressBarFill = document.querySelector('.progress-bar');
|
||||
|
||||
var splash = document.querySelector('.splash');
|
||||
var error = document.querySelector('.error');
|
||||
var progressBar = document.querySelector('.progress');
|
||||
var progressBarFill = document.querySelector('.progress-bar');
|
||||
|
||||
var player = new P.player.Player();
|
||||
player.setOptions({ theme: 'dark' });
|
||||
var errorHandler = new P.player.ErrorHandler(player, {
|
||||
container: document.querySelector('.error-report'),
|
||||
});
|
||||
player.onprogress.subscribe(function(progress) {
|
||||
progressBarFill.style.width = (10 + progress * 90) + '%';
|
||||
});
|
||||
player.onerror.subscribe(function(e) {
|
||||
player.exitFullscreen();
|
||||
error.style.display = 'table';
|
||||
});
|
||||
document.querySelector('.player').appendChild(player.root);
|
||||
|
||||
document.addEventListener('touchmove', function(e) {
|
||||
e.preventDefault();
|
||||
}, { passive: false });
|
||||
|
||||
P.io.setAssetManager(new class {
|
||||
constructor() {
|
||||
// Assets...
|
||||
this.data = {${assets.map((asset) => `"${asset.src}": "${asset.data}"`).join(', ')}};
|
||||
}
|
||||
|
||||
loadSoundbankFile(src) {
|
||||
return this.fetch('soundbank/' + src).then(function(e) { return e.arrayBuffer(); });
|
||||
}
|
||||
|
||||
loadFont(src) {
|
||||
return this.fetch(src).then(function(e) { return e.blob(); });
|
||||
}
|
||||
|
||||
fetch(u) {
|
||||
return fetch(this.data[u]);
|
||||
}
|
||||
});
|
||||
|
||||
// Project type...
|
||||
var type = '${projectReference.type}';
|
||||
// Project data...
|
||||
// Attribution Notice:
|
||||
var project = '${projectReference.data}';
|
||||
|
||||
// Player options...
|
||||
var playerOptions = ${JSON.stringify(this.playerOptions)};
|
||||
// Controls options...
|
||||
var controlsOptions = ${JSON.stringify(this.controlsOptions)};
|
||||
|
||||
player.setOptions(playerOptions);
|
||||
if (controlsOptions) {
|
||||
player.addControls(controlsOptions);
|
||||
}
|
||||
|
||||
fetch(project)
|
||||
.then(function(request) { return request.arrayBuffer(); })
|
||||
.then(function(buffer) { return player.loadProjectFromBuffer(buffer, type); })
|
||||
.then(function() {
|
||||
player.enterFullscreen();
|
||||
splash.style.display = 'none';
|
||||
})
|
||||
.catch(function(e) {
|
||||
player.handleError(e);
|
||||
});
|
||||
}());
|
||||
</script>
|
||||
</body>
|
||||
</html>`;
|
||||
}
|
||||
}
|
||||
Forkphorus.scriptLoader = new ScriptOrStyleLoader([
|
||||
{ src: 'lib/scratch-sb1-converter.js', },
|
||||
{ src: 'lib/canvg.min.js', },
|
||||
{ src: 'lib/fontfaceobserver.standalone.js', },
|
||||
{ src: 'lib/jszip.min.js', },
|
||||
{ src: 'lib/purify.min.js', },
|
||||
{ src: 'phosphorus.dist.js', inlineSources: ['icons.svg'] },
|
||||
], 'https://forkphorus.github.io/');
|
||||
Forkphorus.styleLoader = new ScriptOrStyleLoader([
|
||||
{
|
||||
src: 'phosphorus.css',
|
||||
inlineSources: [
|
||||
'icons.svg',
|
||||
'icons/click-to-play.svg',
|
||||
'fonts/DonegalOne-Regular.woff',
|
||||
'fonts/GloriaHallelujah.woff',
|
||||
'fonts/MysteryQuest-Regular.woff',
|
||||
'fonts/PermanentMarker-Regular.woff',
|
||||
]
|
||||
}
|
||||
], 'https://forkphorus.github.io/');
|
||||
Forkphorus.assetLoader = new AssetLoader([
|
||||
{ src: 'soundbank/sb2/instruments/AcousticGuitar_F3_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/AcousticPiano(5)_A%233_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/AcousticPiano(5)_C4_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/AcousticPiano(5)_G4_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/AcousticPiano(5)_F5_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/AcousticPiano(5)_C6_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/AcousticPiano(5)_D%236_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/AcousticPiano(5)_D7_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/AltoSax_A3_22K.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/AltoSax(3)_C6_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/Bassoon_C3_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/BassTrombone_A2(2)_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/BassTrombone_A2(3)_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/Cello(3b)_C2_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/Cello(3)_A%232_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/Choir(4)_F3_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/Choir(4)_F4_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/Choir(4)_F5_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/Clarinet_C4_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/ElectricBass(2)_G1_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/ElectricGuitar(2)_F3(1)_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/ElectricPiano_C2_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/ElectricPiano_C4_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/EnglishHorn(1)_D4_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/EnglishHorn(1)_F3_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/Flute(3)_B5(1)_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/Flute(3)_B5(2)_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/Marimba_C4_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/MusicBox_C4_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/Organ(2)_G2_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/Pizz(2)_A3_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/Pizz(2)_E4_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/Pizz(2)_G2_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/SteelDrum_D5_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/SynthLead(6)_C4_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/SynthLead(6)_C6_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/SynthPad(2)_A3_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/SynthPad(2)_C6_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/TenorSax(1)_C3_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/Trombone_B3_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/Trumpet_E5_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/Vibraphone_C3_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/Violin(2)_D4_22K.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/Violin(3)_A4_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/Violin(3b)_E5_22k.wav', },
|
||||
{ src: 'soundbank/sb2/instruments/WoodenFlute_C5_22k.wav', },
|
||||
{ src: 'soundbank/sb2/drums/BassDrum(1b)_22k.wav', },
|
||||
{ src: 'soundbank/sb2/drums/Bongo_22k.wav', },
|
||||
{ src: 'soundbank/sb2/drums/Cabasa(1)_22k.wav', },
|
||||
{ src: 'soundbank/sb2/drums/Clap(1)_22k.wav', },
|
||||
{ src: 'soundbank/sb2/drums/Claves(1)_22k.wav', },
|
||||
{ src: 'soundbank/sb2/drums/Conga(1)_22k.wav', },
|
||||
{ src: 'soundbank/sb2/drums/Cowbell(3)_22k.wav', },
|
||||
{ src: 'soundbank/sb2/drums/Crash(2)_22k.wav', },
|
||||
{ src: 'soundbank/sb2/drums/Cuica(2)_22k.wav', },
|
||||
{ src: 'soundbank/sb2/drums/GuiroLong(1)_22k.wav', },
|
||||
{ src: 'soundbank/sb2/drums/GuiroShort(1)_22k.wav', },
|
||||
{ src: 'soundbank/sb2/drums/HiHatClosed(1)_22k.wav', },
|
||||
{ src: 'soundbank/sb2/drums/HiHatOpen(2)_22k.wav', },
|
||||
{ src: 'soundbank/sb2/drums/HiHatPedal(1)_22k.wav', },
|
||||
{ src: 'soundbank/sb2/drums/Maracas(1)_22k.wav', },
|
||||
{ src: 'soundbank/sb2/drums/SideStick(1)_22k.wav', },
|
||||
{ src: 'soundbank/sb2/drums/SnareDrum(1)_22k.wav', },
|
||||
{ src: 'soundbank/sb2/drums/Tambourine(3)_22k.wav', },
|
||||
{ src: 'soundbank/sb2/drums/Tom(1)_22k.wav', },
|
||||
{ src: 'soundbank/sb2/drums/Triangle(1)_22k.wav', },
|
||||
{ src: 'soundbank/sb2/drums/Vibraslap(1)_22k.wav', },
|
||||
{ src: 'soundbank/sb2/drums/WoodBlock(1)_22k.wav', },
|
||||
{ src: 'fonts/Knewave-Regular.woff', },
|
||||
{ src: 'fonts/Handlee-Regular.woff', },
|
||||
{ src: 'fonts/Grand9K-Pixel.ttf', },
|
||||
{ src: 'fonts/Griffy-Regular.woff', },
|
||||
{ src: 'fonts/SourceSerifPro-Regular.woff', },
|
||||
{ src: 'fonts/NotoSans-Regular.woff', },
|
||||
], 'https://forkphorus.github.io/');
|
||||
|
||||
class HTML extends Environment {
|
||||
async package() {
|
||||
const packagerData = await this.runtime.package(await this.projectData.asDataURL());
|
||||
@@ -796,8 +498,7 @@ ${scripts}
|
||||
return {
|
||||
Project,
|
||||
runtimes: {
|
||||
TurboWarp,
|
||||
Forkphorus,
|
||||
TurboWarp
|
||||
},
|
||||
environments: {
|
||||
HTML,
|
||||
|
||||
Reference in new issue
Block a user