introduce tags, structs, and reticles
this was meant to be split into smaller changes, but I realised I edited my existing revision too late.
This commit is contained in:
parent
8356b6c750
commit
5b7d9586ea
26 changed files with 1113 additions and 351 deletions
|
@ -9,6 +9,7 @@ import {
|
|||
} from "rkgk/session.js";
|
||||
import { debounce } from "rkgk/framework.js";
|
||||
import { ReticleCursor } from "rkgk/reticle-renderer.js";
|
||||
import { selfController } from "rkgk/painter.js";
|
||||
|
||||
const updateInterval = 1000 / 60;
|
||||
|
||||
|
@ -175,14 +176,8 @@ function readUrl(urlString) {
|
|||
user.reticle.setCursor(x, y);
|
||||
}
|
||||
|
||||
if (wallEvent.kind.event == "setBrush") {
|
||||
user.setBrush(wallEvent.kind.brush);
|
||||
}
|
||||
|
||||
if (wallEvent.kind.event == "plot") {
|
||||
for (let { x, y } of wallEvent.kind.points) {
|
||||
user.renderBrushToChunks(wall, x, y);
|
||||
}
|
||||
if (wallEvent.kind.event == "interact") {
|
||||
user.simulate(wall, wallEvent.kind.interactions);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -230,30 +225,21 @@ function readUrl(urlString) {
|
|||
reportCursor(event.x, event.y);
|
||||
});
|
||||
|
||||
let plotQueue = [];
|
||||
async function flushPlotQueue() {
|
||||
let points = plotQueue.splice(0, plotQueue.length);
|
||||
if (points.length != 0) {
|
||||
session.sendPlot(points);
|
||||
let interactionQueue = [];
|
||||
function flushInteractionQueue() {
|
||||
if (interactionQueue.length != 0) {
|
||||
session.sendInteraction(interactionQueue);
|
||||
interactionQueue.splice(0);
|
||||
}
|
||||
}
|
||||
|
||||
setInterval(flushPlotQueue, updateInterval);
|
||||
setInterval(flushInteractionQueue, updateInterval);
|
||||
|
||||
canvasRenderer.addEventListener(".paint", async (event) => {
|
||||
plotQueue.push({ x: event.x, y: event.y });
|
||||
|
||||
if (currentUser.isBrushOk) {
|
||||
brushEditor.resetErrors();
|
||||
|
||||
let result = currentUser.renderBrushToChunks(wall, event.x, event.y);
|
||||
if (result.status == "error") {
|
||||
brushEditor.renderHakuResult(
|
||||
result.phase == "eval" ? "Evaluation" : "Rendering",
|
||||
result.result,
|
||||
);
|
||||
}
|
||||
}
|
||||
canvasRenderer.addEventListener(".interact", async (event) => {
|
||||
let result = await currentUser.haku.evalBrush(
|
||||
selfController(interactionQueue, wall, event),
|
||||
);
|
||||
brushEditor.renderHakuResult(result.phase == "eval" ? "Evaluation" : "Rendering", result);
|
||||
});
|
||||
|
||||
canvasRenderer.addEventListener(".viewportUpdate", () => reticleRenderer.render());
|
||||
|
@ -270,20 +256,23 @@ function readUrl(urlString) {
|
|||
return;
|
||||
}
|
||||
|
||||
let previewResult = brushPreview.renderBrush(currentUser.haku);
|
||||
if (previewResult.status == "error") {
|
||||
brushEditor.renderHakuResult(
|
||||
previewResult.phase == "eval" ? "Evaluation" : "Rendering",
|
||||
previewResult.result,
|
||||
);
|
||||
}
|
||||
brushPreview.renderBrush(currentUser.haku).then((previewResult) => {
|
||||
if (previewResult.status == "error") {
|
||||
brushEditor.renderHakuResult(
|
||||
previewResult.phase == "eval" ? "Evaluation" : "Rendering",
|
||||
previewResult.result,
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
compileBrush();
|
||||
brushEditor.addEventListener(".codeChanged", async () => {
|
||||
flushPlotQueue();
|
||||
compileBrush();
|
||||
session.sendSetBrush(brushEditor.code);
|
||||
interactionQueue.push({
|
||||
kind: "setBrush",
|
||||
brush: brushEditor.code,
|
||||
});
|
||||
});
|
||||
|
||||
session.eventLoop();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue