/// <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; }
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)); } } }
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; }