crtjs/js/main.js
2021-01-26 05:47:26 +01:00

43 lines
1.1 KiB
JavaScript

import { FluorescentScreen } from "./modules/Screen.mjs";
import { RasterScan } from "./modules/ElectronGun.mjs";
class CRT {
constructor(element) {
this.element = element;
this.initScreen();
this.raster = new RasterScan(this.screen.pixels);
}
async fetchJSON(url) {
const response = await fetch(url);
return response.json();
}
loadTape(ref) {
this.fetchJSON(ref + "/header.json").then(headers => {
// Reinitialize player with resolution from tape header
if(headers.resolution[0] !== this.element.clientWidth || headers.resolution[1] !== this.element.clientHeight) {
this.element.style.setProperty("width",headers.resolution[0] + "px");
this.element.style.setProperty("height",headers.resolution[1] + "px");
this.initScreen();
this.raster.pixels = this.screen.pixels;
}
this.raster.load(headers);
});
}
play() {
this.raster.playstate("play");
}
initScreen() {
this.screen = new FluorescentScreen(this.element);
}
}
window.video = new CRT(document.getElementById("screen"));
window.video.loadTape("tapes/sample");
window.video.play();