Пример #1
0
    public void OnGridClicked(Grids g)
    {
        if (_currentChess == null && g.chess != null)
        {
            Chess c = g.chess;

            _currentChess = c;
            print(_currentChess?.grid.transform.name);
            _currentChess.grid.SetColor(Color.green);
            Cor cor  = GetXY(_currentChess.grid);
            Cor left = new Cor(cor);
            left.x -= 2;
            if (HasGrid(left) && !HasChess(left))
            {
                Cor mid = new Cor(left);
                mid.x++;
                if (HasGrid(mid) && HasChess(mid))
                {
                    moveableGrids.Add(allGrids[left.x, left.y]);
                }
            }
            Cor right = new Cor(cor);
            right.x += 2;
            if (HasGrid(right) && !HasChess(right))
            {
                Cor mid = new Cor(right);
                mid.x--;
                if (HasGrid(mid) && HasChess(mid))
                {
                    moveableGrids.Add(allGrids[right.x, right.y]);
                }
            }
            Cor up = new Cor(cor);
            up.y += 2;
            if (HasGrid(up) && !HasChess(up))
            {
                Cor mid = new Cor(up);
                mid.y--;
                if (HasGrid(mid) && HasChess(mid))
                {
                    moveableGrids.Add(allGrids[up.x, up.y]);
                }
            }
            Cor down = new Cor(cor);
            down.y -= 2;
            if (HasGrid(down) && !HasChess(down))
            {
                Cor mid = new Cor(down);
                mid.y++;
                if (HasGrid(mid) && HasChess(mid))
                {
                    moveableGrids.Add(allGrids[down.x, down.y]);
                }
            }
            foreach (var v in moveableGrids)
            {
                v.SetColor(Color.green);
            }
        }
        else if (_currentChess == g.chess)
        {
            g.SetColor(Color.white);
            foreach (var v in moveableGrids)
            {
                v.SetColor(Color.white);
            }
            moveableGrids.Clear();
            _currentChess = null;
        }
        else if (_currentChess != null && moveableGrids.Contains(g))
        {
            Cor mid   = new Cor();
            Cor end   = GetXY(g);
            Cor start = GetXY(_currentChess.grid);
            mid.SetMid(start, end);
            _currentChess.grid.SetColor(Color.white);
            _currentChess.MoveToGrid(g, Half, Finish);
            _currentChess.grid.SetColor(Color.white);
            foreach (var v in moveableGrids)
            {
                v.SetColor(Color.white);
            }
            moveableGrids.Clear();
            _currentChess = null;
            void Half()
            {
                Destroy(allGrids[mid.x, mid.y].chess.gameObject);
            }

            void Finish()
            {
                if (IsWin())
                {
                    gameObject.SetActive(false);
                    panel_win.SetActive(true);
                    btn_next.onClick.AddListener(() => SceneManager.LoadScene(nextLevelIndex));
                }
            }
        }
    }