Files
painter/painter-js/src/tools/hand-tool.js
Gabriel Kaszewski dc6bff027a
Some checks failed
CI / ci (push) Failing after 1m9s
Add UI improvements + refactor frontend to event-driven architecture
Features: disabled place button during cooldown, beep on cooldown end,
hand/paint mode toggle with Space shortcut, soldier count pop animation.

Architecture: centralized DOM refs, AppState store replacing localStorage
polling, event bus decoupling socket from handlers, keyboard manager,
tool manager with Strategy pattern (paint-tool, hand-tool).
2026-08-18 10:49:16 +02:00

35 lines
923 B
JavaScript

export const createHandTool = ({ viewport }) => {
let isDragging = false;
let dragStartX = 0;
let dragStartY = 0;
let scrollStartLeft = 0;
let scrollStartTop = 0;
return {
name: "hand",
cursor: "grab",
onMouseDown: (event) => {
isDragging = true;
dragStartX = event.clientX;
dragStartY = event.clientY;
scrollStartLeft = viewport.scrollLeft;
scrollStartTop = viewport.scrollTop;
viewport.style.cursor = "grabbing";
event.preventDefault();
},
onMouseMove: (event) => {
if (!isDragging) return;
viewport.scrollLeft = scrollStartLeft - (event.clientX - dragStartX);
viewport.scrollTop = scrollStartTop - (event.clientY - dragStartY);
},
onMouseUp: () => {
if (!isDragging) return;
isDragging = false;
viewport.style.cursor = "grab";
},
onDeactivate: () => {
isDragging = false;
},
};
};