feat: Add simulation analyzer component for comprehensive simulation data tracking and performance metrics.

This commit is contained in:
2025-12-20 12:45:33 +05:30
parent 40854a4bd7
commit 4c857e0ba6

View File

@@ -190,6 +190,9 @@ function Analyzer() {
// Track previous action counts for Humans to detect completion from EventManager
const previousHumanCountsRef = useRef<Record<string, Record<string, number>>>({});
// Track previous vehicle phases to detect trip completion
const previousVehiclePhasesRef = useRef<Record<string, string>>({});
// Material lifecycle tracking
const materialLifecycleRef = useRef<
Record<
@@ -223,6 +226,7 @@ function Analyzer() {
previousAssetStatesRef.current = {};
previousArmBotActionsRef.current = {};
previousHumanCountsRef.current = {};
previousVehiclePhasesRef.current = {};
materialLifecycleRef.current = {};
setAnalysis(null);
setAnalyzing(false);
@@ -2457,6 +2461,26 @@ function Analyzer() {
return () => clearInterval(snapshotInterval);
}, [conveyors, machines, armBots, vehicles, humans, cranes, storageUnits, isPlaying, updateWIPSnapshot]);
// Monitor Vehicle phase changes to track completed trips
useEffect(() => {
if (!isPlaying) return;
vehicles.forEach((vehicle) => {
const previousPhase = previousVehiclePhasesRef.current[vehicle.modelUuid];
const currentPhase = vehicle.currentPhase;
// Check for transition from 'drop-pickup' to 'picking' (Trip completed)
if (previousPhase === "drop-pickup" && currentPhase === "picking") {
if (!completedActionsRef.current[vehicle.modelUuid]) {
completedActionsRef.current[vehicle.modelUuid] = 0;
}
completedActionsRef.current[vehicle.modelUuid]++;
}
previousVehiclePhasesRef.current[vehicle.modelUuid] = currentPhase;
});
}, [vehicles, isPlaying]);
return null;
}