From 23e7ba39e86f77bfd076b1b6e7b994a663680797 Mon Sep 17 00:00:00 2001 From: Jerald-Golden-B Date: Mon, 8 Sep 2025 13:46:47 +0530 Subject: [PATCH 1/8] Refactor builder module and remove unused components - Removed CalculateAreaGroup and computeArea function as they were no longer needed. - Updated Floor2DInstance and Zone2DInstance to calculate area and centroid using new utility functions. - Refactored WallInstances to include Floor2D rendering and improved area display. - Cleaned up imports and ensured consistent formatting across files. - Enhanced performance by memoizing calculations for area and centroid. - Removed deprecated state management for rooms and version history visibility. --- app/src/components/footer/Footer.tsx | 211 +++++++++--------- .../layout/sidebarRight/SideBarRight.tsx | 52 ++--- .../versionHisory/VersionHistory.tsx | 62 ++--- app/src/components/ui/ModuleToggle.tsx | 170 +++++++------- app/src/components/ui/menu/menu.tsx | 24 +- app/src/modules/builder/builder.tsx | 15 +- .../Instances/Instance/floor2DInstance.tsx | 81 ++++--- .../floor/Instances/floorInstances.tsx | 61 +++-- .../modules/builder/functions/computeArea.ts | 29 --- app/src/modules/builder/functions/getArea.ts | 10 + .../builder/functions/getCenteroid.tsx | 48 ++++ .../builder/groups/calculateAreaGroup.tsx | 106 --------- .../builder/wall/Instances/wallInstances.tsx | 130 +++++++---- .../Instances/Instance/zone2DInstance.tsx | 75 ++++--- .../builder/zone/Instances/zoneInstances.tsx | 52 ++--- app/src/store/builder/store.ts | 23 -- app/src/store/builder/useVersionStore.ts | 35 +-- app/src/types/world/worldConstants.ts | 6 +- .../utils/shortcutkeys/handleShortcutKeys.ts | 17 +- 19 files changed, 562 insertions(+), 645 deletions(-) delete mode 100644 app/src/modules/builder/functions/computeArea.ts create mode 100644 app/src/modules/builder/functions/getArea.ts create mode 100644 app/src/modules/builder/functions/getCenteroid.tsx delete mode 100644 app/src/modules/builder/groups/calculateAreaGroup.tsx diff --git a/app/src/components/footer/Footer.tsx b/app/src/components/footer/Footer.tsx index eb1a430..5ebcfbd 100644 --- a/app/src/components/footer/Footer.tsx +++ b/app/src/components/footer/Footer.tsx @@ -4,7 +4,7 @@ import { useLogger } from "../ui/log/LoggerContext"; import { GetLogIcon } from "./getLogIcons"; import { CurserLeftIcon, CurserMiddleIcon, CurserRightIcon } from "../icons/LogIcons"; import ShortcutHelper from "./shortcutHelper"; -import useVersionHistoryVisibleStore, { useShortcutStore } from "../../store/builder/store"; +import { useShortcutStore } from "../../store/builder/store"; import { usePlayButtonStore } from "../../store/ui/usePlayButtonStore"; import useModuleStore, { useSubModuleStore } from "../../store/ui/useModuleStore"; import { mouseActionHelper } from "../../utils/mouseUtils/mouseHelper"; @@ -12,123 +12,118 @@ import { useMouseNoteStore } from "../../store/ui/useUIToggleStore"; import { useSceneContext } from "../../modules/scene/sceneContext"; const Footer: React.FC = () => { - const { logs, setIsLogListVisible } = useLogger(); - const lastLog = logs[logs.length - 1] || null; + const { logs, setIsLogListVisible } = useLogger(); + const lastLog = logs[logs.length - 1] || null; - const { setActiveModule } = useModuleStore(); - const { setSubModule } = useSubModuleStore(); - const { setVersionHistoryVisible } = useVersionHistoryVisibleStore(); - const { isPlaying } = usePlayButtonStore(); - const { showShortcuts, setShowShortcuts } = useShortcutStore(); - const { versionStore } = useSceneContext(); - const { selectedVersion } = versionStore(); + const { setActiveModule } = useModuleStore(); + const { setSubModule } = useSubModuleStore(); + const { isPlaying } = usePlayButtonStore(); + const { showShortcuts, setShowShortcuts } = useShortcutStore(); + const { versionStore } = useSceneContext(); + const { selectedVersion, setVersionHistoryVisible } = versionStore(); - const { Leftnote, Middlenote, Rightnote } = useMouseNoteStore(); - const [isOnline, setIsOnline] = useState(navigator.onLine); + const { Leftnote, Middlenote, Rightnote } = useMouseNoteStore(); + const [isOnline, setIsOnline] = useState(navigator.onLine); - // -------------------- Online/Offline Handlers -------------------- - const handleOnline = useCallback(() => { - echo.success("You are back Online"); - setIsOnline(true); - }, []); + // -------------------- Online/Offline Handlers -------------------- + const handleOnline = useCallback(() => { + echo.success("You are back Online"); + setIsOnline(true); + }, []); - const handleOffline = useCallback(() => { - echo.warn("Changes made now might not be saved"); - echo.error("You are now Offline."); - setIsOnline(false); - }, []); + const handleOffline = useCallback(() => { + echo.warn("Changes made now might not be saved"); + echo.error("You are now Offline."); + setIsOnline(false); + }, []); - useEffect(() => { - window.addEventListener("online", handleOnline); - window.addEventListener("offline", handleOffline); - return () => { - window.removeEventListener("online", handleOnline); - window.removeEventListener("offline", handleOffline); - }; - }, [handleOnline, handleOffline]); + useEffect(() => { + window.addEventListener("online", handleOnline); + window.addEventListener("offline", handleOffline); + return () => { + window.removeEventListener("online", handleOnline); + window.removeEventListener("offline", handleOffline); + }; + }, [handleOnline, handleOffline]); - // -------------------- Mouse Buttons -------------------- - const mouseButtons = useMemo( - () => [ - { icon: , label: Leftnote || "Pan", mouse: "left" }, - { icon: , label: Middlenote || "Scroll Zoom", mouse: "middle" }, - { icon: , label: Rightnote || "Orbit / Cancel action", mouse: "right" }, - ], - [Leftnote, Middlenote, Rightnote] - ); + // -------------------- Mouse Buttons -------------------- + const mouseButtons = useMemo( + () => [ + { icon: , label: Leftnote || "Pan", mouse: "left" }, + { icon: , label: Middlenote || "Scroll Zoom", mouse: "middle" }, + { icon: , label: Rightnote || "Orbit / Cancel action", mouse: "right" }, + ], + [Leftnote, Middlenote, Rightnote] + ); - // -------------------- Mouse Helper -------------------- - useEffect(() => { - const cleanup = mouseActionHelper(); - return () => cleanup(); - }, []); + // -------------------- Mouse Helper -------------------- + useEffect(() => { + const cleanup = mouseActionHelper(); + return () => cleanup(); + }, []); - return ( -
-
- {/* Mouse Button Info */} -
- {mouseButtons.map(({ icon, label, mouse }) => ( -
-
{icon}
-
{label}
+ return ( +
+
+ {/* Mouse Button Info */} +
+ {mouseButtons.map(({ icon, label, mouse }) => ( +
+
{icon}
+
{label}
+
+ ))} +
+ + {/* Logs and Version */} +
+
+
+ +
+ +
+ +
{ + setVersionHistoryVisible(true); + setSubModule("properties"); + setActiveModule("builder"); + }} + > + {selectedVersion?.version ?? "v 0.0.0"} +
+ +
+
+ +
+
+ +
+
{isOnline ? "Online" : "Offline"}
+
+
- ))} + + {/* Shortcut Helper */} + {!isPlaying && showShortcuts && ( +
+ +
+ )}
- - {/* Logs and Version */} -
-
-
- -
- -
- -
{ - setVersionHistoryVisible(true); - setSubModule("properties"); - setActiveModule("builder"); - }} - > - {selectedVersion?.version ?? "v 0.0.0"} -
- -
-
- -
-
- -
-
{isOnline ? "Online" : "Offline"}
-
-
-
- - {/* Shortcut Helper */} - {!isPlaying && showShortcuts && ( -
- -
- )} -
- ); + ); }; export default Footer; diff --git a/app/src/components/layout/sidebarRight/SideBarRight.tsx b/app/src/components/layout/sidebarRight/SideBarRight.tsx index ef9f1a2..66dd729 100644 --- a/app/src/components/layout/sidebarRight/SideBarRight.tsx +++ b/app/src/components/layout/sidebarRight/SideBarRight.tsx @@ -1,13 +1,13 @@ import React, { useEffect, useState } from "react"; import Header from "./Header"; import useModuleStore, { useSubModuleStore } from "../../../store/ui/useModuleStore"; -import { AnalysisIcon, FilePackageIcon, MechanicsIcon, PropertiesIcon, SimulationIcon, } from "../../icons/SimulationIcons"; +import { AnalysisIcon, FilePackageIcon, MechanicsIcon, PropertiesIcon, SimulationIcon } from "../../icons/SimulationIcons"; import { useToggleStore } from "../../../store/ui/useUIToggleStore"; import Visualization from "./visualization/Visualization"; import Analysis from "./analysis/Analysis"; import Simulations from "./simulation/Simulations"; -import useVersionHistoryVisibleStore, { useIsComparing, useToolMode } from "../../../store/builder/store"; -import { useSelectedEventData, useSelectedEventSphere, } from "../../../store/simulation/useSimulationStore"; +import { useIsComparing, useToolMode } from "../../../store/builder/store"; +import { useSelectedEventData, useSelectedEventSphere } from "../../../store/simulation/useSimulationStore"; import { useBuilderStore } from "../../../store/builder/useBuilderStore"; import GlobalProperties from "./properties/GlobalProperties"; import AssetProperties from "./properties/AssetProperties"; @@ -22,6 +22,7 @@ import SelectedFloorProperties from "./properties/SelectedFloorProperties"; import SelectedDecalProperties from "./properties/SelectedDecalProperties"; import SelectedAisleProperties from "./properties/SelectedAisleProperties"; import ResourceManagement from "./resourceManagement/ResourceManagement"; +import { useSceneContext } from "../../../modules/scene/sceneContext"; type DisplayComponent = | "versionHistory" @@ -51,7 +52,8 @@ const SideBarRight: React.FC = () => { const { selectedWall, selectedFloor, selectedAisle, selectedFloorAsset } = useBuilderStore(); const { selectedEventData } = useSelectedEventData(); const { selectedEventSphere } = useSelectedEventSphere(); - const { viewVersionHistory, setVersionHistoryVisible } = useVersionHistoryVisibleStore(); + const { versionStore } = useSceneContext(); + const { viewVersionHistory, setVersionHistoryVisible } = versionStore(); const { isComparing } = useIsComparing(); const [displayComponent, setDisplayComponent] = useState("none"); @@ -207,8 +209,7 @@ const SideBarRight: React.FC = () => { <> - )} + {(activeModule === "builder" || activeModule === "simulation") && ( + + )}
)} diff --git a/app/src/components/layout/sidebarRight/versionHisory/VersionHistory.tsx b/app/src/components/layout/sidebarRight/versionHisory/VersionHistory.tsx index 14e862f..cd5b400 100644 --- a/app/src/components/layout/sidebarRight/versionHisory/VersionHistory.tsx +++ b/app/src/components/layout/sidebarRight/versionHisory/VersionHistory.tsx @@ -2,7 +2,6 @@ import { useParams } from "react-router-dom"; import { AddIcon, ArrowIcon, CloseIcon, KebabIcon, LocationIcon } from "../../../icons/ExportCommonIcons"; import { useSubModuleStore } from "../../../../store/ui/useModuleStore"; import { useSceneContext } from "../../../../modules/scene/sceneContext"; -import useVersionHistoryVisibleStore from "../../../../store/builder/store"; import RenameInput from "../../../ui/inputs/RenameInput"; import { getVersionDataApi } from "../../../../services/factoryBuilder/versionControl/getVersionDataApi"; @@ -10,8 +9,7 @@ import { getVersionDataApi } from "../../../../services/factoryBuilder/versionCo const VersionHistory = () => { const { setSubModule } = useSubModuleStore(); const { versionStore } = useSceneContext(); - const { setVersionHistoryVisible } = useVersionHistoryVisibleStore(); - const { versionHistory, setCreateNewVersion, selectedVersion, setSelectedVersion } = versionStore(); + const { versionHistory, setCreateNewVersion, selectedVersion, setSelectedVersion, setVersionHistoryVisible } = versionStore(); const { projectId } = useParams(); const addNewVersion = () => { @@ -21,16 +19,16 @@ const VersionHistory = () => { const handleSelectVersion = (version: Version) => { if (!projectId) return; - getVersionDataApi(projectId, version.versionId).then((versionData) => { - setSelectedVersion(version); - }).catch((err) => { - echo.error(err); - }) + getVersionDataApi(projectId, version.versionId) + .then((versionData) => { + setSelectedVersion(version); + }) + .catch((err) => { + echo.error(err); + }); }; - const handleVersionNameChange = (newName: string, versionId: string) => { - - }; + const handleVersionNameChange = (newName: string, versionId: string) => {}; return (
@@ -38,11 +36,7 @@ const VersionHistory = () => {
Version History
-
@@ -64,9 +58,7 @@ const VersionHistory = () => { {/* Shortcut Info */}
i
-
- Press Ctrl + Alt + S to add to version history while editing -
+
Press Ctrl + Alt + S to add to version history while editing
{/* Current Version Display */} @@ -76,12 +68,8 @@ const VersionHistory = () => {
-
- Current Version ({selectedVersion.version}) -
-
- {versionHistory.length} Saved History -
+
Current Version ({selectedVersion.version})
+
{versionHistory.length} Saved History
)} @@ -93,16 +81,8 @@ const VersionHistory = () => { ) : ( versionHistory.map((version) => { const key = `version-${version.versionId}`; - return ( - - ); + return ; }) - )}
@@ -119,22 +99,14 @@ type VersionHistoryItemProps = { const VersionHistoryItem: React.FC = ({ version, onSelect, onRename }) => { return ( - + + +
-
Builder
- - - - -
- ); + ); }; export default ModuleToggle; diff --git a/app/src/components/ui/menu/menu.tsx b/app/src/components/ui/menu/menu.tsx index babb9eb..bc3e0cd 100644 --- a/app/src/components/ui/menu/menu.tsx +++ b/app/src/components/ui/menu/menu.tsx @@ -2,7 +2,7 @@ import React, { useState } from "react"; import { useNavigate } from "react-router-dom"; import { ArrowIcon } from "../../icons/ExportCommonIcons"; import { toggleTheme } from "../../../utils/theme"; -import useVersionHistoryVisibleStore, { useShortcutStore } from "../../../store/builder/store"; +import { useShortcutStore } from "../../../store/builder/store"; import useModuleStore, { useSubModuleStore } from "../../../store/ui/useModuleStore"; import { useSceneContext } from "../../../modules/scene/sceneContext"; @@ -25,8 +25,7 @@ const MenuBar: React.FC = ({ setOpenMenu }) => { const [selectedItems, setSelectedItems] = useState>({}); const { versionStore } = useSceneContext(); - const { setCreateNewVersion } = versionStore(); - const { setVersionHistoryVisible } = useVersionHistoryVisibleStore(); + const { setCreateNewVersion, setVersionHistoryVisible } = versionStore(); const { setActiveModule } = useModuleStore(); const { setSubModule } = useSubModuleStore(); const { showShortcuts, setShowShortcuts } = useShortcutStore(); @@ -79,7 +78,16 @@ const MenuBar: React.FC = ({ setOpenMenu }) => { { label: "Import" }, { label: "Close File" }, ], - Edit: [{ label: "Undo", shortcut: "Ctrl + Z" }, { label: "Redo", shortcut: "Ctrl + Shift + Z" }, { label: "Undo History" }, { label: "Redo History" }, { label: "Find", shortcut: "Ctrl + F" }, { label: "Delete" }, { label: "Select by..." }, { label: "Keymap" }], + Edit: [ + { label: "Undo", shortcut: "Ctrl + Z" }, + { label: "Redo", shortcut: "Ctrl + Shift + Z" }, + { label: "Undo History" }, + { label: "Redo History" }, + { label: "Find", shortcut: "Ctrl + F" }, + { label: "Delete" }, + { label: "Select by..." }, + { label: "Keymap" }, + ], View: [ { label: "Grid" }, { @@ -172,7 +180,13 @@ const MenuBar: React.FC = ({ setOpenMenu }) => {
{items.map((item) => item.submenu ? ( - - - @@ -123,9 +99,7 @@ const SidePannel: React.FC = ({ setActiveTab, activeTab }) => { Tutorials +
+
- -
- - - {isKebabOpen && - createPortal( -
- {getOptions().map((option) => ( - - ))} -
, - document.body - )} - - ); + {isKebabOpen && + createPortal( +
+ {getOptions().map((option) => ( + + ))} +
, + document.body + )} + + ); }; export default DashboardCard; From 8b2b6eea47ee0f4adfe4a5970dc6c06070d7d563 Mon Sep 17 00:00:00 2001 From: Jerald-Golden-B Date: Mon, 8 Sep 2025 17:05:07 +0530 Subject: [PATCH 6/8] refactor: Add SyncCam import and useState hook to Controls component for enhanced functionality --- app/src/modules/scene/controls/controls.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/modules/scene/controls/controls.tsx b/app/src/modules/scene/controls/controls.tsx index 7cad4e7..0345a03 100644 --- a/app/src/modules/scene/controls/controls.tsx +++ b/app/src/modules/scene/controls/controls.tsx @@ -1,5 +1,5 @@ import { CameraControls } from "@react-three/drei"; -import { useRef, useEffect } from "react"; +import { useRef, useEffect, useState } from "react"; import { useThree } from "@react-three/fiber"; import * as THREE from "three"; import * as CONSTANTS from "../../../types/world/worldConstants"; @@ -7,6 +7,7 @@ import { useSocketStore, useToggleView, useResetCamera } from "../../../store/bu import CamMode from "../camera/camMode"; import SwitchView from "../camera/switchView"; +import SyncCam from "../camera/syncCam"; import ContextControls from "./contextControls/contextControls"; import TransformControl from "./transformControls/transformControls"; import SelectionControls2D from "./selectionControls/selection2D/selectionControls2D"; @@ -20,7 +21,6 @@ import { getUserData } from "../../../functions/getUserData"; import { getCameraApi } from "../../../services/factoryBuilder/camera/getCameraApi"; import { setCameraApi } from "../../../services/factoryBuilder/camera/setCameraApi"; import updateCamPosition from "../camera/functions/updateCameraPosition"; -import SyncCam from "../camera/syncCam"; export default function Controls() { const controlsRef = useRef(null); From 0b43d53d0fe043c8da7e2da9cda1e9b169fd9e57 Mon Sep 17 00:00:00 2001 From: Jerald-Golden-B Date: Mon, 8 Sep 2025 17:31:16 +0530 Subject: [PATCH 7/8] refactor: Clean up addAssetModel and CamMode components; streamline state management and improve readability --- .../builder/asset/functions/addAssetModel.ts | 95 +++++++++---------- app/src/modules/scene/camera/camMode.tsx | 6 +- app/src/modules/scene/scene.tsx | 1 + 3 files changed, 47 insertions(+), 55 deletions(-) diff --git a/app/src/modules/builder/asset/functions/addAssetModel.ts b/app/src/modules/builder/asset/functions/addAssetModel.ts index 6a4496a..ffe5f9c 100644 --- a/app/src/modules/builder/asset/functions/addAssetModel.ts +++ b/app/src/modules/builder/asset/functions/addAssetModel.ts @@ -7,7 +7,7 @@ import * as CONSTANTS from "../../../../types/world/worldConstants"; import PointsCalculator from "../../../simulation/events/points/functions/pointsCalculator"; import { getUserData } from "../../../../functions/getUserData"; -import { setAssetsApi } from '../../../../services/factoryBuilder/asset/floorAsset/setAssetsApi'; +import { setAssetsApi } from "../../../../services/factoryBuilder/asset/floorAsset/setAssetsApi"; async function addAssetModel( scene: THREE.Scene, @@ -63,13 +63,12 @@ async function addAssetModel( } if (intersectPoint) { - if (intersectPoint.y < 0) { intersectPoint = new THREE.Vector3(intersectPoint.x, 0, intersectPoint.z); } const cachedModel = THREE.Cache.get(selectedItem.id); if (cachedModel) { - handleModelLoad(cachedModel, intersectPoint!, selectedItem, addEvent, addAsset, socket, selectedVersion?.versionId || '', projectId, userId); + handleModelLoad(cachedModel, intersectPoint!, selectedItem, addEvent, addAsset, socket, selectedVersion?.versionId || "", projectId, userId); return; } else { const cachedModelBlob = await retrieveGLTF(selectedItem.id); @@ -79,21 +78,19 @@ async function addAssetModel( URL.revokeObjectURL(blobUrl); THREE.Cache.remove(blobUrl); THREE.Cache.add(selectedItem.id, gltf); - handleModelLoad(gltf, intersectPoint!, selectedItem, addEvent, addAsset, socket, selectedVersion?.versionId || '', projectId, userId); + handleModelLoad(gltf, intersectPoint!, selectedItem, addEvent, addAsset, socket, selectedVersion?.versionId || "", projectId, userId); }); } else { - loader.load(`${url_Backend_dwinzo}/api/v2/AssetFile/${selectedItem.id}`, - async (gltf) => { - const modelBlob = await fetch(`${url_Backend_dwinzo}/api/v2/AssetFile/${selectedItem.id}`).then((res) => res.blob()); - await storeGLTF(selectedItem.id, modelBlob); - THREE.Cache.add(selectedItem.id, gltf); - await handleModelLoad(gltf, intersectPoint!, selectedItem, addEvent, addAsset, socket, selectedVersion?.versionId || '', projectId, userId); - } - ); + loader.load(`${url_Backend_dwinzo}/api/v2/AssetFile/${selectedItem.id}`, async (gltf) => { + const modelBlob = await fetch(`${url_Backend_dwinzo}/api/v2/AssetFile/${selectedItem.id}`).then((res) => res.blob()); + await storeGLTF(selectedItem.id, modelBlob); + THREE.Cache.add(selectedItem.id, gltf); + await handleModelLoad(gltf, intersectPoint!, selectedItem, addEvent, addAsset, socket, selectedVersion?.versionId || "", projectId, userId); + }); } } } - } catch (error) { + } catch { echo.error("Failed to add asset"); } finally { setSelectedItem({}); @@ -118,7 +115,7 @@ async function handleModelLoad( modelId: selectedItem.id, modelUuid: model.uuid, }; - model.position.set(intersectPoint!.x, intersectPoint!.y, intersectPoint!.z); + model.position.set(intersectPoint.x, intersectPoint.y, intersectPoint.z); model.scale.set(...CONSTANTS.assetConfig.defaultScaleAfterGsap); model.traverse((child: any) => { @@ -132,7 +129,7 @@ async function handleModelLoad( modelUuid: model.uuid, modelName: selectedItem.name, assetId: selectedItem.id, - position: [intersectPoint!.x, intersectPoint!.y, intersectPoint!.z], + position: [intersectPoint.x, intersectPoint.y, intersectPoint.z], rotation: [0, 0, 0], isLocked: false, isVisible: true, @@ -141,13 +138,9 @@ async function handleModelLoad( }; if (selectedItem.type) { - const data = PointsCalculator( - selectedItem.type, - gltf.scene.clone(), - new THREE.Vector3(...model.rotation) - ); + const data = PointsCalculator(selectedItem.type, gltf.scene.clone(), new THREE.Vector3(...model.rotation)); - if (!data || !data.points) return; + if (!data?.points) return; const eventData: any = { type: selectedItem.type, subType: selectedItem.subType }; @@ -159,7 +152,7 @@ async function handleModelLoad( rotation: newFloorItem.rotation, state: "idle", type: "transfer", - subType: selectedItem.subType || '', + subType: selectedItem.subType || "", speed: 1, points: data.points.map((point: THREE.Vector3, index: number) => { const triggers: TriggerSchema[] = []; @@ -228,7 +221,7 @@ async function handleModelLoad( rotation: newFloorItem.rotation, state: "idle", type: "vehicle", - subType: selectedItem.subType || '', + subType: selectedItem.subType || "", speed: 1, point: { uuid: THREE.MathUtils.generateUUID(), @@ -266,7 +259,7 @@ async function handleModelLoad( rotation: newFloorItem.rotation, state: "idle", type: "roboticArm", - subType: selectedItem.subType || '', + subType: selectedItem.subType || "", speed: 1, point: { uuid: THREE.MathUtils.generateUUID(), @@ -300,7 +293,7 @@ async function handleModelLoad( rotation: newFloorItem.rotation, state: "idle", type: "machine", - subType: selectedItem.subType || '', + subType: selectedItem.subType || "", point: { uuid: THREE.MathUtils.generateUUID(), position: [data.points[0].x, data.points[0].y, data.points[0].z], @@ -332,7 +325,7 @@ async function handleModelLoad( storageCapacity: 10, storageCount: 10, materialType: "Default material", - subType: selectedItem.subType || '', + subType: selectedItem.subType || "", point: { uuid: THREE.MathUtils.generateUUID(), position: [data.points[0].x, data.points[0].y, data.points[0].z], @@ -343,7 +336,7 @@ async function handleModelLoad( actionName: "Action 1", actionType: "store", triggers: [], - } + }, ], }, }; @@ -361,7 +354,7 @@ async function handleModelLoad( rotation: newFloorItem.rotation, state: "idle", type: "human", - subType: selectedItem.subType || '', + subType: selectedItem.subType || "", speed: 1, point: { uuid: THREE.MathUtils.generateUUID(), @@ -375,23 +368,23 @@ async function handleModelLoad( loadCount: 1, assemblyCount: 1, assemblyCondition: { - conditionType: 'material', - materialType: "Default material" + conditionType: "material", + materialType: "Default material", }, manufactureCount: 1, loadCapacity: 1, processTime: 10, - triggers: [] - } - ] - } - } + triggers: [], + }, + ], + }, + }; addEvent(humanEvent); eventData.point = { uuid: humanEvent.point.uuid, position: humanEvent.point.position, rotation: humanEvent.point.rotation, - } + }; } else if (selectedItem.type === "Crane") { const craneEvent: CraneEventSchema = { modelUuid: newFloorItem.modelUuid, @@ -400,7 +393,7 @@ async function handleModelLoad( rotation: newFloorItem.rotation, state: "idle", type: "crane", - subType: selectedItem.subType || '', + subType: selectedItem.subType || "", point: { uuid: THREE.MathUtils.generateUUID(), position: [data.points[0].x, data.points[0].y, data.points[0].z], @@ -411,17 +404,17 @@ async function handleModelLoad( actionName: "Action 1", actionType: "pickAndDrop", maxPickUpCount: 1, - triggers: [] - } - ] - } - } + triggers: [], + }, + ], + }, + }; addEvent(craneEvent); eventData.point = { uuid: craneEvent.point.uuid, position: craneEvent.point.position, rotation: craneEvent.point.rotation, - } + }; } const completeData = { @@ -430,10 +423,10 @@ async function handleModelLoad( modelName: newFloorItem.modelName, assetId: newFloorItem.assetId, position: newFloorItem.position, - rotation: { x: model.rotation.x, y: model.rotation.y, z: model.rotation.z, }, + rotation: { x: model.rotation.x, y: model.rotation.y, z: model.rotation.z }, isLocked: false, isVisible: true, - socketId: socket?.id || '', + socketId: socket?.id || "", eventData: eventData, versionId: versionId, projectId: projectId, @@ -448,14 +441,13 @@ async function handleModelLoad( modelName: newFloorItem.modelName, position: newFloorItem.position, assetId: newFloorItem.assetId, - rotation: { x: model.rotation.x, y: model.rotation.y, z: model.rotation.z, }, + rotation: { x: model.rotation.x, y: model.rotation.y, z: model.rotation.z }, eventData: eventData, isLocked: false, isVisible: true, versionId: versionId, projectId: projectId, }); - } else { // SOCKET @@ -467,7 +459,7 @@ async function handleModelLoad( modelName: completeData.modelName, assetId: completeData.assetId, position: completeData.position, - rotation: [completeData.rotation.x, completeData.rotation.y, completeData.rotation.z,] as [number, number, number], + rotation: [completeData.rotation.x, completeData.rotation.y, completeData.rotation.z] as [number, number, number], isLocked: completeData.isLocked, isCollidable: false, isVisible: completeData.isVisible, @@ -483,10 +475,10 @@ async function handleModelLoad( modelName: newFloorItem.modelName, assetId: newFloorItem.assetId, position: newFloorItem.position, - rotation: { x: model.rotation.x, y: model.rotation.y, z: model.rotation.z, }, + rotation: { x: model.rotation.x, y: model.rotation.y, z: model.rotation.z }, isLocked: false, isVisible: true, - socketId: socket?.id || '', + socketId: socket?.id || "", versionId: versionId, projectId: projectId, userId: userId, @@ -500,13 +492,12 @@ async function handleModelLoad( modelName: newFloorItem.modelName, position: newFloorItem.position, assetId: newFloorItem.assetId, - rotation: { x: model.rotation.x, y: model.rotation.y, z: model.rotation.z, }, + rotation: { x: model.rotation.x, y: model.rotation.y, z: model.rotation.z }, isLocked: false, isVisible: true, versionId: versionId, projectId: projectId, }); - } else { // SOCKET diff --git a/app/src/modules/scene/camera/camMode.tsx b/app/src/modules/scene/camera/camMode.tsx index caece18..881838c 100644 --- a/app/src/modules/scene/camera/camMode.tsx +++ b/app/src/modules/scene/camera/camMode.tsx @@ -40,7 +40,7 @@ const CamMode: React.FC = () => { const keyCombination = detectModifierKeys(event); if (keyCombination === "/" && !isTransitioning && !toggleView) { - setIsTransitioning && setIsTransitioning(true); + setIsTransitioning(true); state.controls.mouseButtons.left = CONSTANTS.controlsTransition.leftMouse; state.controls.mouseButtons.right = CONSTANTS.controlsTransition.rightMouse; @@ -55,10 +55,10 @@ const CamMode: React.FC = () => { await switchToThirdPerson(state.controls, state.camera); } - setIsTransitioning && setIsTransitioning(false); + setIsTransitioning(false); } - if (keyCombination === 'Shift') { + if (keyCombination === "Shift") { setIsShiftActive(true); } }; diff --git a/app/src/modules/scene/scene.tsx b/app/src/modules/scene/scene.tsx index 52c9907..28576bd 100644 --- a/app/src/modules/scene/scene.tsx +++ b/app/src/modules/scene/scene.tsx @@ -23,6 +23,7 @@ export default function Scene({ layout }: { readonly layout: "Main Layout" | "Co { name: "backward", keys: ["ArrowDown", "s", "S"] }, { name: "left", keys: ["ArrowLeft", "a", "A"] }, { name: "right", keys: ["ArrowRight", "d", "D"] }, + { name: "jump", keys: ["Space"] }, ], [] ); From 775b151364b15f8bba44a249127469a98b23a057 Mon Sep 17 00:00:00 2001 From: Jerald-Golden-B Date: Mon, 8 Sep 2025 18:03:28 +0530 Subject: [PATCH 8/8] human bug fixed --- .../actionHandler/useRetrieveHandler.ts | 73 +++++++++++++++++-- 1 file changed, 67 insertions(+), 6 deletions(-) diff --git a/app/src/modules/simulation/actions/storageUnit/actionHandler/useRetrieveHandler.ts b/app/src/modules/simulation/actions/storageUnit/actionHandler/useRetrieveHandler.ts index fbbff34..15821fb 100644 --- a/app/src/modules/simulation/actions/storageUnit/actionHandler/useRetrieveHandler.ts +++ b/app/src/modules/simulation/actions/storageUnit/actionHandler/useRetrieveHandler.ts @@ -169,14 +169,24 @@ export function useRetrieveHandler() { if (vehicle && !vehicle.isActive && vehicle.state === "idle" && vehicle.isPicking && vehicle.currentLoad < vehicle.point.action.loadCapacity) { const material = createNewMaterial(lastMaterial.materialId, lastMaterial.materialType, storageAction as StorageAction); if (material) { - addCurrentAction(triggeredModel.modelUuid, retrieval.action.triggers[0]?.triggeredAsset.triggeredAction?.actionUuid ?? "", material.materialType, material.materialId); + addCurrentAction( + triggeredModel.modelUuid, + retrieval.action.triggers[0]?.triggeredAsset.triggeredAction?.actionUuid ?? "", + material.materialType, + material.materialId + ); retrieveLogStatus(material.materialName, `is being picked by ${armBot?.modelName}`); } } } else { const material = createNewMaterial(lastMaterial.materialId, lastMaterial.materialType, storageAction as StorageAction); if (material) { - addCurrentAction(triggeredModel.modelUuid, retrieval.action.triggers[0]?.triggeredAsset.triggeredAction?.actionUuid ?? "", material.materialType, material.materialId); + addCurrentAction( + triggeredModel.modelUuid, + retrieval.action.triggers[0]?.triggeredAsset.triggeredAction?.actionUuid ?? "", + material.materialType, + material.materialId + ); retrieveLogStatus(material.materialName, `is being picked by ${armBot?.modelName}`); } } @@ -282,7 +292,9 @@ export function useRetrieveHandler() { } if (human && !human.isScheduled && human.state === "idle" && human.currentLoad < action.loadCapacity) { - const triggeredModel = action.triggers[0]?.triggeredAsset?.triggeredModel?.modelUuid ? getEventByModelUuid(selectedProduct.productUuid, action.triggers[0].triggeredAsset.triggeredModel.modelUuid) : null; + const triggeredModel = action.triggers[0]?.triggeredAsset?.triggeredModel?.modelUuid + ? getEventByModelUuid(selectedProduct.productUuid, action.triggers[0].triggeredAsset.triggeredModel.modelUuid) + : null; const storageAction = getActionByUuid(selectedProduct.productUuid, actionUuid); @@ -290,7 +302,18 @@ export function useRetrieveHandler() { const model = getVehicleById(triggeredModel.modelUuid); if (model && !model.isActive && model.state === "idle" && model.isPicking && model.currentLoad < model.point.action.loadCapacity) { if (humanAsset?.animationState?.current === "idle") { - setCurrentAnimation(human.modelUuid, "pickup", true, false, false); + if (!monitoredHumansRef.current.has(human.modelUuid)) { + addHumanToMonitor( + human.modelUuid, + () => { + if (humanAsset?.animationState?.current === "idle") { + setCurrentAnimation(human.modelUuid, "pickup", true, false, false); + } + }, + action.actionUuid + ); + } + monitoredHumansRef.current.add(human.modelUuid); } else if (humanAsset?.animationState?.current === "pickup" && humanAsset.animationState.isCompleted) { const lastMaterial = getLastMaterial(storageUnit.modelUuid); if (lastMaterial) { @@ -305,6 +328,7 @@ export function useRetrieveHandler() { retrievalCountRef.current.set(actionUuid, currentCount + 1); } } + monitoredHumansRef.current.delete(human.modelUuid); } return; } @@ -312,7 +336,18 @@ export function useRetrieveHandler() { const armBot = getArmBotById(triggeredModel.modelUuid); if (armBot && !armBot.isActive && armBot.state === "idle" && !armBot.currentAction) { if (humanAsset?.animationState?.current === "idle") { - setCurrentAnimation(human.modelUuid, "pickup", true, false, false); + if (!monitoredHumansRef.current.has(human.modelUuid)) { + addHumanToMonitor( + human.modelUuid, + () => { + if (humanAsset?.animationState?.current === "idle") { + setCurrentAnimation(human.modelUuid, "pickup", true, false, false); + } + }, + action.actionUuid + ); + } + monitoredHumansRef.current.add(human.modelUuid); } else if (humanAsset?.animationState?.current === "pickup" && humanAsset.animationState.isCompleted) { const lastMaterial = getLastMaterial(storageUnit.modelUuid); if (lastMaterial) { @@ -327,6 +362,7 @@ export function useRetrieveHandler() { retrievalCountRef.current.set(actionUuid, currentCount + 1); } } + monitoredHumansRef.current.delete(human.modelUuid); } return; } @@ -334,7 +370,18 @@ export function useRetrieveHandler() { const model = getConveyorById(triggeredModel.modelUuid); if (model && !model.isPaused) { if (humanAsset?.animationState?.current === "idle") { - setCurrentAnimation(human.modelUuid, "pickup", true, false, false); + if (!monitoredHumansRef.current.has(human.modelUuid)) { + addHumanToMonitor( + human.modelUuid, + () => { + if (humanAsset?.animationState?.current === "idle") { + setCurrentAnimation(human.modelUuid, "pickup", true, false, false); + } + }, + action.actionUuid + ); + } + monitoredHumansRef.current.add(human.modelUuid); } else if (humanAsset?.animationState?.current === "pickup" && humanAsset.animationState.isCompleted) { const lastMaterial = getLastMaterial(storageUnit.modelUuid); if (lastMaterial) { @@ -349,6 +396,7 @@ export function useRetrieveHandler() { retrievalCountRef.current.set(actionUuid, currentCount + 1); } } + monitoredHumansRef.current.delete(human.modelUuid); } return; } @@ -385,6 +433,18 @@ export function useRetrieveHandler() { return; } } else if (triggeredModel?.type === "storageUnit") { + if (!monitoredHumansRef.current.has(human.modelUuid)) { + addHumanToMonitor( + human.modelUuid, + () => { + if (humanAsset?.animationState?.current === "idle") { + setCurrentAnimation(human.modelUuid, "pickup", true, false, false); + } + }, + action.actionUuid + ); + } + monitoredHumansRef.current.add(human.modelUuid); const lastMaterial = getLastMaterial(storageUnit.modelUuid); if (lastMaterial) { const material = createNewMaterial(lastMaterial.materialId, lastMaterial.materialType, storageAction as StorageAction); @@ -397,6 +457,7 @@ export function useRetrieveHandler() { retrievalCountRef.current.set(actionUuid, currentCount + 1); } + monitoredHumansRef.current.delete(human.modelUuid); } } }