예제 #1
0
        public static void ToNormalColor(this UISprite s)
        {
            if (s == null || s.atlas == null)
            {
                Assert.IsTrue(false);
                return;
            }
            GrayAtlas a = grayAtlas.Get(s.atlas.name());

            if (a != null)
            {
                s.atlas = a.src;
            }
        }
예제 #2
0
        public static void SetLayerOver(this UIPanel over, UIPanel[] belowPanels)
        {
            UIPanel[] overPanels = over.GetComponentsInChildren <UIPanel>(true);
            Array.Sort(overPanels, (p1, p2) => p1.depth - p2.depth);

            int maxDepth = -1;

            foreach (UIPanel p in belowPanels)
            {
                maxDepth = Math.Max(maxDepth, p.depth);
            }
            int minDepth = int.MaxValue;

            foreach (UIPanel p in overPanels)
            {
                minDepth = Math.Min(minDepth, p.depth);
            }
            if (minDepth == int.MaxValue)
            {
                minDepth = 0;
            }
            int baseDepth = Math.Max(0, maxDepth - minDepth + 1);

            Assert.IsTrue(baseDepth < 20000);
            // depth must be equal or above 100
            foreach (UIPanel p in overPanels)
            {
                                #if RQ
                p.depth = Math.Max(100, p.depth + baseDepth);
                                #else
                p.depth = p.depth + baseDepth;
                                #endif
            }

            int belowMaxQ = -1;
            foreach (UIPanel p in belowPanels)
            {
                int q = p.GetMaxRenderQueue();
                if (q >= 0)
                {
                    belowMaxQ = Math.Max(belowMaxQ, q);
                }
            }
            if (belowMaxQ >= 0)
            {
                int overMinQ = int.MaxValue;
                foreach (UIPanel p in overPanels)
                {
                    int q = p.GetMinRenderQueue();
                    if (q >= 0)
                    {
                        overMinQ = Math.Min(overMinQ, q);
                    }
                }
                int baseQ = belowMaxQ - overMinQ + 1;
                foreach (UIPanel p in overPanels)
                {
                    if (p.gameObject.activeInHierarchy && p.renderQueue != UIPanel.RenderQueue.Explicit)
                    {
                        p.renderQueue = UIPanel.RenderQueue.StartAt;
                        if (overMinQ != int.MaxValue)
                        {
                            if (baseQ > 0)
                            {
                                p.startingRenderQueue += baseQ;
                            }
                        }
                        else
                        {
                            p.startingRenderQueue = belowMaxQ + (p.depth - minDepth) * 10;                       // 10 delta per depth
                        }
                    }
                }
            }

            int maxOrder = -1;
            foreach (UIPanel p in belowPanels)
            {
                maxOrder = Math.Max(maxOrder, p.sortingOrder);
            }
            // get non-NGUI renderer
            if (!belowPanels.IsEmpty())
            {
                foreach (Renderer r in belowPanels[0].GetComponentsInChildren <Renderer>(true))
                {
                    maxOrder = Math.Max(maxOrder, r.sortingOrder);
                }
            }

            SetMinSortingOrder(over, overPanels, maxOrder);

            over.Invalidate(true);
        }