From 7cc0a83075fc8c9fa770c753ea41abc2e66dfd79 Mon Sep 17 00:00:00 2001 From: Jerald-Golden-B Date: Thu, 8 May 2025 14:00:36 +0530 Subject: [PATCH] Refactor vehicle material handling: update MaterialAnimator and VehicleInstance to use currentMaterials array, and modify useVehicleStore for material management --- .../instances/animator/materialAnimator.tsx | 2 +- .../instances/instance/vehicleInstance.tsx | 9 +++--- app/src/store/simulation/useVehicleStore.ts | 28 ++++++++++++++++--- app/src/types/simulationTypes.d.ts | 2 +- 4 files changed, 30 insertions(+), 11 deletions(-) diff --git a/app/src/modules/simulation/vehicle/instances/animator/materialAnimator.tsx b/app/src/modules/simulation/vehicle/instances/animator/materialAnimator.tsx index 4b9eb1c..e741bba 100644 --- a/app/src/modules/simulation/vehicle/instances/animator/materialAnimator.tsx +++ b/app/src/modules/simulation/vehicle/instances/animator/materialAnimator.tsx @@ -40,7 +40,7 @@ const MaterialAnimator = ({ agvDetail }: MaterialAnimatorProps) => { <> ('stationed'); const [path, setPath] = useState<[number, number, number][]>([]); let isIncrememtable = useRef(true); @@ -48,7 +47,7 @@ function VehicleInstance({ agvDetail }: { agvDetail: VehicleStatus }) { const increment = () => { if (isIncrememtable.current) { incrementVehicleLoad(agvDetail.modelUuid, 10); - setMaterialType(agvDetail.modelUuid, 'Material 1') + addCurrentMaterial(agvDetail.modelUuid, 'Material 1', '123'); isIncrememtable.current = false; } } @@ -74,7 +73,7 @@ function VehicleInstance({ agvDetail }: { agvDetail: VehicleStatus }) { // increment(); // }, 5000); - if (agvDetail.currentLoad === agvDetail.point.action.loadCapacity && agvDetail.materialType) { + if (agvDetail.currentLoad === agvDetail.point.action.loadCapacity && agvDetail.currentMaterials.length > 0) { if (agvDetail.point.action.pickUpPoint && agvDetail.point.action.unLoadPoint) { const toDrop = computePath( agvDetail.point.action.pickUpPoint.position, @@ -125,7 +124,7 @@ function VehicleInstance({ agvDetail }: { agvDetail: VehicleStatus }) { setVehicleState(agvDetail.modelUuid, 'idle'); setVehicleActive(agvDetail.modelUuid, false); setPath([]); - setMaterialType(agvDetail.modelUuid, null) + clearCurrentMaterials(agvDetail.modelUuid) vehicleStatus(agvDetail.modelUuid, 'Reached pickup point again, cycle complete'); } } diff --git a/app/src/store/simulation/useVehicleStore.ts b/app/src/store/simulation/useVehicleStore.ts index 455457a..83a6bbc 100644 --- a/app/src/store/simulation/useVehicleStore.ts +++ b/app/src/store/simulation/useVehicleStore.ts @@ -21,7 +21,9 @@ interface VehiclesStore { modelUuid: string, newState: VehicleStatus["state"] ) => void; - setMaterialType: (modelUuid: string, materialType: string | null) => void; + addCurrentMaterial: (modelUuid: string, materialType: string, materialId: string) => void; + setCurrentMaterials: (modelUuid: string, materials: { materialType: string; materialId: string; }[]) => void; + clearCurrentMaterials: (modelUuid: string) => void; incrementActiveTime: (modelUuid: string, incrementBy: number) => void; incrementIdleTime: (modelUuid: string, incrementBy: number) => void; @@ -48,7 +50,7 @@ export const useVehicleStore = create()( idleTime: 0, activeTime: 0, currentLoad: 0, - materialType: null, + currentMaterials: [], distanceTraveled: 0, }); } @@ -132,11 +134,29 @@ export const useVehicleStore = create()( }); }, - setMaterialType: (modelUuid, materialType) => { + addCurrentMaterial: (modelUuid, materialType, materialId) => { set((state) => { const vehicle = state.vehicles.find((v) => v.modelUuid === modelUuid); if (vehicle) { - vehicle.materialType = materialType; + vehicle.currentMaterials.push({ materialType, materialId }); + } + }); + }, + + setCurrentMaterials: (modelUuid, materials) => { + set((state) => { + const vehicle = state.vehicles.find((v) => v.modelUuid === modelUuid); + if (vehicle) { + vehicle.currentMaterials = materials; + } + }); + }, + + clearCurrentMaterials: (modelUuid) => { + set((state) => { + const vehicle = state.vehicles.find((v) => v.modelUuid === modelUuid); + if (vehicle) { + vehicle.currentMaterials = []; } }); }, diff --git a/app/src/types/simulationTypes.d.ts b/app/src/types/simulationTypes.d.ts index 04b742d..8a9f01d 100644 --- a/app/src/types/simulationTypes.d.ts +++ b/app/src/types/simulationTypes.d.ts @@ -181,7 +181,7 @@ interface VehicleStatus extends VehicleEventSchema { idleTime: number; activeTime: number; currentLoad: number; - materialType: string | null; + currentMaterials: { materialType: string; materialId: string; }[]; distanceTraveled: number; }