Add scene context and animation handling to AssetProperties and Model components

- Enhanced animation handling in Model component with animation state management.
- Updated useAssetStore to support multiple animations for assets.
This commit is contained in:
2025-06-26 15:11:52 +05:30
parent e5e92d2b9f
commit d926809dec
4 changed files with 117 additions and 10 deletions

View File

@@ -5,6 +5,7 @@ import { RemoveIcon } from "../../../icons/ExportCommonIcons";
import PositionInput from "../customInput/PositionInputs";
import RotationInput from "../customInput/RotationInput";
import { useSelectedFloorItem, useObjectPosition, useObjectRotation } from "../../../../store/builder/store";
import { useSceneContext } from "../../../../modules/scene/sceneContext";
interface UserData {
id: number; // Unique identifier for the user data
@@ -18,6 +19,9 @@ const AssetProperties: React.FC = () => {
const { selectedFloorItem } = useSelectedFloorItem();
const { objectPosition } = useObjectPosition();
const { objectRotation } = useObjectRotation();
const { assetStore } = useSceneContext();
const { assets, setCurrentAnimation } = assetStore()
// Function to handle adding new user data
const handleAddUserData = () => {
const newUserData: UserData = {
@@ -45,6 +49,12 @@ const AssetProperties: React.FC = () => {
);
};
const handleAnimationClick = (animation: string) => {
if (selectedFloorItem) {
const isPlaying = selectedFloorItem.animationState?.playing || false;
setCurrentAnimation(selectedFloorItem.uuid, animation, !isPlaying);
}
}
return (
<div className="asset-properties-container">
{/* Name */}
@@ -96,6 +106,22 @@ const AssetProperties: React.FC = () => {
+ Add
</div>
</section>
<div style={{ display: "flex", flexDirection: "column" }}>
{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} className="animation-item" style={{ gap: "5px" }} onClick={() => { handleAnimationClick(animation) }}>
{animation}
</div>
))
}
</div>
))}
</div>
</div>
);
};