From 75b496d8f428b0ba005d105c36d4c7df7af0931d Mon Sep 17 00:00:00 2001 From: Jerald-Golden-B Date: Thu, 8 May 2025 18:30:05 +0530 Subject: [PATCH] Enhance trigger handler: add materialId support for robotic arm and vehicle interactions; refactor material drop handling functions for clarity. --- .../armInstance/roboticArmInstance.tsx | 4 +- .../triggerHandler/useTriggerHandler.ts | 65 ++++++++++++++++++- .../instances/instance/vehicleInstance.tsx | 26 ++++++-- 3 files changed, 87 insertions(+), 8 deletions(-) diff --git a/app/src/modules/simulation/roboticArm/instances/armInstance/roboticArmInstance.tsx b/app/src/modules/simulation/roboticArm/instances/armInstance/roboticArmInstance.tsx index ec044ce..3700f74 100644 --- a/app/src/modules/simulation/roboticArm/instances/armInstance/roboticArmInstance.tsx +++ b/app/src/modules/simulation/roboticArm/instances/armInstance/roboticArmInstance.tsx @@ -26,7 +26,7 @@ function RoboticArmInstance({ armBot }: { armBot: ArmBotStatus }) { let startTime: number; const { setArmBotActive, setArmBotState, removeCurrentAction } = useArmBotStore(); - const { setIsVisible } = useMaterialStore(); + const { setIsVisible, getMaterialById } = useMaterialStore(); const { selectedProduct } = useSelectedProduct(); const { getActionByUuid } = useProductStore(); const { triggerPointActions } = useTriggerHandler(); @@ -204,12 +204,10 @@ function RoboticArmInstance({ armBot }: { armBot: ArmBotStatus }) { function createCurveBetweenTwoPoints(p1: any, p2: any) { const mid = new THREE.Vector3().addVectors(p1, p2).multiplyScalar(0.5); - // mid.y += 0.5; const points = [p1, mid, p2]; return new THREE.CatmullRomCurve3(points); } - const HandleCallback = () => { if (armBot.isActive && armBot.state == "running" && currentPhase == "init-to-rest") { logStatus(armBot.modelUuid, "Callback triggered: rest"); diff --git a/app/src/modules/simulation/triggers/triggerHandler/useTriggerHandler.ts b/app/src/modules/simulation/triggers/triggerHandler/useTriggerHandler.ts index ccd3e00..a373439 100644 --- a/app/src/modules/simulation/triggers/triggerHandler/useTriggerHandler.ts +++ b/app/src/modules/simulation/triggers/triggerHandler/useTriggerHandler.ts @@ -136,8 +136,34 @@ export function useTriggerHandler() { } } else if (fromEvent?.type === 'vehicle') { if (toEvent?.type === 'transfer') { - console.log('toEvent: ', toEvent); // Vehicle to Transfer + if (materialId && trigger.triggeredAsset && trigger.triggeredAsset.triggeredPoint && trigger.triggeredAsset.triggeredAction) { + const material = getMaterialById(materialId); + if (material) { + const action = getActionByUuid(selectedProduct.productId, trigger.triggeredAsset.triggeredAction.actionUuid); + + setCurrentLocation(material.materialId, { + modelUuid: trigger.triggeredAsset.triggeredModel.modelUuid, + pointUuid: trigger.triggeredAsset.triggeredPoint.pointUuid, + actionUuid: trigger.triggeredAsset?.triggeredAction?.actionUuid, + }); + + setIsVisible(materialId, true); + + if (action && + action.triggers[0].triggeredAsset?.triggeredModel.modelUuid && + action.triggers[0].triggeredAsset?.triggeredPoint?.pointUuid + ) { + setNextLocation(material.materialId, { + modelUuid: action.triggers[0].triggeredAsset?.triggeredModel.modelUuid, + pointUuid: action.triggers[0].triggeredAsset?.triggeredPoint?.pointUuid, + }); + + handleAction(action, materialId); + } + + } + } } else if (toEvent?.type === 'vehicle') { // Vehicle to Vehicle @@ -147,6 +173,40 @@ export function useTriggerHandler() { } else if (toEvent?.type === 'roboticArm') { // Vehicle to Robotic Arm + if (materialId && trigger.triggeredAsset && trigger.triggeredAsset.triggeredPoint && trigger.triggeredAsset.triggeredAction) { + const material = getMaterialById(materialId); + if (material) { + const action = getActionByUuid(selectedProduct.productId, trigger.triggeredAsset.triggeredAction.actionUuid); + const armBot = getArmBotById(trigger.triggeredAsset?.triggeredModel.modelUuid); + + setCurrentLocation(material.materialId, { + modelUuid: trigger.triggeredAsset.triggeredModel.modelUuid, + pointUuid: trigger.triggeredAsset.triggeredPoint.pointUuid, + actionUuid: trigger.triggeredAsset?.triggeredAction?.actionUuid, + }); + + setNextLocation(material.materialId, null); + + setIsVisible(materialId, false); + + if (action && armBot && + action.triggers[0].triggeredAsset?.triggeredModel.modelUuid && + action.triggers[0].triggeredAsset?.triggeredPoint?.pointUuid + ) { + + if (armBot.isActive === false && armBot.state === 'idle') { + + // Handle current action from arm bot + handleAction(action, materialId); + + } else { + + // Event Manager Needed + + } + } + } + } } else if (toEvent?.type === 'storageUnit') { // Vehicle to Storage Unit @@ -203,6 +263,9 @@ export function useTriggerHandler() { if (materialId && trigger.triggeredAsset && trigger.triggeredAsset.triggeredPoint && trigger.triggeredAsset.triggeredAction) { const material = getMaterialById(materialId); if (material) { + + setIsPaused(material.materialId, false); + const action = getActionByUuid(selectedProduct.productId, trigger.triggeredAsset.triggeredAction.actionUuid); const vehicle = getVehicleById(trigger.triggeredAsset?.triggeredModel.modelUuid); diff --git a/app/src/modules/simulation/vehicle/instances/instance/vehicleInstance.tsx b/app/src/modules/simulation/vehicle/instances/instance/vehicleInstance.tsx index 274f18f..d3708b9 100644 --- a/app/src/modules/simulation/vehicle/instances/instance/vehicleInstance.tsx +++ b/app/src/modules/simulation/vehicle/instances/instance/vehicleInstance.tsx @@ -142,12 +142,15 @@ function VehicleInstance({ agvDetail }: { agvDetail: VehicleStatus }) { if (model.type === 'transfer') { const action = getActionByUuid(selectedProduct.productId, agvDetail.point.action.actionUuid); if (action) { - triggerPointActions(action); + handleMaterialDropToConveyor(action); } } else if (model.type === 'machine') { - + } else if (model.type === 'roboticArm') { - + const action = getActionByUuid(selectedProduct.productId, agvDetail.point.action.actionUuid); + if (action) { + handleMaterialDropToArmBot(action); + } } else if (model.type === 'storageUnit') { } @@ -163,8 +166,23 @@ function VehicleInstance({ agvDetail }: { agvDetail: VehicleStatus }) { } } - function handleMaterialDropToConveyor() { } + function handleMaterialDropToConveyor(action: Action) { + if (agvDetail.currentLoad > 1) { + } else if (agvDetail.currentLoad === 1 && agvDetail.currentMaterials.length === 1) { + triggerPointActions(action, agvDetail.currentMaterials[0].materialId); + decrementVehicleLoad(agvDetail.modelUuid, 1); + removeLastMaterial(agvDetail.modelUuid); + } + } + + function handleMaterialDropToArmBot(action: Action) { + if (agvDetail.currentLoad > 1) { + + } else if (agvDetail.currentLoad === 1 && agvDetail.currentMaterials.length === 1) { + triggerPointActions(action, agvDetail.currentMaterials[0].materialId); + } + } function handleMaterialDropByDefault(droppedMaterial: number) { if (isPausedRef.current) {