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