Example #1
0
        private List <BubbleSlot> GetAdjacentBubblesWithSameScore(BubbleSlot bubbleSlot, List <BubbleSlot> knownAdjacents)
        {
            var newAdjacentBubbleSlots = new List <BubbleSlot>();
            var adjacentIndexes        = GetAdjacentIndexes(bubbleSlot);

            foreach (var adjacentBubbleIndex in adjacentIndexes)
            {
                var bubbleSlotToAdd = _bubbleSlots[adjacentBubbleIndex];
                if (bubbleSlotToAdd.HasBubble() && bubbleSlotToAdd.BubbleConfig().number == bubbleSlot.BubbleConfig().number)
                {
                    if (!knownAdjacents.Any(slot => slot.Id() == bubbleSlotToAdd.Id()))
                    {
                        newAdjacentBubbleSlots.Add(bubbleSlotToAdd);
                    }
                }
            }

            if (newAdjacentBubbleSlots.Count() == 0)
            {
                return(knownAdjacents);
            }

            var result = new List <BubbleSlot>();

            foreach (var newSlot in newAdjacentBubbleSlots)
            {
                var newSlotAdjacentBubbles = GetAdjacentBubblesWithSameScore(newSlot, knownAdjacents.Concat(newAdjacentBubbleSlots).ToList());
                foreach (var newSlotAdjacentBubble in newSlotAdjacentBubbles)
                {
                    if (!result.Any(slot => slot.Id() == newSlotAdjacentBubble.Id()))
                    {
                        result.Add(newSlotAdjacentBubble);
                    }
                }
            }
            return(result);
        }
Example #2
0
        private void RemoveEmptyRows()
        {
            var lastIndexWithoutBubble = _bubbleSlots.Length - 1;

            for (var i = _bubbleSlots.Length - 1; i >= 0; i--)
            {
                if (_bubbleSlots[i].HasBubble() || _bubbleSlots[i].IsReserved())
                {
                    break;
                }
                else
                {
                    lastIndexWithoutBubble = i;
                }
            }

            var emptyRowsCount = (_bubbleSlots.Length - 1 - lastIndexWithoutBubble) / _boardWidth;

            if (emptyRowsCount < 2)
            {
                return;
            }

            var rowsToDelete = emptyRowsCount - 1;

            foreach (var bubbleSlot in _bubbleSlots.Reverse().Take(rowsToDelete * _boardWidth))
            {
                Destroy(bubbleSlot.View().gameObject);
            }

            var updatedBubbleSlots = new BubbleSlot[_bubbleSlots.Length - rowsToDelete * _boardWidth];

            Array.Copy(_bubbleSlots, updatedBubbleSlots, updatedBubbleSlots.Length);
            _bubbleSlots = updatedBubbleSlots;

            _bubbleSlotsContainer.DOMoveY(_bubbleSlotsContainer.position.y - _bubbleSize * rowsToDelete, 0.25f);
        }
Example #3
0
        private List <BubbleSlot> GetAdjacentBubbles(BubbleSlot bubbleSlot)
        {
            var adjacentIndexes = GetAdjacentIndexes(bubbleSlot);

            return(adjacentIndexes.Select(i => _bubbleSlots[i]).Where(slot => slot.HasBubble()).ToList());
        }
Example #4
0
 public void SetBubbleSlot(BubbleSlot bubbleSlot)
 {
     _bubbleSlot = bubbleSlot;
 }