@fleet-frontend/mower-maps 0.0.9-beta.7 → 0.0.9-beta.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/styles.d.ts +1 -1
- package/dist/index.esm.js +60 -31
- package/dist/index.js +60 -31
- package/dist/render/MowerMapRenderer.d.ts.map +1 -1
- package/dist/render/MowerPositionManager.d.ts.map +1 -1
- package/dist/types/renderer.d.ts +1 -1
- package/dist/types/renderer.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/config/styles.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export declare const CHARGING_PILE_STYLES: ChargingPileStyle;
|
|
|
10
10
|
export declare const DOODLE_STYLES: SvgElementStyle;
|
|
11
11
|
export declare const PATH_EDGE_STYLES: {
|
|
12
12
|
lineWidth: 20;
|
|
13
|
-
opacity: 0.
|
|
13
|
+
opacity: 0.6;
|
|
14
14
|
edgeLineColor: string;
|
|
15
15
|
transLineColor: string;
|
|
16
16
|
mowedLineColor: string;
|
package/dist/index.esm.js
CHANGED
|
@@ -67,7 +67,7 @@ const DEFAULT_LINE_WIDTHS = {
|
|
|
67
67
|
const DEFAULT_OPACITIES = {
|
|
68
68
|
FULL: 1.0,
|
|
69
69
|
HIGH: 0.7,
|
|
70
|
-
|
|
70
|
+
MEDIUM: 0.6};
|
|
71
71
|
/**
|
|
72
72
|
* 默认半径设置
|
|
73
73
|
*/
|
|
@@ -1083,7 +1083,7 @@ class PathLayer extends BaseLayer {
|
|
|
1083
1083
|
// 2. 创建一个组,应用 clipPath
|
|
1084
1084
|
const group = document.createElementNS('http://www.w3.org/2000/svg', 'g');
|
|
1085
1085
|
group.setAttribute('clip-path', `url(#${clipPathId})`);
|
|
1086
|
-
group.setAttribute('opacity', '0.
|
|
1086
|
+
group.setAttribute('opacity', '0.6'); // 统一透明度,防止叠加脏乱
|
|
1087
1087
|
// 3. 渲染所有路径
|
|
1088
1088
|
for (const element of this.elements) {
|
|
1089
1089
|
const { id, elements } = element;
|
|
@@ -1519,7 +1519,7 @@ class VisionOffLayer extends BaseLayer {
|
|
|
1519
1519
|
*/
|
|
1520
1520
|
const BOUNDARY_STYLES = {
|
|
1521
1521
|
lineColor: '#ffffff',
|
|
1522
|
-
fillColor: 'rgba(239, 255, 237, 0.
|
|
1522
|
+
fillColor: 'rgba(239, 255, 237, 0.1)', // 更鲜艳的绿色半透明填充,增强可见性
|
|
1523
1523
|
lineWidth: 2,
|
|
1524
1524
|
opacity: DEFAULT_OPACITIES.FULL,
|
|
1525
1525
|
mowingLineColor: 'rgba(99, 216, 174, 1)',
|
|
@@ -1551,10 +1551,10 @@ const DOODLE_STYLES = {
|
|
|
1551
1551
|
};
|
|
1552
1552
|
const PATH_EDGE_STYLES = {
|
|
1553
1553
|
lineWidth: DEFAULT_LINE_WIDTHS.PATH,
|
|
1554
|
-
opacity: DEFAULT_OPACITIES.
|
|
1555
|
-
edgeLineColor: 'rgba(
|
|
1554
|
+
opacity: DEFAULT_OPACITIES.MEDIUM,
|
|
1555
|
+
edgeLineColor: 'rgba(231, 238, 246)',
|
|
1556
1556
|
transLineColor: 'transparent',
|
|
1557
|
-
mowedLineColor: 'rgba(
|
|
1557
|
+
mowedLineColor: 'rgba(231, 238, 246)',
|
|
1558
1558
|
mowingLineColor: 'rgba(123, 200, 187)',
|
|
1559
1559
|
};
|
|
1560
1560
|
const CHANNEL_STYLES = {
|
|
@@ -7300,10 +7300,22 @@ class MowerPositionManager {
|
|
|
7300
7300
|
if (!chargingPilesPositionConfig)
|
|
7301
7301
|
return;
|
|
7302
7302
|
this.mowerPositionConfig = chargingPilesPositionConfig;
|
|
7303
|
+
const positonOutOfRange = isOutOfRange(chargingPilesPositionConfig);
|
|
7304
|
+
const positionInValid = isInvalidPosition(chargingPilesPositionConfig);
|
|
7305
|
+
let postureX = 0;
|
|
7306
|
+
let postureY = 0;
|
|
7307
|
+
let postureTheta = 0;
|
|
7303
7308
|
const lastPosition = this.lastPosition;
|
|
7304
|
-
|
|
7305
|
-
|
|
7306
|
-
|
|
7309
|
+
if (positonOutOfRange || positionInValid) {
|
|
7310
|
+
postureX = lastPosition?.x || 0;
|
|
7311
|
+
postureY = lastPosition?.y || 0;
|
|
7312
|
+
postureTheta = lastPosition?.rotation || 0;
|
|
7313
|
+
}
|
|
7314
|
+
else {
|
|
7315
|
+
postureX = chargingPilesPositionConfig.postureX || 0;
|
|
7316
|
+
postureY = chargingPilesPositionConfig.postureY || 0;
|
|
7317
|
+
postureTheta = chargingPilesPositionConfig.postureTheta || 0;
|
|
7318
|
+
}
|
|
7307
7319
|
console.log('updatePositionByLastPosition->', postureX, postureY, postureTheta, chargingPilesPositionConfig);
|
|
7308
7320
|
// 检查是否需要更新图片
|
|
7309
7321
|
this.updateMowerImage(chargingPilesPositionConfig);
|
|
@@ -7370,17 +7382,8 @@ class MowerPositionManager {
|
|
|
7370
7382
|
const { x: pointX, y: pointY } = convertCoordinate(x, y);
|
|
7371
7383
|
const targetPixelPosition = this.convertMapCoordinateToOverlayPixel(pointX, pointY);
|
|
7372
7384
|
const targetRotation = radToDegree(theta);
|
|
7373
|
-
|
|
7374
|
-
|
|
7375
|
-
postureY: y});
|
|
7376
|
-
const positionValid = isInvalidPosition({
|
|
7377
|
-
postureX: x,
|
|
7378
|
-
postureY: y,
|
|
7379
|
-
postureTheta: theta,
|
|
7380
|
-
});
|
|
7381
|
-
if (!positonOutOfRange && !positionValid) {
|
|
7382
|
-
this.lastPosition = { x, y, rotation: theta };
|
|
7383
|
-
}
|
|
7385
|
+
this.currentPosition = { x: x, y: y, rotation: theta };
|
|
7386
|
+
this.lastPosition = { x, y, rotation: theta };
|
|
7384
7387
|
// console.log('setElementPosition', x, y, theta, targetRotation, positonOutOfRange, positionValid, targetPixelPosition);
|
|
7385
7388
|
if (!this.mowerElement)
|
|
7386
7389
|
return;
|
|
@@ -7407,15 +7410,29 @@ class MowerPositionManager {
|
|
|
7407
7410
|
startAnimationToPosition(positionConfig, duration) {
|
|
7408
7411
|
if (!this.mowerElement || !this.currentPosition)
|
|
7409
7412
|
return;
|
|
7410
|
-
this.startPosition = {
|
|
7411
|
-
...this.currentPosition,
|
|
7412
|
-
rotation: radNormalize(this.currentPosition.rotation),
|
|
7413
|
-
};
|
|
7414
7413
|
this.targetPosition = {
|
|
7415
7414
|
x: positionConfig.postureX,
|
|
7416
7415
|
y: positionConfig.postureY,
|
|
7417
7416
|
rotation: positionConfig.postureTheta,
|
|
7418
7417
|
};
|
|
7418
|
+
const isTargetPositionInvalid = isInvalidPosition({
|
|
7419
|
+
postureX: this.targetPosition.x,
|
|
7420
|
+
postureY: this.targetPosition.y,
|
|
7421
|
+
postureTheta: this.targetPosition.rotation,
|
|
7422
|
+
});
|
|
7423
|
+
const isTargetPositionOutOfRange = isOutOfRange({
|
|
7424
|
+
postureX: this.targetPosition.x,
|
|
7425
|
+
postureY: this.targetPosition.y,
|
|
7426
|
+
postureTheta: this.targetPosition.rotation,
|
|
7427
|
+
});
|
|
7428
|
+
// 如果目标坐标点不合理,则舍弃不使用
|
|
7429
|
+
if (isTargetPositionInvalid || isTargetPositionOutOfRange) {
|
|
7430
|
+
return;
|
|
7431
|
+
}
|
|
7432
|
+
this.startPosition = {
|
|
7433
|
+
...this.currentPosition,
|
|
7434
|
+
rotation: radNormalize(this.currentPosition.rotation),
|
|
7435
|
+
};
|
|
7419
7436
|
this.animationDuration = duration;
|
|
7420
7437
|
this.startTime = window.performance.now();
|
|
7421
7438
|
this.isAnimating = true;
|
|
@@ -7447,7 +7464,7 @@ class MowerPositionManager {
|
|
|
7447
7464
|
* 动画步骤
|
|
7448
7465
|
*/
|
|
7449
7466
|
animateStep() {
|
|
7450
|
-
if (!this.isAnimating || !this.
|
|
7467
|
+
if (!this.isAnimating || !this.targetPosition || !this.startPosition)
|
|
7451
7468
|
return;
|
|
7452
7469
|
const currentTime = window.performance.now();
|
|
7453
7470
|
const elapsed = currentTime - this.startTime;
|
|
@@ -7458,7 +7475,6 @@ class MowerPositionManager {
|
|
|
7458
7475
|
const currentX = this.startPosition.x + this.deltaPosition.x * easedProgress;
|
|
7459
7476
|
const currentY = this.startPosition.y + this.deltaPosition.y * easedProgress;
|
|
7460
7477
|
const currentRotation = this.startPosition.rotation + this.deltaPosition.rotation * easedProgress;
|
|
7461
|
-
this.currentPosition = { x: currentX, y: currentY, rotation: currentRotation };
|
|
7462
7478
|
// 假设在这里进行更新路径数据
|
|
7463
7479
|
if (this.onMowingPositionChange) {
|
|
7464
7480
|
this.onMowingPositionChange({
|
|
@@ -7468,14 +7484,13 @@ class MowerPositionManager {
|
|
|
7468
7484
|
});
|
|
7469
7485
|
}
|
|
7470
7486
|
// console.log('animateStep-->', this.startPosition, this.deltaPosition, this.targetPosition, easedProgress)
|
|
7487
|
+
this.setElementPosition(currentX, currentY, currentRotation);
|
|
7471
7488
|
// 继续动画或结束
|
|
7472
7489
|
if (progress < 1) {
|
|
7473
7490
|
// 设置当前位置
|
|
7474
|
-
this.setElementPosition(currentX, currentY, currentRotation);
|
|
7475
7491
|
this.animationId = window.requestAnimationFrame(() => this.animateStep());
|
|
7476
7492
|
}
|
|
7477
7493
|
else {
|
|
7478
|
-
this.setElementPosition(currentX, currentY, currentRotation);
|
|
7479
7494
|
// 动画完成
|
|
7480
7495
|
this.stopAnimation();
|
|
7481
7496
|
// 通知动画完成
|
|
@@ -8877,6 +8892,7 @@ const MowerMapRenderer = forwardRef(({ mapConfig, modelType, mapRef, mapJson, pa
|
|
|
8877
8892
|
const currentProcessMowingStatusRef = useRef(false);
|
|
8878
8893
|
const { updateProcessStateIsMowing, processStateIsMowing } = useProcessMowingState();
|
|
8879
8894
|
const [mowPartitionData, setMowPartitionData] = useState(null);
|
|
8895
|
+
const [robotStatus, setRobotStatus] = useState(null);
|
|
8880
8896
|
// Debug相关状态
|
|
8881
8897
|
const [debugInfo, setDebugInfo] = useState({});
|
|
8882
8898
|
// 处理地图分区边界
|
|
@@ -9236,18 +9252,31 @@ const MowerMapRenderer = forwardRef(({ mapConfig, modelType, mapRef, mapJson, pa
|
|
|
9236
9252
|
setMowPartitionData(mowingPartition);
|
|
9237
9253
|
curMowPartitionData = mowingPartition;
|
|
9238
9254
|
}
|
|
9255
|
+
const positionData = realTimeData?.find(item => item?.type === RealTimeDataType.LOCATION);
|
|
9239
9256
|
const statusData = realTimeData?.find(item => item?.type === RealTimeDataType.STATUS);
|
|
9240
|
-
if (statusData) {
|
|
9257
|
+
if (statusData || positionData) {
|
|
9258
|
+
const currentStatus = statusData?.vehicleState || positionData?.vehicleState;
|
|
9241
9259
|
// 车辆回桩不会回传最后的park的位置,所以根据实时数据的状态数据判断车辆回到桩上
|
|
9242
|
-
if ([RobotStatus.CHARGING, RobotStatus.PARKED].includes(
|
|
9260
|
+
if ([RobotStatus.CHARGING, RobotStatus.PARKED].includes(currentStatus || RobotStatus.UNKNOWN)) {
|
|
9243
9261
|
resetInCharginPie();
|
|
9244
9262
|
}
|
|
9245
|
-
else if (
|
|
9263
|
+
else if (currentStatus === RobotStatus.WORKING) {
|
|
9246
9264
|
// 兜底收不到割草地块的实时数据,使用状态来兜底
|
|
9247
9265
|
overlayRef.current.resetBorderLayerHighlight();
|
|
9248
9266
|
setMowPartitionData({});
|
|
9249
9267
|
curMowPartitionData = {};
|
|
9250
9268
|
}
|
|
9269
|
+
else if (robotStatus !== currentStatus && currentStatus === RobotStatus.MOWING && !mowPartitionData?.partitionIds) {
|
|
9270
|
+
// 如果当前是割草状态,但是地块数据不存在则认为是全局割草,则把所有地块都高亮
|
|
9271
|
+
const allPartitionIds = mapJson?.sub_maps?.map(item => item?.id);
|
|
9272
|
+
setMowPartitionData({
|
|
9273
|
+
partitionIds: allPartitionIds
|
|
9274
|
+
});
|
|
9275
|
+
curMowPartitionData = {
|
|
9276
|
+
partitionIds: allPartitionIds
|
|
9277
|
+
};
|
|
9278
|
+
}
|
|
9279
|
+
setRobotStatus(currentStatus);
|
|
9251
9280
|
}
|
|
9252
9281
|
if (!mapJson ||
|
|
9253
9282
|
!pathJson ||
|
package/dist/index.js
CHANGED
|
@@ -69,7 +69,7 @@ const DEFAULT_LINE_WIDTHS = {
|
|
|
69
69
|
const DEFAULT_OPACITIES = {
|
|
70
70
|
FULL: 1.0,
|
|
71
71
|
HIGH: 0.7,
|
|
72
|
-
|
|
72
|
+
MEDIUM: 0.6};
|
|
73
73
|
/**
|
|
74
74
|
* 默认半径设置
|
|
75
75
|
*/
|
|
@@ -1085,7 +1085,7 @@ class PathLayer extends BaseLayer {
|
|
|
1085
1085
|
// 2. 创建一个组,应用 clipPath
|
|
1086
1086
|
const group = document.createElementNS('http://www.w3.org/2000/svg', 'g');
|
|
1087
1087
|
group.setAttribute('clip-path', `url(#${clipPathId})`);
|
|
1088
|
-
group.setAttribute('opacity', '0.
|
|
1088
|
+
group.setAttribute('opacity', '0.6'); // 统一透明度,防止叠加脏乱
|
|
1089
1089
|
// 3. 渲染所有路径
|
|
1090
1090
|
for (const element of this.elements) {
|
|
1091
1091
|
const { id, elements } = element;
|
|
@@ -1521,7 +1521,7 @@ class VisionOffLayer extends BaseLayer {
|
|
|
1521
1521
|
*/
|
|
1522
1522
|
const BOUNDARY_STYLES = {
|
|
1523
1523
|
lineColor: '#ffffff',
|
|
1524
|
-
fillColor: 'rgba(239, 255, 237, 0.
|
|
1524
|
+
fillColor: 'rgba(239, 255, 237, 0.1)', // 更鲜艳的绿色半透明填充,增强可见性
|
|
1525
1525
|
lineWidth: 2,
|
|
1526
1526
|
opacity: DEFAULT_OPACITIES.FULL,
|
|
1527
1527
|
mowingLineColor: 'rgba(99, 216, 174, 1)',
|
|
@@ -1553,10 +1553,10 @@ const DOODLE_STYLES = {
|
|
|
1553
1553
|
};
|
|
1554
1554
|
const PATH_EDGE_STYLES = {
|
|
1555
1555
|
lineWidth: DEFAULT_LINE_WIDTHS.PATH,
|
|
1556
|
-
opacity: DEFAULT_OPACITIES.
|
|
1557
|
-
edgeLineColor: 'rgba(
|
|
1556
|
+
opacity: DEFAULT_OPACITIES.MEDIUM,
|
|
1557
|
+
edgeLineColor: 'rgba(231, 238, 246)',
|
|
1558
1558
|
transLineColor: 'transparent',
|
|
1559
|
-
mowedLineColor: 'rgba(
|
|
1559
|
+
mowedLineColor: 'rgba(231, 238, 246)',
|
|
1560
1560
|
mowingLineColor: 'rgba(123, 200, 187)',
|
|
1561
1561
|
};
|
|
1562
1562
|
const CHANNEL_STYLES = {
|
|
@@ -7302,10 +7302,22 @@ class MowerPositionManager {
|
|
|
7302
7302
|
if (!chargingPilesPositionConfig)
|
|
7303
7303
|
return;
|
|
7304
7304
|
this.mowerPositionConfig = chargingPilesPositionConfig;
|
|
7305
|
+
const positonOutOfRange = isOutOfRange(chargingPilesPositionConfig);
|
|
7306
|
+
const positionInValid = isInvalidPosition(chargingPilesPositionConfig);
|
|
7307
|
+
let postureX = 0;
|
|
7308
|
+
let postureY = 0;
|
|
7309
|
+
let postureTheta = 0;
|
|
7305
7310
|
const lastPosition = this.lastPosition;
|
|
7306
|
-
|
|
7307
|
-
|
|
7308
|
-
|
|
7311
|
+
if (positonOutOfRange || positionInValid) {
|
|
7312
|
+
postureX = lastPosition?.x || 0;
|
|
7313
|
+
postureY = lastPosition?.y || 0;
|
|
7314
|
+
postureTheta = lastPosition?.rotation || 0;
|
|
7315
|
+
}
|
|
7316
|
+
else {
|
|
7317
|
+
postureX = chargingPilesPositionConfig.postureX || 0;
|
|
7318
|
+
postureY = chargingPilesPositionConfig.postureY || 0;
|
|
7319
|
+
postureTheta = chargingPilesPositionConfig.postureTheta || 0;
|
|
7320
|
+
}
|
|
7309
7321
|
console.log('updatePositionByLastPosition->', postureX, postureY, postureTheta, chargingPilesPositionConfig);
|
|
7310
7322
|
// 检查是否需要更新图片
|
|
7311
7323
|
this.updateMowerImage(chargingPilesPositionConfig);
|
|
@@ -7372,17 +7384,8 @@ class MowerPositionManager {
|
|
|
7372
7384
|
const { x: pointX, y: pointY } = convertCoordinate(x, y);
|
|
7373
7385
|
const targetPixelPosition = this.convertMapCoordinateToOverlayPixel(pointX, pointY);
|
|
7374
7386
|
const targetRotation = radToDegree(theta);
|
|
7375
|
-
|
|
7376
|
-
|
|
7377
|
-
postureY: y});
|
|
7378
|
-
const positionValid = isInvalidPosition({
|
|
7379
|
-
postureX: x,
|
|
7380
|
-
postureY: y,
|
|
7381
|
-
postureTheta: theta,
|
|
7382
|
-
});
|
|
7383
|
-
if (!positonOutOfRange && !positionValid) {
|
|
7384
|
-
this.lastPosition = { x, y, rotation: theta };
|
|
7385
|
-
}
|
|
7387
|
+
this.currentPosition = { x: x, y: y, rotation: theta };
|
|
7388
|
+
this.lastPosition = { x, y, rotation: theta };
|
|
7386
7389
|
// console.log('setElementPosition', x, y, theta, targetRotation, positonOutOfRange, positionValid, targetPixelPosition);
|
|
7387
7390
|
if (!this.mowerElement)
|
|
7388
7391
|
return;
|
|
@@ -7409,15 +7412,29 @@ class MowerPositionManager {
|
|
|
7409
7412
|
startAnimationToPosition(positionConfig, duration) {
|
|
7410
7413
|
if (!this.mowerElement || !this.currentPosition)
|
|
7411
7414
|
return;
|
|
7412
|
-
this.startPosition = {
|
|
7413
|
-
...this.currentPosition,
|
|
7414
|
-
rotation: radNormalize(this.currentPosition.rotation),
|
|
7415
|
-
};
|
|
7416
7415
|
this.targetPosition = {
|
|
7417
7416
|
x: positionConfig.postureX,
|
|
7418
7417
|
y: positionConfig.postureY,
|
|
7419
7418
|
rotation: positionConfig.postureTheta,
|
|
7420
7419
|
};
|
|
7420
|
+
const isTargetPositionInvalid = isInvalidPosition({
|
|
7421
|
+
postureX: this.targetPosition.x,
|
|
7422
|
+
postureY: this.targetPosition.y,
|
|
7423
|
+
postureTheta: this.targetPosition.rotation,
|
|
7424
|
+
});
|
|
7425
|
+
const isTargetPositionOutOfRange = isOutOfRange({
|
|
7426
|
+
postureX: this.targetPosition.x,
|
|
7427
|
+
postureY: this.targetPosition.y,
|
|
7428
|
+
postureTheta: this.targetPosition.rotation,
|
|
7429
|
+
});
|
|
7430
|
+
// 如果目标坐标点不合理,则舍弃不使用
|
|
7431
|
+
if (isTargetPositionInvalid || isTargetPositionOutOfRange) {
|
|
7432
|
+
return;
|
|
7433
|
+
}
|
|
7434
|
+
this.startPosition = {
|
|
7435
|
+
...this.currentPosition,
|
|
7436
|
+
rotation: radNormalize(this.currentPosition.rotation),
|
|
7437
|
+
};
|
|
7421
7438
|
this.animationDuration = duration;
|
|
7422
7439
|
this.startTime = window.performance.now();
|
|
7423
7440
|
this.isAnimating = true;
|
|
@@ -7449,7 +7466,7 @@ class MowerPositionManager {
|
|
|
7449
7466
|
* 动画步骤
|
|
7450
7467
|
*/
|
|
7451
7468
|
animateStep() {
|
|
7452
|
-
if (!this.isAnimating || !this.
|
|
7469
|
+
if (!this.isAnimating || !this.targetPosition || !this.startPosition)
|
|
7453
7470
|
return;
|
|
7454
7471
|
const currentTime = window.performance.now();
|
|
7455
7472
|
const elapsed = currentTime - this.startTime;
|
|
@@ -7460,7 +7477,6 @@ class MowerPositionManager {
|
|
|
7460
7477
|
const currentX = this.startPosition.x + this.deltaPosition.x * easedProgress;
|
|
7461
7478
|
const currentY = this.startPosition.y + this.deltaPosition.y * easedProgress;
|
|
7462
7479
|
const currentRotation = this.startPosition.rotation + this.deltaPosition.rotation * easedProgress;
|
|
7463
|
-
this.currentPosition = { x: currentX, y: currentY, rotation: currentRotation };
|
|
7464
7480
|
// 假设在这里进行更新路径数据
|
|
7465
7481
|
if (this.onMowingPositionChange) {
|
|
7466
7482
|
this.onMowingPositionChange({
|
|
@@ -7470,14 +7486,13 @@ class MowerPositionManager {
|
|
|
7470
7486
|
});
|
|
7471
7487
|
}
|
|
7472
7488
|
// console.log('animateStep-->', this.startPosition, this.deltaPosition, this.targetPosition, easedProgress)
|
|
7489
|
+
this.setElementPosition(currentX, currentY, currentRotation);
|
|
7473
7490
|
// 继续动画或结束
|
|
7474
7491
|
if (progress < 1) {
|
|
7475
7492
|
// 设置当前位置
|
|
7476
|
-
this.setElementPosition(currentX, currentY, currentRotation);
|
|
7477
7493
|
this.animationId = window.requestAnimationFrame(() => this.animateStep());
|
|
7478
7494
|
}
|
|
7479
7495
|
else {
|
|
7480
|
-
this.setElementPosition(currentX, currentY, currentRotation);
|
|
7481
7496
|
// 动画完成
|
|
7482
7497
|
this.stopAnimation();
|
|
7483
7498
|
// 通知动画完成
|
|
@@ -8879,6 +8894,7 @@ const MowerMapRenderer = React.forwardRef(({ mapConfig, modelType, mapRef, mapJs
|
|
|
8879
8894
|
const currentProcessMowingStatusRef = React.useRef(false);
|
|
8880
8895
|
const { updateProcessStateIsMowing, processStateIsMowing } = useProcessMowingState();
|
|
8881
8896
|
const [mowPartitionData, setMowPartitionData] = React.useState(null);
|
|
8897
|
+
const [robotStatus, setRobotStatus] = React.useState(null);
|
|
8882
8898
|
// Debug相关状态
|
|
8883
8899
|
const [debugInfo, setDebugInfo] = React.useState({});
|
|
8884
8900
|
// 处理地图分区边界
|
|
@@ -9238,18 +9254,31 @@ const MowerMapRenderer = React.forwardRef(({ mapConfig, modelType, mapRef, mapJs
|
|
|
9238
9254
|
setMowPartitionData(mowingPartition);
|
|
9239
9255
|
curMowPartitionData = mowingPartition;
|
|
9240
9256
|
}
|
|
9257
|
+
const positionData = realTimeData?.find(item => item?.type === RealTimeDataType.LOCATION);
|
|
9241
9258
|
const statusData = realTimeData?.find(item => item?.type === RealTimeDataType.STATUS);
|
|
9242
|
-
if (statusData) {
|
|
9259
|
+
if (statusData || positionData) {
|
|
9260
|
+
const currentStatus = statusData?.vehicleState || positionData?.vehicleState;
|
|
9243
9261
|
// 车辆回桩不会回传最后的park的位置,所以根据实时数据的状态数据判断车辆回到桩上
|
|
9244
|
-
if ([RobotStatus.CHARGING, RobotStatus.PARKED].includes(
|
|
9262
|
+
if ([RobotStatus.CHARGING, RobotStatus.PARKED].includes(currentStatus || RobotStatus.UNKNOWN)) {
|
|
9245
9263
|
resetInCharginPie();
|
|
9246
9264
|
}
|
|
9247
|
-
else if (
|
|
9265
|
+
else if (currentStatus === RobotStatus.WORKING) {
|
|
9248
9266
|
// 兜底收不到割草地块的实时数据,使用状态来兜底
|
|
9249
9267
|
overlayRef.current.resetBorderLayerHighlight();
|
|
9250
9268
|
setMowPartitionData({});
|
|
9251
9269
|
curMowPartitionData = {};
|
|
9252
9270
|
}
|
|
9271
|
+
else if (robotStatus !== currentStatus && currentStatus === RobotStatus.MOWING && !mowPartitionData?.partitionIds) {
|
|
9272
|
+
// 如果当前是割草状态,但是地块数据不存在则认为是全局割草,则把所有地块都高亮
|
|
9273
|
+
const allPartitionIds = mapJson?.sub_maps?.map(item => item?.id);
|
|
9274
|
+
setMowPartitionData({
|
|
9275
|
+
partitionIds: allPartitionIds
|
|
9276
|
+
});
|
|
9277
|
+
curMowPartitionData = {
|
|
9278
|
+
partitionIds: allPartitionIds
|
|
9279
|
+
};
|
|
9280
|
+
}
|
|
9281
|
+
setRobotStatus(currentStatus);
|
|
9253
9282
|
}
|
|
9254
9283
|
if (!mapJson ||
|
|
9255
9284
|
!pathJson ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MowerMapRenderer.d.ts","sourceRoot":"","sources":["../../src/render/MowerMapRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AA4Cf,OAAO,EAAa,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAO1F,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,MAAM,EAAE,GAAG,CAAC;KACb;CACF;AAgGD,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"MowerMapRenderer.d.ts","sourceRoot":"","sources":["../../src/render/MowerMapRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AA4Cf,OAAO,EAAa,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAO1F,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,MAAM,EAAE,GAAG,CAAC;KACb;CACF;AAgGD,eAAO,MAAM,gBAAgB,mGAqtB5B,CAAC;AAIF,eAAe,gBAAgB,CAAC;AAChC,YAAY,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MowerPositionManager.d.ts","sourceRoot":"","sources":["../../src/render/MowerPositionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAKL,WAAW,EACZ,MAAM,UAAU,CAAC;AAElB,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,YAAY,CAA4B;IAEhD,OAAO,CAAC,aAAa,CAAiB;IAGtC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,YAAY,CAA2D;IAC/E,OAAO,CAAC,aAAa,CAA2D;IAChF,OAAO,CAAC,eAAe,CAA2D;IAClF,OAAO,CAAC,cAAc,CAA2D;IACjF,OAAO,CAAC,aAAa,CAA2D;IAChF,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,mBAAmB,CAAC,CAAa;IACzC,OAAO,CAAC,sBAAsB,CAAC,CAIpB;gBAGT,OAAO,EAAE,UAAU,EACnB,mBAAmB,EAAE,mBAAmB,EACxC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,WAAW,EACvB,mBAAmB,CAAC,EAAE,MAAM,IAAI,EAChC,sBAAsB,CAAC,EAAE,CAAC,YAAY,EAAE;QACtC,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,YAAY,EAAE,WAAW,CAAC;KAC3B,KAAK,IAAI;IAWZ,IAAI,aAAa,YAEhB;IAED;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAe3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkC1B;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,WAAW;IAIrC;;OAEG;IACH,UAAU,IAAI,WAAW,GAAG,IAAI;IAIhC;;OAEG;IACH,4BAA4B,CAC1B,2BAA2B,CAAC,EAAE,mBAAmB;
|
|
1
|
+
{"version":3,"file":"MowerPositionManager.d.ts","sourceRoot":"","sources":["../../src/render/MowerPositionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAKL,WAAW,EACZ,MAAM,UAAU,CAAC;AAElB,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,YAAY,CAA4B;IAEhD,OAAO,CAAC,aAAa,CAAiB;IAGtC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,YAAY,CAA2D;IAC/E,OAAO,CAAC,aAAa,CAA2D;IAChF,OAAO,CAAC,eAAe,CAA2D;IAClF,OAAO,CAAC,cAAc,CAA2D;IACjF,OAAO,CAAC,aAAa,CAA2D;IAChF,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,mBAAmB,CAAC,CAAa;IACzC,OAAO,CAAC,sBAAsB,CAAC,CAIpB;gBAGT,OAAO,EAAE,UAAU,EACnB,mBAAmB,EAAE,mBAAmB,EACxC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,WAAW,EACvB,mBAAmB,CAAC,EAAE,MAAM,IAAI,EAChC,sBAAsB,CAAC,EAAE,CAAC,YAAY,EAAE;QACtC,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,YAAY,EAAE,WAAW,CAAC;KAC3B,KAAK,IAAI;IAWZ,IAAI,aAAa,YAEhB;IAED;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAe3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkC1B;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,WAAW;IAIrC;;OAEG;IACH,UAAU,IAAI,WAAW,GAAG,IAAI;IAIhC;;OAEG;IACH,4BAA4B,CAC1B,2BAA2B,CAAC,EAAE,mBAAmB;IAmCnD;;OAEG;IACH,cAAc,CAAC,cAAc,EAAE,mBAAmB,EAAE,aAAa,GAAE,MAAU;IA+C7E;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgBxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAmB1B;;OAEG;IACH,OAAO,CAAC,aAAa;IAWrB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAkEhC,mBAAmB;IAKnB;;OAEG;IACH,OAAO,CAAC,WAAW;IA4CnB;;OAEG;IACH,OAAO,CAAC,IAAI;IAIZ;;OAEG;IACH,OAAO,CAAC,kCAAkC;IA6B1C;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO;IAQ3B;;OAEG;IACH,OAAO;CAWR"}
|
package/dist/types/renderer.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/types/renderer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/types/renderer.ts"],"names":[],"mappings":"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"}
|