|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
@ -1,4 +1,52 @@ |
|||||
|
import arrows from '../arrows/arrows' |
||||
|
|
||||
export const currentBuildingFloorsList = state => { |
export const currentBuildingFloorsList = state => { |
||||
const currentBuilding = state.buildingList.find(building => building.buildingCode === state.currentFloor.buildingCode) |
const currentBuilding = state.buildingList.find(building => building.buildingCode === state.currentFloor.buildingCode) |
||||
return currentBuilding?.floorList ?? [] |
return currentBuilding?.floorList ?? [] |
||||
} |
} |
||||
|
|
||||
|
const getCodeByAngle = angle => |
||||
|
angle < (Math.PI / 8) * 1 || angle > (Math.PI / 8) * 15 |
||||
|
? '8003' |
||||
|
: angle >= (Math.PI / 8) * 1 && angle < (Math.PI / 8) * 3 |
||||
|
? '8002' |
||||
|
: angle >= (Math.PI / 8) * 3 && angle < (Math.PI / 8) * 5 |
||||
|
? '8001' |
||||
|
: angle >= (Math.PI / 8) * 5 && angle < (Math.PI / 8) * 7 |
||||
|
? '8008' |
||||
|
: angle >= (Math.PI / 8) * 7 && angle < (Math.PI / 8) * 9 |
||||
|
? '8007' |
||||
|
: angle >= (Math.PI / 8) * 9 && angle < (Math.PI / 8) * 11 |
||||
|
? '8006' |
||||
|
: angle >= (Math.PI / 8) * 11 && angle < (Math.PI / 8) * 13 |
||||
|
? '8005' |
||||
|
: '8004' |
||||
|
const getDistance = (a, b) => Math.sqrt((b.x - a.x) * (b.x - a.x) + (b.y - a.y) * (b.y - a.y)) |
||||
|
export const currentFloorShopMap = ({ currentFloor: device, shopList, mapData }) => { |
||||
|
if (!mapData || !shopList.length) return {} |
||||
|
device.angle = Number(device.angle) |
||||
|
if (isNaN(device.angle)) device.angle = 0 |
||||
|
const building = mapData[0] |
||||
|
const map = building.buildArr[device.floorOrder].mapData |
||||
|
const nodes = map.path.nodes |
||||
|
const deviceX = nodes[device.location].x |
||||
|
const deviceY = nodes[device.location].y |
||||
|
return shopList |
||||
|
.filter(shop => shop.floor === device.floor) |
||||
|
.reduce((acc, shop) => { |
||||
|
const result = {} |
||||
|
try { |
||||
|
const xaxis = JSON.parse(shop.xaxis).map(Number) |
||||
|
let angle = (Math.atan2(deviceY - xaxis[2], xaxis[0] - deviceX) / Math.PI) * 180 - device.angle |
||||
|
if (angle < 0) angle += 360 |
||||
|
if (angle > 360) angle -= 360 |
||||
|
angle = (angle / 180) * Math.PI |
||||
|
result.distance = Math.ceil(getDistance({ x: deviceX, y: deviceY }, { x: xaxis[0], y: xaxis[2] }) / building.scale) |
||||
|
|
||||
|
result.dir = arrows[getCodeByAngle(angle)] |
||||
|
} catch (error) { |
||||
|
result.dir = arrows[getCodeByAngle(0)] |
||||
|
} |
||||
|
return { ...acc, [shop.shopId]: result } |
||||
|
}, {}) |
||||
|
} |
||||
|
|||||