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