import PolygonGenerator from "./polygonGenerator"; import { useThree } from "@react-three/fiber"; import { useEffect, useMemo, useRef, useState } from "react"; import * as THREE from "three"; import * as Types from "../../../types/world/worldTypes"; import PathNavigator from "./pathNavigator"; import NavMeshDetails from "./navMeshDetails"; import { useSelectedActionSphere, useSimulationPaths, } from "../../../store/store"; import * as CONSTANTS from "../../../types/world/worldConstants"; const Agv = ({ lines, }: { lines: Types.RefLines; }) => { const [pathPoints, setPathPoints] = useState< { modelUuid: string; modelSpeed: number; bufferTime: number; points: { x: number; y: number; z: number }[]; hitCount: number; }[] >([]); const { simulationPaths } = useSimulationPaths(); const { selectedActionSphere } = useSelectedActionSphere(); useEffect(() => { if (!Array.isArray(simulationPaths)) { } else { let agvModels = simulationPaths.filter( (val: any) => val.modelName === "agv" ); let findMesh = agvModels.filter( (val: any) => val.modeluuid === selectedActionSphere?.path?.modeluuid && val.type === "Vehicle" ); const result = findMesh.length > 0 && findMesh[0].type === "Vehicle" && typeof findMesh[0].points?.actions.start === "object" && typeof findMesh[0].points?.actions.end === "object" && "x" in findMesh[0].points.actions.start && "y" in findMesh[0].points.actions.start && "x" in findMesh[0].points.actions.end && "y" in findMesh[0].points.actions.end ? [ { modelUuid: findMesh[0].modeluuid, // Ensure it's a number modelSpeed: findMesh[0].points.speed, bufferTime: findMesh[0].points.actions.buffer, hitCount: findMesh[0].points.actions.hitCount, points: [ { x: findMesh[0].position[0], y: findMesh[0].position[1], z: findMesh[0].position[2], }, { x: findMesh[0].points.actions.start.x, y: 0, z: findMesh[0].points.actions.start.y, }, { x: findMesh[0].points.actions.end.x, y: 0, z: findMesh[0].points.actions.end.y, }, ], }, ] : []; if (result.length > 0) { // setPathPoints((prev) => [...prev, ...result]); setPathPoints((prev) => { const existingIndex = prev.findIndex( (item) => item.modelUuid === result[0].modelUuid ); if (existingIndex !== -1) { const updatedPathPoints = [...prev]; updatedPathPoints[existingIndex] = result[0]; return updatedPathPoints; } else { return [...prev, ...result]; } }); } } // setPathPoints((prev) => { // const existingUUIDs = new Set(prev.map((item) => item.uuid)); // const newItems = result.filter( // (item) => !existingUUIDs.has(item.uuid) // ); // return [...prev, ...newItems]; // }); }, [simulationPaths, selectedActionSphere]); let groupRef = useRef() as Types.RefGroup; const [navMesh, setNavMesh] = useState(); return ( <> {pathPoints.map((pair, i) => ( <> {/* {pair.points.length > 2 && ( <> )} */} ))} ); }; export default Agv;