diff --git a/app/src/components/layout/sidebarRight/properties/eventProperties/mechanics/conveyorMechanics.tsx b/app/src/components/layout/sidebarRight/properties/eventProperties/mechanics/conveyorMechanics.tsx
index 046eefa..027dc0b 100644
--- a/app/src/components/layout/sidebarRight/properties/eventProperties/mechanics/conveyorMechanics.tsx
+++ b/app/src/components/layout/sidebarRight/properties/eventProperties/mechanics/conveyorMechanics.tsx
@@ -8,7 +8,7 @@ import SwapAction from "../actions/SwapAction";
import SpawnAction from "../actions/SpawnAction";
import DefaultAction from "../actions/DefaultAction";
import Trigger from "../trigger/Trigger";
-import { useSelectedEventData, useSelectedProduct } from "../../../../../../store/simulation/useSimulationStore";
+import { useSelectedAction, useSelectedEventData, useSelectedProduct } from "../../../../../../store/simulation/useSimulationStore";
import { useProductStore } from "../../../../../../store/simulation/useProductStore";
import ActionsList from "../components/ActionsList";
import { upsertProductOrEventApi } from "../../../../../../services/simulation/UpsertProductOrEventApi";
@@ -19,6 +19,7 @@ function ConveyorMechanics() {
const { selectedEventData } = useSelectedEventData();
const { getPointByUuid, getEventByModelUuid, updateEvent, updateAction } = useProductStore();
const { selectedProduct } = useSelectedProduct();
+ const { setSelectedAction, clearSelectedAction } = useSelectedAction();
const email = localStorage.getItem('email')
const organization = (email!.split("@")[1]).split(".")[0];
@@ -33,9 +34,12 @@ function ConveyorMechanics() {
if (point && "action" in point) {
setSelectedPointData(point);
setActiveOption(point.action.actionType as | "default" | "spawn" | "swap" | "delay" | "despawn");
+ setSelectedAction(point.action.actionUuid, point.action.actionName);
}
+ } else {
+ clearSelectedAction();
}
- }, [selectedProduct, selectedEventData, getPointByUuid]);
+ }, [selectedProduct, selectedEventData]);
const updateBackend = (
productName: string,
diff --git a/app/src/components/layout/sidebarRight/properties/eventProperties/mechanics/machineMechanics.tsx b/app/src/components/layout/sidebarRight/properties/eventProperties/mechanics/machineMechanics.tsx
index 0b5b63b..ec296f2 100644
--- a/app/src/components/layout/sidebarRight/properties/eventProperties/mechanics/machineMechanics.tsx
+++ b/app/src/components/layout/sidebarRight/properties/eventProperties/mechanics/machineMechanics.tsx
@@ -2,7 +2,7 @@ import { useEffect, useState } from "react";
import RenameInput from "../../../../../ui/inputs/RenameInput";
import LabledDropdown from "../../../../../ui/inputs/LabledDropdown";
import Trigger from "../trigger/Trigger";
-import { useSelectedEventData, useSelectedProduct } from "../../../../../../store/simulation/useSimulationStore";
+import { useSelectedAction, useSelectedEventData, useSelectedProduct } from "../../../../../../store/simulation/useSimulationStore";
import { useProductStore } from "../../../../../../store/simulation/useProductStore";
import ProcessAction from "../actions/ProcessAction";
import ActionsList from "../components/ActionsList";
@@ -14,6 +14,7 @@ function MachineMechanics() {
const { selectedEventData } = useSelectedEventData();
const { getPointByUuid, updateAction } = useProductStore();
const { selectedProduct } = useSelectedProduct();
+ const { setSelectedAction, clearSelectedAction } = useSelectedAction();
const email = localStorage.getItem('email')
const organization = (email!.split("@")[1]).split(".")[0];
@@ -28,9 +29,12 @@ function MachineMechanics() {
if (point && "action" in point) {
setSelectedPointData(point);
setActiveOption(point.action.actionType as "process");
+ setSelectedAction(point.action.actionUuid, point.action.actionName);
}
+ } else {
+ clearSelectedAction();
}
- }, [selectedProduct, selectedEventData, getPointByUuid]);
+ }, [selectedProduct, selectedEventData]);
const updateBackend = (
productName: string,
@@ -137,7 +141,7 @@ function MachineMechanics() {
-
+
)}
diff --git a/app/src/components/layout/sidebarRight/properties/eventProperties/mechanics/roboticArmMechanics.tsx b/app/src/components/layout/sidebarRight/properties/eventProperties/mechanics/roboticArmMechanics.tsx
index 3ecbc9d..152bbfe 100644
--- a/app/src/components/layout/sidebarRight/properties/eventProperties/mechanics/roboticArmMechanics.tsx
+++ b/app/src/components/layout/sidebarRight/properties/eventProperties/mechanics/roboticArmMechanics.tsx
@@ -258,7 +258,7 @@ function RoboticArmMechanics() {
diff --git a/app/src/components/layout/sidebarRight/properties/eventProperties/mechanics/storageMechanics.tsx b/app/src/components/layout/sidebarRight/properties/eventProperties/mechanics/storageMechanics.tsx
index 34e35ae..84ca70e 100644
--- a/app/src/components/layout/sidebarRight/properties/eventProperties/mechanics/storageMechanics.tsx
+++ b/app/src/components/layout/sidebarRight/properties/eventProperties/mechanics/storageMechanics.tsx
@@ -2,7 +2,7 @@ import { useEffect, useState } from "react";
import RenameInput from "../../../../../ui/inputs/RenameInput";
import LabledDropdown from "../../../../../ui/inputs/LabledDropdown";
import Trigger from "../trigger/Trigger";
-import { useSelectedEventData, useSelectedProduct } from "../../../../../../store/simulation/useSimulationStore";
+import { useSelectedAction, useSelectedEventData, useSelectedProduct } from "../../../../../../store/simulation/useSimulationStore";
import { useProductStore } from "../../../../../../store/simulation/useProductStore";
import StorageAction from "../actions/StorageAction";
import ActionsList from "../components/ActionsList";
@@ -14,6 +14,7 @@ function StorageMechanics() {
const { selectedEventData } = useSelectedEventData();
const { getPointByUuid, updateAction } = useProductStore();
const { selectedProduct } = useSelectedProduct();
+ const { setSelectedAction, clearSelectedAction } = useSelectedAction();
const email = localStorage.getItem('email')
const organization = (email!.split("@")[1]).split(".")[0];
@@ -28,9 +29,12 @@ function StorageMechanics() {
if (point && "action" in point) {
setSelectedPointData(point);
setActiveOption(point.action.actionType as "store" | "spawn");
+ setSelectedAction(point.action.actionUuid, point.action.actionName);
}
+ } else {
+ clearSelectedAction();
}
- }, [selectedProduct, selectedEventData, getPointByUuid]);
+ }, [selectedProduct, selectedEventData]);
const updateBackend = (
productName: string,
@@ -146,7 +150,7 @@ function StorageMechanics() {
-
+
)}
diff --git a/app/src/components/layout/sidebarRight/properties/eventProperties/mechanics/vehicleMechanics.tsx b/app/src/components/layout/sidebarRight/properties/eventProperties/mechanics/vehicleMechanics.tsx
index 0f52437..d362679 100644
--- a/app/src/components/layout/sidebarRight/properties/eventProperties/mechanics/vehicleMechanics.tsx
+++ b/app/src/components/layout/sidebarRight/properties/eventProperties/mechanics/vehicleMechanics.tsx
@@ -4,6 +4,7 @@ import RenameInput from "../../../../../ui/inputs/RenameInput";
import LabledDropdown from "../../../../../ui/inputs/LabledDropdown";
import Trigger from "../trigger/Trigger";
import {
+ useSelectedAction,
useSelectedEventData,
useSelectedProduct,
} from "../../../../../../store/simulation/useSimulationStore";
@@ -18,6 +19,7 @@ function VehicleMechanics() {
const { selectedEventData } = useSelectedEventData();
const { getPointByUuid, getEventByModelUuid, updateEvent, updateAction } = useProductStore();
const { selectedProduct } = useSelectedProduct();
+ const { setSelectedAction, clearSelectedAction } = useSelectedAction();
const email = localStorage.getItem('email')
const organization = (email!.split("@")[1]).split(".")[0];
@@ -33,9 +35,12 @@ function VehicleMechanics() {
if (point) {
setSelectedPointData(point);
setActiveOption(point.action.actionType as "travel");
+ setSelectedAction(point.action.actionUuid, point.action.actionName);
}
+ } else {
+ clearSelectedAction();
}
- }, [selectedProduct, selectedEventData, getPointByUuid]);
+ }, [selectedProduct, selectedEventData]);
const updateBackend = (
productName: string,
@@ -235,7 +240,7 @@ function VehicleMechanics() {
-
+
>
diff --git a/app/src/components/layout/sidebarRight/properties/eventProperties/trigger/Trigger.tsx b/app/src/components/layout/sidebarRight/properties/eventProperties/trigger/Trigger.tsx
index 67fd358..da36384 100644
--- a/app/src/components/layout/sidebarRight/properties/eventProperties/trigger/Trigger.tsx
+++ b/app/src/components/layout/sidebarRight/properties/eventProperties/trigger/Trigger.tsx
@@ -37,7 +37,7 @@ const Trigger = ({ selectedPointData, type }: TriggerProps) => {
if (type === 'Conveyor' || type === 'Vehicle' || type === 'Machine' || type === 'StorageUnit') {
actionUuid = (selectedPointData as ConveyorPointSchema | VehiclePointSchema | MachinePointSchema | StoragePointSchema).action?.actionUuid;
- } else if (type === 'RoboticArm' && selectedAction) {
+ } else if (type === 'RoboticArm' && selectedAction && selectedAction.actionId) {
actionUuid = selectedAction.actionId;
}
diff --git a/app/src/modules/simulation/triggers/connector/triggerConnector.tsx b/app/src/modules/simulation/triggers/connector/triggerConnector.tsx
index a56436f..b59d9f1 100644
--- a/app/src/modules/simulation/triggers/connector/triggerConnector.tsx
+++ b/app/src/modules/simulation/triggers/connector/triggerConnector.tsx
@@ -2,7 +2,7 @@ import { useEffect, useRef, useState } from "react";
import { useFrame, useThree } from "@react-three/fiber";
import * as THREE from "three";
import { useSubModuleStore } from "../../../../store/useModuleStore";
-import { useSelectedAsset } from "../../../../store/simulation/useSimulationStore";
+import { useSelectedAction, useSelectedAsset } from "../../../../store/simulation/useSimulationStore";
import { useProductStore } from "../../../../store/simulation/useProductStore";
import { useEventsStore } from "../../../../store/simulation/useEventsStore";
import { useSelectedProduct } from "../../../../store/simulation/useSimulationStore";
@@ -22,7 +22,7 @@ interface ConnectionLine {
function TriggerConnector() {
const { gl, raycaster, scene, pointer, camera } = useThree();
const { subModule } = useSubModuleStore();
- const { products, getPointByUuid, getIsEventInProduct, getActionByUuid, addTrigger, removeTrigger, addEvent, getEventByModelUuid, getProductById } = useProductStore();
+ const { products, getPointByUuid, getIsEventInProduct, getActionByUuid, addTrigger, removeTrigger, addEvent, getEventByModelUuid, getPointUuidByActionUuid, getProductById } = useProductStore();
const { selectedAsset, clearSelectedAsset } = useSelectedAsset();
const { selectedProduct } = useSelectedProduct();
const [hoveredLineKey, setHoveredLineKey] = useState(null);
@@ -31,6 +31,7 @@ function TriggerConnector() {
const [currentLine, setCurrentLine] = useState<{ start: THREE.Vector3; end: THREE.Vector3; mid: THREE.Vector3; } | null>(null);
const { deleteTool } = useDeleteTool();
const { isPlaying } = usePlayButtonStore();
+ const { selectedAction } = useSelectedAction();
const [firstSelectedPoint, setFirstSelectedPoint] = useState<{
productId: string;
@@ -50,7 +51,7 @@ function TriggerConnector() {
organization: string,
eventData: EventsSchema
) => {
- const data =upsertProductOrEventApi({
+ upsertProductOrEventApi({
productName: productName,
productId: productId,
organization: organization,
@@ -201,6 +202,7 @@ function TriggerConnector() {
);
const event = getEventByModelUuid(selectedProduct.productId, modelUuid);
+ const clickedPointUuid = getPointUuidByActionUuid(selectedProduct.productId, selectedAction.actionId || '');
if (!point || !event) {
setFirstSelectedPoint(null);
@@ -215,11 +217,12 @@ function TriggerConnector() {
}
if (!firstSelectedPoint) {
+ if (point.uuid !== clickedPointUuid) return;
setFirstSelectedPoint({
productId: selectedProduct.productId,
modelUuid,
pointUuid,
- actionUuid
+ actionUuid: selectedAction.actionId || ''
});
} else {
const trigger: TriggerSchema = {
@@ -323,11 +326,13 @@ function TriggerConnector() {
}
};
- if (subModule === 'simulations' && !deleteTool) {
+ if (subModule === 'mechanics' && !deleteTool && selectedAction.actionId && selectedAction.actionName) {
canvasElement.addEventListener("mousedown", onMouseDown);
canvasElement.addEventListener("mouseup", onMouseUp);
canvasElement.addEventListener("mousemove", onMouseMove);
canvasElement.addEventListener('contextmenu', handleRightClick);
+ } else {
+ setFirstSelectedPoint(null);
}
return () => {
@@ -337,8 +342,7 @@ function TriggerConnector() {
canvasElement.removeEventListener('contextmenu', handleRightClick);
};
- }, [gl, subModule, selectedProduct, firstSelectedPoint, deleteTool]);
-
+ }, [gl, subModule, selectedProduct, firstSelectedPoint, deleteTool, selectedAction]);
useFrame(() => {
if (firstSelectedPoint) {
diff --git a/app/src/modules/simulation/triggers/trigger.tsx b/app/src/modules/simulation/triggers/trigger.tsx
index 110da2e..5f11709 100644
--- a/app/src/modules/simulation/triggers/trigger.tsx
+++ b/app/src/modules/simulation/triggers/trigger.tsx
@@ -1,7 +1,7 @@
-import React from 'react'
import TriggerConnector from './connector/triggerConnector'
function Trigger() {
+
return (
<>
diff --git a/app/src/modules/simulation/triggers/triggerHandler/useTriggerHandler.ts b/app/src/modules/simulation/triggers/triggerHandler/useTriggerHandler.ts
index c022e78..f0e4d06 100644
--- a/app/src/modules/simulation/triggers/triggerHandler/useTriggerHandler.ts
+++ b/app/src/modules/simulation/triggers/triggerHandler/useTriggerHandler.ts
@@ -133,8 +133,6 @@ export function useTriggerHandler() {
if (armBot.isActive === false && armBot.state === 'idle') {
- setIsPaused(material.materialId, true);
-
// Handle current action from arm bot
handleAction(action, materialId);
@@ -265,6 +263,7 @@ export function useTriggerHandler() {
if (materialId && trigger.triggeredAsset && trigger.triggeredAsset.triggeredPoint && trigger.triggeredAsset.triggeredAction) {
const material = getMaterialById(materialId);
if (material) {
+
setIsPaused(material.materialId, false);
setPreviousLocation(material.materialId, {
@@ -357,18 +356,6 @@ export function useTriggerHandler() {
const action = getActionByUuid(selectedProduct.productId, trigger.triggeredAsset.triggeredAction.actionUuid);
const vehicle = getVehicleById(trigger.triggeredAsset?.triggeredModel.modelUuid);
- setPreviousLocation(material.materialId, {
- modelUuid: material.current.modelUuid,
- pointUuid: material.current.pointUuid,
- actionUuid: material.current.actionUuid,
- })
-
- setCurrentLocation(material.materialId, {
- modelUuid: trigger.triggeredAsset.triggeredModel.modelUuid,
- pointUuid: trigger.triggeredAsset.triggeredPoint.pointUuid,
- actionUuid: trigger.triggeredAsset?.triggeredAction?.actionUuid,
- });
-
setNextLocation(material.materialId, null);
if (action) {
@@ -379,6 +366,18 @@ export function useTriggerHandler() {
setIsVisible(materialId, false);
+ setPreviousLocation(material.materialId, {
+ modelUuid: material.current.modelUuid,
+ pointUuid: material.current.pointUuid,
+ actionUuid: material.current.actionUuid,
+ })
+
+ setCurrentLocation(material.materialId, {
+ modelUuid: trigger.triggeredAsset.triggeredModel.modelUuid,
+ pointUuid: trigger.triggeredAsset.triggeredPoint.pointUuid,
+ actionUuid: trigger.triggeredAsset?.triggeredAction?.actionUuid,
+ });
+
// Handle current action from vehicle
handleAction(action, materialId);
diff --git a/app/src/modules/simulation/ui/arm/armBotUI.tsx b/app/src/modules/simulation/ui/arm/armBotUI.tsx
index 12fdde8..d188af0 100644
--- a/app/src/modules/simulation/ui/arm/armBotUI.tsx
+++ b/app/src/modules/simulation/ui/arm/armBotUI.tsx
@@ -53,7 +53,7 @@ const ArmBotUI = () => {
if (selectedEventSphere) {
const selectedArmBot = getEventByModelUuid(selectedProduct.productId, selectedEventSphere.userData.modelUuid);
- if (selectedArmBot?.type === "roboticArm") {
+ if (selectedArmBot?.type === "roboticArm" && selectedAction.actionId) {
setSelectedArmBotData(selectedArmBot);
const defaultPositions = getDefaultPositions(selectedArmBot.modelUuid);
const matchingAction = getActionByUuid(selectedProduct.productId, selectedAction.actionId);
diff --git a/app/src/store/simulation/useSimulationStore.ts b/app/src/store/simulation/useSimulationStore.ts
index 6e4321f..b3d3c78 100644
--- a/app/src/store/simulation/useSimulationStore.ts
+++ b/app/src/store/simulation/useSimulationStore.ts
@@ -93,14 +93,14 @@ export const useSelectedProduct = create()(
);
interface SelectedActionState {
- selectedAction: { actionId: string; actionName: string };
+ selectedAction: { actionId: string | null; actionName: string | null };
setSelectedAction: (actionId: string, actionName: string) => void;
clearSelectedAction: () => void;
}
export const useSelectedAction = create()(
immer((set) => ({
- selectedAction: { actionId: '', actionName: '' },
+ selectedAction: { actionId: null, actionName: null },
setSelectedAction: (actionId, actionName) => {
set((state) => {
state.selectedAction.actionId = actionId;
@@ -109,8 +109,8 @@ export const useSelectedAction = create()(
},
clearSelectedAction: () => {
set((state) => {
- state.selectedAction.actionId = '';
- state.selectedAction.actionName = '';
+ state.selectedAction.actionId = null;
+ state.selectedAction.actionName = null;
});
},
}))