first person bug fix
This commit is contained in:
@@ -80,7 +80,7 @@ function MainScene() {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}, [setSelectedVersion, versionHistory])
|
}, [setSelectedVersion, versionHistory, projectId])
|
||||||
|
|
||||||
const handleSelectVersion = (option: string) => {
|
const handleSelectVersion = (option: string) => {
|
||||||
const version = versionHistory.find((version) => version.versionName === option);
|
const version = versionHistory.find((version) => version.versionName === option);
|
||||||
|
|||||||
@@ -1,10 +1,4 @@
|
|||||||
import {
|
import { AddIcon, ArrowIcon, CloseIcon, KebabIcon, LocationIcon } from "../../../icons/ExportCommonIcons";
|
||||||
AddIcon,
|
|
||||||
ArrowIcon,
|
|
||||||
CloseIcon,
|
|
||||||
KebabIcon,
|
|
||||||
LocationIcon,
|
|
||||||
} from "../../../icons/ExportCommonIcons";
|
|
||||||
import RenameInput from "../../../ui/inputs/RenameInput";
|
import RenameInput from "../../../ui/inputs/RenameInput";
|
||||||
import { useVersionHistoryStore } from "../../../../store/builder/useVersionHistoryStore";
|
import { useVersionHistoryStore } from "../../../../store/builder/useVersionHistoryStore";
|
||||||
import { useSubModuleStore } from "../../../../store/useModuleStore";
|
import { useSubModuleStore } from "../../../../store/useModuleStore";
|
||||||
@@ -30,9 +24,8 @@ const VersionHistory = () => {
|
|||||||
|
|
||||||
getVersionDataApi(projectId, version.versionId).then((versionData) => {
|
getVersionDataApi(projectId, version.versionId).then((versionData) => {
|
||||||
setSelectedVersion(version);
|
setSelectedVersion(version);
|
||||||
// console.log(versionData);
|
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
// console.log(err);
|
echo.error(err);
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,5 @@
|
|||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import {
|
import { FinishEditIcon, RenameVersionIcon } from "../../../icons/ExportCommonIcons";
|
||||||
FinishEditIcon,
|
|
||||||
RenameVersionIcon,
|
|
||||||
} from "../../../icons/ExportCommonIcons";
|
|
||||||
import RenderOverlay from "../../../templates/Overlay";
|
import RenderOverlay from "../../../templates/Overlay";
|
||||||
import { useVersionHistoryStore } from "../../../../store/builder/useVersionHistoryStore";
|
import { useVersionHistoryStore } from "../../../../store/builder/useVersionHistoryStore";
|
||||||
import { createVersionApi } from "../../../../services/factoryBuilder/versionControl/addVersionApi";
|
import { createVersionApi } from "../../../../services/factoryBuilder/versionControl/addVersionApi";
|
||||||
@@ -11,144 +8,144 @@ import { getUserData } from "../../../../functions/getUserData";
|
|||||||
import { useVersionContext } from "../../../../modules/builder/version/versionContext";
|
import { useVersionContext } from "../../../../modules/builder/version/versionContext";
|
||||||
|
|
||||||
const VersionSaved = () => {
|
const VersionSaved = () => {
|
||||||
const { addVersion, createNewVersion, setCreateNewVersion } = useVersionHistoryStore();
|
const { addVersion, createNewVersion, setCreateNewVersion } = useVersionHistoryStore();
|
||||||
const { selectedVersionStore } = useVersionContext();
|
const { selectedVersionStore } = useVersionContext();
|
||||||
const { selectedVersion, setSelectedVersion } = selectedVersionStore();
|
const { selectedVersion, setSelectedVersion } = selectedVersionStore();
|
||||||
const [newName, setNewName] = useState(new Date().toLocaleString("en-US", {
|
const [newName, setNewName] = useState(new Date().toLocaleString("en-US", {
|
||||||
month: "short",
|
|
||||||
day: "numeric",
|
|
||||||
year: "numeric",
|
|
||||||
hour: "numeric",
|
|
||||||
minute: "2-digit",
|
|
||||||
}));
|
|
||||||
const [description, setDescription] = useState("");
|
|
||||||
const [showSaveFinish, setSaveFinish] = useState(false);
|
|
||||||
const { projectId } = useParams();
|
|
||||||
const { userId } = getUserData();
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (createNewVersion) {
|
|
||||||
const defaultName = new Date().toLocaleString("en-US", {
|
|
||||||
month: "short",
|
month: "short",
|
||||||
day: "numeric",
|
day: "numeric",
|
||||||
year: "numeric",
|
year: "numeric",
|
||||||
hour: "numeric",
|
hour: "numeric",
|
||||||
minute: "2-digit",
|
minute: "2-digit",
|
||||||
});
|
}));
|
||||||
setNewName(defaultName);
|
const [description, setDescription] = useState("");
|
||||||
setDescription("");
|
const [saveFinish, setSaveFinish] = useState(false);
|
||||||
}
|
const { projectId } = useParams();
|
||||||
}, [createNewVersion]);
|
const { userId } = getUserData();
|
||||||
|
|
||||||
const handleSave = () => {
|
useEffect(() => {
|
||||||
if (!selectedVersion || !projectId) return;
|
if (createNewVersion) {
|
||||||
|
const defaultName = new Date().toLocaleString("en-US", {
|
||||||
|
month: "short",
|
||||||
|
day: "numeric",
|
||||||
|
year: "numeric",
|
||||||
|
hour: "numeric",
|
||||||
|
minute: "2-digit",
|
||||||
|
});
|
||||||
|
setNewName(defaultName);
|
||||||
|
setDescription("");
|
||||||
|
}
|
||||||
|
}, [createNewVersion]);
|
||||||
|
|
||||||
const updatedName = (newName.trim() || selectedVersion.versionName) ?? selectedVersion.timeStamp;
|
const handleSave = () => {
|
||||||
const updatedDescription = (description.trim() || selectedVersion.versionName) ?? selectedVersion.timeStamp;
|
if (!selectedVersion || !projectId) return;
|
||||||
|
|
||||||
createVersionApi(projectId, userId, selectedVersion.versionId, updatedName, updatedDescription).then((data) => {
|
const updatedName = (newName.trim() || selectedVersion.versionName) ?? selectedVersion.timeStamp;
|
||||||
setSaveFinish(true);
|
const updatedDescription = (description.trim() || selectedVersion.versionName) ?? selectedVersion.timeStamp;
|
||||||
setCreateNewVersion(false);
|
|
||||||
|
|
||||||
addVersion({
|
createVersionApi(projectId, userId, selectedVersion.versionId, updatedName, updatedDescription).then((data) => {
|
||||||
version: data.version,
|
setSaveFinish(true);
|
||||||
versionId: data.versionId,
|
setCreateNewVersion(false);
|
||||||
versionName: data.versionName,
|
|
||||||
versionDescription: data.description,
|
|
||||||
timeStamp: data.createdAt,
|
|
||||||
createdBy: data.createdBy.userName
|
|
||||||
})
|
|
||||||
|
|
||||||
setSelectedVersion({
|
addVersion({
|
||||||
version: data.version,
|
version: data.version,
|
||||||
versionId: data.versionId,
|
versionId: data.versionId,
|
||||||
versionName: data.versionName,
|
versionName: data.versionName,
|
||||||
versionDescription: data.description,
|
versionDescription: data.description,
|
||||||
timeStamp: data.createdAt,
|
timeStamp: data.createdAt,
|
||||||
createdBy: data.createdBy.userName
|
createdBy: data.createdBy.userName
|
||||||
})
|
})
|
||||||
|
|
||||||
setTimeout(() => {
|
setSelectedVersion({
|
||||||
|
version: data.version,
|
||||||
|
versionId: data.versionId,
|
||||||
|
versionName: data.versionName,
|
||||||
|
versionDescription: data.description,
|
||||||
|
timeStamp: data.createdAt,
|
||||||
|
createdBy: data.createdBy.userName
|
||||||
|
})
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
setSaveFinish(false);
|
||||||
|
}, 3000);
|
||||||
|
}).catch((err) => {
|
||||||
|
setSaveFinish(false);
|
||||||
|
setCreateNewVersion(false);
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleCancel = () => {
|
||||||
setSaveFinish(false);
|
setSaveFinish(false);
|
||||||
}, 3000);
|
setCreateNewVersion(false);
|
||||||
}).catch((err) => {
|
};
|
||||||
setSaveFinish(false);
|
|
||||||
setCreateNewVersion(false);
|
|
||||||
})
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleCancel = () => {
|
if (!selectedVersion) return null;
|
||||||
setSaveFinish(false);
|
|
||||||
setCreateNewVersion(false);
|
|
||||||
};
|
|
||||||
|
|
||||||
if (!selectedVersion) return null;
|
return (
|
||||||
|
<div className={`versionSaved`}>
|
||||||
|
{createNewVersion &&
|
||||||
|
<RenderOverlay>
|
||||||
|
<div className="edit-version-popup-wrapper">
|
||||||
|
<div className="details-wrapper-popup-container">
|
||||||
|
<div className="header-wrapper">
|
||||||
|
<RenameVersionIcon />
|
||||||
|
<div className="label">Create Version</div>
|
||||||
|
</div>
|
||||||
|
<div className="details-wrapper">
|
||||||
|
<div className="version-name">
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
value={newName}
|
||||||
|
onChange={(e) => setNewName(e.target.value)}
|
||||||
|
placeholder="Enter new version name"
|
||||||
|
/>
|
||||||
|
<div className="label">
|
||||||
|
by @{selectedVersion.createdBy}{" "}{new Date(selectedVersion.timeStamp).toLocaleDateString("en-US", {
|
||||||
|
year: "numeric",
|
||||||
|
month: "long",
|
||||||
|
day: "2-digit",
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="version-description">
|
||||||
|
<textarea
|
||||||
|
value={description}
|
||||||
|
onChange={(e) => setDescription(e.target.value)}
|
||||||
|
placeholder="Add description"
|
||||||
|
style={{ resize: "none" }}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="btn-wrapper">
|
||||||
|
<button className="cancel" onClick={handleCancel}>
|
||||||
|
Cancel
|
||||||
|
</button>
|
||||||
|
<button className="save" onClick={handleSave}>
|
||||||
|
Save
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</RenderOverlay>
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
{saveFinish && (
|
||||||
<div className={`versionSaved`}>
|
<RenderOverlay>
|
||||||
{createNewVersion &&
|
<div className="finishEdit-version-popup-wrapper">
|
||||||
<RenderOverlay>
|
<div className="finishEdit-wrapper-popup-container">
|
||||||
<div className="edit-version-popup-wrapper">
|
<div className="icon">
|
||||||
<div className="details-wrapper-popup-container">
|
<FinishEditIcon />
|
||||||
<div className="header-wrapper">
|
</div>
|
||||||
<RenameVersionIcon />
|
<div className="versionname">
|
||||||
<div className="label">Create Version</div>
|
{newName.trim()}
|
||||||
</div>
|
</div>
|
||||||
<div className="details-wrapper">
|
<div className="success-message">Saved Successfully!</div>
|
||||||
<div className="version-name">
|
</div>
|
||||||
<input
|
</div>
|
||||||
type="text"
|
</RenderOverlay>
|
||||||
value={newName}
|
)}
|
||||||
onChange={(e) => setNewName(e.target.value)}
|
</div>
|
||||||
placeholder="Enter new version name"
|
);
|
||||||
/>
|
|
||||||
<div className="label">
|
|
||||||
by @{selectedVersion.createdBy}{" "}{new Date(selectedVersion.timeStamp).toLocaleDateString("en-US", {
|
|
||||||
year: "numeric",
|
|
||||||
month: "long",
|
|
||||||
day: "2-digit",
|
|
||||||
})}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div className="version-description">
|
|
||||||
<textarea
|
|
||||||
value={description}
|
|
||||||
onChange={(e) => setDescription(e.target.value)}
|
|
||||||
placeholder="Add description"
|
|
||||||
style={{ resize: "none" }}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div className="btn-wrapper">
|
|
||||||
<button className="cancel" onClick={handleCancel}>
|
|
||||||
Cancel
|
|
||||||
</button>
|
|
||||||
<button className="save" onClick={handleSave}>
|
|
||||||
Save
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</RenderOverlay>
|
|
||||||
}
|
|
||||||
|
|
||||||
{showSaveFinish && (
|
|
||||||
<RenderOverlay>
|
|
||||||
<div className="finishEdit-version-popup-wrapper">
|
|
||||||
<div className="finishEdit-wrapper-popup-container">
|
|
||||||
<div className="icon">
|
|
||||||
<FinishEditIcon />
|
|
||||||
</div>
|
|
||||||
<div className="versionname">
|
|
||||||
{newName.trim()}
|
|
||||||
</div>
|
|
||||||
<div className="success-message">Saved Successfully!</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</RenderOverlay>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export default VersionSaved;
|
export default VersionSaved;
|
||||||
|
|||||||
@@ -338,6 +338,8 @@ export function useDecalEventHandlers({
|
|||||||
canvasElement.addEventListener('pointerup', handlePointerUp);
|
canvasElement.addEventListener('pointerup', handlePointerUp);
|
||||||
canvasElement?.addEventListener("keyup", onKeyUp);
|
canvasElement?.addEventListener("keyup", onKeyUp);
|
||||||
canvasElement.addEventListener("keydown", onKeyDown);
|
canvasElement.addEventListener("keydown", onKeyDown);
|
||||||
|
} else {
|
||||||
|
setKeyEvent("");
|
||||||
}
|
}
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ import Decal from "./Decal/decal";
|
|||||||
|
|
||||||
import { useParams } from "react-router-dom";
|
import { useParams } from "react-router-dom";
|
||||||
import { useBuilderStore } from "../../store/builder/useBuilderStore";
|
import { useBuilderStore } from "../../store/builder/useBuilderStore";
|
||||||
import { getUserData } from "../../functions/getUserData";
|
|
||||||
import { findEnvironment } from "../../services/factoryBuilder/environment/findEnvironment";
|
import { findEnvironment } from "../../services/factoryBuilder/environment/findEnvironment";
|
||||||
|
|
||||||
export default function Builder() {
|
export default function Builder() {
|
||||||
@@ -46,8 +45,7 @@ export default function Builder() {
|
|||||||
const { setRenderDistance } = useRenderDistance();
|
const { setRenderDistance } = useRenderDistance();
|
||||||
const { setLimitDistance } = useLimitDistance();
|
const { setLimitDistance } = useLimitDistance();
|
||||||
const { projectId } = useParams();
|
const { projectId } = useParams();
|
||||||
const { setHoveredPoint, setHoveredLine } = useBuilderStore();
|
const { setHoveredPoint, setHoveredLine, selectedWallAsset } = useBuilderStore();
|
||||||
const { userId, organization } = getUserData();
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!toggleView) {
|
if (!toggleView) {
|
||||||
@@ -71,7 +69,7 @@ export default function Builder() {
|
|||||||
}, [projectId]);
|
}, [projectId]);
|
||||||
|
|
||||||
useFrame(() => {
|
useFrame(() => {
|
||||||
if (csgRef.current) {
|
if (csgRef.current && selectedWallAsset) {
|
||||||
csgRef.current.update();
|
csgRef.current.update();
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -19,7 +19,9 @@ const CamMode: React.FC = () => {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const handlePointerLockChange = async () => {
|
const handlePointerLockChange = async () => {
|
||||||
if (camMode === "FirstPerson" && !toggleView) {
|
if (document.pointerLockElement && !toggleView) {
|
||||||
|
return;
|
||||||
|
} else if (camMode === "FirstPerson" && !toggleView) {
|
||||||
setCamMode("ThirdPerson");
|
setCamMode("ThirdPerson");
|
||||||
await switchToThirdPerson(state.controls, state.camera);
|
await switchToThirdPerson(state.controls, state.camera);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import * as THREE from 'three';
|
import * as THREE from 'three';
|
||||||
import { useRef, useState } from 'react';
|
import { useRef, useState } from 'react';
|
||||||
import { useFrame } from '@react-three/fiber';
|
import { useFrame } from '@react-three/fiber';
|
||||||
import { Clouds, Cloud } from '@react-three/drei';
|
import { Clouds as DreiClouds, Cloud } from '@react-three/drei';
|
||||||
|
|
||||||
interface CloudGroupProps {
|
interface CloudGroupProps {
|
||||||
initialX: number;
|
initialX: number;
|
||||||
@@ -26,7 +26,7 @@ function CloudGroup({ initialX, initialZ, speed, height }: Readonly<CloudGroupPr
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<group ref={group} position={[initialX, height, initialZ]}>
|
<group ref={group} position={[initialX, height, initialZ]}>
|
||||||
<Clouds material={THREE.MeshBasicMaterial} frustumCulled={false} limit={10000}>
|
<DreiClouds material={THREE.MeshBasicMaterial} frustumCulled={false} limit={10000}>
|
||||||
<Cloud
|
<Cloud
|
||||||
seed={Math.random() * 100}
|
seed={Math.random() * 100}
|
||||||
bounds={[100, 15, 100]}
|
bounds={[100, 15, 100]}
|
||||||
@@ -51,12 +51,12 @@ function CloudGroup({ initialX, initialZ, speed, height }: Readonly<CloudGroupPr
|
|||||||
fade={10000}
|
fade={10000}
|
||||||
color="#f0f0f0"
|
color="#f0f0f0"
|
||||||
/>
|
/>
|
||||||
</Clouds>
|
</DreiClouds>
|
||||||
</group>
|
</group>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function MovingClouds() {
|
export default function Clouds() {
|
||||||
|
|
||||||
const savedTheme: string | null = localStorage.getItem("theme");
|
const savedTheme: string | null = localStorage.getItem("theme");
|
||||||
const [theme, setTheme] = useState(savedTheme || "light");
|
const [theme, setTheme] = useState(savedTheme || "light");
|
||||||
@@ -72,19 +72,15 @@ export function MovingClouds() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{theme === 'light' &&
|
{cloudGroups.map((group, index) => (
|
||||||
<>
|
<CloudGroup
|
||||||
{cloudGroups.map((group, index) => (
|
key={index}
|
||||||
<CloudGroup
|
initialX={group.initialX}
|
||||||
key={index}
|
initialZ={group.initialZ}
|
||||||
initialX={group.initialX}
|
speed={group.speed}
|
||||||
initialZ={group.initialZ}
|
height={group.height}
|
||||||
speed={group.speed}
|
/>
|
||||||
height={group.height}
|
))}
|
||||||
/>
|
|
||||||
))}
|
|
||||||
</>
|
|
||||||
}
|
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
import Sun from '../environment/sky'
|
import Sun from '../environment/sky'
|
||||||
import Shadows from '../environment/shadow'
|
import Shadows from '../environment/shadow'
|
||||||
|
// import Clouds from '../clouds/clouds';
|
||||||
import PostProcessing from '../postProcessing/postProcessing'
|
import PostProcessing from '../postProcessing/postProcessing'
|
||||||
import StatsHelper from '../helpers/StatsHelper';
|
import StatsHelper from '../helpers/StatsHelper';
|
||||||
import Controls from '../controls/controls';
|
import Controls from '../controls/controls';
|
||||||
@@ -18,7 +19,7 @@ function Setup() {
|
|||||||
|
|
||||||
<PostProcessing />
|
<PostProcessing />
|
||||||
|
|
||||||
{/* <MovingClouds /> */}
|
{/* <Clouds /> */}
|
||||||
|
|
||||||
<Environment files={background} environmentIntensity={1.5} />
|
<Environment files={background} environmentIntensity={1.5} />
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user