void alignItemsInRowsWithArray(int[] columns){
List<int> columnWidths = new List<int> ();
List<int> columnHeights = new List<int> ();
int width = -10, columnHeight = -5;
int column = 0, columnWidth = 0, rowsOccupied = 0, columnRows;
var enumerator = _children.GetEnumerator();
while (enumerator.MoveNext()) {
CCMenuItem item = (CCMenuItem)enumerator.Current;
NSUtils.Assert( column < columns.Length, "Too many menu items for the amount of rows/columns.");
columnRows = columns[column];
NSUtils.Assert( columnRows!=0, "Can't have zero rows on a column");
Vector2 itemSize = item.contentSize;
columnWidth = Mathf.RoundToInt(Mathf.Max(columnWidth, itemSize.x));
columnHeight += Mathf.RoundToInt(itemSize.y + 5);
++rowsOccupied;
if(rowsOccupied >= columnRows) {
columnWidths.Add(columnWidth);
columnHeights.Add(columnHeight);
width += columnWidth + 10;
rowsOccupied = 0;
columnWidth = 0;
columnHeight = -5;
++column;
}
}
NSUtils.Assert( rowsOccupied==0, "Too many rows/columns for available menu items.");
Vector2 winSize = CCDirector.sharedDirector.winSize;
column = 0; columnWidth = 0; columnRows = 0;
float x = -width / 2, y=0;
enumerator = _children.GetEnumerator();
while (enumerator.MoveNext()) {
CCMenuItem item = (CCMenuItem)enumerator.Current;
if(columnRows == 0) {
columnRows = columns[column];
y = (columnHeights[column] + winSize.y) / 2;
}
Vector2 itemSize = item.contentSize;
columnWidth = Mathf.RoundToInt(Mathf.Max(columnWidth, itemSize.x));
item.position=new Vector2(x + columnWidths[column] / 2,
y - winSize.y / 2);
y -= itemSize.y + 10;
++rowsOccupied;
if(rowsOccupied >= columnRows) {
x += columnWidth + 5;
rowsOccupied = 0;
columnRows = 0;
columnWidth = 0;
++column;
}
}
}
#endregion