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); }
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); }
private List <BubbleSlot> GetAdjacentBubbles(BubbleSlot bubbleSlot) { var adjacentIndexes = GetAdjacentIndexes(bubbleSlot); return(adjacentIndexes.Select(i => _bubbleSlots[i]).Where(slot => slot.HasBubble()).ToList()); }
public void SetBubbleSlot(BubbleSlot bubbleSlot) { _bubbleSlot = bubbleSlot; }