-
Type
+
);
};
-export default LabledDropdown;
+export default LabledDropdown;
\ No newline at end of file
diff --git a/app/src/modules/builder/groups/floorItemsGroup.tsx b/app/src/modules/builder/groups/floorItemsGroup.tsx
index 033146d..8435724 100644
--- a/app/src/modules/builder/groups/floorItemsGroup.tsx
+++ b/app/src/modules/builder/groups/floorItemsGroup.tsx
@@ -1,5 +1,5 @@
import { useFrame, useThree } from "@react-three/fiber";
-import { useActiveTool, useCamMode, useDeletableFloorItem, useDeleteModels, useFloorItems, useRenderDistance, useselectedFloorItem, useSelectedItem, useSocketStore, useToggleView, useTransformMode } from "../../../store/store";
+import { useActiveTool, useCamMode, useDeletableFloorItem, useDeleteModels, useFloorItems, useLoadingProgress, useRenderDistance, useselectedFloorItem, useSelectedItem, useSocketStore, useToggleView, useTransformMode } from "../../../store/store";
import assetVisibility from "../geomentries/assets/assetVisibility";
import { useEffect } from "react";
import * as THREE from "three";
@@ -11,24 +11,25 @@ import DeletableHoveredFloorItems from "../geomentries/assets/deletableHoveredFl
import DeleteFloorItems from "../geomentries/assets/deleteFloorItems";
import loadInitialFloorItems from "../../scene/IntialLoad/loadInitialFloorItems";
import addAssetModel from "../geomentries/assets/addAssetModel";
-// import { getFloorItems } from "../../../services/factoryBuilder/assest/floorAsset/getFloorItemsApi";
+import { getFloorItems } from "../../../services/factoryBuilder/assest/floorAsset/getFloorItemsApi";
// import { retrieveGLTF } from "../../../utils/indexDB/idbUtils";
const assetManagerWorker = new Worker(new URL('../../../services/factoryBuilder/webWorkers/assetManagerWorker.js', import.meta.url));
-// const gltfLoaderWorker = new Worker(new URL('../../../services/factoryBuilder/webWorkers/gltfLoaderWorker.js', import.meta.url));
+const gltfLoaderWorker = new Worker(new URL('../../../services/factoryBuilder/webWorkers/gltfLoaderWorker.js', import.meta.url));
const FloorItemsGroup = ({ itemsGroup, hoveredDeletableFloorItem, AttachedObject, floorGroup, tempLoader, isTempLoader, plane }: any) => {
const state: Types.ThreeState = useThree();
- const { raycaster, camera, controls, pointer }: any = state;
- const { renderDistance, setRenderDistance } = useRenderDistance();
- const { toggleView, setToggleView } = useToggleView();
+ const { raycaster, controls }: any = state;
+ const { renderDistance } = useRenderDistance();
+ const { toggleView } = useToggleView();
const { floorItems, setFloorItems } = useFloorItems();
- const { camMode, setCamMode } = useCamMode();
- const { deleteModels, setDeleteModels } = useDeleteModels();
- const { deletableFloorItem, setDeletableFloorItem } = useDeletableFloorItem();
- const { transformMode, setTransformMode } = useTransformMode();
- const { selectedFloorItem, setselectedFloorItem } = useselectedFloorItem();
- const { activeTool, setActiveTool } = useActiveTool();
+ const { camMode } = useCamMode();
+ const { deleteModels } = useDeleteModels();
+ const { setDeletableFloorItem } = useDeletableFloorItem();
+ const { transformMode } = useTransformMode();
+ const { setselectedFloorItem } = useselectedFloorItem();
+ const { activeTool } = useActiveTool();
const { selectedItem, setSelectedItem } = useSelectedItem();
+ const { setLoadingProgress } = useLoadingProgress();
const { socket } = useSocketStore();
const loader = new GLTFLoader();
@@ -38,32 +39,57 @@ const FloorItemsGroup = ({ itemsGroup, hoveredDeletableFloorItem, AttachedObject
loader.setDRACOLoader(dracoLoader);
useEffect(() => {
- // Load initial floor items
+ const email = localStorage.getItem('email');
+ const organization = (email!.split("@")[1]).split(".")[0];
- // const email = localStorage.getItem('email');
- // const organization = (email!.split("@")[1]).split(".")[0];
+ let totalAssets = 0;
+ let loadedAssets = 0;
- // getFloorItems(organization).then((data) => {
- // gltfLoaderWorker.postMessage({ FloorItems: data })
- // })
+ const updateLoadingProgress = (progress: number) => {
+ if (progress < 100) {
+ setLoadingProgress(progress);
+ } else if (progress === 100) {
+ setTimeout(() => {
+ setLoadingProgress(100);
+ setTimeout(() => {
+ setLoadingProgress(0);
+ }, 1500);
+ }, 1000);
+ }
+ };
- // gltfLoaderWorker.onmessage = async (event) => {
- // if (event.data.message === "gltfLoaded" && event.data.modelBlob) {
- // const blobUrl = URL.createObjectURL(event.data.modelBlob);
+ getFloorItems(organization).then((data) => {
+ const uniqueItems = (data as Types.FloorItems).filter((item, index, self) =>
+ index === self.findIndex((t) => t.modelfileID === item.modelfileID)
+ );
+ totalAssets = uniqueItems.length;
+ if (totalAssets === 0) {
+ updateLoadingProgress(100);
+ return;
+ }
+ gltfLoaderWorker.postMessage({ floorItems: data });
+ });
- // loader.load(blobUrl, (gltf) => {
- // URL.revokeObjectURL(blobUrl);
- // THREE.Cache.remove(blobUrl);
- // THREE.Cache.add(event.data.modelID, gltf);
- // });
+ gltfLoaderWorker.onmessage = async (event) => {
+ if (event.data.message === "gltfLoaded" && event.data.modelBlob) {
+ const blobUrl = URL.createObjectURL(event.data.modelBlob);
- // } else if (event.data.message === "done") {
- // loadInitialFloorItems(itemsGroup, setFloorItems);
- // }
- // }
+ loader.load(blobUrl, (gltf) => {
+ URL.revokeObjectURL(blobUrl);
+ THREE.Cache.remove(blobUrl);
+ THREE.Cache.add(event.data.modelID, gltf);
+ loadedAssets++;
+ const progress = Math.round((loadedAssets / totalAssets) * 100);
+ updateLoadingProgress(progress);
- loadInitialFloorItems(itemsGroup, setFloorItems);
+ if (loadedAssets === totalAssets) {
+ loadInitialFloorItems(itemsGroup, setFloorItems);
+ updateLoadingProgress(100);
+ }
+ });
+ }
+ };
}, []);
useEffect(() => {
diff --git a/app/src/modules/builder/groups/zoneGroup.tsx b/app/src/modules/builder/groups/zoneGroup.tsx
index 9e0bc15..128a72a 100644
--- a/app/src/modules/builder/groups/zoneGroup.tsx
+++ b/app/src/modules/builder/groups/zoneGroup.tsx
@@ -145,7 +145,7 @@ const ZoneGroup: React.FC = () => {
const target: [number, number, number] | null = calculateCenter(zone.points);
if (!target) return;
- const position = [target[0], 75, target[2]];
+ const position = [target[0], 50, target[2]];
const input = {
userId: userId,
diff --git a/app/src/modules/scene/scene.tsx b/app/src/modules/scene/scene.tsx
index 3aaff94..df1246a 100644
--- a/app/src/modules/scene/scene.tsx
+++ b/app/src/modules/scene/scene.tsx
@@ -24,7 +24,6 @@ export default function Scene() {
{ name: "backward", keys: ["ArrowDown", "s", "S"] },
{ name: "left", keys: ["ArrowLeft", "a", "A"] },
{ name: "right", keys: ["ArrowRight", "d", "D"] },
- // { name: "jump", keys: ["Space"] },
], [])
return (
diff --git a/app/src/modules/simulation/behaviour/behaviour.tsx b/app/src/modules/simulation/behaviour/behaviour.tsx
index f7484f3..346e703 100644
--- a/app/src/modules/simulation/behaviour/behaviour.tsx
+++ b/app/src/modules/simulation/behaviour/behaviour.tsx
@@ -11,8 +11,9 @@ interface Path {
uuid: string;
position: [number, number, number];
rotation: [number, number, number];
- actions: { uuid: string; type: string; material: string; delay: number | string; spawnInterval: number | string; isUsed: boolean }[] | [];
- triggers: { uuid: string; type: string; isUsed: boolean }[] | [];
+ actions: { uuid: string; name: string; type: string; material: string; delay: number | string; spawnInterval: number | string; isUsed: boolean }[] | [];
+ triggers: { uuid: string; name: string; type: string; isUsed: boolean }[] | [];
+
}[];
pathPosition: [number, number, number];
pathRotation: [number, number, number];
@@ -43,21 +44,21 @@ function Behaviour({ setSimulationPaths }: { setSimulationPaths: any }) {
uuid: point1UUID,
position: [point1Position.x, point1Position.y, point1Position.z],
rotation: [0, 0, 0],
- actions: [{ uuid: THREE.MathUtils.generateUUID(), type: 'Inherit', material: 'Inherit', delay: 'Inherit', spawnInterval: 'Inherit', isUsed: false }],
+ actions: [{ uuid: THREE.MathUtils.generateUUID(), name: 'Action 1', type: 'Inherit', material: 'Inherit', delay: 'Inherit', spawnInterval: 'Inherit', isUsed: false }],
triggers: [],
},
{
uuid: middlePointUUID,
position: [middlePointPosition.x, middlePointPosition.y, middlePointPosition.z],
rotation: [0, 0, 0],
- actions: [{ uuid: THREE.MathUtils.generateUUID(), type: 'Inherit', material: 'Inherit', delay: 'Inherit', spawnInterval: 'Inherit', isUsed: false }],
+ actions: [{ uuid: THREE.MathUtils.generateUUID(), name: 'Action 1', type: 'Inherit', material: 'Inherit', delay: 'Inherit', spawnInterval: 'Inherit', isUsed: false }],
triggers: [],
},
{
uuid: point2UUID,
position: [point2Position.x, point2Position.y, point2Position.z],
rotation: [0, 0, 0],
- actions: [{ uuid: THREE.MathUtils.generateUUID(), type: 'Inherit', material: 'Inherit', delay: 'Inherit', spawnInterval: 'Inherit', isUsed: false }],
+ actions: [{ uuid: THREE.MathUtils.generateUUID(), name: 'Action 1', type: 'Inherit', material: 'Inherit', delay: 'Inherit', spawnInterval: 'Inherit', isUsed: false }],
triggers: [],
},
],
diff --git a/app/src/modules/simulation/path/pathConnector.tsx b/app/src/modules/simulation/path/pathConnector.tsx
index 03724d5..9b27c48 100644
--- a/app/src/modules/simulation/path/pathConnector.tsx
+++ b/app/src/modules/simulation/path/pathConnector.tsx
@@ -47,7 +47,7 @@ function PathConnector({ pathsGroupRef }: { pathsGroupRef: React.MutableRefObjec
if (intersects.length > 0) {
const intersected = intersects[0].object;
- if (intersected.name.includes("event-sphere")) {
+ if (intersected.name.includes("action-sphere")) {
const pathUUID = intersected.userData.path.modeluuid;
const sphereUUID = intersected.uuid;
const worldPosition = new THREE.Vector3();
@@ -153,7 +153,7 @@ function PathConnector({ pathsGroupRef }: { pathsGroupRef: React.MutableRefObjec
}
const sphereIntersects = raycaster.intersectObjects(pathsGroupRef.current.children, true).filter((obj) =>
- obj.object.name.includes("event-sphere")
+ obj.object.name.includes("action-sphere")
);
if (sphereIntersects.length > 0) {
diff --git a/app/src/modules/simulation/path/pathCreation.tsx b/app/src/modules/simulation/path/pathCreation.tsx
index 7ff7489..00dfe57 100644
--- a/app/src/modules/simulation/path/pathCreation.tsx
+++ b/app/src/modules/simulation/path/pathCreation.tsx
@@ -12,8 +12,8 @@ interface Path {
uuid: string;
position: [number, number, number];
rotation: [number, number, number];
- actions: { uuid: string; type: string; material: string; delay: number | string; spawnInterval: number | string; isUsed: boolean }[] | [];
- triggers: { uuid: string; type: string; isUsed: boolean }[] | [];
+ actions: { uuid: string; name: string; type: string; material: string; delay: number | string; spawnInterval: number | string; isUsed: boolean }[] | [];
+ triggers: { uuid: string; name: string; type: string; isUsed: boolean }[] | [];
}[];
pathPosition: [number, number, number];
pathRotation: [number, number, number];
@@ -26,7 +26,7 @@ function PathCreation({ pathsGroupRef }: { pathsGroupRef: React.MutableRefObject
const { setSelectedActionSphere, selectedActionSphere } = useSelectedActionSphere();
const { setSelectedPath } = useSelectedPath();
const { simulationPaths, setSimulationPaths } = useSimulationPaths();
- const { isConnecting, setIsConnecting } = useIsConnecting();
+ const { isConnecting } = useIsConnecting();
const { camera } = useThree();
const groupRefs = useRef<{ [key: string]: THREE.Group }>({});
@@ -105,6 +105,7 @@ function PathCreation({ pathsGroupRef }: { pathsGroupRef: React.MutableRefObject
setSelectedPath({ path, group: groupRefs.current[path.modeluuid] });
setSelectedActionSphere(null);
setTransformMode(null);
+ setSubModule('mechanics');
}}
onPointerMissed={() => {
setSelectedPath(null);
@@ -117,7 +118,7 @@ function PathCreation({ pathsGroupRef }: { pathsGroupRef: React.MutableRefObject
uuid={point.uuid}
position={point.position}
args={[0.15, 32, 32]}
- name='event-sphere'
+ name='action-sphere'
ref={el => (sphereRefs.current[point.uuid] = el!)}
onClick={(e) => {
if (isConnecting) return;
diff --git a/app/src/modules/simulation/simulationUI.tsx b/app/src/modules/simulation/simulationUI.tsx
index 1ce60e7..e7d1834 100644
--- a/app/src/modules/simulation/simulationUI.tsx
+++ b/app/src/modules/simulation/simulationUI.tsx
@@ -14,15 +14,25 @@ function SimulationUI() {
const handleAddAction = () => {
if (!selectedActionSphere) return;
- const newAction = { uuid: THREE.MathUtils.generateUUID(), type: 'Inherit', material: 'Inherit', delay: 'Inherit', spawnInterval: 'Inherit', isUsed: false };
-
const updatedPaths = simulationPaths.map((path) => ({
...path,
- points: path.points.map((point) =>
- point.uuid === selectedActionSphere.point.uuid
- ? { ...point, actions: [...point.actions, newAction] }
- : point
- ),
+ points: path.points.map((point) => {
+ if (point.uuid === selectedActionSphere.point.uuid) {
+ const actionIndex = point.actions.length;
+ const newAction = {
+ uuid: THREE.MathUtils.generateUUID(),
+ name: `Action ${actionIndex + 1}`, // Assign action name based on index
+ type: 'Inherit',
+ material: 'Inherit',
+ delay: 'Inherit',
+ spawnInterval: 'Inherit',
+ isUsed: false
+ };
+
+ return { ...point, actions: [...point.actions, newAction] };
+ }
+ return point;
+ }),
}));
setSimulationPaths(updatedPaths);
@@ -137,15 +147,22 @@ function SimulationUI() {
const handleAddTrigger = () => {
if (!selectedActionSphere) return;
- const newTrigger = { uuid: THREE.MathUtils.generateUUID(), type: '', isUsed: false };
-
const updatedPaths = simulationPaths.map((path) => ({
...path,
- points: path.points.map((point) =>
- point.uuid === selectedActionSphere.point.uuid
- ? { ...point, triggers: [...point.triggers, newTrigger] }
- : point
- ),
+ points: path.points.map((point) => {
+ if (point.uuid === selectedActionSphere.point.uuid) {
+ const triggerIndex = point.triggers.length;
+ const newTrigger = {
+ uuid: THREE.MathUtils.generateUUID(),
+ name: `Trigger ${triggerIndex + 1}`, // Assign name based on index
+ type: '',
+ isUsed: false
+ };
+
+ return { ...point, triggers: [...point.triggers, newTrigger] };
+ }
+ return point;
+ }),
}));
setSimulationPaths(updatedPaths);
diff --git a/app/src/pages/Project.tsx b/app/src/pages/Project.tsx
index 02a02b9..8a48516 100644
--- a/app/src/pages/Project.tsx
+++ b/app/src/pages/Project.tsx
@@ -5,7 +5,7 @@ import SideBarRight from "../components/layout/sidebarRight/SideBarRight";
import useModuleStore from "../store/useModuleStore";
import RealTimeVisulization from "../components/ui/componets/RealTimeVisulization";
import Tools from "../components/ui/Tools";
-import Scene from "../modules/scene/scene";
+// import Scene from "../modules/scene/scene";
import {
useSocketStore,
useFloorItems,
@@ -13,14 +13,16 @@ import {
useUserName,
useWallItems,
useZones,
+ useLoadingProgress,
} from "../store/store";
import { useNavigate } from "react-router-dom";
-import SimulationUI from "../modules/simulation/simulationUI";
+// import SimulationUI from "../modules/simulation/simulationUI";
+import LoadingPage from "../components/templates/LoadingPage";
const Project: React.FC = () => {
let navigate = useNavigate();
const { activeModule } = useModuleStore();
-
+ const { loadingProgress, setLoadingProgress } = useLoadingProgress();
const { setUserName } = useUserName();
const { setOrganization } = useOrganization();
const { setFloorItems } = useFloorItems();
@@ -47,16 +49,13 @@ const Project: React.FC = () => {
return (
+ {loadingProgress &&
}
{activeModule !== "market" &&
}
{/*
*/}
-
);
};
diff --git a/app/src/pages/UserAuth.tsx b/app/src/pages/UserAuth.tsx
index 851ab7e..a5a7c57 100644
--- a/app/src/pages/UserAuth.tsx
+++ b/app/src/pages/UserAuth.tsx
@@ -2,10 +2,9 @@ import React, { useState, FormEvent } from "react";
import { useNavigate } from "react-router-dom";
import { LogoIconLarge } from "../components/icons/Logo";
import { EyeIcon } from "../components/icons/ExportCommonIcons";
-import { useOrganization, useUserName } from "../store/store";
+import { useLoadingProgress, useOrganization, useUserName } from "../store/store";
import { signInApi } from "../services/factoryBuilder/signInSignUp/signInApi";
import { signUpApi } from "../services/factoryBuilder/signInSignUp/signUpApi";
-// import LoadingPage from "../components/templates/LoadingPage";
const UserAuth: React.FC = () => {
const [email, setEmail] = useState("");
@@ -14,7 +13,8 @@ const UserAuth: React.FC = () => {
const [error, setError] = useState("");
const [isSignIn, setIsSignIn] = useState(true);
const { userName, setUserName } = useUserName();
- const { organization, setOrganization } = useOrganization();
+ const { setOrganization } = useOrganization();
+ const { setLoadingProgress } = useLoadingProgress();
const navigate = useNavigate();
@@ -33,6 +33,7 @@ const UserAuth: React.FC = () => {
localStorage.setItem("email", res.email);
localStorage.setItem("userName", res.name);
if (res.isShare) {
+ setLoadingProgress(1);
navigate("/Project");
}
} else if (res.message === "User Not Found!!! Kindly signup...") {
@@ -63,7 +64,6 @@ const UserAuth: React.FC = () => {
return (
<>
- {/*
*/}
@@ -141,7 +141,7 @@ const UserAuth: React.FC = () => {
{!isSignIn && (
-
+
I have read and agree to the terms of service
diff --git a/app/src/services/factoryBuilder/webWorkers/gltfLoaderWorker.js b/app/src/services/factoryBuilder/webWorkers/gltfLoaderWorker.js
index effa8b3..2fbdc13 100644
--- a/app/src/services/factoryBuilder/webWorkers/gltfLoaderWorker.js
+++ b/app/src/services/factoryBuilder/webWorkers/gltfLoaderWorker.js
@@ -1,7 +1,7 @@
import * as THREE from 'three';
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader';
import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader';
-import { retrieveGLTF, storeGLTF } from '../../../components/scene/indexDB/idbUtils';
+import { retrieveGLTF, storeGLTF } from '../../../utils/indexDB/idbUtils';
const loader = new GLTFLoader();
const dracoLoader = new DRACOLoader();
diff --git a/app/src/store/store.ts b/app/src/store/store.ts
index 0cca1fe..0aa980b 100644
--- a/app/src/store/store.ts
+++ b/app/src/store/store.ts
@@ -26,6 +26,11 @@ export const useSocketStore = create
((set: any, get: any) => ({
}
}));
+export const useLoadingProgress = create<{ loadingProgress: number; setLoadingProgress: (x: number) => void }>((set) => ({
+ loadingProgress: 1,
+ setLoadingProgress: (x: number) => set({ loadingProgress: x }),
+}));
+
export const useOrganization = create((set: any) => ({
organization: "",
setOrganization: (x: any) => set(() => ({ organization: x })),
@@ -300,8 +305,8 @@ interface Path {
uuid: string;
position: [number, number, number];
rotation: [number, number, number];
- actions: { uuid: string; type: string; material: string; delay: number | string; spawnInterval: number | string; isUsed: boolean }[] | [];
- triggers: { uuid: string; type: string; isUsed: boolean }[] | [];
+ actions: { uuid: string; name: string; type: string; material: string; delay: number | string; spawnInterval: number | string; isUsed: boolean }[] | [];
+ triggers: { uuid: string; name: string; type: string; isUsed: boolean }[] | [];
}[];
pathPosition: [number, number, number];
pathRotation: [number, number, number];