Beispiel #1
0
 public void FillData(LayoutConfig config)
 {
     this.prefab       = config.prefab;
     this.dir          = config.dir;
     this.dirCellWidth = config.dirCellWidth;
     this.dirViewLen   = config.dirViewLen;
     this.cellSize     = config.cellSize;
     this.spacing      = config.spacing;
     this.bufHalfCnt   = config.bufHalfCnt;
     this.progress     = config.progress;
 }
Beispiel #2
0
 public Layout StartAxis(GridLayoutGroup.Axis startAxis)
 {
     if (layoutGroup is GridLayoutGroup glg)
     {
         glg.startAxis = startAxis;
     }
     else
     {
         Debug.LogError("Call Grid() before StartAxis()");
     }
     return(this);
 }
 private void InitContent(GridLayoutGroup.Axis axis)
 {
     if (childContent == null)
     {
         var type = axis == GridLayoutGroup.Axis.Horizontal ? typeof(HorizontalLayoutGroup) : typeof(VerticalLayoutGroup);
         childContent = new GameObject(name + "_content", typeof(RectTransform), type).transform;
         childContent.transform.SetParent(transform.parent, false);
         childContent.SetSiblingIndex(transform.GetSiblingIndex() + 1);
         var group = childContent.GetComponent <HorizontalOrVerticalLayoutGroup>();
         group.childForceExpandHeight = false;
         group.childForceExpandWidth  = false;
         group.spacing = rule.spacing;
     }
 }
Beispiel #4
0
        public TreeSelectItem[] CreateTreeSelectItems(GridLayoutGroup.Axis axis, TreeNode[] childNodes)
        {
            var rule = ruleGetter(deepth);

            created = new TreeSelectItem[childNodes.Length];
            for (int i = 0; i < childNodes.Length; i++)
            {
                var            item = pool.GetPoolObject(prefab.gameObject, parent, false);
                TreeSelectItem tsi  = item.GetComponent <TreeSelectItem>();
                tsi.InitTreeSelecter(axis, deepth + 1, ruleGetter, childNodes[i], prefab);
                created[i] = tsi;
            }
            return(created);
        }
Beispiel #5
0
        /// <summary>
        /// 获取layout 尺寸大小
        /// </summary>
        protected Vector2 UF_GetLayoutSizeDelta(GridLayoutGroup.Axis axis)
        {
            float sizeVal = 0;

            //更新content尺寸
            if (axis == GridLayoutGroup.Axis.Vertical)
            {
                sizeVal = m_Padding.y * 2 + (m_Space.y + m_CellSize.y) * Mathf.Ceil((float)m_TotalCount / (float)m_Constraint) - m_Space.y;
                return(new Vector2(this.rectTransform.sizeDelta.x, sizeVal));
            }
            else
            {
                sizeVal = m_Padding.y * 2 + (m_Space.y + m_CellSize.y) * Mathf.Ceil((float)m_TotalCount / (float)m_Constraint) - m_Space.y;
                return(new Vector2(sizeVal, this.rectTransform.sizeDelta.y));
            }
        }
Beispiel #6
0
    protected override void DrawFields()
    {
        base.DrawFields();
        UIRecycleGrid grid     = target as UIRecycleGrid;
        int           maxCount = EditorGUILayout.IntField("maxShowCount", grid.maxShowCount);

        GridLayoutGroup.Axis layoutAxis = (GridLayoutGroup.Axis)EditorGUILayout.EnumPopup("Axis", grid.layoutAxis);

        if (GUI.changed)
        {
            EditorTools.RegisterUndo("UIRecycleGrid", grid);
            grid.maxShowCount = maxCount;
            grid.layoutAxis   = layoutAxis;
            EditorTools.SetDirty(grid);
        }
    }
Beispiel #7
0
        //计算指定索引位置
        protected Vector2 UF_GetPositionBaseIndex(GridLayoutGroup.Axis axis, int index)
        {
            int left = 0;
            int down = 0;

            if (axis == GridLayoutGroup.Axis.Vertical)
            {
                left = (index) % m_Constraint;
                down = (int)((index) / m_Constraint);
            }
            else
            {
                down = (index) % m_Constraint;
                left = (int)((index) / m_Constraint);
            }
            return(new Vector2(left * (m_Space.x + m_CellSize.x) + m_Padding.x, -down * (m_Space.y + m_CellSize.y) - m_Padding.y));
        }
    //计算容器行列
    private void CalculateRC()
    {
        RectTransform sForm = gameObject.GetComponent <RectTransform>();

        _layoutGroup = _container.gameObject.GetComponent <GridLayoutGroup>();
        _startAxis   = _layoutGroup.startAxis;

        float height = sForm.sizeDelta.y;
        float width  = sForm.sizeDelta.x;

        if (IsAxisHorizontal())
        {
            //水平排列 垂直滚动 左右
            height += _layoutGroup.spacing.y;

            width = width - _layoutGroup.padding.left - _layoutGroup.padding.right;
            width = width > _layoutGroup.cellSize.x ? width : _layoutGroup.cellSize.x;
        }
        else
        {
            //垂直排列 水平滚动 高度上下扣除
            width += _layoutGroup.spacing.x;

            height = height - _layoutGroup.padding.top - _layoutGroup.padding.bottom;
            height = height > _layoutGroup.cellSize.y ? height : _layoutGroup.cellSize.y;
        }

        _row = (int)Mathf.Ceil(height * 1.0f / (_layoutGroup.cellSize.y + _layoutGroup.spacing.y));


        _column = (int)Mathf.Ceil(width * 1.0f / (_layoutGroup.cellSize.x + _layoutGroup.spacing.x));

        if (IsAxisHorizontal())
        {
            //水平方向铺排(放置满一行 换行)
            _row++;
        }
        else
        {
            //垂直方向铺排
            _column++;
        }
        _initMax = _row * _column;
    }
        public void InitTreeSelecter(GridLayoutGroup.Axis axis, int deepth, Func <int, TreeSelectRule> ruleget, TreeNode node, TreeSelectItem prefab)
        {
            this.deepth = deepth;
            this.node   = node;
            this.rule   = ruleget(deepth);

            if (node.childern != null && node.childern.Count > 0)
            {
                InitContent(axis);
                creater = new TreeNodeCreater(ruleget, deepth, childContent, prefab);
                var items = creater.CreateTreeSelectItems(axis, node.childern.ToArray());
                foreach (var item in items)
                {
                    item.onSelection = OnSelection;
                }
            }

            ChargeRule();
        }
    private void SetScrollDirection(ListScrollType scrollType)
    {
        switch (scrollType)
        {
        case ListScrollType.Horizontal:
            horizontal  = true;
            vertical    = false;
            m_StartAxis = GridLayoutGroup.Axis.Vertical;
            break;

        case ListScrollType.Vertical:
            horizontal  = false;
            vertical    = true;
            m_StartAxis = GridLayoutGroup.Axis.Horizontal;
            break;

        default:
            break;
        }
        SetDirty();
    }
Beispiel #11
0
 public void SetGridGroup(GridLayoutGroup grid, RectOffset offset, Vector2 size, Vector2 space, int count,
                          GridLayoutGroup.Constraint constr = GridLayoutGroup.Constraint.Flexible,
                          GridLayoutGroup.Corner starC      = GridLayoutGroup.Corner.UpperLeft
                          , TextAnchor childA = TextAnchor.UpperLeft, GridLayoutGroup.Axis starA = GridLayoutGroup.Axis.Horizontal
                          )
 {
     if (!isHaveUIGrid)
     {
         Debug.Log("not set grid");
         return;
     }
     Debug.Log("set grid");
     grid.padding        = offset;
     grid.cellSize       = size;
     grid.spacing        = space;
     grid.startCorner    = starC;
     grid.startAxis      = starA;
     grid.childAlignment = childA;
     grid.constraint     = constr;
     if (constr == GridLayoutGroup.Constraint.FixedColumnCount)
     {
         grid.constraintCount = count;
     }
 }
Beispiel #12
0
        public GridLayoutGroup ConstructLayoutGroup(float cellX = 350f, float cellY = 75f, float spaceX = 145f, float spaceY = 12f, float w = 1190, float h = 185, GridLayoutGroup.Axis startAxis = GridLayoutGroup.Axis.Horizontal, TextAnchor anchor = TextAnchor.MiddleCenter)
        {
            GameObject layout = new GameObject("LayoutGroup");

            layout.AddComponent <RectTransform>();
            GridLayoutGroup group = layout.AddComponent <GridLayoutGroup>();

            group.cellSize       = new Vector2(cellX, cellY);
            group.spacing        = new Vector2(spaceX, spaceY);
            group.startAxis      = startAxis;
            group.childAlignment = anchor;
            SetPosition(layout, 0, 0, w, h);
            return(layout.GetComponent <GridLayoutGroup>());
        }
    public static ScrollRect newScrollView(Transform parent, string strName, Vector3 pos, Vector2 size, Vector2 sizeContent, Vector2 spacingContent, GridLayoutGroup.Axis axis, TextAnchor childAlignment, GridLayoutGroup.Constraint constraint, int constraintCount)
    {
        var scrollRect = newGameObject <ScrollRect>(parent, strName, pos, size);
        var viewport   = newGameObject <Mask>(scrollRect.transform, "Viewport", Vector3.zero, size);
        var content    = newGameObject <GridLayoutGroup>(viewport.transform, "Content", Vector3.zero, size);

        content.cellSize        = sizeContent;
        content.spacing         = spacingContent;
        content.startAxis       = axis;
        content.childAlignment  = childAlignment;
        content.constraint      = constraint;
        content.constraintCount = constraintCount;
        scrollRect.content      = content.GetComponent <RectTransform>();
        return(scrollRect);
    }
Beispiel #14
0
    private int CaculateDataIndex(Vector2Int rowColumnIndex, Vector2Int rowColumnSize, GridLayoutGroup.Axis startAxis, GridLayoutGroup.Corner startCorner)
    {
        // for row column index
        // for temp row column indes
        // x -> index on horizontal axis
        // y -> index on vertical axis

        // for row column size
        // x -> element amount on horizontal axis
        // y -> element amount on vertical axis

        // tempIndex and rowColumn size are all start from topLeft
        int result = 0;

        if (startAxis == GridLayoutGroup.Axis.Horizontal)
        {
            switch (startCorner)
            {
            case GridLayoutGroup.Corner.UpperLeft:
                result = rowColumnIndex.y * rowColumnSize.x + rowColumnIndex.x;
                break;

            case GridLayoutGroup.Corner.LowerLeft:
                result = (rowColumnSize.y - rowColumnIndex.y - 1) * rowColumnSize.x + rowColumnIndex.x;
                break;

            case GridLayoutGroup.Corner.UpperRight:
                result = rowColumnIndex.y * rowColumnSize.x + rowColumnSize.x - rowColumnIndex.x - 1;
                break;

            case GridLayoutGroup.Corner.LowerRight:
                result = (rowColumnSize.y - rowColumnIndex.y - 1) * rowColumnSize.x + rowColumnSize.x - rowColumnIndex.x - 1;
                break;

            default:
                Debug.LogError("start corner type error", this.gameObject);
                break;
            }
        }
        else //if (startAxis == GridLayoutGroup.Axis.Vertical)
        {
            switch (startCorner)
            {
            case GridLayoutGroup.Corner.UpperLeft:
                result = rowColumnIndex.x * rowColumnSize.y + rowColumnIndex.y;
                break;

            case GridLayoutGroup.Corner.LowerLeft:
                result = rowColumnIndex.x * rowColumnSize.y + rowColumnSize.y - rowColumnIndex.y - 1;
                break;

            case GridLayoutGroup.Corner.UpperRight:
                result = (rowColumnSize.x - rowColumnIndex.x - 1) * rowColumnSize.y + rowColumnIndex.y;
                break;

            case GridLayoutGroup.Corner.LowerRight:
                result = (rowColumnSize.x - rowColumnIndex.x - 1) * rowColumnSize.y + rowColumnSize.y - rowColumnIndex.y - 1;
                break;

            default:
                Debug.LogError("start corner type error", this.gameObject);
                break;
            }
        }

        return(result);
    }
Beispiel #15
0
        public static DialogGUIGridLayout GUIGridLayout(RectOffset padding, Vector2 cellSize, Vector2 spacing,
                                                        GridLayoutGroup.Corner startCorner, GridLayoutGroup.Axis startAxis, TextAnchor childAligment,
                                                        GridLayoutGroup.Constraint constraint, Int32 constraintCount, Action optionBuilder, Modifier <DialogGUIGridLayout> modifier = null)
        {
            DialogGUIGridLayout element = new DialogGUIGridLayout(padding, cellSize, spacing, startCorner, startAxis,
                                                                  childAligment, constraint, constraintCount, Declare(optionBuilder));

            if (modifier != null)
            {
                element = modifier(element);
            }
            _elements.Add(element);
            return(element);
        }