Files
Dec2017-Script-Dump/UnityEngine.UI/UI/MaskUtilities.cs
T
2026-06-04 11:42:34 +02:00

203 lines
5.0 KiB
C#

using System;
using System.Collections.Generic;
namespace UnityEngine.UI
{
// Token: 0x02000064 RID: 100
public class MaskUtilities
{
// Token: 0x0600036D RID: 877 RVA: 0x00014360 File Offset: 0x00012760
public static void Notify2DMaskStateChanged(Component mask)
{
List<Component> list = ListPool<Component>.Get();
mask.GetComponentsInChildren<Component>(list);
for (int i = 0; i < list.Count; i++)
{
if (!(list[i] == null) && !(list[i].gameObject == mask.gameObject))
{
IClippable clippable = list[i] as IClippable;
if (clippable != null)
{
clippable.RecalculateClipping();
}
}
}
ListPool<Component>.Release(list);
}
// Token: 0x0600036E RID: 878 RVA: 0x000143E8 File Offset: 0x000127E8
public static void NotifyStencilStateChanged(Component mask)
{
List<Component> list = ListPool<Component>.Get();
mask.GetComponentsInChildren<Component>(list);
for (int i = 0; i < list.Count; i++)
{
if (!(list[i] == null) && !(list[i].gameObject == mask.gameObject))
{
IMaskable maskable = list[i] as IMaskable;
if (maskable != null)
{
maskable.RecalculateMasking();
}
}
}
ListPool<Component>.Release(list);
}
// Token: 0x0600036F RID: 879 RVA: 0x00014470 File Offset: 0x00012870
public static Transform FindRootSortOverrideCanvas(Transform start)
{
List<Canvas> list = ListPool<Canvas>.Get();
start.GetComponentsInParent<Canvas>(false, list);
Canvas canvas = null;
for (int i = 0; i < list.Count; i++)
{
canvas = list[i];
if (canvas.overrideSorting)
{
break;
}
}
ListPool<Canvas>.Release(list);
return (!(canvas != null)) ? null : canvas.transform;
}
// Token: 0x06000370 RID: 880 RVA: 0x000144E4 File Offset: 0x000128E4
public static int GetStencilDepth(Transform transform, Transform stopAfter)
{
int num = 0;
int num2;
if (transform == stopAfter)
{
num2 = num;
}
else
{
Transform transform2 = transform.parent;
List<Mask> list = ListPool<Mask>.Get();
while (transform2 != null)
{
transform2.GetComponents<Mask>(list);
for (int i = 0; i < list.Count; i++)
{
if (list[i] != null && list[i].MaskEnabled() && list[i].graphic.IsActive())
{
num++;
break;
}
}
if (transform2 == stopAfter)
{
break;
}
transform2 = transform2.parent;
}
ListPool<Mask>.Release(list);
num2 = num;
}
return num2;
}
// Token: 0x06000371 RID: 881 RVA: 0x000145B8 File Offset: 0x000129B8
public static bool IsDescendantOrSelf(Transform father, Transform child)
{
bool flag;
if (father == null || child == null)
{
flag = false;
}
else if (father == child)
{
flag = true;
}
else
{
while (child.parent != null)
{
if (child.parent == father)
{
return true;
}
child = child.parent;
}
flag = false;
}
return flag;
}
// Token: 0x06000372 RID: 882 RVA: 0x00014638 File Offset: 0x00012A38
public static RectMask2D GetRectMaskForClippable(IClippable clippable)
{
List<RectMask2D> list = ListPool<RectMask2D>.Get();
List<Canvas> list2 = ListPool<Canvas>.Get();
RectMask2D rectMask2D = null;
clippable.rectTransform.GetComponentsInParent<RectMask2D>(false, list);
if (list.Count > 0)
{
for (int i = 0; i < list.Count; i++)
{
rectMask2D = list[i];
if (rectMask2D.gameObject == clippable.gameObject)
{
rectMask2D = null;
}
else
{
if (rectMask2D.isActiveAndEnabled)
{
clippable.rectTransform.GetComponentsInParent<Canvas>(false, list2);
for (int j = list2.Count - 1; j >= 0; j--)
{
if (!MaskUtilities.IsDescendantOrSelf(list2[j].transform, rectMask2D.transform) && list2[j].overrideSorting)
{
rectMask2D = null;
break;
}
}
return rectMask2D;
}
rectMask2D = null;
}
}
}
ListPool<RectMask2D>.Release(list);
ListPool<Canvas>.Release(list2);
return rectMask2D;
}
// Token: 0x06000373 RID: 883 RVA: 0x00014744 File Offset: 0x00012B44
public static void GetRectMasksForClip(RectMask2D clipper, List<RectMask2D> masks)
{
masks.Clear();
List<Canvas> list = ListPool<Canvas>.Get();
List<RectMask2D> list2 = ListPool<RectMask2D>.Get();
clipper.transform.GetComponentsInParent<RectMask2D>(false, list2);
if (list2.Count > 0)
{
clipper.transform.GetComponentsInParent<Canvas>(false, list);
for (int i = list2.Count - 1; i >= 0; i--)
{
if (list2[i].IsActive())
{
bool flag = true;
for (int j = list.Count - 1; j >= 0; j--)
{
if (!MaskUtilities.IsDescendantOrSelf(list[j].transform, list2[i].transform) && list[j].overrideSorting)
{
flag = false;
break;
}
}
if (flag)
{
masks.Add(list2[i]);
}
}
}
}
ListPool<RectMask2D>.Release(list2);
ListPool<Canvas>.Release(list);
}
}
}