You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			130 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			130 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C#
		
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using UnityEngine;
 | |
| 
 | |
| namespace FairyGUI
 | |
| {
 | |
|     /// <summary>
 | |
|     /// 
 | |
|     /// </summary>
 | |
|     public interface EMRenderTarget
 | |
|     {
 | |
|         int EM_sortingOrder { get; }
 | |
| 
 | |
|         void EM_BeforeUpdate();
 | |
|         void EM_Update(UpdateContext context);
 | |
|         void EM_Reload();
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// 这是一个在编辑状态下渲染UI的功能类。EM=Edit Mode
 | |
|     /// </summary>
 | |
|     public class EMRenderSupport
 | |
|     {
 | |
|         /// <summary>
 | |
|         /// 
 | |
|         /// </summary>
 | |
|         public static bool orderChanged;
 | |
| 
 | |
|         static UpdateContext _updateContext;
 | |
|         static List<EMRenderTarget> _targets = new List<EMRenderTarget>();
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 
 | |
|         /// </summary>
 | |
|         public static bool packageListReady { get; private set; }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 
 | |
|         /// </summary>
 | |
|         public static bool hasTarget
 | |
|         {
 | |
|             get { return _targets.Count > 0; }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 
 | |
|         /// </summary>
 | |
|         /// <param name="value"></param>
 | |
|         public static void Add(EMRenderTarget value)
 | |
|         {
 | |
|             if (!_targets.Contains(value))
 | |
|                 _targets.Add(value);
 | |
|             orderChanged = true;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 
 | |
|         /// </summary>
 | |
|         /// <param name="value"></param>
 | |
|         public static void Remove(EMRenderTarget value)
 | |
|         {
 | |
|             _targets.Remove(value);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 由StageCamera调用
 | |
|         /// </summary>
 | |
|         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();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 当发生二进制重载时,或用户点击刷新菜单
 | |
|         /// </summary>
 | |
|         public static void Reload()
 | |
|         {
 | |
|             if (Application.isPlaying)
 | |
|                 return;
 | |
| 
 | |
|             UIConfig.ClearResourceRefs();
 | |
|             UIConfig[] configs = GameObject.FindObjectsOfType<UIConfig>();
 | |
|             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;
 | |
|         }
 | |
|     }
 | |
| }
 |