diff --git a/app/src/components/layout/sidebarRight/properties/GlobalProperties.tsx b/app/src/components/layout/sidebarRight/properties/GlobalProperties.tsx
index c075f52..15d32ce 100644
--- a/app/src/components/layout/sidebarRight/properties/GlobalProperties.tsx
+++ b/app/src/components/layout/sidebarRight/properties/GlobalProperties.tsx
@@ -216,6 +216,7 @@ const GlobalProperties: React.FC = () => {
// setRenderDistance(parseInt(e.target.value));
// }
// }
+
return (
@@ -239,12 +240,12 @@ const GlobalProperties: React.FC = () => {
label="Wall Visibility"
onClick={changeWallVisibility}
/>
- {/* */}
+ />
{
- if (!selectedPointData || !selectedAction.actionId) return;
+ const handleDeleteAction = (actionUuid: string) => {
+ if (!selectedPointData || !actionUuid) return;
- const updatedActions = selectedPointData.actions.filter(action => action.actionUuid !== selectedAction.actionId);
+ const updatedActions = selectedPointData.actions.filter(action => action.actionUuid !== actionUuid);
const updatedPoint = { ...selectedPointData, actions: updatedActions };
const event = removeAction(
selectedProduct.productUuid,
- selectedAction.actionId
+ actionUuid
);
if (event) {
diff --git a/app/src/modules/builder/asset/models/model/model.tsx b/app/src/modules/builder/asset/models/model/model.tsx
index 429a9c3..92f6d73 100644
--- a/app/src/modules/builder/asset/models/model/model.tsx
+++ b/app/src/modules/builder/asset/models/model/model.tsx
@@ -92,6 +92,17 @@ function Model({ asset }: { readonly asset: Asset }) {
}
}, [asset.modelUuid, ikData])
+ useEffect(() => {
+ if (gltfScene) {
+ gltfScene.traverse((child: any) => {
+ if (child.isMesh) {
+ child.castShadow = true;
+ child.receiveShadow = true;
+ }
+ })
+ }
+ }, [gltfScene]);
+
useEffect(() => {
setDeletableFloorItem(null);
if (selectedFloorItem === null || selectedFloorItem.userData.modelUuid !== asset.modelUuid) {
@@ -481,6 +492,8 @@ function Model({ asset }: { readonly asset: Asset }) {
rotation={asset.rotation}
visible={asset.isVisible}
userData={{ ...asset, iks: ikData }}
+ castShadow
+ receiveShadow
onDoubleClick={(e) => {
e.stopPropagation();
if (!toggleView) {
diff --git a/app/src/modules/builder/wall/Instances/instance/wall.tsx b/app/src/modules/builder/wall/Instances/instance/wall.tsx
index a441ea8..1a73bfe 100644
--- a/app/src/modules/builder/wall/Instances/instance/wall.tsx
+++ b/app/src/modules/builder/wall/Instances/instance/wall.tsx
@@ -10,7 +10,7 @@ import { useToggleView, useWallVisibility } from '../../../../../store/builder/s
import { useBuilderStore } from '../../../../../store/builder/useBuilderStore';
import * as Constants from '../../../../../types/world/worldConstants';
-import DecalInstance from '../../../Decal/decalInstance';
+// import DecalInstance from '../../../Decal/decalInstance';
import defaultMaterial from '../../../../../assets/textures/floor/wall-tex.png';
import material1 from '../../../../../assets/textures/floor/factory wall texture.jpg';
@@ -63,10 +63,10 @@ function Wall({ wall }: { readonly wall: Wall }) {
const materials = useMemo(() => {
return [
- new THREE.MeshStandardMaterial({ color: Constants.wallConfig.defaultColor, side: THREE.DoubleSide, visible: visible }), // Left
- new THREE.MeshStandardMaterial({ color: Constants.wallConfig.defaultColor, side: THREE.DoubleSide, visible: visible }), // Right
- new THREE.MeshStandardMaterial({ color: Constants.wallConfig.defaultColor, side: THREE.DoubleSide, visible: visible }), // Top
- new THREE.MeshStandardMaterial({ color: Constants.wallConfig.defaultColor, side: THREE.DoubleSide, visible: visible }), // Bottom
+ new THREE.MeshStandardMaterial({ color: Constants.wallConfig.defaultColor, side: THREE.DoubleSide, visible: visible, clipShadows: true }), // Left
+ new THREE.MeshStandardMaterial({ color: Constants.wallConfig.defaultColor, side: THREE.DoubleSide, visible: visible, clipShadows: true }), // Right
+ new THREE.MeshStandardMaterial({ color: Constants.wallConfig.defaultColor, side: THREE.DoubleSide, visible: visible, clipShadows: true }), // Top
+ new THREE.MeshStandardMaterial({ color: Constants.wallConfig.defaultColor, side: THREE.DoubleSide, visible: visible, clipShadows: true }), // Bottom
new THREE.MeshStandardMaterial({
color: Constants.wallConfig.defaultColor,
side: THREE.DoubleSide,
@@ -99,11 +99,15 @@ function Wall({ wall }: { readonly wall: Wall }) {
return (
{
+ const model = scene.getObjectByProperty("uuid", pastedObject.userData.modelUuid);
+ if (!model) return;
const newPos = new THREE.Vector3().addVectors(hit, relativePositions[index]);
- setPosition(pastedObject.userData.modelUuid, [newPos.x, 0, newPos.z]);
+ model.position.set(newPos.x, 0, newPos.z);
});
-
}
});
@@ -204,7 +205,9 @@ const CopyPasteControls3D = ({
if (pastedAsset) {
const assetUuid = pastedAsset.userData.modelUuid;
const asset = getAssetById(assetUuid);
- if (!asset) return;
+ const model = scene.getObjectByProperty("uuid", pastedAsset.userData.modelUuid);
+ if (!asset || !model) return;
+ const position = new THREE.Vector3().copy(model.position);
const newFloorItem: Types.FloorItemType = {
modelUuid: pastedAsset.userData.modelUuid,
@@ -427,7 +430,7 @@ const CopyPasteControls3D = ({
modelUuid: newFloorItem.modelUuid,
modelName: newFloorItem.modelName,
assetId: newFloorItem.assetId,
- position: newFloorItem.position,
+ position: [position.x, 0, position.z],
rotation: { x: pastedAsset.rotation.x, y: pastedAsset.rotation.y, z: pastedAsset.rotation.z },
isLocked: false,
isVisible: true,
@@ -450,7 +453,7 @@ const CopyPasteControls3D = ({
modelUuid: data.modelUuid,
modelName: data.modelName,
assetId: data.assetId,
- position: data.position,
+ position: [position.x, 0, position.z],
rotation: [data.rotation.x, data.rotation.y, data.rotation.z],
isLocked: data.isLocked,
isCollidable: false,
@@ -466,7 +469,7 @@ const CopyPasteControls3D = ({
modelUuid: newFloorItem.modelUuid,
modelName: newFloorItem.modelName,
assetId: newFloorItem.assetId,
- position: newFloorItem.position,
+ position: [position.x, 0, position.z],
rotation: { x: pastedAsset.rotation.x, y: pastedAsset.rotation.y, z: pastedAsset.rotation.z },
isLocked: false,
isVisible: true,
@@ -482,7 +485,7 @@ const CopyPasteControls3D = ({
modelUuid: data.modelUuid,
modelName: data.modelName,
assetId: data.assetId,
- position: data.position,
+ position: [position.x, 0, position.z],
rotation: [data.rotation.x, data.rotation.y, data.rotation.z],
isLocked: data.isLocked,
isCollidable: false,
diff --git a/app/src/modules/scene/controls/selectionControls/selection3D/duplicationControls3D.tsx b/app/src/modules/scene/controls/selectionControls/selection3D/duplicationControls3D.tsx
index d32468a..66858a4 100644
--- a/app/src/modules/scene/controls/selectionControls/selection3D/duplicationControls3D.tsx
+++ b/app/src/modules/scene/controls/selectionControls/selection3D/duplicationControls3D.tsx
@@ -29,7 +29,7 @@ const DuplicationControls3D = ({
const { assetStore, eventStore } = useSceneContext();
const { addEvent } = eventStore();
const { projectId } = useParams();
- const { assets, addAsset, setPosition, updateAsset, removeAsset, getAssetById } = assetStore();
+ const { assets, addAsset, updateAsset, removeAsset, getAssetById } = assetStore();
const { selectedVersionStore } = useVersionContext();
const { selectedVersion } = selectedVersionStore();
const { userId, organization } = getUserData();
@@ -143,11 +143,14 @@ const DuplicationControls3D = ({
initialPosition,
initialPositions[duplicatedObjects[0].userData.modelUuid]
);
+ const model = scene.getObjectByProperty("uuid", duplicatedObject.userData.modelUuid);
const newPosition = new THREE.Vector3().addVectors(adjustedHit, relativeOffset);
const positionArray: [number, number, number] = [newPosition.x, newPosition.y, newPosition.z];
- setPosition(duplicatedObject.userData.modelUuid, positionArray);
+ if (model) {
+ model.position.set(...positionArray);
+ }
}
}
});
@@ -205,7 +208,9 @@ const DuplicationControls3D = ({
if (duplicatedAsset) {
const assetUuid = duplicatedAsset.userData.modelUuid;
const asset = getAssetById(assetUuid);
- if (!asset) return;
+ const model = scene.getObjectByProperty("uuid", duplicatedAsset.userData.modelUuid);
+ if (!asset || !model) return;
+ const position = new THREE.Vector3().copy(model.position);
const newFloorItem: Types.FloorItemType = {
modelUuid: duplicatedAsset.userData.modelUuid,
@@ -428,7 +433,7 @@ const DuplicationControls3D = ({
modelUuid: newFloorItem.modelUuid,
modelName: newFloorItem.modelName,
assetId: newFloorItem.assetId,
- position: newFloorItem.position,
+ position: [position.x, position.y, position.z],
rotation: { x: duplicatedAsset.rotation.x, y: duplicatedAsset.rotation.y, z: duplicatedAsset.rotation.z },
isLocked: false,
isVisible: true,
@@ -451,7 +456,7 @@ const DuplicationControls3D = ({
modelUuid: data.modelUuid,
modelName: data.modelName,
assetId: data.assetId,
- position: data.position,
+ position: [position.x, position.y, position.z],
rotation: [data.rotation.x, data.rotation.y, data.rotation.z],
isLocked: data.isLocked,
isCollidable: false,
@@ -467,7 +472,7 @@ const DuplicationControls3D = ({
modelUuid: newFloorItem.modelUuid,
modelName: newFloorItem.modelName,
assetId: newFloorItem.assetId,
- position: newFloorItem.position,
+ position: [position.x, position.y, position.z],
rotation: { x: duplicatedAsset.rotation.x, y: duplicatedAsset.rotation.y, z: duplicatedAsset.rotation.z },
isLocked: false,
isVisible: true,
@@ -483,7 +488,7 @@ const DuplicationControls3D = ({
modelUuid: data.modelUuid,
modelName: data.modelName,
assetId: data.assetId,
- position: data.position,
+ position: [position.x, position.y, position.z],
rotation: [data.rotation.x, data.rotation.y, data.rotation.z],
isLocked: data.isLocked,
isCollidable: false,
diff --git a/app/src/modules/scene/controls/selectionControls/selection3D/moveControls3D.tsx b/app/src/modules/scene/controls/selectionControls/selection3D/moveControls3D.tsx
index 88b8bf6..bb3a782 100644
--- a/app/src/modules/scene/controls/selectionControls/selection3D/moveControls3D.tsx
+++ b/app/src/modules/scene/controls/selectionControls/selection3D/moveControls3D.tsx
@@ -38,7 +38,7 @@ function MoveControls3D({
const { userId, organization } = getUserData();
const { projectId } = useParams();
const { assetStore, eventStore, productStore } = useSceneContext();
- const { updateAsset, setPosition, getAssetById } = assetStore();
+ const { updateAsset, getAssetById } = assetStore();
const { selectedVersionStore } = useVersionContext();
const { selectedVersion } = selectedVersionStore();
@@ -196,6 +196,7 @@ function MoveControls3D({
raycaster.setFromCamera(pointer, camera);
const hit = raycaster.ray.intersectPlane(plane, intersectionPoint);
+
if (hit) {
if (mouseButtonsDown.current.left || mouseButtonsDown.current.right) {
if (movedObjects[0]) {
@@ -231,11 +232,14 @@ function MoveControls3D({
initialPosition,
initialPositions[movedObjects[0].uuid]
);
+ const model = scene.getObjectByProperty("uuid", movedAsset.userData.modelUuid);
const newPosition = new THREE.Vector3().addVectors(baseNewPosition, relativeOffset);
const positionArray: [number, number, number] = [newPosition.x, newPosition.y, newPosition.z];
- setPosition(movedAsset.userData.modelUuid, positionArray);
+ if (model) {
+ model.position.set(...positionArray);
+ }
}
}
});
@@ -288,13 +292,15 @@ function MoveControls3D({
if (movedAsset) {
const assetUuid = movedAsset.userData.modelUuid;
const asset = getAssetById(assetUuid);
- if (!asset) return;
+ const model = scene.getObjectByProperty("uuid", movedAsset.userData.modelUuid);
+ if (!asset || !model) return;
+ const position = new THREE.Vector3().copy(model.position);
const newFloorItem: Types.FloorItemType = {
modelUuid: movedAsset.userData.modelUuid,
modelName: movedAsset.userData.modelName,
assetId: movedAsset.userData.assetId,
- position: asset.position,
+ position: [position.x, position.y, position.z],
rotation: { x: movedAsset.rotation.x, y: movedAsset.rotation.y, z: movedAsset.rotation.z },
isLocked: false,
isVisible: true,
@@ -306,7 +312,7 @@ function MoveControls3D({
if (eventData) {
eventStore.getState().updateEvent(movedAsset.userData.modelUuid, {
- position: asset.position,
+ position: [position.x, position.y, position.z],
rotation: [movedAsset.rotation.x, movedAsset.rotation.y, movedAsset.rotation.z],
});
}
@@ -318,7 +324,7 @@ function MoveControls3D({
selectedProduct.productUuid,
movedAsset.userData.modelUuid,
{
- position: asset.position,
+ position: [position.x, position.y, position.z],
rotation: [movedAsset.rotation.x, movedAsset.rotation.y, movedAsset.rotation.z],
}
);
diff --git a/app/src/modules/scene/controls/selectionControls/selection3D/rotateControls3D.tsx b/app/src/modules/scene/controls/selectionControls/selection3D/rotateControls3D.tsx
index 83266fd..0ca114d 100644
--- a/app/src/modules/scene/controls/selectionControls/selection3D/rotateControls3D.tsx
+++ b/app/src/modules/scene/controls/selectionControls/selection3D/rotateControls3D.tsx
@@ -174,12 +174,14 @@ function RotateControls3D({
);
const angleDelta = prevAngle - currentAngle;
+ const rotationMatrix = new THREE.Matrix4().makeRotationY(angleDelta);
+
rotatedObjects.forEach((obj: THREE.Object3D) => {
if (obj.userData.modelUuid) {
- const relativePos = new THREE.Vector3().subVectors(obj.position, center);
- relativePos.applyAxisAngle(new THREE.Vector3(0, 1, 0), angleDelta);
- obj.position.copy(center).add(relativePos);
- obj.rotation.y += angleDelta;
+ const relativePosition = new THREE.Vector3().subVectors(obj.position, center);
+ relativePosition.applyMatrix4(rotationMatrix);
+ obj.position.copy(center).add(relativePosition);
+ obj.rotateOnWorldAxis(new THREE.Vector3(0, 1, 0), angleDelta);
}
});
diff --git a/app/src/modules/scene/environment/shadow.tsx b/app/src/modules/scene/environment/shadow.tsx
index 3321673..03cf942 100644
--- a/app/src/modules/scene/environment/shadow.tsx
+++ b/app/src/modules/scene/environment/shadow.tsx
@@ -9,21 +9,17 @@ import {
useTileDistance,
} from "../../../store/builder/store";
import * as CONSTANTS from "../../../types/world/worldConstants";
-const shadowWorker = new Worker(
- new URL(
- "../../../services/factoryBuilder/webWorkers/shadowWorker",
- import.meta.url
- )
-);
+
+const shadowWorker = new Worker(new URL("../../../services/factoryBuilder/webWorkers/shadowWorker", import.meta.url));
export default function Shadows() {
- const { shadows, setShadows } = useShadows();
- const { sunPosition, setSunPosition } = useSunPosition();
+ const { shadows } = useShadows();
+ const { sunPosition } = useSunPosition();
const lightRef = useRef(null);
const targetRef = useRef(null);
const { controls, gl } = useThree();
- const { elevation, setElevation } = useElevation();
- const { azimuth, setAzimuth } = useAzimuth();
+ const { elevation } = useElevation();
+ const { azimuth } = useAzimuth();
const { planeValue } = useTileDistance();
useEffect(() => {
diff --git a/app/src/modules/simulation/actions/storageUnit/actionHandler/useRetrieveHandler.ts b/app/src/modules/simulation/actions/storageUnit/actionHandler/useRetrieveHandler.ts
index 03c7138..02f33e1 100644
--- a/app/src/modules/simulation/actions/storageUnit/actionHandler/useRetrieveHandler.ts
+++ b/app/src/modules/simulation/actions/storageUnit/actionHandler/useRetrieveHandler.ts
@@ -3,15 +3,17 @@ import { useFrame } from "@react-three/fiber";
import { usePlayButtonStore, usePauseButtonStore, useResetButtonStore, useAnimationPlaySpeed } from "../../../../../store/usePlayButtonStore";
import { useSceneContext } from "../../../../scene/sceneContext";
import { useProductContext } from "../../../products/productContext";
+import { useHumanEventManager } from "../../../human/eventManager/useHumanEventManager";
export function useRetrieveHandler() {
- const { materialStore, armBotStore, vehicleStore, storageUnitStore, productStore, humanStore, assetStore } = useSceneContext();
+ const { materialStore, armBotStore, vehicleStore, storageUnitStore, productStore, humanStore, assetStore, humanEventManagerRef } = useSceneContext();
const { selectedProductStore } = useProductContext();
const { addMaterial } = materialStore();
const { getModelUuidByActionUuid, getPointUuidByActionUuid, getEventByModelUuid, getActionByUuid } = productStore();
const { getStorageUnitById, getLastMaterial, updateCurrentLoad, removeLastMaterial } = storageUnitStore();
const { getVehicleById, incrementVehicleLoad, addCurrentMaterial } = vehicleStore();
const { getHumanById, incrementHumanLoad, addCurrentMaterial: addCurrentMaterialToHuman } = humanStore();
+ const { addHumanToMonitor } = useHumanEventManager();
const { getAssetById, setCurrentAnimation } = assetStore();
const { selectedProduct } = selectedProductStore();
const { getArmBotById, addCurrentAction } = armBotStore();
@@ -22,6 +24,7 @@ export function useRetrieveHandler() {
const [activeRetrievals, setActiveRetrievals] = useState