// Copyright (c) 2015 - 2023 Doozy Entertainment. All Rights Reserved.
// This code can only be used under the standard Unity Asset Store End User License Agreement
// A Copy of the EULA APPENDIX 1 is available at http://unity3d.com/company/legal/as_terms
using UnityEngine;
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedType.Global
// ReSharper disable UnusedMember.Global
namespace Doozy.Runtime.Common.Extensions
{
/// Extension methods for the RectTransform class
public static class RectTransformExtensions
{
/// Convert a RectTransform to screen space coordinates
/// RectTransform to convert
/// Rect in screen space coordinates
public static Rect ToScreenSpace(this RectTransform rectTransform)
{
Vector3 lossyScale = rectTransform.lossyScale;
var size = Vector2.Scale
(
rectTransform.rect.size,
new Vector3
(
Mathf.Abs(lossyScale.x),
Mathf.Abs(lossyScale.y),
Mathf.Abs(lossyScale.z)
)
);
return new Rect((Vector2)rectTransform.position - (size * rectTransform.pivot), size);
}
/// Copies the RectTransform settings
/// Target RectTransform
/// Source RectTransform
public static RectTransform Copy(this RectTransform target, RectTransform from)
{
target.localScale = from.localScale;
target.anchorMin = from.anchorMin;
target.anchorMax = from.anchorMax;
target.pivot = from.pivot;
target.sizeDelta = from.sizeDelta;
target.anchoredPosition3D = from.anchoredPosition3D;
return target;
}
/// Makes the RectTransform match its parent size
/// Target RectTransform
/// Reset LocalScale to Vector3.one
public static RectTransform ExpandToParentSize(this RectTransform target, bool resetScaleToOne)
{
if (resetScaleToOne) target.ResetLocalScaleToOne();
target.AnchorMinToZero();
target.AnchorMaxToOne();
target.CenterPivot();
target.SizeDeltaToZero();
target.ResetAnchoredPosition3D();
target.ResetLocalPosition();
return target;
}
/// Moves the RectTransform pivot settings to its center
/// Target RectTransform
/// Reset LocalScale to Vector3.one
public static RectTransform Center(this RectTransform target, bool resetScaleToOne)
{
if (resetScaleToOne) target.ResetLocalScaleToOne();
target.AnchorMinToCenter();
target.AnchorMaxToCenter();
target.CenterPivot();
target.SizeDeltaToZero();
return target;
}
/// Resets the target's anchoredPosition3D to Vector3.zero
/// Target RectTransform
public static RectTransform ResetAnchoredPosition3D(this RectTransform target)
{
target.anchoredPosition3D = Vector3.zero;
return target;
}
/// Resets the target's localPosition to Vector3.zero
/// Target RectTransform
public static RectTransform ResetLocalPosition(this RectTransform target)
{
target.localPosition = Vector3.zero;
return target;
}
/// Resets the target's localScale to Vector3.one
/// Target RectTransform
public static RectTransform ResetLocalScaleToOne(this RectTransform target)
{
target.localScale = Vector3.one;
return target;
}
/// Resets the target's anchorMin to Vector2.zero
/// Target RectTransform
public static RectTransform AnchorMinToZero(this RectTransform target)
{
target.anchorMin = Vector2.zero;
return target;
}
/// Sets the target's anchorMin to Vector2(0.5f, 0.5f)
/// Target RectTransform
public static RectTransform AnchorMinToCenter(this RectTransform target)
{
target.anchorMin = new Vector2(0.5f, 0.5f);
return target;
}
/// Resets the target's anchorMax to Vector2.one
/// Target RectTransform
public static RectTransform AnchorMaxToOne(this RectTransform target)
{
target.anchorMax = Vector2.one;
return target;
}
/// Sets the target's anchorMax to Vector2(0.5f, 0.5f)
/// Target RectTransform
public static RectTransform AnchorMaxToCenter(this RectTransform target)
{
target.anchorMax = new Vector2(0.5f, 0.5f);
return target;
}
/// Sets the target's pivot to Vector2(0.5f, 0.5f)
/// Target RectTransform
public static RectTransform CenterPivot(this RectTransform target)
{
target.pivot = new Vector2(0.5f, 0.5f);
return target;
}
/// Resets the target's sizeDelta to Vector2.zero
/// Target RectTransform
public static RectTransform SizeDeltaToZero(this RectTransform target)
{
target.sizeDelta = Vector2.zero;
return target;
}
}
}