You can not 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.2 KiB
130 lines
3.2 KiB
3 years ago
|
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;
|
||
|
}
|
||
|
}
|
||
|
}
|