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; }
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)); } }
/// 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); } }
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)); }
/// 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); } }
protected static Vector2 GetAnchorPosition(LayoutBase layout, Anchor anchor) { var position = ((Vector2?)layout?.transform.position) ?? Vector2.zero; return(position - GetDistanceToCenter(layout, anchor)); }
public RectTransformSizer(LayoutBase obj, RectTransform rectTransform, Vector2 baseSize) { this.obj = obj; this.rectTransform = rectTransform; this.baseSize = baseSize; }
public SpriteSizer(LayoutBase obj, SpriteRenderer spriteRenderer) { this.obj = obj; this.spriteRenderer = spriteRenderer; }