示例#1
0
            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);
                    }
                }
            }
示例#2
0
        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);
        }
示例#3
0
            private BlockColumn createColumn()
            {
                BlockColumn col = new BlockColumn ();
                this.Columns.Add (col);
                col.Block = this;

                return col;
            }
示例#4
0
        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);
 }
示例#6
0
            private BlockColumn createColumn()
            {
                BlockColumn col = new BlockColumn();

                this.Columns.Add(col);
                col.Block = this;

                return(col);
            }
示例#7
0
        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);
        }
示例#8
0
        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
    }
示例#10
0
        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));
 }