2025-06-10 15:28:23 +05:30
|
|
|
import React, { useState } from "react";
|
|
|
|
|
import InputToggle from "../../../ui/inputs/InputToggle";
|
|
|
|
|
import InputWithDropDown from "../../../ui/inputs/InputWithDropDown";
|
|
|
|
|
import { RemoveIcon } from "../../../icons/ExportCommonIcons";
|
|
|
|
|
import PositionInput from "../customInput/PositionInputs";
|
|
|
|
|
import RotationInput from "../customInput/RotationInput";
|
|
|
|
|
import { useSelectedFloorItem, useObjectPosition, useObjectRotation } from "../../../../store/builder/store";
|
2025-06-26 15:11:52 +05:30
|
|
|
import { useSceneContext } from "../../../../modules/scene/sceneContext";
|
2025-07-02 17:31:17 +05:30
|
|
|
import { useBuilderStore } from "../../../../store/builder/useBuilderStore";
|
2025-06-10 15:28:23 +05:30
|
|
|
|
|
|
|
|
interface UserData {
|
2025-07-02 17:31:17 +05:30
|
|
|
id: number;
|
|
|
|
|
label: string;
|
|
|
|
|
value: string;
|
2025-06-10 15:28:23 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const AssetProperties: React.FC = () => {
|
2025-07-02 17:31:17 +05:30
|
|
|
const [userData, setUserData] = useState<UserData[]>([]);
|
|
|
|
|
const { selectedFloorItem } = useSelectedFloorItem();
|
|
|
|
|
const { objectPosition } = useObjectPosition();
|
|
|
|
|
const { objectRotation } = useObjectRotation();
|
|
|
|
|
const { assetStore } = useSceneContext();
|
|
|
|
|
const { assets, setCurrentAnimation } = assetStore();
|
|
|
|
|
const { loopAnimation } = useBuilderStore();
|
|
|
|
|
const [hoveredIndex, setHoveredIndex] = useState<any>(null);
|
|
|
|
|
|
|
|
|
|
const handleAddUserData = () => {
|
2025-06-10 15:28:23 +05:30
|
|
|
};
|
|
|
|
|
|
2025-07-02 17:31:17 +05:30
|
|
|
const handleUserDataChange = (id: number, newValue: string) => {
|
|
|
|
|
};
|
2025-06-10 15:28:23 +05:30
|
|
|
|
2025-07-02 17:31:17 +05:30
|
|
|
const handleRemoveUserData = (id: number) => {
|
|
|
|
|
};
|
2025-06-10 15:28:23 +05:30
|
|
|
|
2025-07-02 17:31:17 +05:30
|
|
|
const handleAnimationClick = (animation: string) => {
|
|
|
|
|
if (selectedFloorItem) {
|
2025-07-04 13:14:39 +05:30
|
|
|
setCurrentAnimation(selectedFloorItem.uuid, animation, true, loopAnimation, true);
|
2025-07-02 17:31:17 +05:30
|
|
|
}
|
2025-06-26 15:11:52 +05:30
|
|
|
}
|
2025-07-02 11:52:57 +05:30
|
|
|
|
2025-07-02 17:31:17 +05:30
|
|
|
if (!selectedFloorItem) return null;
|
2025-07-02 11:52:57 +05:30
|
|
|
|
2025-07-02 17:31:17 +05:30
|
|
|
return (
|
|
|
|
|
<div className="asset-properties-container">
|
|
|
|
|
{/* Name */}
|
|
|
|
|
<div className="header">{selectedFloorItem.userData.modelName}</div>
|
|
|
|
|
<section>
|
|
|
|
|
{objectPosition &&
|
|
|
|
|
<PositionInput
|
|
|
|
|
onChange={() => { }}
|
|
|
|
|
value1={parseFloat(objectPosition.x.toFixed(5))}
|
|
|
|
|
value2={parseFloat(objectPosition.z.toFixed(5))}
|
|
|
|
|
/>
|
|
|
|
|
}
|
|
|
|
|
{objectRotation &&
|
|
|
|
|
<RotationInput
|
|
|
|
|
onChange={() => { }}
|
|
|
|
|
value={parseFloat(objectRotation.y.toFixed(5))}
|
|
|
|
|
/>
|
|
|
|
|
}
|
|
|
|
|
</section>
|
2025-06-10 15:28:23 +05:30
|
|
|
|
2025-07-02 17:31:17 +05:30
|
|
|
<section>
|
|
|
|
|
<div className="header">Render settings</div>
|
|
|
|
|
<InputToggle inputKey="visible" label="Visible" />
|
|
|
|
|
<InputToggle inputKey="frustumCull" label="Frustum cull" />
|
|
|
|
|
</section>
|
2025-06-10 15:28:23 +05:30
|
|
|
|
2025-07-02 17:31:17 +05:30
|
|
|
<section>
|
|
|
|
|
<div className="header">User Data</div>
|
|
|
|
|
{userData.map((data) => (
|
|
|
|
|
<div className="input-container">
|
|
|
|
|
<InputWithDropDown
|
|
|
|
|
key={data.id}
|
|
|
|
|
label={data.label}
|
|
|
|
|
value={data.value}
|
|
|
|
|
editableLabel
|
|
|
|
|
onChange={(newValue) => handleUserDataChange(data.id, newValue)}
|
|
|
|
|
/>
|
|
|
|
|
<div
|
|
|
|
|
className="remove-button"
|
|
|
|
|
onClick={() => handleRemoveUserData(data.id)}
|
|
|
|
|
>
|
|
|
|
|
<RemoveIcon />
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
))}
|
2025-06-10 15:28:23 +05:30
|
|
|
|
2025-07-02 17:31:17 +05:30
|
|
|
{/* Add new user data */}
|
|
|
|
|
<div className="optimize-button" onClick={handleAddUserData}>
|
|
|
|
|
+ Add
|
2025-06-26 15:11:52 +05:30
|
|
|
</div>
|
2025-07-02 17:31:17 +05:30
|
|
|
</section>
|
|
|
|
|
<div style={{ display: "flex", flexDirection: "column", outline: "1px solid var(--border-color)" }}>
|
|
|
|
|
{selectedFloorItem.uuid && <div style={{ display: "flex", alignItems: "center", justifyContent: "center" }}>Animations</div>}
|
|
|
|
|
{assets.map((asset) => (
|
|
|
|
|
<div key={asset.modelUuid} className="asset-item">
|
|
|
|
|
{asset.modelUuid === selectedFloorItem.uuid &&
|
|
|
|
|
asset.animations &&
|
|
|
|
|
asset.animations.length > 0 &&
|
|
|
|
|
asset.animations.map((animation, index) => (
|
|
|
|
|
<div
|
|
|
|
|
key={index}
|
|
|
|
|
style={{ gap: "15px", cursor: "pointer", padding: "5px" }}
|
|
|
|
|
>
|
|
|
|
|
<div
|
|
|
|
|
onClick={() => handleAnimationClick(animation)}
|
|
|
|
|
onMouseEnter={() => setHoveredIndex(index)}
|
|
|
|
|
onMouseLeave={() => setHoveredIndex(null)}
|
|
|
|
|
style={{
|
|
|
|
|
height: "20px",
|
|
|
|
|
width: "100%",
|
|
|
|
|
borderRadius: "5px",
|
|
|
|
|
background:
|
|
|
|
|
hoveredIndex === index
|
|
|
|
|
? "#7b4cd3"
|
|
|
|
|
: "transparent",
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
{animation.charAt(0).toUpperCase() +
|
|
|
|
|
animation.slice(1).toLowerCase()}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
))}
|
|
|
|
|
</div>
|
|
|
|
|
))}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
);
|
2025-06-10 15:28:23 +05:30
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export default AssetProperties;
|