diff --git a/app/src/modules/builder/agv/agv.tsx b/app/src/modules/builder/agv/agv.tsx index 0a2d14e..faa344b 100644 --- a/app/src/modules/builder/agv/agv.tsx +++ b/app/src/modules/builder/agv/agv.tsx @@ -95,7 +95,7 @@ const Agv: React.FC<ProcessContainerProps> = ({ /> {pair.points.slice(1).map((point, idx) => ( - <mesh position={[point.x, point.y, point.z]} key={idx}> + <mesh position={[point.x, point.y, point.z]} key={idx} visible={!isPlaying}> <sphereGeometry args={[0.3, 15, 15]} /> <meshStandardMaterial color="red" /> </mesh> diff --git a/app/src/modules/builder/agv/pathNavigator.tsx b/app/src/modules/builder/agv/pathNavigator.tsx index a82b53c..c1aac29 100644 --- a/app/src/modules/builder/agv/pathNavigator.tsx +++ b/app/src/modules/builder/agv/pathNavigator.tsx @@ -456,7 +456,7 @@ export default function PathNavigator({ }, []); return ( - <group name="path-navigator-lines"> + <group name="path-navigator-lines" visible={!isPlaying} > {toPickupPath.length > 0 && ( <Line points={toPickupPath} diff --git a/app/src/modules/simulation/process/useProcessAnimations.tsx b/app/src/modules/simulation/process/useProcessAnimations.tsx index 579ee3f..2c701e9 100644 --- a/app/src/modules/simulation/process/useProcessAnimations.tsx +++ b/app/src/modules/simulation/process/useProcessAnimations.tsx @@ -15,7 +15,7 @@ import { usePlayButtonStore, useResetButtonStore, } from "../../../store/usePlayButtonStore"; -import { usePlayAgv } from "../../../store/store"; +import { usePlayAgv, useSimulationStates } from "../../../store/store"; interface ArmBotProcess { triggerId: string; @@ -82,6 +82,7 @@ export const useProcessAnimation = ( const [animationStates, setAnimationStates] = useState<Record<string, EnhancedProcessAnimationState>>({}); const speedRef = useRef<number>(speed); const { PlayAgv, setPlayAgv } = usePlayAgv(); + const { simulationStates } = useSimulationStates(); // Effect hooks useEffect(() => { @@ -521,15 +522,19 @@ export const useProcessAnimation = ( connections.forEach((connection) => { const connectedModelUUID = connection.modelUUID; - const matchingArmPath = armBotPaths.find((path) => path.modeluuid === connectedModelUUID); + const isConveyor = simulationStates.find((state) => state.modeluuid === connectedModelUUID && state.type === "Conveyor"); - if (matchingArmPath) { - deferredArmBotUpdates.current.push({ - uuid: connectedModelUUID, - triggerId: trigger.uuid, - }); - } else { - shouldLog = true; + if (!isConveyor) { + const matchingArmPath = armBotPaths.find((path) => path.modeluuid === connectedModelUUID); + + if (matchingArmPath) { + deferredArmBotUpdates.current.push({ + uuid: connectedModelUUID, + triggerId: trigger.uuid, + }); + } else { + shouldLog = true; + } } }); }); @@ -592,6 +597,7 @@ export const useProcessAnimation = ( }, []); useEffect(() => { + // console.log('deferredArmBotUpdates: ', deferredArmBotUpdates); if (deferredArmBotUpdates.current.length > 0) { const updates = [...deferredArmBotUpdates.current]; deferredArmBotUpdates.current = []; diff --git a/app/src/types/simulationTypes.d.ts b/app/src/types/simulationTypes.d.ts index 75efcd3..e21d52f 100644 --- a/app/src/types/simulationTypes.d.ts +++ b/app/src/types/simulationTypes.d.ts @@ -161,3 +161,132 @@ export type EventData = { }; }; }; + + +interface AssetEventSchema { + modelUuid: string; + modelName: string; + position: [number, number, number]; + rotation: [number, number, number]; + state: "idle" | "running" | "stopped" | "disabled" | "error"; +} + +interface TriggerSchema { + triggerUuid: string; + triggerName: string; + triggerType: "onComplete" | "onStart" | "onStop" | "delay" | "onError"; + delay: number; + triggeredAsset: { + triggeredModel: { modelName: string, modelUuid: string }; + triggeredAction: { actionName: string, actionUuid: string }; + } | null; +} + +interface TransferPointSchema { + uuid: string; + position: [number, number, number]; + rotation: [number, number, number]; + actions: { + actionUuid: string; + actionName: string; + actionType: "default" | "spawn" | "swap" | "despawn"; + material: string | "inherit"; + delay: number | "inherit"; + spawnInterval: number | "inherit"; + spawnCount: number | "inherit"; + triggers: TriggerSchema[] | []; + }[]; +} + +interface VehiclePointSchema { + uuid: string; + position: [number, number, number]; + rotation: [number, number, number]; + actions: { + actionUuid: string; + actionName: string; + actionType: "travel"; + material: string; + unLoadDuration: number; + loadCapacity: number; + pickUpPoint: { x: number; y: number, z: number } | {}; + unLoadPoint: { x: number; y: number, z: number } | {}; + triggers: TriggerSchema[] | []; + }[]; +} + +interface RoboticArmPointSchema { + uuid: string; + position: [number, number, number]; + rotation: [number, number, number]; + actions: { + actionUuid: string; + actionName: string; + actionType: "pickAndPlace"; + process: { startPoint: string; endPoint: string }; + triggers: TriggerSchema[] | []; + }[]; +} + +interface MachinePointSchema { + uuid: string; + position: [number, number, number]; + rotation: [number, number, number]; + actions: { + actionUuid: string; + actionName: string; + actionType: "process"; + processTime: number; + swapMaterial: string; + triggers: TriggerSchema[] | []; + }[]; +} + +interface StoragePointSchema { + uuid: string; + position: [number, number, number]; + rotation: [number, number, number]; + actions: { + actionUuid: string; + actionName: string; + actionType: "storage"; + materials: { materialName: string; materialId: string; quantity: number }[]; + storageCapacity: number; + }[]; +} + +interface TransferEventSchema extends AssetEventSchema { + type: "transfer"; + speed: number; + points: TransferPointSchema[]; +} + +interface VehicleSchemaEvent extends AssetEventSchema { + type: "vehicle"; + speed: number; + point: VehiclePointSchema; +} + +interface RoboticArmSchemaEvent extends AssetEventSchema { + type: "roboticArm"; + speed: number; + point: RoboticArmPointSchema; +} + +interface MachineSchemaEvent extends AssetEventSchema { + type: "machine"; + point: MachinePointSchema; +} + +interface StorageSchemaEvent extends AssetEventSchema { + type: "storageUnit"; + point: StoragePointSchema; +} + +type EventsSchema = TransferEventSchema | VehicleSchemaEvent | RoboticArmSchemaEvent | MachineSchemaEvent | StorageSchemaEvent | []; + +type productsSchema = { + productName: string; + productId: string; + eventsData: EventsSchema[]; +}[] | [] \ No newline at end of file