Enhance trigger handler: add materialId support for robotic arm and vehicle interactions; refactor material drop handling functions for clarity.
This commit is contained in:
parent
bb4d649294
commit
75b496d8f4
|
@ -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");
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in New Issue