added multiple actions to storage unit

This commit is contained in:
2025-08-20 18:11:01 +05:30
parent 11c0994833
commit e950b0f54a
11 changed files with 296 additions and 183 deletions

View File

@@ -240,12 +240,14 @@ function AssetsGroup({ plane }: { readonly plane: RefMesh }) {
uuid: item.eventData.point?.uuid || THREE.MathUtils.generateUUID(),
position: [item.eventData.point?.position[0] || 0, item.eventData.point?.position[1] || 0, item.eventData.point?.position[2] || 0],
rotation: [item.eventData.point?.rotation[0] || 0, item.eventData.point?.rotation[1] || 0, item.eventData.point?.rotation[2] || 0],
action: {
actionUuid: THREE.MathUtils.generateUUID(),
actionName: "Action 1",
actionType: "store",
triggers: []
}
actions: [
{
actionUuid: THREE.MathUtils.generateUUID(),
actionName: "Action 1",
actionType: "store",
triggers: []
}
]
}
};
addEvent(storageEvent);

View File

@@ -353,12 +353,14 @@ async function handleModelLoad(
uuid: THREE.MathUtils.generateUUID(),
position: [data.points[0].x, data.points[0].y, data.points[0].z],
rotation: [0, 0, 0],
action: {
actionUuid: THREE.MathUtils.generateUUID(),
actionName: "Action 1",
actionType: "store",
triggers: [],
},
actions: [
{
actionUuid: THREE.MathUtils.generateUUID(),
actionName: "Action 1",
actionType: "store",
triggers: [],
}
],
},
};
addEvent(storageEvent);

View File

@@ -383,12 +383,14 @@ const CopyPasteControls3D = ({
uuid: THREE.MathUtils.generateUUID(),
position: [updatedEventData.point.position[0], updatedEventData.point.position[1], updatedEventData.point.position[2]],
rotation: [updatedEventData.point.rotation[0], updatedEventData.point.rotation[1], updatedEventData.point.rotation[2]],
action: {
actionUuid: THREE.MathUtils.generateUUID(),
actionName: "Action 1",
actionType: "store",
triggers: []
}
actions: [
{
actionUuid: THREE.MathUtils.generateUUID(),
actionName: "Action 1",
actionType: "store",
triggers: []
}
]
}
}
addEvent(storageEvent);

View File

@@ -453,12 +453,14 @@ const DuplicationControls3D = ({
uuid: THREE.MathUtils.generateUUID(),
position: [updatedEventData.point.position[0], updatedEventData.point.position[1], updatedEventData.point.position[2]],
rotation: [updatedEventData.point.rotation[0], updatedEventData.point.rotation[1], updatedEventData.point.rotation[2]],
action: {
actionUuid: THREE.MathUtils.generateUUID(),
actionName: "Action 1",
actionType: "store",
triggers: []
}
actions: [
{
actionUuid: THREE.MathUtils.generateUUID(),
actionName: "Action 1",
actionType: "store",
triggers: []
}
]
}
}
addEvent(storageEvent);

View File

@@ -171,8 +171,9 @@ export function useRetrieveHandler() {
if (retrieval.action.triggers[0]?.triggeredAsset.triggeredAction?.actionUuid) {
const action = getActionByUuid(selectedProduct.productUuid, retrieval.action.triggers[0]?.triggeredAsset.triggeredAction.actionUuid);
if (action && action.triggers.length > 0 && action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid) {
const model = getEventByModelUuid(selectedProduct.productUuid, action.triggers[0]?.triggeredAsset.triggeredModel.modelUuid);
if (model) {
const model = getEventByModelUuid(selectedProduct.productUuid, action?.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid || '');
const triggeredAction = getActionByUuid(selectedProduct.productUuid, action?.triggers[0]?.triggeredAsset?.triggeredAction?.actionUuid || '');
if (model && triggeredAction) {
if (model.type === 'vehicle') {
const vehicle = getVehicleById(model.modelUuid);
if (vehicle && !vehicle.isActive && vehicle.state === 'idle' && vehicle.isPicking && vehicle.currentLoad < vehicle.point.action.loadCapacity) {
@@ -180,7 +181,7 @@ export function useRetrieveHandler() {
const material = createNewMaterial(
lastMaterial.materialId,
lastMaterial.materialType,
storageUnit.point.action
triggeredAction as StorageAction
);
if (material) {
@@ -193,11 +194,11 @@ export function useRetrieveHandler() {
retrieveLogStatus(material.materialName, `is being picked by ${armBot?.modelName}`);
}
}
} else {
} else if (triggeredAction) {
const material = createNewMaterial(
lastMaterial.materialId,
lastMaterial.materialType,
storageUnit.point.action
triggeredAction as StorageAction
);
if (material) {
@@ -271,10 +272,15 @@ export function useRetrieveHandler() {
const lastMaterial = getLastMaterial(storageUnit.modelUuid);
if (lastMaterial) {
if (vehicle?.currentLoad < vehicle.point.action.loadCapacity) {
const triggeredAction = getActionByUuid(
selectedProduct.productUuid,
retrieval.action.triggers[0]?.triggeredAsset.triggeredAction?.actionUuid || ''
);
const material = createNewMaterial(
lastMaterial.materialId,
lastMaterial.materialType,
storageUnit.point.action
triggeredAction as StorageAction
);
if (material) {
@@ -322,6 +328,12 @@ export function useRetrieveHandler() {
const triggeredModel = action.triggers[0]?.triggeredAsset?.triggeredModel?.modelUuid
? getEventByModelUuid(selectedProduct.productUuid, action.triggers[0].triggeredAsset.triggeredModel.modelUuid)
: null;
const triggeredAction = getActionByUuid(
selectedProduct.productUuid,
action.triggers[0]?.triggeredAsset?.triggeredAction?.actionUuid || ''
);
if (triggeredModel?.type === 'vehicle') {
const model = getVehicleById(triggeredModel.modelUuid);
if (model && !model.isActive && model.state === 'idle' && model.isPicking && model.currentLoad < model.point.action.loadCapacity) {
@@ -333,7 +345,7 @@ export function useRetrieveHandler() {
const material = createNewMaterial(
lastMaterial.materialId,
lastMaterial.materialType,
storageUnit.point.action
triggeredAction as StorageAction
);
if (material) {
removeLastMaterial(storageUnit.modelUuid);
@@ -359,7 +371,7 @@ export function useRetrieveHandler() {
const material = createNewMaterial(
lastMaterial.materialId,
lastMaterial.materialType,
storageUnit.point.action
triggeredAction as StorageAction
);
if (material) {
removeLastMaterial(storageUnit.modelUuid);
@@ -385,7 +397,7 @@ export function useRetrieveHandler() {
const material = createNewMaterial(
lastMaterial.materialId,
lastMaterial.materialType,
storageUnit.point.action
triggeredAction as StorageAction
);
if (material) {
removeLastMaterial(storageUnit.modelUuid);
@@ -417,7 +429,7 @@ export function useRetrieveHandler() {
const material = createNewMaterial(
lastMaterial.materialId,
lastMaterial.materialType,
storageUnit.point.action
triggeredAction as StorageAction
);
if (material) {
removeLastMaterial(storageUnit.modelUuid);
@@ -438,7 +450,7 @@ export function useRetrieveHandler() {
const material = createNewMaterial(
lastMaterial.materialId,
lastMaterial.materialType,
storageUnit.point.action
triggeredAction as StorageAction
);
if (material) {
removeLastMaterial(storageUnit.modelUuid);
@@ -484,10 +496,15 @@ export function useRetrieveHandler() {
const lastMaterial = getLastMaterial(storageUnit.modelUuid);
if (lastMaterial) {
const triggeredAction = getActionByUuid(
selectedProduct.productUuid,
action?.triggers[0]?.triggeredAsset?.triggeredAction?.actionUuid || ''
);
const material = createNewMaterial(
lastMaterial.materialId,
lastMaterial.materialType,
storageUnit.point.action
triggeredAction as StorageAction
);
if (material) {
removeLastMaterial(storageUnit.modelUuid);

View File

@@ -144,8 +144,8 @@ function TriggerConnector() {
// Handle StorageUnit point
else if (event.type === "storageUnit" && 'point' in event) {
const point = event.point;
if (point.action?.triggers) {
point.action.triggers.forEach(trigger => {
point.actions?.forEach(action => {
action.triggers?.forEach(trigger => {
if (trigger.triggeredAsset && trigger.triggeredAsset.triggeredPoint) {
newConnections.push({
id: `${point.uuid}-${trigger.triggeredAsset.triggeredPoint.pointUuid}-${trigger.triggerUuid}`,
@@ -155,7 +155,7 @@ function TriggerConnector() {
});
}
});
}
});
}
// Handle Human point
else if (event.type === "human" && 'point' in event) {

View File

@@ -108,7 +108,7 @@ function WorkerInstance({ human }: { human: HumanStatus }) {
if (!human.isActive && human.state === 'idle' && human.currentPhase === 'init') {
const humanMesh = scene.getObjectByProperty('uuid', human.modelUuid);
if (!humanMesh) return;
const toPickupPath = computePath(humanMesh.position.toArray(), action?.pickUpPoint?.position || [0, 0, 0]);
setPath(toPickupPath);
@@ -233,15 +233,13 @@ function WorkerInstance({ human }: { human: HumanStatus }) {
const checkAnimation = () => {
if (humanAsset?.animationState?.isCompleted) {
if (model.point.action.actionType === 'store') {
loopMaterialDropToStorage(
human.modelUuid,
human.currentLoad,
model.modelUuid,
model.storageCapacity,
(action as HumanAction)
);
}
loopMaterialDropToStorage(
human.modelUuid,
human.currentLoad,
model.modelUuid,
model.storageCapacity,
(action as HumanAction)
);
} else {
requestAnimationFrame(checkAnimation);
}

View File

@@ -388,16 +388,14 @@ function VehicleInstance({ agvDetail }: Readonly<{ agvDetail: VehicleStatus }>)
function handleMaterialDropToStorageUnit(model: StorageEventSchema) {
if (model) {
if (model.point.action.actionType === 'store') {
loopMaterialDropToStorage(
agvDetail.modelUuid,
agvDetail.currentLoad,
agvDetail.point.action.unLoadDuration,
model.modelUuid,
model.storageCapacity,
agvDetail.point.action
);
}
loopMaterialDropToStorage(
agvDetail.modelUuid,
agvDetail.currentLoad,
agvDetail.point.action.unLoadDuration,
model.modelUuid,
model.storageCapacity,
agvDetail.point.action
);
}
}