-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
323 lines (302 loc) · 20.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
<!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>pacuscraft online</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;
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[data-opcode^="data_"] .sc-monitor-value-color {
background-color: #1100ff;
}
.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">loading</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 = true;
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("steve##########".replace(/#/g, () => Math.floor(Math.random() * 10)));
scaffolding.setAccentColor("#ff4c4c");
scaffolding.addCloudProvider(new Scaffolding.Cloud.LocalStorageProvider("cloudvariables:884060181"));
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 (vm.renderer.setMaxTextureDimension) vm.renderer.setMaxTextureDimension(2048);
if (typeof ScaffoldingAddons !== 'undefined') {
ScaffoldingAddons.run(scaffolding, {"gamepad":false,"pointerlock":false,"specialCloudBehaviors":true,"unsafeCloudBehaviors":false,"pause":false});
}
scaffolding.setExtensionSecurityManager({
getSandboxMode: 'unsandboxed',
canLoadExtensionFromProject: (url) => {
handleError(new Error('Missing custom extension: ' + url));
return Promise.resolve(false);
}
});
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,
storage.AssetType.Font
].filter(i => i),
(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>