private Vector2Int?GetNearestHorizontalCell(ChainBlock block) { var minDistance = float.MaxValue; Vector2Int?minDistanceCell = null; for (var i = 0; i < _horizontalGrid.Count; ++i) { for (var j = 0; j < _horizontalGrid[i].Count; ++j) { if (_horizontalGrid[i][j].IsEmpty && IsFree(_horizontalGrid[0][0].Direction, i, j + 1) && IsFree(_horizontalGrid[0][0].Direction, i, j - 1) && IsFree(_verticalGrid[0][0].Direction, i, j) && IsFree(_verticalGrid[0][0].Direction, i, j + 1) && IsFree(_verticalGrid[0][0].Direction, i - 1, j) && IsFree(_verticalGrid[0][0].Direction, i - 1, j + 1)) { var currentDistance = Vector3.Distance(block.transform.position, _horizontalGrid[i][j].transform.position); if (currentDistance < minDistance) { minDistance = currentDistance; minDistanceCell = new Vector2Int(j, i); } } } } return(minDistanceCell); }
public bool ConnectToBlock(ChainBlock block) { if (block.Direction == DirectionType.Horizontal) { var nearestCell = GetNearestHorizontalCell(block); if (nearestCell.HasValue) { var value = nearestCell.Value; ConnectHorizontalBlock(block, value); return(true); } } else if (block.Direction == DirectionType.Vertical) { var nearestCell = GetNearestVerticalCell(block); if (nearestCell.HasValue) { var value = nearestCell.Value; ConnectVerticalBlock(block, value); return(true); } } return(false); }
public void AddInitialBlock(ChainBlock block, Vector2Int gridPosition) { if (block.Direction == DirectionType.Horizontal) { ConnectHorizontalBlock(block, gridPosition); } else if (block.Direction == DirectionType.Vertical) { ConnectVerticalBlock(block, gridPosition); } }
private void ConnectVerticalBlock(ChainBlock block, Vector2Int value) { var x = value.x; var y = value.y; if (IsVerticalCellExist(y + 1, x)) { _verticalGrid[y + 1][x].ConnectionsCount++; } if (IsVerticalCellExist(y - 1, x)) { _verticalGrid[y - 1][x].ConnectionsCount++; } if (IsHorizontalCellExist(y, x)) { _horizontalGrid[y][x].ConnectionsCount++; } if (IsHorizontalCellExist(y, x - 1)) { _horizontalGrid[y][x - 1].ConnectionsCount++; } if (IsHorizontalCellExist(y + 1, x)) { _horizontalGrid[y + 1][x].ConnectionsCount++; } if (IsHorizontalCellExist(y + 1, x - 1)) { _horizontalGrid[y + 1][x - 1].ConnectionsCount++; } Logger.Print($"{ _verticalGrid[y][x].GridPosition }", "red"); var pos = _verticalGrid[y][x].transform.position; _verticalGrid[y][x].Connect(block); block.transform.position = new Vector3(pos.x, pos.y, block.transform.position.z); }