mirror of
https://github.com/Alex-Rachel/TEngine.git
synced 2025-08-14 16:51:28 +00:00
Update BehaviourSingleton.cs
This commit is contained in:
@@ -1,9 +1,29 @@
|
|||||||
using System.Collections.Generic;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace TEngine
|
namespace TEngine
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 通过LogicSys来驱动且具备Unity完整生命周期的单例(不继承MonoBehaviour)
|
/// 帧更新标签。
|
||||||
|
/// </summary>
|
||||||
|
[AttributeUsage(AttributeTargets.Class)]
|
||||||
|
public class UpdateAttribute : Attribute { }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 后帧更新标签。
|
||||||
|
/// </summary>
|
||||||
|
[AttributeUsage(AttributeTargets.Class)]
|
||||||
|
public class LateUpdateAttribute : Attribute{ }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 物理帧更新标签。
|
||||||
|
/// </summary>
|
||||||
|
[AttributeUsage(AttributeTargets.Class)]
|
||||||
|
public class FixedUpdateAttribute : Attribute{ }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 通过LogicSys来驱动且具备Unity完整生命周期的单例(不继承MonoBehaviour)。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="T"></typeparam>
|
/// <typeparam name="T"></typeparam>
|
||||||
public abstract class BehaviourSingleton<T> : BaseBehaviourSingleton where T : BaseBehaviourSingleton, new()
|
public abstract class BehaviourSingleton<T> : BaseBehaviourSingleton where T : BaseBehaviourSingleton, new()
|
||||||
@@ -53,13 +73,29 @@ namespace TEngine
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 帧更新。
|
||||||
|
/// <remarks>需要UpdateAttribute。</remarks>
|
||||||
|
/// </summary>
|
||||||
public virtual void Update()
|
public virtual void Update()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 后帧更新。
|
||||||
|
/// <remarks>需要LateUpdateAttribute。</remarks>
|
||||||
|
/// </summary>
|
||||||
public virtual void LateUpdate()
|
public virtual void LateUpdate()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 物理帧更新。
|
||||||
|
/// <remarks>需要FixedUpdateAttribute。</remarks>
|
||||||
|
/// </summary>
|
||||||
|
public virtual void FixedUpdate()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
public virtual void Destroy()
|
public virtual void Destroy()
|
||||||
{
|
{
|
||||||
@@ -84,12 +120,25 @@ namespace TEngine
|
|||||||
private readonly List<BaseBehaviourSingleton> _listStart = new List<BaseBehaviourSingleton>();
|
private readonly List<BaseBehaviourSingleton> _listStart = new List<BaseBehaviourSingleton>();
|
||||||
private readonly List<BaseBehaviourSingleton> _listUpdate = new List<BaseBehaviourSingleton>();
|
private readonly List<BaseBehaviourSingleton> _listUpdate = new List<BaseBehaviourSingleton>();
|
||||||
private readonly List<BaseBehaviourSingleton> _listLateUpdate = new List<BaseBehaviourSingleton>();
|
private readonly List<BaseBehaviourSingleton> _listLateUpdate = new List<BaseBehaviourSingleton>();
|
||||||
|
private readonly List<BaseBehaviourSingleton> _listFixedUpdate = new List<BaseBehaviourSingleton>();
|
||||||
|
|
||||||
public void RegSingleton(BaseBehaviourSingleton inst)
|
public void RegSingleton(BaseBehaviourSingleton inst)
|
||||||
{
|
{
|
||||||
Log.Assert(!_listInst.Contains(inst));
|
Log.Assert(!_listInst.Contains(inst));
|
||||||
_listInst.Add(inst);
|
_listInst.Add(inst);
|
||||||
_listStart.Add(inst);
|
_listStart.Add(inst);
|
||||||
|
if (HadAttribute<UpdateAttribute>(inst.GetType()))
|
||||||
|
{
|
||||||
|
_listUpdate.Add(inst);
|
||||||
|
}
|
||||||
|
if (HadAttribute<LateUpdateAttribute>(inst.GetType()))
|
||||||
|
{
|
||||||
|
_listLateUpdate.Add(inst);
|
||||||
|
}
|
||||||
|
if (HadAttribute<FixedUpdateAttribute>(inst.GetType()))
|
||||||
|
{
|
||||||
|
_listFixedUpdate.Add(inst);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UnRegSingleton(BaseBehaviourSingleton inst)
|
public void UnRegSingleton(BaseBehaviourSingleton inst)
|
||||||
@@ -174,6 +223,20 @@ namespace TEngine
|
|||||||
TProfiler.EndFirstSample();
|
TProfiler.EndFirstSample();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnFixedUpdate()
|
||||||
|
{
|
||||||
|
var listFixedUpdate = _listFixedUpdate;
|
||||||
|
var listFixedUpdateCnt = listFixedUpdate.Count;
|
||||||
|
for (int i = 0; i < listFixedUpdateCnt; i++)
|
||||||
|
{
|
||||||
|
var inst = listFixedUpdate[i];
|
||||||
|
|
||||||
|
TProfiler.BeginFirstSample(inst.GetType().FullName);
|
||||||
|
inst.FixedUpdate();
|
||||||
|
TProfiler.EndFirstSample();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public override void OnDestroy()
|
public override void OnDestroy()
|
||||||
{
|
{
|
||||||
@@ -208,5 +271,12 @@ namespace TEngine
|
|||||||
inst.OnDrawGizmos();
|
inst.OnDrawGizmos();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool HadAttribute<T>(Type type) where T:Attribute
|
||||||
|
{
|
||||||
|
T attribute = Attribute.GetCustomAttribute(type, typeof(T)) as T;
|
||||||
|
|
||||||
|
return attribute != null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user