Beispiel #1
0
        private void GenerateLayoutRecursive(LayoutBase cycle = null)
        {
            if (isCurrent)
            {
                return;
            }
            if (!thisInitialized)
            {
                Initialize();
                thisInitialized = true;
            }
            if (cycle == null)
            {
                cycle = this;
            }
            else if (object.ReferenceEquals(cycle, this))
            {
                throw new InvalidOperationException(
                          "Infinite recursion while calculating layout"
                          );
            }
            var refLayouts = RefLayouts;

            if (refLayouts != null)
            {
                foreach (var r in refLayouts)
                {
                    r?.GenerateLayoutRecursive(cycle);
                }
            }
            GenerateLayout();
            isCurrent = true;
        }
Beispiel #2
0
        protected float GetUnitsForOffset(
            ScaleMode mode,
            float value,
            LayoutBase reference,
            Vector2Axis axis
            )
        {
            switch (mode)
            {
            case ScaleMode.ScaleNormalizedPercent:
                return(value * axis(scaledSize));

            case ScaleMode.ReferenceScalePercent:
                if (reference == null)
                {
                    goto case ScaleMode.ScaleNormalizedPercent;
                }
                return(value
                       * axis(scaledSize)
                       * axis(reference.totalScale)
                       / axis(totalScale));

            default:
                return(GetUnitsForScale(mode, value, reference, axis));
            }
        }
Beispiel #3
0
        /// Returns the size in screen units for a scale mode and a value.
        protected float GetUnitsForScale(
            ScaleMode mode,
            float value,
            LayoutBase reference,
            Vector2Axis axis
            )
        {
            switch (mode)
            {
            case ScaleMode.UnadjustedUnits:
                return(value * axis(baseScale));

            case ScaleMode.ScaleNormalizedUnits:
                return(value);

            case ScaleMode.ScaleNormalizedPercent:
                return(value * axis(unscaledSize));

            case ScaleMode.ReferenceScalePercent:
                if (reference == null)
                {
                    goto case ScaleMode.ScaleNormalizedPercent;
                }
                return(value
                       * axis(reference.totalScale)
                       * axis(unscaledSize));

            case ScaleMode.ReferenceSizePercent:
                if (reference == null)
                {
                    goto case ScaleMode.ScreenPercent;
                }
                return(value * axis(reference.scaledSize));

            case ScaleMode.ScreenPercent:
                return(value * axis(screenSize));

            case ScaleMode.DpiScaledPixels:
                return(value * axis(unitsPerDpiPixel));

            case ScaleMode.Pixels:
                return(value * axis(unitsPerPixel));

            default:
                return(0);
            }
        }
Beispiel #4
0
        protected Vector2 GetScaledSize(
            ScaleMode widthMode,
            ScaleMode heightMode,
            float width,
            float height,
            LayoutBase widthRef,
            LayoutBase heightRef
            )
        {
            var scaledWidth  = GetUnitsForScale(widthMode, width, widthRef, VectorGetX);
            var scaledHeight = GetUnitsForScale(heightMode, height, heightRef, VectorGetY);

            if (heightMode == ScaleMode.MaintainAspect)
            {
                scaledHeight = scaledWidth * unscaledSize.y / unscaledSize.x;
            }
            else if (widthMode == ScaleMode.MaintainAspect)
            {
                scaledWidth = scaledHeight * unscaledSize.x / unscaledSize.y;
            }
            return(new Vector2(scaledWidth, scaledHeight));
        }
Beispiel #5
0
        /// Returns the distance from the anchor point on this object
        /// to the object's center.
        protected static Vector2 GetDistanceToCenter(LayoutBase layout, Anchor anchor)
        {
            Vector2 extents = (layout?.scaledSize ?? screenSize) / 2;

            switch (anchor)
            {
            case Anchor.TopLeft:
                return(new Vector2(extents.x, -extents.y));

            case Anchor.TopCenter:
                return(new Vector2(0, -extents.y));

            case Anchor.TopRight:
                return(new Vector2(-extents.x, -extents.y));

            case Anchor.MiddleLeft:
                return(new Vector2(extents.x, 0));

            case Anchor.Center:
                return(Vector2.zero);

            case Anchor.MiddleRight:
                return(new Vector2(-extents.x, 0));

            case Anchor.BottomLeft:
                return(new Vector2(extents.x, extents.y));

            case Anchor.BottomCenter:
                return(new Vector2(0, extents.y));

            case Anchor.BottomRight:
                return(new Vector2(-extents.x, extents.y));

            default:
                return(Vector2.zero);
            }
        }
Beispiel #6
0
        protected static Vector2 GetAnchorPosition(LayoutBase layout, Anchor anchor)
        {
            var position = ((Vector2?)layout?.transform.position) ?? Vector2.zero;

            return(position - GetDistanceToCenter(layout, anchor));
        }
Beispiel #7
0
 public RectTransformSizer(LayoutBase obj, RectTransform rectTransform, Vector2 baseSize)
 {
     this.obj           = obj;
     this.rectTransform = rectTransform;
     this.baseSize      = baseSize;
 }
Beispiel #8
0
 public SpriteSizer(LayoutBase obj, SpriteRenderer spriteRenderer)
 {
     this.obj            = obj;
     this.spriteRenderer = spriteRenderer;
 }