private void SpawnNewItems() { //int -> number of position to move down, List<GridItem> -> list of items to move down about this(key) positions. Dictionary <int, List <GridItem> > itemsToMove = new Dictionary <int, List <GridItem> >(); int lenghtY = GridItems.GetLength(1); foreach (int x in positionsForNewItems.Keys) { int numberOfDestroyedItems = 0; for (int y = 0; y < lenghtY; y++) { if (GridItems[x, y] == null) { numberOfDestroyedItems++; } else if (numberOfDestroyedItems > 0) { if (!itemsToMove.ContainsKey(numberOfDestroyedItems)) { itemsToMove.Add(numberOfDestroyedItems, new List <GridItem>()); } int newY = y - numberOfDestroyedItems; GridItems[x, newY] = GridItems[x, y]; GridItems[x, newY].Position = new IntVector2(x, newY); itemsToMove[numberOfDestroyedItems].Add(GridItems[x, newY]); #if UNITY_EDITOR GridItems[x, newY].UpdateGameObjectName(); #endif } } if (!itemsToMove.ContainsKey(numberOfDestroyedItems)) { itemsToMove.Add(numberOfDestroyedItems, new List <GridItem>()); } //Spawn new items for (int i = lenghtY - numberOfDestroyedItems; i < lenghtY; i++) { ItemsGenerator.GenerateNewItem(x, i, numberOfDestroyedItems, true); itemsToMove[numberOfDestroyedItems].Add(GridItems[x, i]); } } MoveItems(itemsToMove, false, AnimManager.FallDownItems); }