Update
This commit is contained in:
ALEXTANG
2022-09-06 20:15:23 +08:00
parent 7c5641a860
commit 625167430d
3 changed files with 23 additions and 24 deletions

View File

@@ -20,13 +20,6 @@ namespace TEngine.Runtime
void Release();
}
public interface IUnitySingleton
{
int GetPriority();
void OnUpdate(float elapseSeconds, float realElapseSeconds);
}
/// <summary>
/// 单例管理器(统一化持久和释放)
/// </summary>
@@ -34,7 +27,6 @@ namespace TEngine.Runtime
{
private static List<ISingleton> _iSingletonList;
private static Dictionary<string, GameObject> _gameObjects;
private static List<IUnitySingleton> _unitySingletons;
private static GameObject _root;
public static GameObject Root
{

View File

@@ -6,7 +6,7 @@ namespace TEngine.Runtime
/// 具备Unity完整生命周期的单例
/// </summary>
/// <typeparam name="T"></typeparam>
public class UnitySingleton<T> : MonoBehaviour,IUnitySingleton where T : MonoBehaviour
public class UnitySingleton<T> : MonoBehaviour,IUpdateSystem where T : MonoBehaviour
{
private static T _instance;

View File

@@ -2,55 +2,62 @@
namespace TEngine.Runtime
{
public interface IUpdateSystem
{
int GetPriority();
void OnUpdate(float elapseSeconds, float realElapseSeconds);
}
/// <summary>
/// 实现UnitySingleton的OnUpdate
/// </summary>
internal class UpdateInstance : BehaviourSingleton<UpdateInstance>
{
public List<IUnitySingleton> UnitySingletons;
public List<IUpdateSystem> UpdateSystems;
public UpdateInstance()
{
UnitySingletons = new List<IUnitySingleton>();
UpdateSystems = new List<IUpdateSystem>();
}
public void Retain(IUnitySingleton unitySingleton)
public void Retain(IUpdateSystem updateSystem)
{
if (UnitySingletons.Contains(unitySingleton))
if (UpdateSystems.Contains(updateSystem))
{
Log.Fatal($"Repeat Retain UnitySingleton{unitySingleton}");
Log.Fatal($"Repeat Retain UnitySingleton{updateSystem}");
}
else
{
UnitySingletons.Add(unitySingleton);
UpdateSystems.Add(updateSystem);
UnitySingletons.Sort((x, y) => -x.GetPriority().CompareTo(y.GetPriority()));
UpdateSystems.Sort((x, y) => -x.GetPriority().CompareTo(y.GetPriority()));
}
}
public void Release(IUnitySingleton unitySingleton)
public void Release(IUpdateSystem updateSystem)
{
if (UnitySingletons.Contains(unitySingleton))
if (UpdateSystems.Contains(updateSystem))
{
UnitySingletons.Remove(unitySingleton);
UpdateSystems.Remove(updateSystem);
}
}
public void ReleaseAll()
{
var count = UnitySingletons.Count;
for (int i = 0; i < count; i++)
var count = UpdateSystems.Count;
for (int i = count-1; i >= 0; i--)
{
Release(UnitySingletons[i]);
Release(UpdateSystems[i]);
}
}
public override void Update()
{
var count = UnitySingletons.Count;
var count = UpdateSystems.Count;
for (int i = 0; i < count; i++)
{
UnitySingletons[i].OnUpdate(UnityEngine.Time.deltaTime, UnityEngine.Time.unscaledDeltaTime);
UpdateSystems[i].OnUpdate(UnityEngine.Time.deltaTime, UnityEngine.Time.unscaledDeltaTime);
}
}