修改点云和地图
This commit is contained in:
@@ -14,7 +14,6 @@
|
||||
"element-ui": "^2.15.14",
|
||||
"jsencrypt": "^3.3.2",
|
||||
"lodash": "^4.17.21",
|
||||
"pixi.js": "^8.12.0",
|
||||
"simple-keyboard": "^3.8.72",
|
||||
"simple-keyboard-layouts": "^3.4.114",
|
||||
"three": "^0.179.1",
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no">
|
||||
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
|
||||
<!-- <title><%= htmlWebpackPlugin.options.title %></title> -->
|
||||
<title>APT</title>
|
||||
|
||||
@@ -123,6 +123,34 @@ export default {
|
||||
if (this.scale > 0.02) {
|
||||
this.zoom(-8) // 每次缩小8%
|
||||
}
|
||||
},
|
||||
centerToCar() {
|
||||
// 1. 基础数据校验(避免报错)
|
||||
if (!this.mapData || !this.carPosition?.x || !this.carPosition?.y || !this.canvas) {
|
||||
this.$message.warning('无法定位:地图或小车位置数据缺失');
|
||||
return;
|
||||
}
|
||||
|
||||
// 2. 步骤1:计算小车在「原始画布」的坐标(未缩放)
|
||||
const rawCarX = (this.carPosition.x - this.mapData.x) / this.mapData.resolution;
|
||||
const rawCarY = this.mapData.height - (this.carPosition.y - this.mapData.y) / this.mapData.resolution;
|
||||
|
||||
// 3. 步骤2:计算小车在「缩放后画布」的坐标
|
||||
const scaledCarX = rawCarX * this.scale;
|
||||
const scaledCarY = rawCarY * this.scale;
|
||||
|
||||
// 4. 步骤3:计算可视区域中心坐标(画布容器的中心)
|
||||
const viewCenterX = this.canvas.offsetWidth * this.scale / 2;
|
||||
const viewCenterY = this.canvas.offsetHeight * this.scale / 2;
|
||||
|
||||
// 5. 步骤4:计算目标偏移量(核心修正)
|
||||
let targetOffsetX = viewCenterX - scaledCarX;
|
||||
let targetOffsetY = viewCenterY - scaledCarY;
|
||||
|
||||
// 7. 应用最终偏移量并刷新画布
|
||||
this.offsetX = targetOffsetX;
|
||||
this.offsetY = targetOffsetY;
|
||||
this.applyTransform(); // 立即更新CSS变换
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
4804
src/config/point2.js
Normal file
4804
src/config/point2.js
Normal file
File diff suppressed because it is too large
Load Diff
BIN
src/images/new/apt_map_1.png
Normal file
BIN
src/images/new/apt_map_1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 85 KiB |
@@ -14,6 +14,7 @@ import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
|
||||
import { mapGetters } from 'vuex'
|
||||
// import { points } from '../../config/point.js'
|
||||
// import { points1 } from '../../config/point1.js'
|
||||
// import { points2 } from '../../config/point2.js'
|
||||
export default {
|
||||
/* eslint-disable */
|
||||
data () {
|
||||
@@ -361,6 +362,10 @@ export default {
|
||||
// const arr = points1.data
|
||||
// this.updatePointCloud(arr);
|
||||
// }, 5000)
|
||||
// setTimeout(() => {
|
||||
// const arr = points2.data
|
||||
// this.updatePointCloud(arr);
|
||||
// }, 10000)
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -561,5 +566,4 @@ export default {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
</style>
|
||||
../../config/point copy.js
|
||||
</style>
|
||||
@@ -14,11 +14,19 @@
|
||||
@mouseup="handleMouseUp"
|
||||
@mouseleave="handleMouseUp"
|
||||
></canvas>
|
||||
<!-- <el-row type="flex" justify="end" class="map_tools">
|
||||
<el-button type="primary" :disabled="zoomPercentage === 2" icon="el-icon-minus" size="mini" style="border: 0;border-radius: 0;" @click="zoomOut"></el-button>
|
||||
<el-row type="flex" justify="end" class="map_tools">
|
||||
<el-button
|
||||
type="primary"
|
||||
:disabled="!carPosition?.x || !carPosition?.y"
|
||||
icon="el-icon-location"
|
||||
size="mini"
|
||||
style="border-left: 0;border-top: 0;border-bottom: 0;border-radius: 0;"
|
||||
@click="centerToCar"
|
||||
></el-button>
|
||||
<el-button type="primary" :disabled="zoomPercentage === 2" icon="el-icon-minus" size="mini" style="border: 0;border-radius: 0;margin-left: 0" @click="zoomOut"></el-button>
|
||||
<div class="zoom_data">{{ zoomPercentage }}%</div>
|
||||
<el-button type="primary" :disabled="zoomPercentage === 200" icon="el-icon-plus" size="mini" style="border: 0;border-radius: 0;" @click="zoomIn"></el-button>
|
||||
</el-row> -->
|
||||
</el-row>
|
||||
</div>
|
||||
<div
|
||||
v-if="showPopup"
|
||||
@@ -120,13 +128,31 @@ export default {
|
||||
mounted () {
|
||||
this.preloadMarkerImage()
|
||||
this.preloadCarImage()
|
||||
this.loadAllDataInParallel()
|
||||
this.loadAllDataInParallel().then(() => {
|
||||
this.waitForResourcesReady().then(() => {
|
||||
this.centerToCar();
|
||||
});
|
||||
});
|
||||
document.addEventListener('click', this.handleDocumentClick)
|
||||
},
|
||||
beforeDestroy () {
|
||||
document.removeEventListener('click', this.handleDocumentClick)
|
||||
},
|
||||
methods: {
|
||||
waitForResourcesReady() {
|
||||
return new Promise((resolve) => {
|
||||
const checkReady = () => {
|
||||
const isImagesReady = this.imageLoadStatus.map && this.imageLoadStatus.marker && this.imageLoadStatus.car;
|
||||
const isCanvasReady = this.canvas && this.ctx;
|
||||
if (isImagesReady && isCanvasReady) {
|
||||
resolve();
|
||||
} else {
|
||||
setTimeout(checkReady, 100);
|
||||
}
|
||||
};
|
||||
checkReady();
|
||||
});
|
||||
},
|
||||
preloadCarImage () {
|
||||
if (this.cachedImages.car) {
|
||||
this.imageLoadStatus.car = true
|
||||
@@ -210,9 +236,11 @@ export default {
|
||||
this.initCanvas()
|
||||
await this.loadMapImage()
|
||||
this.loading.close()
|
||||
return true
|
||||
} catch (e) {
|
||||
this.$message.error(`数据加载失败: ${e.message || '未知错误'}`)
|
||||
this.loading.close()
|
||||
return false
|
||||
}
|
||||
},
|
||||
async _getMapInfoByCode () {
|
||||
@@ -372,7 +400,7 @@ export default {
|
||||
20,
|
||||
20
|
||||
)
|
||||
// this.ctx.restore()
|
||||
this.ctx.restore()
|
||||
},
|
||||
handleCanvasClick (event) {
|
||||
const rect = this.canvas.getBoundingClientRect()
|
||||
|
||||
@@ -1,295 +0,0 @@
|
||||
<template>
|
||||
<div class="point-cloud-map">
|
||||
<div ref="canvasContainer" class="canvas-container"></div>
|
||||
<div v-if="isLoading" class="loading-indicator">
|
||||
<i class="fa fa-circle-o-notch fa-spin"></i> 加载中...
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { Application, ParticleContainer, Sprite, Graphics, Texture } from 'pixi.js'
|
||||
import { mapGetters } from 'vuex'
|
||||
import { points } from '../../config/point.js'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
// PixiJS核心对象
|
||||
app: null,
|
||||
pointContainer: null,
|
||||
carSprite: null,
|
||||
|
||||
// 点云数据
|
||||
allPoints: [],
|
||||
pointScale: 1.0,
|
||||
|
||||
// 小车资源
|
||||
vehicleImage: require('../../images/new/agv.png'),
|
||||
carTexture: null,
|
||||
|
||||
// WebSocket
|
||||
socket: null,
|
||||
isLoading: true,
|
||||
|
||||
// 性能控制
|
||||
lastUpdateTime: 0,
|
||||
updateInterval: 800,
|
||||
isDestroyed: false
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['serverUrl', 'userRole', 'carPosition']),
|
||||
},
|
||||
watch: {
|
||||
carPosition: {
|
||||
handler(newVal) {
|
||||
this.updateCarPosition(newVal)
|
||||
},
|
||||
deep: true
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
// 使用$nextTick确保DOM完全渲染后再初始化
|
||||
this.$nextTick(() => {
|
||||
this.initPixi()
|
||||
// this.initWebSocket()
|
||||
this.init()
|
||||
window.addEventListener('resize', this.handleResize)
|
||||
setTimeout(() => {
|
||||
this.isLoading = false
|
||||
}, 1000)
|
||||
})
|
||||
},
|
||||
beforeDestroy() {
|
||||
this.isDestroyed = true
|
||||
|
||||
// 清理WebSocket
|
||||
if (this.socket) {
|
||||
this.socket.close()
|
||||
this.socket = null
|
||||
}
|
||||
|
||||
// 销毁Pixi应用
|
||||
if (this.app) {
|
||||
this.app.destroy()
|
||||
const container = this.$refs.canvasContainer
|
||||
if (container && container.children.length > 0) {
|
||||
container.removeChild(container.children[0])
|
||||
}
|
||||
this.app = null
|
||||
}
|
||||
|
||||
// 清理资源
|
||||
if (this.carTexture) {
|
||||
this.carTexture.destroy()
|
||||
this.carTexture = null
|
||||
}
|
||||
|
||||
window.removeEventListener('resize', this.handleResize)
|
||||
this.allPoints = []
|
||||
},
|
||||
methods: {
|
||||
async initPixi() {
|
||||
// 确保容器元素存在
|
||||
const container = this.$refs.canvasContainer
|
||||
if (!container) {
|
||||
console.error('Canvas容器未找到')
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
// PixiJS v8+ 使用 Application.init() 替代 new Application()
|
||||
this.app = await Application.init({
|
||||
width: container.clientWidth,
|
||||
height: container.clientHeight,
|
||||
backgroundColor: 0x0c0c0c,
|
||||
antialias: true,
|
||||
resolution: window.devicePixelRatio || 1,
|
||||
autoDensity: true,
|
||||
})
|
||||
|
||||
// PixiJS v8+ 使用 canvas 属性替代 view 属性
|
||||
if (this.app.canvas) {
|
||||
container.appendChild(this.app.canvas)
|
||||
} else {
|
||||
console.error('PixiJS未能创建有效的canvas')
|
||||
return
|
||||
}
|
||||
|
||||
// 创建点容器 - 使用ParticleContainer提高性能
|
||||
this.pointContainer = new ParticleContainer(10000, {
|
||||
position: true,
|
||||
rotation: true,
|
||||
tint: true,
|
||||
alpha: true
|
||||
})
|
||||
this.app.stage.addChild(this.pointContainer)
|
||||
|
||||
// 加载小车纹理
|
||||
this.carTexture = await Texture.fromURL(this.vehicleImage)
|
||||
this.initCar()
|
||||
} catch (error) {
|
||||
console.error('Pixi初始化失败:', error)
|
||||
}
|
||||
},
|
||||
|
||||
initCar() {
|
||||
if (!this.carTexture) {
|
||||
console.error('小车纹理未加载')
|
||||
return
|
||||
}
|
||||
|
||||
this.carSprite = new Sprite(this.carTexture)
|
||||
this.carSprite.anchor.set(0.5) // 设置锚点为中心
|
||||
this.carSprite.width = 30
|
||||
this.carSprite.height = 30
|
||||
this.app.stage.addChild(this.carSprite)
|
||||
|
||||
if (this.carPosition) {
|
||||
this.updateCarPosition(this.carPosition)
|
||||
}
|
||||
},
|
||||
|
||||
updateCarPosition(position) {
|
||||
if (!this.carSprite || !position) return
|
||||
|
||||
this.carSprite.x = position.x * this.pointScale
|
||||
this.carSprite.y = position.y * this.pointScale
|
||||
this.carSprite.rotation = position.angle * (Math.PI / 180) // 转换为弧度
|
||||
},
|
||||
|
||||
initWebSocket() {
|
||||
const wsHost = this.serverUrl.replace(/^https?:\/\//, '')
|
||||
this.socket = new WebSocket(`ws://${wsHost}/webSocket/PointCloudData/${this.userRole}`)
|
||||
|
||||
this.socket.onopen = () => {
|
||||
console.log('WebSocket连接已建立')
|
||||
this.isLoading = false
|
||||
}
|
||||
|
||||
this.socket.onmessage = (event) => {
|
||||
if (this.isDestroyed) return
|
||||
|
||||
try {
|
||||
const now = Date.now()
|
||||
if (now - this.lastUpdateTime < this.updateInterval) return
|
||||
this.lastUpdateTime = now
|
||||
|
||||
const pointData = JSON.parse(event.data)
|
||||
this.updatePointCloud(pointData.data)
|
||||
} catch (error) {
|
||||
console.error('解析点云数据失败:', error)
|
||||
}
|
||||
}
|
||||
|
||||
this.socket.onclose = (event) => {
|
||||
console.log('WebSocket连接已关闭,代码:', event.code)
|
||||
this.isLoading = true
|
||||
setTimeout(() => this.initWebSocket(), 3000)
|
||||
}
|
||||
|
||||
this.socket.onerror = (error) => {
|
||||
console.error('WebSocket错误:', error)
|
||||
this.isLoading = true
|
||||
}
|
||||
},
|
||||
|
||||
updatePointCloud(points) {
|
||||
if (!Array.isArray(points) || points.length === 0) return
|
||||
|
||||
// 去重逻辑
|
||||
const existingPoints = {}
|
||||
this.allPoints.forEach(point => {
|
||||
existingPoints[`${point.x},${point.y}`] = true
|
||||
})
|
||||
|
||||
const newUniquePoints = points.filter(point => {
|
||||
const key = `${point.x},${point.y}`
|
||||
if (!existingPoints[key]) {
|
||||
existingPoints[key] = true
|
||||
return true
|
||||
}
|
||||
return false
|
||||
})
|
||||
|
||||
this.allPoints = [...this.allPoints, ...newUniquePoints]
|
||||
|
||||
// 限制总点数
|
||||
const maxPoints = 5000
|
||||
if (this.allPoints.length > maxPoints) {
|
||||
this.allPoints = this.allPoints.slice(-maxPoints)
|
||||
}
|
||||
|
||||
// 清空容器
|
||||
this.pointContainer.removeChildren()
|
||||
|
||||
// 添加新点 - 使用Graphics批量绘制
|
||||
const graphics = new Graphics()
|
||||
graphics.beginFill(0xFFFFFF, 0.8)
|
||||
|
||||
this.allPoints.forEach(point => {
|
||||
graphics.drawCircle(
|
||||
point.x * this.pointScale,
|
||||
point.y * this.pointScale,
|
||||
1
|
||||
)
|
||||
})
|
||||
|
||||
graphics.endFill()
|
||||
this.pointContainer.addChild(graphics)
|
||||
},
|
||||
|
||||
handleResize() {
|
||||
if (!this.app || !this.$refs.canvasContainer) return
|
||||
|
||||
const container = this.$refs.canvasContainer
|
||||
this.app.renderer.resize(
|
||||
container.clientWidth,
|
||||
container.clientHeight
|
||||
)
|
||||
},
|
||||
|
||||
init () {
|
||||
this.isLoading = false
|
||||
const pointData = points.data
|
||||
this.updatePointCloud(pointData);
|
||||
setTimeout(() => {
|
||||
const arr = [{x: 2, y: 2}, {x: 4, y: 4}]
|
||||
this.updatePointCloud(arr);
|
||||
}, 2000)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
.point-cloud-map
|
||||
position relative
|
||||
width 100%
|
||||
height calc(100% - 1rem)
|
||||
margin .14rem 0
|
||||
background-color rgba(4, 33, 58, 70%)
|
||||
box-shadow inset 1px 1px 7px 2px #4d9bcd
|
||||
overflow hidden
|
||||
|
||||
.canvas-container
|
||||
width 100%
|
||||
height 100%
|
||||
position relative
|
||||
z-index 0
|
||||
|
||||
.loading-indicator
|
||||
position absolute
|
||||
top 50%
|
||||
left 50%
|
||||
transform translate(-50%, -50%)
|
||||
background-color rgba(255, 255, 255, 0.8)
|
||||
padding .01rem .02rem
|
||||
border-radius 4px
|
||||
box-shadow 0 2px 10px rgba(0, 0, 0, 0.1)
|
||||
font-size .12rem
|
||||
color #333
|
||||
z-index 100
|
||||
display flex
|
||||
align-items center
|
||||
</style>
|
||||
73
yarn.lock
73
yarn.lock
@@ -1019,11 +1019,6 @@
|
||||
"@nodelib/fs.scandir" "2.1.5"
|
||||
fastq "^1.6.0"
|
||||
|
||||
"@pixi/colord@^2.9.6":
|
||||
version "2.9.6"
|
||||
resolved "https://registry.npmmirror.com/@pixi/colord/-/colord-2.9.6.tgz#7e4e7851480da6fd3cef4e331f008d60be7e1204"
|
||||
integrity sha512-nezytU2pw587fQstUu1AsJZDVEynjskwOL+kibwcdxsMBFqPsFFNA7xl0ii/gXuDi6M0xj3mfRJj8pBSc2jCfA==
|
||||
|
||||
"@pkgjs/parseargs@^0.11.0":
|
||||
version "0.11.0"
|
||||
resolved "https://registry.npmmirror.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
|
||||
@@ -1101,16 +1096,6 @@
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/css-font-loading-module@^0.0.12":
|
||||
version "0.0.12"
|
||||
resolved "https://registry.npmmirror.com/@types/css-font-loading-module/-/css-font-loading-module-0.0.12.tgz#65494833928823f998fbe8e86312821875d80db5"
|
||||
integrity sha512-x2tZZYkSxXqWvTDgveSynfjq/T2HyiZHXb00j/+gy19yp70PHCizM48XFdjBCWH7eHBD0R5i/pw9yMBP/BH5uA==
|
||||
|
||||
"@types/earcut@^3.0.0":
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmmirror.com/@types/earcut/-/earcut-3.0.0.tgz#c21ab8372c47f8af1bec63cb36eecb6917b6c5b6"
|
||||
integrity sha512-k/9fOUGO39yd2sCjrbAJvGDEQvRwRnQIZlBz43roGwUZo5SHAmyVvSFyaVVZkicRVCaDXPKlbxrUcBuJoSWunQ==
|
||||
|
||||
"@types/eslint-scope@^3.7.7":
|
||||
version "3.7.7"
|
||||
resolved "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5"
|
||||
@@ -1751,16 +1736,6 @@
|
||||
"@webassemblyjs/ast" "1.14.1"
|
||||
"@xtuc/long" "4.2.2"
|
||||
|
||||
"@webgpu/types@^0.1.40":
|
||||
version "0.1.64"
|
||||
resolved "https://registry.npmmirror.com/@webgpu/types/-/types-0.1.64.tgz#62c5f9d345d4d270fcf3ecbb111c3b98dcc1aca3"
|
||||
integrity sha512-84kRIAGV46LJTlJZWxShiOrNL30A+9KokD7RB3dRCIqODFjodS5tCD5yyiZ8kIReGVZSDfA3XkkwyyOIF6K62A==
|
||||
|
||||
"@xmldom/xmldom@^0.8.10":
|
||||
version "0.8.10"
|
||||
resolved "https://registry.npmmirror.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99"
|
||||
integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==
|
||||
|
||||
"@xtuc/ieee754@^1.2.0":
|
||||
version "1.2.0"
|
||||
resolved "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
|
||||
@@ -2851,11 +2826,6 @@ duplexer@^0.1.2:
|
||||
resolved "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
|
||||
integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
|
||||
|
||||
earcut@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.npmmirror.com/earcut/-/earcut-3.0.2.tgz#d478a29aaf99acf418151493048aa197d0512248"
|
||||
integrity sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ==
|
||||
|
||||
eastasianwidth@^0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
|
||||
@@ -3198,11 +3168,6 @@ eventemitter3@^4.0.0:
|
||||
resolved "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
|
||||
integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
|
||||
|
||||
eventemitter3@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4"
|
||||
integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==
|
||||
|
||||
events@^3.2.0:
|
||||
version "3.3.0"
|
||||
resolved "https://registry.npmmirror.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
|
||||
@@ -3526,13 +3491,6 @@ get-stream@^6.0.0:
|
||||
resolved "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
|
||||
integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
|
||||
|
||||
gifuct-js@^2.1.2:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.npmmirror.com/gifuct-js/-/gifuct-js-2.1.2.tgz#06152437ba30ec914db8398bd838bd0fbc8a6ecd"
|
||||
integrity sha512-rI2asw77u0mGgwhV3qA+OEgYqaDn5UNqgs+Bx0FGwSpuqfYn+Ir6RQY5ENNQ8SbIiG/m5gVa7CD5RriO4f4Lsg==
|
||||
dependencies:
|
||||
js-binary-schema-parser "^2.0.3"
|
||||
|
||||
glob-parent@^5.1.2, glob-parent@~5.1.2:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
|
||||
@@ -3975,11 +3933,6 @@ isexe@^2.0.0:
|
||||
resolved "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||
integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
|
||||
|
||||
ismobilejs@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.npmmirror.com/ismobilejs/-/ismobilejs-1.1.1.tgz#c56ca0ae8e52b24ca0f22ba5ef3215a2ddbbaa0e"
|
||||
integrity sha512-VaFW53yt8QO61k2WJui0dHf4SlL8lxBofUuUmwBo0ljPk0Drz2TiuDW4jo3wDcv41qy/SxrJ+VAzJ/qYqsmzRw==
|
||||
|
||||
isobject@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
|
||||
@@ -4028,11 +3981,6 @@ joi@^17.4.0:
|
||||
"@sideway/formula" "^3.0.1"
|
||||
"@sideway/pinpoint" "^2.0.0"
|
||||
|
||||
js-binary-schema-parser@^2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.npmmirror.com/js-binary-schema-parser/-/js-binary-schema-parser-2.0.3.tgz#3d7848748e8586e63b34e8911b643f59cfb6396e"
|
||||
integrity sha512-xezGJmOb4lk/M1ZZLTR/jaBHQ4gG/lqQnJqdIv4721DMggsa1bDVlHXNeHYogaIEHD9vCRv0fcL4hMA+Coarkg==
|
||||
|
||||
js-message@1.0.7:
|
||||
version "1.0.7"
|
||||
resolved "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz#fbddd053c7a47021871bb8b2c95397cc17c20e47"
|
||||
@@ -4756,11 +4704,6 @@ parse-json@^5.0.0:
|
||||
json-parse-even-better-errors "^2.3.0"
|
||||
lines-and-columns "^1.1.6"
|
||||
|
||||
parse-svg-path@^0.1.2:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.npmmirror.com/parse-svg-path/-/parse-svg-path-0.1.2.tgz#7a7ec0d1eb06fa5325c7d3e009b859a09b5d49eb"
|
||||
integrity sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==
|
||||
|
||||
parse5-htmlparser2-tree-adapter@^6.0.0:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6"
|
||||
@@ -4849,22 +4792,6 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
|
||||
resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
|
||||
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
|
||||
|
||||
pixi.js@^8.12.0:
|
||||
version "8.12.0"
|
||||
resolved "https://registry.npmmirror.com/pixi.js/-/pixi.js-8.12.0.tgz#6079f953de83491ebc021f8a0ead0d167cf24191"
|
||||
integrity sha512-or7vrH7WajLevu/JnGMdD80JaSpTlXfjwCLtzhg2BL60LWPf1pF0w08Qleiqr1Saj012gevguM//+6HzzVlnfA==
|
||||
dependencies:
|
||||
"@pixi/colord" "^2.9.6"
|
||||
"@types/css-font-loading-module" "^0.0.12"
|
||||
"@types/earcut" "^3.0.0"
|
||||
"@webgpu/types" "^0.1.40"
|
||||
"@xmldom/xmldom" "^0.8.10"
|
||||
earcut "^3.0.2"
|
||||
eventemitter3 "^5.0.1"
|
||||
gifuct-js "^2.1.2"
|
||||
ismobilejs "^1.1.1"
|
||||
parse-svg-path "^0.1.2"
|
||||
|
||||
pkg-dir@^4.1.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
|
||||
|
||||
Reference in New Issue
Block a user