コード例 #1
0
        void UnlinkCell(CellBehaviour linkedCell)
        {
            CellBehaviour curCell = (CellBehaviour)target;

            if (!curCell.GetCellData().RootCell.Equals(linkedCell.GetCellData().RootCell) &&    //Если хотим отвязать эту же ячейку
                curCell.GetCellData().LinkedCells.Contains(linkedCell.GetCellData().RootCell))  //Если эта ячейка связана
            {
                //Отвязать текущую ячейку от выбранной
                curCell.UnlinkCell(linkedCell);

                //Отвязать выбраную ячейку от текущей
                linkedCell.UnlinkCell(curCell);
            }
        }
コード例 #2
0
        void LinkCell(CellBehaviour linkedCell)
        {
            CellBehaviour curCell = (CellBehaviour)target;

            if (!curCell.GetCellData().RootCell.Equals(linkedCell.GetCellData().RootCell) &&    //Если хотим привязать эту же ячейку
                !curCell.GetCellData().LinkedCells.Contains(linkedCell.GetCellData().RootCell)) //Если эта ячейка уже привязана
            {
                //Связать текущую ячейку с выбранной
                curCell.LinkCell(linkedCell);

                //Связать выбраную ячейку с текущей
                linkedCell.LinkCell(curCell);
            }
        }
コード例 #3
0
        /// <summary>
        /// Удалить связь с ячейкой
        /// </summary>
        /// <param name="linkedCell">Связаная ячейка</param>
        public void UnlinkCell(CellBehaviour linkedCell)
        {
            //Определить тип горизонтального направления к ячейке по вектору направления
            Vector3 dirToLinkedCell = (transform.position - linkedCell.transform.position).normalized;

            GridTools.HorizontalDirections hDir = GridTools.GetHorizontalDirectionByVector(dirToLinkedCell);

            RemoveLink(hDir, linkedCell.GetCellData().RootCell);
        }
コード例 #4
0
        public override bool Equals(object other)
        {
            CellBehaviour cell = (CellBehaviour)other;

            if (cell == null)
            {
                return(false);
            }

            return(GetCellData().RootCell.Equals(cell.GetCellData().RootCell));
        }
コード例 #5
0
        /// <summary>
        /// Создать связь с ячейкой
        /// </summary>
        /// <param name="linkedCell">Связаная ячейка</param>
        /// <param name="addCellToConnection">Добавить ячейку в связи (редактор) <c>true</c>,
        /// иначе не добавлять ячейку в связи (загрущка)</param>
        public void LinkCell(CellBehaviour linkedCell, bool addCellToConnection = true)
        {
            //Определить тип горизонтального направления к ячейке по вектору направления
            Vector3 dirToLinkedCell = (transform.position - linkedCell.transform.position).normalized;

            GridTools.HorizontalDirections hDir = GridTools.GetHorizontalDirectionByVector(dirToLinkedCell);

            CreateLink(hDir, linkedCell.GetCellData().RootCell, addCellToConnection);

            //Обновить высоту всем соединениям конкретной ячейки
            UpdateVerticalDirectionForConnections(true);
        }
コード例 #6
0
        void OnSceneGUI()
        {
            //Отслеживание состояния изменения редима редактирования для текущей ячейки
            if (CellBehaviour.EDIT_MODE.Equals(!CellBehaviour.PREV_EDIT_MODE))
            {
                CellBehaviour.PREV_EDIT_MODE = CellBehaviour.EDIT_MODE;

                CellBehaviour curCell = (CellBehaviour)target;
                curCell.OnEditModeChanged(CellBehaviour.EDIT_MODE);
            }

            //Выделение ячейки на которую наведен указатель
            if (CellBehaviour.EDIT_MODE)
            {
                CellBehaviour targetCell = GetCell();
                if (targetCell != null)
                {
                    CellBehaviour curCell = (CellBehaviour)target;

                    //Если выделеная ячейка не текущая
                    if (!curCell.Equals(targetCell))
                    {
                        GridController gridController = FindObjectOfType <GridController>();

                        //Восстановить цвет предыдущей ячейке
                        if (CellBehaviour.PrevTargetCell != null)
                        {
                            CellBehaviour.PrevTargetCell.ColorizeCell(gridController.MaterialNormalCell);
                        }

                        //Предыдущая ячейка равняеться текущей
                        CellBehaviour.PrevTargetCell = targetCell;

                        //Покрасить текущю ячейку
                        if (CellIsAvailable(curCell.GetCellData().RootCell, targetCell.GetCellData().RootCell))
                        {
                            targetCell.ColorizeCell(gridController.MaterialTargetCell);
                        }
                        else
                        {
                            targetCell.ColorizeCell(gridController.MaterialUnavailableCell);
                        }

                        //Нарисовать линию к выбранной ячейке
                        Handles.DrawLine(curCell.transform.position, targetCell.transform.position);
                    }
                }
            }

            //Связка ячеек
            CellBehaviour linkedCell = GetCellByClick();

            if (linkedCell != null)
            {
                CellBehaviour curCell = (CellBehaviour)target;

                if (CellIsAvailable(curCell.GetCellData().RootCell, linkedCell.GetCellData().RootCell))
                {
                    curCell.OnCellSelected(linkedCell);
                }
            }
        }