甘艺伟 3 ngày trước cách đây
mục cha
commit
89e6501d7a

+ 3 - 0
assets/bundle/gridMap/UECell.prefab

@@ -491,6 +491,9 @@
     "sp_quality": {
       "__id__": 5
     },
+    "node_lock": {
+      "__id__": 11
+    },
     "_id": ""
   },
   {

+ 21 - 0
assets/script/data/model/GridMap/GridMapModel.ts

@@ -149,6 +149,27 @@ export default class GridMapModel extends GridMapModelData {
         return cc.v2(row - 1, col - 1);
     }
 
+    /** 根据索引获取实际像素坐标 */
+    public GetPosByIdx(idx: number): cc.Vec3 {
+        let vec = this.TranIdxToPos(idx);
+        const startX = -(GridConstant.ROW * GridConstant.CELL_WIDTH) / 2;
+        const startY = (GridConstant.COL * GridConstant.CELL_WIDTH) / 2;
+        return cc.v3(
+            startX + vec.x * GridConstant.CELL_WIDTH + GridConstant.CELL_WIDTH / 2,
+            startY - vec.y * GridConstant.CELL_WIDTH - GridConstant.CELL_WIDTH / 2
+        )
+    }
+
+    /** 根据xy获取实际像素坐标 */
+    public GetPosByVec(i: number, j: number): cc.Vec3 {
+        const startX = -(GridConstant.ROW * GridConstant.CELL_WIDTH) / 2;
+        const startY = (GridConstant.COL * GridConstant.CELL_WIDTH) / 2;
+        return cc.v3(
+            startX + j * GridConstant.CELL_WIDTH + GridConstant.CELL_WIDTH / 2,
+            startY - i * GridConstant.CELL_WIDTH - GridConstant.CELL_WIDTH / 2
+        )
+    }
+
 
     /** 检测目标格子是否可以放置&合成&交换物品 */
     public CellCanPut(fromCell: UECell, toCell: UECell): boolean {

+ 7 - 0
assets/script/logic/gridMap/UECell.ts

@@ -21,12 +21,15 @@ export default class UECell extends UEBase {
     private node_select: cc.Node = null!;
     @property(ResSprite)
     private sp_quality: ResSprite = null;
+    @property(cc.Node)
+    private node_lock: cc.Node = null;
 
     cellData: I_CellData = null!;
     Init(cellData: I_CellData) {
         this.cellData = cellData;
         this.node.zIndex = cellData.zIndex;
         this.SetQuality();
+        this.SetLock();
     }
 
     SetCube(cube: UECube) {
@@ -44,6 +47,10 @@ export default class UECell extends UEBase {
         }
     }
 
+    SetLock() {
+        this.node_lock.active = this.cellData.unlock == HcUnlock.off;
+    }
+
     GetZIndex() {
         return this.cellData.zIndex;
     }

+ 3 - 5
assets/script/logic/gridMap/UECube.ts

@@ -30,13 +30,11 @@ export default class UECube extends UEBase {
     private lbt_key: cc.Label = null!;
     @property(ResSprite)
     private sp_item: ResSprite = null!;
-    originalPos: cc.Vec3 = cc.Vec3.ZERO;
     cubeData: I_CubeData = null!;
     quality: number = 0;
     Init(cubeData: I_CubeData) {
         this.cubeData = cubeData;
         this.SetZIndex(cubeData.zIndex);
-        this.originalPos = cc.v3(this.node.x, this.node.y);
         if (cubeData.type == HcType.emitter) {
             let mergePropCfg = Gamecfg.emitterInfo.getItem(cubeData.id.toString());
             this.sp_item.setSpriteFrame('gridMap', `mergeProp/${mergePropCfg.icon}`);
@@ -104,16 +102,17 @@ export default class UECube extends UEBase {
 
     /** 回到原来位置 */
     BackToOriginalPos(needMove: boolean) {
+        let originalPos = GameDataCenter.gridMap.GetPosByIdx(this.cubeData.zIndex);
         if (needMove) {
             cc.tween(this.node)
-                .to(0.15, { position: this.originalPos })
+                .to(0.15, { position: originalPos })
                 .call(() => {
                     this.EndDrag();
                     this.PlayJellyAnim();
                 })
                 .start();
         } else {
-            this.itemNode.setPosition(this.originalPos.clone());
+            this.itemNode.setPosition(originalPos.clone());
             this.EndDrag();
             this.PlayJellyAnim();
         }
@@ -148,7 +147,6 @@ export default class UECube extends UEBase {
                 this.PlayJellyAnim();
             })
             .start();
-        this.originalPos = newPos.clone();
     }
 
     private UpdateItemDisplay(): void {

+ 4 - 12
assets/script/logic/gridMap/UEGridMap.ts

@@ -112,15 +112,7 @@ export default class UEGridMap extends UEBase {
 
     }
 
-    /** 根据索引获取实际像素坐标 */
-    private GetPosByIdx(i: number, j: number): cc.Vec3 {
-        const startX = -(GridConstant.ROW * GridConstant.CELL_WIDTH) / 2;
-        const startY = (GridConstant.COL * GridConstant.CELL_WIDTH) / 2;
-        return cc.v3(
-            startX + j * GridConstant.CELL_WIDTH + GridConstant.CELL_WIDTH / 2,
-            startY - i * GridConstant.CELL_WIDTH - GridConstant.CELL_WIDTH / 2
-        )
-    }
+
 
     /** 创建格子 */
     private CreateCell(i: number, j: number) {
@@ -128,7 +120,7 @@ export default class UEGridMap extends UEBase {
         this.cellLayer.addChild(cell.node);
         cell.node.width = GridConstant.CELL_WIDTH;
         cell.node.height = GridConstant.CELL_WIDTH;
-        let pos = this.GetPosByIdx(i, j);
+        let pos = GameDataCenter.gridMap.GetPosByVec(i, j);
         cell.node.setPosition(pos);
         return cell;
     }
@@ -139,7 +131,7 @@ export default class UEGridMap extends UEBase {
         this.cubeLayer.addChild(cube.node);
         cube.node.width = GridConstant.CELL_WIDTH;
         cube.node.height = GridConstant.CELL_WIDTH;
-        let pos = this.GetPosByIdx(i, j);
+        let pos = GameDataCenter.gridMap.GetPosByVec(i, j);
         cube.node.setPosition(pos);
         return cube;
     }
@@ -285,7 +277,7 @@ export default class UEGridMap extends UEBase {
 
         // 计算起点和终点
         const startWorldPos = mergeCube.node.getPosition();
-        const endWorldPos = this.GetPosByIdx(targetPos.y, targetPos.x);
+        const endWorldPos = GameDataCenter.gridMap.GetPosByVec(targetPos.y, targetPos.x);
 
         // 计算方向向量和总距离
         const moveVec = cc.v2(endWorldPos.x - startWorldPos.x, endWorldPos.y - startWorldPos.y);