From 475fceb864b4c5d7fb9f47720b0918ba7c96e08a Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期三, 09 十月 2024 13:19:13 +0800 Subject: [PATCH] # --- zy-acs-flow/src/map/tool.js | 51 +++++++++++++++++++++++++ zy-acs-flow/src/map/player.js | 52 +++++++++++++++++++++++++- zy-acs-flow/src/map/MapPage.jsx | 9 +++- 3 files changed, 107 insertions(+), 5 deletions(-) diff --git a/zy-acs-flow/src/map/MapPage.jsx b/zy-acs-flow/src/map/MapPage.jsx index 8761047..e7dd074 100644 --- a/zy-acs-flow/src/map/MapPage.jsx +++ b/zy-acs-flow/src/map/MapPage.jsx @@ -76,10 +76,13 @@ switch (mode) { case MapMode.OBSERVER_MODE: setDeviceVisible(false); + player.hideGridLines(); break case MapMode.MOVABLE_MODE: + player.showGridLines(); break case MapMode.SETTINGS_MODE: + player.hideGridLines(); setDeviceVisible(false); break default: @@ -101,9 +104,9 @@ sprite.x = mapX; sprite.y = mapY; - // Utils.initSprite(sprite, type); - // mapContainer.addChild(sprite); - // Utils.beMovable(sprite); + Tool.initSprite(sprite, type); + mapContainer.addChild(sprite); + Tool.beMovable(sprite); }; const actions = [ diff --git a/zy-acs-flow/src/map/player.js b/zy-acs-flow/src/map/player.js index 2cb44a1..c657621 100644 --- a/zy-acs-flow/src/map/player.js +++ b/zy-acs-flow/src/map/player.js @@ -11,7 +11,7 @@ globalThis.__PIXI_APP__ = this.app; - this.mapContainer = generateMapContainer('mapContainer'); + this.mapContainer = generatePixiContainer('mapContainer'); const bunny = PIXI.Sprite.from('https://pixijs.com/assets/bunny.png'); bunny.anchor.set(0.5); @@ -21,7 +21,55 @@ this.app.ticker.add((delta) => { bunny.rotation += 0.1 * delta; }); + + // startupTicker(); } + + showGridLines = () => { + this.hideGridLines(); + if (!this.gridLineContainer) { + this.gridLineContainer = generatePixiContainer('gridLineContainer'); + this.app.stage.addChild(this.gridLineContainer); + } + + const spacing = 30; + const lineDefaultAlpha = .1;; + const lineDefaultColor = 0x000000; + for (let i = 0; i < this.app.view.width / spacing; i++) { + const graphics = new PIXI.Graphics(); + graphics.lineStyle(1, lineDefaultColor, lineDefaultAlpha); + graphics.beginFill(lineDefaultColor); + graphics.moveTo(i * spacing, 0); + graphics.lineTo(i * spacing, this.app.view.height); + graphics.endFill(); + this.gridLineContainer.addChild(graphics); + } + + for (let i = 0; i < this.app.view.height / spacing; i++) { + const graphics = new PIXI.Graphics(); + graphics.lineStyle(1, lineDefaultColor, lineDefaultAlpha); + graphics.beginFill(lineDefaultColor); + graphics.moveTo(0, i * spacing); + graphics.lineTo(this.app.view.width, i * spacing); + graphics.endFill(); + + this.gridLineContainer.addChild(graphics); + } + } + + hideGridLines = () => { + if (this.gridLineContainer) { + this.app.stage.removeChild(this.gridLineContainer); + this.gridLineContainer = null; + } + } + + + // startupTicker = () => { + // this.app.ticker.add((delta) => { + // TWEEDLE.Group.shared.update(); + // }); + // } resize(width, height) { this.app.renderer.resize(width, height); @@ -57,7 +105,7 @@ return app; } -const generateMapContainer = (name) => { +const generatePixiContainer = (name) => { const mapContainer = new PIXI.Container(); mapContainer.sortableChildren = true; mapContainer.name = name; diff --git a/zy-acs-flow/src/map/tool.js b/zy-acs-flow/src/map/tool.js index 8c2376b..63bf3cd 100644 --- a/zy-acs-flow/src/map/tool.js +++ b/zy-acs-flow/src/map/tool.js @@ -62,6 +62,57 @@ return sprite; } +export const initSprite = (sprite, type) => { + sprite.anchor.set(0.5); + sprite.cursor = 'pointer'; + sprite.eventMode = 'static'; + sprite.data = { + type: type, + uuid: generateID() + }; +} + +export const beMovable = (sprite) => { + sprite.off('pointerup'); + sprite.off('pointermove'); + sprite.off('pointerdown'); + sprite.off('click'); + + sprite.on("pointerdown", onDragStart); + + let dragTarget; + function onDragStart(event) { + if (event.button === 0) { + dragTarget = event.currentTarget; + mapContainer.parent.off('pointermove'); + mapContainer.parent.on('pointermove', onDragMove, dragTarget); + + mapContainer.parent.off('pointerup'); + mapContainer.parent.on('pointerup', onDragEnd.bind(mapContainer)); + } + } + + function onDragMove(event) { + if (this) { + this.parent.toLocal(event.global, null, this.position); + } + } + + function onDragEnd() { + if (dragTarget) { + this.parent.off('pointermove'); + this.parent.off('pointerup'); + dragTarget.alpha = 1; + dragTarget = null; + } + } + +} + +export const generateID = () => { + return Date.now().toString(36) + Math.random().toString(36).substring(2); +} + export const patchRaLayout = (param) => { const parentElement = document.getElementById('main-content'); if (parentElement && parentElement.classList.contains('RaLayout-content')) { -- Gitblit v1.9.1