minor changes in conveyor box spawn
This commit is contained in:
parent
496c8b0305
commit
9b9164c600
|
@ -1,10 +1,4 @@
|
|||
import React, {
|
||||
useRef,
|
||||
useEffect,
|
||||
useMemo,
|
||||
useCallback,
|
||||
useState,
|
||||
} from "react";
|
||||
import React, { useRef, useEffect, useMemo, useCallback } from "react";
|
||||
import { useLoader, useFrame } from "@react-three/fiber";
|
||||
import { GLTFLoader } from "three-stdlib";
|
||||
import * as THREE from "three";
|
||||
|
@ -54,7 +48,6 @@ const ProcessAnimator: React.FC<ProcessContainerProps> = ({
|
|||
const gltf = useLoader(GLTFLoader, crate) as GLTF;
|
||||
const groupRef = useRef<THREE.Group>(null);
|
||||
const tempStackedObjectsRef = useRef<Record<string, boolean>>({});
|
||||
const [previouslyConnected, setPreviouslyConnected] = useState<any>({});
|
||||
|
||||
const {
|
||||
animationStates,
|
||||
|
@ -160,29 +153,6 @@ const ProcessAnimator: React.FC<ProcessContainerProps> = ({
|
|||
|
||||
// Check connection status
|
||||
const isConnected = isConnectedToActiveArmBot(process.id);
|
||||
const wasConnected = previouslyConnected[process.id] || false;
|
||||
|
||||
// Track connection state changes
|
||||
if (wasConnected !== isConnected) {
|
||||
|
||||
// Update connection tracking (in a separate useEffect to avoid issues with setState in render)
|
||||
setTimeout(() => {
|
||||
setPreviouslyConnected((prev: any) => ({
|
||||
...prev,
|
||||
[process.id]: isConnected,
|
||||
}));
|
||||
}, 0);
|
||||
}
|
||||
|
||||
// If just disconnected, reset the spawn timer to allow new spawns
|
||||
if (wasConnected && !isConnected) {
|
||||
|
||||
newStates[process.id] = {
|
||||
...processState,
|
||||
nextSpawnTime: currentTime + 0.1, // Start spawning soon after disconnect
|
||||
hasSpawnedZeroIntervalObject: false, // Reset for zero interval spawns
|
||||
};
|
||||
}
|
||||
|
||||
if (processState.isProcessDelaying) {
|
||||
// Existing delay handling logic...
|
||||
|
@ -199,7 +169,9 @@ const ProcessAnimator: React.FC<ProcessContainerProps> = ({
|
|||
|
||||
const spawnPoint = findSpawnPoint(process);
|
||||
if (!spawnPoint || !spawnPoint.actions) {
|
||||
|
||||
console.log(
|
||||
`Process ${process.id} has no valid spawn point or actions`
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -215,8 +187,6 @@ const ProcessAnimator: React.FC<ProcessContainerProps> = ({
|
|||
? spawnAction.spawnInterval
|
||||
: parseFloat(spawnAction.spawnInterval || "0") || 0;
|
||||
|
||||
|
||||
|
||||
// Check if this is a zero interval spawn and we already spawned an object
|
||||
if (
|
||||
spawnInterval === 0 &&
|
||||
|
@ -225,13 +195,9 @@ const ProcessAnimator: React.FC<ProcessContainerProps> = ({
|
|||
return; // Don't spawn more objects for zero interval
|
||||
}
|
||||
|
||||
const effectiveSpawnInterval = Math.max(
|
||||
0.1,
|
||||
spawnInterval / speedRef.current
|
||||
);
|
||||
const effectiveSpawnInterval = spawnInterval / speedRef.current;
|
||||
|
||||
if (currentTime >= processState.nextSpawnTime) {
|
||||
|
||||
const objectId = `obj-${process.id}-${processState.objectIdCounter}`;
|
||||
const newObject = createSpawnedObject(
|
||||
process,
|
||||
|
@ -250,9 +216,6 @@ const ProcessAnimator: React.FC<ProcessContainerProps> = ({
|
|||
progress: 0.005, // Start with tiny progress to ensure animation begins
|
||||
};
|
||||
|
||||
// Calculate next spawn time
|
||||
const nextSpawnAt = currentTime + effectiveSpawnInterval;
|
||||
|
||||
// Update state with the new object and flag for zero interval
|
||||
newStates[process.id] = {
|
||||
...processState,
|
||||
|
@ -261,7 +224,7 @@ const ProcessAnimator: React.FC<ProcessContainerProps> = ({
|
|||
[objectId]: newObject,
|
||||
},
|
||||
objectIdCounter: processState.objectIdCounter + 1,
|
||||
nextSpawnTime: nextSpawnAt,
|
||||
nextSpawnTime: currentTime + effectiveSpawnInterval,
|
||||
// Mark that we've spawned an object for zero interval case
|
||||
hasSpawnedZeroIntervalObject:
|
||||
spawnInterval === 0
|
||||
|
@ -290,8 +253,12 @@ const ProcessAnimator: React.FC<ProcessContainerProps> = ({
|
|||
return;
|
||||
}
|
||||
|
||||
// Check connection status
|
||||
// Check connection status with debugging
|
||||
const isConnected = isConnectedToActiveArmBot(process.id);
|
||||
console.log(
|
||||
`Process ${process.id} animation - connected:`,
|
||||
isConnected
|
||||
);
|
||||
|
||||
if (isConnected) {
|
||||
// Stop all animations when connected to active arm bot
|
||||
|
@ -326,7 +293,9 @@ const ProcessAnimator: React.FC<ProcessContainerProps> = ({
|
|||
currentTime - processState.processDelayStartTime >=
|
||||
effectiveDelayTime
|
||||
) {
|
||||
|
||||
console.log(
|
||||
`Process ${process.id} delay completed, resuming animation`
|
||||
);
|
||||
newStates[process.id] = {
|
||||
...processState,
|
||||
isProcessDelaying: false,
|
||||
|
@ -362,7 +331,9 @@ const ProcessAnimator: React.FC<ProcessContainerProps> = ({
|
|||
[];
|
||||
|
||||
if (path.length < 2) {
|
||||
|
||||
console.log(
|
||||
`Process ${process.id} has insufficient path points: ${path.length}`
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -377,7 +348,9 @@ const ProcessAnimator: React.FC<ProcessContainerProps> = ({
|
|||
|
||||
const currentRef = gltf?.scene ? obj.ref.current : obj.ref.current;
|
||||
if (!currentRef) {
|
||||
|
||||
console.log(
|
||||
`No reference for object ${objectId}, skipping animation`
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -405,7 +378,9 @@ const ProcessAnimator: React.FC<ProcessContainerProps> = ({
|
|||
stateRef.currentDelayDuration / speedRef.current;
|
||||
|
||||
if (currentTime - stateRef.delayStartTime >= effectiveDelayTime) {
|
||||
|
||||
console.log(
|
||||
`Delay complete for object ${objectId}, resuming animation`
|
||||
);
|
||||
stateRef.isDelaying = false;
|
||||
stateRef.delayComplete = true;
|
||||
stateRef.isAnimating = true;
|
||||
|
@ -433,6 +408,9 @@ const ProcessAnimator: React.FC<ProcessContainerProps> = ({
|
|||
|
||||
// Skip non-animating objects
|
||||
if (!stateRef.isAnimating) {
|
||||
console.log(
|
||||
`Object ${objectId} not animating, skipping animation updates`
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -476,6 +454,9 @@ const ProcessAnimator: React.FC<ProcessContainerProps> = ({
|
|||
|
||||
if (shouldHide) {
|
||||
if (isAgvPicking) {
|
||||
console.log(
|
||||
`AGV picking at last point for object ${objectId}, hiding object`
|
||||
);
|
||||
updatedObjects[objectId] = {
|
||||
...obj,
|
||||
visible: false,
|
||||
|
@ -536,8 +517,14 @@ const ProcessAnimator: React.FC<ProcessContainerProps> = ({
|
|||
if (stateRef.delayComplete && stateRef.progress < 0.01) {
|
||||
stateRef.progress = 0.05;
|
||||
stateRef.delayComplete = false;
|
||||
console.log(
|
||||
`Boosting progress for object ${objectId} after delay`
|
||||
);
|
||||
} else {
|
||||
stateRef.progress += movement / distance;
|
||||
console.log(
|
||||
`Object ${objectId} progress: ${stateRef.progress.toFixed(3)}`
|
||||
);
|
||||
}
|
||||
|
||||
// Handle point transition
|
||||
|
@ -555,8 +542,12 @@ const ProcessAnimator: React.FC<ProcessContainerProps> = ({
|
|||
currentTime
|
||||
);
|
||||
|
||||
const newPointData = getPointDataForAnimationIndex(
|
||||
process,
|
||||
stateRef.currentIndex
|
||||
);
|
||||
|
||||
// No action needed with newPointData here - will be handled in next frame
|
||||
getPointDataForAnimationIndex(process, stateRef.currentIndex);
|
||||
} else {
|
||||
// Update position with lerp
|
||||
currentRef.position.lerpVectors(
|
||||
|
@ -573,7 +564,9 @@ const ProcessAnimator: React.FC<ProcessContainerProps> = ({
|
|||
|
||||
// Log if no animation is occurring when it should
|
||||
if (!animationOccurring && !isConnected) {
|
||||
|
||||
console.log(
|
||||
`Warning: No animation occurring for process ${process.id} despite not being connected`
|
||||
);
|
||||
}
|
||||
|
||||
newStates[process.id] = {
|
||||
|
|
Loading…
Reference in New Issue