public void Inflate(ItemsEdge itemEdge, IItem item) { IWidget widget = _itemWidgetsPool.GetWidget(item); widget.Fill(item); RectTransform widgetRectTransform = widget.rectTransform; SetPivotAndAnchors(widgetRectTransform); widget.RecalcRect(); // Change edge last position WidgetsAlignment itemWidgetEdge = GetItemWidgetEdge(itemEdge); float inflationSign = WidgetsAlignmentDesc.HeadInflationSigns[itemWidgetEdge]; float nextPositionFloat = _edgesLastPositions[itemWidgetEdge] + _spacing * inflationSign; Vector2 axisMask = AxisMaskDesc.AxisMasks[_axis]; Vector2 nextWidgetPosition = nextPositionFloat * axisMask; Vector2 newEdgesLastPositions = nextWidgetPosition + widgetRectTransform.rect.size * axisMask * inflationSign; _edgesLastPositions[itemWidgetEdge] = Helpers.GetVectorComponent(newEdgesLastPositions, _axis); switch (itemEdge) { case ItemsEdge.Head: _widgets.Insert(0, widget); widgetRectTransform.anchoredPosition = newEdgesLastPositions; break; case ItemsEdge.Tail: _widgets.Add(widget); widgetRectTransform.anchoredPosition = nextWidgetPosition; break; } }
public float GetEdgeDelta(ItemsEdge itemEdge, Rect viewportWorldRect) { WidgetsAlignment itemWidgetEdge = GetItemWidgetEdge(itemEdge); float viewportEdgePosition = WidgetsAlignmentDesc.RectPositions[itemWidgetEdge](viewportWorldRect); Vector2 startPos = _node.TransformPoint(_edgesLastPositions[itemWidgetEdge] * AxisMaskDesc.AxisMasks[_axis]); float inflationSign = WidgetsAlignmentDesc.HeadInflationSigns[itemWidgetEdge]; var res = (viewportEdgePosition - Helpers.GetVectorComponent(startPos, _axis)) * inflationSign; return(res > 0f ? res * inflationSign / Helpers.GetVectorComponent(_node.lossyScale, _axis) : 0f); }
public bool NeedInflate(ItemsEdge itemEdge, Rect viewportWorldRect) { WidgetsAlignment itemWidgetEdge = GetItemWidgetEdge(itemEdge); float viewportEdgePosition = WidgetsAlignmentDesc.RectPositions[itemWidgetEdge](viewportWorldRect); float inflationSign = WidgetsAlignmentDesc.HeadInflationSigns[itemWidgetEdge]; float nextPositionFloat = _edgesLastPositions[itemWidgetEdge] + _spacing * inflationSign; Vector2 startPos = _node.TransformPoint(nextPositionFloat * AxisMaskDesc.AxisMasks[_axis]); float widgetEdgePosition = Helpers.GetVectorComponent(startPos, _axis); return(WidgetsAlignmentDesc.ViewportHasSpace[itemWidgetEdge](viewportEdgePosition, widgetEdgePosition)); }
public WidgetsViewport(RectTransform node, IWidgetsProvider widgetsProvider, WidgetsAlignment alignment, float spacing) { _node = node; _itemWidgetsPool = new WidgetsPool(widgetsProvider, _node); _widgets = new List <IWidget>(); _alignment = alignment; _spacing = spacing; _axis = AxisMaskDesc.WidgetsAlignmentAxis[_alignment]; _edgesLastPositions = new Dictionary <WidgetsAlignment, float>(); SetPivotAndAnchors(_node); Reset(); }
public void Deflate(ItemsEdge itemEdge) { IWidget widget = GetEdgeWidget(itemEdge); _itemWidgetsPool.ReturnWidget(widget); _widgets.Remove(widget); // Change edge last position WidgetsAlignment itemWidgetEdge = GetItemWidgetEdge(itemEdge); _edgesLastPositions[itemWidgetEdge] -= (Helpers.GetVectorComponent(widget.rectTransform.rect.size, _axis) + _spacing) * WidgetsAlignmentDesc.HeadInflationSigns[itemWidgetEdge]; }
public Vector2 GetRectEdge(Rect rect, WidgetsAlignment alignment) { return(WidgetsAlignmentDesc.RectPositions[alignment](rect) * AxisMaskDesc.AxisMasks[_axis]); }
public float GetInflationSign(ItemsEdge itemsEdge) { WidgetsAlignment alignment = GetItemWidgetEdge(itemsEdge); return(WidgetsAlignmentDesc.HeadInflationSigns[alignment]); }