Przeglądaj źródła

华容道修改为点击

leiyasi 1 rok temu
rodzic
commit
5f23478069

+ 63 - 72
GameClient/Assets/Game/HotUpdate/Views/ActivityHuaRongDao/ActivityHuaRongDaoView.cs

@@ -79,10 +79,6 @@ namespace GFGGame
                 _blankItem = UIPackage.CreateObject("ActivityHuaRongDao", "item");
                 _ui.target.AddChild(_blankItem);
             }
-
-            _ui.m_maskTouch.onTouchBegin.Add(TouchBegin);
-            _ui.m_maskTouch.onTouchEnd.Add(TouchEnd);
-
         }
 
         protected override void OnShown()
@@ -232,6 +228,7 @@ namespace GFGGame
             {
                 GObject gObject = UIPackage.CreateObject("ActivityHuaRongDao", "item");
                 gObject.name = "item" + i;
+                gObject.onClick.Add(OnItemClick);
                 _ui.m_items.target.AddChild(gObject);
                 _items.Add(gObject);
             }
@@ -253,103 +250,77 @@ namespace GFGGame
             inputPos.y = context.inputEvent.y;
         }
 
-        private void TouchEnd(EventContext context)
+        private Grid CheckCanMove(int num)
         {
-            GridInfo numGrid = null;
-            GridInfo nullGrid = new GridInfo();
+            int indexX = 0;
+            int indexY = 0;
 
-            // 找到格子
+            // 找到格子
             for (int i = 0; i < _gridNum; i++)
             {
                 for (int j = 0; j < _gridNum; j++)
                 {
-                    if (_gridArr[i, j].num == 0)
+                    if (_gridArr[i, j].num == num)
                     {
-                        nullGrid.row = i;
-                        nullGrid.col = j;
+                        indexX = i;
+                        indexY = j;
                         break;
                     }
                 }
             }
 
-            // 左
-            if ((context.inputEvent.x - inputPos.x) < 0 && Mathf.Abs(context.inputEvent.x - inputPos.x) > Mathf.Abs(context.inputEvent.y - inputPos.y))
-            {
-                numGrid = CheckHaveNumGrid(nullGrid.row, nullGrid.col + 1);
-            }
-
-            // 右
-            if ((context.inputEvent.x - inputPos.x) > 0 && Mathf.Abs(context.inputEvent.x - inputPos.x) > Mathf.Abs(context.inputEvent.y - inputPos.y))
-            {
-                numGrid = CheckHaveNumGrid(nullGrid.row, nullGrid.col - 1);
-            }
-
-            // 上
-            if ((context.inputEvent.y - inputPos.y) < 0 && Mathf.Abs(context.inputEvent.y - inputPos.y) > Mathf.Abs(context.inputEvent.x - inputPos.x))
+            // 判断格子四个方向是否有空格
+            if (CheckHaveNullGrid(indexX - 1, indexY) || CheckHaveNullGrid(indexX, indexY - 1)
+                || CheckHaveNullGrid(indexX + 1, indexY) || CheckHaveNullGrid(indexX, indexY + 1))
             {
-                numGrid = CheckHaveNumGrid(nullGrid.row + 1, nullGrid.col);
-            }
-
-            // 下
-            if ((context.inputEvent.y - inputPos.y) > 0 && Mathf.Abs(context.inputEvent.y - inputPos.y) > Mathf.Abs(context.inputEvent.x - inputPos.x))
-            {
-                numGrid = CheckHaveNumGrid(nullGrid.row - 1, nullGrid.col);
-            }
-
-            if (numGrid != null)
-            {
-                int num = numGrid.num;
-                Grid grid = UpdateGridInfo(numGrid, nullGrid);
-                MoveItem(grid, num);
+                return UpdateGridInfo(num);
             }
 
+            return null;
         }
 
-        private void MoveItem(Grid newGrid, int changeNum)
+        private bool CheckHaveNullGrid(int indexX, int indexY)
         {
-            for (int i = 0; i < _items.Count; i++)
+            if (indexX >= 0 && indexX < _gridNum)
             {
-                GObject obj = _items[i];
-                int num = (int)obj.data;
-
-                if (num == changeNum)
+                if (indexY >= 0 && indexY < _gridNum)
                 {
-                    _ui.m_maskGlobal.visible = true;
-                    obj.TweenMove(newGrid.pos, 0.1f).OnComplete(() =>
-                    {
-                        _ui.m_maskGlobal.visible = false;
-                        if (CheckWin())
-                        {
-                            ControlMenuItemVisual(false);
-                            Win(_cancellationTokenSource.Token);
-                        }
-                    });
-                    return;
+                    return _gridArr[indexX, indexY].num == 0;
                 }
             }
+
+            return false;
         }
 
-        /// <summary>
-        /// 查看空白格附近是否存在数字格
-        /// </summary>
-        /// <param name="indexX"></param>
-        /// <param name="indexY"></param>
-        /// <returns></returns>
-        private GridInfo CheckHaveNumGrid(int indexX, int indexY)
+        private Grid UpdateGridInfo(int num)
         {
-            if (indexX >= 0 && indexX < _gridNum)
+            Vector2 nullGridindex = new Vector2(-1, 0);
+            Vector2 numGridindex = new Vector2(-1, 0);
+
+
+            for (int i = 0; i < _gridNum; i++)
             {
-                if (indexY >= 0 && indexY < _gridNum)
+                for (int j = 0; j < _gridNum; j++)
                 {
-                    GridInfo grid = new GridInfo();
-                    grid.row = indexX;
-                    grid.col = indexY;
-                    grid.num = _gridArr[indexX, indexY].num;
-                    return grid;
+                    if (_gridArr[i, j].num == num)
+                    {
+                        numGridindex = new Vector2(i, j);
+                    }
+                    else if (_gridArr[i, j].num == 0)
+                    {
+                        nullGridindex = new Vector2(i, j);
+                    }
+                    if (numGridindex.x != -1 && nullGridindex.x != -1)
+                    {
+                        break;
+                    }
                 }
             }
 
-            return null;
+            _gridArr[(int)numGridindex.x, (int)numGridindex.y].num = 0;
+            _gridArr[(int)nullGridindex.x, (int)nullGridindex.y].num = num;
+
+            return _gridArr[(int)nullGridindex.x, (int)nullGridindex.y];
         }
 
         /// <summary>
@@ -554,7 +525,7 @@ namespace GFGGame
         private void OnChangeLookOriginState()
         {
             bool look = (_ui.m_state.selectedIndex == 1);
-            _ui.m_maskTouch.touchable = !look;
+            _ui.m_items.target.touchable = !look;
             _ui.m_items.target.visible = !look;
             _ui.m_itemsOrigin.target.visible = look;
         }
@@ -569,5 +540,25 @@ namespace GFGGame
         {
             return ResPathUtil.GetHUARONGDAOPicPath(res);
         }
+
+        private void OnItemClick(EventContext eventContext)
+        {
+            GObject obj = eventContext.sender as GObject;
+            int num = (int)obj.data;
+            Grid newGrid = CheckCanMove(num);
+            if (newGrid != null)
+            {
+                _ui.m_maskGlobal.visible = true;
+                obj.TweenMove(newGrid.pos, 0.1f).OnComplete(() =>
+                {
+                    _ui.m_maskGlobal.visible = false;
+                    if (CheckWin())
+                    {
+                        ControlMenuItemVisual(false);
+                        Win(_cancellationTokenSource.Token);
+                    }
+                });
+            }
+        }
     }
 }

BIN
GameClient/Assets/ResIn/UI/ActivityHuaRongDao/ActivityHuaRongDao_fui.bytes