| | |
| | | } |
| | | |
| | | activateMapScale = () => { |
| | | this.scale = 1; // 缩放 |
| | | this.scale = 1; |
| | | this.app.view.addEventListener('wheel', (event) => { |
| | | event.preventDefault(); |
| | | if (this.scale !== this.mapContainer.scale.x) { |
| | | this.scale = this.mapContainer.scale.x; |
| | | } |
| | | |
| | | const delta = Math.sign(event.deltaY); |
| | | |
| | | if (delta === 1) { |
| | | this.scale *= 0.9; |
| | | } else if (delta === -1) { |
| | | this.scale *= 1.1; |
| | | } |
| | | const mousePosition = new PIXI.Point(); |
| | | this.app.renderer.plugins.interaction.mapPositionToPoint(mousePosition, event.clientX, event.clientY); |
| | | |
| | | const diffPositionX = mousePosition.x - this.mapContainer.x; |
| | | const diffPositionY = mousePosition.y - this.mapContainer.y; |
| | | |
| | | const newScale = this.scale * (delta === 1 ? 0.9 : 1.1); |
| | | const scaleFactor = newScale / this.scale; |
| | | |
| | | this.mapContainer.x = mousePosition.x - diffPositionX * scaleFactor; |
| | | this.mapContainer.y = mousePosition.y - diffPositionY * scaleFactor; |
| | | |
| | | this.scale = newScale; |
| | | |
| | | this.mapContainer.scale.set(this.scale); |
| | | |
| | | this.mapContainer.children.forEach(child => { |
| | | // child.scale.set(1 / this.scale); // 防止图标变小 |
| | | }) |
| | | }); |
| | | }); |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | showGridlines = () => { |
| | | this.hideGridlines(); |
| | | if (!this.gridLineContainer) { |
| | | this.gridLineContainer = generatePixiContainer('gridLineContainer'); |
| | | this.app.stage.addChild(this.gridLineContainer); |
| | | } |
| | | |
| | | const inte = 30; |
| | | const lineDefaultAlpha = .5;; |
| | | const lineDefaultAlpha = .1;; |
| | | const lineDefaultColor = 0x000000; |
| | | for (let i = 0; i < this.app.view.width / inte; i++) { |
| | | const graphics = new PIXI.Graphics(); |
| | | graphics.lineStyle(.3, lineDefaultColor, lineDefaultAlpha); |
| | | graphics.lineStyle(1, lineDefaultColor, lineDefaultAlpha); |
| | | graphics.beginFill(lineDefaultColor); |
| | | graphics.moveTo(i * inte, 0); |
| | | graphics.lineTo(i * inte, this.app.view.height); |
| | |
| | | |
| | | for (let i = 0; i < this.app.view.height / inte; i++) { |
| | | const graphics = new PIXI.Graphics(); |
| | | graphics.lineStyle(.3, lineDefaultColor, lineDefaultAlpha); |
| | | graphics.lineStyle(1, lineDefaultColor, lineDefaultAlpha); |
| | | graphics.beginFill(lineDefaultColor); |
| | | graphics.moveTo(0, i * inte); |
| | | graphics.lineTo(this.app.view.width, i * inte); |
| | |
| | | warpSpeed = warpSpeed > 0 ? 0 : 1; |
| | | }, 5000); |
| | | |
| | | |
| | | this.starryTicker = (delta) => { |
| | | speed += (warpSpeed - speed) / 20; |
| | | cameraZ += delta * 10 * (speed + baseSpeed); |
| | |
| | | } |
| | | } |
| | | |
| | | adaptScreen = () => { |
| | | if (!this.mapContainer || !this.app) { |
| | | return; |
| | | } |
| | | |
| | | this.mapContainer.scale.set(1); |
| | | this.mapContainer.position.set(0, 0); |
| | | if (this.mapContainer.children.length === 0) { |
| | | return; |
| | | } |
| | | |
| | | let minX, maxX, minY, maxY; |
| | | for (let sprite of this.mapContainer.children) { |
| | | if (sprite?.data?.uuid) { |
| | | let bounds = sprite.getBounds(); |
| | | minX = minX !== undefined ? Math.min(minX, bounds.x) : bounds.x; |
| | | minY = minY !== undefined ? Math.min(minY, bounds.y) : bounds.y; |
| | | maxX = maxX !== undefined ? Math.max(maxX, bounds.x + bounds.width) : bounds.x + bounds.width; |
| | | maxY = maxY !== undefined ? Math.max(maxY, bounds.y + bounds.height) : bounds.y + bounds.height; |
| | | } |
| | | } |
| | | |
| | | this.scale = Math.min( |
| | | this.app.renderer.width / (maxX - minX) * 0.8, |
| | | this.app.renderer.height / (maxY - minY) * 0.8 |
| | | ); |
| | | |
| | | let centerPoint = { |
| | | x: (minX + maxX) / 2 * this.mapContainer.scale.x, |
| | | y: (minY + maxY) / 2 * this.mapContainer.scale.y |
| | | }; |
| | | |
| | | new TWEEDLE.Tween(this.mapContainer.scale).easing(TWEEDLE.Easing.Quadratic.Out) |
| | | .to({ |
| | | x: this.scale, |
| | | y: this.scale |
| | | }, 200).start(); |
| | | |
| | | new TWEEDLE.Tween(this.mapContainer.position).easing(TWEEDLE.Easing.Quadratic.Out) |
| | | .to({ |
| | | x: this.app.renderer.width / 2 - centerPoint.x * this.scale, |
| | | y: this.app.renderer.height / 2 - centerPoint.y * this.scale |
| | | }, 200).start(); |
| | | } |
| | | |
| | | updateDidClickSprite = (value) => { |
| | | this.didClickSprite = value; |
| | | } |