118 lines
2.4 KiB
JavaScript
118 lines
2.4 KiB
JavaScript
// Big thanks to https://github.com/AfBu/PicoLoader
|
|
// pico-8 web player variables that must be present
|
|
var Module;
|
|
var playable_area_count = 0;
|
|
var playarea_state = 0;
|
|
var codo_command = 0;
|
|
var codo_command_p = 0;
|
|
var codo_volume = 256;
|
|
var codo_running = true;
|
|
var pa_pid = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
|
|
|
|
// Pico-8 buttons to Web Player key codes lookup table
|
|
var pico8keys = [
|
|
[37, 39, 38, 40, 90, 88],
|
|
[83, 70, 69, 68, 9, 81]
|
|
];
|
|
|
|
// Loads pico8 web player library and setups everything to run
|
|
function PicoPlayer(element, cart, lib) {
|
|
// fallback to bbs version of pico8 console
|
|
if (!lib) {
|
|
lib = '/js/pico8.js';
|
|
}
|
|
|
|
// load element by ID
|
|
if (typeof(element) == 'string') {
|
|
element = document.getElementById(element);
|
|
}
|
|
|
|
// create canvas and add it into element
|
|
var canvas = document.createElement('canvas');
|
|
element.appendChild(canvas);
|
|
|
|
// setup module to load card and point to our canvas
|
|
Module = {
|
|
arguments: [cart],
|
|
canvas: canvas
|
|
};
|
|
|
|
// load pico8 library
|
|
var head = document.getElementsByTagName('head')[0];
|
|
var js = document.createElement('script');
|
|
js.src = lib;
|
|
head.appendChild(js);
|
|
}
|
|
|
|
// press button
|
|
function PicoPress(k, p) {
|
|
var kc = pico8keys[p][k];
|
|
|
|
gd({
|
|
type: 'keydown',
|
|
keyCode: kc
|
|
});
|
|
}
|
|
|
|
// release button
|
|
function PicoRelease(k, p) {
|
|
var kc = pico8keys[p][k];
|
|
|
|
gd({
|
|
type: 'keyup',
|
|
keyCode: kc
|
|
});
|
|
}
|
|
|
|
// set volume (0 - 256)
|
|
function PicoVolume(vol) {
|
|
codo_volume = vol;
|
|
codo_command = 2;
|
|
codo_command_p = codo_volume;
|
|
}
|
|
|
|
// toggle sound
|
|
function PicoMute() {
|
|
codo_volume = (codo_volume == 0 ? 256 : 0);
|
|
codo_command = 2;
|
|
codo_command_p = codo_volume;
|
|
}
|
|
|
|
// toggle pause
|
|
function PicoPause() {
|
|
codo_running = !codo_running;
|
|
|
|
if (codo_running) {
|
|
Module.resumeMainLoop();
|
|
} else {
|
|
Module.pauseMainLoop();
|
|
}
|
|
}
|
|
|
|
// reset cart
|
|
function PicoReset() {
|
|
codo_command = 1;
|
|
codo_running = true;
|
|
|
|
Module.resumeMainLoop();
|
|
}
|
|
|
|
window.addEventListener('keydown', (e) => {
|
|
if (e.target.localName != 'input') {
|
|
switch (e.keyCode) {
|
|
case 37: // left
|
|
case 39: // right
|
|
e.preventDefault();
|
|
break;
|
|
case 38: // up
|
|
case 40: // down
|
|
e.preventDefault();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}, {
|
|
capture: true,
|
|
passive: false
|
|
});
|