-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
405 lines (380 loc) · 27.9 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
<!DOCTYPE html>
<!-- Created with https://packager.turbowarp.org/ -->
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<!-- We only include this to explicitly loosen the CSP of various packager environments. It does not provide any security. -->
<meta http-equiv="Content-Security-Policy" content="default-src * 'self' 'unsafe-inline' 'unsafe-eval' data: blob:">
<title>a cloud v0.9.1</title>
<style>
body {
color: #ffffff;
font-family: sans-serif;
overflow: hidden;
margin: 0;
padding: 0;
}
:root, body.is-fullscreen {
background-color: #000000;
}
[hidden] {
display: none !important;
}
h1 {
font-weight: normal;
}
a {
color: inherit;
text-decoration: underline;
cursor: pointer;
}
#app, #loading, #error, #launch {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.screen {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
cursor: default;
user-select: none;
-webkit-user-select: none;
background-color: #000000;
}
#launch {
background-color: rgba(0, 0, 0, 0.7);
cursor: pointer;
}
.green-flag {
width: 80px;
height: 80px;
padding: 16px;
border-radius: 100%;
background: rgba(255, 255, 255, 0.75);
border: 3px solid hsla(0, 100%, 100%, 1);
display: flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
}
#loading {
}
.progress-bar-outer {
border: 1px solid currentColor;
height: 10px;
width: 200px;
max-width: 200px;
}
.progress-bar-inner {
height: 100%;
width: 0;
background-color: currentColor;
}
.loading-text, noscript {
font-weight: normal;
font-size: 36px;
margin: 0 0 16px;
}
.loading-image {
margin: 0 0 16px;
}
#error-message, #error-stack {
font-family: monospace;
max-width: 600px;
white-space: pre-wrap;
user-select: text;
-webkit-user-select: text;
}
#error-stack {
text-align: left;
max-height: 200px;
overflow: auto;
}
.control-button {
width: 2rem;
height: 2rem;
padding: 0.375rem;
border-radius: 0.25rem;
margin-top: 0.5rem;
margin-bottom: 0.5rem;
user-select: none;
-webkit-user-select: none;
cursor: pointer;
border: 0;
border-radius: 4px;
}
.control-button:hover {
background: #ff4c4c26;
}
.control-button.active {
background: #ff4c4c59;
}
.fullscreen-button {
background: white !important;
}
.standalone-fullscreen-button {
position: absolute;
top: 0;
right: 0;
background-color: rgba(0, 0, 0, 0.5);
border-radius: 0 0 0 4px;
padding: 4px;
cursor: pointer;
}
.sc-canvas {
cursor: auto;
}
.sc-monitor-root[opcode^="data_"] .sc-monitor-value-color {
background-color: #ff8c1a;
}
.sc-monitor-row-value-outer {
background-color: #fc662c;
}
.sc-monitor-row-value-editing .sc-monitor-row-value-outer {
background-color: #e25b27;
}
</style>
<meta name="theme-color" content="#000000">
<link rel="icon" href="data:image/png;base64,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">
</head>
<body>
<div id="app"></div>
<div id="launch" class="screen" hidden title="Click to start">
<div class="green-flag">
<svg viewBox="0 0 16.63 17.5" width="42" height="44">
<defs><style>.cls-1,.cls-2{fill:#4cbf56;stroke:#45993d;stroke-linecap:round;stroke-linejoin:round;}.cls-2{stroke-width:1.5px;}</style></defs>
<path class="cls-1" d="M.75,2A6.44,6.44,0,0,1,8.44,2h0a6.44,6.44,0,0,0,7.69,0V12.4a6.44,6.44,0,0,1-7.69,0h0a6.44,6.44,0,0,0-7.69,0"/>
<line class="cls-2" x1="0.75" y1="16.75" x2="0.75" y2="0.75"/>
</svg>
</div>
</div>
<div id="loading" class="screen">
<noscript>Enable JavaScript</noscript>
<h1 class="loading-text">等一下,抽风云在赶来的路上</h1>
<div class="progress-bar-outer"><div class="progress-bar-inner" id="loading-inner"></div></div>
</div>
<div id="error" class="screen" hidden>
<h1>Error</h1>
<details>
<summary id="error-message"></summary>
<p id="error-stack"></p>
</details>
</div>
<script src="script.js"></script>
<script>
const appElement = document.getElementById('app');
const launchScreen = document.getElementById('launch');
const loadingScreen = document.getElementById('loading');
const loadingInner = document.getElementById('loading-inner');
const errorScreen = document.getElementById('error');
const errorScreenMessage = document.getElementById('error-message');
const errorScreenStack = document.getElementById('error-stack');
const handleError = (error) => {
console.error(error);
if (!errorScreen.hidden) return;
errorScreen.hidden = false;
errorScreenMessage.textContent = '' + error;
let debug = error && error.stack || 'no stack';
debug += '\nUser agent: ' + navigator.userAgent;
errorScreenStack.textContent = debug;
};
const setProgress = (progress) => {
if (loadingInner) loadingInner.style.width = progress * 100 + '%';
};
const interpolate = (a, b, t) => a + t * (b - a);
try {
setProgress(0.1);
const scaffolding = new Scaffolding.Scaffolding();
scaffolding.width = 480;
scaffolding.height = 360;
scaffolding.resizeMode = "preserve-ratio";
scaffolding.editableLists = false;
scaffolding.usePackagedRuntime = true;
scaffolding.setup();
scaffolding.appendTo(appElement);
const vm = scaffolding.vm;
window.scaffolding = scaffolding;
window.vm = scaffolding.vm;
window.Scratch = {
vm,
renderer: vm.renderer,
audioEngine: vm.runtime.audioEngine,
bitmapAdapter: vm.runtime.v2BitmapAdapter,
videoProvider: vm.runtime.ioDevices.video.provider
};
scaffolding.setUsername("player####".replace(/#/g, () => Math.floor(Math.random() * 10)));
scaffolding.setAccentColor("#ff4c4c");
scaffolding.addCloudProvider(new Scaffolding.Cloud.WebSocketProvider(["wss://clouddata.turbowarp.org","wss://clouddata.turbowarp.xyz"], "p4-@a cloud v0.9.1.sb3"));
const greenFlagButton = document.createElement('img');
greenFlagButton.src = 'data:image/svg+xml,' + encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16.63 17.5"><path d="M.75 2a6.44 6.44 0 017.69 0h0a6.44 6.44 0 007.69 0v10.4a6.44 6.44 0 01-7.69 0h0a6.44 6.44 0 00-7.69 0" fill="#4cbf56" stroke="#45993d" stroke-linecap="round" stroke-linejoin="round"/><path stroke-width="1.5" fill="#4cbf56" stroke="#45993d" stroke-linecap="round" stroke-linejoin="round" d="M.75 16.75v-16"/></svg>');
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'
});
const pauseButton = document.createElement('img');
pauseButton.className = 'control-button';
let isPaused = false;
pauseButton.addEventListener('click', () => {
isPaused = !isPaused;
vm.setPaused(isPaused);
});
const updatePause = () => {
if (isPaused) {
pauseButton.src = 'data:image/svg+xml,' + encodeURIComponent('<svg width="16" height="16" viewBox="0 0 4.2333332 4.2333335" xmlns="http://www.w3.org/2000/svg"><path d="m3.95163484 2.02835365-1.66643921.9621191-1.66643913.96211911V.10411543l1.66643922.9621191z" fill="#ffae00"/></svg>');
} else {
pauseButton.src = 'data:image/svg+xml,' + encodeURIComponent('<svg width="16" height="16" viewBox="0 0 4.2333332 4.2333335" xmlns="http://www.w3.org/2000/svg"><g fill="#ffae00"><path d="M.389.19239126h1.2631972v3.8485508H.389zM2.5810001.19239126h1.2631972v3.8485508H2.5810001z"/></g></svg>');
}
}
vm.on('P4_PAUSE', updatePause);
updatePause();
scaffolding.addControlButton({
element: pauseButton,
where: 'top-left'
});
const stopAllButton = document.createElement('img');
stopAllButton.src = 'data:image/svg+xml,' + encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14 14"><path fill="#ec5959" stroke="#b84848" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M4.3.5h5.4l3.8 3.8v5.4l-3.8 3.8H4.3L.5 9.7V4.3z"/></svg>');
stopAllButton.className = 'control-button';
stopAllButton.addEventListener('click', () => {
scaffolding.stopAll();
});
scaffolding.addControlButton({
element: stopAllButton,
where: 'top-left'
});
if (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 = true;
const fillColor = otherControlsExist ? '#575E75' : '#ffffff';
const updateFullScreen = () => {
isFullScreen = !!(document.fullscreenElement || document.webkitFullscreenElement);
document.body.classList.toggle('is-fullscreen', isFullScreen);
if (isFullScreen) {
fullscreenButton.src = 'data:image/svg+xml,' + encodeURIComponent('<svg width="20" height="20" xmlns="http://www.w3.org/2000/svg"><g fill="' + fillColor + '" fill-rule="evenodd"><path d="M12.662 3.65l.89.891 3.133-2.374a.815.815 0 011.15.165.819.819 0 010 .986L15.467 6.46l.867.871c.25.25.072.664-.269.664L12.388 8A.397.397 0 0112 7.611V3.92c0-.341.418-.514.662-.27M7.338 16.35l-.89-.89-3.133 2.374a.817.817 0 01-1.15-.166.819.819 0 010-.985l2.37-3.143-.87-.871a.387.387 0 01.27-.664L7.612 12a.397.397 0 01.388.389v3.692a.387.387 0 01-.662.27M7.338 3.65l-.89.891-3.133-2.374a.815.815 0 00-1.15.165.819.819 0 000 .986l2.37 3.142-.87.871a.387.387 0 00.27.664L7.612 8A.397.397 0 008 7.611V3.92a.387.387 0 00-.662-.27M12.662 16.35l.89-.89 3.133 2.374a.817.817 0 001.15-.166.819.819 0 000-.985l-2.368-3.143.867-.871a.387.387 0 00-.269-.664L12.388 12a.397.397 0 00-.388.389v3.692c0 .342.418.514.662.27"/></g></svg>');
} else {
fullscreenButton.src = 'data:image/svg+xml,' + encodeURIComponent('<svg width="20" height="20" xmlns="http://www.w3.org/2000/svg"><g fill="' + fillColor + '" fill-rule="evenodd"><path d="M16.338 7.35l-.89-.891-3.133 2.374a.815.815 0 01-1.15-.165.819.819 0 010-.986l2.368-3.142-.867-.871a.387.387 0 01.269-.664L16.612 3a.397.397 0 01.388.389V7.08a.387.387 0 01-.662.27M3.662 12.65l.89.89 3.133-2.374a.817.817 0 011.15.166.819.819 0 010 .985l-2.37 3.143.87.871c.248.25.071.664-.27.664L3.388 17A.397.397 0 013 16.611V12.92c0-.342.418-.514.662-.27M3.662 7.35l.89-.891 3.133 2.374a.815.815 0 001.15-.165.819.819 0 000-.986L6.465 4.54l.87-.871a.387.387 0 00-.27-.664L3.388 3A.397.397 0 003 3.389V7.08c0 .341.418.514.662.27M16.338 12.65l-.89.89-3.133-2.374a.817.817 0 00-1.15.166.819.819 0 000 .985l2.368 3.143-.867.871a.387.387 0 00.269.664l3.677.005a.397.397 0 00.388-.389V12.92a.387.387 0 00-.662-.27"/></g></svg>');
}
};
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(false);
if (vm.setInterpolation) vm.setInterpolation(false);
if (vm.setFramerate) vm.setFramerate(30);
if (vm.renderer.setUseHighQualityRender) vm.renderer.setUseHighQualityRender(false);
if (vm.setRuntimeOptions) vm.setRuntimeOptions({
fencing: true,
miscLimits: true,
maxClones: 300,
});
if (vm.setCompilerOptions) vm.setCompilerOptions({
enabled: true,
warpTimer: false
});
if (typeof ScaffoldingAddons !== 'undefined') {
ScaffoldingAddons.run(scaffolding, {"gamepad":false,"pointerlock":false,"specialCloudBehaviors":false,"unsafeCloudBehaviors":false,"pause":true});
}
for (const extension of []) {
vm.extensionManager.loadExtensionURL(extension);
}
} catch (e) {
handleError(e);
}
</script>
<script>
const getProjectData = (function() {
const storage = scaffolding.storage;
storage.onprogress = (total, loaded) => {
setProgress(interpolate(0.2, 0.98, loaded / total));
};
storage.addWebStore(
[storage.AssetType.ImageVector, storage.AssetType.ImageBitmap, storage.AssetType.Sound],
(asset) => new URL('./assets/' + asset.assetId + '.' + asset.dataFormat, location).href
);
return () => new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.onload = () => {
resolve(xhr.response);
};
xhr.onerror = () => {
if (location.protocol === 'file:') {
reject(new Error('Zip environment must be used from a website, not from a file URL.'));
} else {
reject(new Error('Request to load project data failed.'));
}
};
xhr.onprogress = (e) => {
if (e.lengthComputable) {
setProgress(interpolate(0.1, 0.2, e.loaded / e.total));
}
};
xhr.responseType = 'arraybuffer';
xhr.open('GET', "./assets/project.json");
xhr.send();
});
})();
</script>
<script>
const run = async () => {
const projectData = await getProjectData();
await scaffolding.loadProject(projectData);
setProgress(1);
loadingScreen.hidden = true;
if (true) {
scaffolding.start();
} else {
launchScreen.hidden = false;
launchScreen.addEventListener('click', () => {
launchScreen.hidden = true;
scaffolding.start();
});
launchScreen.focus();
}
};
run().catch(handleError);
</script>
</body>
</html>