| | |
| | | import { |
| | | DEVICE_TYPE, |
| | | DEVICE_Z_INDEX, |
| | | AGV_STATUS_MODE, |
| | | } from './constants'; |
| | | |
| | | import shelf from '/map/shelf.svg'; |
| | |
| | | import station from '/map/station.svg'; |
| | | import direction from '/map/direction.svg'; |
| | | import point from '/map/point.svg'; |
| | | // agv |
| | | import ctuEmptyNoBattery from '/map/agv/ctuEmptyNoBattery.svg'; |
| | | import ctuEmptyHalfBattery from '/map/agv/ctuEmptyHalfBattery.svg'; |
| | | import ctuEmptyFullBattery from '/map/agv/ctuEmptyFullBattery.svg'; |
| | | import ctuLoadedNoBattery from '/map/agv/ctuLoadedNoBattery.svg'; |
| | | import ctuLoadedHalfBattery from '/map/agv/ctuLoadedHalfBattery.svg'; |
| | | import ctuLoadedFullBattery from '/map/agv/ctuLoadedFullBattery.svg'; |
| | | |
| | | let app, mapContainer, themeMode; |
| | | let selectedSprite, effectTick, effectHalfCircle, effectRectangle; |
| | |
| | | } |
| | | } |
| | | |
| | | export const generateSprite = (deviceType) => { |
| | | export const generateSprite = (deviceType, source) => { |
| | | let sprite; |
| | | switch (deviceType) { |
| | | case DEVICE_TYPE.SHELF: |
| | |
| | | sprite.zIndex = DEVICE_Z_INDEX.DIRECTION; |
| | | break; |
| | | |
| | | |
| | | case DEVICE_TYPE.AGV: |
| | | if (source) { |
| | | sprite = new PIXI.Sprite(PIXI.Texture.from(source, { resourceOptions: { scale: 1 } })); |
| | | } |
| | | sprite.width = 300; |
| | | sprite.height = 500; |
| | | sprite.zIndex = DEVICE_Z_INDEX.AGV; |
| | | break |
| | | case DEVICE_TYPE.POINT: |
| | | sprite = new PIXI.Sprite(PIXI.Texture.from(point, { resourceOptions: { scale: 1 } })); |
| | | // sprite.width = 112; |
| | |
| | | type: type, |
| | | uuid: generateID() |
| | | }; |
| | | } |
| | | |
| | | export const querySprite = (type, no) => { |
| | | if (!mapContainer) { |
| | | return; |
| | | } |
| | | for (const sprite of mapContainer.children) { |
| | | if (sprite.data?.type === type && sprite.data?.no === no) { |
| | | return sprite; |
| | | } |
| | | } |
| | | } |
| | | |
| | | export const markSprite = (sprite) => { |
| | |
| | | } |
| | | |
| | | |
| | | // service ------------------------ |
| | | |
| | | export const getAgvStatusMode = (backpack, battery) => { |
| | | if (backpack === 0) { |
| | | if (battery < 10) { |
| | | return AGV_STATUS_MODE.EMPTY_NO_BATTERY; |
| | | } |
| | | if (battery < 80) { |
| | | return AGV_STATUS_MODE.EMPTY_HALF_BATTERY; |
| | | } |
| | | return AGV_STATUS_MODE.EMPTY_FULL_BATTERY; |
| | | } else { |
| | | if (battery < 10) { |
| | | return AGV_STATUS_MODE.LOADED_NO_BATTERY; |
| | | } |
| | | if (battery < 80) { |
| | | return AGV_STATUS_MODE.LOADED_HALF_BATTERY; |
| | | } |
| | | return AGV_STATUS_MODE.LOADED_FULL_BATTERY; |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | 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; |
| | | } |
| | | } |
| | | |
| | | |
| | | // dynamic graphic ---------------- |
| | | |
| | | export const generateDynamicGraphic = (curZone, data) => { |
| | | console.log("ws", curZone, data); |
| | | |
| | | const dynamicData = JSON.parse(data); |
| | | console.log("ws", curZone, dynamicData); |
| | | for (const agvVo of data.agvVos) { |
| | | showAgvSprite(curZone, agvVo) |
| | | } |
| | | |
| | | } |
| | | |
| | | const showAgvSprite = (curZone, agvVo) => { |
| | | const { agvNo, code, direction, backpack, battery, ...rest } = agvVo; |
| | | if (!code) { return } |
| | | const codeSprite = querySprite(DEVICE_TYPE.POINT, code); |
| | | if (!codeSprite) { return } |
| | | let agvSprite = querySprite(DEVICE_TYPE.AGV, agvNo); |
| | | if (!agvSprite) { |
| | | agvSprite = generateSprite(DEVICE_TYPE.AGV, generateAgvSpriteTexture(getAgvStatusMode(backpack, battery))); |
| | | initSprite(agvSprite, DEVICE_TYPE.AGV); |
| | | agvSprite.data.no = agvNo; |
| | | agvSprite.position.set(codeSprite.position.x, codeSprite.position.y); |
| | | mapContainer.addChild(agvSprite); |
| | | // viewFeature(shuttle, setCurSPrite); // todo |
| | | } |
| | | } |