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; } }
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); }