ruffle/web/www/index.js

60 lines
1.6 KiB
JavaScript

import { Player } from "../pkg/fluster";
let sampleFileInput = document.getElementById("sample-file");
sampleFileInput.addEventListener("change", sampleFileSelected, false);
let localFileInput = document.getElementById("local-file");
localFileInput.addEventListener("change", localFileSelected, false);
let player;
function localFileSelected() {
let file = localFileInput.files[0];
if (file) {
let fileReader = new FileReader();
fileReader.onload = e => {
playSwf(fileReader.result);
}
fileReader.readAsArrayBuffer(file);
}
}
function sampleFileSelected() {
if (sampleFileInput.selectedIndex <= 0) {
// No SWF selected.
return;
}
let file = sampleFileInput.selectedOptions[0].innerText;
if (file) {
fetch(file)
.then(response => {
response.arrayBuffer().then(data => playSwf(data))
});
}
}
let timestamp = 0;
let animationHandler;
function playSwf(swfData) {
if (player) {
player.destroy();
window.cancelAnimationFrame(animationHandler);
player = null;
animationHandler = null;
}
let canvas = document.getElementById("player");
if (swfData && canvas) {
player = Player.new(canvas, new Uint8Array(swfData));
timestamp = performance.now();
animationHandler = window.requestAnimationFrame(tickPlayer);
}
}
function tickPlayer(newTimestamp) {
let dt = newTimestamp - timestamp;
player.tick(dt);
timestamp = newTimestamp;
window.requestAnimationFrame(tickPlayer);
}