Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | import type React from "react"; import { TILE_SIZE } from "consts"; import type { SceneCursorViewModel } from "../SceneCursorView"; export type SceneCursorEvent<T> = { x: number; y: number; pX: number; pY: number; sceneId: string; isOverScene: boolean; raw: T; }; export type SceneCursorMouseDownRawEvent = | React.MouseEvent<HTMLDivElement, MouseEvent> | (Pick<MouseEvent, "altKey" | "ctrlKey" | "metaKey" | "shiftKey"> & { nativeEvent: MouseEvent; }); export type SceneCursorMouseDownHandler = ( e: SceneCursorEvent<SceneCursorMouseDownRawEvent>, ) => boolean; export type SceneCursorMouseMoveHandler = ( e: SceneCursorEvent<MouseEvent>, ) => void; export type SceneCursorMouseUpHandler = ( e: SceneCursorEvent<MouseEvent>, ) => void; export type SceneCursorCancelHandler = () => void; export interface SceneCursorMode { id: string; enabled: boolean; viewPriority: number; eventPriority: number; captureEventsWhenEnabled?: boolean; view?: SceneCursorViewModel; onMouseDown?: SceneCursorMouseDownHandler; onMouseMove?: SceneCursorMouseMoveHandler; onMouseUp?: SceneCursorMouseUpHandler; onCancel?: SceneCursorCancelHandler; } export const DEFAULT_SCENE_CURSOR_VIEW: SceneCursorViewModel = { variant: "default", width: TILE_SIZE, height: TILE_SIZE, }; export const getSceneCursorView = ( modes: readonly SceneCursorMode[], ): SceneCursorViewModel => { let bestMode: SceneCursorMode | undefined; for (const mode of modes) { Iif (!mode.enabled || !mode.view) { continue; } Iif (!bestMode || mode.viewPriority > bestMode.viewPriority) { bestMode = mode; } } return bestMode?.view ?? DEFAULT_SCENE_CURSOR_VIEW; }; export const getSceneCursorEventModes = ( modes: readonly SceneCursorMode[], ): SceneCursorMode[] => { return modes .filter((mode) => mode.enabled) .sort((a, b) => b.eventPriority - a.eventPriority); }; export const getCapturedSceneCursorEventMode = ( modes: readonly SceneCursorMode[], ): SceneCursorMode | undefined => { return getSceneCursorEventModes(modes).find( (mode) => mode.captureEventsWhenEnabled, ); }; |