refactor: Clean up addAssetModel and CamMode components; streamline state management and improve readability

This commit is contained in:
2025-09-08 17:31:16 +05:30
parent 8b2b6eea47
commit 0b43d53d0f
3 changed files with 47 additions and 55 deletions

View File

@@ -7,7 +7,7 @@ import * as CONSTANTS from "../../../../types/world/worldConstants";
import PointsCalculator from "../../../simulation/events/points/functions/pointsCalculator"; import PointsCalculator from "../../../simulation/events/points/functions/pointsCalculator";
import { getUserData } from "../../../../functions/getUserData"; import { getUserData } from "../../../../functions/getUserData";
import { setAssetsApi } from '../../../../services/factoryBuilder/asset/floorAsset/setAssetsApi'; import { setAssetsApi } from "../../../../services/factoryBuilder/asset/floorAsset/setAssetsApi";
async function addAssetModel( async function addAssetModel(
scene: THREE.Scene, scene: THREE.Scene,
@@ -63,13 +63,12 @@ async function addAssetModel(
} }
if (intersectPoint) { if (intersectPoint) {
if (intersectPoint.y < 0) { if (intersectPoint.y < 0) {
intersectPoint = new THREE.Vector3(intersectPoint.x, 0, intersectPoint.z); intersectPoint = new THREE.Vector3(intersectPoint.x, 0, intersectPoint.z);
} }
const cachedModel = THREE.Cache.get(selectedItem.id); const cachedModel = THREE.Cache.get(selectedItem.id);
if (cachedModel) { 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; return;
} else { } else {
const cachedModelBlob = await retrieveGLTF(selectedItem.id); const cachedModelBlob = await retrieveGLTF(selectedItem.id);
@@ -79,21 +78,19 @@ async function addAssetModel(
URL.revokeObjectURL(blobUrl); URL.revokeObjectURL(blobUrl);
THREE.Cache.remove(blobUrl); THREE.Cache.remove(blobUrl);
THREE.Cache.add(selectedItem.id, gltf); 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 { } else {
loader.load(`${url_Backend_dwinzo}/api/v2/AssetFile/${selectedItem.id}`, loader.load(`${url_Backend_dwinzo}/api/v2/AssetFile/${selectedItem.id}`, async (gltf) => {
async (gltf) => { const modelBlob = await fetch(`${url_Backend_dwinzo}/api/v2/AssetFile/${selectedItem.id}`).then((res) => res.blob());
const modelBlob = await fetch(`${url_Backend_dwinzo}/api/v2/AssetFile/${selectedItem.id}`).then((res) => res.blob()); await storeGLTF(selectedItem.id, modelBlob);
await storeGLTF(selectedItem.id, modelBlob); THREE.Cache.add(selectedItem.id, gltf);
THREE.Cache.add(selectedItem.id, gltf); await handleModelLoad(gltf, intersectPoint!, selectedItem, addEvent, addAsset, socket, selectedVersion?.versionId || "", projectId, userId);
await handleModelLoad(gltf, intersectPoint!, selectedItem, addEvent, addAsset, socket, selectedVersion?.versionId || '', projectId, userId); });
}
);
} }
} }
} }
} catch (error) { } catch {
echo.error("Failed to add asset"); echo.error("Failed to add asset");
} finally { } finally {
setSelectedItem({}); setSelectedItem({});
@@ -118,7 +115,7 @@ async function handleModelLoad(
modelId: selectedItem.id, modelId: selectedItem.id,
modelUuid: model.uuid, 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.scale.set(...CONSTANTS.assetConfig.defaultScaleAfterGsap);
model.traverse((child: any) => { model.traverse((child: any) => {
@@ -132,7 +129,7 @@ async function handleModelLoad(
modelUuid: model.uuid, modelUuid: model.uuid,
modelName: selectedItem.name, modelName: selectedItem.name,
assetId: selectedItem.id, assetId: selectedItem.id,
position: [intersectPoint!.x, intersectPoint!.y, intersectPoint!.z], position: [intersectPoint.x, intersectPoint.y, intersectPoint.z],
rotation: [0, 0, 0], rotation: [0, 0, 0],
isLocked: false, isLocked: false,
isVisible: true, isVisible: true,
@@ -141,13 +138,9 @@ async function handleModelLoad(
}; };
if (selectedItem.type) { if (selectedItem.type) {
const data = PointsCalculator( const data = PointsCalculator(selectedItem.type, gltf.scene.clone(), new THREE.Vector3(...model.rotation));
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 }; const eventData: any = { type: selectedItem.type, subType: selectedItem.subType };
@@ -159,7 +152,7 @@ async function handleModelLoad(
rotation: newFloorItem.rotation, rotation: newFloorItem.rotation,
state: "idle", state: "idle",
type: "transfer", type: "transfer",
subType: selectedItem.subType || '', subType: selectedItem.subType || "",
speed: 1, speed: 1,
points: data.points.map((point: THREE.Vector3, index: number) => { points: data.points.map((point: THREE.Vector3, index: number) => {
const triggers: TriggerSchema[] = []; const triggers: TriggerSchema[] = [];
@@ -228,7 +221,7 @@ async function handleModelLoad(
rotation: newFloorItem.rotation, rotation: newFloorItem.rotation,
state: "idle", state: "idle",
type: "vehicle", type: "vehicle",
subType: selectedItem.subType || '', subType: selectedItem.subType || "",
speed: 1, speed: 1,
point: { point: {
uuid: THREE.MathUtils.generateUUID(), uuid: THREE.MathUtils.generateUUID(),
@@ -266,7 +259,7 @@ async function handleModelLoad(
rotation: newFloorItem.rotation, rotation: newFloorItem.rotation,
state: "idle", state: "idle",
type: "roboticArm", type: "roboticArm",
subType: selectedItem.subType || '', subType: selectedItem.subType || "",
speed: 1, speed: 1,
point: { point: {
uuid: THREE.MathUtils.generateUUID(), uuid: THREE.MathUtils.generateUUID(),
@@ -300,7 +293,7 @@ async function handleModelLoad(
rotation: newFloorItem.rotation, rotation: newFloorItem.rotation,
state: "idle", state: "idle",
type: "machine", type: "machine",
subType: selectedItem.subType || '', subType: selectedItem.subType || "",
point: { point: {
uuid: THREE.MathUtils.generateUUID(), uuid: THREE.MathUtils.generateUUID(),
position: [data.points[0].x, data.points[0].y, data.points[0].z], position: [data.points[0].x, data.points[0].y, data.points[0].z],
@@ -332,7 +325,7 @@ async function handleModelLoad(
storageCapacity: 10, storageCapacity: 10,
storageCount: 10, storageCount: 10,
materialType: "Default material", materialType: "Default material",
subType: selectedItem.subType || '', subType: selectedItem.subType || "",
point: { point: {
uuid: THREE.MathUtils.generateUUID(), uuid: THREE.MathUtils.generateUUID(),
position: [data.points[0].x, data.points[0].y, data.points[0].z], position: [data.points[0].x, data.points[0].y, data.points[0].z],
@@ -343,7 +336,7 @@ async function handleModelLoad(
actionName: "Action 1", actionName: "Action 1",
actionType: "store", actionType: "store",
triggers: [], triggers: [],
} },
], ],
}, },
}; };
@@ -361,7 +354,7 @@ async function handleModelLoad(
rotation: newFloorItem.rotation, rotation: newFloorItem.rotation,
state: "idle", state: "idle",
type: "human", type: "human",
subType: selectedItem.subType || '', subType: selectedItem.subType || "",
speed: 1, speed: 1,
point: { point: {
uuid: THREE.MathUtils.generateUUID(), uuid: THREE.MathUtils.generateUUID(),
@@ -375,23 +368,23 @@ async function handleModelLoad(
loadCount: 1, loadCount: 1,
assemblyCount: 1, assemblyCount: 1,
assemblyCondition: { assemblyCondition: {
conditionType: 'material', conditionType: "material",
materialType: "Default material" materialType: "Default material",
}, },
manufactureCount: 1, manufactureCount: 1,
loadCapacity: 1, loadCapacity: 1,
processTime: 10, processTime: 10,
triggers: [] triggers: [],
} },
] ],
} },
} };
addEvent(humanEvent); addEvent(humanEvent);
eventData.point = { eventData.point = {
uuid: humanEvent.point.uuid, uuid: humanEvent.point.uuid,
position: humanEvent.point.position, position: humanEvent.point.position,
rotation: humanEvent.point.rotation, rotation: humanEvent.point.rotation,
} };
} else if (selectedItem.type === "Crane") { } else if (selectedItem.type === "Crane") {
const craneEvent: CraneEventSchema = { const craneEvent: CraneEventSchema = {
modelUuid: newFloorItem.modelUuid, modelUuid: newFloorItem.modelUuid,
@@ -400,7 +393,7 @@ async function handleModelLoad(
rotation: newFloorItem.rotation, rotation: newFloorItem.rotation,
state: "idle", state: "idle",
type: "crane", type: "crane",
subType: selectedItem.subType || '', subType: selectedItem.subType || "",
point: { point: {
uuid: THREE.MathUtils.generateUUID(), uuid: THREE.MathUtils.generateUUID(),
position: [data.points[0].x, data.points[0].y, data.points[0].z], position: [data.points[0].x, data.points[0].y, data.points[0].z],
@@ -411,17 +404,17 @@ async function handleModelLoad(
actionName: "Action 1", actionName: "Action 1",
actionType: "pickAndDrop", actionType: "pickAndDrop",
maxPickUpCount: 1, maxPickUpCount: 1,
triggers: [] triggers: [],
} },
] ],
} },
} };
addEvent(craneEvent); addEvent(craneEvent);
eventData.point = { eventData.point = {
uuid: craneEvent.point.uuid, uuid: craneEvent.point.uuid,
position: craneEvent.point.position, position: craneEvent.point.position,
rotation: craneEvent.point.rotation, rotation: craneEvent.point.rotation,
} };
} }
const completeData = { const completeData = {
@@ -430,10 +423,10 @@ async function handleModelLoad(
modelName: newFloorItem.modelName, modelName: newFloorItem.modelName,
assetId: newFloorItem.assetId, assetId: newFloorItem.assetId,
position: newFloorItem.position, 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, isLocked: false,
isVisible: true, isVisible: true,
socketId: socket?.id || '', socketId: socket?.id || "",
eventData: eventData, eventData: eventData,
versionId: versionId, versionId: versionId,
projectId: projectId, projectId: projectId,
@@ -448,14 +441,13 @@ async function handleModelLoad(
modelName: newFloorItem.modelName, modelName: newFloorItem.modelName,
position: newFloorItem.position, position: newFloorItem.position,
assetId: newFloorItem.assetId, 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, eventData: eventData,
isLocked: false, isLocked: false,
isVisible: true, isVisible: true,
versionId: versionId, versionId: versionId,
projectId: projectId, projectId: projectId,
}); });
} else { } else {
// SOCKET // SOCKET
@@ -467,7 +459,7 @@ async function handleModelLoad(
modelName: completeData.modelName, modelName: completeData.modelName,
assetId: completeData.assetId, assetId: completeData.assetId,
position: completeData.position, 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, isLocked: completeData.isLocked,
isCollidable: false, isCollidable: false,
isVisible: completeData.isVisible, isVisible: completeData.isVisible,
@@ -483,10 +475,10 @@ async function handleModelLoad(
modelName: newFloorItem.modelName, modelName: newFloorItem.modelName,
assetId: newFloorItem.assetId, assetId: newFloorItem.assetId,
position: newFloorItem.position, 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, isLocked: false,
isVisible: true, isVisible: true,
socketId: socket?.id || '', socketId: socket?.id || "",
versionId: versionId, versionId: versionId,
projectId: projectId, projectId: projectId,
userId: userId, userId: userId,
@@ -500,13 +492,12 @@ async function handleModelLoad(
modelName: newFloorItem.modelName, modelName: newFloorItem.modelName,
position: newFloorItem.position, position: newFloorItem.position,
assetId: newFloorItem.assetId, 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, isLocked: false,
isVisible: true, isVisible: true,
versionId: versionId, versionId: versionId,
projectId: projectId, projectId: projectId,
}); });
} else { } else {
// SOCKET // SOCKET

View File

@@ -40,7 +40,7 @@ const CamMode: React.FC = () => {
const keyCombination = detectModifierKeys(event); const keyCombination = detectModifierKeys(event);
if (keyCombination === "/" && !isTransitioning && !toggleView) { if (keyCombination === "/" && !isTransitioning && !toggleView) {
setIsTransitioning && setIsTransitioning(true); setIsTransitioning(true);
state.controls.mouseButtons.left = CONSTANTS.controlsTransition.leftMouse; state.controls.mouseButtons.left = CONSTANTS.controlsTransition.leftMouse;
state.controls.mouseButtons.right = CONSTANTS.controlsTransition.rightMouse; state.controls.mouseButtons.right = CONSTANTS.controlsTransition.rightMouse;
@@ -55,10 +55,10 @@ const CamMode: React.FC = () => {
await switchToThirdPerson(state.controls, state.camera); await switchToThirdPerson(state.controls, state.camera);
} }
setIsTransitioning && setIsTransitioning(false); setIsTransitioning(false);
} }
if (keyCombination === 'Shift') { if (keyCombination === "Shift") {
setIsShiftActive(true); setIsShiftActive(true);
} }
}; };

View File

@@ -23,6 +23,7 @@ export default function Scene({ layout }: { readonly layout: "Main Layout" | "Co
{ name: "backward", keys: ["ArrowDown", "s", "S"] }, { name: "backward", keys: ["ArrowDown", "s", "S"] },
{ name: "left", keys: ["ArrowLeft", "a", "A"] }, { name: "left", keys: ["ArrowLeft", "a", "A"] },
{ name: "right", keys: ["ArrowRight", "d", "D"] }, { name: "right", keys: ["ArrowRight", "d", "D"] },
{ name: "jump", keys: ["Space"] },
], ],
[] []
); );