ditch setTimeout
This commit is contained in:
parent
4eb872944a
commit
ade26b24b1
2 changed files with 6 additions and 28 deletions
|
|
@ -140,9 +140,7 @@ const mach = {
|
||||||
observer: undefined,
|
observer: undefined,
|
||||||
events: [],
|
events: [],
|
||||||
changes: [],
|
changes: [],
|
||||||
update: undefined,
|
|
||||||
wait_event_timeout: 0,
|
wait_event_timeout: 0,
|
||||||
wait_event_timer: undefined,
|
|
||||||
|
|
||||||
init(wasm) {
|
init(wasm) {
|
||||||
this.wasm = wasm;
|
this.wasm = wasm;
|
||||||
|
|
@ -184,14 +182,6 @@ const mach = {
|
||||||
throw Error(mach.getString(str, len));
|
throw Error(mach.getString(str, len));
|
||||||
},
|
},
|
||||||
|
|
||||||
machClearEventTimer() {
|
|
||||||
if (mach.wait_event_timer !== undefined) {
|
|
||||||
clearTimeout(mach.wait_event_timer);
|
|
||||||
mach.wait_event_timer = undefined;
|
|
||||||
window.requestAnimationFrame(mach.update);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
machCanvasInit(width, height, id) {
|
machCanvasInit(width, height, id) {
|
||||||
let canvas = document.createElement("canvas");
|
let canvas = document.createElement("canvas");
|
||||||
canvas.id = "#mach-canvas-" + mach.canvases.length;
|
canvas.id = "#mach-canvas-" + mach.canvases.length;
|
||||||
|
|
@ -209,39 +199,32 @@ const mach = {
|
||||||
|
|
||||||
canvas.addEventListener("keydown", (ev) => {
|
canvas.addEventListener("keydown", (ev) => {
|
||||||
mach.events.push(...[1, convertKeyCode(ev.code)]);
|
mach.events.push(...[1, convertKeyCode(ev.code)]);
|
||||||
mach.machClearEventTimer();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
canvas.addEventListener("keyup", (ev) => {
|
canvas.addEventListener("keyup", (ev) => {
|
||||||
mach.events.push(...[2, convertKeyCode(ev.code)]);
|
mach.events.push(...[2, convertKeyCode(ev.code)]);
|
||||||
mach.machClearEventTimer();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
canvas.addEventListener("mousemove", (ev) => {
|
canvas.addEventListener("mousemove", (ev) => {
|
||||||
mach.events.push(...[3, ev.clientX, ev.clientY]);
|
mach.events.push(...[3, ev.clientX, ev.clientY]);
|
||||||
mach.machClearEventTimer();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
canvas.addEventListener("mousedown", (ev) => {
|
canvas.addEventListener("mousedown", (ev) => {
|
||||||
mach.events.push(...[4, ev.button]);
|
mach.events.push(...[4, ev.button]);
|
||||||
mach.machClearEventTimer();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
canvas.addEventListener("mouseup", (ev) => {
|
canvas.addEventListener("mouseup", (ev) => {
|
||||||
mach.events.push(...[5, ev.button]);
|
mach.events.push(...[5, ev.button]);
|
||||||
mach.machClearEventTimer();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
canvas.addEventListener("wheel", (ev) => {
|
canvas.addEventListener("wheel", (ev) => {
|
||||||
mach.events.push(...[6, ev.deltaX, ev.deltaY]);
|
mach.events.push(...[6, ev.deltaX, ev.deltaY]);
|
||||||
mach.machClearEventTimer();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
canvas.addEventListener("mach-canvas-resize", (ev) => {
|
canvas.addEventListener("mach-canvas-resize", (ev) => {
|
||||||
const cv_index = mach.canvases.findIndex((el) => el.canvas === ev.currentTarget);
|
const cv_index = mach.canvases.findIndex((el) => el.canvas === ev.currentTarget);
|
||||||
const cv = mach.canvases[cv_index];
|
const cv = mach.canvases[cv_index];
|
||||||
mach.changes.push(...[1, cv.canvas.width, cv.canvas.height, window.devicePixelRatio]);
|
mach.changes.push(...[1, cv.canvas.width, cv.canvas.height, window.devicePixelRatio]);
|
||||||
mach.machClearEventTimer();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
document.body.appendChild(canvas);
|
document.body.appendChild(canvas);
|
||||||
|
|
|
||||||
|
|
@ -25,22 +25,17 @@
|
||||||
instance.exports.wasmInit();
|
instance.exports.wasmInit();
|
||||||
|
|
||||||
let frame = true;
|
let frame = true;
|
||||||
|
let last_update_time = performance.now();
|
||||||
let update = function() {{
|
let update = function() {{
|
||||||
if (!frame) return;
|
if (!frame) return;
|
||||||
instance.exports.wasmUpdate();
|
if (mach.machHasEvent() ||
|
||||||
if (mach.wait_event_timeout > 0) {{
|
(last_update_time + (mach.wait_event_timeout * 1000)) <= performance.now()) {{
|
||||||
mach.wait_event_timer = setTimeout(() => {{
|
instance.exports.wasmUpdate();
|
||||||
window.requestAnimationFrame(update);
|
last_update_time = performance.now();
|
||||||
}},
|
|
||||||
mach.wait_event_timeout * 1000);
|
|
||||||
}}
|
|
||||||
else {{
|
|
||||||
window.requestAnimationFrame(update);
|
|
||||||
}}
|
}}
|
||||||
|
window.requestAnimationFrame(update);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
mach.update = update;
|
|
||||||
|
|
||||||
window.requestAnimationFrame(update);
|
window.requestAnimationFrame(update);
|
||||||
|
|
||||||
window.addEventListener("mach-close", () => {{
|
window.addEventListener("mach-close", () => {{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue