示例#1
0
    /// <summary>
    /// Запускается, когда выбран ход на панели.
    /// </summary>
    /// <param name="cell">выбранный ход</param>
    public void PanelCellPressed(GameObject cell)
    {
        // Если панель активна, то сделать ее неактивной.
        if (possibleMoves.activeSelf)
        {
            possibleMoves.SetActive(false);
        }

        // Находим в переданной клетке ее игровую компоненту.
        CellPanel cp = cell.GetComponent <CellPanel>();

        // Для клетки, на которую мы нажали и захотели сделать ход на ней, добавляем новую стенку.
        CellField sender = cp.sender.GetComponent <CellField>();

        // Индекс стенки, которую нужно активировать.
        int ind = panelChildren.Count == 1 ? inactiveWall : cp.Index;

        sender.AddSprite(ind, panelChildren.Count == 1);

        if (ind >= 0)
        {
            // Куда нужно сдвинуться от данной клеточки, чтобы поставить соседнюю стенку.
            Vector2 shift = new Vector2((ind - 1) % 2, -(ind - 2) % 2);

            // Находим соседа данной клеточки.
            GameObject neighbour = FindCell(sender.x + (int)shift.x, sender.y + (int)shift.y);

            // Меняем спрайт соседа, если он есть.
            if (neighbour != null)
            {
                neighbour.GetComponent <CellField>().AddSprite((ind + 2) % 4, false);
            }
        }

        // Если поставили знак, увеличиваем количество клеток со знаками и проверяем, закончилась ли игра.
        if (sender.signed)
        {
            signedCells++;

            if (signedCells == GetComponent <FieldGenerator>().cellsHandler.childCount)
            {
                WinOrLose();
            }
        }

        GetComponent <PlayAudio>().PanelAudio();

        cellBackground.SetActive(false);

        // Меняем очередь.
        Player.player.CrossTurn = !Player.player.CrossTurn;
    }
示例#2
0
    private void create()
    {
        if (null == PrefCellPanel)
        {
            Log.Error("not found prefab cell panel");
            return;
        }

        BoardGame.Board board = Manager.Instance.Object.BoardGameMode.Board;

        for (int row = 0; row < BoardGame.Board.SIZE; ++row)
        {
            for (int col = 0; col < BoardGame.Board.SIZE; ++col)
            {
                GameObject o = Instantiate(PrefCellPanel);
                o.transform.SetParent(transform, false);

                CellPanel p = o.GetComponent <CellPanel>();
                p.Set(board.Get(row, col));
            }
        }
    }
示例#3
0
        protected override void OnLoadTemplate()
        {
            _panel = (CellPanel)GetTemplateChild("Panel");
            _panel?.SetOwner(this);

            // 后面SetValBinding时需要内部元素
            OnApplyCellTemplate();

            if (IsReadOnly || Owner.IsReadOnly)
            {
                ReadOnlyBinding = true;
            }

            if (!string.IsNullOrEmpty(ID))
            {
                if (ReadLocalValue(ValBindingProperty) != DependencyProperty.UnsetValue)
                {
                    if (ValConverter != null)
                    {
                        ValBinding.Converter = ValConverter;
                    }
                    SetValBinding();
                }
                else if (_panel != null && _panel.Child != null)
                {
                    // 未设置数据源时隐藏编辑器
                    _panel.Child.Visibility = Visibility.Collapsed;
                }

                // ID作为缺省标题
                if (ReadLocalValue(TitleProperty) == DependencyProperty.UnsetValue)
                {
                    SetValue(TitleProperty, ID);
                }
            }
            _isLoaded = true;
        }