Enhance trigger handler: add materialId support for robotic arm and vehicle interactions; refactor material drop handling functions for clarity.

This commit is contained in:
Jerald-Golden-B 2025-05-08 18:30:05 +05:30
parent bb4d649294
commit 75b496d8f4
3 changed files with 87 additions and 8 deletions

View File

@ -26,7 +26,7 @@ function RoboticArmInstance({ armBot }: { armBot: ArmBotStatus }) {
let startTime: number; let startTime: number;
const { setArmBotActive, setArmBotState, removeCurrentAction } = useArmBotStore(); const { setArmBotActive, setArmBotState, removeCurrentAction } = useArmBotStore();
const { setIsVisible } = useMaterialStore(); const { setIsVisible, getMaterialById } = useMaterialStore();
const { selectedProduct } = useSelectedProduct(); const { selectedProduct } = useSelectedProduct();
const { getActionByUuid } = useProductStore(); const { getActionByUuid } = useProductStore();
const { triggerPointActions } = useTriggerHandler(); const { triggerPointActions } = useTriggerHandler();
@ -204,12 +204,10 @@ function RoboticArmInstance({ armBot }: { armBot: ArmBotStatus }) {
function createCurveBetweenTwoPoints(p1: any, p2: any) { function createCurveBetweenTwoPoints(p1: any, p2: any) {
const mid = new THREE.Vector3().addVectors(p1, p2).multiplyScalar(0.5); const mid = new THREE.Vector3().addVectors(p1, p2).multiplyScalar(0.5);
// mid.y += 0.5;
const points = [p1, mid, p2]; const points = [p1, mid, p2];
return new THREE.CatmullRomCurve3(points); return new THREE.CatmullRomCurve3(points);
} }
const HandleCallback = () => { const HandleCallback = () => {
if (armBot.isActive && armBot.state == "running" && currentPhase == "init-to-rest") { if (armBot.isActive && armBot.state == "running" && currentPhase == "init-to-rest") {
logStatus(armBot.modelUuid, "Callback triggered: rest"); logStatus(armBot.modelUuid, "Callback triggered: rest");

View File

@ -136,8 +136,34 @@ export function useTriggerHandler() {
} }
} else if (fromEvent?.type === 'vehicle') { } else if (fromEvent?.type === 'vehicle') {
if (toEvent?.type === 'transfer') { if (toEvent?.type === 'transfer') {
console.log('toEvent: ', toEvent);
// Vehicle to Transfer // 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') { } else if (toEvent?.type === 'vehicle') {
// Vehicle to Vehicle // Vehicle to Vehicle
@ -147,6 +173,40 @@ export function useTriggerHandler() {
} else if (toEvent?.type === 'roboticArm') { } else if (toEvent?.type === 'roboticArm') {
// Vehicle to Robotic Arm // 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') { } else if (toEvent?.type === 'storageUnit') {
// Vehicle to Storage Unit // Vehicle to Storage Unit
@ -203,6 +263,9 @@ export function useTriggerHandler() {
if (materialId && trigger.triggeredAsset && trigger.triggeredAsset.triggeredPoint && trigger.triggeredAsset.triggeredAction) { if (materialId && trigger.triggeredAsset && trigger.triggeredAsset.triggeredPoint && trigger.triggeredAsset.triggeredAction) {
const material = getMaterialById(materialId); const material = getMaterialById(materialId);
if (material) { if (material) {
setIsPaused(material.materialId, false);
const action = getActionByUuid(selectedProduct.productId, trigger.triggeredAsset.triggeredAction.actionUuid); const action = getActionByUuid(selectedProduct.productId, trigger.triggeredAsset.triggeredAction.actionUuid);
const vehicle = getVehicleById(trigger.triggeredAsset?.triggeredModel.modelUuid); const vehicle = getVehicleById(trigger.triggeredAsset?.triggeredModel.modelUuid);

View File

@ -142,12 +142,15 @@ function VehicleInstance({ agvDetail }: { agvDetail: VehicleStatus }) {
if (model.type === 'transfer') { if (model.type === 'transfer') {
const action = getActionByUuid(selectedProduct.productId, agvDetail.point.action.actionUuid); const action = getActionByUuid(selectedProduct.productId, agvDetail.point.action.actionUuid);
if (action) { if (action) {
triggerPointActions(action); handleMaterialDropToConveyor(action);
} }
} else if (model.type === 'machine') { } else if (model.type === 'machine') {
} else if (model.type === 'roboticArm') { } else if (model.type === 'roboticArm') {
const action = getActionByUuid(selectedProduct.productId, agvDetail.point.action.actionUuid);
if (action) {
handleMaterialDropToArmBot(action);
}
} else if (model.type === 'storageUnit') { } 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) { function handleMaterialDropByDefault(droppedMaterial: number) {
if (isPausedRef.current) { if (isPausedRef.current) {