Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
 public void AddInitialBlock(ChainBlock block, Vector2Int gridPosition)
 {
     if (block.Direction == DirectionType.Horizontal)
     {
         ConnectHorizontalBlock(block, gridPosition);
     }
     else if (block.Direction == DirectionType.Vertical)
     {
         ConnectVerticalBlock(block, gridPosition);
     }
 }
Beispiel #4
0
        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);
        }