hover / selection manager

This commit is contained in:
wass08
2026-01-21 10:45:48 +09:00
parent c0da9701b4
commit b1d6f61e4f
5 changed files with 246 additions and 135 deletions
+19 -18
View File
@@ -1,33 +1,34 @@
import { type EventSuffix, emitter, type GridEvent } from '@pascal-app/core'
import type { ThreeEvent } from '@react-three/fiber'
import { type EventSuffix, emitter, type GridEvent } from "@pascal-app/core";
import type { ThreeEvent } from "@react-three/fiber";
export function useGridEvents() {
const emit = (suffix: EventSuffix, e: ThreeEvent<PointerEvent>) => {
const eventKey = `grid:${suffix}` as `grid:${EventSuffix}`
const eventKey = `grid:${suffix}` as `grid:${EventSuffix}`;
const payload: GridEvent = {
position: [e.point.x, e.point.y, e.point.z],
}
nativeEvent: e,
};
emitter.emit(eventKey, payload)
}
emitter.emit(eventKey, payload);
};
return {
onPointerDown: (e: ThreeEvent<PointerEvent>) => {
if (e.button !== 0) return
emit('pointerdown', e)
if (e.button !== 0) return;
emit("pointerdown", e);
},
onPointerUp: (e: ThreeEvent<PointerEvent>) => {
if (e.button !== 0) return
emit('pointerup', e)
if (e.button !== 0) return;
emit("pointerup", e);
},
onClick: (e: ThreeEvent<PointerEvent>) => {
if (e.button !== 0) return
emit('click', e)
if (e.button !== 0) return;
emit("click", e);
},
onPointerEnter: (e: ThreeEvent<PointerEvent>) => emit('enter', e),
onPointerLeave: (e: ThreeEvent<PointerEvent>) => emit('leave', e),
onPointerMove: (e: ThreeEvent<PointerEvent>) => emit('move', e),
onDoubleClick: (e: ThreeEvent<PointerEvent>) => emit('double-click', e),
onContextMenu: (e: ThreeEvent<PointerEvent>) => emit('context-menu', e),
}
onPointerEnter: (e: ThreeEvent<PointerEvent>) => emit("enter", e),
onPointerLeave: (e: ThreeEvent<PointerEvent>) => emit("leave", e),
onPointerMove: (e: ThreeEvent<PointerEvent>) => emit("move", e),
onDoubleClick: (e: ThreeEvent<PointerEvent>) => emit("double-click", e),
onContextMenu: (e: ThreeEvent<PointerEvent>) => emit("context-menu", e),
};
}