From d89c013c4fdeb227e04e7d2c9c43016ebf85ccf1 Mon Sep 17 00:00:00 2001 From: James Date: Tue, 15 Oct 2024 17:32:53 +1300 Subject: [PATCH] feat: :alembic: send keyboard steps relative to received datum --- client/src/app/place/PlaceOverlay.tsx | 46 +++++++++++++++++++++++++-- client/src/lib/socket.ts | 7 +++- 2 files changed, 50 insertions(+), 3 deletions(-) diff --git a/client/src/app/place/PlaceOverlay.tsx b/client/src/app/place/PlaceOverlay.tsx index f96f3a1..045e271 100644 --- a/client/src/app/place/PlaceOverlay.tsx +++ b/client/src/app/place/PlaceOverlay.tsx @@ -275,7 +275,7 @@ export function PlaceOverlay({ socketUrl, overlaySize, circleSize, hideOverlay = * Shift+Direction will cause the gantry to step a fixed distance in the specified direction */ - const previousOffset = targetOffset ?? { x:0.5, y:0.5 } + const previousOffset = targetOffset ?? currentMachineState?.gantryPosition ?? { x: 0.5, y: 0.5 } if (event.shiftKey) { @@ -395,7 +395,49 @@ export function PlaceOverlay({ socketUrl, overlaySize, circleSize, hideOverlay = return } - if (!targetPositionOffsets?.length) return + if (!targetPositionOffsets?.length) { + const unclampedOffset = { ...previousOffset } + switch (event.code) { + case 'KeyR': + case 'KeyS': + case 'ArrowDown': + case 'KeyJ': + unclampedOffset.y = previousOffset.y + 0.0002 + break + case 'KeyW': + case 'ArrowUp': + case 'KeyK': + unclampedOffset.y = previousOffset.y - 0.0002 + break + case 'KeyA': + case 'ArrowLeft': + case 'KeyH': + unclampedOffset.x = previousOffset.x - 0.0002 + break + case 'KeyD': + case 'ArrowRight': + case 'KeyL': + unclampedOffset.x = previousOffset.x + 0.0002 + break + default: + return + } + + const clampedOffset = { + x: Math.max(0, Math.min(1, unclampedOffset.x)), + y: Math.max(0, Math.min(1, unclampedOffset.y)), + } + + if ((clampedOffset.x === 0.5) && (clampedOffset.y === 0.5)) { + console.log('Setting null') + setTargetOffset(null) + } + else { + setTargetOffset(clampedOffset) + socket.sendTargetDeltas(webSocket, clampedOffset) + } + return + } const getFlatMapper = (searchAngleDegrees: number, searchArcDegrees: number) => (targetPosition: Position) => { const targetDeltas = { diff --git a/client/src/lib/socket.ts b/client/src/lib/socket.ts index 491cb14..b8bc4a7 100644 --- a/client/src/lib/socket.ts +++ b/client/src/lib/socket.ts @@ -82,7 +82,12 @@ export async function processMessage(data: unknown): Promise { actionType: 'UPDATE_STATE', messageType: decodedMessage.tag, rawPayload, - payload: decodedMessage.machineState, + payload: { + gantryPosition: denormalisePosition(decodedMessage.machineState.gantryPosition), + isHeadDown: decodedMessage.machineState.isHeadDown, + isVacuumEngaged: decodedMessage.machineState.isVacuumEngaged, + isComponentPicked: decodedMessage.machineState.isComponentPicked, + }, silent: true, }