Refactor PathRecorder to utilize server-side pathfinding for waypoint navigation
This commit is contained in:
@@ -13,9 +13,6 @@ const PathRecorder = ({ turtles, selectedTurtle, apiUrl }) => {
|
|||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
const [playingBack, setPlayingBack] = useState(false);
|
const [playingBack, setPlayingBack] = useState(false);
|
||||||
|
|
||||||
const moveForward = useTurtleStore((state) => state.moveForward);
|
|
||||||
const moveUp = useTurtleStore((state) => state.moveUp);
|
|
||||||
const moveDown = useTurtleStore((state) => state.moveDown);
|
|
||||||
const setTurtleState = useTurtleStore((state) => state.setTurtleState);
|
const setTurtleState = useTurtleStore((state) => state.setTurtleState);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -153,44 +150,23 @@ const PathRecorder = ({ turtles, selectedTurtle, apiUrl }) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setPlayingBack(true);
|
setPlayingBack(true);
|
||||||
showMessage(`Playing back ${waypoints.length} waypoints...`, 'info');
|
showMessage(`Playing back ${waypoints.length} waypoints via server pathfinding...`, 'info');
|
||||||
|
|
||||||
const turtleId = selectedTurtle.turtleID;
|
const turtleId = selectedTurtle.turtleID;
|
||||||
|
|
||||||
// Determine movement commands between consecutive waypoints
|
// Use server-side pathfinding to navigate to each waypoint sequentially
|
||||||
for (let i = 1; i < waypoints.length; i++) {
|
for (let i = 0; i < waypoints.length; i++) {
|
||||||
const prev = waypoints[i - 1];
|
const wp = waypoints[i];
|
||||||
const curr = waypoints[i];
|
|
||||||
|
|
||||||
const dx = curr.x - prev.x;
|
// Navigate to each waypoint using the server's moving state
|
||||||
const dy = curr.y - prev.y;
|
await setTurtleState(turtleId, 'moving', { target: { x: wp.x, y: wp.y, z: wp.z } });
|
||||||
const dz = curr.z - prev.z;
|
|
||||||
|
|
||||||
// Vertical movement
|
// Wait for turtle to arrive (poll position or just add delay)
|
||||||
if (dy > 0) {
|
await new Promise(resolve => setTimeout(resolve, 500));
|
||||||
for (let j = 0; j < dy; j++) sendCommand(turtleId, 'up');
|
|
||||||
} else if (dy < 0) {
|
|
||||||
for (let j = 0; j < Math.abs(dy); j++) sendCommand(turtleId, 'down');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Horizontal movement - send as forward movements with turns
|
|
||||||
if (dx > 0) {
|
|
||||||
for (let j = 0; j < dx; j++) sendCommand(turtleId, 'forward');
|
|
||||||
} else if (dx < 0) {
|
|
||||||
for (let j = 0; j < Math.abs(dx); j++) sendCommand(turtleId, 'forward');
|
|
||||||
}
|
|
||||||
if (dz > 0) {
|
|
||||||
for (let j = 0; j < dz; j++) sendCommand(turtleId, 'forward');
|
|
||||||
} else if (dz < 0) {
|
|
||||||
for (let j = 0; j < Math.abs(dz); j++) sendCommand(turtleId, 'forward');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Small delay between waypoint groups to avoid flooding
|
|
||||||
await new Promise(resolve => setTimeout(resolve, 200));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setPlayingBack(false);
|
setPlayingBack(false);
|
||||||
showMessage('Playback complete! Commands queued for turtle.', 'success');
|
showMessage('Playback complete! Turtle navigating via server.', 'success');
|
||||||
};
|
};
|
||||||
|
|
||||||
const showMessage = (text, type) => {
|
const showMessage = (text, type) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user