diff --git a/app/src/assets/gltf-glb/rigged/ik_arm.glb b/app/src/assets/gltf-glb/rigged/ik_arm.glb deleted file mode 100644 index 22e26a8..0000000 Binary files a/app/src/assets/gltf-glb/rigged/ik_arm.glb and /dev/null differ diff --git a/app/src/assets/gltf-glb/rigged/ik_arm_1.glb b/app/src/assets/gltf-glb/rigged/ik_arm_1.glb deleted file mode 100644 index 326efad..0000000 Binary files a/app/src/assets/gltf-glb/rigged/ik_arm_1.glb and /dev/null differ diff --git a/app/src/assets/gltf-glb/rigged/ik_arm_4.glb b/app/src/assets/gltf-glb/rigged/ik_arm_4.glb deleted file mode 100644 index 92ea5f6..0000000 Binary files a/app/src/assets/gltf-glb/rigged/ik_arm_4.glb and /dev/null differ diff --git a/app/src/modules/builder/asset/assetsGroup.tsx b/app/src/modules/builder/asset/assetsGroup.tsx index 547445e..f51edf1 100644 --- a/app/src/modules/builder/asset/assetsGroup.tsx +++ b/app/src/modules/builder/asset/assetsGroup.tsx @@ -4,7 +4,7 @@ import { getFloorAssets } from '../../../services/factoryBuilder/asset/floorAsse import { useLoadingProgress, useRenameModeStore, useSelectedFloorItem, useSelectedItem, useSocketStore } from '../../../store/builder/store'; import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader"; import { DRACOLoader } from "three/examples/jsm/loaders/DRACOLoader"; -import { FloorItems, RefGroup, RefMesh } from "../../../types/world/worldTypes"; +import { FloorItems, RefMesh } from "../../../types/world/worldTypes"; import Models from "./models/models"; import useModuleStore from "../../../store/useModuleStore"; import { useThree } from "@react-three/fiber"; diff --git a/app/src/modules/builder/asset/models/model/model.tsx b/app/src/modules/builder/asset/models/model/model.tsx index 75ad55b..ff28363 100644 --- a/app/src/modules/builder/asset/models/model/model.tsx +++ b/app/src/modules/builder/asset/models/model/model.tsx @@ -73,11 +73,17 @@ function Model({ asset }: { readonly asset: Asset }) { useEffect(() => { setDeletableFloorItem(null); - if (selectedFloorItem === null || selectedFloorItem.modelUuid !== asset.modelUuid) { + if (selectedFloorItem === null || selectedFloorItem.userData.modelUuid !== asset.modelUuid) { resetAnimation(asset.modelUuid); } }, [activeModule, toolMode, selectedFloorItem]) + useEffect(() => { + if (selectedFloorItem && selectedFloorItem.userData.modelUuid === asset.modelUuid) { + setSelectedFloorItem(groupRef.current); + } + }, [isRendered, selectedFloorItem]) + useEffect(() => { const loader = new GLTFLoader(); const dracoLoader = new DRACOLoader(); diff --git a/app/src/modules/scene/camera/switchView.tsx b/app/src/modules/scene/camera/switchView.tsx index 9577f28..ce64e1f 100644 --- a/app/src/modules/scene/camera/switchView.tsx +++ b/app/src/modules/scene/camera/switchView.tsx @@ -46,14 +46,10 @@ export default function SwitchView() { // state.controls?.setLookAt(data.position.x, data.position.y, data.position.z, data.target.x, data.target.y, data.target.z, true) state.controls?.setPosition(data.position.x, data.position.y, data.position.z); state.controls?.setTarget(data.target.x, data.target.y, data.target.z); - localStorage.setItem("cameraPosition", JSON.stringify(data.position)); - localStorage.setItem("controlTarget", JSON.stringify(data.target)); } else { // state.controls?.setLookAt(...CONSTANTS.threeDimension.defaultPosition, ...CONSTANTS.threeDimension.defaultTarget, true); state.controls?.setPosition(...CONSTANTS.threeDimension.defaultPosition); state.controls?.setTarget(...CONSTANTS.threeDimension.defaultTarget); - localStorage.setItem("cameraPosition", JSON.stringify(new THREE.Vector3(...CONSTANTS.threeDimension.defaultPosition))); - localStorage.setItem("controlTarget", JSON.stringify(new THREE.Vector3(...CONSTANTS.threeDimension.defaultTarget))); } }); } catch (error) { diff --git a/app/src/modules/scene/camera/updateCameraPosition.ts b/app/src/modules/scene/camera/updateCameraPosition.ts index 91298b4..26e22ed 100644 --- a/app/src/modules/scene/camera/updateCameraPosition.ts +++ b/app/src/modules/scene/camera/updateCameraPosition.ts @@ -23,9 +23,4 @@ export default function updateCamPosition( projectId, }; socket.emit("v1:Camera:set", camData); - localStorage.setItem("cameraPosition", JSON.stringify(position)); - localStorage.setItem( - "controlTarget", - JSON.stringify(new THREE.Vector3(target.x, 0, target.z)) - ); } diff --git a/app/src/modules/scene/controls/controls.tsx b/app/src/modules/scene/controls/controls.tsx index d5bf16a..f0bbc29 100644 --- a/app/src/modules/scene/controls/controls.tsx +++ b/app/src/modules/scene/controls/controls.tsx @@ -49,9 +49,6 @@ export default function Controls() { controlsRef.current?.setTarget(...CONSTANTS.threeDimension.defaultTarget); controlsRef.current?.rotateAzimuthTo(CONSTANTS.threeDimension.defaultAzimuth); - localStorage.setItem("cameraPosition", JSON.stringify(new THREE.Vector3(...CONSTANTS.threeDimension.defaultPosition))); - localStorage.setItem("controlTarget", JSON.stringify(new THREE.Vector3(...CONSTANTS.threeDimension.defaultTarget))); - const camData = { organization, userId: userId, diff --git a/app/src/modules/scene/controls/selectionControls/selectionControls.tsx b/app/src/modules/scene/controls/selectionControls/selectionControls.tsx index 49c94dd..9a5ab33 100644 --- a/app/src/modules/scene/controls/selectionControls/selectionControls.tsx +++ b/app/src/modules/scene/controls/selectionControls/selectionControls.tsx @@ -277,12 +277,8 @@ const SelectionControls: React.FC = () => { const deleteSelection = () => { if (selectedAssets.length > 0 && duplicatedObjects.length === 0) { - const storedItems = JSON.parse(localStorage.getItem("FloorItems") ?? "[]"); const selectedUUIDs = selectedAssets.map((mesh: THREE.Object3D) => mesh.uuid); - const updatedStoredItems = storedItems.filter((item: { modelUuid: string }) => !selectedUUIDs.includes(item.modelUuid)); - localStorage.setItem("FloorItems", JSON.stringify(updatedStoredItems)); - selectedAssets.forEach((selectedMesh: THREE.Object3D) => { //REST diff --git a/app/src/modules/simulation/events/arrows/arrows.tsx b/app/src/modules/simulation/events/arrows/arrows.tsx index 59e56e2..5b9d6fd 100644 --- a/app/src/modules/simulation/events/arrows/arrows.tsx +++ b/app/src/modules/simulation/events/arrows/arrows.tsx @@ -2,6 +2,11 @@ import * as THREE from "three"; import { useMemo, useRef, useState } from "react"; import { useThree } from "@react-three/fiber"; import { useToolMode } from "../../../../store/builder/store"; +import { useSceneContext } from "../../../scene/sceneContext"; +import { useVersionContext } from "../../../builder/version/versionContext"; +import { useProductContext } from "../../products/productContext"; +import { useParams } from "react-router-dom"; +import { upsertProductOrEventApi } from "../../../../services/simulation/products/UpsertProductOrEventApi"; interface ConnectionLine { id: string; @@ -15,6 +20,28 @@ export function Arrows({ connections }: { readonly connections: ConnectionLine[] const groupRef = useRef(null); const { scene } = useThree(); const { toolMode } = useToolMode(); + const { eventStore, productStore } = useSceneContext(); + const { removeTrigger } = productStore(); + const { selectedVersionStore } = useVersionContext(); + const { selectedVersion } = selectedVersionStore(); + const { selectedProductStore } = useProductContext(); + const { selectedProduct } = selectedProductStore(); + const { projectId } = useParams(); + + const updateBackend = ( + productName: string, + productUuid: string, + projectId: string, + eventData: EventsSchema + ) => { + upsertProductOrEventApi({ + productName: productName, + productUuid: productUuid, + projectId: projectId, + eventDatas: eventData, + versionId: selectedVersion?.versionId || '', + }) + } const getWorldPositionFromScene = (uuid: string): THREE.Vector3 | null => { const obj = scene.getObjectByProperty("uuid", uuid); @@ -24,14 +51,20 @@ export function Arrows({ connections }: { readonly connections: ConnectionLine[] return pos; }; + const processedArrows = new Set(); + const createArrow = ( key: string, fullCurve: THREE.QuadraticBezierCurve3, centerT: number, segmentSize: number, scale: number, - reverse = false + reverse: boolean, + trigger: TriggerSchema ) => { + if (processedArrows.has(trigger.triggerUuid)) return []; + processedArrows.add(trigger.triggerUuid); + const t1 = Math.max(0, centerT - segmentSize / 2); const t2 = Math.min(1, centerT + segmentSize / 2); const subCurve = getSubCurve(fullCurve, t1, t2, reverse); @@ -53,26 +86,41 @@ export function Arrows({ connections }: { readonly connections: ConnectionLine[] tangent ); + const removeConnection = (trigger: TriggerSchema) => { + if (trigger.triggerUuid) { + const event = removeTrigger(selectedProduct.productUuid, trigger.triggerUuid); + if (event) { + updateBackend( + selectedProduct.productName, + selectedProduct.productUuid, + projectId || '', + event + ); + } + } + }; + return ( - + setHoveredLineKey(trigger.triggerUuid)} + onPointerOut={() => setHoveredLineKey(null)} + onClick={() => { removeConnection(trigger) }} + > setHoveredLineKey(key)} - onPointerOut={() => setHoveredLineKey(null)} > setHoveredLineKey(key)} - onPointerOut={() => setHoveredLineKey(null)} > @@ -97,50 +145,29 @@ export function Arrows({ connections }: { readonly connections: ConnectionLine[] }; const arrowGroups = connections.flatMap((connection) => { - const start = getWorldPositionFromScene(connection.startPointUuid); - const end = getWorldPositionFromScene(connection.endPointUuid); + const { startPointUuid, endPointUuid } = connection; + const start = getWorldPositionFromScene(startPointUuid); + const end = getWorldPositionFromScene(endPointUuid); if (!start || !end) return []; - const isBidirectional = connections.some( - (other) => - other.startPointUuid === connection.endPointUuid && - other.endPointUuid === connection.startPointUuid - ); + const isBidirectional = connections.some((other) => other.startPointUuid === endPointUuid && other.endPointUuid === startPointUuid); - if (isBidirectional && connection.startPointUuid < connection.endPointUuid) { - const distance = start.distanceTo(end); - const heightFactor = Math.max(0.5, distance * 0.2); - const control = new THREE.Vector3( - (start.x + end.x) / 2, - Math.max(start.y, end.y) + heightFactor, - (start.z + end.z) / 2 - ); - const curve = new THREE.QuadraticBezierCurve3(start, control, end); - const scale = THREE.MathUtils.clamp(distance * 0.75, 0.5, 3); + const distance = start.distanceTo(end); + const heightFactor = Math.max(0.5, distance * 0.2); + const control = new THREE.Vector3((start.x + end.x) / 2, Math.max(start.y, end.y) + heightFactor, (start.z + end.z) / 2); + const curve = new THREE.QuadraticBezierCurve3(start, control, end); + const scale = THREE.MathUtils.clamp(distance * 0.75, 0.5, 5); + if (isBidirectional) { return [ - createArrow(connection.id + "-fwd", curve, 0.33, 0.25, scale, true), - createArrow(connection.id + "-bwd", curve, 0.66, 0.25, scale, false), + createArrow(connection.id + "-fwd", curve, 0.33, 0.25, scale, true, connection.trigger), + createArrow(connection.id + "-bwd", curve, 0.66, 0.25, scale, false, connection.trigger), + ]; + } else { + return [ + createArrow(connection.id, curve, 0.5, 0.3, scale, false, connection.trigger) ]; } - - if (!isBidirectional) { - const distance = start.distanceTo(end); - const heightFactor = Math.max(0.5, distance * 0.2); - const control = new THREE.Vector3( - (start.x + end.x) / 2, - Math.max(start.y, end.y) + heightFactor, - (start.z + end.z) / 2 - ); - const curve = new THREE.QuadraticBezierCurve3(start, control, end); - const scale = THREE.MathUtils.clamp(distance * 0.75, 0.5, 5); - - return [ - createArrow(connection.id, curve, 0.5, 0.3, scale) - ]; - } - - return []; }); return {arrowGroups}; diff --git a/app/src/modules/simulation/events/triggerConnections/triggerConnector.tsx b/app/src/modules/simulation/events/triggerConnections/triggerConnector.tsx index ec7406c..fa035cc 100644 --- a/app/src/modules/simulation/events/triggerConnections/triggerConnector.tsx +++ b/app/src/modules/simulation/events/triggerConnections/triggerConnector.tsx @@ -503,15 +503,15 @@ function TriggerConnector() { dashed={toolMode === '3D-Delete' && hoveredLineKey === connection.id ? false : true} dashSize={0.75} dashScale={20} - onPointerOver={() => setHoveredLineKey(connection.id)} - onPointerOut={() => setHoveredLineKey(null)} - onClick={() => { - if (toolMode === '3D-Delete') { - setHoveredLineKey(null); - setCurrentLine(null); - removeConnection(connection); - } - }} + // onPointerOver={() => setHoveredLineKey(connection.id)} + // onPointerOut={() => setHoveredLineKey(null)} + // onClick={() => { + // if (toolMode === '3D-Delete') { + // setHoveredLineKey(null); + // setCurrentLine(null); + // removeConnection(connection); + // } + // }} userData={connection.trigger} /> ); diff --git a/app/src/modules/simulation/human/instances/animator/humanAnimator.tsx b/app/src/modules/simulation/human/instances/animator/humanAnimator.tsx index 89d7a82..bb944f6 100644 --- a/app/src/modules/simulation/human/instances/animator/humanAnimator.tsx +++ b/app/src/modules/simulation/human/instances/animator/humanAnimator.tsx @@ -80,7 +80,7 @@ function HumanAnimator({ path, handleCallBack, currentPhase, human, reset, start const distances = []; let accumulatedDistance = 0; let index = 0; - const rotationSpeed = 1; + const rotationSpeed = 1.5; for (let i = 0; i < currentPath.length - 1; i++) { const start = new THREE.Vector3(...currentPath[i]); @@ -108,7 +108,14 @@ function HumanAnimator({ path, handleCallBack, currentPhase, human, reset, start if (angle < 0.01) { object.quaternion.copy(targetQuaternion); } else { - object.quaternion.slerp(targetQuaternion, delta * rotationSpeed * speed * human.speed * 5); + const step = rotationSpeed * delta * speed * human.speed; + const angle = object.quaternion.angleTo(targetQuaternion); + + if (angle < step) { + object.quaternion.copy(targetQuaternion); + } else { + object.quaternion.rotateTowards(targetQuaternion, step); + } } const isAligned = angle < 0.01; @@ -145,7 +152,14 @@ function HumanAnimator({ path, handleCallBack, currentPhase, human, reset, start object.quaternion.copy(targetQuaternion); setRestingRotation(false); } else { - object.quaternion.slerp(targetQuaternion, delta * rotationSpeed * speed * human.speed * 4); + const step = rotationSpeed * delta * speed * human.speed; + const angle = object.quaternion.angleTo(targetQuaternion); + + if (angle < step) { + object.quaternion.copy(targetQuaternion); + } else { + object.quaternion.rotateTowards(targetQuaternion, step); + } } if (human.currentMaterials.length > 0) { diff --git a/app/src/modules/simulation/roboticArm/instances/animator/roboticArmAnimator.tsx b/app/src/modules/simulation/roboticArm/instances/animator/roboticArmAnimator.tsx index a9681d6..c382230 100644 --- a/app/src/modules/simulation/roboticArm/instances/animator/roboticArmAnimator.tsx +++ b/app/src/modules/simulation/roboticArm/instances/animator/roboticArmAnimator.tsx @@ -1,5 +1,5 @@ import { useEffect, useRef, useState } from 'react'; -import { useFrame, useThree } from '@react-three/fiber'; +import { useFrame } from '@react-three/fiber'; import * as THREE from 'three'; import { Line, Text } from '@react-three/drei'; import { useAnimationPlaySpeed, usePauseButtonStore, usePlayButtonStore, useResetButtonStore } from '../../../../../store/usePlayButtonStore'; @@ -10,7 +10,6 @@ type PointWithDegree = { }; function RoboticArmAnimator({ HandleCallback, restPosition, ikSolver, targetBone, armBot, path }: any) { - const { scene } = useThree(); const progressRef = useRef(0); const curveRef = useRef(null); const totalDistanceRef = useRef(0); @@ -202,11 +201,7 @@ function RoboticArmAnimator({ HandleCallback, restPosition, ikSolver, targetBone }, [circlePoints, currentPath]); // Frame update for animation - useFrame((state, delta) => { - const targetMesh = scene?.getObjectByProperty("uuid", armBot.modelUuid); - if (targetMesh) { - targetMesh.visible = (!isPlaying) - } + useFrame((_, delta) => { if (!ikSolver) return; const bone = ikSolver.mesh.skeleton.bones.find((b: any) => b.name === targetBone); diff --git a/app/src/modules/simulation/roboticArm/instances/armInstance/roboticArmInstance.tsx b/app/src/modules/simulation/roboticArm/instances/armInstance/roboticArmInstance.tsx index 5a2d724..db8cda2 100644 --- a/app/src/modules/simulation/roboticArm/instances/armInstance/roboticArmInstance.tsx +++ b/app/src/modules/simulation/roboticArm/instances/armInstance/roboticArmInstance.tsx @@ -1,10 +1,8 @@ import { useEffect, useRef, useState } from 'react' import * as THREE from "three"; -import { useThree } from "@react-three/fiber"; import IKInstance from '../ikInstance/ikInstance'; import RoboticArmAnimator from '../animator/roboticArmAnimator'; import MaterialAnimator from '../animator/materialAnimator'; -import armModel from "../../../../../assets/gltf-glb/rigged/ik_arm_1.glb"; import { useAnimationPlaySpeed, usePauseButtonStore, usePlayButtonStore, useResetButtonStore } from '../../../../../store/usePlayButtonStore'; import { useTriggerHandler } from '../../../triggers/triggerHandler/useTriggerHandler'; import { useSceneContext } from '../../../../scene/sceneContext'; @@ -14,17 +12,16 @@ function RoboticArmInstance({ armBot }: { readonly armBot: ArmBotStatus }) { const [currentPhase, setCurrentPhase] = useState<(string)>("init"); const [path, setPath] = useState<[number, number, number][]>([]); const [ikSolver, setIkSolver] = useState(null); - const { scene } = useThree(); const restPosition = new THREE.Vector3(0, 1.75, -1.6); const targetBone = "Target"; - const groupRef = useRef(null); const pauseTimeRef = useRef(null); const isPausedRef = useRef(false); const isSpeedRef = useRef(null); let startTime: number; const { selectedProductStore } = useProductContext(); - const { materialStore, armBotStore, vehicleStore, storageUnitStore, productStore } = useSceneContext(); + const { materialStore, armBotStore, vehicleStore, storageUnitStore, productStore, assetStore } = useSceneContext(); + const { resetAsset } = assetStore(); const { setArmBotActive, setArmBotState, removeCurrentAction, incrementActiveTime, incrementIdleTime } = armBotStore(); const { decrementVehicleLoad, removeLastMaterial } = vehicleStore(); const { removeLastMaterial: removeLastStorageMaterial, updateCurrentLoad } = storageUnitStore(); @@ -190,7 +187,8 @@ function RoboticArmInstance({ armBot }: { readonly armBot: ArmBotStatus }) { setCurrentPhase("init"); setPath([]) setIkSolver(null); - removeCurrentAction(armBot.modelUuid) + removeCurrentAction(armBot.modelUuid); + resetAsset(armBot.modelUuid); isPausedRef.current = false pauseTimeRef.current = null startTime = 0 @@ -266,14 +264,9 @@ function RoboticArmInstance({ armBot }: { readonly armBot: ArmBotStatus }) { } }; - }, [armBot.isActive, armBot.state, currentPhase]) - + }, [armBot, currentPhase, isPlaying]) useEffect(() => { - const targetMesh = scene?.getObjectByProperty("uuid", armBot.modelUuid); - if (targetMesh) { - targetMesh.visible = (!isPlaying) - } const targetBones = ikSolver?.mesh.skeleton.bones.find((b: any) => b.name === targetBone); if (!isReset && isPlaying) { //Moving armBot from initial point to rest position. @@ -390,7 +383,7 @@ function RoboticArmInstance({ armBot }: { readonly armBot: ArmBotStatus }) { <> {!isReset && isPlaying && ( <> - + { - const draco = new DRACOLoader(); - draco.setDecoderPath("https://cdn.jsdelivr.net/npm/three@0.160.0/examples/jsm/libs/draco/"); - loader.setDRACOLoader(draco); - }); - const cloned = useMemo(() => clone(gltf?.scene), [gltf]); +function IKInstance({ setIkSolver, armBot }: IKInstanceProps) { + const { scene } = useThree(); + const { isPlaying } = usePlayButtonStore(); + const { isReset } = useResetButtonStore(); const targetBoneName = "Target"; const skinnedMeshName = "link_0"; useEffect(() => { - if (!gltf) return; - const OOI: any = {}; - cloned.traverse((n: any) => { - if (n.name === targetBoneName) OOI.Target_Bone = n; - if (n.name === skinnedMeshName) OOI.Skinned_Mesh = n; - }); - if (!OOI.Target_Bone || !OOI.Skinned_Mesh) return; - const iks = [ - { - target: 7, - effector: 6, - links: [ - { - index: 5, - enabled: true, - rotationMin: new THREE.Vector3(-Math.PI / 2, 0, 0), - rotationMax: new THREE.Vector3(Math.PI / 2, 0, 0), - }, - { - index: 4, - enabled: true, - rotationMin: new THREE.Vector3(-Math.PI / 2, 0, 0), - rotationMax: new THREE.Vector3(0, 0, 0), - }, - { - index: 3, - enabled: true, - rotationMin: new THREE.Vector3(0, 0, 0), - rotationMax: new THREE.Vector3(2, 0, 0), - }, - { index: 1, enabled: true, limitation: new THREE.Vector3(0, 1, 0) }, - { index: 0, enabled: false, limitation: new THREE.Vector3(0, 0, 0) }, - ], - }, - ]; + let retryId: NodeJS.Timeout | null = null; - const solver = new CCDIKSolver(OOI.Skinned_Mesh, iks); - setIkSolver(solver); + const trySetup = () => { + const targetMesh = scene?.getObjectByProperty("uuid", armBot.modelUuid); - // const helper = new CCDIKHelper(OOI.Skinned_Mesh, iks, 0.05) + if (!targetMesh) { + retryId = setTimeout(trySetup, 100); + return; + } - // scene.add(helper); + const OOI: any = {}; + targetMesh.traverse((n: any) => { + if (n.name === targetBoneName) OOI.Target_Bone = n; + if (n.name === skinnedMeshName) OOI.Skinned_Mesh = n; + }); + if (!OOI.Target_Bone || !OOI.Skinned_Mesh) return; + const iks = [ + { + target: 7, + effector: 6, + links: [ + { + index: 5, + enabled: true, + rotationMin: new THREE.Vector3(-Math.PI / 2, 0, 0), + rotationMax: new THREE.Vector3(Math.PI / 2, 0, 0), + }, + { + index: 4, + enabled: true, + rotationMin: new THREE.Vector3(-Math.PI / 2, 0, 0), + rotationMax: new THREE.Vector3(0, 0, 0), + }, + { + index: 3, + enabled: true, + rotationMin: new THREE.Vector3(0, 0, 0), + rotationMax: new THREE.Vector3(2, 0, 0), + }, + { index: 1, enabled: true, limitation: new THREE.Vector3(0, 1, 0) }, + { index: 0, enabled: false, limitation: new THREE.Vector3(0, 0, 0) }, + ], + }, + ]; - }, [cloned, gltf]); + const solver = new CCDIKSolver(OOI.Skinned_Mesh, iks); + setIkSolver(solver); + + // const helper = new CCDIKHelper(OOI.Skinned_Mesh, iks, 0.05) + // scene.add(helper); + }; + + trySetup(); + + return () => { + if (retryId) clearTimeout(retryId); + }; + }, [isPlaying, isReset]); return ( - - - + <> + ) } diff --git a/app/src/modules/simulation/triggers/triggerHandler/useTriggerHandler.ts b/app/src/modules/simulation/triggers/triggerHandler/useTriggerHandler.ts index fa84cc1..815f0ca 100644 --- a/app/src/modules/simulation/triggers/triggerHandler/useTriggerHandler.ts +++ b/app/src/modules/simulation/triggers/triggerHandler/useTriggerHandler.ts @@ -299,10 +299,6 @@ export function useTriggerHandler() { const action = getActionByUuid(selectedProduct.productUuid, trigger.triggeredAsset.triggeredAction.actionUuid); const human = getHumanById(trigger.triggeredAsset?.triggeredModel.modelUuid); - if (human && human.modelUuid === "cc62adae-7000-447b-b845-6d4910de503a") { - console.log(human); - } - setPreviousLocation(material.materialId, { modelUuid: material.current.modelUuid, pointUuid: material.current.pointUuid, @@ -390,6 +386,10 @@ export function useTriggerHandler() { const human = getHumanById(trigger.triggeredAsset?.triggeredModel.modelUuid); if (human) { if (human.isActive === false && human.state === 'idle') { + + if (human && human.modelUuid === "cc62adae-7000-447b-b845-6d4910de503a") { + console.log(human); + } const conveyor = getConveyorById(action.triggers[0]?.triggeredAsset?.triggeredModel.modelUuid); if (conveyor) { if (!conveyor.isPaused) { diff --git a/app/src/modules/visualization/widgets/3d/Dropped3dWidget.tsx b/app/src/modules/visualization/widgets/3d/Dropped3dWidget.tsx index ad00c35..3da5c52 100644 --- a/app/src/modules/visualization/widgets/3d/Dropped3dWidget.tsx +++ b/app/src/modules/visualization/widgets/3d/Dropped3dWidget.tsx @@ -206,13 +206,13 @@ export default function Dropped3dWidgets() { y = Math.max(y, 0); newWidget.position = [x, y, z]; - // ✅ Prepare polygon from selectedZone.points - const points3D = selectedZone.points as Array<[number, number, number]>; - const zonePolygonXZ = points3D.map( - ([x, , z]) => [x, z] as [number, number] - ); + // // ✅ Prepare polygon from selectedZone.points + // const points3D = selectedZone.points as Array<[number, number, number]>; + // const zonePolygonXZ = points3D.map( + // ([x, , z]) => [x, z] as [number, number] + // ); - const isInside = isPointInPolygon([x, z], zonePolygonXZ); + // const isInside = isPointInPolygon([x, z], zonePolygonXZ); // ✅ Remove temp widget const prevWidgets = diff --git a/app/src/modules/visualization/widgets/3d/cards/ReturnOfInvestment.tsx b/app/src/modules/visualization/widgets/3d/cards/ReturnOfInvestment.tsx index 514b278..fa09392 100644 --- a/app/src/modules/visualization/widgets/3d/cards/ReturnOfInvestment.tsx +++ b/app/src/modules/visualization/widgets/3d/cards/ReturnOfInvestment.tsx @@ -210,10 +210,11 @@ const ReturnOfInvestment: React.FC = ({ if (response.message === "Widget not found") { return } + if (response) { - setmeasurements(response.data.Data.measurements); - setDuration(response.data.Data.duration); - setName(response.data.widgetName); + setmeasurements(response.Datastructure.measurements); + setDuration(response.Datastructure.duration); + setName(response.widgetName); } // try { // const response = await axios.get( diff --git a/app/src/pages/UserAuth.tsx b/app/src/pages/UserAuth.tsx index cdc609e..09e442e 100644 --- a/app/src/pages/UserAuth.tsx +++ b/app/src/pages/UserAuth.tsx @@ -74,10 +74,10 @@ const UserAuth: React.FC = () => { } catch (error) { console.error("Error fetching recent projects:", error); } - - } else if (res.message === "User Not Found!!! Kindly signup...") { setError("Account not found"); + } else if (res.message === "Email & Password is invalid...Check the credentials") { + setError(res.message) } else if (res.message === "Already LoggedIn on another browser....Please logout!!!") { setError("Already logged in on another browser. Please logout first."); navigate("/"); diff --git a/app/src/store/builder/useAssetStore.ts b/app/src/store/builder/useAssetStore.ts index 2223d0a..a72f1e2 100644 --- a/app/src/store/builder/useAssetStore.ts +++ b/app/src/store/builder/useAssetStore.ts @@ -9,6 +9,7 @@ interface AssetsStore { removeAsset: (modelUuid: string) => void; updateAsset: (modelUuid: string, updates: Partial) => void; clearAssets: () => void; + resetAsset: (modelUuid: string) => void; setAssets: (assets: Assets) => void; // Asset properties @@ -74,6 +75,19 @@ export const createAssetStore = () => { }); }, + resetAsset: (modelUuid) => { + const asset = get().assets.find(a => a.modelUuid === modelUuid); + if (asset) { + const clonedAsset = JSON.parse(JSON.stringify(asset)); + setTimeout(() => { + get().removeAsset(asset.modelUuid); + setTimeout(() => { + get().addAsset(clonedAsset); + }, 0); + }, 0); + } + }, + setAssets: (assets) => { set((state) => { state.assets = assets; @@ -185,7 +199,8 @@ export const createAssetStore = () => { asset.animationState.current = ''; asset.animationState.isPlaying = true; asset.animationState.loopAnimation = true; - asset.animationState.isCompleted = true; } + asset.animationState.isCompleted = true; + } }); },