Пример #1
0
        public static void GetRectMasksForClip(NewRectMask2D clipper, List <NewRectMask2D> masks)
        {
            masks.Clear();

            var rectMaskComponents = NewListPool <NewRectMask2D> .Get();

            var canvasComponents = NewListPool <Canvas> .Get();

            clipper.GetComponentsInParent(false, rectMaskComponents);

            if (rectMaskComponents.Count > 0)
            {
                clipper.GetComponentsInParent(false, canvasComponents);
            }

            for (int i = rectMaskComponents.Count - 1; i >= 0; i--)
            {
                if (!rectMaskComponents[i].isActiveAndEnabled)
                {
                    continue;
                }

                bool canAdd = true;

                for (int j = canvasComponents.Count - 1; j >= 0; j--)
                {
                    if (canvasComponents[j].overrideSorting && IsDesendantOrSelf(canvasComponents[i].transform,
                                                                                 rectMaskComponents[i].transform))
                    {
                        canAdd = false;
                    }
                }


                if (canAdd)
                {
                    masks.Add(rectMaskComponents[i]);
                }
            }


            NewListPool <NewRectMask2D> .Release(rectMaskComponents);

            NewListPool <Canvas> .Release(canvasComponents);
        }
Пример #2
0
        public static NewRectMask2D GetRectMaskForClippable(IClippable clippable)
        {
            var rectMaskComponents = NewListPool <NewRectMask2D> .Get();

            var canvasComponents = NewListPool <Canvas> .Get();

            NewRectMask2D targetMask = null;

            clippable.rectTransform.GetComponentsInParent(false, rectMaskComponents);

            for (int i = 0; i < rectMaskComponents.Count; i++)
            {
                targetMask = rectMaskComponents[i];

                if (targetMask.gameObject == clippable.gameObject)
                {
                    continue;
                }
                if (!targetMask.isActiveAndEnabled)
                {
                    continue;
                }

                clippable.rectTransform.GetComponentsInParent(false, canvasComponents);

                for (int j = 0; j < canvasComponents.Count; j++)
                {
                    if (canvasComponents[j].overrideSorting &&
                        !IsDesendantOrSelf(canvasComponents[j].transform, targetMask.transform))
                    {
                        targetMask = null;
                        break;
                    }
                }

                return(targetMask);
            }

            NewListPool <NewRectMask2D> .Release(rectMaskComponents);

            NewListPool <Canvas> .Release(canvasComponents);

            return(targetMask);
        }