From 1bc33546a044cbc84dd9595c19dbcd9a4e309fc9 Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期六, 10 一月 2026 14:06:10 +0800
Subject: [PATCH] #

---
 zy-acs-flow/src/map/tool.js |   86 +++++++++++++++++++++++++++++++-----------
 1 files changed, 63 insertions(+), 23 deletions(-)

diff --git a/zy-acs-flow/src/map/tool.js b/zy-acs-flow/src/map/tool.js
index c2959af..abc1b4f 100644
--- a/zy-acs-flow/src/map/tool.js
+++ b/zy-acs-flow/src/map/tool.js
@@ -29,6 +29,13 @@
 import ctuLoadedNoBattery from '/map/agv/ctuLoadedNoBattery.svg';
 import ctuLoadedHalfBattery from '/map/agv/ctuLoadedHalfBattery.svg';
 import ctuLoadedFullBattery from '/map/agv/ctuLoadedFullBattery.svg';
+// asr
+import ASREmptyNoBattery from '/map/asr/ASREmptyNoBattery.svg';
+import ASREmptyHalfBattery from '/map/asr/ASREmptyHalfBattery.svg';
+import ASREmptyFullBattery from '/map/asr/ASREmptyFullBattery.svg';
+import ASRLoadedNoBattery from '/map/asr/ASRLoadedNoBattery.svg';
+import ASRLoadedHalfBattery from '/map/asr/ASRLoadedHalfBattery.svg';
+import ASRLoadedFullBattery from '/map/asr/ASRLoadedFullBattery.svg';
 
 let app, mapContainer, themeMode;
 let selectedSprite, effectOverlay, effectTicker;
@@ -78,7 +85,7 @@
     return { mapX: mapPoint.x, mapY: mapPoint.y };
 }
 
-export const generateSprite = (deviceType, texture) => {
+export const generateSprite = (deviceType, texture, agvModel) => {
     let sprite;
     switch (deviceType) {
         case DEVICE_TYPE.SHELF:
@@ -111,9 +118,14 @@
             if (texture) {
                 sprite = new PIXI.Sprite(PIXI.Texture.from(texture, { resourceOptions: { scale: 1 } }));
             }
-            sprite.width = 750;
-            sprite.height = 1300;
             sprite.zIndex = DEVICE_Z_INDEX.AGV;
+
+            if (agvModel === 'HEAVY_LOAD_STACKING_ROBOT') {
+                sprite.scale.set(13, 11);
+            } else {
+                sprite.width = 750;
+                sprite.height = 1300;
+            }
             break
         case DEVICE_TYPE.POINT:
             sprite = new PIXI.Sprite(PIXI.Texture.from(point, { resourceOptions: { scale: 1 } }));
@@ -687,22 +699,45 @@
     }
 }
 
-export const generateAgvSpriteTexture = (agvStatusMode) => {
-    switch (agvStatusMode) {
-        case AGV_STATUS_MODE.EMPTY_NO_BATTERY:
-            return ctuEmptyNoBattery;
-        case AGV_STATUS_MODE.EMPTY_HALF_BATTERY:
-            return ctuEmptyHalfBattery;
-        case AGV_STATUS_MODE.EMPTY_FULL_BATTERY:
-            return ctuEmptyFullBattery;
-        case AGV_STATUS_MODE.LOADED_NO_BATTERY:
-            return ctuLoadedNoBattery;
-        case AGV_STATUS_MODE.LOADED_HALF_BATTERY:
-            return ctuLoadedHalfBattery;
-        case AGV_STATUS_MODE.LOADED_FULL_BATTERY:
-            return ctuLoadedFullBattery;
-        default:
-            return;
+export const generateAgvSpriteTexture = (agvModel, agvStatusMode) => {
+    if (!agvModel) {
+        console.error("failed to load agv model");
+        return;
+    }
+    if (agvModel === 'HEAVY_LOAD_STACKING_ROBOT') {
+        switch (agvStatusMode) {
+            case AGV_STATUS_MODE.EMPTY_NO_BATTERY:
+                return ASREmptyNoBattery;
+            case AGV_STATUS_MODE.EMPTY_HALF_BATTERY:
+                return ASREmptyHalfBattery;
+            case AGV_STATUS_MODE.EMPTY_FULL_BATTERY:
+                return ASREmptyFullBattery;
+            case AGV_STATUS_MODE.LOADED_NO_BATTERY:
+                return ASRLoadedNoBattery;
+            case AGV_STATUS_MODE.LOADED_HALF_BATTERY:
+                return ASRLoadedHalfBattery;
+            case AGV_STATUS_MODE.LOADED_FULL_BATTERY:
+                return ASRLoadedFullBattery;
+            default:
+                return;
+        }
+    } else {
+        switch (agvStatusMode) {
+            case AGV_STATUS_MODE.EMPTY_NO_BATTERY:
+                return ctuEmptyNoBattery;
+            case AGV_STATUS_MODE.EMPTY_HALF_BATTERY:
+                return ctuEmptyHalfBattery;
+            case AGV_STATUS_MODE.EMPTY_FULL_BATTERY:
+                return ctuEmptyFullBattery;
+            case AGV_STATUS_MODE.LOADED_NO_BATTERY:
+                return ctuLoadedNoBattery;
+            case AGV_STATUS_MODE.LOADED_HALF_BATTERY:
+                return ctuLoadedHalfBattery;
+            case AGV_STATUS_MODE.LOADED_FULL_BATTERY:
+                return ctuLoadedFullBattery;
+            default:
+                return;
+        }
     }
 }
 
@@ -769,7 +804,7 @@
 const agvRotationOffset = rotationParseNum(AGV_ANGLE_OFFSET_VAL);
 
 const showAgvSprite = (curZone, agvVo, setCurSprite) => {
-    const { agvNo, code, direction, battery, jobType, backpack: backpackCount, slots, error } = agvVo;
+    const { agvNo, agvModel, code, direction, battery, jobType, backpack: backpackCount, slots, error } = agvVo;
     if (!code) { return; }
     const codeSprite = querySprite(DEVICE_TYPE.POINT, code);
     if (!codeSprite) { return; }
@@ -780,12 +815,13 @@
     let agvSprite = querySprite(DEVICE_TYPE.AGV, agvNo);
     if (!agvSprite) {
         const agvStatusMode = getAgvStatusMode(backpackCount, battery);
-        const agvTexture = generateAgvSpriteTexture(agvStatusMode);
-        agvSprite = generateSprite(DEVICE_TYPE.AGV, agvTexture);
+        const agvTexture = generateAgvSpriteTexture(agvModel, agvStatusMode);
+        agvSprite = generateSprite(DEVICE_TYPE.AGV, agvTexture, agvModel);
 
         initSprite(agvSprite, DEVICE_TYPE.AGV);
 
         agvSprite.data.no = agvNo;
+        agvSprite.data.model = agvModel;
         agvSprite.data.backpackCount = backpackCount;
         agvSprite.data.battery = battery;
 
@@ -800,12 +836,16 @@
         });
         agvText.anchor.set(0.5, 0.5);
         agvText.position.set(0, 8);
+        if (agvModel === 'HEAVY_LOAD_STACKING_ROBOT') {
+            agvText.position.set(0, 20);
+        }
         agvText.scale.set(MAP_MIRROR ? -1 : 1, 1)
         agvSprite.addChild(agvText);
 
         agvSprite.updateTextRotation = () => {
             if (agvText && agvSprite) {
                 agvText.rotation = -agvSprite.rotation - rotationParseNum(MAP_DEFAULT_ROTATION);
+                // agvText.rotation = -agvSprite.rotation - rotationParseNum(MAP_DEFAULT_ROTATION + 180);
             }
         };
         agvSprite.updateTextRotation();
@@ -974,7 +1014,7 @@
     const label = new PIXI.Text(text ?? '', labelStyle);
     label.anchor.set(0.5);
     label.position.set(centerX, centerY);
-    label.rotation = rotationParseNum(MAP_DEFAULT_ROTATION);
+    label.rotation = -rotationParseNum(MAP_DEFAULT_ROTATION);
     label.scale.set(MAP_MIRROR ? -1 : 1, 1);
     draft.addChild(label);
 };

--
Gitblit v1.9.1