private void arrangeColumns() { // cleanup this.Columns = new ArrayList(); foreach (CalendarDayEventView e in events) { e.Column = null; } // there always will be at least one column because arrangeColumns is called only from Add() createColumn(); foreach (CalendarDayEventView e in events) { foreach (BlockColumn col in Columns) { if (col.CanAdd(e)) { col.Add(e); break; } } // it wasn't placed if (e.Column == null) { BlockColumn col = createColumn(); col.Add(e); } } }
public BlockPage Process(BlockPage page) { IBlock last = null; BlockColumn lastColumn = null; BlockSet <IBlock> currentBlockSet = null; var result = new BlockPage(); foreach (var block in page.AllBlocks) { bool shouldBreak = false; if (last != null) { // expect: previous >~ next float previous = last.GetH(); float next = block.GetH(); // previous >> next if (previous > next + statDownInTheBottom) { shouldBreak = true; } // previous < next if (previous < next - statGoingUp) { shouldBreak = true; } } var column = (BlockColumn)FindColumn(block); if (column == null) { PdfReaderException.Throw("Column not in the blockset info -- review stage 2"); } if (lastColumn != null) { if (column != lastColumn) { shouldBreak = true; } } if ((currentBlockSet == null) || shouldBreak) { currentBlockSet = new BlockSet <IBlock>(); result.Add(currentBlockSet); } currentBlockSet.Add(block); last = block; lastColumn = column; } return(result); }
private BlockColumn createColumn() { BlockColumn col = new BlockColumn (); this.Columns.Add (col); col.Block = this; return col; }
public BlockPage Process(BlockPage page) { SetupPage(page); BlockPage2 newpage = new BlockPage2(); int last_columnType = -1; int last_columnX = -1; int last_columnSize = -1; BlockPageSegment segment = null; BlockColumn column = null; foreach (var block in page.AllBlocks) { float x = block.GetX() - _minX; float x2 = block.GetX() + block.GetWidth() - _minX; float w = block.GetWidth(); int columnSize = GetColumnWidth(w); int columnType = GetNumberOfColumns(columnSize); // different Page Segment if (columnType != last_columnType) { segment = new BlockPageSegment(newpage, columnType); newpage.AddSegment(segment); //Console.WriteLine(columnType); //Console.WriteLine("add new segment/column"); last_columnType = columnType; last_columnX = -1; last_columnSize = -1; } int position = GetColumnX(x, columnType); if (last_columnX != position || last_columnSize != columnSize) { //Console.WriteLine($"NEW COLUMN"); column = new BlockColumn(newpage, columnType, position, columnSize); segment.AddColumn(column); last_columnX = position; last_columnSize = columnSize; } //Console.WriteLine($"position x: {position} (ADDBLOCK)"); column.AddBlock(block); } //Console.WriteLine($"Page type = {newpage.ToString()}"); _pageLayout = newpage.ToString(); return(newpage); }
void Start() { IsInitialized = false; _blockColumn = GetComponent <BlockColumn>(); _consecutiveMovableBlocks = 0; ConsecutiveMovableBlockMin = 10; ConsecutiveMovableBlockMax = 30; _consecutiveMovableBlocksBeforeImmovableBlock = Random.Range(ConsecutiveMovableBlockMin, ConsecutiveMovableBlockMax); }
private BlockColumn createColumn() { BlockColumn col = new BlockColumn(); this.Columns.Add(col); col.Block = this; return(col); }
public BlockPage Process(BlockPage page2) { var page = page2 as BlockPage2; if (page == null) { PdfReaderException.AlwaysThrow("ResizeSequentialLayout must execute AFTER OrganizePageLayout"); } var result = new BlockPage2(); foreach (var segment in page.Segments) { BlockPageSegment newsegment = new BlockPageSegment(result, segment.NumberOfColumns); foreach (var column in segment.Columns) { BlockColumn newcolumn = new BlockColumn(result, column.ColumnType, column.X1, column.W); float minX = column.Min(b => b.GetX()); float maxX = column.Max(b => b.GetX() + b.GetWidth()); foreach (var block in column) { var bset = block as IBlockSet <IBlock>; if (block is TableSet || block is ImageBlock) { newcolumn.Add(block); continue; } if (bset == null) { PdfReaderException.AlwaysThrow("not expected"); } var resizeBset = ResizeBlockSet(bset, minX, maxX); newcolumn.Add(resizeBset); } newsegment.AddColumn(newcolumn); } result.AddSegment(newsegment); } return(result); }
BlockColumn CopyColumnMetadata(BlockPage2 blocksetInfo, BlockColumn column) { var columnInfo = new BlockColumn(blocksetInfo, column.ColumnType, column.X1, column.W); var block = new Block() { H = column.GetH(), X = column.GetX(), Height = column.GetHeight(), Width = column.GetWidth(), Text = $"Column [{columnInfo.ColumnType}:{columnInfo.X1}]" }; var bset = new BlockSet <IBlock>(blocksetInfo); bset.Add(block); columnInfo.Add(bset); return(columnInfo); }
public void GenerateNewLevel() //Generates a new set of blocks { if (seed != "") //If there is a seed, generate a hashcode from it { Random.InitState(seed.GetHashCode()); } else //If there is no seed, use the current game time as a seed { randomSeed = (Mathf.FloorToInt(Time.time + 1) * Random.Range(1, 4500)).ToString(); Random.InitState(randomSeed.GetHashCode()); } DestroyBlockList(); //Destroys all previous blocks if there are some CreateColourSet(); //Creates a new colour palette columns = new List <BlockColumn>(); //Resets the column list int heldIndex = 3; //This index is used to mirror the columns for (int i = 0; i < 8; i++) { int columnLength = Random.Range(2, 8); //Sets a random column length, maximum of 7, minimum of 2 BlockColumn newColumn = new BlockColumn(generateStart.x + (spacing.x * i), generateStart.y, columnLength); //Create a new column if (i <= 3) //First half { newColumn.GenerateColoumn(blockPrefab, spacing); //Populate the new column with random blocks } else //Second half { newColumn.SetBlockList(columns[heldIndex].blocks); //Copy the selected column heldIndex--; //Work down the list to mirror the columns } columns.Add(newColumn); //Adds the new column to the list } SetBlockList(); //Generates a list of all destroyable blocks }
public BlockPage Process(BlockPage page2) { var page = page2 as BlockPage2; if (page == null) { PdfReaderException.AlwaysThrow("MergeSequentialLayout must execute AFTER OrganizePageLayout"); } var result = new BlockPage2(); foreach (var segment in page.Segments) { BlockPageSegment newsegment = new BlockPageSegment(result, segment.NumberOfColumns); foreach (var column in segment.Columns) { BlockColumn newcolumn = new BlockColumn(result, column.ColumnType, column.X1, column.W); IBlock last = null; var orderedColumns = column.OrderByDescending(b => b.GetH()); foreach (var block in orderedColumns) { if (last != null) { var b1 = last as IBlockSet <IBlock>; var b2 = block as IBlockSet <IBlock>; if (block is TableSet || block is ImageBlock || last is TableSet || last is ImageBlock) { newcolumn.Add(last); last = block; continue; } if (b1 == null || b2 == null) { PdfReaderException.AlwaysThrow("not expected"); } if (Block.SameHeight(b1, b2)) { last = Merge(b1, b2); // merge continue; } newcolumn.Add(last); } last = block; } if (last != null) { newcolumn.Add(last); } newsegment.AddColumn(newcolumn); } result.AddSegment(newsegment); } return(result); }
private Vector3 GetBlockSpawnPosition(BlockColumn blockColumn) { return(blockColumn.transform.position + Vector3.up * (BlockColumnManager.Instance.SupportBlockHeight + BlockWallGenerator.WallHeight)); }