v2-ui #83
@@ -2,14 +2,16 @@ import { useCallback } from "react";
|
|||||||
import { useMaterialStore } from "../../../../../store/simulation/useMaterialStore";
|
import { useMaterialStore } from "../../../../../store/simulation/useMaterialStore";
|
||||||
import { useProductStore } from "../../../../../store/simulation/useProductStore";
|
import { useProductStore } from "../../../../../store/simulation/useProductStore";
|
||||||
import { useSelectedProduct } from "../../../../../store/simulation/useSimulationStore";
|
import { useSelectedProduct } from "../../../../../store/simulation/useSimulationStore";
|
||||||
|
import { useVehicleStore } from "../../../../../store/simulation/useVehicleStore";
|
||||||
|
|
||||||
export function useTravelHandler() {
|
export function useTravelHandler() {
|
||||||
const { getMaterialById } = useMaterialStore();
|
const { getMaterialById } = useMaterialStore();
|
||||||
const { getModelUuidByActionUuid } = useProductStore();
|
const { getModelUuidByActionUuid } = useProductStore();
|
||||||
const { selectedProduct } = useSelectedProduct();
|
const { selectedProduct } = useSelectedProduct();
|
||||||
|
const { incrementVehicleLoad, addCurrentMaterial } = useVehicleStore();
|
||||||
|
|
||||||
const travelLogStatus = (materialUuid: string, status: string) => {
|
const travelLogStatus = (materialUuid: string, status: string) => {
|
||||||
console.log(`${materialUuid}, ${status}`);
|
// console.log(`${materialUuid}, ${status}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleTravel = useCallback((action: VehicleAction, materialId?: string) => {
|
const handleTravel = useCallback((action: VehicleAction, materialId?: string) => {
|
||||||
@@ -22,6 +24,10 @@ export function useTravelHandler() {
|
|||||||
|
|
||||||
if (!modelUuid) return;
|
if (!modelUuid) return;
|
||||||
|
|
||||||
|
incrementVehicleLoad(modelUuid, 1);
|
||||||
|
console.log('material: ', material);
|
||||||
|
addCurrentMaterial(modelUuid, material.materialType, material.materialId);
|
||||||
|
|
||||||
travelLogStatus(material.materialId, `is triggering travel from ${modelUuid}`);
|
travelLogStatus(material.materialId, `is triggering travel from ${modelUuid}`);
|
||||||
|
|
||||||
}, [getMaterialById, getModelUuidByActionUuid]);
|
}, [getMaterialById, getModelUuidByActionUuid]);
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ export function useTriggerHandler() {
|
|||||||
const { getEventByTriggerUuid, getEventByModelUuid, getActionByUuid, getModelUuidByActionUuid } = useProductStore();
|
const { getEventByTriggerUuid, getEventByModelUuid, getActionByUuid, getModelUuidByActionUuid } = useProductStore();
|
||||||
const { getArmBotById } = useArmBotStore();
|
const { getArmBotById } = useArmBotStore();
|
||||||
const { getVehicleById } = useVehicleStore();
|
const { getVehicleById } = useVehicleStore();
|
||||||
const { setCurrentLocation, setNextLocation, getMaterialById, setIsPaused, setEndTime } = useMaterialStore();
|
const { setCurrentLocation, setNextLocation, getMaterialById, setIsPaused, setIsVisible, setEndTime } = useMaterialStore();
|
||||||
|
|
||||||
const handleTrigger = (trigger: TriggerSchema, action: Action, materialId: string) => {
|
const handleTrigger = (trigger: TriggerSchema, action: Action, materialId: string) => {
|
||||||
|
|
||||||
@@ -69,8 +69,10 @@ export function useTriggerHandler() {
|
|||||||
|
|
||||||
if (vehicle.isActive === false && vehicle.state === 'idle' && vehicle.currentLoad < vehicle.point.action.loadCapacity) {
|
if (vehicle.isActive === false && vehicle.state === 'idle' && vehicle.currentLoad < vehicle.point.action.loadCapacity) {
|
||||||
|
|
||||||
|
setIsVisible(materialId, false);
|
||||||
|
|
||||||
// Handle current action from vehicle
|
// Handle current action from vehicle
|
||||||
handleAction(action, materialId)
|
handleAction(action, materialId);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
@@ -116,7 +118,7 @@ export function useTriggerHandler() {
|
|||||||
setIsPaused(material.materialId, true);
|
setIsPaused(material.materialId, true);
|
||||||
|
|
||||||
// Handle current action from arm bot
|
// Handle current action from arm bot
|
||||||
handleAction(action, materialId)
|
handleAction(action, materialId);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
|||||||
@@ -38,10 +38,12 @@ const MaterialAnimator = ({ agvDetail }: MaterialAnimatorProps) => {
|
|||||||
<>
|
<>
|
||||||
{hasLoad && (
|
{hasLoad && (
|
||||||
<>
|
<>
|
||||||
<MaterialModel
|
{agvDetail.currentMaterials.length > 0 &&
|
||||||
matRef={meshRef}
|
<MaterialModel
|
||||||
materialType={agvDetail.currentMaterials[0].materialType || 'Default material'}
|
matRef={meshRef}
|
||||||
/>
|
materialType={agvDetail.currentMaterials[0].materialType || 'Default material'}
|
||||||
|
/>
|
||||||
|
}
|
||||||
|
|
||||||
<Html
|
<Html
|
||||||
position={htmlPosition}
|
position={htmlPosition}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import * as THREE from 'three';
|
|||||||
import { Line } from '@react-three/drei';
|
import { Line } from '@react-three/drei';
|
||||||
import { useAnimationPlaySpeed, usePauseButtonStore, usePlayButtonStore, useResetButtonStore } from '../../../../../store/usePlayButtonStore';
|
import { useAnimationPlaySpeed, usePauseButtonStore, usePlayButtonStore, useResetButtonStore } from '../../../../../store/usePlayButtonStore';
|
||||||
import { useVehicleStore } from '../../../../../store/simulation/useVehicleStore';
|
import { useVehicleStore } from '../../../../../store/simulation/useVehicleStore';
|
||||||
|
import { useMaterialStore } from '../../../../../store/simulation/useMaterialStore';
|
||||||
|
|
||||||
interface VehicleAnimatorProps {
|
interface VehicleAnimatorProps {
|
||||||
path: [number, number, number][];
|
path: [number, number, number][];
|
||||||
@@ -15,7 +16,8 @@ interface VehicleAnimatorProps {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function VehicleAnimator({ path, handleCallBack, currentPhase, agvUuid, agvDetail, reset }: VehicleAnimatorProps) {
|
function VehicleAnimator({ path, handleCallBack, currentPhase, agvUuid, agvDetail, reset }: VehicleAnimatorProps) {
|
||||||
const { decrementVehicleLoad, getVehicleById } = useVehicleStore();
|
const { decrementVehicleLoad, getVehicleById, removeLastMaterial } = useVehicleStore();
|
||||||
|
const { removeMaterial } = useMaterialStore();
|
||||||
const { isPaused } = usePauseButtonStore();
|
const { isPaused } = usePauseButtonStore();
|
||||||
const { isPlaying } = usePlayButtonStore();
|
const { isPlaying } = usePlayButtonStore();
|
||||||
const { speed } = useAnimationPlaySpeed();
|
const { speed } = useAnimationPlaySpeed();
|
||||||
@@ -188,6 +190,10 @@ function VehicleAnimator({ path, handleCallBack, currentPhase, agvUuid, agvDetai
|
|||||||
if (elapsedTime >= fixedInterval) {
|
if (elapsedTime >= fixedInterval) {
|
||||||
let droppedMat = droppedMaterial - 1;
|
let droppedMat = droppedMaterial - 1;
|
||||||
decrementVehicleLoad(agvDetail.modelUuid, 1);
|
decrementVehicleLoad(agvDetail.modelUuid, 1);
|
||||||
|
const materialId = removeLastMaterial(agvDetail.modelUuid);
|
||||||
|
if (materialId) {
|
||||||
|
removeMaterial(materialId);
|
||||||
|
}
|
||||||
if (droppedMat > 0) {
|
if (droppedMat > 0) {
|
||||||
startTime = performance.now();
|
startTime = performance.now();
|
||||||
requestAnimationFrame(() => step(droppedMat));
|
requestAnimationFrame(() => step(droppedMat));
|
||||||
|
|||||||
@@ -10,10 +10,9 @@ import MaterialAnimator from '../animator/materialAnimator';
|
|||||||
function VehicleInstance({ agvDetail }: { agvDetail: VehicleStatus }) {
|
function VehicleInstance({ agvDetail }: { agvDetail: VehicleStatus }) {
|
||||||
const { navMesh } = useNavMesh();
|
const { navMesh } = useNavMesh();
|
||||||
const { isPlaying } = usePlayButtonStore();
|
const { isPlaying } = usePlayButtonStore();
|
||||||
const { vehicles, setVehicleActive, setVehicleState, incrementVehicleLoad, addCurrentMaterial, clearCurrentMaterials, setVehicleLoad } = useVehicleStore();
|
const { vehicles, setVehicleActive, setVehicleState, clearCurrentMaterials, setVehicleLoad } = useVehicleStore();
|
||||||
const [currentPhase, setCurrentPhase] = useState<string>('stationed');
|
const [currentPhase, setCurrentPhase] = useState<string>('stationed');
|
||||||
const [path, setPath] = useState<[number, number, number][]>([]);
|
const [path, setPath] = useState<[number, number, number][]>([]);
|
||||||
let isIncrememtable = useRef<boolean>(true);
|
|
||||||
|
|
||||||
const computePath = useCallback(
|
const computePath = useCallback(
|
||||||
(start: any, end: any) => {
|
(start: any, end: any) => {
|
||||||
@@ -44,14 +43,6 @@ function VehicleInstance({ agvDetail }: { agvDetail: VehicleStatus }) {
|
|||||||
setPath([]);
|
setPath([]);
|
||||||
}
|
}
|
||||||
|
|
||||||
const increment = () => {
|
|
||||||
if (isIncrememtable.current) {
|
|
||||||
incrementVehicleLoad(agvDetail.modelUuid, 10);
|
|
||||||
addCurrentMaterial(agvDetail.modelUuid, 'Material 1', '123');
|
|
||||||
isIncrememtable.current = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (isPlaying) {
|
if (isPlaying) {
|
||||||
if (!agvDetail.point.action.unLoadPoint || !agvDetail.point.action.pickUpPoint) return;
|
if (!agvDetail.point.action.unLoadPoint || !agvDetail.point.action.pickUpPoint) return;
|
||||||
@@ -97,8 +88,6 @@ function VehicleInstance({ agvDetail }: { agvDetail: VehicleStatus }) {
|
|||||||
setVehicleState(agvDetail.modelUuid, 'running');
|
setVehicleState(agvDetail.modelUuid, 'running');
|
||||||
setVehicleActive(agvDetail.modelUuid, true);
|
setVehicleActive(agvDetail.modelUuid, true);
|
||||||
vehicleStatus(agvDetail.modelUuid, 'Started from dropping point, heading to pickup point');
|
vehicleStatus(agvDetail.modelUuid, 'Started from dropping point, heading to pickup point');
|
||||||
|
|
||||||
isIncrememtable.current = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -28,10 +28,13 @@ function Vehicles() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|
||||||
<VehicleInstances />
|
<VehicleInstances />
|
||||||
|
|
||||||
{isVehicleSelected && selectedEventSphere && !isPlaying &&
|
{isVehicleSelected && selectedEventSphere && !isPlaying &&
|
||||||
<VehicleUI />
|
<VehicleUI />
|
||||||
}
|
}
|
||||||
|
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ interface VehiclesStore {
|
|||||||
) => void;
|
) => void;
|
||||||
addCurrentMaterial: (modelUuid: string, materialType: string, materialId: string) => void;
|
addCurrentMaterial: (modelUuid: string, materialType: string, materialId: string) => void;
|
||||||
setCurrentMaterials: (modelUuid: string, materials: { materialType: string; materialId: string; }[]) => void;
|
setCurrentMaterials: (modelUuid: string, materials: { materialType: string; materialId: string; }[]) => void;
|
||||||
|
removeLastMaterial: (modelUuid: string) => string | undefined;
|
||||||
clearCurrentMaterials: (modelUuid: string) => void;
|
clearCurrentMaterials: (modelUuid: string) => void;
|
||||||
incrementActiveTime: (modelUuid: string, incrementBy: number) => void;
|
incrementActiveTime: (modelUuid: string, incrementBy: number) => void;
|
||||||
incrementIdleTime: (modelUuid: string, incrementBy: number) => void;
|
incrementIdleTime: (modelUuid: string, incrementBy: number) => void;
|
||||||
@@ -152,6 +153,22 @@ export const useVehicleStore = create<VehiclesStore>()(
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
removeLastMaterial: (modelUuid) => {
|
||||||
|
let materialId: string | undefined;
|
||||||
|
set((state) => {
|
||||||
|
const vehicle = state.vehicles.find((v) => v.modelUuid === modelUuid);
|
||||||
|
if (vehicle) {
|
||||||
|
if (vehicle.currentMaterials.length > 0) {
|
||||||
|
const material = vehicle.currentMaterials.pop();
|
||||||
|
if (material) {
|
||||||
|
materialId = material.materialId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return materialId;
|
||||||
|
},
|
||||||
|
|
||||||
clearCurrentMaterials: (modelUuid) => {
|
clearCurrentMaterials: (modelUuid) => {
|
||||||
set((state) => {
|
set((state) => {
|
||||||
const vehicle = state.vehicles.find((v) => v.modelUuid === modelUuid);
|
const vehicle = state.vehicles.find((v) => v.modelUuid === modelUuid);
|
||||||
|
|||||||
Reference in New Issue
Block a user