v2-ui #84
|
@ -106,8 +106,7 @@ export default function Builder() {
|
|||
|
||||
const cursorPosition = new THREE.Vector3(); // 3D vector for storing the cursor position.
|
||||
|
||||
const [selectedItemsIndex, setSelectedItemsIndex] =
|
||||
useState<Types.Number | null>(null); // State for tracking the index of the selected item.
|
||||
const [selectedItemsIndex, setSelectedItemsIndex] = useState<Types.Number | null>(null); // State for tracking the index of the selected item.
|
||||
const { activeLayer } = useActiveLayer(); // State that changes based on which layer the user chooses in Layers.jsx.
|
||||
const { toggleView } = useToggleView(); // State for toggling between 2D and 3D.
|
||||
const { toolMode, setToolMode } = useToolMode();
|
||||
|
|
|
@ -5,11 +5,13 @@ import {
|
|||
useActiveLayer,
|
||||
useDeletedLines,
|
||||
useNewLines,
|
||||
useRoomsState,
|
||||
useToggleView,
|
||||
} from "../../../../../store/store";
|
||||
import objectLinesToArray from "../lineConvertions/objectLinesToArray";
|
||||
import { Html } from "@react-three/drei";
|
||||
import * as Types from "../../../../../types/world/worldTypes";
|
||||
import getRoomsFromLines from "../getRoomsFromLines";
|
||||
|
||||
const DistanceText = () => {
|
||||
const [lines, setLines] = useState<
|
||||
|
@ -24,6 +26,30 @@ const DistanceText = () => {
|
|||
const { toggleView } = useToggleView();
|
||||
const { newLines, setNewLines } = useNewLines();
|
||||
const { deletedLines, setDeletedLines } = useDeletedLines();
|
||||
const [linesState, setLinesState] = useState<Types.Lines>([]);
|
||||
const { roomsState, setRoomsState } = useRoomsState();
|
||||
|
||||
useEffect(() => {
|
||||
if (linesState.length === 0) return;
|
||||
const getLines = async () => {
|
||||
|
||||
if (lines.length > 2) {
|
||||
const linesByLayer = linesState.reduce((acc: { [key: number]: any[] }, pair) => {
|
||||
const layer = pair[0][2];
|
||||
if (!acc[layer]) acc[layer] = [];
|
||||
acc[layer].push(pair);
|
||||
return acc;
|
||||
}, {});
|
||||
|
||||
for (const layer in linesByLayer) {
|
||||
|
||||
const rooms: Types.Rooms = await getRoomsFromLines({ current: linesByLayer[layer] });
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
getLines();
|
||||
}, [linesState])
|
||||
|
||||
useEffect(() => {
|
||||
const email = localStorage.getItem("email");
|
||||
|
@ -32,6 +58,7 @@ const DistanceText = () => {
|
|||
|
||||
getLines(organization).then((data) => {
|
||||
data = objectLinesToArray(data);
|
||||
setLinesState(data);
|
||||
|
||||
const lines = data
|
||||
.filter((line: Types.Line) => line[0][2] === activeLayer)
|
||||
|
@ -88,6 +115,7 @@ const DistanceText = () => {
|
|||
};
|
||||
});
|
||||
setLines((prevLines) => [...prevLines, ...newLinesData]);
|
||||
setLinesState((prevLines) => [...prevLines, ...newLines]);
|
||||
setNewLines([]);
|
||||
}
|
||||
}, [newLines, activeLayer]);
|
||||
|
@ -104,6 +132,16 @@ const DistanceText = () => {
|
|||
)
|
||||
)
|
||||
);
|
||||
|
||||
setLinesState(prev =>
|
||||
prev.filter(line =>
|
||||
!(deletedLines as Types.Lines).some(
|
||||
deleted =>
|
||||
line[0][1] === deleted[0][1] && line[1][1] === deleted[1][1]
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
setDeletedLines([]);
|
||||
}
|
||||
}, [deletedLines]);
|
||||
|
|
|
@ -25,7 +25,6 @@ export function useTravelHandler() {
|
|||
if (!modelUuid) return;
|
||||
|
||||
incrementVehicleLoad(modelUuid, 1);
|
||||
console.log('material: ', material);
|
||||
addCurrentMaterial(modelUuid, material.materialType, material.materialId);
|
||||
|
||||
travelLogStatus(material.materialId, `is triggering travel from ${modelUuid}`);
|
||||
|
|
|
@ -85,37 +85,10 @@ function MaterialInstance({ material }: { material: MaterialSchema }) {
|
|||
|
||||
const callTrigger = () => {
|
||||
if (!material.next) return;
|
||||
const fromModel = getEventByModelUuid(selectedProduct.productId, material.next.modelUuid);
|
||||
if (!fromModel) return;
|
||||
const fromPoint = getPointByUuid(selectedProduct.productId, fromModel.modelUuid, material.next.pointUuid);
|
||||
if (!fromPoint) return;
|
||||
|
||||
if (fromModel.type === 'transfer') {
|
||||
const toModel = getEventByModelUuid(selectedProduct.productId, material.next.modelUuid);
|
||||
if (!toModel) return;
|
||||
if (toModel.type === 'transfer') {
|
||||
const action = getActionByPointUuid(selectedProduct.productId, material.next.pointUuid);
|
||||
if (action) {
|
||||
triggerPointActions(action, material.materialId);
|
||||
}
|
||||
} else if (toModel?.type === 'vehicle') {
|
||||
// Transfer to Vehicle
|
||||
|
||||
} else if (toModel?.type === 'machine') {
|
||||
// Transfer to Machine
|
||||
|
||||
} else if (toModel?.type === 'roboticArm') {
|
||||
// Transfer to Robotic Arm
|
||||
|
||||
} else if (toModel?.type === 'storageUnit') {
|
||||
// Transfer to Storage Unit
|
||||
}
|
||||
} else if (fromModel.type === 'vehicle') {
|
||||
} else if (fromModel.type === 'machine') {
|
||||
} else if (fromModel.type === 'roboticArm') {
|
||||
} else if (fromModel.type === 'storageUnit') {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
|
@ -14,7 +14,7 @@ export function useTriggerHandler() {
|
|||
const { getVehicleById } = useVehicleStore();
|
||||
const { setCurrentLocation, setNextLocation, getMaterialById, setIsPaused, setIsVisible, setEndTime } = useMaterialStore();
|
||||
|
||||
const handleTrigger = (trigger: TriggerSchema, action: Action, materialId: string) => {
|
||||
const handleTrigger = (trigger: TriggerSchema, action: Action, materialId?: string) => {
|
||||
|
||||
const fromEvent = getEventByTriggerUuid(selectedProduct.productId, trigger.triggerUuid);
|
||||
|
||||
|
@ -23,7 +23,7 @@ export function useTriggerHandler() {
|
|||
if (fromEvent?.type === 'transfer') {
|
||||
if (toEvent?.type === 'transfer') {
|
||||
// Transfer to Transfer
|
||||
if (trigger.triggeredAsset && trigger.triggeredAsset.triggeredPoint && trigger.triggeredAsset.triggeredAction) {
|
||||
if (materialId && trigger.triggeredAsset && trigger.triggeredAsset.triggeredPoint && trigger.triggeredAsset.triggeredAction) {
|
||||
const material = getMaterialById(materialId);
|
||||
if (material) {
|
||||
if (material.next) {
|
||||
|
@ -44,7 +44,7 @@ export function useTriggerHandler() {
|
|||
}
|
||||
} else if (toEvent?.type === 'vehicle') {
|
||||
// Transfer to Vehicle
|
||||
if (trigger.triggeredAsset && trigger.triggeredAsset.triggeredPoint && trigger.triggeredAsset.triggeredAction) {
|
||||
if (materialId && trigger.triggeredAsset && trigger.triggeredAsset.triggeredPoint && trigger.triggeredAsset.triggeredAction) {
|
||||
const material = getMaterialById(materialId);
|
||||
if (material) {
|
||||
|
||||
|
@ -90,7 +90,7 @@ export function useTriggerHandler() {
|
|||
|
||||
} else if (toEvent?.type === 'roboticArm') {
|
||||
// Transfer to Robotic Arm
|
||||
if (trigger.triggeredAsset && trigger.triggeredAsset.triggeredPoint && trigger.triggeredAsset.triggeredAction) {
|
||||
if (materialId && trigger.triggeredAsset && trigger.triggeredAsset.triggeredPoint && trigger.triggeredAsset.triggeredAction) {
|
||||
const material = getMaterialById(materialId);
|
||||
if (material) {
|
||||
|
||||
|
@ -136,6 +136,7 @@ export function useTriggerHandler() {
|
|||
}
|
||||
} else if (fromEvent?.type === 'vehicle') {
|
||||
if (toEvent?.type === 'transfer') {
|
||||
console.log('toEvent: ', toEvent);
|
||||
// Vehicle to Transfer
|
||||
|
||||
} else if (toEvent?.type === 'vehicle') {
|
||||
|
@ -171,7 +172,7 @@ export function useTriggerHandler() {
|
|||
} else if (fromEvent?.type === 'roboticArm') {
|
||||
if (toEvent?.type === 'transfer') {
|
||||
// Robotic Arm to Transfer
|
||||
if (trigger.triggeredAsset && trigger.triggeredAsset.triggeredPoint && trigger.triggeredAsset.triggeredAction) {
|
||||
if (materialId && trigger.triggeredAsset && trigger.triggeredAsset.triggeredPoint && trigger.triggeredAsset.triggeredAction) {
|
||||
const material = getMaterialById(materialId);
|
||||
if (material) {
|
||||
setIsPaused(material.materialId, false);
|
||||
|
@ -199,6 +200,41 @@ export function useTriggerHandler() {
|
|||
|
||||
} else if (toEvent?.type === 'vehicle') {
|
||||
// Robotic Arm to Vehicle
|
||||
if (materialId && trigger.triggeredAsset && trigger.triggeredAsset.triggeredPoint && trigger.triggeredAsset.triggeredAction) {
|
||||
const material = getMaterialById(materialId);
|
||||
if (material) {
|
||||
const action = getActionByUuid(selectedProduct.productId, trigger.triggeredAsset.triggeredAction.actionUuid);
|
||||
const vehicle = getVehicleById(trigger.triggeredAsset?.triggeredModel.modelUuid);
|
||||
|
||||
setCurrentLocation(material.materialId, {
|
||||
modelUuid: trigger.triggeredAsset.triggeredModel.modelUuid,
|
||||
pointUuid: trigger.triggeredAsset.triggeredPoint.pointUuid,
|
||||
actionUuid: trigger.triggeredAsset?.triggeredAction?.actionUuid,
|
||||
});
|
||||
|
||||
setNextLocation(material.materialId, null);
|
||||
|
||||
if (action) {
|
||||
|
||||
if (vehicle) {
|
||||
|
||||
if (vehicle.isActive === false && vehicle.state === 'idle' && vehicle.currentLoad < vehicle.point.action.loadCapacity) {
|
||||
|
||||
setIsVisible(materialId, false);
|
||||
|
||||
// Handle current action from vehicle
|
||||
handleAction(action, materialId);
|
||||
|
||||
} else {
|
||||
|
||||
// Event Manager Needed
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
} else if (toEvent?.type === 'machine') {
|
||||
// Robotic Arm to Machine
|
||||
|
@ -230,18 +266,18 @@ export function useTriggerHandler() {
|
|||
}
|
||||
}
|
||||
|
||||
const handleFinalAction = (action: Action, materialId: string) => {
|
||||
const handleFinalAction = (action: Action, materialId?: string) => {
|
||||
if (!action) return;
|
||||
|
||||
const modelUuid = getModelUuidByActionUuid(selectedProduct.productId, action.actionUuid);
|
||||
if (!modelUuid) return;
|
||||
const finalModel = getEventByModelUuid(selectedProduct.productId, modelUuid);
|
||||
if (!finalModel) return;
|
||||
const material = getMaterialById(materialId);
|
||||
|
||||
if (finalModel.type === 'transfer') {
|
||||
// Storage Unit to Transfer
|
||||
|
||||
if (!materialId) return;
|
||||
const material = getMaterialById(materialId);
|
||||
if (material) {
|
||||
const currentTime = performance.now();
|
||||
|
||||
|
@ -274,7 +310,7 @@ export function useTriggerHandler() {
|
|||
|
||||
}
|
||||
|
||||
const triggerPointActions = useCallback((action: Action, materialId: string) => {
|
||||
const triggerPointActions = useCallback((action: Action, materialId?: string) => {
|
||||
if (!action) return;
|
||||
|
||||
if (action.triggers.length > 0) {
|
||||
|
|
|
@ -4,7 +4,6 @@ import * as THREE from 'three';
|
|||
import { Line } from '@react-three/drei';
|
||||
import { useAnimationPlaySpeed, usePauseButtonStore, usePlayButtonStore, useResetButtonStore } from '../../../../../store/usePlayButtonStore';
|
||||
import { useVehicleStore } from '../../../../../store/simulation/useVehicleStore';
|
||||
import { useMaterialStore } from '../../../../../store/simulation/useMaterialStore';
|
||||
|
||||
interface VehicleAnimatorProps {
|
||||
path: [number, number, number][];
|
||||
|
@ -17,8 +16,7 @@ interface VehicleAnimatorProps {
|
|||
}
|
||||
|
||||
function VehicleAnimator({ path, handleCallBack, currentPhase, agvUuid, agvDetail, reset, startUnloadingProcess }: VehicleAnimatorProps) {
|
||||
const { decrementVehicleLoad, getVehicleById, removeLastMaterial } = useVehicleStore();
|
||||
const { removeMaterial } = useMaterialStore();
|
||||
const { getVehicleById } = useVehicleStore();
|
||||
const { isPaused } = usePauseButtonStore();
|
||||
const { isPlaying } = usePlayButtonStore();
|
||||
const { speed } = useAnimationPlaySpeed();
|
||||
|
@ -27,11 +25,9 @@ function VehicleAnimator({ path, handleCallBack, currentPhase, agvUuid, agvDetai
|
|||
const movingForward = useRef<boolean>(true);
|
||||
const completedRef = useRef<boolean>(false);
|
||||
const [objectRotation, setObjectRotation] = useState<{ x: number; y: number; z: number } | undefined>(agvDetail.point?.action?.pickUpPoint?.rotation || { x: 0, y: 0, z: 0 })
|
||||
const [progress, setProgress] = useState<number>(0);
|
||||
const [restRotation, setRestingRotation] = useState<boolean>(true);
|
||||
const [currentPath, setCurrentPath] = useState<[number, number, number][]>([]);
|
||||
const { scene } = useThree();
|
||||
let coveredDistance = progressRef.current;
|
||||
|
||||
useEffect(() => {
|
||||
if (currentPhase === 'stationed-pickup' && path.length > 0) {
|
||||
|
@ -47,7 +43,6 @@ function VehicleAnimator({ path, handleCallBack, currentPhase, agvUuid, agvDetai
|
|||
}, [currentPhase, path, objectRotation]);
|
||||
|
||||
useEffect(() => {
|
||||
setProgress(0);
|
||||
completedRef.current = false;
|
||||
}, [currentPath]);
|
||||
|
||||
|
@ -55,11 +50,9 @@ function VehicleAnimator({ path, handleCallBack, currentPhase, agvUuid, agvDetai
|
|||
if (isReset || !isPlaying) {
|
||||
reset();
|
||||
setCurrentPath([]);
|
||||
setProgress(0);
|
||||
completedRef.current = false;
|
||||
movingForward.current = true;
|
||||
progressRef.current = 0;
|
||||
coveredDistance = 0;
|
||||
setReset(false);
|
||||
setRestingRotation(true);
|
||||
const object = scene.getObjectByProperty('uuid', agvUuid);
|
||||
|
@ -89,7 +82,7 @@ function VehicleAnimator({ path, handleCallBack, currentPhase, agvUuid, agvDetai
|
|||
totalDistance += segmentDistance;
|
||||
}
|
||||
|
||||
while (index < distances.length && coveredDistance > accumulatedDistance + distances[index]) {
|
||||
while (index < distances.length && progressRef.current > accumulatedDistance + distances[index]) {
|
||||
accumulatedDistance += distances[index];
|
||||
index++;
|
||||
}
|
||||
|
@ -115,14 +108,12 @@ function VehicleAnimator({ path, handleCallBack, currentPhase, agvUuid, agvDetai
|
|||
|
||||
if (isAligned) {
|
||||
progressRef.current += delta * (speed * agvDetail.speed);
|
||||
coveredDistance = progressRef.current;
|
||||
const t = (coveredDistance - accumulatedDistance) / segmentDistance;
|
||||
const t = (progressRef.current - accumulatedDistance) / segmentDistance;
|
||||
const position = start.clone().lerp(end, t);
|
||||
object.position.copy(position);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (progressRef.current >= totalDistance) {
|
||||
if (restRotation && objectRotation) {
|
||||
const targetEuler = new THREE.Euler(
|
||||
|
@ -152,8 +143,6 @@ function VehicleAnimator({ path, handleCallBack, currentPhase, agvUuid, agvDetai
|
|||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
return (
|
||||
<>
|
||||
{currentPath.length > 0 && (
|
||||
|
|
|
@ -5,13 +5,19 @@ import { NavMeshQuery } from '@recast-navigation/core';
|
|||
import { useNavMesh } from '../../../../../store/store';
|
||||
import { useAnimationPlaySpeed, usePauseButtonStore, usePlayButtonStore } from '../../../../../store/usePlayButtonStore';
|
||||
import { useVehicleStore } from '../../../../../store/simulation/useVehicleStore';
|
||||
import MaterialAnimator from '../animator/materialAnimator';
|
||||
import { useMaterialStore } from '../../../../../store/simulation/useMaterialStore';
|
||||
import { useProductStore } from '../../../../../store/simulation/useProductStore';
|
||||
import { useSelectedProduct } from '../../../../../store/simulation/useSimulationStore';
|
||||
import { useTriggerHandler } from '../../../triggers/triggerHandler/useTriggerHandler';
|
||||
import MaterialAnimator from '../animator/materialAnimator';
|
||||
|
||||
function VehicleInstance({ agvDetail }: { agvDetail: VehicleStatus }) {
|
||||
const { navMesh } = useNavMesh();
|
||||
const { isPlaying } = usePlayButtonStore();
|
||||
const { removeMaterial } = useMaterialStore();
|
||||
const { triggerPointActions } = useTriggerHandler();
|
||||
const { getActionByUuid, getEventByModelUuid, getTriggerByUuid } = useProductStore();
|
||||
const { selectedProduct } = useSelectedProduct();
|
||||
const { vehicles, setVehicleActive, setVehicleState, clearCurrentMaterials, setVehicleLoad, decrementVehicleLoad, removeLastMaterial } = useVehicleStore();
|
||||
const [currentPhase, setCurrentPhase] = useState<string>('stationed');
|
||||
const [path, setPath] = useState<[number, number, number][]>([]);
|
||||
|
@ -22,7 +28,6 @@ function VehicleInstance({ agvDetail }: { agvDetail: VehicleStatus }) {
|
|||
const { speed } = useAnimationPlaySpeed();
|
||||
const { isPaused } = usePauseButtonStore();
|
||||
|
||||
|
||||
useEffect(() => {
|
||||
isPausedRef.current = isPaused;
|
||||
}, [isPaused]);
|
||||
|
@ -44,7 +49,6 @@ function VehicleInstance({ agvDetail }: { agvDetail: VehicleStatus }) {
|
|||
|
||||
function vehicleStatus(modelId: string, status: string) {
|
||||
// console.log(`${modelId} , ${status}`);
|
||||
|
||||
}
|
||||
|
||||
// Function to reset everything
|
||||
|
@ -75,11 +79,6 @@ function VehicleInstance({ agvDetail }: { agvDetail: VehicleStatus }) {
|
|||
vehicleStatus(agvDetail.modelUuid, 'Started from station, heading to pickup');
|
||||
return;
|
||||
} else if (!agvDetail.isActive && agvDetail.state === 'idle' && currentPhase === 'picking') {
|
||||
|
||||
// setTimeout(() => {
|
||||
// increment();
|
||||
// }, 5000);
|
||||
|
||||
if (agvDetail.currentLoad === agvDetail.point.action.loadCapacity && agvDetail.currentMaterials.length > 0) {
|
||||
if (agvDetail.point.action.pickUpPoint && agvDetail.point.action.unLoadPoint) {
|
||||
const toDrop = computePath(
|
||||
|
@ -135,17 +134,44 @@ function VehicleInstance({ agvDetail }: { agvDetail: VehicleStatus }) {
|
|||
}
|
||||
|
||||
function startUnloadingProcess() {
|
||||
if (agvDetail.point.action.triggers.length > 0) {
|
||||
const trigger = getTriggerByUuid(selectedProduct.productId, agvDetail.point.action.triggers[0].triggerUuid);
|
||||
const model = getEventByModelUuid(selectedProduct.productId, trigger?.triggeredAsset?.triggeredModel?.modelUuid || '');
|
||||
|
||||
if (trigger && model) {
|
||||
if (model.type === 'transfer') {
|
||||
const action = getActionByUuid(selectedProduct.productId, agvDetail.point.action.actionUuid);
|
||||
if (action) {
|
||||
triggerPointActions(action);
|
||||
}
|
||||
} else if (model.type === 'machine') {
|
||||
|
||||
} else if (model.type === 'roboticArm') {
|
||||
|
||||
} else if (model.type === 'storageUnit') {
|
||||
|
||||
}
|
||||
} else {
|
||||
const droppedMaterial = agvDetail.currentLoad;
|
||||
startTime = performance.now();
|
||||
handleMaterialDrop(droppedMaterial);
|
||||
handleMaterialDropByDefault(droppedMaterial);
|
||||
}
|
||||
} else {
|
||||
const droppedMaterial = agvDetail.currentLoad;
|
||||
startTime = performance.now();
|
||||
handleMaterialDropByDefault(droppedMaterial);
|
||||
}
|
||||
}
|
||||
|
||||
function handleMaterialDrop(droppedMaterial: number) {
|
||||
function handleMaterialDropToConveyor() { }
|
||||
|
||||
|
||||
function handleMaterialDropByDefault(droppedMaterial: number) {
|
||||
if (isPausedRef.current) {
|
||||
if (!pauseTimeRef.current) {
|
||||
pauseTimeRef.current = performance.now();
|
||||
}
|
||||
requestAnimationFrame(() => handleMaterialDrop(droppedMaterial));
|
||||
requestAnimationFrame(() => handleMaterialDropByDefault(droppedMaterial));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -168,16 +194,15 @@ function VehicleInstance({ agvDetail }: { agvDetail: VehicleStatus }) {
|
|||
}
|
||||
if (droppedMat > 0) {
|
||||
startTime = performance.now();
|
||||
requestAnimationFrame(() => handleMaterialDrop(droppedMat));
|
||||
requestAnimationFrame(() => handleMaterialDropByDefault(droppedMat));
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
requestAnimationFrame(() => handleMaterialDrop(droppedMaterial));
|
||||
requestAnimationFrame(() => handleMaterialDropByDefault(droppedMaterial));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return (
|
||||
<>
|
||||
<VehicleAnimator
|
||||
|
|
|
@ -7,6 +7,7 @@ export default function ZoneAssets() {
|
|||
const { zoneAssetId, setZoneAssetId } = useZoneAssetId();
|
||||
const { setSelectedFloorItem } = useSelectedFloorItem();
|
||||
const { raycaster, controls, scene }: any = useThree();
|
||||
|
||||
useEffect(() => {
|
||||
// console.log('zoneAssetId: ', zoneAssetId);
|
||||
if (!zoneAssetId) return
|
||||
|
@ -70,8 +71,6 @@ export default function ZoneAssets() {
|
|||
}
|
||||
}, [zoneAssetId, scene, controls])
|
||||
|
||||
|
||||
|
||||
return (
|
||||
<>
|
||||
</>
|
||||
|
|
|
@ -13,8 +13,6 @@ export default function ZoneCentreTarget() {
|
|||
const { zoneTarget, setZoneTarget } = usezoneTarget();
|
||||
const { Edit, setEdit } = useEditPosition();
|
||||
|
||||
|
||||
|
||||
useEffect(() => {
|
||||
if (
|
||||
selectedZone.zoneViewPortTarget &&
|
||||
|
|
|
@ -66,6 +66,11 @@ export const useWalls = create<any>((set: any) => ({
|
|||
setWalls: (x: any) => set(() => ({ walls: x })),
|
||||
}));
|
||||
|
||||
export const useRoomsState = create<any>((set: any) => ({
|
||||
roomsState: [],
|
||||
setRoomsState: (x: any) => set(() => ({ walls: x })),
|
||||
}));
|
||||
|
||||
export const useZones = create<any>((set: any) => ({
|
||||
zones: [],
|
||||
setZones: (callback: any) =>
|
||||
|
|
Loading…
Reference in New Issue