refactor: Clean up addAssetModel and CamMode components; streamline state management and improve readability
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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"] },
|
||||||
],
|
],
|
||||||
[]
|
[]
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user