private AlteredMarbleInfo CreateNewMarbleInSpecificColumns(IEnumerable <int> columnsWithMissingMarbles) { AlteredMarbleInfo newMarbleInfo = new AlteredMarbleInfo(); foreach (int column in columnsWithMissingMarbles) { var emptyItems = marbles.GetEmptyItemsOnColumn(column); foreach (var item in emptyItems) { var go = GetRandomMarble(); GameObject newMarble = Instantiate(go, SpawnPositions[column], Quaternion.identity) as GameObject; newMarble.GetComponent <Marble>().Initialize(go.GetComponent <Marble>().Type, item.Row, item.column); if (GameVariables.Rows - item.Row > newMarbleInfo.maxDistance) { newMarbleInfo.maxDistance = GameVariables.Rows - item.Row; } marbles[item.Row, item.column] = newMarble; newMarbleInfo.AddMarble(newMarble); } } return(newMarbleInfo); }
public AlteredMarbleInfo Collapse(IEnumerable <int> columns) { AlteredMarbleInfo collapseInfo = new AlteredMarbleInfo(); foreach (var column in columns) { for (int row = 0; row < GameVariables.Rows - 1; row++) { if (marbles[row, column] == null) { for (int row2 = row + 1; row2 < GameVariables.Rows; row2++) { if (marbles[row2, column] != null) { marbles[row, column] = marbles[row2, column]; marbles[row2, column] = null; if (row2 - row > collapseInfo.maxDistance) { collapseInfo.maxDistance = row2 - row; } marbles[row, column].GetComponent <Marble>().Row = row; marbles[row, column].GetComponent <Marble>().Column = column; collapseInfo.AddMarble(marbles[row, column]); break; } } } } } return(collapseInfo); }