From e38fa82d3b5816cc140ab5547225b0c72a6e2c93 Mon Sep 17 00:00:00 2001 From: Reimar Date: Tue, 14 Oct 2025 13:18:55 +0200 Subject: [PATCH] add mouse events --- src/gamelib.js | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/gamelib.js b/src/gamelib.js index b29f455..51e4960 100644 --- a/src/gamelib.js +++ b/src/gamelib.js @@ -2,6 +2,16 @@ export class Gamelib { keysPressed = new Set(); keyPressHandlers = new Map(); keyReleaseHandlers = new Map(); + mouseMoveHandler = null; + mouseButtonsPressed = new Set(); + mouseDownHandlers = new Map(); + mouseUpHandlers = new Map(); + mouseX = null; + mouseY = null; + + MouseButtonLeft = 0; + MouseButtonRight = 1; + MouseButtonMiddle = 2; constructor(console, codeStopper, assetProvider, canvasElement) { this.console = console; @@ -25,6 +35,27 @@ export class Gamelib { this.keysPressed.delete(ev.key); this.keyReleaseHandlers.get(ev.key)?.(); }); + + canvasElement.addEventListener("mousemove", (ev) => { + this.mouseX = ev.offsetX; + this.mouseY = ev.offsetY; + + this.mouseMoveHandler?.(ev.offsetX, ev.offsetY, ev.movementX, ev.movementY); + }); + + canvasElement.addEventListener("mousedown", (ev) => { + this.mouseButtonsPressed.add(ev.button); + this.mouseDownHandlers.get(ev.button)?.(ev.offsetX, ev.offsetY); + }); + + canvasElement.addEventListener("mouseup", (ev) => { + this.mouseButtonsPressed.delete(ev.button); + this.mouseUpHandlers.get(ev.button)?.(ev.offsetX, ev.offsetY); + }); + + canvasElement.addEventListener("contextmenu", (ev) => { + ev.preventDefault(); + }); } println(msg) { @@ -65,6 +96,22 @@ export class Gamelib { this.keyReleaseHandlers.set(key, handlerFunction); } + onMouseMove(handlerFunction) { + this.mouseMoveHandler = handlerFunction; + } + + isClicking(button = this.MouseButtonLeft) { + return this.mouseButtonsPressed.has(button); + } + + onClick(handlerFunction, button = this.MouseButtonLeft) { + this.mouseDownHandlers.set(button, handlerFunction); + } + + onClickRelease(handlerFunction, button = this.MouseButtonLeft) { + this.mouseUpHandlers.set(button, handlerFunction); + } + rgb(red, green, blue) { return `rgb(${red}, ${green}, ${blue})`; }