IEnumerator Drop() { bool overlappingDrop = dotsDropping; dotsDropping = true; // Drop dots column by column for (int k = 0; k < boardHeight; k++) { for (int i = 0; i < boardWidth; i++) { BoardSpace curSpace = BoardArray[i][k]; DotController curDot = curSpace.GetCurrentDot(); bool alreadyDropping = curDot.IsDropping; if (curSpace.IsEmpty || curDot.FlaggedToDrop || curDot.IsDropping) { dotsToDrop++; curDot.OnDropComplete += OnDropComplete; curSpace.DropDot(dropTime); } } // offset each row's drop, if its not an overlapping drop call if (!overlappingDrop) { yield return(dropRow); } } }