Initial commit; Can render maps, AABBs and POIs

This commit is contained in:
Andrew 2022-01-13 05:01:59 +07:00
commit 592bacf2f8
4 changed files with 110081 additions and 0 deletions

133
app.js Normal file
View file

@ -0,0 +1,133 @@
'use strict';
let fileInput;
let levelSelector;
let trackSelector;
let debugRenderCheckbox;
/**
* @type MRGFile?
*/
let parsedFile = null;
/**
*
* @param {P5File} file
*/
const handleFile = function (file) {
if (file.name.endsWith(".mrg")) {
loadBytes(file.data, (file) => {
parsedFile = MRGFile.parse(file.bytes);
print(parsedFile);
fileInput.hide();
levelSelector.show();
}, (error) => {
print(error);
})
} else {
alert("unknown file type");
}
}
const levelSelected = function () {
let item = ~~levelSelector.value();
if (item === -1) {
trackSelector.hide();
} else {
while (trackSelector.elt.length > 0) {
trackSelector.elt.remove(0);
}
trackSelector.option("Select track", -1);
for (let i = 0; i < parsedFile.levels[item].count; i++) {
trackSelector.option(parsedFile.getTrack(item, i).name, i);
}
trackSelector.show();
trackSelector.removeAttribute("disabled");
}
}
function setup() {
fileInput = createFileInput(handleFile);
fileInput.position(20, 50);
levelSelector = createSelect();
levelSelector.position(20, 50);
levelSelector.hide();
levelSelector.option("Select level", -1);
levelSelector.option("Level 1", 0);
levelSelector.option("Level 2", 1);
levelSelector.option("Level 3", 2);
levelSelector.changed(levelSelected);
trackSelector = createSelect();
trackSelector.position(20, 80);
trackSelector.disable();
trackSelector.hide();
debugRenderCheckbox = createCheckbox("Do debug rendering?", true);
debugRenderCheckbox.position(20, 20);
createCanvas(document.body.clientWidth, document.body.clientHeight);
}
let x = 100;
let y = 100;
function draw() {
translate(width / 2 - x, height / 2 - y);
background(55);
let lev = ~~levelSelector.value();
let trk = ~~trackSelector.value();
if (lev !== -1 && trk !== -1) {
push();
{
strokeCap(SQUARE);
strokeWeight(2);
stroke("lime");
const track = parsedFile.getTrack(lev, trk);
for (let i = 1; i < track.trackData.mapPoints.length; i++) {
const pp = track.trackData.mapPoints[i-1];
const cp = track.trackData.mapPoints[i];
line(pp.x, -pp.y, cp.x, -cp.y);
}
const taabb = track.trackData.getAABB();
strokeWeight(6);
stroke("yellow");
point(track.trackData.playerStartPos.x, -track.trackData.playerStartPos.y);
stroke("red");
line(track.trackData.finishPos.x, -taabb.topLeft.y, track.trackData.finishPos.x, -taabb.bottomRight.y);
if (debugRenderCheckbox.checked()) {
strokeWeight(1);
noFill();
rectMode(CORNERS);
stroke("cyan");
rect(taabb.topLeft.x, -taabb.topLeft.y, taabb.bottomRight.x, -taabb.bottomRight.y);
}
}
pop();
}
if (keyIsDown(LEFT_ARROW)) {
x -= 5;
}
if (keyIsDown(RIGHT_ARROW)) {
x += 5;
}
if (keyIsDown(UP_ARROW)) {
y -= 5;
}
if (keyIsDown(DOWN_ARROW)) {
y += 5;
}
}