Refactor vehicle material handling: update MaterialAnimator and VehicleInstance to use currentMaterials array, and modify useVehicleStore for material management

This commit is contained in:
Jerald-Golden-B 2025-05-08 14:00:36 +05:30
parent 33a9aa6ce5
commit 7cc0a83075
4 changed files with 30 additions and 11 deletions

View File

@ -40,7 +40,7 @@ const MaterialAnimator = ({ agvDetail }: MaterialAnimatorProps) => {
<> <>
<MaterialModel <MaterialModel
matRef={meshRef} matRef={meshRef}
materialType={agvDetail.materialType || 'Default material'} materialType={agvDetail.currentMaterials[0].materialType || 'Default material'}
/> />
<Html <Html

View File

@ -9,9 +9,8 @@ import MaterialAnimator from '../animator/materialAnimator';
function VehicleInstance({ agvDetail }: { agvDetail: VehicleStatus }) { function VehicleInstance({ agvDetail }: { agvDetail: VehicleStatus }) {
const { navMesh } = useNavMesh(); const { navMesh } = useNavMesh();
const vehicleRef: any = useRef();
const { isPlaying } = usePlayButtonStore(); const { isPlaying } = usePlayButtonStore();
const { vehicles, setVehicleActive, setVehicleState, incrementVehicleLoad, setMaterialType, setVehicleLoad } = useVehicleStore(); const { vehicles, setVehicleActive, setVehicleState, incrementVehicleLoad, addCurrentMaterial, clearCurrentMaterials, setVehicleLoad } = useVehicleStore();
const [currentPhase, setCurrentPhase] = useState<string>('stationed'); const [currentPhase, setCurrentPhase] = useState<string>('stationed');
const [path, setPath] = useState<[number, number, number][]>([]); const [path, setPath] = useState<[number, number, number][]>([]);
let isIncrememtable = useRef<boolean>(true); let isIncrememtable = useRef<boolean>(true);
@ -48,7 +47,7 @@ function VehicleInstance({ agvDetail }: { agvDetail: VehicleStatus }) {
const increment = () => { const increment = () => {
if (isIncrememtable.current) { if (isIncrememtable.current) {
incrementVehicleLoad(agvDetail.modelUuid, 10); incrementVehicleLoad(agvDetail.modelUuid, 10);
setMaterialType(agvDetail.modelUuid, 'Material 1') addCurrentMaterial(agvDetail.modelUuid, 'Material 1', '123');
isIncrememtable.current = false; isIncrememtable.current = false;
} }
} }
@ -74,7 +73,7 @@ function VehicleInstance({ agvDetail }: { agvDetail: VehicleStatus }) {
// increment(); // increment();
// }, 5000); // }, 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) { if (agvDetail.point.action.pickUpPoint && agvDetail.point.action.unLoadPoint) {
const toDrop = computePath( const toDrop = computePath(
agvDetail.point.action.pickUpPoint.position, agvDetail.point.action.pickUpPoint.position,
@ -125,7 +124,7 @@ function VehicleInstance({ agvDetail }: { agvDetail: VehicleStatus }) {
setVehicleState(agvDetail.modelUuid, 'idle'); setVehicleState(agvDetail.modelUuid, 'idle');
setVehicleActive(agvDetail.modelUuid, false); setVehicleActive(agvDetail.modelUuid, false);
setPath([]); setPath([]);
setMaterialType(agvDetail.modelUuid, null) clearCurrentMaterials(agvDetail.modelUuid)
vehicleStatus(agvDetail.modelUuid, 'Reached pickup point again, cycle complete'); vehicleStatus(agvDetail.modelUuid, 'Reached pickup point again, cycle complete');
} }
} }

View File

@ -21,7 +21,9 @@ interface VehiclesStore {
modelUuid: string, modelUuid: string,
newState: VehicleStatus["state"] newState: VehicleStatus["state"]
) => void; ) => 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; incrementActiveTime: (modelUuid: string, incrementBy: number) => void;
incrementIdleTime: (modelUuid: string, incrementBy: number) => void; incrementIdleTime: (modelUuid: string, incrementBy: number) => void;
@ -48,7 +50,7 @@ export const useVehicleStore = create<VehiclesStore>()(
idleTime: 0, idleTime: 0,
activeTime: 0, activeTime: 0,
currentLoad: 0, currentLoad: 0,
materialType: null, currentMaterials: [],
distanceTraveled: 0, distanceTraveled: 0,
}); });
} }
@ -132,11 +134,29 @@ export const useVehicleStore = create<VehiclesStore>()(
}); });
}, },
setMaterialType: (modelUuid, materialType) => { addCurrentMaterial: (modelUuid, materialType, materialId) => {
set((state) => { set((state) => {
const vehicle = state.vehicles.find((v) => v.modelUuid === modelUuid); const vehicle = state.vehicles.find((v) => v.modelUuid === modelUuid);
if (vehicle) { 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 = [];
} }
}); });
}, },

View File

@ -181,7 +181,7 @@ interface VehicleStatus extends VehicleEventSchema {
idleTime: number; idleTime: number;
activeTime: number; activeTime: number;
currentLoad: number; currentLoad: number;
materialType: string | null; currentMaterials: { materialType: string; materialId: string; }[];
distanceTraveled: number; distanceTraveled: number;
} }