From 2fd1cf352cb6bc7936baea95d14622dceda7c62f Mon Sep 17 00:00:00 2001 From: Jerald-Golden-B Date: Thu, 17 Jul 2025 13:07:06 +0530 Subject: [PATCH] schema changes --- app/src/store/simulation/useVehicleStore.ts | 45 +++++++++++++++++++++ app/src/types/simulationTypes.d.ts | 24 +++++++++-- 2 files changed, 66 insertions(+), 3 deletions(-) diff --git a/app/src/store/simulation/useVehicleStore.ts b/app/src/store/simulation/useVehicleStore.ts index 34264da..1e558f0 100644 --- a/app/src/store/simulation/useVehicleStore.ts +++ b/app/src/store/simulation/useVehicleStore.ts @@ -10,6 +10,9 @@ interface VehiclesStore { modelUuid: string, updates: Partial> ) => void; + addPathPoint: (modelUuid: string, pathKey: keyof VehicleAction["paths"], point: VehicleAction["paths"]["initPickup"][number]) => VehicleAction["paths"]; + updatePathPoint: (modelUuid: string, pathKey: keyof VehicleAction["paths"], pointId: string, updates: Partial) => VehicleAction["paths"]; + deletePathPoint: (modelUuid: string, pathKey: keyof VehicleAction["paths"], pointId: string) => VehicleAction["paths"]; clearVehicles: () => void; setVehicleActive: (modelUuid: string, isActive: boolean) => void; @@ -79,6 +82,48 @@ export const createVehicleStore = () => { }); }, + addPathPoint: (modelUuid, pathKey, point) => { + let updatedPaths: VehicleAction["paths"] = { initPickup: [], pickupDrop: [], dropPickup: [] }; + set((state) => { + const vehicle = state.vehicles.find(v => v.modelUuid === modelUuid); + if (vehicle) { + const path = vehicle.point.action.paths[pathKey]; + path.push(point); + updatedPaths = vehicle.point.action.paths; + } + }); + return updatedPaths; + }, + + updatePathPoint: (modelUuid, pathKey, pointId, updates) => { + let updatedPaths: VehicleAction["paths"] = { initPickup: [], pickupDrop: [], dropPickup: [] }; + set((state) => { + const vehicle = state.vehicles.find(v => v.modelUuid === modelUuid); + if (vehicle) { + const path = vehicle.point.action.paths[pathKey]; + const index = path.findIndex(p => p.pointId === pointId); + if (index !== -1) { + Object.assign(path[index], updates); + updatedPaths = vehicle.point.action.paths; + } + } + }); + return updatedPaths; + }, + + deletePathPoint: (modelUuid, pathKey, pointId) => { + let updatedPaths: VehicleAction["paths"] = { initPickup: [], pickupDrop: [], dropPickup: [] }; + set((state) => { + const vehicle = state.vehicles.find(v => v.modelUuid === modelUuid); + if (vehicle) { + const path = vehicle.point.action.paths[pathKey]; + vehicle.point.action.paths[pathKey] = path.filter(p => p.pointId !== pointId); + updatedPaths = vehicle.point.action.paths; + } + }); + return updatedPaths; + }, + clearVehicles: () => { set((state) => { state.vehicles = []; diff --git a/app/src/types/simulationTypes.d.ts b/app/src/types/simulationTypes.d.ts index 77f1a27..5d6b21f 100644 --- a/app/src/types/simulationTypes.d.ts +++ b/app/src/types/simulationTypes.d.ts @@ -41,9 +41,27 @@ interface VehicleAction { pickUpPoint: { position: { x: number; y: number, z: number }, rotation: { x: number; y: number, z: number } } | null; unLoadPoint: { position: { x: number; y: number, z: number }, rotation: { x: number; y: number, z: number } } | null; paths: { - initPickup: [number, number, number][], - pickupDrop: [number, number, number][], - dropPickup: [number, number, number][], + initPickup: { + pointId: string; + position: [number, number, number]; + isCurved: boolean; + handleA: [number, number, number] | null; + handleB: [number, number, number] | null; + }[], + pickupDrop: { + pointId: string; + position: [number, number, number]; + isCurved: boolean; + handleA: [number, number, number] | null; + handleB: [number, number, number] | null; + }[], + dropPickup: { + pointId: string; + position: [number, number, number]; + isCurved: boolean; + handleA: [number, number, number] | null; + handleB: [number, number, number] | null; + }[], } triggers: TriggerSchema[]; }