add some more polish to web runner

This commit is contained in:
dranke committed 2022-02-20 23:54:28 +01:00
1 parent c56196bd2e
commit 90467f7c5b
5 files changed
+63 -2

No files matched your search

+1
View File
@@ -0,0 +1 @@
<!doctype html><html><head><meta charset="utf8"><title>uw8-run</title><style>body,canvas,html{background-color:#202024;margin:0;padding:0}body,html{height:100%}body{display:grid;grid-template-rows:1fr}#screen{align-self:center;border:4px solid #303040;image-rendering:pixelated;justify-self:center}#message{background-color:rgba(0,0,0,.4);color:#c64;font:700 12pt sans-serif;padding:8px;position:absolute;width:calc(100% - 16px);z-index:2}@media (min-width:648px) and (min-height:488px){#screen{height:480px;width:640px}}@media (min-width:968px) and (min-height:728px){#screen{height:720px;width:960px}}</style></head><body> <canvas id="screen" width="320" height="240" tabindex="1"> </canvas> <div id="message"></div> </body><script type="module">function e(e){return e&&e.__esModule?e.default:e}let A=function(A,t={}){t.setMessage||(t.setMessage=(e,A)=>{A&&console.log("error: "+A)});let r,B,a,n,o=A.getContext("2d"),s=o.createImageData(320,240),i=t.devkitMode,F=e=>new Uint8Array(e),l=e=>new Uint32Array(e),Q=0,E=null==t.keyboardElement?A:t.keyboardElement;if(E){let e=e=>{let r,o="keydown"==e.type;switch(e.code){case"ArrowUp":r=1;break;case"ArrowDown":r=2;break;case"ArrowLeft":r=4;break;case"ArrowRight":r=8;break;case"KeyZ":r=16;break;case"KeyX":r=32;break;case"KeyA":r=64;break;case"KeyS":r=128;break;case"KeyR":o&&g(B,!0);break;case"F9":o&&A.toBlob((e=>{c(e,".png")})),e.preventDefault();break;case"F10":o&&function(){if(a)return a.stop(),void(a=null);a=new MediaRecorder(A.captureStream(),{mimeType:"video/webm",videoBitsPerSecond:25e6});let e=[];a.ondataavailable=A=>{e.push(A.data)};let r=t.timerElement;r&&(r.hidden=!1,r.innerText="00:00");function B(){if(n){if(r){let e=Math.floor((Date.now()-n)/1e3);r.innerText=Math.floor(e/60).toString().padStart(2,"0")+":"+(e%60).toString().padStart(2,"0")}setTimeout(B,1e3)}}a.onstop=()=>{r&&(r.hidden=!0),c(new Blob(e,{type:"video/webm"}),".webm")},a.start(),n=Date.now(),setTimeout(B,1e3)}(),e.preventDefault()}o?Q|=r:Q&=~r};E.onkeydown=e,E.onkeyup=e}async function g(a,n){r&&(r(),r=null);let E=a.byteLength;if(t.setMessage(E),0==E)return;B=a;let c=window.location.pathname;if(E<=1024&&!n){let e="";for(let A of F(a))e+=String.fromCharCode(A);c+="#"+btoa(e),c!=window.location.pathname+window.location.hash&&history.pushState(null,null,c)}A.width=A.width;try{let A={initial:4};i||(A.maximum=4);let n,c=new WebAssembly.Memory({initial:4,maximum:i?16:4}),I=F(c.buffer),f={env:{memory:c}},d=e=>{if(n&&(!i||0!=F(e)[0])){I.set(F(e));let A=n.exports.load_uw8(e.byteLength);e=new ArrayBuffer(A),F(e).set(I.slice(0,A))}return e},w=async e=>(await WebAssembly.instantiate(e,f)).instance,C=async e=>w(d(await(await fetch(e)).arrayBuffer()));n=await C(e("data:application/wasm;base64,AGFzbQEAAAABFQRgAX8Bf2ACf38Bf2ADf39%2FAGAAAAIPAQNlbnYGbWVtb3J5AgAEAwkIAAABAgEAAAMGEAN%2FAUEAC38BQQALfwFBAAsHGQIIbG9hZF91dzgAAAp1bmNvbXByZXNzAAQIAQcKngUIxwEBB39BAC0AAEEBayIBQQBIBEAgAA8LQYDAByAAaiECIAFBAXEEQEEBQYHABxAEIQIFQYDAB0EAIAAQAwtBAEGAhA9BCBADQYiEDyEDQQghBEGBwAchBQNAIAUgAkggAyMATiAFLQAAIAMtAABMcnEEQCAEIAQgBRACIgZqIQQgAyMASCAFLQAAIAMtAABGcQRAIAMgAxABaiEDCyAFIAZqIQUMAQsgAyMASARAIAQgBCADEAIiB2ohBCADIAdqIQMMAQsLIAQLPAEEfyAAIQEDQCACIAFBAWoiAS0AACIEQf8AcSADdHIhAiADQQdqIQMgBEEHdQ0ACyABQQFqIABrIAJqCxIBAX8gACABIAEQASICEAMgAgskAANAIAJBAEoEQCAAIAJBAWsiAmogASACai0AADoAAAwBCwsLqQEBBn8gACQBQQAkAgNAIANBgAE6AICADyADQQFqIgNBgQNIDQALAkADQEEAEAYiBQRAIAQEf0EBBUGAAhAGCwRAQYECEAVBAWsiAkUNAwtBwQIQBSEGA0AgASABIAJrLQAAOgAAIAFBAWohASAGQQFrIgYNAAsFQQEhBwNAIAdBAXQgBxAGciIHQYACSA0ACyABIAc6AAAgAUEBaiEBCyAFIQQMAAsLIAELNAECfwNAIAAgAmoQBgRAIAEgACACakEgahAGIAJ0ciEBIAJBAWohAgwBCwsgAUEBIAJ0cgtxAQR%2FA0AjAkGAIEgEQCMCQQh0IwEtAAByJAIjAUEBaiQBDAELCyMCQf8BcSICIAAtAICADyIBIwJBCHUiA2xBgAIgAWsgA2wgAWsgAiABSCIEG2okAiAAIAFBByAEQYECbGogAWtBBHVqOgCAgA8gBAsMAEEAQYCEDxAEJAALC9IDAQBBAAvLA6eP%2Fw9olPgPXPcNZ6GH4sK0YVAeGZhY8FzSxDxK%2Fvv32QOMdeZ4QLHNI9NAW9hr%2B1lpXqgkXw%2FZJ2xueSKrTWbsgq9bIaIhjByG5VC2EE%2Bp0mUsRwQzi7oRDC02b4ywHappXJZHhDLuZKhnjylLE4X%2F9%2FZ66bwxYl1h%2BNAL%2BQh0zt3iSqNerI7l0QMOySt%2FPOFO3hXwdaMgxln646dVGVLPhHQbMoREgNzLIYMv4gBUU6Cr%2BR0QYi3tDAXJ4SoSxKCyLsv7cfb5Cl%2BYC5Jus5xElZgiDlIIHBqFDldTRQ5nBJl5es0ZDmEl3WiHmM1UA8QeePxqNrYic7ifdP3EBFW5S6xR2jJ3ck%2BXX1DdwcNjNkIkxbPKNFOeqWZ%2FJ72Bz14fhYzfrX%2FfCvJQ2mBNrPbSIjF%2B6V1RUKuyzvSVyFXaomCpe3Y3V7yP5iFDf7QCB30gL0F9spf8BoPYv9hjE6Q3ZkqKBvEmZicrDv16JtFEfFeGz74RiGn3in3LRJfDC6flml3%2F7XqPZEDOkp7EYlesgbP3QvOHwrGA75RCRmGCkYt5vQiaDM%2F6Ya1SMp%2B0hSKoL1CaVam1YNyC2eUiph32Ag6cicueJ5xp%2Bg%3D%3D"));for(let e of["acos","asin","atan","atan2","cos","exp","log","sin","tan","pow"])f.env[e]=Math[e];for(let e=9;e<64;++e)f.env["reserved"+e]=()=>{};for(let e=0;e<16;++e)f.env["g_reserved"+e]=0;a=d(a);let y=await C(e("data:;base64,AnevpqDvapimRNPOGhqee07n%2Bv1yTm1n5XES6y7%2BqPUQFqw5livsDo%2Fkram7E1zzZg6qmLzXsUswfnD9AZjEuJOrUjm2TzbQ%2BWO1hv6bvL0OA5NLPFH8ZGmL%2BQuU9%2BzJKrrbrtlCG5CF9XtS0qCkoIio9oeYfmSVxOA0y%2FJSfYQk40bvdrHXrFnxJFiottxFT%2FLepVgrZE1lBV2uUHz%2Fm8jczeF0kKEUpYn4qQfne4XupG2DSs0kLa3WXNHBwG0ViOo4f1B4B4X%2F1rf9O1yJZwLAqxFM1w2EeBreIqf9raWm6MMLine truncated
+2
View File
@@ -0,0 +1,2 @@
#!/bin/bash
rm -rf .parcel-cache && yarn parcel build src/run-web.html && cp dist/run-web.html ../src/
+46
View File
@@ -0,0 +1,46 @@
html, body, canvas {
padding: 0;
margin: 0;
background-color: #202024;
}
html {
height: 100%;
}
body {
height: 100%;
display: grid;
grid-template-rows: 1fr;
}
#screen {
align-self: center;
justify-self: center;
image-rendering: pixelated;
border: 4px solid #303040;
}
#message {
position: absolute;
width: calc(100% - 16px);
background-color: rgba(0, 0, 0, 0.4);
color: #c64;
padding: 8px;
font: bold 12pt sans-serif;
z-index: 2;
}
@media (min-width: 648px) and (min-height: 488px) {
#screen {
width: 640px;
height: 480px;
}
}
@media (min-width: 968px) and (min-height: 728px) {
#screen {
width: 960px;
height: 720px;
}
}
+5 -1
View File
@@ -3,10 +3,14 @@
<head> <head>
<meta charset="utf8" /> <meta charset="utf8" />
<title>uw8-run</title> <title>uw8-run</title>
<style>
@import "run-web.css";
</style>
</head> </head>
<body> <body>
<canvas id="screen" width="320" height="240"> <canvas id="screen" width="320" height="240" tabindex="1">
</canvas> </canvas>
<div id="message"></div>
</body> </body>
<script type="module"> <script type="module">
import "./run-web.js"; import "./run-web.js";
+9 -1
View File
@@ -1,6 +1,14 @@
import MicroW8 from './microw8.js'; import MicroW8 from './microw8.js';
let uw8 = MicroW8(document.getElementById('screen')); let uw8 = MicroW8(document.getElementById('screen'), {
setMessage: (_, err) => {
let elem = document.getElementById('message');
if(err) {
elem.innerText = err;
}
elem.hidden = !err;
}
});
let events = new EventSource('events'); let events = new EventSource('events');
events.onmessage = event => { events.onmessage = event => {
console.log(event.data); console.log(event.data);