using System; using System.Collections.Generic; using UnityEngine; namespace FairyGUI { /// /// /// public interface EMRenderTarget { int EM_sortingOrder { get; } void EM_BeforeUpdate(); void EM_Update(UpdateContext context); void EM_Reload(); } /// /// 这是一个在编辑状态下渲染UI的功能类。EM=Edit Mode /// public class EMRenderSupport { /// /// /// public static bool orderChanged; static UpdateContext _updateContext; static List _targets = new List(); /// /// /// public static bool packageListReady { get; private set; } /// /// /// public static bool hasTarget { get { return _targets.Count > 0; } } /// /// /// /// public static void Add(EMRenderTarget value) { if (!_targets.Contains(value)) _targets.Add(value); orderChanged = true; } /// /// /// /// public static void Remove(EMRenderTarget value) { _targets.Remove(value); } /// /// 由StageCamera调用 /// public static void Update() { if (Application.isPlaying) return; if (_updateContext == null) _updateContext = new UpdateContext(); if (orderChanged) { _targets.Sort(CompareDepth); orderChanged = false; } int cnt = _targets.Count; for (int i = 0; i < cnt; i++) { EMRenderTarget panel = _targets[i]; panel.EM_BeforeUpdate(); } if (packageListReady) { _updateContext.Begin(); for (int i = 0; i < cnt; i++) { EMRenderTarget panel = _targets[i]; panel.EM_Update(_updateContext); } _updateContext.End(); } } /// /// 当发生二进制重载时,或用户点击刷新菜单 /// public static void Reload() { if (Application.isPlaying) return; UIConfig.ClearResourceRefs(); UIConfig[] configs = GameObject.FindObjectsOfType(); foreach (UIConfig config in configs) config.Load(); packageListReady = true; int cnt = _targets.Count; for (int i = 0; i < cnt; i++) { EMRenderTarget panel = _targets[i]; panel.EM_Reload(); } } static int CompareDepth(EMRenderTarget c1, EMRenderTarget c2) { return c1.EM_sortingOrder - c2.EM_sortingOrder; } } }