Add UI improvements + refactor frontend to event-driven architecture
Some checks failed
CI / ci (push) Failing after 1m9s
Some checks failed
CI / ci (push) Failing after 1m9s
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).
This commit is contained in:
34
painter-js/src/tools/hand-tool.js
Normal file
34
painter-js/src/tools/hand-tool.js
Normal file
@@ -0,0 +1,34 @@
|
||||
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;
|
||||
},
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user