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); } }
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); } }
/// <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); }
public override bool Equals(object other) { CellBehaviour cell = (CellBehaviour)other; if (cell == null) { return(false); } return(GetCellData().RootCell.Equals(cell.GetCellData().RootCell)); }
/// <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); }
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); } } }