From 4c857e0ba653f4d54347f0d8348c2b2f7100a0df Mon Sep 17 00:00:00 2001 From: Jerald-Golden-B Date: Sat, 20 Dec 2025 12:45:33 +0530 Subject: [PATCH] feat: Add simulation analyzer component for comprehensive simulation data tracking and performance metrics. --- .../modules/simulation/analyzer/analyzer.tsx | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/app/src/modules/simulation/analyzer/analyzer.tsx b/app/src/modules/simulation/analyzer/analyzer.tsx index d696689..f28724f 100644 --- a/app/src/modules/simulation/analyzer/analyzer.tsx +++ b/app/src/modules/simulation/analyzer/analyzer.tsx @@ -190,6 +190,9 @@ function Analyzer() { // Track previous action counts for Humans to detect completion from EventManager const previousHumanCountsRef = useRef>>({}); + // Track previous vehicle phases to detect trip completion + const previousVehiclePhasesRef = useRef>({}); + // 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; }